# Тестер контрактов MCP-серверов (транспорты stdio + WebSocket · проверка схем JSON Schema 2020-12)

Сквозная проверка контрактов серверов Model Context Protocol: согласование JSON-RPC 2.0, обмен capabilities, tools/list с корневым типом object и компиляцией по черновику 2020-12, чтение resources, получение prompts, ping, семантика -32601 для неизвестных методов, круг sampling/createMessage и дисциплина stdio-фрейминга; по умолчанию — офлайн-самопроверка на встроенном эталонном сервере либо проверка вашей stdio-команды или ws://-эндпоинта.

> Каноническая страница: https://elysiatools.com/ru/tools/model-context-protocol-mcp-server-tool-schema-stdio-websocket-transport-contract-tester

- **Категория:** AI Tools

- **Ключевые слова:** MCP, Model Context Protocol, контрактное тестирование, JSON-RPC, stdio, WebSocket, схема инструментов, согласование возможностей, sampling, отчёт соответствия

## Обзор

Основание протокола (эпоха initialize, 2024-11-05 … 2025-11-25): запрос initialize несёт protocolVersion, capabilities клиента и clientInfo; сервер отвечает serverInfo + capabilities; затем клиент обязан отправить уведомление notifications/initialized. Официальный транспорт stdio — JSON-RPC, разделённый переводами строк (без вложенных переводов, логи в stderr, в stdout — только сообщения MCP); WebSocket — пользовательский транспорт (§ Custom Transports): одно JSON-RPC-сообщение на текстовый кадр. Схема каждого инструмента обязана иметь type:object в корне; тестер компилирует каждую inputSchema через Ajv 2020-12. sampling — запрос сервер→клиент: если клиент объявил capability, сервер может послать sampling/createMessage (messages[] + maxTokens), на который тестер отвечает и проверяет форму. Ревизия 2026-07-28 вводит stateless-ядро (серверы больше не инициируют запросы); тестер ориентирован на классическую эпоху initialize и отмечает это в отчёте. Режим по умолчанию проверяет встроенный эталонный сервер на двух транспортах (пара stdio-потоков в процессе + реальный TCP-WebSocket на 127.0.0.1) — детерминированно и без сети.

## Входные данные

- **Режим проверки** (select)
- **Команда сервера (режим stdio)** (text): npx -y @modelcontextprotocol/server-everything
- **WebSocket-адрес (ws:// или wss://)** (text): ws://127.0.0.1:3001/mcp
- **Запрашиваемая версия протокола** (select)
- **Таймаут запроса (мс)** (number): 5000
- **Проверять входные схемы (JSON Schema 2020-12)** (checkbox)

## Когда использовать

- При разработке и отладке собственного MCP-сервера для проверки корректности рукопожатия initialize, разбора схем и обработки ошибок.
- Перед интеграцией стороннего MCP-инструмента в LLM-клиент для проверки чистоты stdio-фрейминга и валидности входных параметров.
- Для верификации совместимости сервера с различными версиями спецификации MCP и контроля двусторонних запросов sampling/createMessage.

## Как это работает

- Инициализирует сессию через stdio-процесс, WebSocket-соединение или встроенный эталонный сервер с передачей protocolVersion и capabilities.
- Отправляет стандартные запросы протокола: ping, tools/list, resources/list, prompts/list, а также запрос несуществующего метода для проверки кода ошибки -32601.
- Компилирует inputSchema каждого инструмента через валидатор Ajv по стандарту JSON Schema 2020-12 и проверяет корневой тип object.
- Формирует итоговый HTML-отчёт с детализацией по каждому шагу, матрицей возможностей и показателями соответствия.

## Сценарии использования

- Интеграционное тестирование локально собираемых серверов MCP перед публикацией в реестре.
- Диагностика утечки логов в поток stdout вместо stderr при использовании транспорта stdio.
- Автоматизированный аудит соответствия схем инструментов требованиям JSON Schema 2020-12.

## Частые вопросы

### Какие транспорты поддерживает тестер?

Поддерживаются потоковый транспорт stdio (с разделением строк) и WebSocket (ws:// и wss:// с одним сообщением на текстовый кадр), а также встроенный офлайн-эталон.

### Как проверяются схемы входных параметров инструментов?

Каждая inputSchema из tools/list проверяется на наличие корневого типа object и компилируется по стандарту JSON Schema 2020-12.

### Что происходит при ошибке подключения к серверу?

Сбой соединения или запуска команды фиксируется в отчёте как непройденная проверка рукопожатия без аварийного завершения работы тестера.

### Поддерживается ли проверка двусторонних запросов sampling?

Да, при объявлении сервером поддержки sampling выполняется тестовый раунд sampling/createMessage с проверкой структуры параметров.

### Можно ли протестировать работу без запуска внешнего сервера?

Да, режим reference-selftest запускает встроенный эталонный сервер локально через stdio и loopback WebSocket без обращения к внешней сети.

## Связанные инструменты

- [Планировщик миграции CSV в базу данных](https://elysiatools.com/ru/tools/csv-to-database-migration-planner): Выводит реляционную схему из CSV и генерирует CREATE TABLE и ALTER для PostgreSQL, MySQL, SQLite или SQL Server
- [Экстрактор токенов темы ECharts](https://elysiatools.com/ru/tools/echarts-theme-token-extractor): Извлекает дизайн-токены — цвета, числа, размеры шрифтов и строки — из JSON темы ECharts и экспортирует их прямо в вашу дизайн-систему. Вставьте объект темы (тот, что регистрируется и передаётся в echarts.init(dom, themeName)) — инструмент обойдёт каждый лист, пометит каждый цвет (с опциональной нормализацией имя/rgb → hex), числовой отступ, размер шрифта и строку, затем выдаст чистые CSS-переменные, конфиг theme.extend для Tailwind, tokens.json Style Dictionary или SCSS-переменные. Мост между темой визуализации ECharts и дизайн-токенами Figma/CSS/Tailwind без копирования каждого значения вручную.
- [Палитра из изображения в design-токены](https://elysiatools.com/ru/tools/image-to-design-tokens): Извлекает доминирующие цвета из изображения методом k-средних и экспортирует их как CSS-переменные / SCSS / конфиг Tailwind / JSON-токены с именами и шкалой оттенков
- [Генератор и анализатор JWK](https://elysiatools.com/ru/tools/jwk-generator): Генерирует JSON Web Keys (JWK) для RSA, EC (P-256/P-384/P-521/secp256k1) и OKP (Ed25519/Ed448/X25519/X448), либо разбирает существующий JWK для просмотра параметров, отпечатка и метаданных
- [Мост OCR PDF → структурированный JSON](https://elysiatools.com/ru/tools/ocr-pdf-to-structured-json-bridge): Извлекает текстовый слой PDF с геометрией (строки по y-координате, таблицы по промежуткам колонок, заголовки по кеглю, пары ключ-значение через двоеточие) и заполняет пользовательскую JSON-схему поле за полем — метки сопоставляются по нормализованным ключам, значения приводятся к объявленным типам и проверяются ajv.
- [Извлекатель ключей JSON](https://elysiatools.com/ru/tools/json-key-extractor): Извлекает все ключи из объектов JSON с множественными форматами вывода. Идеально для анализа структуры JSON, генерации документации и понимания сложных вложенных объектов.
- [Генератор JSON-LD из CSV](https://elysiatools.com/ru/tools/json-ld-generator-from-csv): Преобразует строки CSV или Excel в Schema.org JSON-LD для Article, Product или Event с результатом, готовым к SEO-проверке
- [Конструктор JSON Schema для tool-calling LLM](https://elysiatools.com/ru/tools/llm-tool-calling-json-schema-builder): Опишите LLM-инструмент один раз — получите проверенные payload'ы function-calling для OpenAI, Anthropic и Gemini.

## Примеры

- [Примеры JSON чата](https://elysiatools.com/ru/samples/chat-transcript-json): Примеры JSON для чат-транскриптов с несколькими ролями
- [Примеры JSON для Rich Text](https://elysiatools.com/ru/samples/rich-media-json): Примеры JSON для редакторов rich text (TipTap, Quill, Slate)
- [JSON Примеры Terraform Plan](https://elysiatools.com/ru/samples/terraform-plan-json-samples): Файлы Terraform plan JSON для визуализации зависимостей и проверки изменений, похожие на terraform show -json
- [Примеры JSON](https://elysiatools.com/ru/samples/json): Примеры формата JSON (JavaScript Object Notation) от простых до сложных структур
