mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-19 16:54:19 +02:00
* Updated docs * Refactor/renamed toggle-logging.ts to toggle-simulated-logging.ts - refactor/renamed registerToggleLoggingTool to registerToggleSimulatedLoggingTool
2.3 KiB
2.3 KiB
Everything Server - How It Works
Architecture | Project Structure | Startup Process | Server Features | Extension Points | How It Works
Resource Subscriptions
Each client manages its own resource subscriptions and receives notifications only for the URIs it subscribed to, independent of other clients.
Module: resources/subscriptions.ts
- Tracks subscribers per URI:
Map<uri, Set<sessionId>>. - Installs handlers via
setSubscriptionHandlers(server)to process subscribe/unsubscribe requests and keep the map updated. - Updates are started/stopped on demand by the
toggle-subscriber-updatestool, which callsbeginSimulatedResourceUpdates(server, sessionId)andstopSimulatedResourceUpdates(sessionId). cleanup(sessionId?)callsstopSimulatedResourceUpdates(sessionId)to clear intervals and remove session‑scoped state.
Session‑scoped Resources
Module: resources/session.ts
getSessionResourceURI(name: string): Builds a session resource URI:demo://resource/session/<name>.registerSessionResource(server, resource, type, payload): Registers a resource with the givenuri,name, andmimeType, returning aresource_link. The content is served from memory for the life of the session only. Supportstype: "text" | "blob"and returns data in the corresponding field.- Intended usage: tools can create and expose per-session artifacts without persisting them. For example,
tools/gzip-file-as-resource.tscompresses fetched content, registers it as a session resource withmimeType: application/gzip, and returns either aresource_linkor an inlineresourcebased onoutputType.
Simulated Logging
Module: server/logging.ts
- Periodically sends randomized log messages at different levels. Messages can include the session ID for clarity during demos.
- Started/stopped on demand via the
toggle-simulated-loggingtool, which callsbeginSimulatedLogging(server, sessionId?)andstopSimulatedLogging(sessionId?). Note that transport disconnect triggerscleanup()which also stops any active intervals. - Uses
server.sendLoggingMessage({ level, data }, sessionId?)so that the client’s configured minimum logging level is respected by the SDK.