logging refactoring
This commit is contained in:
+34
-30
@@ -2,7 +2,9 @@ import Fastify, { type FastifyInstance } from "fastify";
|
||||
import { ToolDef } from "./types";
|
||||
import McpSession from "./mcpConnection";
|
||||
import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
|
||||
import { pingTool, testAddTool, testRemoveTool, listToolsTool, invokeToolTool } from "./mcpTools";
|
||||
import * as mcpTools from "./mcpTools";
|
||||
import { logged } from "./utils/logged";
|
||||
import cors from '@fastify/cors';
|
||||
|
||||
export class Server {
|
||||
private readonly app: FastifyInstance;
|
||||
@@ -14,34 +16,20 @@ export class Server {
|
||||
this.port = port;
|
||||
this.app = Fastify({
|
||||
trustProxy: true,
|
||||
logger: {
|
||||
serializers: {
|
||||
req(request) {
|
||||
return {
|
||||
method: request.method,
|
||||
url: request.url,
|
||||
host: request.headers.host,
|
||||
remoteAddress: request.ip,
|
||||
headers: request.headers, // <-- full header set
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
// logger: {
|
||||
// level: process.env.LOG_LEVEL ?? "info",
|
||||
// ...(process.env.NODE_ENV !== "production"
|
||||
// ? {
|
||||
// transport: {
|
||||
// target: "pino-pretty",
|
||||
// options: { colorize: true, translateTime: "HH:MM:ss.l", ignore: "pid,hostname" },
|
||||
// },
|
||||
// }
|
||||
// : {}),
|
||||
// serializers: {
|
||||
// req(request) {
|
||||
// return {
|
||||
// method: request.method,
|
||||
// url: request.url,
|
||||
// host: request.headers.host,
|
||||
// remoteAddress: request.ip,
|
||||
// headers: request.headers, // <-- full header set
|
||||
// };
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
});
|
||||
this.registerLogging();
|
||||
this.registerRoutes();
|
||||
}
|
||||
|
||||
private registerLogging(): void {
|
||||
@@ -73,8 +61,10 @@ export class Server {
|
||||
public registerTools(...tools: ToolDef[]): void {
|
||||
|
||||
for (const tool of tools) {
|
||||
if (!this.getTool(tool.title))
|
||||
this.tools[tool.title] = tool;
|
||||
if (!this.getTool(tool.title)) {
|
||||
// console.log(`Registering new tool ${tool.title}`);
|
||||
this.tools[tool.title] = logged(tool);
|
||||
}
|
||||
}
|
||||
|
||||
this.emitToolListChange();
|
||||
@@ -88,8 +78,11 @@ export class Server {
|
||||
}
|
||||
|
||||
private emitToolListChange() {
|
||||
const toolList = Object.values(this.tools);
|
||||
console.log(`Advertising updated tool list: ${toolList.map((tool) => tool.title)}`);
|
||||
|
||||
for (const session of Object.values(this.sessions))
|
||||
session.handleToolListChange(Object.values(this.tools));
|
||||
session.handleToolListChange(toolList);
|
||||
}
|
||||
|
||||
public getSession(sessionId: string): McpSession | undefined {
|
||||
@@ -101,6 +94,9 @@ export class Server {
|
||||
// underlying Node req/res it expects.
|
||||
private registerRoutes(): void {
|
||||
this.app.post("/mcp", async (request, reply) => {
|
||||
reply.raw.setHeader('Access-Control-Allow-Origin', request.headers.origin ?? '*');
|
||||
reply.raw.setHeader('Access-Control-Allow-Credentials', 'true');
|
||||
reply.raw.setHeader('Vary', 'Origin');
|
||||
|
||||
let session: McpSession | undefined;
|
||||
|
||||
@@ -157,10 +153,18 @@ export class Server {
|
||||
}
|
||||
|
||||
async start(): Promise<void> {
|
||||
await this.app.register(cors, {
|
||||
origin: true,
|
||||
credentials: true,
|
||||
});
|
||||
|
||||
await this.registerLogging();
|
||||
await this.registerRoutes();
|
||||
|
||||
await this.app.listen({ port: this.port, host: "0.0.0.0" });
|
||||
this.app.log.info(`MCP ping server listening on http://0.0.0.0:${this.port}/mcp`);
|
||||
}
|
||||
}
|
||||
|
||||
export const server = new Server();
|
||||
server.registerTools(pingTool, listToolsTool, invokeToolTool, testAddTool, testRemoveTool);
|
||||
server.registerTools(...Object.values(mcpTools));
|
||||
Reference in New Issue
Block a user