@substrat-run/vertical-host 0.150.0 → 0.151.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/errors.d.ts +15 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +26 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -24
- package/dist/index.js.map +1 -1
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +5 -4
- package/dist/live.js.map +1 -1
- package/dist/mcp-guard.d.ts +65 -0
- package/dist/mcp-guard.d.ts.map +1 -0
- package/dist/mcp-guard.js +117 -0
- package/dist/mcp-guard.js.map +1 -0
- package/dist/mcp.d.ts +85 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +134 -29
- package/dist/mcp.js.map +1 -1
- package/dist/operations-routes.d.ts.map +1 -1
- package/dist/operations-routes.js +24 -2
- package/dist/operations-routes.js.map +1 -1
- package/package.json +9 -9
package/dist/mcp.d.ts
CHANGED
|
@@ -46,9 +46,32 @@
|
|
|
46
46
|
* connectors (`grants(): Promise<PermissionKey[]>`, scope-host.ts). Left out here
|
|
47
47
|
* deliberately: `tools/list` filtering is invisible to the protocol, so adding it
|
|
48
48
|
* later breaks no client.
|
|
49
|
+
*
|
|
50
|
+
* ## Delegated calls (#1824)
|
|
51
|
+
*
|
|
52
|
+
* Another app may call this endpoint FOR a user, with a token the team auth-server minted by
|
|
53
|
+
* RFC 8693 exchange: the user as `sub`, the app acting as `act`, and a `scope` of this
|
|
54
|
+
* vertical's permission keys. That scope is a CEILING, not a grant: a call is allowed only
|
|
55
|
+
* when the tool's leading permission key is inside it, and then the operation's own
|
|
56
|
+
* `ctx.check` still asks whether the user holds it. So a delegated call does at most what
|
|
57
|
+
* the user may AND what was delegated.
|
|
58
|
+
*
|
|
59
|
+
* The bearer verifier (`@substrat-run/vertical-auth`) decides whether a delegated token is
|
|
60
|
+
* admitted at all, and only through this mount's CHANNEL: `mcpChannelOf(c)` names the resource
|
|
61
|
+
* this endpoint answers as, for the span of its own `resolveStub` call and nowhere else, and
|
|
62
|
+
* the verifier admits a delegated token only when handed it. The subject it resolves reports
|
|
63
|
+
* the delegation, the vertical's `resolveStub` hands that back with `setMcpDelegation`, and
|
|
64
|
+
* every `tools/call` is held to it before the operation is invoked. Two things fail closed:
|
|
65
|
+
*
|
|
66
|
+
* - A tool with no single leading key (`narrows`, or no permission declared) is out of
|
|
67
|
+
* every delegated scope, since no key says what it reaches.
|
|
68
|
+
* - A bearer that carries `act` with no delegation handed over has every call refused.
|
|
69
|
+
* That is a host that admitted the token without wiring the ceiling, or a verifier too
|
|
70
|
+
* old to know `act` and taking it for the user. Read without the signature, like the
|
|
71
|
+
* audience check below, which is safe for the same reason: it can only refuse.
|
|
49
72
|
*/
|
|
50
73
|
import type { Context, Hono } from 'hono';
|
|
51
|
-
import type
|
|
74
|
+
import { type ScopeStub } from '@substrat-run/kernel';
|
|
52
75
|
import { type OutputWalk } from './field-coverage.js';
|
|
53
76
|
/**
|
|
54
77
|
* The protocol revisions this server speaks, newest first.
|
|
@@ -78,6 +101,11 @@ export interface McpTool {
|
|
|
78
101
|
readonly pinned: Record<string, unknown>;
|
|
79
102
|
readonly paged: boolean;
|
|
80
103
|
readonly takesInput: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* The leading permission key the operation checks — the key a delegated scope is held
|
|
106
|
+
* against (#1824). Absent when it declares none (`narrows`), which no delegation reaches.
|
|
107
|
+
*/
|
|
108
|
+
readonly permission?: string;
|
|
81
109
|
/** #1331: how a result is walked for field coverage, read once here. Absent when the output names no fields. */
|
|
82
110
|
readonly outputWalk?: OutputWalk;
|
|
83
111
|
/**
|
|
@@ -163,6 +191,43 @@ export interface MountMcpOptions {
|
|
|
163
191
|
readonly version?: string;
|
|
164
192
|
};
|
|
165
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* A delegation the vertical admitted (#1824): who acts for the user, and within which of
|
|
196
|
+
* this vertical's permission keys. The shape `AuthSubject.delegation` carries in
|
|
197
|
+
* `@substrat-run/vertical-auth`, restated structurally so this package does not depend on it.
|
|
198
|
+
*/
|
|
199
|
+
export interface McpDelegation {
|
|
200
|
+
readonly actor: string;
|
|
201
|
+
readonly scope: readonly string[];
|
|
202
|
+
}
|
|
203
|
+
/** The per-request store key `setMcpDelegation` parks a delegation under. */
|
|
204
|
+
export declare const MCP_DELEGATION_KEY = "substratMcpDelegation";
|
|
205
|
+
/**
|
|
206
|
+
* Hand the MCP mount the delegation this request's subject was admitted with — call it in
|
|
207
|
+
* `resolveStub`, with the resolved subject's `delegation`. `undefined` (a user acting
|
|
208
|
+
* directly) sets nothing. A request whose bearer carries `act` and that never reaches this
|
|
209
|
+
* has every tool call refused, so forgetting it fails closed.
|
|
210
|
+
*/
|
|
211
|
+
export declare function setMcpDelegation(c: Context, delegation: McpDelegation | undefined): void;
|
|
212
|
+
/** The MCP endpoint a request is being served by, as `mcpChannelOf` reports it. */
|
|
213
|
+
export interface McpChannel {
|
|
214
|
+
/** The resource identifier the endpoint answers as — the `aud` a delegated token must name. */
|
|
215
|
+
readonly resource: string;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The MCP endpoint serving this request, or `null` (#1824): the channel a delegated token is
|
|
219
|
+
* admitted through. `mountMcp` sets it for exactly the span of its own `resolveStub` call and
|
|
220
|
+
* clears it as that call returns, so every other handler — a REST route, a middleware reading
|
|
221
|
+
* after `next()`, a stray route at the same path — sees `null`.
|
|
222
|
+
*
|
|
223
|
+
* Hand it to the verifier with the request's URL, then hand the subject's delegation back:
|
|
224
|
+
*
|
|
225
|
+
* const subject = await provider.resolve(c.req.raw.headers, c.req.url, { delegated: mcpChannelOf(c) });
|
|
226
|
+
* setMcpDelegation(c, subject?.delegation);
|
|
227
|
+
*
|
|
228
|
+
* A vertical serving its own MCP surface that passes `delegated` itself owns the ceiling there.
|
|
229
|
+
*/
|
|
230
|
+
export declare function mcpChannelOf(c: Context): McpChannel | null;
|
|
166
231
|
/**
|
|
167
232
|
* Mount the MCP endpoint for a module's operations.
|
|
168
233
|
*
|
|
@@ -171,6 +236,25 @@ export interface MountMcpOptions {
|
|
|
171
236
|
* `GET` is a 405, which the transport explicitly permits for a server that opens no
|
|
172
237
|
* server-to-client stream — this one has nothing to push, since every tool is a
|
|
173
238
|
* request/response call into a scope.
|
|
239
|
+
*
|
|
240
|
+
* **Nothing else answers at this path** (#1824). A delegated token is admitted only on a
|
|
241
|
+
* request to the MCP endpoint, because this mount is what holds it to its scope. So a route
|
|
242
|
+
* registered BEFORE it that would answer here instead — an operation at `/mcp`, a
|
|
243
|
+
* hand-written `app.post('/api/mcp', …)`, a `/:slug` parameter route — refuses the mount,
|
|
244
|
+
* loudly, at boot and before this mount registers anything (`assertMcpPathFree`), judged by
|
|
245
|
+
* Hono's `TrieRouter` against the path the endpoint really answers at, a Hono `basePath()`
|
|
246
|
+
* included. A `*` is judged as `TrieRouter` reads it, so `/api/*`, `/api/mcp/*`, a `GET *`
|
|
247
|
+
* fallback and `/api/mc*` all refuse the mount. A route registered AFTER it never runs here:
|
|
248
|
+
* every method but `OPTIONS` is answered by this mount. Not judged:
|
|
249
|
+
* - `app.use`, `app.all` and `app.mount` (Hono records all three alike), and `OPTIONS` routes;
|
|
250
|
+
* - a prefix added after the mount by `app.route()`: the routes of the app it is mounted
|
|
251
|
+
* into are not seen here;
|
|
252
|
+
* - the `*` forms that the default router dispatches here and `TrieRouter` does not match:
|
|
253
|
+
* a `*` inside a segment, such as `/api/*cp`, and a pattern ending in two or more `*`
|
|
254
|
+
* segments that reaches the path only if its last `*` matches nothing, such as `/api`
|
|
255
|
+
* followed by two of them. These are not refused.
|
|
256
|
+
* The channel (`mcpChannelOf`) is what keeps a delegated token away from every one of these
|
|
257
|
+
* all the same.
|
|
174
258
|
*/
|
|
175
259
|
export declare function mountMcp(app: Hono<any, any, any>, operations: Readonly<Record<string, object>>, resolveStub: (c: Context) => Promise<ScopeStub>, options?: MountMcpOptions & {
|
|
176
260
|
readonly basePath?: string;
|
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { HTTPException } from 'hono/http-exception';
|
|
2
2
|
import { z, listPageQuery, LIST_PAGE_DEFAULT, LIST_PAGE_MAX, LIST_SORT_PARAM, mcpEndpointPath, mcpResourceOf, errorCodeOf, } from '@substrat-run/contracts';
|
|
3
3
|
import { externalInput, externalResult } from './wire.js';
|
|
4
|
+
import { PermissionDenied } from '@substrat-run/kernel';
|
|
4
5
|
import { fieldCoverageArmed, INVOCATION_RECORD_KEY, invocationStampOf, requestIdOf } from './invocation-log.js';
|
|
5
6
|
import { classifyError, messageOf, problemResponse } from './errors.js';
|
|
6
7
|
import { observeOutputFields, outputWalkOf } from './field-coverage.js';
|
|
8
|
+
import { assertDistinctToolNames, assertMcpPathFree, bearerClaims, carriesAct } from './mcp-guard.js';
|
|
7
9
|
/**
|
|
8
10
|
* The protocol revisions this server speaks, newest first.
|
|
9
11
|
*
|
|
@@ -52,6 +54,13 @@ function jsonSchemaOf(schema) {
|
|
|
52
54
|
return { type: 'object', properties: {} };
|
|
53
55
|
}
|
|
54
56
|
}
|
|
57
|
+
/** The key a declared leading `permission` checks: the string itself, or its `key`. */
|
|
58
|
+
function leadingKeyOf(permission) {
|
|
59
|
+
if (typeof permission === 'string')
|
|
60
|
+
return permission;
|
|
61
|
+
const key = permission?.key;
|
|
62
|
+
return typeof key === 'string' ? key : undefined;
|
|
63
|
+
}
|
|
55
64
|
/** Zod's internal definition, read structurally — the same shape `operations-routes.ts` reads. */
|
|
56
65
|
function literalPins(input) {
|
|
57
66
|
const shape = input?.shape;
|
|
@@ -153,19 +162,13 @@ function project(value, walk, fields) {
|
|
|
153
162
|
*/
|
|
154
163
|
export function mcpToolsOf(operations) {
|
|
155
164
|
const tools = [];
|
|
156
|
-
|
|
165
|
+
assertDistinctToolNames(operations, mcpToolName, 'mcpToolsOf');
|
|
157
166
|
for (const operation of Object.keys(operations).sort()) {
|
|
158
167
|
const op = operations[operation];
|
|
159
168
|
// `http` is the declaration: no route, no tool. `mcp: false` is the opt-out.
|
|
160
169
|
if (!op?.http || op.mcp === false)
|
|
161
170
|
continue;
|
|
162
171
|
const name = mcpToolName(operation);
|
|
163
|
-
const clash = byName.get(name);
|
|
164
|
-
if (clash) {
|
|
165
|
-
throw new Error(`mcpToolsOf: '${operation}' and '${clash}' both render as the tool name '${name}' — ` +
|
|
166
|
-
'operation names must stay distinct once non-alphanumerics collapse to `_`');
|
|
167
|
-
}
|
|
168
|
-
byName.set(name, operation);
|
|
169
172
|
const declared = op.input ? jsonSchemaOf(op.input) : { type: 'object', properties: {} };
|
|
170
173
|
const shape = declared;
|
|
171
174
|
const inputSchema = {
|
|
@@ -186,6 +189,7 @@ export function mcpToolsOf(operations) {
|
|
|
186
189
|
: undefined;
|
|
187
190
|
if (selectable)
|
|
188
191
|
inputSchema['properties'] = { ...inputSchema['properties'], fields: fieldsParam(selectable) };
|
|
192
|
+
const permission = leadingKeyOf(op.permission);
|
|
189
193
|
tools.push({
|
|
190
194
|
name,
|
|
191
195
|
operation,
|
|
@@ -202,6 +206,7 @@ export function mcpToolsOf(operations) {
|
|
|
202
206
|
pinned: literalPins(op.input),
|
|
203
207
|
paged: Boolean(op.paged),
|
|
204
208
|
takesInput: Boolean(op.input),
|
|
209
|
+
...(permission === undefined ? {} : { permission }),
|
|
205
210
|
...(outputWalk ? { outputWalk } : {}),
|
|
206
211
|
...(selectable ? { selectable } : {}),
|
|
207
212
|
});
|
|
@@ -277,27 +282,77 @@ function toolResult(result, select) {
|
|
|
277
282
|
* judge its audience. No resolver in this repo accepts an opaque token today.
|
|
278
283
|
*/
|
|
279
284
|
function audienceRefusal(authorization, resource) {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
const segments = authorization.slice(7).trim().split('.');
|
|
283
|
-
if (segments.length !== 3)
|
|
284
|
-
return null;
|
|
285
|
-
let claims;
|
|
286
|
-
try {
|
|
287
|
-
const b64 = segments[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
288
|
-
const bytes = Uint8Array.from(atob(b64.padEnd(b64.length + ((4 - (b64.length % 4)) % 4), '=')), (ch) => ch.charCodeAt(0));
|
|
289
|
-
claims = JSON.parse(new TextDecoder().decode(bytes));
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
return null; // not a JWS payload, so not a token whose audience can be read here
|
|
293
|
-
}
|
|
294
|
-
if (claims === null || typeof claims !== 'object')
|
|
285
|
+
const claims = bearerClaims(authorization);
|
|
286
|
+
if (!claims)
|
|
295
287
|
return null;
|
|
296
|
-
const aud = claims
|
|
288
|
+
const aud = claims['aud'];
|
|
297
289
|
const audiences = typeof aud === 'string' ? [aud] : Array.isArray(aud) ? aud : [];
|
|
298
290
|
// The reason names only this endpoint. The token's own claims are never echoed back.
|
|
299
291
|
return audiences.includes(resource) ? null : `this token was not issued for ${resource}`;
|
|
300
292
|
}
|
|
293
|
+
/** The per-request store key `setMcpDelegation` parks a delegation under. */
|
|
294
|
+
export const MCP_DELEGATION_KEY = 'substratMcpDelegation';
|
|
295
|
+
/**
|
|
296
|
+
* Hand the MCP mount the delegation this request's subject was admitted with — call it in
|
|
297
|
+
* `resolveStub`, with the resolved subject's `delegation`. `undefined` (a user acting
|
|
298
|
+
* directly) sets nothing. A request whose bearer carries `act` and that never reaches this
|
|
299
|
+
* has every tool call refused, so forgetting it fails closed.
|
|
300
|
+
*/
|
|
301
|
+
export function setMcpDelegation(c, delegation) {
|
|
302
|
+
if (!delegation)
|
|
303
|
+
return;
|
|
304
|
+
c.set(MCP_DELEGATION_KEY, {
|
|
305
|
+
actor: delegation.actor,
|
|
306
|
+
scope: [...delegation.scope],
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* The per-request store key this mount marks its own `resolveStub` call with. Deliberately
|
|
311
|
+
* not exported: nothing but `mountMcp` sets it, and a request cannot reach a context variable.
|
|
312
|
+
*/
|
|
313
|
+
const MCP_CHANNEL_KEY = 'substratMcpChannel';
|
|
314
|
+
/**
|
|
315
|
+
* The MCP endpoint serving this request, or `null` (#1824): the channel a delegated token is
|
|
316
|
+
* admitted through. `mountMcp` sets it for exactly the span of its own `resolveStub` call and
|
|
317
|
+
* clears it as that call returns, so every other handler — a REST route, a middleware reading
|
|
318
|
+
* after `next()`, a stray route at the same path — sees `null`.
|
|
319
|
+
*
|
|
320
|
+
* Hand it to the verifier with the request's URL, then hand the subject's delegation back:
|
|
321
|
+
*
|
|
322
|
+
* const subject = await provider.resolve(c.req.raw.headers, c.req.url, { delegated: mcpChannelOf(c) });
|
|
323
|
+
* setMcpDelegation(c, subject?.delegation);
|
|
324
|
+
*
|
|
325
|
+
* A vertical serving its own MCP surface that passes `delegated` itself owns the ceiling there.
|
|
326
|
+
*/
|
|
327
|
+
export function mcpChannelOf(c) {
|
|
328
|
+
const channel = c.get?.(MCP_CHANNEL_KEY);
|
|
329
|
+
const resource = channel?.resource;
|
|
330
|
+
return typeof resource === 'string' ? { resource } : null;
|
|
331
|
+
}
|
|
332
|
+
/** Read once per request, after `resolveStub` (which is where the delegation is handed over). */
|
|
333
|
+
function ceilingOf(c) {
|
|
334
|
+
const handed = c.get?.(MCP_DELEGATION_KEY);
|
|
335
|
+
if (handed !== undefined) {
|
|
336
|
+
// Malformed is an empty scope, which reaches nothing.
|
|
337
|
+
const scope = handed?.scope;
|
|
338
|
+
return { scope: new Set(Array.isArray(scope) ? scope.filter((s) => typeof s === 'string') : []) };
|
|
339
|
+
}
|
|
340
|
+
return carriesAct(c.req.header('authorization')) ? 'unhanded' : undefined;
|
|
341
|
+
}
|
|
342
|
+
/** Why a delegated call may not reach `tool`, or `null` when the ceiling admits it. */
|
|
343
|
+
function ceilingRefusal(ceiling, tool) {
|
|
344
|
+
if (ceiling === undefined)
|
|
345
|
+
return null;
|
|
346
|
+
if (ceiling === 'unhanded')
|
|
347
|
+
return 'delegated calls are not accepted at this endpoint';
|
|
348
|
+
if (tool.permission === undefined) {
|
|
349
|
+
return `this delegation does not reach ${tool.name}: it declares no single permission a delegated scope could name`;
|
|
350
|
+
}
|
|
351
|
+
if (!ceiling.scope.has(tool.permission)) {
|
|
352
|
+
return `this delegation does not reach ${tool.name}: it needs ${tool.permission}, which is outside the delegated scope`;
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
301
356
|
/** A refusal the AGENT should read and adapt to, rather than a transport failure. */
|
|
302
357
|
function toolError(message) {
|
|
303
358
|
return { content: [{ type: 'text', text: message }], isError: true };
|
|
@@ -329,12 +384,34 @@ function statusOf(err) {
|
|
|
329
384
|
* `GET` is a 405, which the transport explicitly permits for a server that opens no
|
|
330
385
|
* server-to-client stream — this one has nothing to push, since every tool is a
|
|
331
386
|
* request/response call into a scope.
|
|
387
|
+
*
|
|
388
|
+
* **Nothing else answers at this path** (#1824). A delegated token is admitted only on a
|
|
389
|
+
* request to the MCP endpoint, because this mount is what holds it to its scope. So a route
|
|
390
|
+
* registered BEFORE it that would answer here instead — an operation at `/mcp`, a
|
|
391
|
+
* hand-written `app.post('/api/mcp', …)`, a `/:slug` parameter route — refuses the mount,
|
|
392
|
+
* loudly, at boot and before this mount registers anything (`assertMcpPathFree`), judged by
|
|
393
|
+
* Hono's `TrieRouter` against the path the endpoint really answers at, a Hono `basePath()`
|
|
394
|
+
* included. A `*` is judged as `TrieRouter` reads it, so `/api/*`, `/api/mcp/*`, a `GET *`
|
|
395
|
+
* fallback and `/api/mc*` all refuse the mount. A route registered AFTER it never runs here:
|
|
396
|
+
* every method but `OPTIONS` is answered by this mount. Not judged:
|
|
397
|
+
* - `app.use`, `app.all` and `app.mount` (Hono records all three alike), and `OPTIONS` routes;
|
|
398
|
+
* - a prefix added after the mount by `app.route()`: the routes of the app it is mounted
|
|
399
|
+
* into are not seen here;
|
|
400
|
+
* - the `*` forms that the default router dispatches here and `TrieRouter` does not match:
|
|
401
|
+
* a `*` inside a segment, such as `/api/*cp`, and a pattern ending in two or more `*`
|
|
402
|
+
* segments that reaches the path only if its last `*` matches nothing, such as `/api`
|
|
403
|
+
* followed by two of them. These are not refused.
|
|
404
|
+
* The channel (`mcpChannelOf`) is what keeps a delegated token away from every one of these
|
|
405
|
+
* all the same.
|
|
332
406
|
*/
|
|
333
407
|
export function mountMcp(
|
|
334
408
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
335
409
|
app, operations, resolveStub, options = {}) {
|
|
410
|
+
// Both refusals come before anything is registered, named for this mount.
|
|
411
|
+
assertDistinctToolNames(operations, mcpToolName, 'mountMcp');
|
|
336
412
|
const tools = mcpToolsOf(operations);
|
|
337
413
|
const path = options.path ?? mcpEndpointPath(options.basePath);
|
|
414
|
+
assertMcpPathFree(app, path, 'mountMcp');
|
|
338
415
|
const wellKnown = `/.well-known/oauth-protected-resource${path}`;
|
|
339
416
|
const byName = new Map(tools.map((t) => [t.name, t]));
|
|
340
417
|
const serverInfo = {
|
|
@@ -371,7 +448,7 @@ app, operations, resolveStub, options = {}) {
|
|
|
371
448
|
}
|
|
372
449
|
return payload;
|
|
373
450
|
};
|
|
374
|
-
const call = async (id, params, stub, invocation) => {
|
|
451
|
+
const call = async (id, params, stub, invocation, ceiling) => {
|
|
375
452
|
const name = typeof params?.['name'] === 'string' ? params['name'] : undefined;
|
|
376
453
|
const tool = name ? byName.get(name) : undefined;
|
|
377
454
|
if (!tool)
|
|
@@ -417,6 +494,11 @@ app, operations, resolveStub, options = {}) {
|
|
|
417
494
|
delete record.outputFields;
|
|
418
495
|
}
|
|
419
496
|
try {
|
|
497
|
+
// #1824: the delegated scope, BEFORE the operation runs its own check. Refused as a
|
|
498
|
+
// denial, so the agent and the record read it exactly as they would one from `ctx.check`.
|
|
499
|
+
const outside = ceilingRefusal(ceiling, tool);
|
|
500
|
+
if (outside)
|
|
501
|
+
throw new PermissionDenied(outside);
|
|
420
502
|
const result = await stub.invoke(tool.operation, externalInput(payloadOf(tool, args)), {
|
|
421
503
|
// #1237: the same stamp the HTTP mount gives an operation's events.
|
|
422
504
|
...(invocationId === undefined ? {} : { invocationId }),
|
|
@@ -459,7 +541,7 @@ app, operations, resolveStub, options = {}) {
|
|
|
459
541
|
return rpcResult(id, toolError(seen ? seen.message : messageOf(err)));
|
|
460
542
|
}
|
|
461
543
|
};
|
|
462
|
-
const handle = async (msg, stub, invocation) => {
|
|
544
|
+
const handle = async (msg, stub, invocation, ceiling) => {
|
|
463
545
|
const id = msg.id ?? null;
|
|
464
546
|
const isNotification = msg.id === undefined;
|
|
465
547
|
switch (msg.method) {
|
|
@@ -492,7 +574,7 @@ app, operations, resolveStub, options = {}) {
|
|
|
492
574
|
});
|
|
493
575
|
}
|
|
494
576
|
case 'tools/call':
|
|
495
|
-
return await call(id, msg.params, stub, invocation);
|
|
577
|
+
return await call(id, msg.params, stub, invocation, ceiling);
|
|
496
578
|
default:
|
|
497
579
|
return isNotification ? null : rpcError(id, -32601, `Method not found: ${msg.method ?? '(none)'}`);
|
|
498
580
|
}
|
|
@@ -600,8 +682,19 @@ app, operations, resolveStub, options = {}) {
|
|
|
600
682
|
* that fails, carrying the challenge — which is what makes discovery start on its
|
|
601
683
|
* own rather than after a false start. It is also the honest reading of the
|
|
602
684
|
* protocol: the resource is the endpoint, not a subset of its verbs.
|
|
685
|
+
*
|
|
686
|
+
* #1824: the channel a delegated token is admitted through (`mcpChannelOf`) exists for
|
|
687
|
+
* this call alone — set as it starts, cleared as it returns, whatever it does.
|
|
603
688
|
*/
|
|
604
|
-
const
|
|
689
|
+
const set = c.set.bind(c);
|
|
690
|
+
set(MCP_CHANNEL_KEY, { resource: resourceFor(c) });
|
|
691
|
+
let stub;
|
|
692
|
+
try {
|
|
693
|
+
stub = await resolveStub(c);
|
|
694
|
+
}
|
|
695
|
+
finally {
|
|
696
|
+
set(MCP_CHANNEL_KEY, undefined);
|
|
697
|
+
}
|
|
605
698
|
// #1746/#1237: what `invocationLog` handed down, read defensively — a host without it
|
|
606
699
|
// simply records nothing.
|
|
607
700
|
const get = c.get;
|
|
@@ -614,12 +707,14 @@ app, operations, resolveStub, options = {}) {
|
|
|
614
707
|
};
|
|
615
708
|
if (invocation.record && stub.subjectKind !== undefined)
|
|
616
709
|
invocation.record.principalKind = stub.subjectKind;
|
|
710
|
+
// #1824: after `resolveStub`, which is where a vertical hands its delegation over.
|
|
711
|
+
const ceiling = ceilingOf(c);
|
|
617
712
|
for (const msg of messages) {
|
|
618
713
|
if (!msg || typeof msg !== 'object') {
|
|
619
714
|
replies.push(rpcError(null, -32600, 'Invalid Request'));
|
|
620
715
|
continue;
|
|
621
716
|
}
|
|
622
|
-
const reply = await handle(msg, stub, invocation);
|
|
717
|
+
const reply = await handle(msg, stub, invocation, ceiling);
|
|
623
718
|
if (reply)
|
|
624
719
|
replies.push(reply);
|
|
625
720
|
}
|
|
@@ -668,8 +763,18 @@ app, operations, resolveStub, options = {}) {
|
|
|
668
763
|
return c.body(null, 202);
|
|
669
764
|
return c.json(Array.isArray(body) ? replies : replies[0]);
|
|
670
765
|
});
|
|
766
|
+
// A 405 names the methods that are served (RFC 9110 §15.5.6): `POST` is the only one.
|
|
767
|
+
const allow = { Allow: 'POST' };
|
|
671
768
|
// No server-initiated stream, so no SSE to open. The transport allows saying so.
|
|
672
|
-
app.get(path, (c) => c.json(rpcError(null, -32601, 'This server opens no event stream'), 405));
|
|
769
|
+
app.get(path, (c) => c.json(rpcError(null, -32601, 'This server opens no event stream'), 405, allow));
|
|
770
|
+
// #1824: and every other method is this mount's too — any verb a client sends, standard or
|
|
771
|
+
// not — so a route registered after it can never answer here (see the header). `OPTIONS`
|
|
772
|
+
// passes on, to a CORS middleware.
|
|
773
|
+
app.all(path, async (c, next) => {
|
|
774
|
+
if (c.req.method === 'OPTIONS')
|
|
775
|
+
return next();
|
|
776
|
+
return c.json(rpcError(null, -32601, 'Only POST is served here'), 405, allow);
|
|
777
|
+
});
|
|
673
778
|
return { path, tools: tools.length };
|
|
674
779
|
}
|
|
675
780
|
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations-routes.d.ts","sourceRoot":"","sources":["../src/operations-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"operations-routes.d.ts","sourceRoot":"","sources":["../src/operations-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { HTTPException } from 'hono/http-exception';
|
|
2
|
-
import { etagOf, ETAG_HEADER, IF_MATCH_HEADER, IDEMPOTENCY_KEY_HEADER, IDEMPOTENCY_REPLAYED_HEADER, isPage, listPageQuery, LIST_SORT_PARAM, nextPageLink, PAGE_LINK_HEADER, PAGE_TOTAL_HEADER, errorCodeOf, } from '@substrat-run/contracts';
|
|
2
|
+
import { etagOf, ETAG_HEADER, IF_MATCH_HEADER, IDEMPOTENCY_KEY_HEADER, IDEMPOTENCY_REPLAYED_HEADER, isPage, listPageQuery, LIST_SORT_PARAM, nextPageLink, PAGE_LINK_HEADER, PAGE_TOTAL_HEADER, errorCodeOf, mcpEndpointPath, } from '@substrat-run/contracts';
|
|
3
3
|
import { externalInput, externalJson } from './wire.js';
|
|
4
4
|
import { fieldCoverageArmed, INVOCATION_RECORD_KEY, invocationStampOf, requestIdOf } from './invocation-log.js';
|
|
5
5
|
import { classifyError } from './errors.js';
|
|
6
6
|
import { observeOutputFields, outputWalkOf } from './field-coverage.js';
|
|
7
7
|
import { defOf, transparentInner } from './zod-structural.js';
|
|
8
|
-
import { mountMcp } from './mcp.js';
|
|
8
|
+
import { mcpToolName, mountMcp } from './mcp.js';
|
|
9
|
+
import { assertDistinctToolNames, assertMcpPathFree, carriesAct, routeAnsweringAt } from './mcp-guard.js';
|
|
9
10
|
/**
|
|
10
11
|
* Input fields the model pins to a single value — supplied by the route rather
|
|
11
12
|
* than by the caller.
|
|
@@ -233,11 +234,26 @@ app, operations, resolveStub, options = {}) {
|
|
|
233
234
|
(a.http.method < b.http.method ? -1 : a.http.method > b.http.method ? 1 : 0) ||
|
|
234
235
|
(aName < bName ? -1 : aName > bName ? 1 : 0));
|
|
235
236
|
assertNoUnreachable(declared);
|
|
237
|
+
// #1824: the MCP endpoint mounted below must be the only route at its path. Everything that
|
|
238
|
+
// can refuse the mount is judged in this pass, before any route is registered, so a refused
|
|
239
|
+
// mount registers nothing: two operations that would be one tool, a route already on the app
|
|
240
|
+
// there (`mountMcp` judges both too), then an operation of this mount there, named.
|
|
241
|
+
const mcpPath = options.mcp === false ? undefined : (options.mcp?.path ?? mcpEndpointPath(base));
|
|
242
|
+
if (mcpPath !== undefined) {
|
|
243
|
+
assertDistinctToolNames(operations, mcpToolName, 'mountOperations');
|
|
244
|
+
assertMcpPathFree(app, mcpPath, 'mountOperations');
|
|
245
|
+
}
|
|
236
246
|
for (const [name, op] of declared) {
|
|
247
|
+
if (mcpPath !== undefined && routeAnsweringAt([{ method: op.http.method, path: `${base}${toHonoPath(op.http.path)}` }], mcpPath)) {
|
|
248
|
+
throw new Error(`mountOperations: '${name}' is bound to ${op.http.method} ${op.http.path}, which answers at the MCP endpoint ` +
|
|
249
|
+
`${mcpPath} — the endpoint must be the only route there; move the operation, or mount with \`mcp: false\``);
|
|
250
|
+
}
|
|
237
251
|
if (known && !known.has(name)) {
|
|
238
252
|
throw new Error(`mountOperations: '${name}' is bound to ${op.http.method} ${op.http.path} but no ` +
|
|
239
253
|
'registered module provides it — check the name against the engine that owns it');
|
|
240
254
|
}
|
|
255
|
+
}
|
|
256
|
+
for (const [name, op] of declared) {
|
|
241
257
|
const { method, path } = op.http;
|
|
242
258
|
const params = pathParams(path);
|
|
243
259
|
const full = `${base}${toHonoPath(path)}`;
|
|
@@ -262,6 +278,12 @@ app, operations, resolveStub, options = {}) {
|
|
|
262
278
|
const guarded = op.concurrency !== undefined;
|
|
263
279
|
const unsafe = method !== 'GET';
|
|
264
280
|
const invoke = async (c, record) => {
|
|
281
|
+
// #1824: no operation route takes a delegated token. Only the MCP endpoint holds one to
|
|
282
|
+
// its scope, so here it is refused before anything resolves it, whatever the vertical's
|
|
283
|
+
// verifier would have said — an older one, or one that admits it at this path.
|
|
284
|
+
if (carriesAct(c.req.header('authorization'))) {
|
|
285
|
+
throw new HTTPException(401, { message: 'a delegated token is accepted only at the MCP endpoint' });
|
|
286
|
+
}
|
|
265
287
|
const stub = await resolveStub(c);
|
|
266
288
|
// #1746: who the call runs as, from the door that minted the stub. Set here rather
|
|
267
289
|
// than after the invoke so a refused call still says who was refused.
|