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

Function handleMcpRequest

packages/plugins/mcp/src/testing/server.ts:128–269  ·  view source on GitHub ↗
(
        request: http.IncomingMessage,
        response: http.ServerResponse,
      )

Source from the content-addressed store, hash-verified

126 };
127
128 const handleMcpRequest = (
129 request: http.IncomingMessage,
130 response: http.ServerResponse,
131 ): Effect.Effect<void> =>
132 Effect.gen(function* () {
133 const requestUrl = request.url ?? "/";
134 const sessionId = Array.isArray(request.headers["mcp-session-id"])
135 ? request.headers["mcp-session-id"][0]
136 : request.headers["mcp-session-id"];
137 const authorization = Array.isArray(request.headers.authorization)
138 ? request.headers.authorization[0]
139 : request.headers.authorization;
140 const origin = request.headers.host
141 ? `http://${request.headers.host}`
142 : "http://127.0.0.1";
143
144 yield* Ref.update(requests, (all) => [
145 ...all,
146 {
147 method: request.method ?? "GET",
148 url: requestUrl,
149 authorization,
150 sessionId,
151 },
152 ]);
153
154 if (
155 options.auth?.authorizationServerUrls &&
156 requestUrl.startsWith(protectedResourcePath)
157 ) {
158 const resourcePath = requestUrl.slice(protectedResourcePath.length);
159 writeJson(response, 200, {
160 resource: `${origin}${resourcePath}`,
161 authorization_servers: options.auth.authorizationServerUrls,
162 bearer_methods_supported: ["header"],
163 scopes_supported: options.auth.scopes ?? ["read"],
164 });
165 return;
166 }
167
168 if (!isMcpPath(requestUrl, path)) {
169 writeJson(response, 404, { error: "not_found" });
170 return;
171 }
172
173 if (options.auth) {
174 const accepted = yield* options.auth.validateAuthorization(authorization);
175 if (!accepted) {
176 writeUnauthorized(response, origin);
177 return;
178 }
179 if (options.beforeAuthenticatedRequest !== undefined) {
180 yield* Effect.promise(options.beforeAuthenticatedRequest);
181 }
182 }
183
184 if (sessionId && request.method === "POST" && nextSessionRequestStatus !== undefined) {
185 const status = nextSessionRequestStatus;

Callers 1

serveMcpServerFunction · 0.85

Calls 13

isMcpPathFunction · 0.85
writeUnauthorizedFunction · 0.85
writeTextFunction · 0.85
namesJsonRpcMethodFunction · 0.85
factoryFunction · 0.85
endMethod · 0.80
writeJsonFunction · 0.70
readRequestBodyFunction · 0.70
updateMethod · 0.65
getMethod · 0.65
setMethod · 0.65
connectMethod · 0.65

Tested by

no test coverage detected