@meertrack/mcp 1.0.2 → 1.1.1
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/README.md +27 -7
- package/dist/auth.d.ts +74 -15
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +139 -15
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -3
- package/dist/client.js.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/get_competitor.d.ts.map +1 -1
- package/dist/tools/get_competitor.js +6 -4
- package/dist/tools/get_competitor.js.map +1 -1
- package/dist/transports/http.d.ts +8 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +43 -5
- package/dist/transports/http.js.map +1 -1
- package/dist/types.d.ts +179 -179
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +45 -36
- package/dist/types.js.map +1 -1
- package/package.json +2 -1
package/dist/transports/http.js
CHANGED
|
@@ -11,9 +11,15 @@ export function createHttpApp(options) {
|
|
|
11
11
|
// Origin allowlist — runs before routing so it protects every path. The SDK
|
|
12
12
|
// also has deprecated built-in origin validation; we enforce it at the
|
|
13
13
|
// transport edge per the spec's current guidance.
|
|
14
|
+
//
|
|
15
|
+
// Loopback (`http://localhost:*`, `http://127.0.0.1:*`) is always allowed:
|
|
16
|
+
// this endpoint authenticates via Bearer tokens (not cookies), so DNS
|
|
17
|
+
// rebinding / cross-site cookie theft isn't the threat model, and MCP
|
|
18
|
+
// dev tools like the Inspector connect from a loopback origin on a
|
|
19
|
+
// user-chosen port.
|
|
14
20
|
app.use("*", async (c, next) => {
|
|
15
21
|
const origin = c.req.header("origin");
|
|
16
|
-
if (origin && !options.allowedOrigins.includes(origin)) {
|
|
22
|
+
if (origin && !isLoopbackOrigin(origin) && !options.allowedOrigins.includes(origin)) {
|
|
17
23
|
return c.json({ error: { code: "forbidden_origin", message: `Origin not allowed: ${origin}` } }, 403);
|
|
18
24
|
}
|
|
19
25
|
await next();
|
|
@@ -21,9 +27,19 @@ export function createHttpApp(options) {
|
|
|
21
27
|
app.get(HEALTH_PATH, (c) => c.json({ ok: true }));
|
|
22
28
|
app.get(PRM_PATH, (c) => c.json({
|
|
23
29
|
resource: prmResourceFor(options.protectedResourceMetadataUrl),
|
|
24
|
-
authorization_servers: [],
|
|
30
|
+
authorization_servers: options.oauth ? [options.oauth.issuer] : [],
|
|
25
31
|
bearer_methods_supported: ["header"],
|
|
26
32
|
}));
|
|
33
|
+
// Some MCP clients (older Inspector builds) fall back to fetching AS metadata
|
|
34
|
+
// from the RS's own `.well-known/oauth-authorization-server` instead of
|
|
35
|
+
// following the PRM's `authorization_servers` pointer. If we 404 here, the
|
|
36
|
+
// client then guesses token/authorize URLs on the RS host. Redirect to the
|
|
37
|
+
// real AS metadata URL when OAuth is configured.
|
|
38
|
+
app.get("/.well-known/oauth-authorization-server", (c) => {
|
|
39
|
+
if (!options.oauth)
|
|
40
|
+
return c.text("Not Found", 404);
|
|
41
|
+
return c.redirect(`${options.oauth.issuer.replace(/\/$/, "")}/.well-known/oauth-authorization-server`, 302);
|
|
42
|
+
});
|
|
27
43
|
const log = options.logger ?? defaultLogger;
|
|
28
44
|
app.post(MCP_PATH, (c) => handleMcpPost(c, options, log));
|
|
29
45
|
// Stateless — no server-initiated notifications, no session termination.
|
|
@@ -81,15 +97,16 @@ async function handleMcpPost(c, options, log) {
|
|
|
81
97
|
header: (name) => c.req.header(name) ?? null,
|
|
82
98
|
searchParams: new URL(c.req.url).searchParams,
|
|
83
99
|
protectedResourceMetadataUrl: prmUrl,
|
|
100
|
+
...(options.oauth !== undefined ? { oauth: options.oauth } : {}),
|
|
84
101
|
};
|
|
85
|
-
const resolution = extractHttpBearer(authCtx);
|
|
102
|
+
const resolution = await extractHttpBearer(authCtx);
|
|
86
103
|
if (!resolution.ok) {
|
|
87
104
|
finalize(401);
|
|
88
105
|
return unauthorizedResponse(resolution.message, resolution.wwwAuthenticate);
|
|
89
106
|
}
|
|
90
107
|
let upstreamRequestId = null;
|
|
91
108
|
const server = buildServer({
|
|
92
|
-
apiKey: resolution.
|
|
109
|
+
apiKey: resolution.bearer,
|
|
93
110
|
...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),
|
|
94
111
|
...(options.fetchImpl !== undefined ? { fetchImpl: options.fetchImpl } : {}),
|
|
95
112
|
onUpstreamResponse: ({ requestId }) => {
|
|
@@ -123,7 +140,12 @@ async function handleMcpPost(c, options, log) {
|
|
|
123
140
|
catch (err) {
|
|
124
141
|
await server.close().catch(() => { });
|
|
125
142
|
const message = err instanceof Error ? err.message : String(err);
|
|
126
|
-
|
|
143
|
+
const stack = err instanceof Error && err.stack ? redactStack(err.stack) : undefined;
|
|
144
|
+
finalize(500, {
|
|
145
|
+
error: message,
|
|
146
|
+
...(stack ? { stack } : {}),
|
|
147
|
+
...(upstreamRequestId ? { meertrack_request_id: upstreamRequestId } : {}),
|
|
148
|
+
});
|
|
127
149
|
return new Response(JSON.stringify({
|
|
128
150
|
jsonrpc: "2.0",
|
|
129
151
|
error: { code: -32603, message: `Internal error: ${message}` },
|
|
@@ -131,6 +153,12 @@ async function handleMcpPost(c, options, log) {
|
|
|
131
153
|
}), { status: 500, headers: { "Content-Type": "application/json" } });
|
|
132
154
|
}
|
|
133
155
|
}
|
|
156
|
+
/** Drop anything that looks like a bearer/api key from a stack trace before logging. */
|
|
157
|
+
function redactStack(stack) {
|
|
158
|
+
return stack
|
|
159
|
+
.replace(/Bearer\s+[A-Za-z0-9._-]+/gi, "Bearer ***")
|
|
160
|
+
.replace(/(api[_-]?key["'=:\s]+)[A-Za-z0-9._-]+/gi, "$1***");
|
|
161
|
+
}
|
|
134
162
|
/**
|
|
135
163
|
* Pull the JSON-RPC `method` and (when applicable) the `params.name` tool name
|
|
136
164
|
* out of a request body. Tolerates malformed bodies — bad input is the SDK's
|
|
@@ -175,5 +203,15 @@ function unauthorizedResponse(message, wwwAuthenticate) {
|
|
|
175
203
|
export function defaultProtectedResourceMetadataUrl(host, protocol = "https") {
|
|
176
204
|
return `${protocol}://${host}${PRM_PATH}`;
|
|
177
205
|
}
|
|
206
|
+
function isLoopbackOrigin(origin) {
|
|
207
|
+
try {
|
|
208
|
+
const parsed = new URL(origin);
|
|
209
|
+
return (parsed.protocol === "http:" &&
|
|
210
|
+
(parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1"));
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
178
216
|
export { buildWwwAuthenticateHeader };
|
|
179
217
|
//# sourceMappingURL=http.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
|