App-Kit
SEO audit (400 checks), text readability and grammar check, PDF to images, image conversion.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- HIGH
- MEDIUMseo_audit_fast에서
- LOWquota_status에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp": {
"url": "https://mcp.app-kit.dev/mcp"
}
}
}원격 엔드포인트
https://mcp.app-kit.dev/mcpstreamable-http할 수 있는 일
도구 목록
도구 (9)
🟢text_check(text, lang, layers)
Проверить текст: метрики (вода, спам, тошнота), читаемость, стоп-фразы, грамматика. Вход: text до 20000 символов, lang ru/en. Возвращает passed (обязательные пороги), метрики по слоям, вердикты (blocking=false — рекомендация), top_issues (до 5 главных проблем) и locations — координаты замечаний (offset/length) в присланном тексте. Текст не сохраняется. Бесплатно: 10 в час анонимно, 20 в час с бесплатным токеном (остаток — quota_status).
입력 스키마
{
"type": "object",
"properties": {
"text": {
"description": "Текст для проверки, до 20000 символов",
"title": "Text",
"type": "string"
},
"lang": {
"default": "ru",
"description": "Язык текста",
"enum": [
"ru",
"en"
],
"title": "Lang",
"type": "string"
},
"layers": {
"anyOf": [
{
"items": {
"enum": [
"metrics",
"readability",
"phrases",
"grammar"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Слои: metrics, readability, phrases, grammar (по умолчанию все)",
"title": "Layers"
}
},
"required": [
"text"
],
"title": "text_checkArguments"
}출력 스키마
{
"type": "object",
"properties": {
"passed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Прошёл ли текст все блокирующие пороги профиля",
"title": "Passed"
},
"lang": {
"title": "Lang",
"type": "string"
},
"layers": {
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"description": "Метрики по слоям (только числа/статусы, без фрагментов текста)",
"title": "Layers",
"type": "object"
},
"verdicts": {
"items": {
"$ref": "#/$defs/Verdict"
},
"title": "Verdicts",
"type": "array"
},
"top_issues": {
"description": "До 5 главных проблем: сначала блокирующие fail",
"items": {
"$ref": "#/$defs/Verdict"
},
"title": "Top Issues",
"type": "array"
},
"locations": {
"description": "До 10 координат замечаний (грамматика, стоп-фразы): offset/length в присланном тексте",
"items": {
"$ref": "#/$defs/IssueLocation"
},
"title": "Locations",
"type": "array"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"passed",
"lang",
"layers",
"verdicts",
"top_issues",
"quota"
],
"$defs": {
"IssueLocation": {
"description": "Где в присланном тексте замечание: только координаты, без фрагментов текста.",
"properties": {
"layer": {
"enum": [
"grammar",
"phrases"
],
"title": "Layer",
"type": "string"
},
"offset": {
"description": "Смещение в символах от начала текста",
"title": "Offset",
"type": "integer"
},
"length": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Длина фрагмента в символах (если известна)",
"title": "Length"
},
"rule": {
"description": "grammar — id правила LanguageTool; phrases — стоп-фраза из списка App-Kit",
"title": "Rule",
"type": "string"
}
},
"required": [
"layer",
"offset",
"rule"
],
"title": "IssueLocation",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
},
"Verdict": {
"properties": {
"metric": {
"title": "Metric",
"type": "string"
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Label"
},
"value": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"threshold": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Threshold"
},
"result": {
"description": "pass | fail | unknown",
"title": "Result",
"type": "string"
},
"blocking": {
"default": false,
"title": "Blocking",
"type": "boolean"
}
},
"required": [
"metric",
"result"
],
"title": "Verdict",
"type": "object"
}
},
"title": "TextCheckOut"
}🟢seo_audit_fast(url, lang)
Быстрый 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).
입력 스키마
{
"type": "object",
"properties": {
"url": {
"description": "Адрес публичного сайта, например https://example.com (аудируется корень)",
"title": "Url",
"type": "string"
},
"lang": {
"default": "ru",
"description": "Язык названий проверок",
"enum": [
"ru",
"en"
],
"title": "Lang",
"type": "string"
}
},
"required": [
"url"
],
"title": "seo_audit_fastArguments"
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"enum": [
"done",
"running",
"failed"
],
"title": "Status",
"type": "string"
},
"mode": {
"enum": [
"fast",
"full"
],
"title": "Mode",
"type": "string"
},
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "queued → crawl → analyze → report → done",
"title": "Stage"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Передайте в seo_audit_status, пока status=running",
"title": "Handle"
},
"poll_after_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Poll After S"
},
"score": {
"anyOf": [
{
"$ref": "#/$defs/Score"
},
{
"type": "null"
}
],
"default": null
},
"checks": {
"description": "Только проваленные проверки (до 100)",
"items": {
"$ref": "#/$defs/FailedCheck"
},
"title": "Checks",
"type": "array"
},
"checks_failed_total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Checks Failed Total"
},
"top_losses": {
"description": "До 5 проверок с наибольшей потерей балла",
"items": {
"$ref": "#/$defs/Loss"
},
"title": "Top Losses",
"type": "array"
},
"report_link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "PDF-отчёт — только по ключу App-Kit API",
"title": "Report Link"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"status",
"mode",
"quota"
],
"$defs": {
"FailedCheck": {
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group"
},
"priority": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"status": {
"title": "Status",
"type": "string"
}
},
"required": [
"id",
"status"
],
"title": "FailedCheck",
"type": "object"
},
"Loss": {
"properties": {
"check_id": {
"title": "Check Id",
"type": "string"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group"
},
"priority": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"lost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Потерянный вес проверки",
"title": "Lost"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Название проверки из канона App-Kit (не текст страницы)",
"title": "Title"
}
},
"required": [
"check_id"
],
"title": "Loss",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
},
"Score": {
"properties": {
"overall": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Overall"
},
"groups": {
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"description": "Оценка 0–100 по группам канона",
"title": "Groups",
"type": "object"
}
},
"required": [
"overall",
"groups"
],
"title": "Score",
"type": "object"
}
},
"title": "SeoAuditOut"
}🟢seo_audit_status(handle)
Статус и результат SEO-аудита по handle из seo_audit_fast / seo_audit_full_start. Бесплатно, квоту не тратит. Пока status=running — повторите через poll_after_s секунд. handle действует 60 мин и только для того, кто запустил аудит.
입력 스키마
{
"type": "object",
"properties": {
"handle": {
"description": "handle из seo_audit_fast / seo_audit_full_start",
"title": "Handle",
"type": "string"
}
},
"required": [
"handle"
],
"title": "seo_audit_statusArguments"
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"enum": [
"done",
"running",
"failed"
],
"title": "Status",
"type": "string"
},
"mode": {
"enum": [
"fast",
"full"
],
"title": "Mode",
"type": "string"
},
"stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "queued → crawl → analyze → report → done",
"title": "Stage"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Передайте в seo_audit_status, пока status=running",
"title": "Handle"
},
"poll_after_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Poll After S"
},
"score": {
"anyOf": [
{
"$ref": "#/$defs/Score"
},
{
"type": "null"
}
],
"default": null
},
"checks": {
"description": "Только проваленные проверки (до 100)",
"items": {
"$ref": "#/$defs/FailedCheck"
},
"title": "Checks",
"type": "array"
},
"checks_failed_total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Checks Failed Total"
},
"top_losses": {
"description": "До 5 проверок с наибольшей потерей балла",
"items": {
"$ref": "#/$defs/Loss"
},
"title": "Top Losses",
"type": "array"
},
"report_link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "PDF-отчёт — только по ключу App-Kit API",
"title": "Report Link"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"status",
"mode",
"quota"
],
"$defs": {
"FailedCheck": {
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group"
},
"priority": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"status": {
"title": "Status",
"type": "string"
}
},
"required": [
"id",
"status"
],
"title": "FailedCheck",
"type": "object"
},
"Loss": {
"properties": {
"check_id": {
"title": "Check Id",
"type": "string"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Group"
},
"priority": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"lost": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Потерянный вес проверки",
"title": "Lost"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Название проверки из канона App-Kit (не текст страницы)",
"title": "Title"
}
},
"required": [
"check_id"
],
"title": "Loss",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
},
"Score": {
"properties": {
"overall": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Overall"
},
"groups": {
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"description": "Оценка 0–100 по группам канона",
"title": "Groups",
"type": "object"
}
},
"required": [
"overall",
"groups"
],
"title": "Score",
"type": "object"
}
},
"title": "SeoAuditOut"
}🟢pdf_to_images(source_url, upload_id, data_base64, format, dpi, ...)
Конвертировать 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).
입력 스키마
{
"type": "object",
"properties": {
"source_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Публичный URL файла (шлюз скачает сам). Основной путь для Claude.ai",
"title": "Source Url"
},
"upload_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "upload_id из create_upload (после PUT файла)",
"title": "Upload Id"
},
"data_base64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Файл в base64 — только для маленьких файлов (до 512 КБ)",
"title": "Data Base64"
},
"format": {
"default": "png",
"description": "Формат страниц",
"enum": [
"png",
"jpeg",
"webp"
],
"title": "Format",
"type": "string"
},
"dpi": {
"default": 150,
"description": "Разрешение 72–300",
"maximum": 300,
"minimum": 72,
"title": "Dpi",
"type": "integer"
},
"first_page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Первая страница (с 1)",
"title": "First Page"
},
"last_page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Последняя страница",
"title": "Last Page"
}
},
"title": "pdf_to_imagesArguments"
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"enum": [
"done",
"running"
],
"title": "Status",
"type": "string"
},
"tool": {
"title": "Tool",
"type": "string"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Передайте в conversion_status, пока status=running",
"title": "Handle"
},
"poll_after_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Poll After S"
},
"pages": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Число выходных файлов/страниц",
"title": "Pages"
},
"files": {
"items": {
"$ref": "#/$defs/OutFile"
},
"title": "Files",
"type": "array"
},
"bytes_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes Out"
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "До какого момента действуют ссылки (UTC)",
"title": "Expires At"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"status",
"tool",
"quota"
],
"$defs": {
"OutFile": {
"properties": {
"n": {
"description": "Номер выхода с 1 (страница/файл)",
"title": "N",
"type": "integer"
},
"url": {
"description": "Ссылка на скачивание (действует до expires_at; после скачивания файлы удаляются)",
"title": "Url",
"type": "string"
},
"content_type": {
"title": "Content Type",
"type": "string"
},
"filename": {
"title": "Filename",
"type": "string"
},
"bytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes"
}
},
"required": [
"n",
"url",
"content_type",
"filename"
],
"title": "OutFile",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
}
},
"title": "ConversionOut"
}🟢images_to_pdf(source_urls, upload_ids, page_size)
Собрать картинки в один 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).
입력 스키마
{
"type": "object",
"properties": {
"source_urls": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Публичные URL картинок, по порядку страниц",
"title": "Source Urls"
},
"upload_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "upload_id картинок из create_upload, по порядку",
"title": "Upload Ids"
},
"page_size": {
"anyOf": [
{
"enum": [
"A4",
"Letter"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Размер страницы; не задан — по размеру картинки",
"title": "Page Size"
}
},
"title": "images_to_pdfArguments"
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"enum": [
"done",
"running"
],
"title": "Status",
"type": "string"
},
"tool": {
"title": "Tool",
"type": "string"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Передайте в conversion_status, пока status=running",
"title": "Handle"
},
"poll_after_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Poll After S"
},
"pages": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Число выходных файлов/страниц",
"title": "Pages"
},
"files": {
"items": {
"$ref": "#/$defs/OutFile"
},
"title": "Files",
"type": "array"
},
"bytes_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes Out"
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "До какого момента действуют ссылки (UTC)",
"title": "Expires At"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"status",
"tool",
"quota"
],
"$defs": {
"OutFile": {
"properties": {
"n": {
"description": "Номер выхода с 1 (страница/файл)",
"title": "N",
"type": "integer"
},
"url": {
"description": "Ссылка на скачивание (действует до expires_at; после скачивания файлы удаляются)",
"title": "Url",
"type": "string"
},
"content_type": {
"title": "Content Type",
"type": "string"
},
"filename": {
"title": "Filename",
"type": "string"
},
"bytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes"
}
},
"required": [
"n",
"url",
"content_type",
"filename"
],
"title": "OutFile",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
}
},
"title": "ConversionOut"
}🟢image_convert(target_format, source_url, upload_id, data_base64, quality, ...)
Сменить формат картинки: 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).
입력 스키마
{
"type": "object",
"properties": {
"target_format": {
"description": "Целевой формат",
"enum": [
"png",
"jpeg",
"webp",
"bmp",
"tiff",
"gif"
],
"title": "Target Format",
"type": "string"
},
"source_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Публичный URL файла (шлюз скачает сам). Основной путь для Claude.ai",
"title": "Source Url"
},
"upload_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "upload_id из create_upload (после PUT файла)",
"title": "Upload Id"
},
"data_base64": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Файл в base64 — только для маленьких файлов (до 512 КБ)",
"title": "Data Base64"
},
"quality": {
"default": 90,
"description": "Качество 1–100 (jpeg/webp)",
"maximum": 100,
"minimum": 1,
"title": "Quality",
"type": "integer"
},
"max_dim": {
"anyOf": [
{
"maximum": 10000,
"minimum": 16,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Уменьшить длинную сторону до N px",
"title": "Max Dim"
}
},
"required": [
"target_format"
],
"title": "image_convertArguments"
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"enum": [
"done",
"running"
],
"title": "Status",
"type": "string"
},
"tool": {
"title": "Tool",
"type": "string"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Передайте в conversion_status, пока status=running",
"title": "Handle"
},
"poll_after_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Poll After S"
},
"pages": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Число выходных файлов/страниц",
"title": "Pages"
},
"files": {
"items": {
"$ref": "#/$defs/OutFile"
},
"title": "Files",
"type": "array"
},
"bytes_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes Out"
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "До какого момента действуют ссылки (UTC)",
"title": "Expires At"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"status",
"tool",
"quota"
],
"$defs": {
"OutFile": {
"properties": {
"n": {
"description": "Номер выхода с 1 (страница/файл)",
"title": "N",
"type": "integer"
},
"url": {
"description": "Ссылка на скачивание (действует до expires_at; после скачивания файлы удаляются)",
"title": "Url",
"type": "string"
},
"content_type": {
"title": "Content Type",
"type": "string"
},
"filename": {
"title": "Filename",
"type": "string"
},
"bytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes"
}
},
"required": [
"n",
"url",
"content_type",
"filename"
],
"title": "OutFile",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
}
},
"title": "ConversionOut"
}🟢conversion_status(handle)
Статус и результат конвертации по handle из pdf_to_images / images_to_pdf / image_convert. Бесплатно, квоту не тратит. Пока status=running — повторите через poll_after_s секунд. handle действует 1 час и только для того, кто запустил конвертацию.
입력 스키마
{
"type": "object",
"properties": {
"handle": {
"description": "handle из pdf_to_images / images_to_pdf / image_convert",
"title": "Handle",
"type": "string"
}
},
"required": [
"handle"
],
"title": "conversion_statusArguments"
}출력 스키마
{
"type": "object",
"properties": {
"status": {
"enum": [
"done",
"running"
],
"title": "Status",
"type": "string"
},
"tool": {
"title": "Tool",
"type": "string"
},
"handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Передайте в conversion_status, пока status=running",
"title": "Handle"
},
"poll_after_s": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Poll After S"
},
"pages": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Число выходных файлов/страниц",
"title": "Pages"
},
"files": {
"items": {
"$ref": "#/$defs/OutFile"
},
"title": "Files",
"type": "array"
},
"bytes_out": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes Out"
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "До какого момента действуют ссылки (UTC)",
"title": "Expires At"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"status",
"tool",
"quota"
],
"$defs": {
"OutFile": {
"properties": {
"n": {
"description": "Номер выхода с 1 (страница/файл)",
"title": "N",
"type": "integer"
},
"url": {
"description": "Ссылка на скачивание (действует до expires_at; после скачивания файлы удаляются)",
"title": "Url",
"type": "string"
},
"content_type": {
"title": "Content Type",
"type": "string"
},
"filename": {
"title": "Filename",
"type": "string"
},
"bytes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Bytes"
}
},
"required": [
"n",
"url",
"content_type",
"filename"
],
"title": "OutFile",
"type": "object"
},
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
}
},
"title": "ConversionOut"
}🟢create_upload(filename, size, content_type)
Создать одноразовую ссылку загрузки файла (для клиентов с доступом к локальным файлам: Claude Code, Cursor). Вернёт upload_id, put_url и команду curl: загрузите файл одним PUT (до 20 МБ, за 10 мин), затем передайте upload_id в файловый tool. Один upload_id — один вызов. Файл с публичного адреса передавайте сразу как source_url, без загрузки. Бесплатно: 10 в час анонимно, 30 в час с бесплатным токеном.
입력 스키마
{
"type": "object",
"properties": {
"filename": {
"description": "Имя файла, например report.pdf",
"maxLength": 200,
"title": "Filename",
"type": "string"
},
"size": {
"description": "Размер файла в байтах",
"exclusiveMinimum": 0,
"title": "Size",
"type": "integer"
},
"content_type": {
"default": "application/octet-stream",
"description": "MIME-тип, например application/pdf или image/png",
"title": "Content Type",
"type": "string"
}
},
"required": [
"filename",
"size"
],
"title": "create_uploadArguments"
}출력 스키마
{
"type": "object",
"properties": {
"upload_id": {
"description": "Передайте в pdf_to_images / images_to_pdf / image_convert / image_compress",
"title": "Upload Id",
"type": "string"
},
"put_url": {
"description": "Куда загрузить файл одним PUT (тело — сырые байты файла)",
"title": "Put Url",
"type": "string"
},
"expires_at": {
"description": "До какого момента нужно загрузить и использовать файл (UTC)",
"title": "Expires At",
"type": "string"
},
"max_bytes": {
"title": "Max Bytes",
"type": "integer"
},
"curl": {
"description": "Готовая команда загрузки",
"title": "Curl",
"type": "string"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"upload_id",
"put_url",
"expires_at",
"max_bytes",
"curl",
"quota"
],
"$defs": {
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
}
},
"title": "CreateUploadOut"
}🟢quota_status
Показать уровень доступа и остатки бесплатных лимитов по каждому tool. Уровни: L0 — аноним, L1 — бесплатный токен (app-kit.dev/mcp), L3 — ключ App-Kit API. Бесплатно, квоту не тратит.
입력 스키마
{
"type": "object",
"properties": {},
"title": "quota_statusArguments"
}출력 스키마
{
"type": "object",
"properties": {
"tier": {
"title": "Tier",
"type": "string"
},
"tools": {
"items": {
"$ref": "#/$defs/ToolQuota"
},
"title": "Tools",
"type": "array"
},
"upgrade_url": {
"title": "Upgrade Url",
"type": "string"
},
"quota": {
"$ref": "#/$defs/Quota"
}
},
"required": [
"tier",
"tools",
"upgrade_url",
"quota"
],
"$defs": {
"Quota": {
"properties": {
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Сколько вызовов осталось в самом узком окне; null — без лимита",
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Когда окно сбросится (UTC, ISO 8601)",
"title": "Reset At"
},
"tier": {
"description": "Уровень доступа: L0 аноним, L1 бесплатный токен, L3 ключ API",
"title": "Tier",
"type": "string"
},
"upgrade_url": {
"description": "Где получить бесплатный токен или ключ",
"title": "Upgrade Url",
"type": "string"
},
"domain_remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Сколько аудитов этого домена осталось на сутки (только seo-audit); null — не применимо",
"title": "Domain Remaining"
}
},
"required": [
"remaining",
"reset_at",
"tier",
"upgrade_url"
],
"title": "Quota",
"type": "object"
},
"ToolQuota": {
"properties": {
"tool": {
"title": "Tool",
"type": "string"
},
"available": {
"description": "Доступен ли tool на текущем уровне",
"title": "Available",
"type": "boolean"
},
"remaining": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Remaining"
},
"reset_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reset At"
},
"limits": {
"additionalProperties": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
]
},
"description": "Лимиты уровня: per_hour, per_day, global_per_day, domain_per_day",
"title": "Limits",
"type": "object"
}
},
"required": [
"tool",
"available",
"remaining",
"reset_at",
"limits"
],
"title": "ToolQuota",
"type": "object"
}
},
"title": "QuotaStatusOut"
}커뮤니티
증거