Files
servers/src/everything/docs/how-it-works.md
cliffhall f561f70002 [WIP] Refactor everything server to be more modular and use recommended APIs.
* Updated docs

* Refactor/renamed toggle-logging.ts to toggle-simulated-logging.ts
  - refactor/renamed registerToggleLoggingTool to registerToggleSimulatedLoggingTool
2025-12-13 10:59:35 -05:00

2.3 KiB
Raw Blame History

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-updates tool, which calls beginSimulatedResourceUpdates(server, sessionId) and stopSimulatedResourceUpdates(sessionId).
  • cleanup(sessionId?) calls stopSimulatedResourceUpdates(sessionId) to clear intervals and remove sessionscoped state.

Sessionscoped 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 given uri, name, and mimeType, returning a resource_link. The content is served from memory for the life of the session only. Supports type: "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.ts compresses fetched content, registers it as a session resource with mimeType: application/gzip, and returns either a resource_link or an inline resource based on outputType.

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-logging tool, which calls beginSimulatedLogging(server, sessionId?) and stopSimulatedLogging(sessionId?). Note that transport disconnect triggers cleanup() which also stops any active intervals.
  • Uses server.sendLoggingMessage({ level, data }, sessionId?) so that the clients configured minimum logging level is respected by the SDK.