mcp-resource-subscribe-test
mcp-resource-subscribe-test
Минимальный MCP-сервер (Streamable HTTP) для тестирования того, корректно ли MCP-клиенты обрабатывают resources/subscribe и notifications/resources/updated.
Этот репозиторий предназначен для воспроизведения проблем / лабораторной проверки совместимости CLI AI-агентов, таких как Codex CLI, Gemini CLI, OpenCode, GitHub Copilot CLI, Claude Code, Goose и Crush.
Цель
Сервер предоставляет один фиксированный MCP-ресурс:
test://review/statusНачальное содержимое:
status: pending
version: 1
message: Waiting for simulated review result.После того как клиент подписывается на ресурс, сервер ожидает MCP_TEST_UPDATE_DELAY_SECONDS, изменяет ресурс и отправляет:
{
"method": "notifications/resources/updated",
"params": {
"uri": "test://review/status"
}
}Обновленное содержимое:
status: reviewed
version: 2
message: Simulated review result is now available.Related MCP server: SkyStage MCP Test Server
Почему Resources/Subscribe, а не Tools/Call
tools/call полезен для явных действий, но многие рабочие процессы агентов зависят от контекста, который меняется после исходного запроса. Опрос каждого источника создает лишний шум и зависит от конкретного клиента. Подписки на MCP-ресурсы предоставляют клиентам протокольный способ узнать, что известный объект контекста изменился и его следует прочитать заново.
Примеры, где важно поведение подписки:
Результат проверки Copilot
Ветка обсуждения проверки PR
Статус CI
Комментарий Codecov
Обсуждение issue в GitHub
Результат локальной сборки/тестирования
Этот тестовый сервер фокусируется на том, замечает ли клиент обновление ресурса, повторно выполняет resources/read и отражает новое содержимое в цикле агента / контексте модели.
Запуск
docker compose up --buildMCP URL:
http://127.0.0.1:8089/mcpДля локальной разработки:
npm install
npm run devКонфигурация
Переменная окружения | По умолчанию |
|
|
|
|
|
|
|
|
|
|
|
|
Если MCP_TEST_SEND_LIST_CHANGED=true, сервер также отправляет notifications/resources/list_changed после имитированного обновления.
Ожидаемое поведение клиента
Идеальный MCP-клиент должен следовать этому потоку:
initialize
↓
resources/list
↓
resources/read test://review/status
↓
resources/subscribe test://review/status
↓
receive notifications/resources/updated
↓
resources/read test://review/status again
↓
reflect updated status: reviewed in agent contextВозможности сервера
Ответ на инициализацию объявляет:
{
"resources": {
"subscribe": true,
"listChanged": true
}
}Реализованные сообщения MCP
initializeresources/listresources/readresources/subscriberesources/unsubscribenotifications/resources/updatednotifications/resources/list_changedприMCP_TEST_SEND_LIST_CHANGED=true
Инструменты (tools) не реализованы.
Логи
Сервер записывает каждое важное сообщение, чтобы поведение клиента можно было проверить объективно:
[initialize] client connected
[resources/list] requested
[resources/read] uri=test://review/status version=1
[resources/subscribe] uri=test://review/status
[resource/update] uri=test://review/status version=2
[notification/send] notifications/resources/updated uri=test://review/status
[resources/read] uri=test://review/status version=2
[resources/unsubscribe] uri=test://review/statusКлючевым доказательством поддержки подписки на ресурсы является:
resources/subscribe was received
notification was sent
resources/read was received again after the notificationТесты
npm testНабор тестов проверяет:
resources/listвозвращаетtest://review/statusначальный
resources/readвозвращает версию 1resources/subscribeинициирует внутреннее обновление до версии 2получено
notifications/resources/updatedобновленный
resources/readвозвращает версию 2
Примечания по совместимости клиентов
Codex CLI
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
Gemini CLI
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
OpenCode
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
GitHub Copilot CLI
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
Claude Code
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
Goose
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
Crush
MCP-соединение:
Вызывает ли он
resources/list?Вызывает ли он
resources/read?Вызывает ли он
resources/subscribe?Получает ли он
notifications/resources/updated?Повторно считывает ли он ресурс после обновления?
Примечания:
This server cannot be deployed
Maintenance
Related MCP Connectors
Minimal streamable HTTP MCP server used for owned-account registry connectivity tests.
Security research canary remote MCP server for owned-account testing.
Experimental MCP server for current empirical verification of explicit public HTTPS endpoint claims.
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Related MCP Servers
- AlicenseCqualityDmaintenanceA simple server implementing the Model Context Protocol (MCP) that echoes messages back, designed for testing MCP clients.13MIT
- FlicenseNot gradedqualityDmaintenanceMinimal MCP server for testing SkyStage's self-auth auto-detection feature. It includes tools like ping, echo, server_info, and read_secret, and uses a mock OAuth provider for login.-
- FlicenseNot gradedqualityDmaintenanceA simple MCP server with OAuth 2.0 authentication for testing OAuth support in mcp-cli.-
- AlicenseNot gradedqualityCmaintenanceEducational MCP server demonstrating the 2026-07-28 stateless protocol with raw Starlette, no SDK, featuring tools, request state handles, MRTR elicitation, and subscriptions.MIT