Skip to main content
Glama

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

Подключение сайта

  1. Откройте <ваш-сайт>/articles/api, создайте токен (вид zmcp_…, показывается один раз).

  2. Скажите агенту: «подключи сайт https://ваш-сайт.ru с токеном zmcp_…» — он вызовет add_site (валидирует контракт и токен живыми запросами; невалидное не сохраняется).

  3. Конфиг: ~/.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)

Тул

Что делает

setup

статус конфига и живой auth-probe по всем сайтам + онбординг

add_site

добавить/обновить сайт (живая валидация; alias, articlePath, yandexHost, hiddenTags)

list_articles

лёгкий список с фильтрами (tag/query), скрытые помечаются

get_article

полная статья по slug (id для update/delete — в ответе)

publish_article

валидация → POST; финальный slug/URL из ответа

update_article

resolve по slug → PUT; ловит затирание обложки; 403-готча

delete_article

⚠️ confirm:true; предупреждает: IndexNow об удалении не узнаёт

upload_image

картинка → URL (вставить ![](url) первой строкой = обложка)

validate_article

офлайн-линтер: errors/warnings/facts

audit_orphans

статьи-сироты + доноры (граф «Читайте также»)

audit_content

аудит полных тел: FAQ/длина/обложка/ссылки

suggest_links

тематически близкие + готовые сниппеты перелинковки

match_queries

запросы Вебмастера → «дожать 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 tools
add_siteA

Добавить/обновить сайт в конфиге (существующий alias перезаписывается — так ротируется токен). Валидирует живьём: GET /api/articles/list (сайт реализует контракт) и, если передан token, GET /api/account/mcp-tokens (токен жив). Невалидное НЕ сохраняется. Первый сайт становится дефолтным. yandexHost принимает и URL, и host_id Вебмастера (https:site.ru:443 — двоеточия не опечатка), нормализуется сам. hiddenTags — темы, скрытые на самом сайте (напр. VPN на zaytsv.ru из-за РКН): исключаются из перелинковки/аудитов.

ParametersJSON Schema
NameRequiredDescriptionDefault
aliasYesКороткое имя сайта, напр. zaytsv
tokenNoPAT вида zmcp_... с <baseUrl>/articles/api. Можно опустить — read-only тулы работают без него
baseUrlYeshttps://site.ru (без хвостового /)
defaultNoСделать сайт дефолтным
hiddenTagsNoТеги/темы, скрытые на сайте (статьи отдаются API, но 404 для посетителей). Для zaytsv.ru: ["vpn","vless"] — фронт прячет обе темы
yandexHostNohost_id Яндекс.Вебмастера или просто URL — для скилла seo-growth-loop
articlePathNoПубличный префикс статей, по умолчанию /articles
metrikaCounterNoНомер счётчика Метрики (для скиллов)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 внутренних ссылок. В чат — сводка с приоритетами, полный список — в файл.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNo
minWordsNoПорог «короткой» статьи (default 300)
saveToFileNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNo
countNoЧисло ссылок в блоке «Читайте также» на сайте (default 3) — влияет на граф
saveToFileNo

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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 останется в индексе; при необходимости снять через Вебмастер.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
siteNo
slugNo
confirmNoОбязательно true — операция необратима

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNo
slugYes
saveToFileNoПуть: записать статью (JSON) на диск, в чат — сводка

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
siteNoАлиас сайта (по умолчанию — дефолтный)
queryNo
saveToFileNoПуть: полный JSON на диск, в чат — сводка

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNo
queriesNoСтроки или {query, shows?, position?}
saveToFileNo
queriesFileNoПуть к JSON-файлу с тем же массивом

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNo
tagsNoДо 6 тегов по 40 симв (сервер нормализует)
titleNo
contentNoMarkdown-тело
contentFileNoПуть к .md вместо инлайн-content (поддерживается ~)
skipValidationNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 на каждый) + инструкция подключения, если пусто. Вызывай первым при ошибках доступа или если пользователь не знает, с чего начать.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

update_articleA

Обновить статью (resolve по slug через публичный /by-slug → PUT /api/articles/{id}). Это НЕ upsert: нет статьи → ошибка с подсказкой про publish_article. ⚠️ ГЛАВНАЯ ГОТЧА: PUT стирает excerpt/coverImage/authorName и пере-выводит их из НОВОГО content — если у статьи была обложка, а в новом теле нет первой картинки, обложка пропадёт; тул это ловит и блокирует (обход skipValidation:true). Slug при PUT стабилен. tags: не передал — сохранились старые; передал [] — стёр. 403 = статья не найдена ИЛИ принадлежит другому аккаунту (бэкенд не различает).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNo
siteNo
slugNoSlug статьи (или передай id)
tagsNo
titleNo
contentNo
contentFileNo
skipValidationNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNo
filePathYesПуть к локальному файлу картинки (поддерживается ~)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteNoДля articlePath при подсчёте внутренних ссылок (не обязателен)
tagsNo
titleNo
contentNo
contentFileNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 13 tool updatesv0.1.0
    • First observedadd_site
    • First observedaudit_content
    • First observedaudit_orphans
    • First observeddelete_article
    • First observedget_article
    • First observedlist_articles
    • First observedmatch_queries
    • First observedpublish_article
    • First observedsetup
    • First observedsuggest_links
    • First observedupdate_article
    • First observedupload_image
    • First observedvalidate_article

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation5/5

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).

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    C
    maintenance
    An 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.
    100
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server for SEO auditing that performs technical SEO, content quality, Schema.org, sitemap, hreflang, and GEO checks, returning scores and prioritized fixes.
    MIT