Skip to main content
Glama
scottlz0310

mcp-resource-subscribe-test

by scottlz0310

mcp-resource-subscribe-test

Minimaler MCP-Streamable-HTTP-Server zum Testen, ob MCP-Clients resources/subscribe und notifications/resources/updated korrekt verarbeiten.

Dieses Repository dient als reproduzierbares Problem- / Kompatibilitätslabor für CLI-KI-Agenten wie Codex CLI, Gemini CLI, OpenCode, GitHub Copilot CLI, Claude Code, Goose und Crush.

Zweck

Der Server stellt eine feste MCP-Ressource bereit:

test://review/status

Anfänglicher Inhalt:

status: pending
version: 1
message: Waiting for simulated review result.

Nachdem ein Client die Ressource abonniert hat, wartet der Server für MCP_TEST_UPDATE_DELAY_SECONDS, ändert die Ressource und sendet:

{
  "method": "notifications/resources/updated",
  "params": {
    "uri": "test://review/status"
  }
}

Aktualisierter Inhalt:

status: reviewed
version: 2
message: Simulated review result is now available.

Related MCP server: SkyStage MCP Test Server

Warum Resources/Subscribe statt Tools/Call

tools/call ist nützlich für explizite Aktionen, aber viele Agenten-Workflows hängen von Kontext ab, der sich nach der ursprünglichen Anfrage ändert. Das Abfragen (Polling) jeder Quelle ist laut und client-spezifisch. MCP-Ressourcen-Abonnements bieten Clients eine protokollbasierte Möglichkeit zu erfahren, dass sich ein bekanntes Kontextobjekt geändert hat und neu gelesen werden sollte.

Beispiele, bei denen das Abonnement-Verhalten wichtig ist:

  • Copilot-Prüfergebnis

  • PR-Review-Thread

  • CI-Status

  • Codecov-Kommentar

  • GitHub-Issue-Diskussion

  • lokales Build-/Testergebnis

Dieser Testserver konzentriert sich darauf, ob der Client eine Ressourcenaktualisierung bemerkt, resources/read erneut ausführt und den neuen Inhalt im Agenten-Loop / Modellkontext widerspiegelt.

Start

docker compose up --build

MCP-URL:

http://127.0.0.1:8089/mcp

Für die lokale Entwicklung:

npm install
npm run dev

Konfiguration

Umgebungsvariable

Standard

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

Wenn MCP_TEST_SEND_LIST_CHANGED=true ist, sendet der Server nach dem simulierten Update auch notifications/resources/list_changed.

Erwartetes Client-Verhalten

Ein idealer MCP-Client sollte diesem Ablauf folgen:

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

Server-Fähigkeiten

Die Initialisierungsantwort kündigt Folgendes an:

{
  "resources": {
    "subscribe": true,
    "listChanged": true
  }
}

Implementierte MCP-Nachrichten

  • initialize

  • resources/list

  • resources/read

  • resources/subscribe

  • resources/unsubscribe

  • notifications/resources/updated

  • notifications/resources/list_changed wenn MCP_TEST_SEND_LIST_CHANGED=true

Es sind keine Tools implementiert.

Protokolle

Der Server protokolliert jede wichtige Nachricht, damit das Client-Verhalten objektiv überprüft werden kann:

[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

Der wichtigste Nachweis für die Unterstützung von Ressourcen-Abonnements ist:

resources/subscribe was received
notification was sent
resources/read was received again after the notification

Tests

npm test

Die Testsuite überprüft:

  • resources/list gibt test://review/status zurück

  • anfängliches resources/read gibt Version 1 zurück

  • resources/subscribe löst ein internes Update auf Version 2 aus

  • notifications/resources/updated wird empfangen

  • aktualisiertes resources/read gibt Version 2 zurück

Hinweise zur Client-Kompatibilität

Codex CLI

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

Gemini CLI

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

OpenCode

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

GitHub Copilot CLI

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

Claude Code

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

Goose

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

Crush

  • MCP-Verbindung:

  • Ruft es resources/list auf?

  • Ruft es resources/read auf?

  • Ruft es resources/subscribe auf?

  • Empfängt es notifications/resources/updated?

  • Liest es die Ressource nach der Aktualisierung erneut?

  • Hinweise:

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