@mcpolyglot/core 0.2.0 → 0.4.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/README.md +1 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/__tests__/pipeline.test.d.ts +2 -0
- package/dist/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline.test.js +178 -0
- package/dist/__tests__/pipeline.test.js.map +1 -0
- package/dist/__tests__/streamable-http.test.js +43 -2
- package/dist/__tests__/streamable-http.test.js.map +1 -1
- package/dist/connector.d.ts +0 -14
- package/dist/connector.d.ts.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +42 -8
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +80 -33
- package/dist/server.js.map +1 -1
- package/dist/tool.d.ts +2 -3
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js.map +1 -1
- package/dist/transport.d.ts +5 -2
- package/dist/transport.d.ts.map +1 -1
- package/dist/transports/stdio.d.ts +1 -1
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +2 -2
- package/dist/transports/stdio.js.map +1 -1
- package/dist/transports/streamable-http.d.ts +28 -4
- package/dist/transports/streamable-http.d.ts.map +1 -1
- package/dist/transports/streamable-http.js +59 -13
- package/dist/transports/streamable-http.js.map +1 -1
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -29,53 +29,65 @@ import { McpolyglotError, TimeoutError } from './errors.js';
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
export class McpolyglotServer {
|
|
32
|
-
|
|
32
|
+
info;
|
|
33
33
|
tools = new Map();
|
|
34
34
|
connectors;
|
|
35
|
-
perEntity;
|
|
36
35
|
scopes;
|
|
36
|
+
agents;
|
|
37
37
|
security;
|
|
38
38
|
sessionId = randomUUID();
|
|
39
39
|
logger;
|
|
40
40
|
transport;
|
|
41
41
|
constructor(opts) {
|
|
42
42
|
this.connectors = opts.connectors;
|
|
43
|
-
this.perEntity = opts.perEntity ?? {};
|
|
44
43
|
this.scopes = new Set(opts.scopes ?? DEFAULT_SCOPES);
|
|
45
44
|
this.security = opts.security;
|
|
46
45
|
this.logger = opts.logger ?? makeNoopLogger();
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
49
|
-
|
|
46
|
+
this.agents = new Map((opts.agents ?? []).map((a) => [a.id, { ...a, tools: new Map() }]));
|
|
47
|
+
this.info = { name: opts.name ?? 'mcpolyglot', version: opts.version ?? '0.0.1' };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A fresh MCP protocol server bound to this instance's tools and pipeline. Stdio makes one;
|
|
51
|
+
* the stateless HTTP transport makes one per request (the SDK forbids reusing either).
|
|
52
|
+
*/
|
|
53
|
+
createMcpServer() {
|
|
54
|
+
const server = new Server(this.info, { capabilities: { tools: {} } });
|
|
55
|
+
server.setRequestHandler(ListToolsRequestSchema, async (_req, extra) => ({
|
|
56
|
+
tools: Array.from(this.caller(server, extra).tools.values()).map((t) => ({
|
|
50
57
|
name: t.name,
|
|
51
58
|
description: t.description,
|
|
52
59
|
inputSchema: z.toJSONSchema(t.inputSchema, { target: 'draft-7' }),
|
|
53
60
|
})),
|
|
54
61
|
}));
|
|
55
|
-
|
|
56
|
-
const
|
|
62
|
+
server.setRequestHandler(CallToolRequestSchema, async (req, extra) => {
|
|
63
|
+
const caller = this.caller(server, extra);
|
|
64
|
+
const def = caller.tools.get(req.params.name);
|
|
57
65
|
if (!def) {
|
|
58
66
|
throw new McpolyglotError('tool.not_found', `Unknown tool: ${req.params.name}`);
|
|
59
67
|
}
|
|
60
|
-
const internal = await this.executeTool(def, req.params.arguments ?? {});
|
|
68
|
+
const internal = await this.executeTool(def, req.params.arguments ?? {}, caller);
|
|
61
69
|
return toMcpResult(internal);
|
|
62
70
|
});
|
|
71
|
+
return server;
|
|
63
72
|
}
|
|
64
73
|
async start(transport) {
|
|
65
|
-
for (const c of this.
|
|
74
|
+
for (const c of this.allConnectors())
|
|
66
75
|
await c.init({ logger: this.logger });
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
for (const c of this.connectors) {
|
|
77
|
+
for (const tool of this.toolsOf(c))
|
|
78
|
+
registerTool(this.tools, tool);
|
|
79
|
+
}
|
|
80
|
+
for (const a of this.agents.values()) {
|
|
81
|
+
for (const c of a.connectors) {
|
|
82
|
+
for (const tool of this.toolsOf(c)) {
|
|
83
|
+
// Agents only see tools their scopes fully cover.
|
|
84
|
+
if (tool.scopes.every((s) => a.scopes.includes(s)))
|
|
85
|
+
registerTool(a.tools, tool);
|
|
74
86
|
}
|
|
75
87
|
}
|
|
76
88
|
}
|
|
77
89
|
this.transport = transport;
|
|
78
|
-
await transport.start(this.
|
|
90
|
+
await transport.start(() => this.createMcpServer());
|
|
79
91
|
this.logger.info('mcpolyglot.started', {
|
|
80
92
|
sessionId: this.sessionId,
|
|
81
93
|
transport: transport.kind,
|
|
@@ -84,51 +96,75 @@ export class McpolyglotServer {
|
|
|
84
96
|
}
|
|
85
97
|
async stop() {
|
|
86
98
|
await this.transport?.stop();
|
|
87
|
-
for (const c of this.
|
|
99
|
+
for (const c of this.allConnectors()) {
|
|
88
100
|
await c.close();
|
|
89
101
|
}
|
|
90
|
-
await this.server.close();
|
|
91
102
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
103
|
+
allConnectors() {
|
|
104
|
+
return new Set([...this.connectors, ...[...this.agents.values()].flatMap((a) => a.connectors)]);
|
|
105
|
+
}
|
|
106
|
+
toolsOf(c) {
|
|
107
|
+
return c.listPrimitiveTools();
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Who is calling. Only `authInfo` set by our HTTP transport identifies an agent; headers
|
|
111
|
+
* and clientInfo are client-asserted and only used as an audit label when it's absent.
|
|
112
|
+
*/
|
|
113
|
+
caller(server, extra) {
|
|
114
|
+
const agent = extra.authInfo ? this.agents.get(extra.authInfo.clientId) : undefined;
|
|
115
|
+
if (agent) {
|
|
116
|
+
return {
|
|
117
|
+
agentId: agent.id,
|
|
118
|
+
scopes: new Set(agent.scopes),
|
|
119
|
+
tools: agent.tools,
|
|
120
|
+
rateKey: `agent:${agent.id}`,
|
|
121
|
+
};
|
|
95
122
|
}
|
|
96
|
-
|
|
123
|
+
const header = extra.requestInfo?.headers['x-mcpolyglot-agent'];
|
|
124
|
+
return {
|
|
125
|
+
agentId: (Array.isArray(header) ? header[0] : header) ?? server.getClientVersion()?.name,
|
|
126
|
+
scopes: this.scopes,
|
|
127
|
+
tools: this.tools,
|
|
128
|
+
rateKey: this.sessionId,
|
|
129
|
+
};
|
|
97
130
|
}
|
|
98
131
|
/**
|
|
99
132
|
* Fixed pipeline: scope check → rate limit → timeout → handler →
|
|
100
133
|
* redaction → size cap → untrusted-wrap → audit log → response.
|
|
101
134
|
* Connectors cannot bypass.
|
|
102
135
|
*/
|
|
103
|
-
async executeTool(def, rawArgs) {
|
|
136
|
+
async executeTool(def, rawArgs, caller) {
|
|
137
|
+
const { agentId, scopes } = caller;
|
|
104
138
|
const started = Date.now();
|
|
105
139
|
const argsHash = hashArgs(rawArgs);
|
|
106
140
|
let result;
|
|
107
141
|
let errorEntry;
|
|
142
|
+
let decision = 'allow';
|
|
143
|
+
let release = undefined;
|
|
108
144
|
try {
|
|
109
145
|
// 1. scope check
|
|
110
|
-
this.security.hooks.checkScopes(def.name, def.scopes,
|
|
146
|
+
this.security.hooks.checkScopes(def.name, def.scopes, scopes);
|
|
111
147
|
// 2. rate limit
|
|
112
|
-
await this.security.hooks.checkRateLimit(def.name,
|
|
148
|
+
release = await this.security.hooks.checkRateLimit(def.name, caller.rateKey);
|
|
113
149
|
// 3. timeout
|
|
114
150
|
const ac = new AbortController();
|
|
115
151
|
const timer = setTimeout(() => ac.abort(), this.security.defaultLimits.timeoutMs);
|
|
116
152
|
const ctx = {
|
|
117
153
|
sessionId: this.sessionId,
|
|
118
|
-
scopes
|
|
154
|
+
scopes,
|
|
119
155
|
signal: ac.signal,
|
|
120
156
|
limits: this.security.defaultLimits,
|
|
121
157
|
logger: this.logger,
|
|
122
158
|
};
|
|
159
|
+
// Race the handler against the timer: a handler that ignores `signal` (a sync driver,
|
|
160
|
+
// a hung socket) must still not hold the call open past the limit.
|
|
161
|
+
const timedOut = new Promise((_, reject) => ac.signal.addEventListener('abort', () => reject(new TimeoutError(`Tool ${def.name} exceeded ${ctx.limits.timeoutMs}ms`))));
|
|
123
162
|
try {
|
|
124
163
|
const parsed = def.inputSchema.parse(rawArgs);
|
|
125
|
-
result = await def.handler(parsed, ctx);
|
|
164
|
+
result = await Promise.race([def.handler(parsed, ctx), timedOut]);
|
|
126
165
|
}
|
|
127
166
|
finally {
|
|
128
167
|
clearTimeout(timer);
|
|
129
|
-
if (ac.signal.aborted && !result) {
|
|
130
|
-
throw new TimeoutError(`Tool ${def.name} exceeded ${ctx.limits.timeoutMs}ms`);
|
|
131
|
-
}
|
|
132
168
|
}
|
|
133
169
|
// 4. redaction
|
|
134
170
|
const redacted = this.security.hooks.redact(def.name, result);
|
|
@@ -147,6 +183,7 @@ export class McpolyglotServer {
|
|
|
147
183
|
catch (err) {
|
|
148
184
|
const e = err;
|
|
149
185
|
errorEntry = { code: e.code ?? 'internal_error', message: e.message };
|
|
186
|
+
decision = err instanceof McpolyglotError && isPolicyRejection(err.code) ? 'deny' : 'error';
|
|
150
187
|
// Policy rejections (scope, read-only, rate limit, timeout) are tool errors the model
|
|
151
188
|
// can read and correct, not protocol failures.
|
|
152
189
|
if (err instanceof McpolyglotError && isPolicyRejection(err.code)) {
|
|
@@ -159,12 +196,16 @@ export class McpolyglotServer {
|
|
|
159
196
|
throw err;
|
|
160
197
|
}
|
|
161
198
|
finally {
|
|
199
|
+
release?.();
|
|
162
200
|
await this.security.hooks.audit({
|
|
163
201
|
ts: new Date().toISOString(),
|
|
164
202
|
sessionId: this.sessionId,
|
|
203
|
+
...(agentId ? { agentId } : {}),
|
|
165
204
|
tool: def.name,
|
|
205
|
+
decision,
|
|
206
|
+
...(errorEntry ? { reason: errorEntry.message } : {}),
|
|
166
207
|
argsHash,
|
|
167
|
-
scopes: Array.from(
|
|
208
|
+
scopes: Array.from(scopes),
|
|
168
209
|
durationMs: Date.now() - started,
|
|
169
210
|
rows: result?.metadata?.rows,
|
|
170
211
|
truncated: result?.metadata?.truncated,
|
|
@@ -202,4 +243,10 @@ function makeNoopLogger() {
|
|
|
202
243
|
error: () => { },
|
|
203
244
|
};
|
|
204
245
|
}
|
|
246
|
+
function registerTool(map, tool) {
|
|
247
|
+
if (map.has(tool.name)) {
|
|
248
|
+
throw new McpolyglotError('tool.duplicate', `Duplicate tool name: ${tool.name}`);
|
|
249
|
+
}
|
|
250
|
+
map.set(tool.name, tool);
|
|
251
|
+
}
|
|
205
252
|
//# sourceMappingURL=server.js.map
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/tool.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export type AnyZodSchema = z.ZodType<any>;
|
|
|
10
10
|
export type ZodInfer<S extends AnyZodSchema> = z.infer<S>;
|
|
11
11
|
/** Every scope mcpolyglot understands. New scopes must be added here so the Zod config schema accepts them. */
|
|
12
12
|
export declare const ALL_SCOPES: readonly ["schema:read", "tables:read", "tables:write", "query:raw", "http:call"];
|
|
13
|
-
/** A capability a tool requires from the calling session. Checked
|
|
13
|
+
/** A capability a tool requires from the calling session. Checked before the handler runs. */
|
|
14
14
|
export type Scope = (typeof ALL_SCOPES)[number];
|
|
15
15
|
/** Scopes granted to a session by default. Excludes anything write-shaped. */
|
|
16
16
|
export declare const DEFAULT_SCOPES: readonly Scope[];
|
|
@@ -66,8 +66,7 @@ export interface ToolExecCtx {
|
|
|
66
66
|
*/
|
|
67
67
|
export type ToolHandler<S extends AnyZodSchema = AnyZodSchema> = (args: ZodInfer<S>, ctx: ToolExecCtx) => Promise<ToolResult>;
|
|
68
68
|
/**
|
|
69
|
-
* The contract every connector returns from `listPrimitiveTools()`
|
|
70
|
-
* `generatePerEntityTools()`. The `handler` is the only point where the connector
|
|
69
|
+
* The contract every connector returns from `listPrimitiveTools()`. The `handler` is the only point where the connector
|
|
71
70
|
* touches the data source — everything else (auth, redaction, audit) is the pipeline's job.
|
|
72
71
|
*
|
|
73
72
|
* @example
|
package/dist/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"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"}
|
package/dist/tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAaA,+GAA+G;AAC/G,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,aAAa;IACb,aAAa;IACb,cAAc;IACd,WAAW;IACX,WAAW;CACH,CAAC;AAKX,8EAA8E;AAC9E,MAAM,CAAC,MAAM,cAAc,GAAqB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -6,8 +6,11 @@ import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export interface Transport {
|
|
8
8
|
readonly kind: 'stdio' | 'http';
|
|
9
|
-
/**
|
|
10
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Start accepting traffic. `createServer` returns a fresh MCP server wired to the tool
|
|
11
|
+
* pipeline; call it once per connection (stdio: once; stateless HTTP: per request).
|
|
12
|
+
*/
|
|
13
|
+
start(createServer: () => Server): Promise<void>;
|
|
11
14
|
/** Stop accepting traffic and close any underlying sockets. Must be idempotent. */
|
|
12
15
|
stop(): Promise<void>;
|
|
13
16
|
}
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,mFAAmF;IACnF,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
|
|
@@ -3,7 +3,7 @@ import type { Transport } from '../transport.js';
|
|
|
3
3
|
export declare class StdioTransport implements Transport {
|
|
4
4
|
readonly kind: "stdio";
|
|
5
5
|
private inner?;
|
|
6
|
-
start(
|
|
6
|
+
start(createServer: () => Server): Promise<void>;
|
|
7
7
|
stop(): Promise<void>;
|
|
8
8
|
}
|
|
9
9
|
//# sourceMappingURL=stdio.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,cAAe,YAAW,SAAS;IAC9C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,OAAO,CAAC,KAAK,CAAC,CAAuB;IAE/B,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,qBAAa,cAAe,YAAW,SAAS;IAC9C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,OAAO,CAAC,KAAK,CAAC,CAAuB;IAE/B,KAAK,CAAC,YAAY,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAI5B"}
|
package/dist/transports/stdio.js
CHANGED
|
@@ -2,9 +2,9 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
2
2
|
export class StdioTransport {
|
|
3
3
|
kind = 'stdio';
|
|
4
4
|
inner;
|
|
5
|
-
async start(
|
|
5
|
+
async start(createServer) {
|
|
6
6
|
this.inner = new StdioServerTransport();
|
|
7
|
-
await
|
|
7
|
+
await createServer().connect(this.inner);
|
|
8
8
|
}
|
|
9
9
|
async stop() {
|
|
10
10
|
await this.inner?.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAIjF,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,OAAgB,CAAC;IACzB,KAAK,CAAwB;IAErC,KAAK,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transports/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAIjF,MAAM,OAAO,cAAc;IAChB,IAAI,GAAG,OAAgB,CAAC;IACzB,KAAK,CAAwB;IAErC,KAAK,CAAC,KAAK,CAAC,YAA0B;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACxC,MAAM,YAAY,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -11,7 +11,21 @@ export interface BearerAuthOptions {
|
|
|
11
11
|
export interface OAuthAuthOptions extends OAuthVerifierOptions {
|
|
12
12
|
kind: 'oauth';
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Per-agent tokens: each bearer token is sha256-hashed and matched against the agents'
|
|
16
|
+
* stored hashes. The matched agent id reaches request handlers as `authInfo.clientId`.
|
|
17
|
+
*/
|
|
18
|
+
export interface AgentsAuthOptions {
|
|
19
|
+
kind: 'agents';
|
|
20
|
+
agents: ReadonlyArray<{
|
|
21
|
+
id: string;
|
|
22
|
+
tokens: ReadonlyArray<{
|
|
23
|
+
hash: string;
|
|
24
|
+
revoked?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export type HttpAuthOptions = BearerAuthOptions | OAuthAuthOptions | AgentsAuthOptions;
|
|
15
29
|
export interface StreamableHttpTransportOptions {
|
|
16
30
|
host: string;
|
|
17
31
|
port: number;
|
|
@@ -36,17 +50,27 @@ export declare class StreamableHttpTransport implements Transport {
|
|
|
36
50
|
readonly kind: "http";
|
|
37
51
|
/** Bearer token in use, or `undefined` when running in OAuth mode. */
|
|
38
52
|
readonly bearerToken: string | undefined;
|
|
39
|
-
readonly authKind: 'bearer' | 'oauth';
|
|
53
|
+
readonly authKind: 'bearer' | 'oauth' | 'agents';
|
|
40
54
|
private readonly host;
|
|
41
55
|
private readonly port;
|
|
42
56
|
private readonly auth;
|
|
43
57
|
private readonly logger;
|
|
44
|
-
private
|
|
58
|
+
private newServer?;
|
|
45
59
|
private httpServer?;
|
|
46
60
|
constructor(opts: StreamableHttpTransportOptions);
|
|
47
|
-
start(
|
|
61
|
+
start(newServer: () => McpServer): Promise<void>;
|
|
48
62
|
stop(): Promise<void>;
|
|
49
63
|
private handle;
|
|
50
64
|
private checkAuth;
|
|
51
65
|
}
|
|
66
|
+
/** sha256 hex of a bearer token — the only form an agent token is ever stored in. */
|
|
67
|
+
export declare function hashToken(token: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Compare the token's hash against every stored hash with `timingSafeEqual`, without
|
|
70
|
+
* stopping at the first match, so timing doesn't reveal which (or whether an) entry hit.
|
|
71
|
+
*/
|
|
72
|
+
export declare function matchAgent(hashes: readonly {
|
|
73
|
+
agentId: string;
|
|
74
|
+
hash: Buffer;
|
|
75
|
+
}[], token: string): string | undefined;
|
|
52
76
|
//# sourceMappingURL=streamable-http.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-http.d.ts","sourceRoot":"","sources":["../../src/transports/streamable-http.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"streamable-http.d.ts","sourceRoot":"","sources":["../../src/transports/streamable-http.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAErF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAA2C,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhG,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,aAAa,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KAC5D,CAAC,CAAC;CACJ;AAED,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEvF,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;KAC/D,CAAC;CACH;AAOD,qBAAa,uBAAwB,YAAW,SAAS;IACvD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwD;IAC/E,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;gBAEpB,IAAI,EAAE,8BAA8B;IAc1C,KAAK,CAAC,SAAS,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDhD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,MAAM;YA0CN,SAAS;CA6BxB;AAqDD,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACpD,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,SAAS,CASpB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createServer, } from 'node:http';
|
|
2
|
-
import { timingSafeEqual, randomBytes } from 'node:crypto';
|
|
2
|
+
import { createHash, timingSafeEqual, randomBytes } from 'node:crypto';
|
|
3
3
|
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
4
4
|
import { createOAuthVerifier } from './oauth.js';
|
|
5
5
|
export class StreamableHttpTransport {
|
|
@@ -11,7 +11,7 @@ export class StreamableHttpTransport {
|
|
|
11
11
|
port;
|
|
12
12
|
auth;
|
|
13
13
|
logger;
|
|
14
|
-
|
|
14
|
+
newServer;
|
|
15
15
|
httpServer;
|
|
16
16
|
constructor(opts) {
|
|
17
17
|
this.host = opts.host;
|
|
@@ -24,12 +24,8 @@ export class StreamableHttpTransport {
|
|
|
24
24
|
warn: (msg, fields) => process.stderr.write(JSON.stringify({ level: 'warn', msg, ...(fields ?? {}) }) + '\n'),
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
|
-
async start(
|
|
28
|
-
this.
|
|
29
|
-
this.inner.onerror = (err) => {
|
|
30
|
-
this.logger.warn('http.transport.error', { error: err.message });
|
|
31
|
-
};
|
|
32
|
-
await server.connect(this.inner);
|
|
27
|
+
async start(newServer) {
|
|
28
|
+
this.newServer = newServer;
|
|
33
29
|
this.httpServer = createServer((req, res) => {
|
|
34
30
|
this.handle(req, res).catch((err) => {
|
|
35
31
|
this.logger.warn('http.handler.error', {
|
|
@@ -58,6 +54,9 @@ export class StreamableHttpTransport {
|
|
|
58
54
|
// Tokens are sensitive; emit a fingerprint not the token itself.
|
|
59
55
|
fields.tokenFingerprint = fingerprint(this.auth.token);
|
|
60
56
|
}
|
|
57
|
+
else if (this.auth.kind === 'agents') {
|
|
58
|
+
fields.agents = new Set(this.auth.hashes.map((h) => h.agentId)).size;
|
|
59
|
+
}
|
|
61
60
|
else {
|
|
62
61
|
fields.issuer = this.auth.issuer;
|
|
63
62
|
fields.audience = this.auth.audience;
|
|
@@ -75,8 +74,7 @@ export class StreamableHttpTransport {
|
|
|
75
74
|
await new Promise((resolve) => this.httpServer.close(() => resolve()));
|
|
76
75
|
this.httpServer = undefined;
|
|
77
76
|
}
|
|
78
|
-
|
|
79
|
-
this.inner = undefined;
|
|
77
|
+
this.newServer = undefined;
|
|
80
78
|
}
|
|
81
79
|
async handle(req, res) {
|
|
82
80
|
if (req.method === 'GET' && req.url === '/healthz') {
|
|
@@ -93,12 +91,29 @@ export class StreamableHttpTransport {
|
|
|
93
91
|
res.end(JSON.stringify({ error: 'unauthorized', reason: authResult.reason }));
|
|
94
92
|
return;
|
|
95
93
|
}
|
|
96
|
-
if (!this.
|
|
94
|
+
if (!this.newServer) {
|
|
97
95
|
res.statusCode = 503;
|
|
98
96
|
res.end();
|
|
99
97
|
return;
|
|
100
98
|
}
|
|
101
|
-
|
|
99
|
+
if (authResult.agentId) {
|
|
100
|
+
// The SDK hands `req.auth` to request handlers as `extra.authInfo`. No token in it.
|
|
101
|
+
const auth = { token: '', clientId: authResult.agentId, scopes: [] };
|
|
102
|
+
req.auth = auth;
|
|
103
|
+
}
|
|
104
|
+
// Stateless mode: the SDK allows one request per transport, so each request gets its own
|
|
105
|
+
// transport + protocol server, torn down when the response closes.
|
|
106
|
+
const inner = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined });
|
|
107
|
+
inner.onerror = (err) => {
|
|
108
|
+
this.logger.warn('http.transport.error', { error: err.message });
|
|
109
|
+
};
|
|
110
|
+
const server = this.newServer();
|
|
111
|
+
res.on('close', () => {
|
|
112
|
+
void inner.close();
|
|
113
|
+
void server.close();
|
|
114
|
+
});
|
|
115
|
+
await server.connect(inner);
|
|
116
|
+
await inner.handleRequest(req, res);
|
|
102
117
|
}
|
|
103
118
|
async checkAuth(req) {
|
|
104
119
|
const header = req.headers.authorization ?? '';
|
|
@@ -114,6 +129,10 @@ export class StreamableHttpTransport {
|
|
|
114
129
|
return { ok: false, reason: 'invalid_token' };
|
|
115
130
|
return timingSafeEqual(a, b) ? { ok: true } : { ok: false, reason: 'invalid_token' };
|
|
116
131
|
}
|
|
132
|
+
if (this.auth.kind === 'agents') {
|
|
133
|
+
const agentId = matchAgent(this.auth.hashes, token);
|
|
134
|
+
return agentId ? { ok: true, agentId } : { ok: false, reason: 'invalid_token' };
|
|
135
|
+
}
|
|
117
136
|
const result = await this.auth.verifier.verify(token);
|
|
118
137
|
if (!result.ok) {
|
|
119
138
|
this.logger.warn('http.oauth.rejected', { reason: result.reason });
|
|
@@ -127,6 +146,15 @@ function resolveAuth(opts) {
|
|
|
127
146
|
if (!opts.auth) {
|
|
128
147
|
return { kind: 'bearer', token: opts.bearerToken ?? generateToken() };
|
|
129
148
|
}
|
|
149
|
+
if (opts.auth.kind === 'agents') {
|
|
150
|
+
return {
|
|
151
|
+
kind: 'agents',
|
|
152
|
+
// Revoked tokens are dropped here, so they fail exactly like unknown ones.
|
|
153
|
+
hashes: opts.auth.agents.flatMap((a) => a.tokens
|
|
154
|
+
.filter((t) => !t.revoked)
|
|
155
|
+
.map((t) => ({ agentId: a.id, hash: Buffer.from(t.hash.toLowerCase(), 'hex') }))),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
130
158
|
if (opts.auth.kind === 'bearer') {
|
|
131
159
|
return { kind: 'bearer', token: opts.auth.token ?? opts.bearerToken ?? generateToken() };
|
|
132
160
|
}
|
|
@@ -140,7 +168,7 @@ function resolveAuth(opts) {
|
|
|
140
168
|
function wwwAuthenticate(kind, reason) {
|
|
141
169
|
const errorCode = mapReasonToWwwError(reason);
|
|
142
170
|
// RFC 6750 §3 — `error` and `error_description` belong on Bearer challenges.
|
|
143
|
-
if (kind
|
|
171
|
+
if (kind !== 'oauth') {
|
|
144
172
|
return `Bearer realm="mcpolyglot", error="${errorCode}"`;
|
|
145
173
|
}
|
|
146
174
|
return `Bearer realm="mcpolyglot", error="${errorCode}", error_description="${reason}"`;
|
|
@@ -159,6 +187,24 @@ function mapReasonToWwwError(reason) {
|
|
|
159
187
|
return 'invalid_token';
|
|
160
188
|
}
|
|
161
189
|
}
|
|
190
|
+
/** sha256 hex of a bearer token — the only form an agent token is ever stored in. */
|
|
191
|
+
export function hashToken(token) {
|
|
192
|
+
return createHash('sha256').update(token).digest('hex');
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Compare the token's hash against every stored hash with `timingSafeEqual`, without
|
|
196
|
+
* stopping at the first match, so timing doesn't reveal which (or whether an) entry hit.
|
|
197
|
+
*/
|
|
198
|
+
export function matchAgent(hashes, token) {
|
|
199
|
+
const candidate = createHash('sha256').update(token).digest();
|
|
200
|
+
let found;
|
|
201
|
+
for (const h of hashes) {
|
|
202
|
+
if (h.hash.length === candidate.length && timingSafeEqual(h.hash, candidate)) {
|
|
203
|
+
found ??= h.agentId;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return found;
|
|
207
|
+
}
|
|
162
208
|
function generateToken() {
|
|
163
209
|
return randomBytes(24).toString('base64url');
|
|
164
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamable-http.js","sourceRoot":"","sources":["../../src/transports/streamable-http.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAIb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"streamable-http.js","sourceRoot":"","sources":["../../src/transports/streamable-http.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED