Оценка MCP-сервера на моделях

Оценка MCP-сервера на моделях - прогон фиксированного набора задач через модель с подключённым сервером, по нескольку раз на каждую задачу, с автоматической проверкой результата и замером вызовов инструментов, токенов, времени и ошибок. Она показывает, выполняют ли модели задачи, для которых сервер создан, с помощью его инструментов, их описаний и результатов. Место оценки среди других уровней тестирования описано в статье Тестирование MCP-серверов: основы.

Спецификация MCP, текущая версия 2026-07-28, описывает протокол и не описывает оценку: в документации протокола такого раздела нет. Метод для инструментов агентов описан Anthropic в двух инженерных статьях: «Writing effective tools for agents» (11 сентября 2025) и «Demystifying evals for AI agents» (9 января 2026). Кроме того, Anthropic публикует руководство и стенд для оценки MCP-серверов в составе скила mcp-builder в репозитории anthropics/skills.

Кратко

Параметр Значение
Объект Инструменты, описания и результаты MCP-сервера в работе модели
Единица Задача: входной промпт и критерии успеха
Повторение Несколько попыток каждой задачи
Оценщики Код (точный ответ, проверка состояния), модель (LLM-as-judge), человек
Метрики Доля успешных попыток, pass@k, pass^k, вызовы инструментов, токены, время, ошибки инструментов
В спецификации MCP Не описана
Основные источники Инженерные статьи Anthropic, 2025-2026

Какую задачу решает

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

Ручная проверка в чат-ассистенте даёт одну попытку одного сценария. Её нельзя точно повторить, а результат нельзя сравнить между двумя версиями описаний или двумя моделями.

Оценка заменяет это фиксированным набором задач, автоматической проверкой и повторными попытками. Её числа можно сравнивать между версиями сервера, версиями описаний и моделями.

Из чего состоит оценка

Словарь ниже определён в статье «Demystifying evals for AI agents». В третьем столбце - что каждая часть означает для MCP-сервера.

Часть Определение Для MCP-сервера
Задача (task) Отдельный тест с заданными входными данными и критериями успеха Запрос пользователя, для которого нужны инструменты сервера
Попытка (trial) Одно выполнение задачи Один проход агентного цикла по задаче
Оценщик (grader) Логика, которая оценивает одну сторону результата Точный ответ, проверка состояния, LLM-as-judge
Стенограмма (transcript) Полная запись попытки Сообщения, вызовы инструментов, аргументы, результаты, рассуждения
Итоговое состояние (outcome) Состояние окружения после попытки Например, запись, которую создал инструмент
Стенд оценки (evaluation harness) Инфраструктура, которая запускает задачи, записывает шаги, проверяет и сводит результаты Скрипт или фреймворк вокруг API модели
Агентная обвязка (agent harness) Система, которая позволяет модели действовать как агент Хост или SDK для агентов

Статья подчёркивает: оценить агента - значит оценить модель и агентную обвязку вместе. Для MCP-сервера третий компонент - сам сервер.

Задачи

Какой должна быть задача

Anthropic рекомендует задачи из реального использования и на реальных данных, а не в упрощённой песочнице. Сильная задача требует нескольких вызовов инструментов, иногда десятков. Слабая задача называет всё прямо: назначить встречу с указанным адресом почты. Сильная задача требует сначала найти данные: назначить встречу по проекту, приложить заметки с прошлой встречи и забронировать переговорную.

Статья «Demystifying evals» добавляет практические правила:

  • Источник. Для начала достаточно 20-50 простых задач, взятых из реальных сбоев. Такие задачи дают баг-трекер и обращения в поддержку.
  • Однозначность. Два эксперта выносят по результату один и тот же вердикт. У каждой задачи есть эталонное решение.
  • Баланс. В наборе есть задачи, где инструмент нужно вызвать, и задачи, где вызов - ошибка.
  • Сломанные задачи. Задача, которую не проходит ни одна попытка, обычно указывает на дефект задачи или оценщика, а не агента.

Руководство mcp-builder добавляет, что вопросы независимы друг от друга, требуют только операций чтения и имеют ответы, которые не меняются со временем: число реакций на сообщение не подходит, факт о закрытом проекте подходит.

Проверяемый результат

В таблице - три вида оценщиков, которые применяют для MCP-серверов.

Оценщик Что проверяет Ограничения
Точный ответ Итоговый ответ совпадает с известным значением Задача должна задать формат ответа
Проверка состояния Окружение после попытки: запись есть, статус изменился Нужен доступ к системе за сервером
LLM-as-judge Другая модель оценивает ответ по рубрике Недетерминирован, нужна калибровка людьми

Точный ответ подходит для вопросов с одним значением: имя, дата, число. Оценщик не должен отклонять верный ответ из-за форматирования или равнозначной формулировки, поэтому задача указывает формат, например «use YYYY/MM/DD».

Проверка состояния оценивает итог, а не отчёт агента: оценщик ищет бронь в базе данных, а не верит словам агента, что бронь сделана. Для инструментов, которые меняют данные, это основной вид оценщика.

LLM-as-judge применяют, когда результат - свободный текст. Общий метод, рубрики и калибровка описаны в статье Тестирование LLM-приложений.

В задаче можно перечислить и ожидаемые инструменты, но Anthropic предостерегает от излишней детализации: у задачи часто несколько верных путей решения, и оценивается результат, а не путь.

Описание задачи

Спецификация и статьи не определяют формат файла задач. Пример ниже показывает поля, которые обычно нужны описанию задачи; имена полей произвольные.

JSON
{
  "id": "issues-017",
  "split": "train",
  "prompt": "Find the bug that was reopened most often in the Billing project during March 2026 and add the label needs-review to it. Reply with the issue key only.",
  "grader": [
    { "type": "exact_answer", "expected": "BILL-482" },
    { "type": "state_check", "query": "labels of BILL-482", "expected_contains": "needs-review" }
  ],
  "expected_tools": ["search_issues", "get_issue_history", "update_issue"],
  "tags": ["search", "write"]
}

Поле split отделяет задачи для настройки от отложенных. Поле expected_tools сравнивается со стенограммой, но не решает исход.

Запуск оценки

Агентный цикл

Anthropic рекомендует запускать оценку прямыми вызовами API модели, а не через чат-интерфейс. У каждой задачи свой цикл: модель вызывает инструменты и получает результаты, пока не даст итоговый ответ.

Evaluation harness
 |
 +-- tools/list --------------------------> MCP server (version under test)
 |     name, description, inputSchema
 |
 +-- task prompt + tool definitions ------> model API
 |                                            |
 |   <------------------------------------ tool call (name, arguments)
 +-- tools/call --------------------------> MCP server
 |   <------------------------------------ result or isError: true
 +-- tool result ------------------------> model API
 |     ... repeated until a final answer ...
 |
 +-- final answer + environment state ----> graders
 +-- transcript, counters, timings -------> result record

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

Системный промпт просит агента дать структурированный ответ, который может разобрать оценщик, и писать рассуждения и обратную связь перед вызовами инструментов; по ним в стенограмме видно, почему агент выбрал инструмент или не стал его вызывать.

Изолированные попытки

Каждая попытка начинается с чистого окружения: общее состояние делает сбои связанными, а в примере из статьи «Demystifying evals» Claude прочитал историю git, оставшуюся от предыдущих попыток. Для MCP-сервера это означает сброс тестовых данных перед каждой попыткой и идентификаторы состояния, которые не переживают попытку.

Запись результата

Каждая попытка даёт запись, в которой входные параметры прогона хранятся вместе с результатами. Пример ниже - один из возможных форматов; имена полей произвольные.

JSON
{
  "task_id": "issues-017",
  "trial": 3,
  "model": "model-a",
  "agent_harness": "eval-loop-1.2",
  "server_version": "1.5.0",
  "passed": false,
  "graders": [
    { "type": "exact_answer", "passed": true },
    { "type": "state_check", "passed": false }
  ],
  "tool_calls": 14,
  "tool_errors": 3,
  "protocol_errors": 0,
  "input_tokens": 48210,
  "output_tokens": 2315,
  "duration_ms": 41870,
  "transcript": "runs/2026-11-03/issues-017-3.jsonl"
}

Ошибки выполнения инструмента (результаты с isError: true) и ошибки протокола (ошибки JSON-RPC) считаются отдельно: первые доходят до модели, вторые обычно нет.

Повторные попытки и доли успеха

Одна и та же задача в разных попытках даёт разные последовательности вызовов инструментов. Одна успешная попытка показывает, что задачу можно решить, но не что она решается надёжно, поэтому результат задачи - доля успешных попыток. Результаты k попыток одной задачи описывают две метрики.

pass@k - вероятность, что успешна хотя бы одна из k попыток. Метрику ввела статья «Evaluating Large Language Models Trained on Code» (Chen и соавторы, июль 2021) для генерации кода. Статья оценивает её по n ≥ k попыткам, из которых c успешны, как 1 - C(n-c, k) / C(n, k) с усреднением по задачам; C - биномиальный коэффициент.

pass^k - вероятность, что успешны все k попыток. Метрику предложила статья о τ-bench (Yao и соавторы, июнь 2024) для измерения надёжности агентов.

При k = 1 обе метрики равны доле успешных попыток. С ростом k pass@k приближается к 100 процентам, а pass^k - к нулю. Статья «Demystifying evals» приводит пример: при 75 процентах успеха на попытку вероятность, что три попытки подряд успешны, равна 0,75³, около 42 процентов.

В таблице обе метрики для независимых попыток с постоянной долей успеха на попытку p, посчитанные как 1 - (1 - p)^k и p^k.

Доля успеха на попытку pass@3 pass^3 pass^10
50% 87.5% 12.5% 0.1%
75% 98.4% 42.2% 5.6%
90% 99.9% 72.9% 34.9%
99% 100% 97.0% 90.4%

pass@k подходит для сценария, где достаточно одного успеха, например когда разработчик может повторить запрос. pass^k подходит для сценария, где каждый запуск обязан быть успешным, например для агента, который обслуживает пользователей без надзора.

Метрики

В таблице - метрики, которые рекомендует собирать Anthropic, и на что они указывают для MCP-сервера.

Метрика Что показывает
Доля успешных попыток Доля попыток, в которых прошли все оценщики
Число вызовов инструментов Насколько прямо агент идёт к результату; рост указывает на недостающие инструменты или фильтры
Токены Объём описаний и результатов в контексте модели
Время задач и вызовов инструментов Задержка сервера и всего цикла
Ошибки инструментов Вызовы с isError: true: неверные аргументы, сбои системы за сервером
Последовательности вызовов Типовые сценарии работы и кандидаты на объединение инструментов

Метрики сравнимы только на одном и том же наборе задач.

Матрица моделей и хостов

Модели по-разному выбирают инструменты. По данным Anthropic, даже схема имён инструментов, префикс или суффикс с названием сервиса, даёт разные результаты на разных моделях.

На результат влияет и хост, потому что он собирает контекст модели: какие инструменты видит модель, какой системный промпт их окружает, как обрабатываются длинные результаты. Пример - поле instructions в результате server/discover: по схеме клиент может его использовать, например добавить в системный промпт, но не обязан. Anthropic упоминает ещё одну особенность конкретного хоста: Claude Code по умолчанию ограничивает ответ инструмента 25 000 токенов.

Поэтому оценку проводят матрицей: группы задач в строках, сочетания модели и обвязки в столбцах. Пример показывает структуру; значения условные.

Группа задач Модель A, своя обвязка Модель B, своя обвязка Модель A в хосте X
Поиск 46 из 50 попыток 39 из 50 попыток 44 из 50 попыток
Задачи без вызова инструмента 50 из 50 попыток 47 из 50 попыток 48 из 50 попыток

Число попыток растёт с каждой осью: тридцать задач по пять попыток на четырёх сочетаниях - 600 попыток. Сочетания выбирают по моделям и хостам, с которыми работают пользователи сервера.

Анализ стенограмм

Числа показывают, что что-то не так; стенограммы показывают почему. Anthropic рекомендует читать рассуждения и обратную связь агента, а затем сырые вызовы инструментов и результаты: то, что агент упустил, может значить больше, чем то, что он сделал. По статье «Demystifying evals», оценкам не доверяют, пока не прочитаны стенограммы.

В таблице - закономерности, описанные Anthropic, и изменения на стороне сервера, на которые они указывают.

Закономерность в стенограммах Вероятная причина Изменение на сервере
Много повторных вызовов одного инструмента Нет постраничной выдачи, фильтров или выбора диапазона Добавить параметры, которые сужают результат
Частые неверные аргументы Неясное описание или названия параметров Переписать описание, добавить примеры, переименовать параметры
Цепочка низкоуровневых вызовов ради одной операции Инструменты повторяют отдельные эндпоинты API Добавить инструмент для всего сценария
Модель путает инструменты разных серверов Похожие имена без пространства имён Группировать имена по сервису и ресурсу
Модель плохо работает с непрозрачными идентификаторами В результатах только технические ID Возвращать понятные человеку названия рядом с ID

Один из примеров в статье - инструмент веб-поиска Claude: модель без нужды дописывала «2025» в параметр query, и это искажало результаты. Исправило это изменение описания инструмента.

Сбой может вызвать и оценщик. В примере с CORE-Bench из статьи «Demystifying evals» Claude Opus 4.5 набирал 42 процента, пока не исправили ошибки проверки, и 95 процентов после; одна из ошибок отклоняла ответ «96.12» при эталоне «96.124991». Стенограммы неуспешных попыток отделяют ошибки агента от ошибок оценщика.

Устройство инструментов и результатов, к которому ведут эти закономерности, описано в статьях Инструменты (tools) в MCP и MCP-сервер поверх существующего API.

Отложенная выборка

Настройка описаний на тех же задачах, которые измеряют результат, ведёт к переобучению: описания улучшаются для этих задач, а не в целом. Поэтому Anthropic держит отложенную выборку (held-out set), которую не используют, пока меняют инструменты.

Статья «Demystifying evals» разделяет два назначения оценки:

  • Оценка возможностей (capability eval) отвечает на вопрос, что агент умеет делать хорошо. Её доля успеха начинается с низкой и оставляет место для роста.
  • Регрессионная оценка (regression eval) отвечает на вопрос, делает ли агент то, что делал раньше. Её доля успеха держится около 100 процентов.

Задача оценки возможностей, которая стабильно проходит, переходит в регрессионный набор. Набор, где проходят все задачи, показывает только регрессии, а не улучшения; статья называет это насыщением. Повторный запуск оценки после изменений сервера описан в статье Регрессионное тестирование MCP-сервера.

Малые выборки

Наборы задач для MCP-серверов обычно небольшие. Статья Anthropic «A statistical approach to model evaluations» (19 ноября 2024) и сопровождающая её работа «Adding Error Bars to Evals» рекомендуют:

  • указывать при каждой оценке стандартную ошибку среднего; 95-процентный доверительный интервал - оценка плюс-минус 1,96 стандартной ошибки;
  • кластеризовать стандартные ошибки, когда результаты не независимы, например при нескольких попытках одной задачи; по данным статьи, кластеризованные ошибки на популярных наборах могут быть больше наивных более чем в три раза;
  • запускать несколько попыток на задачу и усреднять их;
  • сравнивать две версии на одних и тех же задачах по парным разностям, что убирает разброс сложности задач;
  • выбирать число задач с помощью анализа мощности.

Для доли успехов p на n задачах стандартная ошибка равна квадратному корню из p(1 - p) / n. При 80 процентах на 20 задачах это около 8,9 процентного пункта, а 95-процентный интервал - около плюс-минус 17,5 пункта. На 20 задачах одна задача меняет долю на 5 пунктов, поэтому 80 процентов против 90 на таком наборе сами по себе не показывают, что одна версия лучше.

Оценка, тестирование соответствия и модульные тесты

Таблица сравнивает три вида проверок, которые часто запускают на одном сервере.

Модульные тесты Тестирование соответствия Оценка на моделях
Что проверяется Код обработчиков инструментов Поведение сервера по протоколу Выполнение задач моделью
Детерминированность Детерминированы Детерминировано Недетерминирована
Результат Прошёл или нет Прошла или нет каждая проверка Доли успешных попыток, метрики
Стоимость и время Секунды, без модели Секунды или минуты, без модели Минуты или часы, расход ресурсов модели
Когда запускается При каждом изменении При каждом изменении При изменении инструментов и описаний, по расписанию

Модульные тесты и тестирование соответствия отвечают, правилен ли сервер; оценка отвечает, может ли модель им пользоваться.

Виды проверок не заменяют друг друга. Дефект кода быстрее и дешевле находит модульный тест, дефект протокола - тестирование соответствия. Поэтому оценку запускают после того, как детерминированные проверки прошли.

Термины

Термин Значение
Задача (task) Отдельный тест с заданными входными данными и критериями успеха
Попытка (trial) Одно выполнение задачи; задачу запускают в нескольких попытках
Оценщик (grader) Логика, которая оценивает одну сторону попытки: точный ответ, проверка состояния, LLM-as-judge
Стенограмма (transcript) Полная запись попытки: сообщения, вызовы инструментов, результаты, рассуждения
Итоговое состояние (outcome) Состояние окружения после попытки
Стенд оценки (evaluation harness) Инфраструктура, которая запускает задачи, записывает шаги, проверяет и сводит результаты
pass@k Вероятность, что успешна хотя бы одна из k попыток задачи
pass^k Вероятность, что успешны все k попыток задачи
Отложенная выборка (held-out set) Задачи, которые не используют при настройке инструментов; они подтверждают результат после

Источники

Серия

Model Context Protocol (MCP)
  1. Что такое MCP (Model Context Protocol)
  2. Инструменты (tools) в MCP
  3. Ресурсы и шаблоны ресурсов в MCP
  4. Промпты (prompts) в MCP
  5. Транспорты MCP: stdio и Streamable HTTP
  6. MCP без состояния: изменения 2026-07-28
  7. Авторизация в MCP
  8. Безопасность MCP
  9. Расширения MCP
  10. MCP-сервер поверх существующего API
  11. Тестирование MCP-серверов: основы
  12. Оценка MCP-сервера на моделяхТекущая
  13. Регрессионное тестирование MCP-сервера
  14. Публикация MCP-сервера в MCP Registry

Статьи Wiki пишет и поддерживает команда ComplexQA.