mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-02-19 11:54:58 -05:00
* In how-it-works.md, - added a section on conditional tool registration * In server/index.ts - import registerConditionalTools - in an oninitialized handler for the server, call registerConditionalTools - removed clientConnected from ServerFactoryResponse and all mentions in docs * In tools/index.ts - export a registerConditionalTools function - refactor/move calls to registerGetRootsListTool, registerTriggerElicitationRequestTool, and registerTriggerSamplingRequestTool out of registerTools and into registerConditionalTools * In server/roots.ts - only act if client supports roots - remove setInterval from call to requestRoots. It isn't happening during the initialze handshake anymore, so it doesn't interfere with that process if called immediaately * In get-roots-list.ts, trigger-elicitation-request.ts, and trigger-sampling-request.ts, - only register tool if client supports capability * Throughout the rest of the files, removing all references to `clientConnected`
2.8 KiB
2.8 KiB
Everything Server - Startup Process
Architecture | Project Structure | Startup Process | Server Features | Extension Points | How It Works
1. Everything Server Launcher
- Usage
node dist/index.js [stdio|sse|streamableHttp] - Runs the specified transport manager to handle client connections.
- Specify transport type on command line (default
stdio)stdio→transports/stdio.jssse→transports/sse.jsstreamableHttp→transports/streamableHttp.js
2. The Transport Manager
- Creates a server instance using
createServer()fromserver/index.ts- Connects it to the chosen transport type from the MCP SDK.
- Handles communication according to the MCP specs for the chosen transport.
- STDIO:
- One simple, process‑bound connection.
- Calls
clientConnect()upon connection. - Closes and calls
cleanup()onSIGINT.
- SSE:
- Supports multiple client connections.
- Client transports are mapped to
sessionId; - Calls
clientConnect(sessionId)upon connection. - Hooks server’s
oncloseto clean and remove session. - Exposes
/sseGET (SSE stream)/messagePOST (JSON‑RPC messages)
- Streamable HTTP:
- Supports multiple client connections.
- Client transports are mapped to
sessionId; - Calls
clientConnect(sessionId)upon connection. - Exposes
/mcpfor- POST (JSON‑RPC messages)
- GET (SSE stream)
- DELETE (termination)
- Uses an event store for resumability and stores transports by
sessionId. - Calls
cleanup(sessionId)on DELETE.
- STDIO:
3. The Server Factory
- Invoke
createServer()fromserver/index.ts - Creates a new
McpServerinstance with- Capabilities:
tools: {}logging: {}prompts: {}resources: { subscribe: true }
- Server Instructions
- Loaded from the docs folder (
server-instructions.md).
- Loaded from the docs folder (
- Registrations
- Registers tools via
registerTools(server). - Registers resources via
registerResources(server). - Registers prompts via
registerPrompts(server).
- Registers tools via
- Other Request Handlers
- Sets up resource subscription handlers via
setSubscriptionHandlers(server). - Roots list change handler is added post-connection via
- Sets up resource subscription handlers via
- Returns
- The
McpServerinstance - A
clientConnect(sessionId)callback that enables post-connection setup - A
cleanup(sessionId?)callback that stops any active intervals and removes any session‑scoped state
- The
- Capabilities:
Enabling Multiple Clients
Some of the transport managers defined in the transports folder can support multiple clients.
In order to do so, they must map certain data to a session identifier.