mcp-tester
mcp-tester
Инструментированный MCP-сервер для тестирования соответствия клиента уведомлениям */list_changed и другим функциям протокола.
Зачем
В PR mcaps-microsoft/msx-mcp#321 было предложено динамическое появление инструментов через notifications/tools/list_changed. PR был закрыт с утверждением, что «Copilot CLI кэширует tools/list при запуске сессии и игнорирует notifications/tools/list_changed» — однако никаких инструментальных экспериментов для подтверждения или опровержения этого не проводилось.
Этот репозиторий предоставляет аппарат для проверки данного утверждения — и соответствия любого MCP-клиента стандарту list_changed — с помощью реальных доказательств.
Что он делает
Пробный MCP-сервер (
src/server.ts) — самоинструментирующийся MCP-сервер, который записывает каждое сообщение JSON-RPC в свой канал stdio. Он предоставляет инструменты, ресурсы и промпты в альфа-состоянии, а также инструменты-триггеры, которые переключают их в бета-состояние и отправляют соответствующее уведомление*/list_changed.Автоматизированный клиентский драйвер (
src/driver.ts) — MCP-клиент на основе SDK, который управляет сервером через полный цикл мутации. Это контроль: он доказывает, что протокол работает, когда обе конечные точки соблюдают спецификацию. Любой клиент, который отклоняется от этого поведения, доказуемо не соответствует стандарту.Анализатор логов (
src/analyze.ts) — считывает лог JSONL и создает таблицу доказательств в формате markdown, отвечающую на конкретные вопросы: получил ли клиент уведомление? Выполнил ли он повторный запрос? Может ли он вызвать новый элемент? Может ли он все еще вызвать удаленный элемент?Протокол для человека (
PROTOCOL.md) — пошаговые инструкции по запуску того же теста для Copilot CLI или любого другого MCP-клиента.
Быстрый старт
git clone https://github.com/ericchansen/mcp-tester.git
cd mcp-tester
npm install
npm run buildЗапуск автоматизированного контроля (SDK-клиент)
npm run driver -- --domain allЭто запускает пробный сервер, выполняет полный протокол мутации для инструментов, ресурсов и промптов, а также сообщает результаты. Вы должны увидеть, что все три домена проходят проверку с полным соответствием.
Анализ лога
npm run analyze -- path/to/log.jsonl --domain toolsТестирование вашего собственного MCP-клиента
См. PROTOCOL.md для получения пошаговых инструкций по тестированию Copilot CLI или любого другого MCP-клиента с помощью этого пробника.
Структура репозитория
mcp-tester/
|-- README.md # This file
|-- PROTOCOL.md # Human-driven test procedure
|-- LICENSE # MIT
|-- package.json
|-- tsconfig.json
|-- src/
| |-- server.ts # Probe MCP server (stdio)
| |-- logger.ts # JSONL stdio tap + log writer
| |-- analyze.ts # CLI: parses log -> markdown evidence table
| +-- driver.ts # CLI: spawns server, drives it via SDK Client
+-- results/
+-- copilot-cli/
+-- .gitkeep # Committed experiment results go hereКак работает пробник
Начальное состояние (Альфа)
Домен | Альфа-элемент |
Инструменты |
|
Ресурсы |
|
Промпты |
|
Плюс пять постоянных инструментов: mcptester_mutate_tools, mcptester_mutate_resources, mcptester_mutate_prompts, mcptester_status.
После мутации (Бета)
Когда вызывается инструмент mcptester_mutate_*:
Альфа-элемент удаляется (через
handle.remove()в SDK)Регистрируется бета-элемент
SDK автоматически отправляет соответствующее уведомление
notifications/*/list_changeddebouncedNotificationMethodsобъединяет удаление и регистрацию в одно уведомление
Домен | Бета-элемент |
Инструменты |
|
Ресурсы |
|
Промпты |
|
Логирование
Каждое сообщение JSON-RPC (входящее и исходящее) записывается в файл JSONL. Логгер перехватывает process.stdin и process.stdout через потоки Transform, установленные перед транспортом SDK, поэтому он видит каждый байт, не вмешиваясь в работу протокола.
Ограничения
Только транспорт stdio — тестирование HTTP/SSE пока не реализовано
Только три потока
list_changed— в будущем планируются тесты для выборки, получения данных, корней, прогресса, завершенийТестирование одного сервера — за раз тестируется одно соединение с MCP-сервером
Лицензия
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ericchansen/mcp-tester'
If you have feedback or need assistance with the MCP directory API, please join our Discord server