mcp-use 2.0.0-beta.5 → 2.0.0-beta.6

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.
@@ -1,4 +1,4 @@
1
- import type { ReadResourceResult } from "@modelcontextprotocol/server";
1
+ import type { Annotations, MetaObject, ReadResourceResult } from "@modelcontextprotocol/server";
2
2
  import type { RequestContext } from "./context.js";
3
3
  /** Declares a static resource at a fixed URI. First argument to {@link MCPServer.resource}. */
4
4
  export interface ResourceDefinition {
@@ -15,6 +15,16 @@ export interface ResourceDefinition {
15
15
  * own `mimeType` on the wire — set it in the callback's result.
16
16
  */
17
17
  mimeType?: string;
18
+ /** Standard MCP hints describing the resource's audience and presentation. */
19
+ annotations?: Annotations;
20
+ /**
21
+ * Extension metadata advertised on this resource's `resources/list`
22
+ * descriptor. Use vendor-namespaced keys for custom data.
23
+ *
24
+ * This value is not copied into `resources/read` content entries; content
25
+ * metadata must be returned by the callback on each entry's own `_meta`.
26
+ */
27
+ _meta?: MetaObject;
18
28
  }
19
29
  /**
20
30
  * Resource read callback. Returns the SDK's raw {@link ReadResourceResult};
@@ -40,6 +50,17 @@ export interface ResourceTemplateDefinition {
40
50
  description?: string;
41
51
  /** MIME type of the content. */
42
52
  mimeType?: string;
53
+ /** Standard MCP hints describing resources produced by this template. */
54
+ annotations?: Annotations;
55
+ /**
56
+ * Extension metadata advertised on this template's
57
+ * `resources/templates/list` descriptor. Use vendor-namespaced keys for
58
+ * custom data.
59
+ *
60
+ * This value is not copied into `resources/read` content entries; content
61
+ * metadata must be returned by the callback on each entry's own `_meta`.
62
+ */
63
+ _meta?: MetaObject;
43
64
  }
44
65
  /** Strip a leading RFC 6570 operator (`+`, `#`, `.`, `/`, `;`, `?`, `&`) from a template expression. */
45
66
  type StripOperator<E extends string> = E extends `${"+" | "#" | "." | "/" | ";" | "?" | "&"}${infer Rest}` ? Rest : E;
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { type ServerEventBus } from "@modelcontextprotocol/server";
2
2
  import { type ServerConfig } from "./config.js";
3
+ import { type FrameworkHandler } from "./fetch-app.js";
4
+ import { type McpCompleteEventListenerFn, type McpEventListenerFn, type McpMiddlewareFnFor } from "./middleware/mcp-middleware.js";
5
+ import type { NodeRequestHandler } from "./node-bridge.js";
3
6
  import type { FromOpenAPIOptions } from "./openapi/types.js";
4
7
  import type { InferPromptInput, PromptCallback, PromptDefinition } from "./prompts.js";
5
8
  import type { InferTemplateParams, ResourceCallback, ResourceDefinition, ResourceTemplateCallback, ResourceTemplateDefinition } from "./resources.js";
@@ -149,7 +152,52 @@ export declare class MCPServer<TUser = never> {
149
152
  */
150
153
  getHandler(options?: {
151
154
  bus?: ServerEventBus;
152
- }): (request: Request) => Promise<Response>;
155
+ }): FrameworkHandler;
156
+ /**
157
+ * Node `(req, res) => void` handler for composing with an existing
158
+ * `http.Server`. Uses the same internal `toNodeHandler` bridge as
159
+ * {@link MCPServer.listen}; MCPServer users do not need to import
160
+ * `mcp-use/node`.
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * import { createServer } from "node:http";
165
+ * const httpServer = createServer(await server.getNodeHandler());
166
+ * httpServer.listen(3000);
167
+ * ```
168
+ */
169
+ getNodeHandler(): Promise<NodeRequestHandler>;
170
+ /**
171
+ * Register MCP operation middleware that intercepts JSON-RPC dispatch.
172
+ *
173
+ * Patterns use an `mcp:` prefix (for example `mcp:tools/call`, `mcp:*`).
174
+ * Middleware runs in registration order; call `next()` to continue the chain.
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * server.use("mcp:tools/call", async (ctx, next) => {
179
+ * console.log(`Calling tool: ${ctx.params.name}`);
180
+ * return next();
181
+ * });
182
+ * ```
183
+ */
184
+ use<P extends string>(pattern: `mcp:${P}` | P, handler: McpMiddlewareFnFor<P>): this;
185
+ /**
186
+ * Register a read-only MCP observer. Unlike {@link MCPServer.use}, listeners
187
+ * cannot block, override, or mutate params. Throwing is logged and does not
188
+ * fail the request.
189
+ *
190
+ * Append `:complete` to run after the handler (for example
191
+ * `mcp:tools/call:complete`).
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * server.on("mcp:tools/call", (ctx) => {
196
+ * metrics.increment("tools.call", { tool: ctx.params.name });
197
+ * });
198
+ * ```
199
+ */
200
+ on<P extends string>(pattern: `mcp:${P}` | P, handler: P extends `${string}:complete` ? McpCompleteEventListenerFn : McpEventListenerFn): this;
153
201
  /**
154
202
  * Publish a tools-list change to v2 clients with active subscriptions.
155
203
  *
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { CallToolResult, InputRequiredResult, StandardSchemaWithJSON, ToolAnnotations } from "@modelcontextprotocol/server";
1
+ import type { CallToolResult, InputRequiredResult, MetaObject, StandardSchemaWithJSON, ToolAnnotations } from "@modelcontextprotocol/server";
2
2
  import type { McpUiResourceCsp } from "@modelcontextprotocol/ext-apps";
3
3
  import type { RequestContext } from "./context.js";
4
4
  import type { UiPermissions } from "./views/types.js";
@@ -69,6 +69,17 @@ export interface ToolDefinition {
69
69
  outputSchema?: StandardSchemaWithJSON;
70
70
  /** Behavioral hints for clients (readOnlyHint, destructiveHint, …). */
71
71
  annotations?: ToolAnnotations;
72
+ /**
73
+ * Extension metadata advertised on this tool's `tools/list` descriptor.
74
+ *
75
+ * Use vendor-namespaced keys for custom data. This definition metadata is
76
+ * distinct from a tool callback result's `_meta`: it describes the tool,
77
+ * while result `_meta` belongs to one invocation. For view-bound or
78
+ * visibility-restricted tools, framework-owned MCP Apps keys are derived
79
+ * from {@link ToolDefinition.view} and {@link ToolDefinition.visibility};
80
+ * those derived values take precedence over colliding entries here.
81
+ */
82
+ _meta?: MetaObject;
72
83
  /**
73
84
  * Declares who may call or see the tool. Emitted as `_meta.ui.visibility`
74
85
  * on `tools/list`. Omitted = host default (callable by the model, visible
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
@@ -13,11 +13,15 @@ export declare function resolvePublicFilePath(publicRoot: string, subpath: strin
13
13
  * Serve one file from the project's `public/` directory.
14
14
  *
15
15
  * @param diskPath - Absolute path resolved by {@link resolvePublicFilePath}.
16
+ * @param options - When `deferCors` is true, omit hardcoded `ACAO: *` so global
17
+ * {@link ServerConfig.cors} middleware owns CORS headers.
16
18
  * @returns A `Response` with `Cache-Control: public, max-age=0, must-revalidate`
17
- * and `Access-Control-Allow-Origin: *` so cross-origin sandboxed view iframes
18
- * can load public files (module scripts and fetches use CORS mode).
19
+ * and optionally `Access-Control-Allow-Origin: *` so cross-origin sandboxed
20
+ * view iframes can load public files (module scripts and fetches use CORS mode).
19
21
  *
20
22
  * @internal
21
23
  */
22
- export declare function servePublicFile(diskPath: string): Promise<Response>;
24
+ export declare function servePublicFile(diskPath: string, options?: {
25
+ deferCors?: boolean;
26
+ }): Promise<Response>;
23
27
  //# sourceMappingURL=public-route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-route.d.ts","sourceRoot":"","sources":["../../src/views/public-route.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAiBzE"}
1
+ {"version":3,"file":"public-route.d.ts","sourceRoot":"","sources":["../../src/views/public-route.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GACpC,OAAO,CAAC,QAAQ,CAAC,CAmBnB"}
@@ -14,6 +14,7 @@ import type { ViewManifestEntry } from "./types.js";
14
14
  */
15
15
  export declare function createViewAssetsHandler(basePath: string, views: ReadonlyMap<string, ViewManifestEntry>, options?: {
16
16
  projectRoot?: string;
17
+ deferCors?: boolean;
17
18
  }): FetchHandler | undefined;
18
19
  /**
19
20
  * Fetch handler for public view assets under `${basePath}/_mcp-use/public/`.
@@ -35,6 +36,7 @@ export declare function createViewAssetsHandler(basePath: string, views: Readonl
35
36
  export declare function createViewPublicHandler(basePath: string, views: ReadonlyMap<string, ViewManifestEntry>, options?: {
36
37
  dev?: boolean;
37
38
  projectRoot?: string;
39
+ deferCors?: boolean;
38
40
  }): FetchHandler | undefined;
39
41
  /**
40
42
  * @deprecated Use {@link createViewPublicHandler}.
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/views/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC7C,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,YAAY,GAAG,SAAS,CAuC1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC7C,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,YAAY,GAAG,SAAS,CAgC1B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/views/routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC7C,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACtD,YAAY,GAAG,SAAS,CA0C1B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC7C,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GACrE,YAAY,GAAG,SAAS,CAmC1B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAItC"}
@@ -1,3 +1,4 @@
1
+ import type { MetaObject } from "@modelcontextprotocol/server";
1
2
  import type { ViewManifestEntry, ViewResourceFacts } from "./types.js";
2
3
  /**
3
4
  * Tool declaration `_meta` for `tools/list`.
@@ -5,17 +6,20 @@ import type { ViewManifestEntry, ViewResourceFacts } from "./types.js";
5
6
  * When `viewName` is set, emits `ui.resourceUri` plus the legacy flat
6
7
  * {@link UI_RESOURCE_URI_META_KEY} key. When `visibility` is set, emits
7
8
  * `ui.visibility: [visibility]`. Either may be set independently — a
8
- * view-less tool can still declare app-only visibility. Returns
9
- * `undefined` when both are unset so the caller omits `_meta`.
9
+ * view-less tool can still declare app-only visibility. Returns `undefined`
10
+ * only when no view, visibility, or existing metadata is provided.
10
11
  *
11
12
  * @param viewName - Bound view directory / manifest key, or `undefined` when
12
13
  * the tool has no view.
13
14
  * @param visibility - Optional model/app visibility narrowing from the tool
14
15
  * definition's top-level `visibility` field.
16
+ * @param existingMetadata - Optional author-supplied definition metadata. Other
17
+ * keys pass through, while framework-owned resource URI and visibility keys
18
+ * are derived exclusively from `viewName` and `visibility`.
15
19
  * @returns Wire metadata for the tool listing, or `undefined` when there is
16
20
  * nothing to emit.
17
21
  */
18
- export declare function buildToolUiMeta(viewName: string | undefined, visibility: "model" | "app" | undefined): Record<string, unknown> | undefined;
22
+ export declare function buildToolUiMeta(viewName: string | undefined, visibility: "model" | "app" | undefined, existingMetadata?: MetaObject): MetaObject | undefined;
19
23
  /**
20
24
  * Tool result `_meta` stamped on every non-error `CallToolResult` from a
21
25
  * view-bound tool.
@@ -1 +1 @@
1
- {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/views/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAevE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkBrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,OAAO,CAAC,EAAE,0BAA0B,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,OAAO,CAAC,EAAE,0BAA0B,GACnC;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAQA"}
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/views/wire.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAevE;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,UAAU,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,EACvC,gBAAgB,CAAC,EAAE,UAAU,GAC5B,UAAU,GAAG,SAAS,CA4CxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,OAAO,CAAC,EAAE,0BAA0B,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAgBzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,iBAAiB,GAAG,SAAS,EAC1C,OAAO,CAAC,EAAE,0BAA0B,GACnC;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAQA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mcp-use",
3
3
  "type": "module",
4
- "version": "2.0.0-beta.5",
4
+ "version": "2.0.0-beta.6",
5
5
  "description": "MCP framework and CLI built on the official v2 SDK",
6
6
  "author": "mcp-use, Inc.",
7
7
  "license": "MIT",
@@ -111,7 +111,7 @@
111
111
  "vitest": "^4.1.9",
112
112
  "zod": "^4.4.3",
113
113
  "@mcp-use/client": "2.0.0-beta.1",
114
- "mcp-use": "2.0.0-beta.5"
114
+ "mcp-use": "2.0.0-beta.6"
115
115
  },
116
116
  "publishConfig": {
117
117
  "access": "public"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/oauth/index.ts","../src/oauth/adapters.ts","../src/fetch-app.ts"],"sourcesContent":["/**\n * OAuth resource-server helpers and provider configuration for mcp-use.\n *\n * @packageDocumentation\n */\nexport {\n OAuthError,\n OAuthErrorCode,\n bearerAuthChallengeResponse,\n getOAuthProtectedResourceMetadataUrl,\n oauthMetadataResponse,\n requireBearerAuth,\n verifyBearerToken,\n} from \"@modelcontextprotocol/server\";\nexport type {\n AuthInfo as OAuthAuthInfo,\n AuthMetadataOptions,\n BearerAuthOptions,\n OAuthMetadata,\n OAuthProtectedResourceMetadata,\n OAuthTokenVerifier,\n} from \"@modelcontextprotocol/server\";\n\nexport { bearerAuth, oauthMetadata } from \"./adapters.js\";\nexport {\n oauthCustomProvider,\n type CustomOAuthProviderOptions,\n type OAuthExtra,\n type OAuthProvider,\n type OAuthResourceOptions,\n} from \"./provider.js\";\n","import {\n getOAuthProtectedResourceMetadataUrl,\n oauthMetadataResponse,\n requireBearerAuth,\n type AuthInfo,\n} from \"@modelcontextprotocol/server\";\n\nimport { getRequestBag, type FetchMiddleware } from \"../fetch-app.js\";\nimport { getOAuthProviderOptions, wrapOAuthTokenVerifier } from \"./internal.js\";\nimport type { OAuthProvider } from \"./provider.js\";\n\n/**\n * Fetch middleware that requires a bearer token for a canonical resource.\n *\n * @typeParam TUser - Application user type carried by the provider.\n * @param provider - OAuth provider that verifies the bearer token.\n * @param resource - Canonical public MCP endpoint URL.\n */\nexport function bearerAuth<TUser>(\n provider: OAuthProvider<TUser>,\n resource: URL\n): FetchMiddleware {\n const options = getOAuthProviderOptions(provider);\n const gate = requireBearerAuth({\n verifier: wrapOAuthTokenVerifier(provider, resource),\n resourceMetadataUrl: getOAuthProtectedResourceMetadataUrl(resource),\n ...(options.requiredScopes !== undefined && {\n requiredScopes: [...options.requiredScopes],\n }),\n });\n\n return async (request, next) => {\n const result = await gate(request);\n if (result instanceof Response) {\n return result;\n }\n getRequestBag(request).authInfo = result;\n return next();\n };\n}\n\n/**\n * Fetch middleware that serves OAuth discovery metadata.\n *\n * @typeParam TUser - Application user type carried by the provider.\n * @param provider - OAuth provider that supplies authorization-server metadata.\n * @param resource - Canonical public MCP endpoint URL.\n */\nexport function oauthMetadata<TUser>(\n provider: OAuthProvider<TUser>,\n resource: URL\n): FetchMiddleware {\n const options = getOAuthProviderOptions(provider);\n return async (request, next) => {\n const response = oauthMetadataResponse(request, {\n oauthMetadata: options.oauthMetadata,\n resourceServerUrl: resource,\n ...(options.scopesSupported !== undefined && {\n scopesSupported: [...options.scopesSupported],\n }),\n ...(options.resourceName !== undefined && {\n resourceName: options.resourceName,\n }),\n ...(options.serviceDocumentationUrl !== undefined && {\n serviceDocumentationUrl: options.serviceDocumentationUrl,\n }),\n });\n if (response !== undefined) {\n return response;\n }\n return next();\n };\n}\n/**\n * Read verified {@link AuthInfo} from the request bag after {@link bearerAuth}.\n *\n * @param request - Request that passed through bearer auth middleware.\n */\nexport function authInfoFromRequest(request: Request): AuthInfo | undefined {\n return getRequestBag(request).authInfo;\n}\n","import {\n hostHeaderValidationResponse,\n originValidationResponse,\n type AuthInfo,\n} from \"@modelcontextprotocol/server\";\n\n/** Web-standard request handler. */\nexport type FetchHandler = (request: Request) => Promise<Response>;\n\n/** Onion middleware over a {@link FetchHandler} terminal. */\nexport type FetchMiddleware = (\n request: Request,\n next: () => Promise<Response>\n) => Promise<Response>;\n\n/** Per-request values stashed before the MCP handler runs. */\nexport interface RequestBag {\n /** Parsed JSON body when the JSON middleware ran first. */\n parsedBody?: unknown;\n /** Verified OAuth identity forwarded to the SDK handler. */\n authInfo?: AuthInfo;\n}\n\nconst requestBags = new WeakMap<Request, RequestBag>();\n\n/**\n * Mutable per-request bag; created on first access.\n *\n * @param request - Incoming request whose bag to read or create.\n */\nexport function getRequestBag(request: Request): RequestBag {\n let bag = requestBags.get(request);\n if (bag === undefined) {\n bag = {};\n requestBags.set(request, bag);\n }\n return bag;\n}\n\n/**\n * Compose middleware around a terminal handler (first listed runs outermost).\n *\n * @param terminal - Fallback handler when no middleware short-circuits.\n * @param middlewares - Middleware chain executed before `terminal`.\n */\nexport function composeFetch(\n terminal: FetchHandler,\n ...middlewares: FetchMiddleware[]\n): FetchHandler {\n return async (request: Request): Promise<Response> => {\n let index = 0;\n const dispatch = async (): Promise<Response> => {\n if (index < middlewares.length) {\n const middleware = middlewares[index]!;\n index += 1;\n return middleware(request, dispatch);\n }\n return terminal(request);\n };\n return dispatch();\n };\n}\n\n/**\n * Return the pathname of a request URL.\n *\n * @param request - Request whose pathname to read.\n */\nexport function pathnameOf(request: Request): string {\n return new URL(request.url).pathname;\n}\n\n/**\n * Match a request pathname exactly.\n *\n * @param request - Request to test.\n * @param path - Exact pathname (for example `/mcp`).\n */\nexport function matchesPath(request: Request, path: string): boolean {\n return pathnameOf(request) === path;\n}\n\n/**\n * Match a request pathname prefix (prefix or `prefix/...`).\n *\n * @param request - Request to test.\n * @param prefix - Path prefix without a trailing wildcard.\n */\nexport function matchesPathPrefix(request: Request, prefix: string): boolean {\n const pathname = pathnameOf(request);\n return pathname === prefix || pathname.startsWith(`${prefix}/`);\n}\n\n/**\n * Dispatch to the first matching route handler.\n *\n * @param routes - Ordered route table; first match wins.\n * @param fallback - Handler when nothing matches.\n */\nexport function routeFetch(\n routes: Array<{\n match: (request: Request) => boolean;\n handler: FetchHandler;\n }>,\n fallback: FetchHandler = async () =>\n new Response(\"Not Found\", { status: 404 })\n): FetchHandler {\n return async (request: Request): Promise<Response> => {\n for (const route of routes) {\n if (route.match(request)) {\n return route.handler(request);\n }\n }\n return fallback(request);\n };\n}\n\n/**\n * Parse JSON bodies once and stash them in the request bag.\n */\nexport function jsonBodyMiddleware(): FetchMiddleware {\n return async (request, next) => {\n const bag = getRequestBag(request);\n if (bag.parsedBody !== undefined) {\n return next();\n }\n if (\n !(request.headers.get(\"content-type\") ?? \"\").includes(\"application/json\")\n ) {\n return next();\n }\n try {\n bag.parsedBody = await request.clone().json();\n } catch {\n return new Response(\"Invalid JSON\", { status: 400 });\n }\n return next();\n };\n}\n\n/**\n * Reject requests whose `Host` header is not on the allowlist.\n *\n * @param hosts - Allowed hostnames (port-agnostic).\n */\nexport function hostValidationMiddleware(hosts: string[]): FetchMiddleware {\n return async (request, next) => {\n const rejected = hostHeaderValidationResponse(request, hosts);\n return rejected ?? next();\n };\n}\n\n/**\n * Reject requests whose `Origin` header is not on the allowlist.\n *\n * @param origins - Allowed origin hostnames (port-agnostic).\n * @param skipSafeMethods - When true, skip GET/HEAD (view asset GETs).\n */\nexport function originValidationMiddleware(\n origins: string[],\n skipSafeMethods = true\n): FetchMiddleware {\n return async (request, next) => {\n if (\n skipSafeMethods &&\n (request.method === \"GET\" || request.method === \"HEAD\")\n ) {\n return next();\n }\n const rejected = originValidationResponse(request, origins);\n return rejected ?? next();\n };\n}\n"],"mappings":"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","names":["getOAuthProtectedResourceMetadataUrl","oauthMetadataResponse","requireBearerAuth"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/views/public-route.ts"],"sourcesContent":["const PUBLIC_CONTENT_TYPES: Record<string, string> = {\n \".css\": \"text/css\",\n \".gif\": \"image/gif\",\n \".html\": \"text/html\",\n \".ico\": \"image/x-icon\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".js\": \"application/javascript\",\n \".json\": \"application/json\",\n \".map\": \"application/json\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml\",\n \".txt\": \"text/plain\",\n \".webp\": \"image/webp\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n};\n\n/**\n * Resolve a request subpath to an on-disk file under `publicRoot`, rejecting\n * path traversal.\n *\n * @param publicRoot - Absolute path to the `public/` directory on disk.\n * @param subpath - Request path after the `/public/` route prefix.\n * @returns Absolute file path when safe and present, otherwise `null`.\n *\n * @internal\n */\nexport async function resolvePublicFilePath(\n publicRoot: string,\n subpath: string\n): Promise<string | null> {\n const { existsSync } = await import(\"node:fs\");\n const { resolve, sep } = await import(\"node:path\");\n\n if (subpath === \"\" || subpath.includes(\"..\") || subpath.includes(\"\\\\\")) {\n return null;\n }\n const clean = subpath.replace(/^\\/+/, \"\");\n if (clean === \"\" || clean.endsWith(\"/\")) {\n return null;\n }\n const root = resolve(publicRoot);\n const abs = resolve(root, clean);\n if (abs !== root && !abs.startsWith(root + sep)) {\n return null;\n }\n if (!existsSync(abs)) {\n return null;\n }\n return abs;\n}\n\n/**\n * Serve one file from the project's `public/` directory.\n *\n * @param diskPath - Absolute path resolved by {@link resolvePublicFilePath}.\n * @returns A `Response` with `Cache-Control: public, max-age=0, must-revalidate`\n * and `Access-Control-Allow-Origin: *` so cross-origin sandboxed view iframes\n * can load public files (module scripts and fetches use CORS mode).\n *\n * @internal\n */\nexport async function servePublicFile(diskPath: string): Promise<Response> {\n const { createReadStream } = await import(\"node:fs\");\n const { extname } = await import(\"node:path\");\n const { Readable } = await import(\"node:stream\");\n\n const ext = extname(diskPath);\n const contentType = PUBLIC_CONTENT_TYPES[ext] ?? \"application/octet-stream\";\n const nodeStream = createReadStream(diskPath);\n const webStream = Readable.toWeb(nodeStream) as ReadableStream;\n return new Response(webStream, {\n status: 200,\n headers: {\n \"Content-Type\": contentType,\n \"Cache-Control\": \"public, max-age=0, must-revalidate\",\n \"Access-Control-Allow-Origin\": \"*\",\n },\n });\n}\n"],"mappings":";AAAA,IAAM,uBAA+C;AAAA,EACnD,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ;AAYA,eAAsB,sBACpB,YACA,SACwB;AACxB,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,IAAS;AAC7C,QAAM,EAAE,SAAS,IAAI,IAAI,MAAM,OAAO,MAAW;AAEjD,MAAI,YAAY,MAAM,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,IAAI,GAAG;AACtE,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,QAAQ,QAAQ,QAAQ,EAAE;AACxC,MAAI,UAAU,MAAM,MAAM,SAAS,GAAG,GAAG;AACvC,WAAO;AAAA,EACT;AACA,QAAM,OAAO,QAAQ,UAAU;AAC/B,QAAM,MAAM,QAAQ,MAAM,KAAK;AAC/B,MAAI,QAAQ,QAAQ,CAAC,IAAI,WAAW,OAAO,GAAG,GAAG;AAC/C,WAAO;AAAA,EACT;AACA,MAAI,CAAC,WAAW,GAAG,GAAG;AACpB,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAYA,eAAsB,gBAAgB,UAAqC;AACzE,QAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,IAAS;AACnD,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,MAAW;AAC5C,QAAM,EAAE,SAAS,IAAI,MAAM,OAAO,QAAa;AAE/C,QAAM,MAAM,QAAQ,QAAQ;AAC5B,QAAM,cAAc,qBAAqB,GAAG,KAAK;AACjD,QAAM,aAAa,iBAAiB,QAAQ;AAC5C,QAAM,YAAY,SAAS,MAAM,UAAU;AAC3C,SAAO,IAAI,SAAS,WAAW;AAAA,IAC7B,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,+BAA+B;AAAA,IACjC;AAAA,EACF,CAAC;AACH;","names":[]}