Skip to main content
Glama
scottlz0310

mcp-resource-subscribe-test

by scottlz0310

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 --build

MCP URL:

http://127.0.0.1:8089/mcp

Для локальной разработки:

npm install
npm run dev

Конфигурация

Переменная окружения

По умолчанию

MCP_TEST_PORT

8089

MCP_TEST_UPDATE_DELAY_SECONDS

5

MCP_TEST_INITIAL_STATUS

pending

MCP_TEST_UPDATED_STATUS

reviewed

MCP_TEST_SEND_LIST_CHANGED

false

MCP_TEST_LOG_LEVEL

debug

Если 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

  • initialize

  • resources/list

  • resources/read

  • resources/subscribe

  • resources/unsubscribe

  • notifications/resources/updated

  • notifications/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 возвращает версию 1

  • resources/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?

  • Повторно считывает ли он ресурс после обновления?

  • Примечания:

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Minimal 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.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Educational MCP server demonstrating the 2026-07-28 stateless protocol with raw Starlette, no SDK, featuring tools, request state handles, MRTR elicitation, and subscriptions.
    MIT