From b51f06c09c66a09c8ac49251d0b363961cc05e56 Mon Sep 17 00:00:00 2001 From: xiaozhu001 Date: Thu, 27 Mar 2025 15:00:51 +0800 Subject: [PATCH] add tools header --- src/client/index.ts | 3 ++- src/server/mcp.ts | 7 ++++--- src/types.ts | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/client/index.ts b/src/client/index.ts index bcad952c6..feaf8918d 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -407,9 +407,10 @@ export class Client< | typeof CallToolResultSchema | typeof CompatibilityCallToolResultSchema = CallToolResultSchema, options?: RequestOptions, + headers?: Record ) { return this.request( - { method: "tools/call", params }, + { method: "tools/call", params, headers }, resultSchema, options, ); diff --git a/src/server/mcp.ts b/src/server/mcp.ts index 8f4a909ce..1e85e6e0c 100644 --- a/src/server/mcp.ts +++ b/src/server/mcp.ts @@ -143,7 +143,7 @@ export class McpServer { const args = parseResult.data; const cb = tool.callback as ToolCallback; try { - return await Promise.resolve(cb(args, extra)); + return await Promise.resolve(cb(args, extra, request.headers)); } catch (error) { return { content: [ @@ -158,7 +158,7 @@ export class McpServer { } else { const cb = tool.callback as ToolCallback; try { - return await Promise.resolve(cb(extra)); + return await Promise.resolve(cb(extra, request.headers)); } catch (error) { return { content: [ @@ -695,8 +695,9 @@ export type ToolCallback = ? ( args: z.objectOutputType, extra: RequestHandlerExtra, + headers: Record | undefined ) => CallToolResult | Promise - : (extra: RequestHandlerExtra) => CallToolResult | Promise; + : (extra: RequestHandlerExtra, headers: Record | undefined) => CallToolResult | Promise; type RegisteredTool = { description?: string; diff --git a/src/types.ts b/src/types.ts index d051d8f76..06efb234d 100644 --- a/src/types.ts +++ b/src/types.ts @@ -36,6 +36,7 @@ const BaseRequestParamsSchema = z export const RequestSchema = z.object({ method: z.string(), + headers: z.optional(z.record(z.union([z.string(), z.number(), z.boolean()]))), params: z.optional(BaseRequestParamsSchema), });