mcp-use 2.0.0-beta.4 → 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.
Files changed (60) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{chunk-AQ2ZZM2P.js → chunk-DQ7LE4ZA.js} +57 -13
  3. package/dist/chunk-DQ7LE4ZA.js.map +1 -0
  4. package/dist/{chunk-SFI2T6TE.js → chunk-PMPGMSYA.js} +8 -1
  5. package/dist/chunk-PMPGMSYA.js.map +1 -0
  6. package/dist/cli/build.d.ts.map +1 -1
  7. package/dist/cli/dev.d.ts.map +1 -1
  8. package/dist/cli/tools-declaration.d.ts +22 -0
  9. package/dist/cli/tools-declaration.d.ts.map +1 -0
  10. package/dist/commands/build.js +5 -1
  11. package/dist/commands/build.js.map +1 -1
  12. package/dist/commands/dev.js +5 -1
  13. package/dist/commands/dev.js.map +1 -1
  14. package/dist/config.d.ts +41 -0
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/fetch-app.d.ts +17 -0
  17. package/dist/fetch-app.d.ts.map +1 -1
  18. package/dist/index.d.ts +14 -4
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +451 -57
  21. package/dist/index.js.map +1 -1
  22. package/dist/inspector-shell.d.ts +6 -0
  23. package/dist/inspector-shell.d.ts.map +1 -1
  24. package/dist/middleware/cors.d.ts +11 -0
  25. package/dist/middleware/cors.d.ts.map +1 -0
  26. package/dist/middleware/mcp-middleware.d.ts +135 -0
  27. package/dist/middleware/mcp-middleware.d.ts.map +1 -0
  28. package/dist/mount-mcp.d.ts +0 -4
  29. package/dist/mount-mcp.d.ts.map +1 -1
  30. package/dist/oauth/index.js +1 -1
  31. package/dist/{public-route-7IK5D7V7.js → public-route-26FUVRO5.js} +5 -3
  32. package/dist/public-route-26FUVRO5.js.map +1 -0
  33. package/dist/react/hooks/use-files.d.ts +25 -0
  34. package/dist/react/hooks/use-files.d.ts.map +1 -0
  35. package/dist/react/index.d.ts +2 -0
  36. package/dist/react/index.d.ts.map +1 -1
  37. package/dist/react/index.js +66 -2
  38. package/dist/react/index.js.map +1 -1
  39. package/dist/react/runtime/view-runtime.d.ts +23 -0
  40. package/dist/react/runtime/view-runtime.d.ts.map +1 -1
  41. package/dist/react/types/file-types.d.ts +16 -0
  42. package/dist/react/types/file-types.d.ts.map +1 -0
  43. package/dist/react/types/register.d.ts +1 -1
  44. package/dist/react/types/register.d.ts.map +1 -1
  45. package/dist/resources.d.ts +22 -1
  46. package/dist/resources.d.ts.map +1 -1
  47. package/dist/server.d.ts +49 -1
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/tools.d.ts +12 -1
  50. package/dist/tools.d.ts.map +1 -1
  51. package/dist/views/public-route.d.ts +7 -3
  52. package/dist/views/public-route.d.ts.map +1 -1
  53. package/dist/views/routes.d.ts +2 -0
  54. package/dist/views/routes.d.ts.map +1 -1
  55. package/dist/views/wire.d.ts +7 -3
  56. package/dist/views/wire.d.ts.map +1 -1
  57. package/package.json +2 -2
  58. package/dist/chunk-AQ2ZZM2P.js.map +0 -1
  59. package/dist/chunk-SFI2T6TE.js.map +0 -1
  60. package/dist/public-route-7IK5D7V7.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import { App, type McpUiHostContext, type RegisteredAppTool } from "@modelcontextprotocol/ext-apps";
2
2
  import type { CallToolResult, ContentBlock } from "@modelcontextprotocol/server";
3
3
  import type { DisplayMode } from "../types/host-types.js";
4
+ import type { FileMetadata } from "../types/file-types.js";
4
5
  import { type ToolContextError } from "../types/result-types.js";
5
6
  import { ModelContextStore } from "./model-context-store.js";
6
7
  import type { NormalizedViewConfig } from "./view-config.js";
@@ -64,6 +65,18 @@ export interface DisplaySnapshot {
64
65
  */
65
66
  availableDisplayModes: readonly DisplayMode[];
66
67
  }
68
+ /**
69
+ * ChatGPT file-extension channel snapshot.
70
+ *
71
+ * This channel deliberately represents only the optional file APIs used by
72
+ * `useFiles`; the runtime does not mirror other `window.openai` globals.
73
+ *
74
+ * @internal
75
+ */
76
+ export interface FilesSnapshot {
77
+ /** Whether both upload and temporary-download-url helpers are available. */
78
+ isSupported: boolean;
79
+ }
67
80
  /**
68
81
  * Parameters for {@link McpAppRuntime.callServerTool}.
69
82
  *
@@ -157,6 +170,10 @@ export interface McpAppRuntime {
157
170
  * negotiated `availableDisplayModes` change).
158
171
  */
159
172
  getDisplaySnapshot(): DisplaySnapshot;
173
+ /** Subscribe to ChatGPT file-extension availability changes. */
174
+ subscribeFiles(listener: Listener): () => void;
175
+ /** Current ChatGPT file-extension snapshot. */
176
+ getFilesSnapshot(): FilesSnapshot;
160
177
  /** Runtime-owned guest {@link App}, or `null` after disposal. */
161
178
  getApp(): App | null;
162
179
  /** Call a server tool through the host. */
@@ -169,6 +186,12 @@ export interface McpAppRuntime {
169
186
  requestDisplayMode(params: RequestDisplayModeParams): Promise<void>;
170
187
  /** Notify the host of a size change. */
171
188
  sendSizeChanged(params: SizeChangedParams): Promise<void>;
189
+ /** Upload a file through ChatGPT's optional file extension. */
190
+ uploadFile(file: File): Promise<FileMetadata>;
191
+ /** Request a temporary download URL through ChatGPT's file extension. */
192
+ getFileDownloadUrl(file: FileMetadata): Promise<{
193
+ downloadUrl: string;
194
+ }>;
172
195
  /**
173
196
  * Register a view tool, performing the empty-handler → registry handoff on
174
197
  * the first call. Must remain synchronous relative to the handoff.
@@ -1 +1 @@
1
- {"version":3,"file":"view-runtime.d.ts","sourceRoot":"","sources":["../../../src/react/runtime/view-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"view-runtime.d.ts","sourceRoot":"","sources":["../../../src/react/runtime/view-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** Opaque file reference returned by {@link useFiles}. */
2
+ export type FileMetadata = {
3
+ fileId: string;
4
+ };
5
+ /** Value returned by {@link useFiles}. */
6
+ export interface UseFilesResult {
7
+ /** Whether the ChatGPT file upload and download extensions are available. */
8
+ isSupported: boolean;
9
+ /** Upload a file through ChatGPT. */
10
+ upload(file: File): Promise<FileMetadata>;
11
+ /** Request a temporary download URL for an uploaded file. */
12
+ getDownloadUrl(file: FileMetadata): Promise<{
13
+ downloadUrl: string;
14
+ }>;
15
+ }
16
+ //# sourceMappingURL=file-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-types.d.ts","sourceRoot":"","sources":["../../../src/react/types/file-types.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9C,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,WAAW,EAAE,OAAO,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,6DAA6D;IAC7D,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE"}
@@ -1,5 +1,5 @@
1
1
  import type { ToolRef } from "../../tools.js";
2
- /** Augmented by the project's `register.d.ts`; empty by default. */
2
+ /** Augmented by the project's `tools.d.ts`; empty by default. */
3
3
  export interface Register {
4
4
  }
5
5
  type RegisteredToolsModule = Register extends {
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/react/types/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,oEAAoE;AAEpE,MAAM,WAAW,QAAQ;CAAG;AAE5B,KAAK,qBAAqB,GAAG,QAAQ,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5D,CAAC,GACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzB,KAAK,eAAe,CAAC,CAAC,IAAI;KAEvB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACpD,CAAC,GACD,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAE9B,GAAG,EACH,MAAM,CAAC,EACP,MAAM,CAAC,CACR,GACG;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC,CAAA;KAAE,GACvB,KAAK;CACV,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9C,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/react/types/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C,iEAAiE;AAEjE,MAAM,WAAW,QAAQ;CAAG;AAE5B,KAAK,qBAAqB,GAAG,QAAQ,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5D,CAAC,GACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEzB,KAAK,eAAe,CAAC,CAAC,IAAI;KAEvB,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACpD,CAAC,GACD,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,CAE9B,GAAG,EACH,MAAM,CAAC,EACP,MAAM,CAAC,CACR,GACG;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC,CAAA;KAAE,GACvB,KAAK;CACV,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9C,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC"}
@@ -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":"AAAA,OAAO,EASL,KAAK,cAAc,EAGpB,MAAM,8BAA8B,CAAC;AAItC,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAMpE,OAAO,EAUL,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAIL,KAAK,0BAA0B,EAE/B,KAAK,kBAAkB,EAGvB,KAAK,kBAAkB,EAExB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAY7D,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,EAE3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,OAAO,EAER,MAAM,YAAY,CAAC;AAGpB,OAAO,EAGL,aAAa,EAUb,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAQ1B,KAAK,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;AAmD9D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,SAAS,CAAC,KAAK,GAAG,KAAK;;IAoClC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAOzD;IAED;;;;;;;OAOG;IACH,YAAY,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,EAetC;IAED;;;;;;OAMG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,cAAc,EACjC,UAAU,EAAE,CAAC,EACb,QAAQ,EAAE,YAAY,CACpB,cAAc,CAAC,CAAC,CAAC,EACjB,eAAe,CAAC,CAAC,CAAC,EAClB,KAAK,EACL,QAAQ,CAAC,KAAK,CAAC,CAChB,GACA,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAelE;IAED;;;;;;;;;;;;OAYG;IACH,CAAC,aAAa,CAAC,CACb,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,IAAI,CAeN;IAED;;;;;;;;;;OAUG;IACH,YAAY,CACV,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,IAAI,CAEN;IAED,+DAA+D;IAC/D,QAAQ,CACN,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GACjD,IAAI,CAIN;IAED;;;;;;;;OAQG;IACH,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,0BAA0B,EACzD,UAAU,EAAE,CAAC,EACb,QAAQ,EAAE,wBAAwB,CAChC,mBAAmB,CAAC,CAAC,CAAC,EACtB,KAAK,EACL,QAAQ,CAAC,KAAK,CAAC,CAChB,GACA,IAAI,CAWN;IAED;;;OAGG;IACH,MAAM,CAAC,CAAC,SAAS,gBAAgB,EAC/B,UAAU,EAAE,CAAC,EACb,QAAQ,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,GACpE,IAAI,CAWN;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,UAAU,CAAC,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,cAAc,CAAA;KAAO,GAAG,gBAAgB,CAGnE;IAED;;;;;;;;;;;;OAYG;IACG,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAIlD;IAED;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EACvB,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,IAAI,CAON;IAED;;;;;;;;;;;;;;OAcG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EACvB,OAAO,EAAE,CAAC,SAAS,GAAG,MAAM,WAAW,GACnC,0BAA0B,GAC1B,kBAAkB,GACrB,IAAI,CASN;IAED;;;;;;;OAOG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAExC;IAED;;;;;;;OAOG;IACG,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE1C;IAED;;;;;;;OAOG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE5C;IAED;;;;;;;;;OASG;IACG,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtD;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACG,MAAM,CAAC,IAAI,SAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAiEhE;IAED;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3B;CAswBF"}
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.4",
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.4"
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/cli/entry.ts","../src/cli/vite-config.ts","../src/cli/workspace.ts","../src/cli/views.ts","../src/cli/views-plugin.ts"],"sourcesContent":["/**\n * Server-entry discovery for `mcp-use build` and `mcp-use dev`.\n *\n * The entry contract (CLI_SPEC.md): the user's entry module default-exports\n * the `MCPServer` instance and never calls `listen()` itself — the CLI owns\n * the socket.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\n/**\n * Conventional entry locations, checked in order relative to the project\n * root; the first existing file wins.\n *\n * @internal\n */\nexport const ENTRY_CANDIDATES = [\n \"src/index.ts\",\n \"src/server.ts\",\n \"index.ts\",\n \"server.ts\",\n] as const;\n\n/**\n * Locate the server entry for a project.\n *\n * With `override` set (the `--entry` flag), the path is resolved against\n * `cwd` and must exist. Otherwise the {@link ENTRY_CANDIDATES} are probed in\n * order and the first hit wins.\n *\n * @param cwd - Absolute path to the project root.\n * @param override - Explicit entry path (`--entry`), absolute or relative to `cwd`.\n * @returns Absolute path to the entry file.\n * @throws If the override does not exist, or no conventional candidate is\n * found — the error lists every location that was checked.\n *\n * @internal\n */\nexport function discoverEntry(cwd: string, override?: string): string {\n if (override !== undefined) {\n const entry = isAbsolute(override) ? override : resolve(cwd, override);\n if (!existsSync(entry)) {\n throw new Error(`Entry not found: ${entry} (from --entry \"${override}\")`);\n }\n return entry;\n }\n for (const candidate of ENTRY_CANDIDATES) {\n const entry = join(cwd, candidate);\n if (existsSync(entry)) {\n return entry;\n }\n }\n throw new Error(\n `No server entry found in ${cwd}. Looked for: ` +\n `${ENTRY_CANDIDATES.join(\", \")}. ` +\n `Create one of these (default-exporting your MCPServer instance) ` +\n `or pass --entry <path>.`\n );\n}\n","/**\n * Resolve the project-level Vite config used only by the views client build.\n */\n\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst VITE_CONFIG_CANDIDATES = [\n \"vite.config.ts\",\n \"vite.config.js\",\n \"vite.config.mts\",\n \"vite.config.cjs\",\n] as const;\n\n/**\n * Locate a project Vite config, or disable config loading when absent.\n *\n * @param cwd - Absolute project root.\n * @returns Absolute config path or `false`.\n *\n * @internal\n */\nexport function resolveUserViteConfig(cwd: string): string | false {\n for (const name of VITE_CONFIG_CANDIDATES) {\n const path = join(cwd, name);\n if (existsSync(path)) return path;\n }\n return false;\n}\n\n/**\n * Resolve the framework-owned Tailwind stylesheet for project CSS imports.\n *\n * @returns Absolute path exported by the installed `tailwindcss` dependency.\n *\n * @internal\n */\nexport function resolveTailwindCss(): string {\n return fileURLToPath(import.meta.resolve(\"tailwindcss/index.css\"));\n}\n","/**\n * The per-project `.mcp-use/` workspace convention — the Next.js `.next`\n * analog. Everything tooling writes for a project lives under this single,\n * gitignored directory so a checkout stays clean and `rm -rf .mcp-use` is\n * always safe.\n *\n * The layout is a fixed convention, not configuration: there is deliberately\n * no config file and no `outDir` knob (runtime/project configuration lives on\n * the `MCPServer` constructor).\n *\n * This module is PURE: it only derives path strings (no filesystem access).\n *\n * Layout (relative to the project root):\n *\n * ```text\n * .mcp-use/\n * ├─ build/ ← compiled server + manifest.json (this package)\n * ├─ generated/ ← output of the typegen escape-hatch command — reserved (VIEWS_SPEC.md)\n * ├─ cache/ ← disposable dev/build scratch\n * ├─ state/ ← mutable runtime state (e.g. tunnel.json)\n * └─ cloud/ ← cloud linkage (link.json)\n * ```\n *\n * `build/` must contain NO mutable runtime state (that is `state/`'s job) so\n * build output stays reproducible and disposable. This is the per-project\n * workspace, distinct from the global `~/.mcp-use/` store (CLI auth,\n * credentials, per-user caches).\n */\n\nimport { join } from \"node:path\";\n\n/**\n * Fixed name of the per-project workspace directory.\n *\n * @internal\n */\nexport const WORKSPACE_DIR_NAME = \".mcp-use\";\n\n/**\n * Basename of the build manifest written inside the build output directory.\n *\n * @internal\n */\nexport const BUILD_MANIFEST_NAME = \"manifest.json\";\n\n/**\n * Manifest written to `.mcp-use/build/manifest.json` by {@link runBuild} and\n * read back by `mcp-use start`.\n *\n * @internal\n */\nexport interface BuildManifest {\n /** Unique identifier for this build (random hex, regenerated per build). */\n buildId: string;\n /**\n * Filename of the emitted server entry, relative to the build directory\n * (e.g. `\"index.js\"`). `mcp-use start` imports `<build>/<entryPoint>` and\n * serves its default export.\n */\n entryPoint: string;\n /** ISO-8601 timestamp of when the build finished. */\n createdAt: string;\n /**\n * Whether the build was created with `mcp-use build --with-inspector`.\n * Consumed by `mcp-use start` to decide whether to mount the inspector shell.\n */\n inspector: boolean;\n}\n\n/**\n * Every resolved path for a project's `.mcp-use/` workspace.\n *\n * @internal\n */\nexport interface WorkspacePaths {\n /** The project root (the directory containing `.mcp-use/`). */\n projectRoot: string;\n /** The `.mcp-use/` workspace directory. */\n workspace: string;\n /** Build output directory: `.mcp-use/build`. */\n build: string;\n /**\n * Generated `.d.ts` artifacts directory — reserved for the typegen\n * escape-hatch command (VIEWS_SPEC.md § Typegen, demoted).\n */\n generated: string;\n /** Disposable dev/build scratch directory. */\n cache: string;\n /** Mutable runtime state directory. */\n state: string;\n /** Cloud linkage directory — reserved. */\n cloud: string;\n /** Build manifest: `<build>/manifest.json`. */\n buildManifest: string;\n /** Tunnel subdomain persistence: `<state>/tunnel.json`. */\n tunnel: string;\n}\n\n/**\n * Derive every workspace path for a project from its root. Pure — no\n * filesystem access.\n *\n * @param projectRoot - Absolute path to the project root.\n *\n * @example\n * ```ts\n * const paths = resolveWorkspacePaths(process.cwd());\n * console.log(paths.build); // <cwd>/.mcp-use/build\n * ```\n *\n * @internal\n */\nexport function resolveWorkspacePaths(projectRoot: string): WorkspacePaths {\n const workspace = join(projectRoot, WORKSPACE_DIR_NAME);\n const build = join(workspace, \"build\");\n return {\n projectRoot,\n workspace,\n build,\n generated: join(workspace, \"generated\"),\n cache: join(workspace, \"cache\"),\n state: join(workspace, \"state\"),\n cloud: join(workspace, \"cloud\"),\n buildManifest: join(build, BUILD_MANIFEST_NAME),\n tunnel: join(workspace, \"state\", \"tunnel.json\"),\n };\n}\n","/**\n * View discovery for `mcp-use build` / `mcp-use dev`.\n *\n * Views live under `resources/<name>/view.tsx` (VIEWS_SPEC.md § File-based views).\n */\n\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ViteDevServer } from \"vite\";\n\nimport type { ViewsManifest } from \"../views/types.js\";\n\n/** Prefix for per-view virtual entry modules (`virtual:mcp-use/views/<name>`). */\nexport const VIRTUAL_VIEW_PREFIX = \"virtual:mcp-use/views/\";\n\n/** Resolved virtual id prefix (Rollup null-prefixed module id). */\nexport const VIRTUAL_VIEW_RESOLVED_PREFIX = `\\0${VIRTUAL_VIEW_PREFIX}`;\n\n/**\n * One discovered view directory.\n *\n * @internal\n */\nexport interface DiscoveredView {\n /** View directory name (the `resources/<name>` segment). */\n name: string;\n /** Absolute path to `resources/<name>/view.tsx`. */\n entryPath: string;\n}\n\n/**\n * Scan `resources/<name>/view.tsx` under the project root.\n *\n * A missing or empty `resources/` directory yields an empty list — tool-only\n * projects keep byte-identical CLI behavior.\n *\n * @param cwd - Absolute project root.\n * @returns Discovered views sorted by name.\n *\n * @internal\n */\nexport function discoverViews(cwd: string): DiscoveredView[] {\n const resourcesDir = join(cwd, \"resources\");\n if (!existsSync(resourcesDir)) {\n return [];\n }\n\n const views: DiscoveredView[] = [];\n for (const entry of readdirSync(resourcesDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue;\n }\n const entryPath = join(resourcesDir, entry.name, \"view.tsx\");\n if (existsSync(entryPath)) {\n views.push({ name: entry.name, entryPath });\n }\n }\n views.sort((a, b) => a.name.localeCompare(b.name));\n return views;\n}\n\n/**\n * Virtual module id for a view entry (`virtual:mcp-use/views/<name>`).\n *\n * @param name - View directory name.\n *\n * @internal\n */\nexport function virtualViewId(name: string): string {\n return `${VIRTUAL_VIEW_PREFIX}${name}`;\n}\n\n/**\n * Dev URL path Vite serves a resolved virtual module at (browser-loadable).\n *\n * @param name - View directory name.\n *\n * @internal\n */\nexport function devVirtualEntryPath(name: string): string {\n return `/@id/__x00__${VIRTUAL_VIEW_PREFIX}${name}`;\n}\n\n/**\n * Whether a filesystem path is a view component file or lives under a view dir.\n *\n * @internal\n */\nexport function isViewPath(file: string, cwd: string): boolean {\n const rel = file.startsWith(cwd) ? file.slice(cwd.length + 1) : file;\n return (\n /^resources\\/[^/]+\\//.test(rel) || /^resources\\/[^/]+\\/view\\.tsx$/.test(rel)\n );\n}\n\n/**\n * Whether a path is a view's `view.tsx` entry.\n *\n * @internal\n */\nexport function isViewEntryPath(file: string, cwd: string): boolean {\n const rel = file.startsWith(cwd) ? file.slice(cwd.length + 1) : file;\n return /^resources\\/[^/]+\\/view\\.tsx$/.test(rel);\n}\n\n/**\n * Build a dev-shaped views manifest (Vite URLs, `/@vite/client` script hook).\n *\n * @internal\n */\nexport function buildDevViewsManifest(views: DiscoveredView[]): ViewsManifest {\n const manifest: ViewsManifest = {};\n for (const view of views) {\n manifest[view.name] = {\n kind: \"external\",\n entry: devVirtualEntryPath(view.name),\n css: [],\n scripts: [\"/@vite/client\"],\n };\n }\n return manifest;\n}\n\n/**\n * Create a temporary Vite dev server for build-time binding validation.\n *\n * @internal\n */\nexport async function createBindingValidationServer(\n cwd: string,\n cacheDir: string,\n configFile: string | false\n): Promise<ViteDevServer> {\n const { createServer } = await import(\"vite\");\n return createServer({\n root: cwd,\n configFile,\n envFile: false,\n logLevel: \"warn\",\n cacheDir,\n server: { middlewareMode: true, hmr: false },\n ssr: { external: true },\n });\n}\n","/**\n * Vite plugin: virtual view entry modules and optional SSR wrapper entry.\n */\n\nimport type { Plugin } from \"vite\";\n\nimport type { DiscoveredView } from \"./views.js\";\nimport {\n VIRTUAL_VIEW_PREFIX,\n VIRTUAL_VIEW_RESOLVED_PREFIX,\n virtualViewId,\n} from \"./views.js\";\n\nconst VIRTUAL_TAILWIND_ID = \"virtual:mcp-use/tailwind.css\";\nconst VIRTUAL_TAILWIND_RESOLVED_ID = `\\0${VIRTUAL_TAILWIND_ID}`;\n\n/**\n * Options for {@link mcpUseViewsPlugin}.\n *\n * @internal\n */\nexport interface McpUseViewsPluginOptions {\n /** Static list or live getter (dev rediscovery). */\n getViews: () => DiscoveredView[];\n /**\n * Dev-mode entry shape. When present, every virtual entry self-accepts HMR\n * updates (`import.meta.hot.accept()`) so an update that propagates past the\n * view module re-runs the bootstrap instead of full-reloading the iframe\n * document (which would wipe bridge state). Absent for builds — entries stay\n * byte-identical to the production contract.\n */\n dev?: {\n /**\n * Whether React Fast Refresh is active (`@vitejs/plugin-react` resolved).\n * When `true`, entries import the plugin's virtual refresh preamble\n * (`@vitejs/plugin-react/preamble`) before any component module so the\n * refresh runtime hooks the document — the role `transformIndexHtml`\n * plays for Vite-served HTML, which synthesized srcdoc documents never\n * pass through.\n */\n reactRefresh: boolean;\n };\n}\n\n/**\n * Vite plugin that resolves `virtual:mcp-use/views/<name>` to bootstrap code.\n *\n * Applies only to the **client** environment.\n *\n * @internal\n */\nexport function mcpUseViewsPlugin(options: McpUseViewsPluginOptions): Plugin {\n return {\n name: \"mcp-use-views\",\n applyToEnvironment(environment) {\n return environment.name === \"client\";\n },\n resolveId(id) {\n if (id === VIRTUAL_TAILWIND_ID) {\n return VIRTUAL_TAILWIND_RESOLVED_ID;\n }\n if (!id.startsWith(VIRTUAL_VIEW_PREFIX)) {\n return undefined;\n }\n return `\\0${id}`;\n },\n load(id) {\n if (id === VIRTUAL_TAILWIND_RESOLVED_ID) {\n return `@import \"tailwindcss\";`;\n }\n if (!id.startsWith(VIRTUAL_VIEW_RESOLVED_PREFIX)) {\n return undefined;\n }\n const name = id.slice(VIRTUAL_VIEW_RESOLVED_PREFIX.length);\n const view = options.getViews().find((v) => v.name === name);\n if (view === undefined) {\n return undefined;\n }\n const lines: string[] = [];\n if (options.dev?.reactRefresh === true) {\n // Must be the first import: the preamble hooks the refresh runtime\n // into the window before react-dom (via the bootstrap import below)\n // or any refresh-wrapped view module evaluates.\n lines.push(`import \"@vitejs/plugin-react/preamble\";`);\n }\n lines.push(`import ${JSON.stringify(VIRTUAL_TAILWIND_ID)};`);\n lines.push(\n `import { bootstrapView } from \"mcp-use/react\";`,\n `import * as viewModule from ${JSON.stringify(view.entryPath)};`,\n `bootstrapView(viewModule);`\n );\n if (options.dev !== undefined) {\n lines.push(\n `if (import.meta.hot) {`,\n ` import.meta.hot.accept();`,\n `}`\n );\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n },\n };\n}\n\n/**\n * Rollup input map for a client views build (one entry per view).\n *\n * @internal\n */\nexport function clientBuildInputs(\n views: DiscoveredView[]\n): Record<string, string> {\n const input: Record<string, string> = {};\n for (const view of views) {\n input[view.name] = virtualViewId(view.name);\n }\n return input;\n}\n"],"mappings":"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","names":["existsSync","join","join","existsSync","join"]}
@@ -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":[]}