MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / serveMcpServer

Function serveMcpServer

packages/plugins/mcp/src/testing/server.ts:85–281  ·  view source on GitHub ↗
(factory: () => McpServer, options: McpTestServerOptions = {})

Source from the content-addressed store, hash-verified

83const protectedResourcePath = "/.well-known/oauth-protected-resource";
84
85export const serveMcpServer = (factory: () => McpServer, options: McpTestServerOptions = {}) =>
86 Effect.acquireRelease(
87 Effect.gen(function* () {
88 const transports = new Map<string, StreamableHTTPServerTransport>();
89 const allTransports = new Set<StreamableHTTPServerTransport>();
90 const requests = yield* Ref.make<readonly McpTestRequest[]>([]);
91 const path = options.path ?? "/";
92 let sessions = 0;
93 let nextSessionRequestStatus: number | undefined;
94
95 const handleMcpRequest = (
96 request: http.IncomingMessage,
97 response: http.ServerResponse,
98 ): Effect.Effect<void> =>
99 Effect.gen(function* () {
100 const requestUrl = request.url ?? "/";
101 const sessionId = Array.isArray(request.headers["mcp-session-id"])
102 ? request.headers["mcp-session-id"][0]
103 : request.headers["mcp-session-id"];
104 const authorization = Array.isArray(request.headers.authorization)
105 ? request.headers.authorization[0]
106 : request.headers.authorization;
107 const origin = request.headers.host
108 ? `http://${request.headers.host}`
109 : "http://127.0.0.1";
110
111 yield* Ref.update(requests, (all) => [
112 ...all,
113 {
114 method: request.method ?? "GET",
115 url: requestUrl,
116 authorization,
117 sessionId,
118 },
119 ]);
120
121 if (
122 options.auth?.authorizationServerUrls &&
123 requestUrl.startsWith(protectedResourcePath)
124 ) {
125 const resourcePath = requestUrl.slice(protectedResourcePath.length);
126 writeJson(response, 200, {
127 resource: `${origin}${resourcePath}`,
128 authorization_servers: options.auth.authorizationServerUrls,
129 bearer_methods_supported: ["header"],
130 scopes_supported: options.auth.scopes ?? ["read"],
131 });
132 return;
133 }
134
135 if (!isMcpPath(requestUrl, path)) {
136 writeJson(response, 404, { error: "not_found" });
137 return;
138 }
139
140 if (options.auth) {
141 const accepted = yield* options.auth.validateAuthorization(authorization);
142 if (!accepted) {

Calls 10

handleMcpRequestFunction · 0.85
resumeFunction · 0.85
listenMethod · 0.80
addressMethod · 0.80
toStringMethod · 0.80
setMethod · 0.80
clearMethod · 0.80
getMethod · 0.65
syncMethod · 0.65
closeMethod · 0.65

Tested by

no test coverage detected