seo-factory-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@seo-factory-mcppublish an article about SEO best practices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
seo-factory-mcp
MCP-сервер + скиллы для Claude Code: SEO контент-фабрика и цикл роста блога — без сервера и крона, агент запускается когда вы просите.
Работает с любым сайтом, реализующим zaytsv-совместимый article-API
(см. контракт):
переписали клон под другую тематику, оставили эндпоинты — подключается одной
командой add_site. Сайтов может быть несколько.
📝 Публикация с валидацией — errors блокируют, warnings предупреждают: FAQ-секция (FAQPage-разметка), обложка первой картинкой (переживает PUT), title ≤60, description ≤160, внутренние ссылки
🔗 Перелинковка — тематический скоринг (тот же, что виджет «Читайте также» на сайте): статьи-сироты без входящих ссылок + доноры, готовые markdown-сниппеты
🔍 Майнинг «второй страницы» — сопоставление запросов Яндекс.Вебмастера со статьями: что дожать, что написать (пара к MCP yandex-marketing)
🧾 Контент-аудит — без FAQ, короткие, без обложки, мало ссылок
📦 Без зависимостей — чистый Node ≥18, ставится и запускается сразу
Установка
Вариант A — плагин Claude Code (рекомендуется: тулы + скиллы-плейбуки):
/plugin marketplace add skiddgoddamn/seo-factory-mcp
/plugin install seo-factory@seo-factoryВариант B — любой MCP-клиент через npx (только тулы, без скиллов) — см. examples/.mcp.json.
Related MCP server: grain-seo-mcp
Подключение сайта
Откройте
<ваш-сайт>/articles/api, создайте токен (видzmcp_…, показывается один раз).Скажите агенту: «подключи сайт https://ваш-сайт.ru с токеном zmcp_…» — он вызовет
add_site(валидирует контракт и токен живыми запросами; невалидное не сохраняется).Конфиг:
~/.seo-factory-mcp/config.json(несколько сайтов, дефолтный,articlePathдля блога не на/articles,yandexHostдля цикла роста,hiddenTagsдля скрытых тем).
Быстрый старт без add_site: env SEO_FACTORY_BASE_URL (+ SEO_FACTORY_TOKEN).
Read-only тулы (аудиты, списки, подбор ссылок) работают и вовсе без токена.
Использование
напиши и опубликуй статью про выбор CRM для малого бизнеса
Скилл seo-content-factory проверит дубли, соберёт перелинковку, напишет текст с FAQ и обложкой, провалидирует и опубликует.
что дожать в блоге по данным поиска?
Скилл seo-growth-loop возьмёт запросы позиций 8–30 из Вебмастера (если подключён yandex-marketing MCP), найдёт сирот, соберёт приоритизированный план и исполнит.
Тулы (13)
Тул | Что делает |
| статус конфига и живой auth-probe по всем сайтам + онбординг |
| добавить/обновить сайт (живая валидация; alias, articlePath, yandexHost, hiddenTags) |
| лёгкий список с фильтрами (tag/query), скрытые помечаются |
| полная статья по slug (id для update/delete — в ответе) |
| валидация → POST; финальный slug/URL из ответа |
| resolve по slug → PUT; ловит затирание обложки; 403-готча |
| ⚠️ confirm:true; предупреждает: IndexNow об удалении не узнаёт |
| картинка → URL (вставить |
| офлайн-линтер: errors/warnings/facts |
| статьи-сироты + доноры (граф «Читайте также») |
| аудит полных тел: FAQ/длина/обложка/ссылки |
| тематически близкие + готовые сниппеты перелинковки |
| запросы Вебмастера → «дожать slug» / «написать новую» |
Большие входы/выходы — через файлы (contentFile, queriesFile, saveToFile),
чтобы не гнать мегабайты через контекст модели.
Сосуществование с zaytsv-mcp
У zaytsv-mcp есть простые article_*
тулы на тот же API. Если установлены оба плагина — для статей предпочитайте
seo-factory: здесь валидация, защита обложки от PUT-затирания и перелинковка;
article_* в zaytsv-mcp остаются для быстрых правок без SEO-обвязки.
Разработка
npm run check # синтаксис всех .mjs
npm test # 18 юнитов (node --test) + smoke по stdioТесты уводят конфиг в temp через SEO_FACTORY_CONFIG_DIR — живой
~/.seo-factory-mcp/config.json не трогается.
Публикация: тег vX.Y.Z → GitHub Actions (ассерт синка версий → тесты →
npm publish --provenance).
Безопасность
Токен
zmcp_…даёт полный доступ к аккаунту сайта (не только статьи). Не коммитьте его; в конфигах клиентов храните ссылку${SEO_FACTORY_TOKEN}, не значение.Файл конфига пишется с mode 0600 (на Windows это no-op — при необходимости ограничьте доступ ACL).
add_siteне сохраняет токен, не прошедший живую проверку; отзыв — на<сайт>/articles/api.
Лицензия
MIT
Available Tools
13 toolsadd_siteA
Добавить/обновить сайт в конфиге (существующий alias перезаписывается — так ротируется токен). Валидирует живьём: GET /api/articles/list (сайт реализует контракт) и, если передан token, GET /api/account/mcp-tokens (токен жив). Невалидное НЕ сохраняется. Первый сайт становится дефолтным. yandexHost принимает и URL, и host_id Вебмастера (https:site.ru:443 — двоеточия не опечатка), нормализуется сам. hiddenTags — темы, скрытые на самом сайте (напр. VPN на zaytsv.ru из-за РКН): исключаются из перелинковки/аудитов.
| Name | Required | Description | Default |
|---|---|---|---|
| alias | Yes | Короткое имя сайта, напр. zaytsv | |
| token | No | PAT вида zmcp_... с <baseUrl>/articles/api. Можно опустить — read-only тулы работают без него | |
| baseUrl | Yes | https://site.ru (без хвостового /) | |
| default | No | Сделать сайт дефолтным | |
| hiddenTags | No | Теги/темы, скрытые на сайте (статьи отдаются API, но 404 для посетителей). Для zaytsv.ru: ["vpn","vless"] — фронт прячет обе темы | |
| yandexHost | No | host_id Яндекс.Вебмастера или просто URL — для скилла seo-growth-loop | |
| articlePath | No | Публичный префикс статей, по умолчанию /articles | |
| metrikaCounter | No | Номер счётчика Метрики (для скиллов) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses overwriting, live validation, invalid not saved, first becomes default, yandexHost normalization, hiddenTags exclusion. This is thorough, though could mention side effects like token rotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is efficient, front-loading purpose and key behaviors. However, it's a single dense paragraph; breaking into sentences would improve readability. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no output schema, description covers validation, default behavior, and param nuances well. But it lacks details on return value or confirmation message, which would be helpful for an agent invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds value by explaining yandexHost accepts URL or host_id, hiddenTags meaning, and token optionality for read-only. This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Add/update a site in the config', specifies verb and resource, and distinguishes from sibling tools by explaining overwrite, validation, and default behavior. No other sibling tool adds sites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides clear context for when to use (to add or update a site), including validation rules and token requirement. However, it does not explicitly mention when not to use or list alternatives, though sibling tools are mostly unrelated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_contentA
Контент-аудит по ПОЛНЫМ телам (GET /api/articles/all — тяжёлый, на 400+ статьях мегабайты: всегда передавай saveToFile). По каждой статье: есть ли «## FAQ» (≥2 пар), длина < minWords, title>60, нет картинки-обложки в теле (уязвима к PUT-готче), <2 внутренних ссылок. В чат — сводка с приоритетами, полный список — в файл.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| minWords | No | Порог «короткой» статьи (default 300) | |
| saveToFile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: it is heavy, requires 'saveToFile', notes a vulnerability ('PUT-готч') regarding cover images, and explains output format (summary in chat, full list to file). This is comprehensive and goes beyond minimal expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, somewhat dense paragraph that efficiently conveys purpose and details. It is front-loaded with the main action, but could benefit from minor restructuring for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and three parameters, the description adequately covers what the tool does and returns (summary and file). It is sufficiently complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), but the description adds meaning to all parameters: it explains 'minWords' as a threshold for short articles, and 'saveToFile' for output file. 'site' is not detailed but its role is implied. This compensates for the schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool performs a content audit on full article bodies, listing specific checks (FAQ section, length, title, image, internal links). It distinguishes itself from sibling tools like 'audit_orphans' by its specific scope and focus on full content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use the tool by noting that it is heavy and requires the 'saveToFile' parameter. It implies that this is for full content audits, but does not explicitly exclude other scenarios or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_orphansA
Статьи-сироты: на кого не ссылается ни одна «Читайте также» (тот же тематический скоринг, что на фронте: теги ×3 + слова заголовка ×1; count = размер блока на сайте, по умолчанию 3). Сирота = поисковик считает страницу неважной. К каждой сироте — до 2 статей-доноров, куда добавить входящую ссылку. Скрытые на сайте статьи (hiddenTags) исключены из графа. На большом сайте — saveToFile.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| count | No | Число ссылок в блоке «Читайте также» на сайте (default 3) — влияет на граф | |
| saveToFile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description effectively conveys behavioral traits: finds orphans using thematic scoring, excludes hidden articles, and optionally saves results to file for large sites. However, it does not specify whether the tool modifies data or just reports.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph with essential information: purpose, scoring, defaults, and options. No wasted words, but could be more structured for easier reading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the main functionality including scoring and hidden article exclusion, but lacks clarity on output format (list of orphans with donor articles) and whether the tool executes link additions or only suggests them. No output schema exacerbates this gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 33% (only 'count' has a description). The description adds context for 'count' (affects graph) and 'saveToFile' (for large sites), but does not explain the 'site' parameter. This partially compensates for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states tool audits orphan articles (those with no 'Also read' references) and details the scoring method. It distinguishes itself from siblings like 'audit_content' and 'suggest_links' by focusing specifically on orphans and donor suggestions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'suggest_links' or 'audit_content'. Description implies usage for improving internal linking but does not provide context for when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_articleA
⚠️ Удалить статью (DELETE /api/articles/{id}; resolve по slug). Требует confirm:true. 404 — нет статьи, 403 — чужая (админ-аккаунт может удалять чужие). После удаления IndexNow НЕ уведомляется — URL останется в индексе; при необходимости снять через Вебмастер.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| site | No | ||
| slug | No | ||
| confirm | No | Обязательно true — операция необратима |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses important behavioral traits: the operation is irreversible (confirm), permission checks (403 for non-owner), and that IndexNow is not notified, leaving the URL in the index. This goes beyond basic deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with a warning emoji and verb. It conveys key information in a few sentences without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers the essential aspects: purpose, required parameter (confirm), error handling, and side effect (IndexNow). It lacks return value explanation but that is acceptable without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only confirm has a description). The description explains that slug is used for resolution and that confirm must be true, but does not clarify id or site parameters. This leaves ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Удалить статью') and specifies the HTTP method and resolution by slug. It distinguishes from siblings like update_article and publish_article.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes critical usage conditions: requires confirm:true, error codes for 404 and 403, and notes that admin accounts can delete others' articles. However, it does not explicitly compare to sibling tools for when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_articleA
Полная статья по slug (публичный GET /api/articles/by-slug/{slug}): title, content (Markdown), excerpt, coverImage, tags, viewCount, id (нужен для update/delete), даты (LocalDateTime без таймзоны). Для больших статей — saveToFile.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| slug | Yes | ||
| saveToFile | No | Путь: записать статью (JSON) на диск, в чат — сводка |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It mentions it's a public GET endpoint and that id is needed for update/delete, but does not discuss rate limits, authentication details, or side effects beyond saving to file. Adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the main purpose and lists key fields. It is concise with no wasted words, though it could benefit from slight structuring for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists many returned fields but not all. It mentions dates but not their format. The site parameter is missing. The saveToFile hint for large articles adds practical guidance. Overall, moderately complete but with a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies the slug parameter (used as identifier) and the saveToFile parameter (path to write JSON, returning summary in chat). However, the site parameter is not explained, and schema description coverage is only 33%. The description partially compensates for low schema coverage but misses one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves the full article by slug, listing the fields returned (title, content, excerpt, etc.) and distinguishing it from sibling tools like delete_article and update_article by mentioning that the returned id is needed for those operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fetching full article content by slug, but does not explicitly state when not to use it or offer alternatives. Context from sibling tool names like list_articles suggests when to use those, but the description itself lacks direct guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_articlesA
Лёгкий список статей сайта (GET /api/articles/list — без content; поля: id, slug, title, excerpt, coverImage, tags, viewCount, authorName, createdAt; updatedAt там НЕТ). Фильтры на клиенте: tag (вхождение в теги, без регистра), query (подстрока заголовка). Скрытые на сайте статьи помечаются hidden:true. Пагинации на сервере нет — приходит всё; на большом сайте передай saveToFile.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| site | No | Алиас сайта (по умолчанию — дефолтный) | |
| query | No | ||
| saveToFile | No | Путь: полный JSON на диск, в чат — сводка |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must cover all behavioral traits. It discloses that the tool returns a list without content, includes hidden articles marked as hidden:true, and explains client-side filtering and lack of server pagination. However, it does not explicitly state read-only or safety implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that efficiently conveys purpose, filtering, and limitations. It is front-loaded with the main purpose and avoids redundancy, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description adequately covers what the tool returns, how filtering works, pagination behavior, and the saveToFile feature. It lacks discussion of error handling or authentication, but for a simple list tool this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 50% description coverage; the description adds value for 'tag' and 'query' by explaining they are case-insensitive filters and substring matching. It also clarifies the behavior of 'saveToFile' (writes full JSON to disk, returns summary in chat). The 'site' parameter is already described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a lightweight list of site articles, specifying the endpoint, returned fields, and distinguishing it from other tools like 'get_article' by noting the exclusion of content and updatedAt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context for when to use filters (tag, query) and recommends using saveToFile for large sites. However, it does not explicitly compare with sibling tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
match_queriesA
Мост «Вебмастер → контент-план»: сопоставить поисковые запросы со статьями сайта. Вход: queries — массив строк ИЛИ объектов {query, shows?, position?}; queriesFile — JSON-файл того же формата (пиши его сам из ответа yd_webmaster_search_queries_popular: query_text→query, TOTAL_SHOWS→shows, AVG_SHOW_POSITION→position; фильтруй позиции 8–30 ДО вызова). По каждому запросу: score против всех статей → вердикт boost (дожать существующую, best.slug) или new (написать новую). Сортировка по shows desc.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| queries | No | Строки или {query, shows?, position?} | |
| saveToFile | No | ||
| queriesFile | No | Путь к JSON-файлу с тем же массивом |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the scoring process and output verdicts but does not explicitly state side effects or whether the tool is read-only. The instruction to write a file from another tool's response adds some clarity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, covering key aspects in a few sentences. No redundant information, though it could be slightly more structured for easier parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and lack of annotations, the description covers input format, preprocessing, and output logic. However, it omits details on the scoring algorithm, behavior of site and saveToFile parameters, and any prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%. The description adds context for queries and queriesFile (e.g., field names, source), but ignores site and saveToFile parameters entirely. It partially compensates for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it matches search queries with site articles to produce boost or new recommendations. It distinguishes itself from sibling tools like audit_content or list_articles by focusing on query-article matching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit preprocessing instructions (filter positions 8-30, format queries from another tool). However, it does not mention when not to use this tool or offer comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_articleA
Опубликовать НОВУЮ статью (POST /api/articles). Сначала гоняет validate_article: errors блокируют (обход skipValidation:true), warnings печатаются. content — Markdown; title можно не передавать, если content начинается с «# Заголовок» (сервер возьмёт и вырежет строку). ⚠️ Slug генерирует сервер (транслит + дата + счётчик коллизий) — узнаёшь его ТОЛЬКО из ответа; внутренние ссылки на новую статью ставь после публикации. Обложка = первая картинка в теле (, или голый URL с расширением) — иначе фолбэк-генератор сайта. IndexNow сервер пингует сам (fire-and-forget). Большой текст передавай через contentFile.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| tags | No | До 6 тегов по 40 симв (сервер нормализует) | |
| title | No | ||
| content | No | Markdown-тело | |
| contentFile | No | Путь к .md вместо инлайн-content (поддерживается ~) | |
| skipValidation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses many behaviors: validation orchestration, slug generation (transliteration + date + collision counter), cover image selection logic, IndexNow fire-and-forget, and contentFile alternative. With no annotations, description carries full burden and does well, though missing potential constraints like rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise paragraph with bullet-like structure using emoji and line breaks. Front-loaded with the main action. Slightly dense but every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all major aspects: validation, title/content relationship, slug generation, cover image, IndexNow, large content. No output schema, but description explains how to get the slug from response. Adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaning beyond schema for title (optional if content starts with heading), content (Markdown), contentFile (path to .md), skipValidation (bypass errors). 'site' and 'tags' are not elaborated but schema covers tags. Baseline 3 for 50% coverage, description earns extra point.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Опубликовать' (publish) and resource 'НОВУЮ статью' (new article), and includes the HTTP method POST. It distinguishes from siblings like update_article and delete_article.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on running validate_article first, handling errors and warnings, title and content alternatives, slug generation, cover image logic, and IndexNow. Does not explicitly state when not to use it, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setupA
Статус конфига и авторизации по всем сайтам (живой лёгкий probe GET /api/account/mcp-tokens на каждый) + инструкция подключения, если пусто. Вызывай первым при ошибках доступа или если пользователь не знает, с чего начать.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it performs a live lightweight GET probe to each site, revealing its non-destructive read-only behavior. No annotations provided, so description fully covers these traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff; first sentence describes the function, second gives usage guidance. Perfectly concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema and no annotations, the description fully explains purpose, behavior, and recommended usage context. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in schema; description adds meaning by explaining the tool's action without needing any input, going beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it checks config/authorization status via live probes and provides connection instructions. Distinguishes from sibling tools like add_site or audit_content by being a diagnostic first-step tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call first on access errors or if user doesn't know where to start', giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_linksA
Перелинковка для одной статьи: тематически близкие (score>0, теги ×3 + слова заголовка ×1) с готовыми markdown-сниппетами title. Скоринг симметричен, поэтому список один: используй его и как ЦЕЛИ (на кого сослаться из этой статьи), и как ДОНОРОВ (в чьи тела добавить ссылку на эту статью через update_article).
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| slug | Yes | ||
| topN | No | Сколько вернуть (default 5) | |
| saveToFile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the scoring formula (score>0, tags×3 + words×1), that the list is symmetric, and that it returns markdown snippets. However, it does not mention whether the tool is read-only, any rate limits, or authentication requirements. The description is adequate but could be more explicit about behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences that pack significant information. It is front-loaded with the main purpose and follows with details on scoring and usage. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool, no output schema, and 4 parameters with low schema coverage, the description provides a solid understanding of the tool's functionality, scoring, and dual usage. It lacks details on return format and error handling, but overall it is sufficient for an agent to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (25%), with only topN having a description. The tool description does not add meaning for the parameters slug, site, or saveToFile beyond what is in the schema. It mentions slug in the context of snippet formatting but not as a parameter. The description compensates partially by explaining the overall purpose but not individual parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: interlinking for one article, with scoring and markdown snippets. It specifies the verb 'перелинковка' (interlinking), resource 'одна статья' (one article), and distinguishes from siblings like audit_orphans by focusing on thematic closeness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context: the tool is used both to find target articles (to link from the current article) and donor articles (to add a link to the current article into their bodies). It also references update_article for adding links. However, it does not explicitly state when not to use it or provide alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_articleA
Обновить статью (resolve по slug через публичный /by-slug → PUT /api/articles/{id}). Это НЕ upsert: нет статьи → ошибка с подсказкой про publish_article. ⚠️ ГЛАВНАЯ ГОТЧА: PUT стирает excerpt/coverImage/authorName и пере-выводит их из НОВОГО content — если у статьи была обложка, а в новом теле нет первой картинки, обложка пропадёт; тул это ловит и блокирует (обход skipValidation:true). Slug при PUT стабилен. tags: не передал — сохранились старые; передал [] — стёр. 403 = статья не найдена ИЛИ принадлежит другому аккаунту (бэкенд не различает).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| site | No | ||
| slug | No | Slug статьи (или передай id) | |
| tags | No | ||
| title | No | ||
| content | No | ||
| contentFile | No | ||
| skipValidation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and reveals critical side effects: PUT overwrites excerpt/coverImage/authorName, cover image loss detection blocked unless skipValidation, slug stability, tag behavior, and 403 ambiguity. This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with main action first, then key warnings, but is somewhat long. Every sentence adds value, though some could be more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 params, no output schema, no annotations), the description covers error cases, side effects, and parameter behaviors thoroughly, making it complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (13%), but the description adds meaning for slug resolution, content field behavior, skipValidation, and tags. However, parameters like site, title, and contentFile are not explained, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an article, explains resolution via slug and PUT endpoint, and differentiates from publish_article by noting it is not an upsert. This distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when not to use (no article exists) and provides an alternative (publish_article). Also describes behavior for tags and error ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_imageA
Загрузить картинку статьи (POST /api/media/article-image, multipart): jpg/png/webp/gif/avif/svg, ≤10 МБ. Возвращает {url}. Вставь «» ПЕРВОЙ строкой тела — станет обложкой и переживёт будущие PUT (см. готчу update_article).
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | ||
| filePath | Yes | Путь к локальному файлу картинки (поддерживается ~) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: endpoint, multipart upload, format constraints, size limit, return value, and cover insertion procedure. Missing details like authentication or rate limits, but adequate for basic use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that front-loads the main action and includes all critical information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers most relevant aspects: endpoint, constraints, return, and integration note. The optional 'site' parameter is left unaddressed, but overall it's sufficiently complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 50% coverage (only filePath described). The description adds meaning: multipart context, allowed formats, size, and cover instruction—compensating for the schema gap. The 'site' parameter remains unexplained, but overall adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'upload article image' with the endpoint, allowed formats, and size limit. It distinguishes itself by referencing a gotcha with update_article, indicating integration context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear instructions on usage, including how to make the image the cover and the gotcha about update_article. However, it does not explicitly state when not to use this tool or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_articleA
Офлайн-линтер статьи БЕЗ сети: errors (пустой content; нет title и нет «# H1»; двойной H1) и warnings (title>60; первый абзац>160 — обрежется excerpt/description; нет «## FAQ» с ≥2 парами «### Вопрос» — не будет FAQPage-разметки; нет картинки-обложки в теле; голый URL без расширения — сервер не увидит обложку; <2 внутренних ссылок; заголовок без букв/цифр → slug no-title; тегов >6/длиннее 40). Возвращает и facts: слова, FAQ-пары, обложка, ссылки. Прогоняется автоматически внутри publish_article/update_article.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Для articlePath при подсчёте внутренних ссылок (не обязателен) | |
| tags | No | ||
| title | No | ||
| content | No | ||
| contentFile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tool is a read-only linter (offline, no network) and lists checks and return facts. However, it does not explicitly state that it has no side effects or whether it requires specific permissions, leaving some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that packs many checks into a few sentences. It is not overly long but could be better structured with bullet points or clearer separation of errors/warnings and facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no annotations, no output schema), the description explains what the tool does and returns. However, it does not guide on parameter usage (e.g., content vs contentFile) or provide enough context for an agent to know how to invoke it correctly without additional knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% (only 'site' has a description). The tool description does not provide any additional meaning for the parameters (title, content, contentFile, tags) beyond what the schema provides. For a low-coverage schema, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an offline linter for articles, listing specific errors (empty content, missing title/H1, double H1) and warnings (title length, paragraph length, missing FAQ section, etc.), and that it returns facts. This distinguishes it from siblings like publish_article and update_article which automatically run this validation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it is used offline and is automatically run within publish_article/update_article, implying it can be used manually for validation before publishing. However, it does not explicitly state when not to use it or compare to alternatives like audit_content, which could be similar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
add_site - First observed
audit_content - First observed
audit_orphans - First observed
delete_article - First observed
get_article - First observed
list_articles - First observed
match_queries - First observed
publish_article - First observed
setup - First observed
suggest_links - First observed
update_article - First observed
upload_image - First observed
validate_article
TDQS
Scored across 13 tools
Each tool targets a distinct function: site config, article CRUD, audits, linking, validation, image upload, and query matching. No two tools have overlapping purposes; even similar-sounding ones like audit_content and validate_article serve different scopes (full site vs single article).
Most tools follow a consistent verb_noun pattern (e.g., add_site, get_article, publish_article). The exception is 'setup', which is a single-word verb, breaking the pattern slightly. Overall, naming is clear and predictable.
With 13 tools, the server is well-scoped for an SEO/content management domain. Each tool serves a clear purpose without redundancy, and the count falls comfortably within the ideal range of 3-15.
The tool surface covers the main workflows: site management, full article CRUD, multiple audit types, link suggestions, image upload, and query matching. Minor gaps exist, such as no tool for deleting a site or explicitly listing sites (though setup provides status), but these are non-critical.
Maintenance
Related MCP Connectors
- CalmSEOOAuthcom.calmseo
SEO MCP server for keyword research, SERP analysis, audits, and Search Console workflows.
- RampifyOAuthdev.rampify
SEO MCP server: crawl your site, find AI-visibility gaps, and ship the fix from your coding agent.
SEO MCP server — backlinks, domain authority, tech stack, and 18+ tools via Common Crawl.
Cloud MCP for project data, analytics, research, content planning, media generation, and growth.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceThis MCP server automates WordPress SEO blog creation from content generation to publishing using GPT-4o, DALL-E 3, and WordPress REST API, with email approval workflow.-
- AlicenseCqualityCmaintenanceAn SEO analysis MCP server integrating Google Search Console, Bing Webmaster Tools, and GA4 with custom grain analysis tools for content decay, traffic drops, CTR benchmarking, and actionable recommendations.1001MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server for SEO auditing that performs technical SEO, content quality, Schema.org, sitemap, hreflang, and GEO checks, returning scores and prioritized fixes.MIT
- AlicenseNot gradedqualityAmaintenanceAn open-source, local-first MCP server for automated Schema.org JSON-LD generation, GA4 metric validation, /llm.txt auditing, and content stickiness analytics.MIT