# App-Kit

> SEO audit (400 checks), text readability and grammar check, PDF to images, image conversion.

- name: io.github.app-kit-dev/mcp
- version: 0.1.3
- connection class: R0 (autonomous)
- trust: 97/100
- quality: 96/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.app-kit-dev%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/io.github.app-kit-dev%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "app-kit-dev": {
      "type": "http",
      "url": "https://mcp.app-kit.dev/mcp",
      "headers": {
        "Authorization": "Bearer ${APP_KIT_DEV_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${APP_KIT_DEV_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 99
- freshness: 100
- provenance: 90
- drivers: +repository +namespace-matches-repo +website +reachable +uptime-97% +updated-15d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 96/100 (strong)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 9 of 9 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 2,364 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 9, about 2,364 tokens to load them all
- tool set hash: 990b7cda0cb9f048362e2b952f68b36f
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.app-kit-dev/mcp.svg)](https://protogrid.dev/servers/io.github.app-kit-dev/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.app-kit.dev/mcp (streamable-http, auth none, reachable true, uptime30d 0.9655172)

## Packages

_none_

## Tools (9)

- `conversion_status`: Статус и результат конвертации по handle из pdf_to_images / images_to_pdf / image_convert.
Бесплатно, квоту не тратит. Пока status=running — повторите через poll_after_s секунд.
handle действует 1 час и только для того, кто запустил конвертацию.
- `create_upload`: Создать одноразовую ссылку загрузки файла (для клиентов с доступом к локальным файлам: Claude Code, Cursor).

Вернёт upload_id, put_url и команду curl: загрузите файл одним PUT (до 20 МБ,
за 10 мин), затем передайте upload_id в файловый tool. Один upload_id — один вызов.
Файл с публичного адреса передавайте сразу как source_url, без загрузки.
Бесплатно: 10 в час анонимно, 30 в час с бесплатным токеном.
- `image_convert`: Сменить формат картинки: target_format png/jpeg/webp/bmp/tiff/gif, quality 1–100, max_dim
(уменьшить длинную сторону). Файл до 20 МБ. Для avif и максимального сжатия — image_compress.
Вход — ровно один: source_url (публичный URL, шлюз скачает сам), upload_id (create_upload → PUT) или data_base64 (до 512 КБ).
Результат — ссылки на скачивание (resource_link, действуют 10 мин; когда скачаны все файлы задания, они удаляются) и превью первой картинки. Если за 60 с не готово — status=running и handle: зовите conversion_status(handle).
Бесплатно: 5 в час анонимно, 20 в час с бесплатным токеном (остаток — quota_status).
- `images_to_pdf`: Собрать картинки в один PDF (по картинке на страницу), page_size A4/Letter или по размеру картинки.
Вход: source_urls[] или upload_ids[] — до 20 файлов, каждый до 20 МБ.
Результат — ссылки на скачивание (resource_link, действуют 10 мин; когда скачаны все файлы задания, они удаляются) и превью первой картинки. Если за 60 с не готово — status=running и handle: зовите conversion_status(handle).
Бесплатно: 3 в час анонимно, 10 в час с бесплатным токеном (остаток — quota_status).
- `pdf_to_images`: Конвертировать PDF в картинки (по странице на файл): format png/jpeg/webp, dpi 72–300,
first_page/last_page. PDF до 20 МБ и до 20 страниц.
Вход — ровно один: source_url (публичный URL, шлюз скачает сам), upload_id (create_upload → PUT) или data_base64 (до 512 КБ).
Результат — ссылки на скачивание (resource_link, действуют 10 мин; когда скачаны все файлы задания, они удаляются) и превью первой картинки. Если за 60 с не готово — status=running и handle: зовите conversion_status(handle).
Бесплатно: 3 в час анонимно, 10 в час с бесплатным токеном (остаток — quota_status).
- `quota_status`: Показать уровень доступа и остатки бесплатных лимитов по каждому tool.

Уровни: L0 — аноним, L1 — бесплатный токен (app-kit.dev/mcp), L3 — ключ App-Kit API. Бесплатно, квоту не тратит.
- `seo_audit_fast`: Быстрый SEO-аудит сайта (до 10 страниц): оценка 0–100 по группам канона, проваленные проверки, топ-5 потерь.

Аудируется корень сайта: путь и параметры URL отбрасываются (https://site.ru/page?x=1 → https://site.ru/).
Ждёт результат до 60 с, присылая progress. Если не успел — вернёт status=running
и handle: тогда вызовите seo_audit_status(handle) через poll_after_s секунд, пока status=running.
Бесплатно: 5 в час анонимно, 10 в час
с бесплатным токеном; один домен — до 20 аудитов в сутки (остаток — quota_status).
- `seo_audit_status`: Статус и результат SEO-аудита по handle из seo_audit_fast / seo_audit_full_start. Бесплатно, квоту не тратит.

Пока status=running — повторите через poll_after_s секунд. handle действует
60 мин и только для того, кто запустил аудит.
- `text_check`: Проверить текст: метрики (вода, спам, тошнота), читаемость, стоп-фразы, грамматика.

Вход: text до 20000 символов, lang ru/en. Возвращает passed (обязательные пороги),
метрики по слоям, вердикты (blocking=false — рекомендация), top_issues (до 5 главных проблем)
и locations — координаты замечаний (offset/length) в присланном тексте. Текст не сохраняется.
Бесплатно: 10 в час анонимно, 20 в час с бесплатным токеном (остаток — quota_status).
