mcpField
Y
yandex-metrika-mcp-server

yandex-metrika-mcp-server

ローカル
github.com/artgas1データ・分析22 週間前に更新

yandex-metrika-mcp-server について

yandex-metrika-mcp-server は、MCP クライアントから Yandex Metrika API のレポート、カウンター管理、ログ機能を利用できるようにします。108 の API メソッドから仕様に基づいてツールを生成し、プロファイルで公開範囲を選択できます。書き込みツールは既定で無効です。

主な機能

  1. 01Stat、Management、Logs API をカバー
  2. 02API 仕様からツールを生成
  3. 03プロファイルによる公開ツールの選択
  4. 04書き込みツールを既定で無効化
  5. 05リトライ回数と結果の切り詰めを通知
  6. 06レスポンス内のトークン値を秘匿

活用シーン

  1. 01Yandex Metrika のレポートを取得
  2. 02書き込みツールを有効にしてカウンターや目標を管理
  3. 03Logs API のデータを取得・ダウンロード

MCP 対応

Yandex Metrika API のメソッドを MCP ツールとして公開します。既定の stdio に加え、ステートレス Streamable HTTP も選択でき、公開ツールはプロファイルと設定で決まります。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"artgas1-yandex-metrika": {
"command": "npx",
"args": [
"-y",
"yandex-metrika-mcp-server"
],
"env": {
"YANDEX_API_KEY": "<YANDEX_API_KEY>",
"METRIKA_PROFILE": "<METRIKA_PROFILE>",
"METRIKA_ALLOW_WRITES": "<METRIKA_ALLOW_WRITES>",
"METRIKA_TOOLS": "<METRIKA_TOOLS>",
"METRIKA_TRAFFIC_FILTER": "<METRIKA_TRAFFIC_FILTER>",
"METRIKA_MAX_OUTPUT_CHARS": "<METRIKA_MAX_OUTPUT_CHARS>"
}
}
}
}
起動コマンドnpx -y yandex-metrika-mcp-server
設定が必要な環境変数
YANDEX_API_KEYシークレットOAuth-токен Яндекса с доступом к Метрике. Без него сервер не стартует.
METRIKA_PROFILEКакая часть каталога объявляется: core (10 инструментов, умолчание), read (51 читающий), all (все 108).
METRIKA_ALLOW_WRITES1 разрешает и объявляет 57 инструментов, меняющих данные. Пока не задана — их нет в tools/list вовсе.
METRIKA_TOOLSСвоя выборка инструментов через запятую: раздел (stat, logs, management), префикс имени или точное имя. Задана — побеждает METRIKA_PROFILE.
METRIKA_TRAFFIC_FILTERУсловие сегментации, которое добавляется к отчётам Stat. По умолчанию ym:s:isRobot=='no'.
METRIKA_MAX_OUTPUT_CHARSПотолок длины ответа одного вызова в символах. По умолчанию 120000.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmyandex-metrika-mcp-server3.3.1

ツール

11

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
fieldstringいいえ返されるオブジェクトの追加パラメーターを 1 つ以上指定します。追加パラメーター名は、スペースを入れずにカンマ区切りで任意の順序で指定します。例:`field=goals,mirrors,grants,filters,operation,counter_flags,measurement_tokens`。
callbackstringいいえAPI レスポンスを処理するコールバック関数。
counterIdintegerはい情報を取得するカウンターの ID。

詳細

Yandex Metrika MCP Server

Yandex Metrika API 用の MCP サーバーです。108 個すべてのメソッドに対応しています。デフォルトで公開されるのは、よく使われる 10 個です。残りは環境変数ひとつで有効にできます。

mcp-name: io.github.artgas1/yandex-metrika-mcp-server

npm CI License: MIT

English

質問「1 週間でどこから訪問者が来て、何人が目標に到達しましたか?」と、表形式の回答:検索 — 12 480 訪問、386 件の目標達成、コンバージョン率 3.1%;広告 — 2 140、5.5%;直接アクセス — 1 905、2.3%;リンク経由 — 640、1.9%。数値は説明用です。
npx -y yandex-metrika-mcp-server

atomkraft/yandex-metrika-mcp のフォークです(アップストリーム — Vadim Bezymianyi、MIT)。 バージョン 2.0.0 以降、ツールは手作業で作成するのではなく、公式ドキュメントを基にまとめた仕様から生成されます。

対応範囲

APIメソッド数core プロファイルに含まれる数ツールの例
Management95(21 リソース)4metrika_counter_list、metrika_goal_create、metrika_segment_update
Logs7—metrika_logs_create、metrika_logs_get、metrika_logs_download
Stat66metrika_stat_data、metrika_stat_bytime、metrika_stat_pivot

ツール名は metrika_<resource>_<action> です。リソース名は、名前を変更せずに API 自体の URL から取得します。 そのため、metrika_goal_list は GET /management/v1/counter/{id}/goals と、その専用ドキュメントページに一意に対応します。

契約

観測された 2 つの問題、つまり要求とは異なる内容を返すこと、フィルターを暗黙に追加することを受け、サーバーを書き直しました。これを踏まえた 5 つのルールには、それぞれテストがあります。

  1. 暗黙の置き換えはしません。 要求された内容をそのまま API に送信します。サーバーがディメンション、期間、フィルターを勝手に補うことはありません。
  2. サーバーが独自に追加した内容は、すべて応答に表示されます。 応答は {"_meta": {...}, "data": {...}} の形式で返されます。_meta.applied_by_server には追加した内容が、_meta.notes には呼び出し元に代わって行った判断が記載されます。
  3. エラーはエラーのまま返します。 API エラーは isError: true と Metrika の応答本文を含めて返されます。再試行はテキスト内の部分文字列ではなく、ステータス(429/500/502/503/504 とネットワークエラー)に基づいて行われます。429 の場合は Retry-After に従います(上限は 30 秒)。再試行回数は常に _meta.retries で確認できます。
  4. 出力の切り捨ては明示されます。 _meta には rows_returned、rows_total、truncated が含まれます。Metrika はデフォルトで応答を切り詰めるため、これを黙って済ませることはできません。サーバーが長さの上限により応答を短縮した場合は、破棄された行数とともに _meta.truncated_by_server に別途記録されます。
  5. シークレットは応答に含まれません。 metrika_measurement_delete には token パラメーターがあります。表示される _meta.request_url では、その値は REDACTED に置き換えられます。OAuth トークン自体はヘッダーでのみ送信され、応答に含まれることはありません。
Фильтр роботов

В отчётах Stat API по умолчанию применяется собственный флаг робота Метрики, и только он:

ym:s:isRobot=='no'

Он объявлен: виден в схеме инструмента, отключается параметром human_traffic_only: false и всегда перечислен в _meta.applied_by_server. Если в запросе есть метрики ym:ad: или ym:ev:, фильтр не применяется (Метрика отвечает на такое сочетание 400) — и это попадает в _meta.notes, а не остаётся молчаливым исключением.

Своё условие задаётся переменной METRIKA_TRAFFIC_FILTER — целиком, включая isRobot, если он нужен:

METRIKA_TRAFFIC_FILTER="ym:s:isRobot=='no' AND ym:s:browserName!='HeadlessChrome'"

Это образец формы, а не рекомендация. Какой рез верен — зависит от того, какие боты ходят именно к вам: отсечка по стране, по заголовку браузера или по подсети осмысленна только на своих данных. Копировать чужой список бессмысленно и опасно: он вырежет живой трафик.

Заданное своё условие сервер называет в stderr при старте — оно меняет числа в каждом отчёте, и молчать об этом нельзя.

Сравнение периодов: ответ, который выглядит валидным

У metrika_stat_comparison и metrika_stat_comparison_drilldown даты периодов необязательны, и Метрика на их отсутствие не ругается. Она подставляет собственное окно (последняя неделя) в оба набора и возвращает сравнение периода с самим собой:

metrika_stat_comparison(ids, metrics)  →  totals a == b
                                          query  date1_a == date1_b

Отказывать сервер не будет — запрос ушёл ровно тем, каким его собрали. Но такой ответ приходит с пометкой в _meta.notes: и когда даты не заданы, и когда периоды совпали явно.

Как устроена спека

Публичного openapi.json у Метрики нет, но каждая страница метода сгенерирована из OpenAPI движком Diplodoc и отдаётся как text/markdown. Семантика (тип, required, комбинатор, ассертация) лежит в CSS-классах вида {.json-schema-property}, поэтому спека собирается построчным сканером по классам, а не markdown-парсером.

npm run spec:fetch   # скачать llms.txt и 108 страниц в .cache/docs/
npm run spec:build   # разобрать их в spec/metrika-api.json
npm test             # тесты спеки и схем инструментов
npm run smoke        # живые вызовы к API (нужен YANDEX_API_KEY)

spec/metrika-api.json коммитится — это состав API на момент сборки. Тест на дрейф сверяет его с llms.txt: Яндекс добавил или удалил метод — тест краснеет.

Разбор привязан к версии генератора (Diplodoc Platform v5.57.3): вся семантика висит на его классах, поэтому расхождение версии останавливает сборку спеки, а не молча портит её.

Запуск

По умолчанию объявляются десять инструментов из 108 — те, которыми считают. Управление счётчиками и целями, доступы и Logs API включаются переменной METRIKA_PROFILE; подробности ниже, в разделе «Почему по умолчанию не всё».

Спросить у самого сервера тоже можно: инструмент metrika_catalog_list перечисляет, что объявлено, что скрыто и как это включить.

npm install
npm run build
YANDEX_API_KEY=<OAuth-токен с scope direct:api / metrika> npm start

Токен — OAuth Яндекса, тот же, что используется для Директа и Вебмастера.

По умолчанию сервер сохраняет stdio-режим. Для одного локального процесса, к которому подключаются несколько MCP-клиентов, включите stateless Streamable HTTP:

YANDEX_API_KEY=<OAuth-токен> \
MCP_TRANSPORT=http MCP_HOST=127.0.0.1 MCP_PORT=13404 \
npm start

Endpoint — http://127.0.0.1:13404/mcp. При loopback-привязке сервер также проверяет Host, чтобы локальный endpoint нельзя было вызвать через DNS rebinding.

Подключение к клиенту
{
  "mcpServers": {
    "yandex-metrika-mcp": {
      "command": "npx",
      "args": ["-y", "yandex-metrika-mcp-server@3"],
      "env": { "YANDEX_API_KEY": "..." }
    }
  }
}

Из локальной сборки — то же самое, но "command": "node" и путь до build/index.js.

Мажор в строке запуска закреплён намеренно: смена мажорной версии меняет набор инструментов по умолчанию, и получать это молча при старте агента не нужно.

Переменные окружения
ПеременнаяПо умолчаниюЧто делает
YANDEX_API_KEY—OAuth-токен. Без него сервер не стартует.
MCP_TRANSPORTstdioТранспорт: stdio или stateless Streamable http.
MCP_HOST127.0.0.1Адрес HTTP listener. Используется только при MCP_TRANSPORT=http.
MCP_PORT3000Порт HTTP listener, целое число от 1 до 65535.
METRIKA_PROFILEcoreКакая часть каталога объявляется: core (10 инструментов), read (все 51 читающих), all (все 108). Неизвестное значение роняет старт.
METRIKA_ALLOW_WRITESне задана1 разрешает и объявляет 57 инструментов, меняющих данные. Пока не задана — их нет в tools/list вовсе.
METRIKA_TOOLSпустоСвоя выборка через запятую: раздел (stat, logs, management), префикс имени (metrika_goal) или точное имя. Задана — побеждает профиль.
METRIKA_TRAFFIC_FILTERym:s:isRobot=='no'Условие сегментации, добавляемое к отчётам Stat. Задаётся целиком.
METRIKA_MAX_OUTPUT_CHARS120000Потолок длины ответа одного вызова. Выгрузка Logs API в него обычно не помещается — сутки визитов это сотни тысяч символов; урезание объявляется в _meta.truncated_by_server.
METRIKA_API_BASEпустоПодмена адреса API (прокси, заглушка в тестах). Факт подмены печатается в stderr.
Как узнать, что скрыто, не открывая README

Инструмент metrika_catalog_list объявлен в любом профиле и отвечает из спеки, лежащей в пакете, — ни токена, ни сети ему не нужно:

{
  "profile": "METRIKA_PROFILE=core",
  "api_methods_total": 108,
  "api_methods_declared": 10,
  "api_methods_hidden": 98,
  "writes_enabled": false,
  "declared_tools": { "Stat API — отчёты": ["metrika_stat_data", "…"] },
  "hidden_tools": { "Management API — …": ["metrika_goal_create", "…"] },
  "how_to_widen": ["METRIKA_PROFILE=read — …", "METRIKA_PROFILE=all вместе с METRIKA_ALLOW_WRITES=1 — …"]
}

Он существует по простой причине: сервер, который что-то скрыл, обязан уметь сказать, что именно и как это включить. instructions видит модель, но не человек — в интерфейс клиента они не показываются; стартовую строку в stderr в обычной работе тоже никто не открывает. Без этого инструмента узнать про остальные 98 можно было только придя сюда.

Список инструментов в ответе строится из того же отбора, по которому они регистрируются, — разойтись с реальностью ему негде, и это проверено тестом.

Почему по умолчанию не всё
Список из 108 инструментов сервера: десять оставлены, 98 вычеркнуты. Манифест по умолчанию — 32 181 байт против 158 301 у полного каталога.

Описания объявленных инструментов лежат в контексте модели, когда клиент их загрузил. Это цена сервера, которую платят за сам факт подключения, а не за вызовы. Замер tools/list (09.09.2026):

ПрофильИнструментовtools/listтокенов
core (по умолчанию)10 + каталог32 181 Б14,8 тыс.
read51 + каталог68 074 Б~31 тыс. — оценка
all + METRIKA_ALLOW_WRITES=1108 + каталог158 301 Б~73 тыс. — оценка

Замер core — 14,5 тысячи до появления каталога и 14,8 после: сам инструмент стоит около 670 байт схемы, примерно 2% набора. Его ответ не входит в эту цену — он платится только при вызове.

Байты точные, их воспроизведёт любой: сериализуй ответ tools/list и посчитай длину. С токенами сложнее, и здесь стоит сказать прямо.

⚠️ Замер честный только у core — его дал /context клиента, который считает собственным токенизатором. Две другие строки пересчитаны из байтов по калибровке 2,17 байта на токен, снятой с той же строки core.

Ходовая эвристика «4 символа на токен» здесь врёт почти вдвое: она выведена на английском тексте, а описания у этого сервера русские, и кириллица в BPE токенизируется примерно вдвое хуже латиницы. Первая редакция этой таблицы была построена именно на ней и называла для core 7,9k вместо 14,5k. Если считаешь бюджет контекста для сервера с не-английскими описаниями — считай токенизатором, а не делением на четыре.

Состав core выведен из замера реального использования, а не из вкуса: шесть отчётов Stat плюс справочники, без которых отчёт не собрать (metrika_counter_list, metrika_counter_get, metrika_goal_list, metrika_segment_list). Порог веса стоит тестом — манифест не может подорожать молча. Порог в тесте стоит на байтах: они не зависят ни от токенизатора, ни от языка описаний.

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

  • Запись выключена по умолчанию, и меняющие инструменты не объявляются вовсе. Среди методов четырнадцать DELETE и пять удаляющих POST (.../measurement/delete, .../expense/delete, .../logrequest/{id}/clean и т. д.). Цена ошибочного вызова — удалённый счётчик или цель без возможности восстановить историю. Модель не может позвать то, чего не видит в tools/list; как включить — сказано в instructions сервера.
  • Аннотации проставлены на всех инструментах (readOnlyHint, destructiveHint, idempotentHint, openWorldHint). Клиент по ним отличает чтение от удаления: удаление под глаголом POST помечено разрушающим, PUT — тоже, потому что заменяет сущность целиком.
  • Ответы Метрики — недоверенные данные. В отчётах лежат поисковые фразы, заголовки страниц, реферера и значения UTM, то есть строки, которые пишут посетители сайта. Любой может зайти на сайт по ссылке с текстом внутри и увидеть его в отчёте. У всех инструментов openWorldHint: true, а в _meta.notes отчётов и выгрузок едет напоминание, что это данные, а не инструкции.
  • stdio остаётся транспортом по умолчанию. HTTP включается только явно через MCP_TRANSPORT=http; безопасный дефолт слушает 127.0.0.1 и проверяет Host.

プライバシーポリシー

サーバーは、あなたに関するデータを収集、保存したり、外部に送信したりしません。テレメトリーも分析も、作者のサーバーへのリクエストもありません。これらは存在せず、このパッケージ用にインフラストラクチャも構築されていません。

唯一のネットワーク上の送信先は https://api-metrika.yandex.net です。トークンは YANDEX_API_KEY からプロセスメモリに読み込まれ、どこにも書き込まれません。ファイルにも、stdout にも、レスポンス本文にも書き込まれません。レポートデータはディスクにキャッシュされず、プロセスの終了後に残りません。

リクエストしたデータは、メトリカの運営者であるヤンデックスによって処理されます。適用されるのはこのポリシーではなく、ヤンデックスのポリシーです。

全文は PRIVACY.md をご覧ください。

1 つのファイルでインストール(MCPB)

Claude Desktop や、MCP バンドルに対応したその他のクライアント向けに、.mcpb ファイルを用意しています。リリースから入手できます。ファイルを開き、インストール画面でトークンを入力すれば完了です。

バンドルは同じコードから同じタグでビルドされます(npm run mcpb)。マニフェストは package.json とプロファイルから生成され、手作業では作成されません。そのため、サーバーとの不整合が生じる余地はなく、テストで検証されています。

⚠️ バンドルでは書き込みを有効にできません。 誤った呼び出しをすると、履歴を復元できないままカウンターや目標が削除される可能性があります。インストール画面に、そのような切り替えスイッチを設けるわけにはいきません。書き込みが必要な場合は、npm からパッケージをインストールし、環境変数で明示的に有効にしてください。

MCP を使わない場合:スキルとコマンドライン

MCP が常にすべての人に適しているとは限りません。クライアントが MCP にまったく対応していない場合もあります。また、ツールの説明はコンテキストを常に占有します。サーバーが接続されている間は、呼び出しているかどうかにかかわらず、コンテキスト内に残ります。

このような場合、同じサーバーをコマンドで起動できます。

npx -y yandex-metrika-mcp-server catalog --search goal
npx -y yandex-metrika-mcp-server describe metrika_stat_data
npx -y yandex-metrika-mcp-server call metrika_stat_data \
  --ids <ID счётчика> --dimensions ym:s:trafficSource \
  --metrics ym:s:visits,ym:s:users --date1 7daysAgo --date2 today

その上にあるのがスキルです。エージェント向けの指示を含むフォルダーで、1 行のコマンドでインストールできます。

npx skills add artgas1/yandex-metrika-mcp        # в текущий проект
npx skills add artgas1/yandex-metrika-mcp -g     # глобально, во все проекты

スキルはクライアントにツールを追加せず、コンテキストも占有しません。メトリカの話題になったときだけ読み込まれます。中身は同じコマンド、108 個すべてのメソッドのリファレンス、ディメンションの辞書です。

対応状況。 インストーラーは .agents/skills/yandex-metrika/ に 1 つのインスタンスを配置し、それを各エージェントのフォルダーにシンボリックリンクします。2 つのエージェントで起動して確認済みです。

エージェント検出方法確認内容
Claude Code.claude/skills/ → シンボリックリンク/yandex-metrika がスキルの内容に基づいて応答する
Codex.agents/skills/ を直接参照SKILL.md のパスを示す。このために AGENTS.md に 1 行も追加する必要はなく、config.toml の設定も不要

インストーラーは同じユニバーサルディレクトリを通じて、ほかにも約 20 個のエージェント(Amp、Cline、Antigravity、Augment など)をサポートするとしています。これらについては確認していません。

これが別の実装ではない理由。 CLI は独自のリクエストを一切行いません。引数を解析して、MCP ツールと同じ executeMethod 関数を呼び出します。そのため、レポートでのロボットフィルター、切り詰めを通知するレスポンス上限、表示 URL からのシークレット除去、ステータスに基づく再試行といった保証も同じです。異なるものがないため、実装が食い違う余地もありません。

スキル内のメソッドリファレンスは、ヤンデックスのドキュメントを毎日反映して更新される spec/metrika-api.json から生成されます。テストでは、コミット済みのファイルと、現在生成されるはずのファイルを照合します。そのため、「スキルが API に追いついていない」状態は見逃されず、テスト失敗として検出されます。

コマンドには、MCP と異なる点が 2 つあります。

MCPコマンド
METRIKA_PROFILE適用されます。デフォルトは core です適用されません — 108 個すべてのメソッドを利用できます
METRIKA_ALLOW_WRITESデータを変更する場合に必要です同様に必要です

プロファイルは、呼び出さないツールの説明によってコンテキストを消費しないために存在します。ターミナルでコマンドを使う場合、そのようなコストはありません。書き込みのゲートは別の問題です。削除された目標は復元できず、ここで制限を緩めるとサーバーを迂回する抜け穴になります。

チェック

Не макет — запустите сами
npm run demo
Запись прогона в терминале: запрос metrika_stat_data с измерением по источникам трафика и периодом в неделю, ответ с объявленным фильтром роботов и тремя строками отчёта.

Всё на записи приходит из ответа сервера по JSON-RPC: строка добавленного фильтра — из _meta.applied_by_server, строки отчёта — из тела ответа. Ни токена, ни сети: запросы уводятся на локальную заглушку, поэтому прогон повторяется где угодно, включая CI. Переснять запись — npm run demo:record.

npm test          # 87 тестов: спека, схемы, протокол MCP, поверхность, бандл, демо
npm run protocol  # только протокольные: stdio, tools/list, tools/call, отказы
npm run smoke     # живые вызовы к API (нужен YANDEX_API_KEY)

Протокольные тесты поднимают сервер как подпроцесс и говорят с ним по JSON-RPC — тем же способом, каким это делает клиент. Сеть при этом не нужна: METRIKA_API_BASE уводит запросы на заглушку. Проверяется в том числе то, чего не видно изнутри: что в stdout не попадает ничего, кроме JSON-RPC, что отказ API приезжает как isError, а не как успешный текст, и что запись действительно заблокирована.

Чего в проверках НЕТ

Евала выбора инструмента. Это единственная проверка, которую не заменяют ни снапшот схемы, ни протокольный тест: описания могут быть синтаксически безупречны, а модель всё равно возьмёт не тот инструмент. Тесты этого не видят по построению — они зовут инструмент по имени, то есть выбор уже сделан за модель.

Здесь это осознанный пропуск, а не забытый пункт. Профиль по умолчанию — десять инструментов, из них шесть отчётов Stat различаются формой ответа, а не темой, и путать их модели особо не с чем. Евал становится нужен, когда поверхность по умолчанию расширяется или когда в неё попадают инструменты с пересекающимися описаниями, — тогда его надо писать до расширения, а не после.

Что изменилось в 2.0.0

Удалены 26 инструментов-обёрток над пресетами Stat API (get_visits, sources_summary, get_page_performance и прочие). Они покрывали малую часть API, зашивали измерения и период в код и не давали задать произвольный запрос. Их заменяют metrika_stat_*, принимающие параметры Stat API как есть.

Появились методы, которых не было вовсе: список счётчиков, цели, сегменты, фильтры, разрешения, расходы, офлайн-конверсии и весь Logs API. Раньше идентификатор счётчика приходилось знать заранее — теперь его можно найти.

Что изменилось в 2.1.0

Сервер довели до состояния, в котором его не страшно оставить агенту.

  • Аннотации на всех 108 инструментах. До этого клиент не отличал metrika_counter_list от metrika_counter_delete.
  • Запись выключена по умолчанию (METRIKA_ALLOW_WRITES).
  • Найден и починен дефект разбора документации. Ассертации размечены строкой, где значение стоит после закрывающей скобки класса, — распознаватель свойств заякорен на конец строки и такие строки не матчил вовсе. В итоге до спеки не доезжало ни одного примера, значения по умолчанию или границы, а часть их падала в описание соседнего поля. Сейчас в спеке 288 примеров, 69 значений по умолчанию и 155 ограничений; ограничения переносятся в схему инструмента, примеры и значения по умолчанию — в описания параметров.
  • Найдена и починена потеря обязательности. Параметры вида «один из N типов» (goal у создания и правки цели, grant у выдачи доступа) собирались как z.unknown(), а он в zod необязателен, — обязательное поле уезжало клиенту как опциональное. Теперь это объединение реальных форм, и обязательность на месте.
  • Ссылки на сущности разворачиваются на один уровень: у 23 параметров тела вместо свободного объекта видны настоящие поля.
  • Послабления на входе там, где они безвредны. Число строкой, булево словом, список через запятую в строке запроса — принимаются; в теле запроса, где важен точный JSON, не принимаются.
  • Потолок длины ответа с объявленным урезанием: выгрузка Logs API бывает в сотни мегабайт.
  • Вычистка секретов из показанного request_url.
  • Повтор на 429 с соблюдением Retry-After.
  • SDK обновлён до 1.30 — на 1.17 висели три опубликованных уязвимости, две высокие; npm audit --audit-level=high теперь часть CI.
  • Починена джоба дрейфа в CI. Она запускала тесты через | tee без pipefail, поэтому код возврата брался у tee и джоба оставалась зелёной при любом падении теста.

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。