App-Kit

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

我該用這個嗎

品質與安全性

A
說明品質
97%
結構描述完整度
84%
命名品質
82%
汙染風險
80%
權限相符程度
100%
協定合規性
100%

發現項目(3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domain在 seo_audit_fast 中
  • LOWTool 'quota_status' description lacks action verb在 quota_status 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~9,353Token(工具定義)
~8.8 KB典型回應大小
顯著的注意力影響(128k 上下文的 7.31%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `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"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本9 個工具