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: mcp-hello-world

Почему 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?

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

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

A
license - permissive license
-
quality - not tested
A
maintenance

Maintenance

Maintainers
3hResponse time
1wRelease cycle
9Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • MCP server wrapping the Tesla Fleet API and TeslaMate API

  • A basic MCP server to operate on the Postman API.

  • MCP (Model Context Protocol) server for Appwrite

View all MCP Connectors

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/scottlz0310/mcp-resource-subscriber'

If you have feedback or need assistance with the MCP directory API, please join our Discord server