mcp-proxy 5.6.1 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -43,10 +43,12 @@ declare class InMemoryEventStore implements EventStore {
43
43
  //#region src/proxyServer.d.ts
44
44
  declare const proxyServer: ({
45
45
  client,
46
+ requestTimeout,
46
47
  server,
47
48
  serverCapabilities
48
49
  }: {
49
50
  client: Client;
51
+ requestTimeout?: number;
50
52
  server: Server;
51
53
  serverCapabilities: ServerCapabilities;
52
54
  }) => Promise<void>;
@@ -61,6 +63,7 @@ type ServerLike = {
61
63
  };
62
64
  declare const startHTTPServer: <T extends ServerLike>({
63
65
  apiKey,
66
+ authenticate,
64
67
  createServer,
65
68
  enableJsonResponse,
66
69
  eventStore,
@@ -74,6 +77,7 @@ declare const startHTTPServer: <T extends ServerLike>({
74
77
  streamEndpoint
75
78
  }: {
76
79
  apiKey?: string;
80
+ authenticate?: (request: http.IncomingMessage) => Promise<unknown>;
77
81
  createServer: (request: http.IncomingMessage) => Promise<T>;
78
82
  enableJsonResponse?: boolean;
79
83
  eventStore?: EventStore;
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Client, InMemoryEventStore, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, NEVER, ReadBuffer, Server, ZodIssueCode, anyType, arrayType, booleanType, isInitializedNotification, isJSONRPCRequest, isJSONRPCResponse, numberType, objectType, proxyServer, serializeMessage, startHTTPServer, stringType } from "./stdio-D0Lv8ytu.js";
1
+ import { Client, InMemoryEventStore, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, NEVER, ReadBuffer, Server, ZodIssueCode, anyType, arrayType, booleanType, isInitializedNotification, isJSONRPCRequest, isJSONRPCResponse, numberType, objectType, proxyServer, serializeMessage, startHTTPServer, stringType } from "./stdio-so1-I7Pn.js";
2
2
  import process from "node:process";
3
3
 
4
4
  //#region node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/dist/index.js
@@ -4400,7 +4400,7 @@ var McpError = class extends Error {
4400
4400
 
4401
4401
  //#endregion
4402
4402
  //#region src/proxyServer.ts
4403
- const proxyServer = async ({ client, server, serverCapabilities }) => {
4403
+ const proxyServer = async ({ client, requestTimeout, server, serverCapabilities }) => {
4404
4404
  if (serverCapabilities?.logging) {
4405
4405
  server.setNotificationHandler(LoggingMessageNotificationSchema, async (args) => {
4406
4406
  return client.notification(args);
@@ -4411,44 +4411,44 @@ const proxyServer = async ({ client, server, serverCapabilities }) => {
4411
4411
  }
4412
4412
  if (serverCapabilities?.prompts) {
4413
4413
  server.setRequestHandler(GetPromptRequestSchema, async (args) => {
4414
- return client.getPrompt(args.params);
4414
+ return client.getPrompt(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4415
4415
  });
4416
4416
  server.setRequestHandler(ListPromptsRequestSchema, async (args) => {
4417
- return client.listPrompts(args.params);
4417
+ return client.listPrompts(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4418
4418
  });
4419
4419
  }
4420
4420
  if (serverCapabilities?.resources) {
4421
4421
  server.setRequestHandler(ListResourcesRequestSchema, async (args) => {
4422
- return client.listResources(args.params);
4422
+ return client.listResources(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4423
4423
  });
4424
4424
  server.setRequestHandler(ListResourceTemplatesRequestSchema, async (args) => {
4425
- return client.listResourceTemplates(args.params);
4425
+ return client.listResourceTemplates(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4426
4426
  });
4427
4427
  server.setRequestHandler(ReadResourceRequestSchema, async (args) => {
4428
- return client.readResource(args.params);
4428
+ return client.readResource(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4429
4429
  });
4430
4430
  if (serverCapabilities?.resources.subscribe) {
4431
4431
  server.setNotificationHandler(ResourceUpdatedNotificationSchema, async (args) => {
4432
4432
  return client.notification(args);
4433
4433
  });
4434
4434
  server.setRequestHandler(SubscribeRequestSchema, async (args) => {
4435
- return client.subscribeResource(args.params);
4435
+ return client.subscribeResource(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4436
4436
  });
4437
4437
  server.setRequestHandler(UnsubscribeRequestSchema, async (args) => {
4438
- return client.unsubscribeResource(args.params);
4438
+ return client.unsubscribeResource(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4439
4439
  });
4440
4440
  }
4441
4441
  }
4442
4442
  if (serverCapabilities?.tools) {
4443
4443
  server.setRequestHandler(CallToolRequestSchema, async (args) => {
4444
- return client.callTool(args.params);
4444
+ return client.callTool(args.params, void 0, requestTimeout ? { timeout: requestTimeout } : void 0);
4445
4445
  });
4446
4446
  server.setRequestHandler(ListToolsRequestSchema, async (args) => {
4447
- return client.listTools(args.params);
4447
+ return client.listTools(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4448
4448
  });
4449
4449
  }
4450
4450
  server.setRequestHandler(CompleteRequestSchema, async (args) => {
4451
- return client.complete(args.params);
4451
+ return client.complete(args.params, requestTimeout ? { timeout: requestTimeout } : void 0);
4452
4452
  });
4453
4453
  };
4454
4454
 
@@ -15045,13 +15045,39 @@ const cleanupServer = async (server, onClose) => {
15045
15045
  console.error("[mcp-proxy] error closing server", error);
15046
15046
  }
15047
15047
  };
15048
- const handleStreamRequest = async ({ activeTransports, createServer, enableJsonResponse, endpoint, eventStore, onClose, onConnect, req, res, stateless }) => {
15048
+ const handleStreamRequest = async ({ activeTransports, authenticate, createServer, enableJsonResponse, endpoint, eventStore, onClose, onConnect, req, res, stateless }) => {
15049
15049
  if (req.method === "POST" && new URL(req.url, "http://localhost").pathname === endpoint) {
15050
15050
  try {
15051
15051
  const sessionId = Array.isArray(req.headers["mcp-session-id"]) ? req.headers["mcp-session-id"][0] : req.headers["mcp-session-id"];
15052
15052
  let transport;
15053
15053
  let server;
15054
15054
  const body = await getBody(req);
15055
+ if (stateless && authenticate) try {
15056
+ if (!await authenticate(req)) {
15057
+ res.setHeader("Content-Type", "application/json");
15058
+ res.writeHead(401).end(JSON.stringify({
15059
+ error: {
15060
+ code: -32e3,
15061
+ message: "Unauthorized: Authentication failed"
15062
+ },
15063
+ id: body?.id ?? null,
15064
+ jsonrpc: "2.0"
15065
+ }));
15066
+ return true;
15067
+ }
15068
+ } catch (error) {
15069
+ console.error("Authentication error:", error);
15070
+ res.setHeader("Content-Type", "application/json");
15071
+ res.writeHead(401).end(JSON.stringify({
15072
+ error: {
15073
+ code: -32e3,
15074
+ message: "Unauthorized: Authentication error"
15075
+ },
15076
+ id: body?.id ?? null,
15077
+ jsonrpc: "2.0"
15078
+ }));
15079
+ return true;
15080
+ }
15055
15081
  if (sessionId) {
15056
15082
  const activeTransport = activeTransports[sessionId];
15057
15083
  if (!activeTransport) {
@@ -15220,7 +15246,7 @@ const handleSSERequest = async ({ activeTransports, createServer, endpoint, onCl
15220
15246
  }
15221
15247
  return false;
15222
15248
  };
15223
- const startHTTPServer = async ({ apiKey, createServer, enableJsonResponse, eventStore, host = "::", onClose, onConnect, onUnhandledRequest, port, sseEndpoint = "/sse", stateless, streamEndpoint = "/mcp" }) => {
15249
+ const startHTTPServer = async ({ apiKey, authenticate, createServer, enableJsonResponse, eventStore, host = "::", onClose, onConnect, onUnhandledRequest, port, sseEndpoint = "/sse", stateless, streamEndpoint = "/mcp" }) => {
15224
15250
  const activeSSETransports = {};
15225
15251
  const activeStreamTransports = {};
15226
15252
  const authMiddleware = new AuthenticationMiddleware({ apiKey });
@@ -15233,8 +15259,8 @@ const startHTTPServer = async ({ apiKey, createServer, enableJsonResponse, event
15233
15259
  res.setHeader("Access-Control-Allow-Origin", origin.origin);
15234
15260
  res.setHeader("Access-Control-Allow-Credentials", "true");
15235
15261
  res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
15236
- res.setHeader("Access-Control-Allow-Headers", "*");
15237
- res.setHeader("Access-Control-Expose-Headers", "mcp-session-id");
15262
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept, Mcp-Session-Id, Last-Event-Id");
15263
+ res.setHeader("Access-Control-Expose-Headers", "Mcp-Session-Id");
15238
15264
  } catch (error) {
15239
15265
  console.error("[mcp-proxy] error parsing origin", error);
15240
15266
  }
@@ -15264,6 +15290,7 @@ const startHTTPServer = async ({ apiKey, createServer, enableJsonResponse, event
15264
15290
  })) return;
15265
15291
  if (streamEndpoint && await handleStreamRequest({
15266
15292
  activeTransports: activeStreamTransports,
15293
+ authenticate,
15267
15294
  createServer,
15268
15295
  enableJsonResponse,
15269
15296
  endpoint: streamEndpoint,
@@ -21483,4 +21510,4 @@ function serializeMessage(message) {
21483
21510
 
21484
21511
  //#endregion
21485
21512
  export { Client, InMemoryEventStore, JSONRPCMessageSchema, LATEST_PROTOCOL_VERSION, NEVER, ReadBuffer, Server, ZodIssueCode, __commonJS, __toESM, anyType, arrayType, booleanType, isInitializedNotification, isJSONRPCRequest, isJSONRPCResponse, numberType, objectType, proxyServer, serializeMessage, startHTTPServer, stringType };
21486
- //# sourceMappingURL=stdio-D0Lv8ytu.js.map
21513
+ //# sourceMappingURL=stdio-so1-I7Pn.js.map