▤ Руководства

MCP-сервер: подключение ИИ-помощников (версия 126)

Содержание

MCP (Model Context Protocol) — открытый протокол, который позволяет ИИ-помощникам (Claude, Cursor и другим) обращаться к внешним программам и пользоваться их инструментами. SEOMaster предоставляет проверенные технические данные, а помощник помогает человеку их осмыслить. В самом сервисе по-прежнему работают только PHP и обычные алгоритмы: MCP лишь открывает доступ к тем же методам, что и API, с теми же правами ключа, лимитами и правилами. Отдельной системы расчётов нет.

Что это даёт

Вы задаёте вопрос обычными словами, например: «Почему у моего сайта уменьшилось число страниц в поиске за последнюю неделю?». Помощник сам вызывает нужные инструменты (индексация, различия проверок, недавние исправления, первопричина), получает данные и составляет объяснение: что произошло, какие причины вероятны и в каком порядке действовать.

ВопросИнструменты
Показать все мои сайтыlist_sites, get_overview
Последний технический отчётget_site, get_report
Главные ошибки сайтаget_top_issues, explain_check
Сравнить две проверкиget_changes (параметры from и to — номера из get_history)
Проблемы с индексациейget_indexing
Скорость и мобильная версияget_performance
Изменения поисковых позицийlist_positions (trend=down), get_position_pages, list_search_queries
Вероятные причины ухудшенияget_diagnosis, get_changes, сценарий investigate_indexing_drop
Невыполненные задачиget_plan, list_site_tasks
История устранения ошибкиget_work_history, get_fix_effects
Новая проверка (с подтверждением)start_analysis, затем get_job
Перепроверка исправления (с подтверждением)recheck_task

Подключение

Адрес сервера: https://ваш-сервис/mcp. Авторизация — заголовок Authorization: Bearer smk_… (тот же ключ API). Готовые настройки с вашим ключом показаны в кабинете: «API и вебхуки» → «ИИ-помощники (MCP)».

Claude Code:

claude mcp add --transport http seomaster https://seo.example/mcp --header "Authorization: Bearer smk_…"

Cursor, VS Code и другие клиенты, которые принимают заголовки (mcp.json):

{"mcpServers": {"seomaster": {"url": "https://seo.example/mcp", "headers": {"Authorization": "Bearer smk_…"}}}}

Claude Desktop, через мост mcp-remote (нужен Node.js):

{"mcpServers": {"seomaster": {"command": "npx", "args": ["-y", "mcp-remote", "https://seo.example/mcp", "--header", "Authorization:${SEOMASTER_AUTH}"], "env": {"SEOMASTER_AUTH": "Bearer smk_…"}}}}

Запуск как программы (stdio), если на компьютере есть PHP: самостоятельный файл bin/mcp.php пересылает сообщения на сервер.

SEOMASTER_URL=https://seo.example SEOMASTER_KEY=smk_… php bin/mcp.php

Переменные: SEOMASTER_URL, SEOMASTER_KEY, необязательные SEOMASTER_TOOLS, SEOMASTER_READONLY, SEOMASTER_LANG. ChatGPT и веб-версия Claude подключаются кнопкой через вход OAuth (см. ниже).

Подключение кнопкой (OAuth)

ChatGPT и claude.ai подключают сервер без заголовка: добавьте свой коннектор с адресом https://ваш-сервис/mcp и нажмите «Подключить». Откроется страница SEOMaster: войдите в аккаунт, отметьте права (чтение включено всегда; запуск проверок и изменение данных — по желанию) и нажмите «Разрешить». Протокол — OAuth 2.1:

  • метаданные: /.well-known/oauth-protected-resource (защищённый ресурс /mcp) и /.well-known/oauth-authorization-server (адреса конечных точек); ответ 401 на /mcp указывает на них в заголовке WWW-Authenticate (resource_metadata);
  • динамическая регистрация клиентов: POST /oauth/register (RFC 7591); адрес возврата — https, http://localhost или схема приложения; до 20 регистраций в час с одного адреса;
  • вход: GET /oauth/authorize — код с обязательным PKCE (code_challenge_method=S256), state и resource проверяются, ответ содержит iss (RFC 9207);
  • токены: POST /oauth/token — authorization_code и refresh_token; отзыв: POST /oauth/revoke (RFC 7009).

Токен доступа — обычный ключ API (smk_…) с выбранными правами: он работает в MCP и в REST API, виден в «API и вебхуки → Ключи» с пометкой OAuth, а вкладка «ИИ-помощники (MCP)» показывает все подключения. Токен живёт сутки и обновляется приложением само; refresh-токен меняется при каждом обновлении и действует 90 дней с последнего использования. Повторное использование старого refresh-токена или кода отзывает доступ целиком. Отзыв ключа в «Ключах» закрывает доступ немедленно, повторное подключение того же приложения заменяет прежнее. Если сервис стоит за прокси, задайте SEOMASTER_BASE_URL (адрес с https).

Ключ и права

Для помощника заведите отдельный ключ (кнопка в кабинете создаёт его с правом read). Набор инструментов определяется правами ключа: с read помощник видит только чтение; run добавляет запуск проверок, write — изменение данных. Ключ можно отозвать в любой момент; журнал вызовов виден в карточке ключа. Каждый вызов инструмента — запрос API в лимите ключа (по умолчанию 120 в час; для помощника кнопка в кабинете задаёт не меньше 120): помощник делает несколько вызовов на один вопрос, при необходимости поднимите лимит ключа.

Инструменты

Всего 62; каждый соответствует методу API (подробности и параметры — в справочнике «API_REFERENCE»). Названия общие для API, CLI и MCP.

Ключ (account)

ИнструментПравоПодтверждениеЧто делает
get_accountreadнетСведения о ключе и владельце: права, срок, лимит, расход за текущий час.
get_key_usagereadнетЗапросы этого ключа по дням за последние 30 суток.

Сайты (sites)

ИнструментПравоПодтверждениеЧто делает
list_sitesreadнетСайты в мониторинге с последней оценкой.
add_sitewriteдаДобавить сайт в мониторинг (с учётом лимита тарифа).
remove_sitewriteдаУбрать сайт из мониторинга.
get_overviewreadнетВсе сайты в одной таблице: ранг и его изменение, критичные и открытые задачи, доступность, давность проверки, проект и важность; с фильтрами, сортировкой и постраничным выводом. Для сайтов с типом (профилем) ранг учитывает исключения, рядом rank_without_exclusions.

Данные сайта (site-data)

ИнструментПравоПодтверждениеЧто делает
get_sitereadнетКарточка сайта: оценка, задачи, динамика.
get_reportreadнетПоследний отчёт по сайту.
get_historyreadнетИстория проверок.
get_crawlreadнетПоследний аудит страниц.
get_linksreadнетПерелинковка: сироты, битые ссылки, дубли.
get_external_linksreadнетВнешние ссылки по результатам аудита.
get_uptimereadнетДоступность: аптайм за 24 часа, 7 и 30 дней, инциденты.
get_top_issuesreadнетПять главных проблем простыми словами: что это, чем грозит, сколько баллов ранга даст исправление, трудоёмкость; итог «если исправить всё».
get_changesreadнетРазличия двух проверок: новые, устранённые и вернувшиеся замечания, ухудшения и улучшения, изменение ранга и групп, технологии. По умолчанию — последняя и предыдущая проверки.
get_performancereadнетСкорость и мобильная версия: проверки скорости и адаптации из последнего отчёта и показатели браузера (LCP, CLS, INP, TBT) по телефону и компьютеру.

Задачи (tasks)

ИнструментПравоПодтверждениеЧто делает
list_site_tasksreadнетЗадачи по сайту с идентификаторами и статусами.
set_task_statuswriteдаСменить статус задачи: open, done, ignored.
get_planreadнетОткрытые задачи по всем сайтам (или по одному), самые полезные первыми. План пересобирается с учётом типа сайта.
recheck_taskrunдаПерепроверить одну задачу: сайт проверяется заново, ответ — было, стало, исправлено ли. Свежий отчёт (моложе двух минут) используется повторно; действует суточный предел перепроверок.
get_fix_effectsreadнетЭффект исправлений: помогла ли выполненная задача (показатель до и после, изменение в процентах, вывод).
get_work_historyreadнетИстория работ по сайту: что исправлено, какие были инциденты, ваши пометки за период (days, до 90).

События (events)

ИнструментПравоПодтверждениеЧто делает
list_eventsreadнетЛента событий с фильтрами и курсором after_id для опроса.

Трафик (traffic)

ИнструментПравоПодтверждениеЧто делает
get_traffic_forecastreadнетПрогноз органического трафика на 14 дней с диапазоном, тренд, необычные дни, оценка трафика конкурентов по вашим запросам и потенциал роста.

Позиции (positions)

ИнструментПравоПодтверждениеЧто делает
get_position_pagesreadнетКакие страницы сайта держат видимость и по каким запросам, плюс каннибализация (по запросу в выдаче разные страницы).
get_serp_volatilityreadнетВолатильность выдачи по дням: смена состава топ-10 и сдвиги ваших позиций, дни, похожие на обновление выдачи.

Глубокий обход (deep)

ИнструментПравоПодтверждениеЧто делает
get_js_dependencyreadнетЗависимость сайта от JS по последней проверке рендерингом: разделы, страницы выборки, что добавляет JS (текст, ссылки, мета-данные), найденные фреймворки.

Сторонние API (providers)

ИнструментПравоПодтверждениеЧто делает
list_providersreadнетРеестр провайдеров: подключён ли, свежесть данных, бюджет ошибок за 30 суток, атрибуция, можно ли показывать данные публично, срок хранения и когда вы сверяли условия. Параметр all=1 добавляет неиспользуемых провайдеров.

Соцсети (social)

ИнструментПравоПодтверждениеЧто делает
get_socialreadнетСсылки на соцсети на главной, карточки Open Graph, состояние страниц ВКонтакте и Telegram, число подписчиков и замечания аудита (по последней проверке).

Конкуренты (competitors)

ИнструментПравоПодтверждениеЧто делает
get_competitor_historyreadнетДинамика доли видимости вас и главных конкурентов по срезам выдачи (параметры points до 26, step 7 или 30) и кто вас обогнал или резко вырос.
get_competitorsreadнетДоля видимости сайта и конкурентов по вашим запросам, угрозы, площадки в выдаче, кластеры запросов, намерения и сложность.
get_keyword_gapreadнетРазрыв по запросам: где конкуренты в топ-10, а вас нет (kind=missing) или они выше (kind=behind). С оценкой потенциала и сложности.

Диагностика (diagnosis)

ИнструментПравоПодтверждениеЧто делает
get_diagnosis_allreadнетДиагноз всех ваших сайтов: уровень, оценка здоровья, первопричина. Самые тяжёлые первыми.
get_diagnosisreadнетПолный диагноз сайта: зоны здоровья, первопричина, динамика, полнота данных и рекомендуемый порядок действий с оценкой времени и прироста индекса.
get_diagnosis_historyreadнетЗдоровье сайта по дням: оценка, уровень, зоны, первопричина и изменения за неделю.

Вебхуки (webhooks)

ИнструментПравоПодтверждениеЧто делает
list_webhooksreadнетВаши адреса вебхуков и их состояние (без секретов).
list_webhook_deliveriesreadнетПоследние доставки на адрес: статус, код ответа, число попыток.

Проверки (checks)

ИнструментПравоПодтверждениеЧто делает
analyze_site_syncrunдаПроверить сайт (или взять свежий отчёт из кэша).
check_pagerunдаОдна проверка страницы (meta, headings, images и т. д.).
check_page_fullrunдаВсе проверки страницы сразу.
check_sslrunдаСертификат сайта (живое подключение).
check_dnsrunдаDNS-записи домена (живой запрос).
start_analysisrunдаЗапустить проверку сайта в фоне: ответ 202 с заданием, ход — GET /jobs/{id}. Свежий отчёт из кэша возвращается как готовое задание; fresh=true — проверить заново.
start_crawlrunдаЗапустить аудит страниц сайта из мониторинга в фоне: ответ 202 с заданием. Считается как три проверки в лимите.

Индексация (indexing)

ИнструментПравоПодтверждениеЧто делает
get_indexingreadнетДиагностика индексации: страницы вне индекса и причины по данным Яндекса и Google, собственная проверка, расхождения, действия.

Рынок (market)

ИнструментПравоПодтверждениеЧто делает
get_marketreadнетРыночная аналитика по загруженным данным подключённого источника (Ahrefs, Semrush): конкуренты, пересечения, упущенные запросы и потенциал. Данные только ваши и только из разрешённых источников.

Тип сайта (profile)

ИнструментПравоПодтверждениеЧто делает
get_site_profilereadнетТип сайта (магазин, форум, блог, корпоративный, портал), исключённые проверки, ранг с профилем и без исключений, допустимые типы и исключения.
set_site_profilewriteдаЗадать тип сайта и исключения. Каждое исключение нужно подтвердить в confirm: исключаются только проверки из белого списка, не больше 5 и не больше половины веса группы. Без exclude берутся исключения типа по умолчанию.
reset_site_profilewriteдаСбросить тип сайта: применяется стандартный набор проверок.

Справка (help)

ИнструментПравоПодтверждениеЧто делает
list_explanationsreadнетСписок кодов проверок, для которых есть объяснение и инструкция.
explain_checkreadнетОбъяснение проверки: что это значит, примеры хорошего и плохого значения, почему важно, трудоёмкость и ссылка на пошаговую инструкцию. Параметр lang=ru/en.

Задания (jobs)

ИнструментПравоПодтверждениеЧто делает
list_jobsreadнетПоследние фоновые задания, запущенные через API.
get_jobreadнетСостояние задания: queued, running, done или error, прогресс, ссылки на результат; poll_after_s — через сколько секунд спрашивать снова.
ИнструментПравоПодтверждениеЧто делает
list_search_queriesreadнетПоисковые запросы сайта из Яндекс.Вебмастера и Google Search Console: клики, позиция и их прежние значения.
list_search_opportunitiesreadнетВозможности роста по данным поиска: запросы «почти в топе», низкий CTR и каннибализация страниц, с ожидаемым приростом кликов.
list_positionsreadнетПозиции отслеживаемых запросов: сейчас, в прошлую проверку, неделю назад, лучшая; trend=down — просевшие за неделю, up — выросшие, lost — выпавшие из выдачи.
list_backlinksreadнетОбратные ссылки из подключённых источников: живые или пропавшие, с анкором, типом и рейтингом источника.

Утилиты (utilities)

ИнструментПравоПодтверждениеЧто делает
list_utilitiesreadнетКаталог утилит сервиса (86 штук: проверки сайта, текст, разработчику, сеть, подсказки и превью, изображения, расчёты): группа, название, обращается ли к чужим сайтам (net), работает ли через API. Фильтры: group, q (поиск), net.
get_utilityreadнетОписание одной утилиты: поля ввода с типами, допустимыми значениями и пределами, нужное право, пример input. Вызывайте перед запуском.
run_utilityread (run для net=true)только для net=trueЗапустить утилиту. Результат: result (данные), blocks (готовые блоки: таблицы, пары, код, сравнение) и warnings. Утилиты, которые ходят на чужие сайты, требуют право run. Данные нигде не сохраняются.

Сводки (digest)

ИнструментПравоПодтверждениеЧто делает
get_todayreadнетЧто делать сегодня: индекс и динамика сайтов, самые полезные задачи, открытые инциденты, диагноз, вероятные причины, результаты ваших действий, события за сутки.
list_incidentsreadнетИнциденты: связанные сигналы (падение, недоступность, изменение выдачи) с началом, концом, уровнем и советом. Фильтры: host, days, status.

Подтверждение действий

Любой инструмент, который меняет данные или расходует лимит проверок, сначала возвращает не результат, а описание действия:

{"confirmation_required": true, "tool": "start_analysis", "action": "Будет запущена проверка сайта example.com: расходуется суточный лимит проверок вашего тарифа.", "arguments": {"host": "example.com"}, "next": "Спросите пользователя…"}

Помощник должен спросить вас и только после согласия повторить вызов с confirmed=true. Кроме того, такие инструменты помечены в протоколе как не «только чтение» (и удаление — как разрушающее), поэтому клиенты показывают собственный запрос разрешения. Сервер не может проверить, что человек действительно согласился: это обязанность клиента и помощника, поэтому давайте права run и write только тем помощникам, которым доверяете.

Ресурсы и готовые сценарии

Ресурсы (resources): seomaster://sites, seomaster://plan, seomaster://today, seomaster://utilities, seomaster://guide и шаблоны seomaster://site/{host}/issues, …/changes, …/indexing, seomaster://explain/{code}. Готовые сценарии (prompts) — заготовки вопросов с порядком вызова инструментов:

СценарийАргументыДля чего
investigate_indexing_drophostПочему у сайта уменьшилось число страниц в поиске
weekly_reporthostНедельный отчёт по сайту
what_to_fix_firsthost?Что исправлять в первую очередь
verify_fixhost, task_idПроверить исправление
speed_and_mobilehostСкорость и мобильная версия
search_growthhostГде можно вырасти в поиске
compare_checkshostСравнить две проверки
full_site_audithostПолный аудит сайта с приоритетами
new_site_onboardinghostПодключить новый сайт и разобрать первые результаты
daily_briefing—Утренняя сводка: что важно сегодня
incident_triagehostРазобрать инцидент на сайте
page_seo_reviewurl, keyword?SEO-разбор одной страницы
technical_seo_healthhostТехническая проверка сайта утилитами
security_and_reputationhostБезопасность и репутация домена
redirect_migration_checkhostПроверить перенос сайта и редиректы
link_health_reviewhostЗдоровье ссылок сайта
meta_tags_writerurl, keyword?Написать title и description для страницы
content_quality_checkurlПроверить качество текста страницы
keyword_cannibalizationhostКаннибализация запросов
competitor_reviewhostОбзор конкурентов
serp_volatility_checkhostЭто обновление выдачи или проблема сайта
traffic_outlookhostПрогноз трафика и точки роста
backlinks_reviewhostОбзор обратных ссылок
uptime_and_speed_reporthostДоступность и скорость за период
monthly_client_reporthostЕжемесячный отчёт для клиента
social_presence_reviewhostСоцсети и превью ссылок
robots_sitemap_reviewhostПроверка robots.txt и sitemap
developer_tickethost, task_idЗадача для разработчика по замечанию
pre_launch_checklisthostЧек-лист перед запуском сайта
utm_campaign_linksurl, campaign?Размеченные ссылки для кампании
utility_pickertaskПодобрать и запустить подходящую утилиту

Наборы инструментов

Чтобы не перегружать помощника и сузить доступ, добавьте параметры к адресу: ?tools=essentials — основной набор из 21 инструмента; ?tools=site-data,indexing — только указанные группы (коды групп указаны в заголовках разделов выше; неизвестная группа отклоняется ошибкой, как и у других серверов); ?readonly=1 — без действий; ?lang=en — описания на английском (по умолчанию русский).

Безопасность

  • Вебхуки через MCP не публикуются: адрес для событий, подсказанный текстом чужой страницы, был бы каналом утечки данных. Их можно настраивать только в кабинете или через API.
  • Тексты со страниц сайтов (заголовки, анкоры, запросы) — недоверенные данные. Сервер сообщает об этом помощнику в инструкции; тем не менее внимательно относитесь к просьбам помощника, которые пришли «из данных».
  • Запросы из браузера принимаются только с разрешённых источников (адрес сервиса, claude.ai, chatgpt.com и список mcp_origins в настройках); остальные получают 403.
  • Ответ инструмента ограничен 60 КБ: длинные списки укорачиваются, в ответе есть поле _truncated с числом показанных и общих элементов. Для остального есть limit и offset.
  • Данные видит только владелец ключа; права и IP-ограничения ключа действуют так же, как в API.

Протокол

Транспорт — Streamable HTTP: только POST /mcp с одним сообщением JSON-RPC 2.0, ответ application/json (без потоков SSE и без сеансов). GET и DELETE дают 405. Пакеты запросов не поддерживаются (убраны в версии протокола 2025-06-18). Поддерживаемые версии: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Методы: initialize, ping, tools/list, tools/call, resources/list, resources/templates/list, resources/read, prompts/list, prompts/get.

Ошибки авторизации и лимита приходят с HTTP-кодом 401, 403 или 429 и телом JSON-RPC: {"error": {"code": -32001, "message": "…", "data": {"code": "invalid"}}}; коды data.code — те же, что в API (missing, invalid, revoked, expired, ip, blocked, limit, maintenance, server). Ошибка самого инструмента приходит как обычный результат с isError: true и телом {"error", "code", "http", "retryable", "hint"}, чтобы помощник мог на неё отреагировать. Ошибки протокола (неизвестный инструмент, неверные параметры) — стандартные ошибки JSON-RPC.

Ограничения

  • Вход OAuth требует публичного адреса с https; для работы на закрытой сети используйте ключ в заголовке.
  • Сервер не отправляет уведомления и не ведёт сеансы; долгие операции — задания, ход смотрите через get_job.
  • Данные, которых нет (источник не подключён, проверка не запускалась), возвращаются как not_ready с пояснением; помощник не должен их выдумывать, но это зависит от модели.
  • Описания инструментов и сценарии — на русском и английском; plain и guide в explain_check — только на русском.
  • Согласие на действие обеспечивается описанием инструмента, пометками протокола и запросом клиента, а не проверкой на сервере.