mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-21 13:25:20 +02:00
Added tools to toggle simulated logging and resource updates on and off rather than have them start immediately upon connection
* Updated architecture.md
* In server/index.ts
- remove import of beginSimulatedResourceUpdates and beginSimulatedLogging
- remove clientConnected from createServer factory result
* In tools/index.ts
- import registerToggleLoggingTool and registerToggleSubscriberUpdatesTool
- in registerTools
- call registerToggleLoggingTool and registerToggleSubscriberUpdatesTool
* In logging.ts
- in beginSimulatedLogging
- refactor extract inline interval callback into function sendSimulatedLoggingMessage
- call sendSimulatedLoggingMessage right away to send the first message
- supply sendSimulatedLoggingMessage as interval callback
* In subscriptions.ts
- remove import of Transport
- remove transports map
- in beginSimulatedResourceUpdates()
- change arguments to server and sessionId
- check for the subsUpdateInterval for the session
- remove all transport storage and interaction
- instead use the server to send the notification
- in stopSimulatedResourceUpdates()
- remove management of transports map
* In stdio.ts, sse.ts, and streamableHttp.ts
- remove destructure and calling of clientConnected
* Added tools/toggle-logging.ts
- registers a tool that
- takes no arguments
- tracks clients that have been enabled by session id in a set
- if client isn't enabled,
- calls beginSimulatedLogging
- adds session id to client set
- else
- calls stopSimulatedLogging
- deletes session id from client set
- returns a message explaining what was done including what to expect when logging is enabled
* Added tools/toggle-subscriber-updates.ts
- registers a tool that
- takes no arguments
- tracks clients that have been enabled by session id in a set
- if client isn't enabled,
- calls beginSimulatedResourceUpdates
- adds session id to client set
- else
- calls stopSimulatedResourceUpdates
- deletes session id from client set
- returns a message explaining what was done including what to expect when logging is enabled
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
import { dirname, join } from "path";
|
|
import { readFileSync } from "fs";
|
|
import { fileURLToPath } from "url";
|
|
import {
|
|
setSubscriptionHandlers,
|
|
stopSimulatedResourceUpdates,
|
|
} from "../resources/subscriptions.js";
|
|
import { registerTools } from "../tools/index.js";
|
|
import { registerResources } from "../resources/index.js";
|
|
import { registerPrompts } from "../prompts/index.js";
|
|
import { stopSimulatedLogging } from "./logging.js";
|
|
|
|
// Everything Server factory
|
|
export const createServer = () => {
|
|
// Read the server instructions
|
|
const instructions = readInstructions();
|
|
|
|
// Create the server
|
|
const server = new McpServer(
|
|
{
|
|
name: "mcp-servers/everything",
|
|
title: "Everything Reference Server",
|
|
version: "2.0.0",
|
|
},
|
|
{
|
|
capabilities: {
|
|
tools: {},
|
|
logging: {},
|
|
prompts: {},
|
|
resources: {
|
|
subscribe: true,
|
|
},
|
|
},
|
|
instructions,
|
|
}
|
|
);
|
|
|
|
// Register the tools
|
|
registerTools(server);
|
|
|
|
// Register the resources
|
|
registerResources(server);
|
|
|
|
// Register the prompts
|
|
registerPrompts(server);
|
|
|
|
// Set resource subscription handlers
|
|
setSubscriptionHandlers(server);
|
|
|
|
// Return server instance and cleanup function
|
|
return {
|
|
server,
|
|
cleanup: (sessionId?: string) => {
|
|
// Stop any simulated logging or resource updates that may have been initiated.
|
|
stopSimulatedLogging(sessionId);
|
|
stopSimulatedResourceUpdates(sessionId);
|
|
},
|
|
};
|
|
};
|
|
|
|
// Read the server instructions from a file
|
|
function readInstructions(): string {
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
const filePath = join(__dirname, "..", "docs", "server-instructions.md");
|
|
let instructions;
|
|
|
|
try {
|
|
instructions = readFileSync(filePath, "utf-8");
|
|
} catch (e) {
|
|
instructions = "Server instructions not loaded: " + e;
|
|
}
|
|
return instructions;
|
|
}
|