skybridge 0.0.0-dev.bffc31c → 0.0.0-dev.c003b05

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 (70) hide show
  1. package/dist/cli/use-nodemon.js +2 -2
  2. package/dist/cli/use-nodemon.js.map +1 -1
  3. package/dist/commands/build.js +27 -6
  4. package/dist/commands/build.js.map +1 -1
  5. package/dist/commands/start.js +2 -7
  6. package/dist/commands/start.js.map +1 -1
  7. package/dist/server/content-helpers.d.ts +27 -0
  8. package/dist/server/content-helpers.js +46 -0
  9. package/dist/server/content-helpers.js.map +1 -0
  10. package/dist/server/content-helpers.test.js +70 -0
  11. package/dist/server/content-helpers.test.js.map +1 -0
  12. package/dist/server/express.js +2 -2
  13. package/dist/server/express.js.map +1 -1
  14. package/dist/server/express.test.js +2 -2
  15. package/dist/server/express.test.js.map +1 -1
  16. package/dist/server/index.d.ts +4 -3
  17. package/dist/server/index.js +3 -2
  18. package/dist/server/index.js.map +1 -1
  19. package/dist/server/middleware.test.js +12 -9
  20. package/dist/server/middleware.test.js.map +1 -1
  21. package/dist/server/server.d.ts +79 -72
  22. package/dist/server/server.js +141 -85
  23. package/dist/server/server.js.map +1 -1
  24. package/dist/server/templateHelper.d.ts +5 -5
  25. package/dist/server/templates/development.hbs +2 -2
  26. package/dist/server/templates/production.hbs +1 -1
  27. package/dist/server/viewsDevServer.d.ts +14 -0
  28. package/dist/server/viewsDevServer.js +45 -0
  29. package/dist/server/viewsDevServer.js.map +1 -0
  30. package/dist/test/utils.d.ts +8 -20
  31. package/dist/test/utils.js +39 -35
  32. package/dist/test/utils.js.map +1 -1
  33. package/dist/test/{widget.test.js → view.test.js} +229 -109
  34. package/dist/test/view.test.js.map +1 -0
  35. package/dist/web/bridges/types.d.ts +2 -2
  36. package/dist/web/generate-helpers.d.ts +20 -18
  37. package/dist/web/generate-helpers.js +20 -18
  38. package/dist/web/generate-helpers.js.map +1 -1
  39. package/dist/web/generate-helpers.test-d.js +20 -20
  40. package/dist/web/generate-helpers.test-d.js.map +1 -1
  41. package/dist/web/index.d.ts +1 -0
  42. package/dist/web/index.js.map +1 -1
  43. package/dist/web/plugin/plugin.d.ts +4 -1
  44. package/dist/web/plugin/plugin.js +112 -25
  45. package/dist/web/plugin/plugin.js.map +1 -1
  46. package/dist/web/plugin/scan-views.d.ts +8 -0
  47. package/dist/web/plugin/scan-views.js +70 -0
  48. package/dist/web/plugin/scan-views.js.map +1 -0
  49. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  50. package/dist/web/plugin/scan-views.test.js +67 -0
  51. package/dist/web/plugin/scan-views.test.js.map +1 -0
  52. package/dist/web/plugin/validate-view.d.ts +1 -0
  53. package/dist/web/plugin/validate-view.js +9 -0
  54. package/dist/web/plugin/validate-view.js.map +1 -0
  55. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  56. package/dist/web/plugin/validate-view.test.js +24 -0
  57. package/dist/web/plugin/validate-view.test.js.map +1 -0
  58. package/package.json +4 -1
  59. package/tsconfig.base.json +2 -0
  60. package/dist/server/widgetsDevServer.d.ts +0 -13
  61. package/dist/server/widgetsDevServer.js +0 -52
  62. package/dist/server/widgetsDevServer.js.map +0 -1
  63. package/dist/test/widget.test.js.map +0 -1
  64. package/dist/web/plugin/validate-widget.d.ts +0 -5
  65. package/dist/web/plugin/validate-widget.js +0 -27
  66. package/dist/web/plugin/validate-widget.js.map +0 -1
  67. package/dist/web/plugin/validate-widget.test.js +0 -42
  68. package/dist/web/plugin/validate-widget.test.js.map +0 -1
  69. /package/dist/{test/widget.test.d.ts → server/content-helpers.test.d.ts} +0 -0
  70. /package/dist/{web/plugin/validate-widget.test.d.ts → test/view.test.d.ts} +0 -0
@@ -1,8 +1,7 @@
1
- import type { McpUiResourceMeta } from "@modelcontextprotocol/ext-apps";
2
- import { McpServer as McpServerBase, type RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import { McpServer as McpServerBase } from "@modelcontextprotocol/sdk/server/mcp.js";
3
2
  import type { AnySchema, SchemaOutput, ZodRawShapeCompat } from "@modelcontextprotocol/sdk/server/zod-compat.js";
4
3
  import type { RequestHandlerExtra } from "@modelcontextprotocol/sdk/shared/protocol.js";
5
- import type { CallToolResult, Resource, ServerNotification, ServerRequest, ServerResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
4
+ import type { ContentBlock, ServerNotification, ServerRequest, ServerResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
6
5
  import type { ErrorRequestHandler, RequestHandler } from "express";
7
6
  import type { McpExtra, McpExtraFor, McpMethodString, McpMiddlewareFilter, McpMiddlewareFn, McpResultFor, McpTypedMiddlewareFn, McpWildcard } from "./middleware.js";
8
7
  export type ToolDef<TInput = unknown, TOutput = unknown, TResponseMetadata = unknown> = {
@@ -10,36 +9,59 @@ export type ToolDef<TInput = unknown, TOutput = unknown, TResponseMetadata = unk
10
9
  output: TOutput;
11
10
  responseMetadata: TResponseMetadata;
12
11
  };
12
+ export type ViewHostType = "apps-sdk" | "mcp-app";
13
+ export interface ViewCsp {
14
+ /** Origins for static assets (images, fonts, scripts, styles). */
15
+ resourceDomains?: string[];
16
+ /** Origins the view may contact via fetch/XHR. */
17
+ connectDomains?: string[];
18
+ /** Origins allowed for iframe embeds (opts into stricter app review). */
19
+ frameDomains?: string[];
20
+ /** Origins that can receive openExternal redirects without the safe-link modal. */
21
+ redirectDomains?: string[];
22
+ /** Origins allowed in `<base href>` tags (mcp-apps only). */
23
+ baseUriDomains?: string[];
24
+ }
25
+ export interface ViewNameRegistry {
26
+ }
27
+ export type ViewName = keyof ViewNameRegistry extends never ? string : keyof ViewNameRegistry & string;
28
+ export interface ViewConfig {
29
+ component: ViewName;
30
+ description?: string;
31
+ hosts?: ViewHostType[];
32
+ prefersBorder?: boolean;
33
+ domain?: string;
34
+ csp?: ViewCsp;
35
+ _meta?: Record<string, unknown>;
36
+ }
37
+ export interface KnownToolMeta {
38
+ "openai/widgetAccessible"?: boolean;
39
+ "openai/toolInvocation/invoking"?: string;
40
+ "openai/toolInvocation/invoked"?: string;
41
+ }
42
+ export type ToolMeta = KnownToolMeta & Record<string, unknown>;
43
+ export type HandlerContent = string | ContentBlock | ContentBlock[];
13
44
  /**
14
- * Extended MCP Apps CSP with upcoming fields from ext-apps PR #158
15
- * and Skybridge-specific fields for OpenAI compatibility
16
- * @see https://github.com/modelcontextprotocol/ext-apps/pull/158
45
+ * Type-level marker interface for cross-package type inference.
46
+ *
47
+ * Consumers infer tool types via the structural `$types` property rather than
48
+ * the `McpServer` class generic, because class-generic inference breaks when
49
+ * `McpServer` comes from different package installations (e.g. a consumer
50
+ * with its own `skybridge` dep vs. the in-tree workspace version).
51
+ *
52
+ * Inspired by tRPC's `_def` pattern and Hono's type markers.
17
53
  */
18
- type ExtendedMcpUiResourceCsp = McpUiResourceMeta["csp"] & {
19
- /**
20
- * Origins that can receive openExternal redirects without safe-link modal (OpenAI-specific)
21
- * @see https://developers.openai.com/apps-sdk/reference#component-resource-_meta-fields
22
- */
23
- redirectDomains?: string[];
24
- };
25
- /** Extended MCP Apps resource metadata with upcoming CSP fields */
26
- type ExtendedMcpUiResourceMeta = Omit<McpUiResourceMeta, "csp"> & {
27
- csp?: ExtendedMcpUiResourceCsp;
28
- };
29
- /** User-provided resource configuration with optional CSP override */
30
- export type WidgetResourceMeta = {
31
- ui?: ExtendedMcpUiResourceMeta;
32
- } & Resource["_meta"];
33
- export type WidgetHostType = "apps-sdk" | "mcp-app";
34
- type McpServerOriginalResourceConfig = Omit<Resource, "uri" | "name" | "mimeType" | "_meta"> & {
35
- _meta?: WidgetResourceMeta;
36
- /** Restrict host types to a specific subset */
37
- hosts?: WidgetHostType[];
38
- };
39
- type McpServerOriginalToolConfig = Omit<Parameters<typeof McpServerBase.prototype.registerTool<ZodRawShapeCompat, ZodRawShapeCompat>>[1], "inputSchema" | "outputSchema">;
54
+ export interface McpServerTypes<TTools extends Record<string, ToolDef>> {
55
+ readonly tools: TTools;
56
+ }
40
57
  type Simplify<T> = {
41
58
  [K in keyof T]: T[K];
42
59
  };
60
+ type ShapeOutput<Shape extends ZodRawShapeCompat> = Simplify<{
61
+ [K in keyof Shape as undefined extends SchemaOutput<Shape[K]> ? never : K]: SchemaOutput<Shape[K]>;
62
+ } & {
63
+ [K in keyof Shape as undefined extends SchemaOutput<Shape[K]> ? K : never]?: SchemaOutput<Shape[K]>;
64
+ }>;
43
65
  type ExtractStructuredContent<T> = T extends {
44
66
  structuredContent: infer SC;
45
67
  } ? Simplify<SC> : never;
@@ -50,62 +72,48 @@ type ExtractMeta<T> = [Extract<T, {
50
72
  }> extends {
51
73
  _meta: infer M;
52
74
  } ? Simplify<M> : unknown;
53
- /**
54
- * Type-level marker interface for cross-package type inference.
55
- * This enables TypeScript to infer tool types across package boundaries
56
- * using structural typing on the $types property, rather than relying on
57
- * class generic inference which fails when McpServer comes from different
58
- * package installations.
59
- *
60
- * Inspired by tRPC's _def pattern and Hono's type markers.
61
- */
62
- export interface McpServerTypes<TTools extends Record<string, ToolDef>> {
63
- readonly tools: TTools;
64
- }
65
- type ShapeOutput<Shape extends ZodRawShapeCompat> = Simplify<{
66
- [K in keyof Shape as undefined extends SchemaOutput<Shape[K]> ? never : K]: SchemaOutput<Shape[K]>;
67
- } & {
68
- [K in keyof Shape as undefined extends SchemaOutput<Shape[K]> ? K : never]?: SchemaOutput<Shape[K]>;
69
- }>;
70
75
  type AddTool<TTools, TName extends string, TInput extends ZodRawShapeCompat, TOutput, TResponseMetadata = unknown> = McpServer<TTools & {
71
76
  [K in TName]: ToolDef<ShapeOutput<TInput>, TOutput, TResponseMetadata>;
72
77
  }>;
73
- type ToolConfig<TInput extends ZodRawShapeCompat | AnySchema> = {
78
+ interface ToolConfig<TInput extends ZodRawShapeCompat | AnySchema> {
79
+ name: string;
74
80
  title?: string;
75
81
  description?: string;
76
82
  inputSchema?: TInput;
77
83
  outputSchema?: ZodRawShapeCompat | AnySchema;
78
84
  annotations?: ToolAnnotations;
79
- _meta?: Record<string, unknown>;
80
- };
85
+ view?: ViewConfig;
86
+ _meta?: ToolMeta;
87
+ }
81
88
  type ToolHandler<TInput extends ZodRawShapeCompat, TReturn extends {
82
- content: CallToolResult["content"];
83
- } = CallToolResult> = (args: ShapeOutput<TInput>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => TReturn | Promise<TReturn>;
84
- export declare class McpServer<TTools extends Record<string, ToolDef> = Record<never, ToolDef>> extends McpServerBase {
89
+ content?: HandlerContent;
90
+ } = {
91
+ content?: HandlerContent;
92
+ }> = (args: ShapeOutput<TInput>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => TReturn | Promise<TReturn>;
93
+ export declare function normalizeContent(content: HandlerContent | undefined): ContentBlock[];
94
+ interface McpServerBaseOmitted extends Omit<McpServerBase, "registerTool" | "connect"> {
95
+ }
96
+ declare const McpServerBaseOmitted: new (...args: ConstructorParameters<typeof McpServerBase>) => McpServerBaseOmitted;
97
+ export declare class McpServer<TTools extends Record<string, ToolDef> = Record<never, ToolDef>> extends McpServerBaseOmitted {
85
98
  readonly $types: McpServerTypes<TTools>;
86
99
  private express?;
87
100
  private customMiddleware;
88
101
  private customErrorMiddleware;
89
102
  private mcpMiddlewareEntries;
90
103
  private mcpMiddlewareApplied;
104
+ private claimedViews;
91
105
  use(...handlers: RequestHandler[]): this;
92
106
  use(path: string, ...handlers: RequestHandler[]): this;
93
107
  useOnError(...handlers: ErrorRequestHandler[]): this;
94
108
  useOnError(path: string, ...handlers: ErrorRequestHandler[]): this;
95
- /**
96
- * Register MCP protocol-level middleware (catch-all).
97
- */
109
+ /** Register MCP protocol-level middleware (catch-all). */
98
110
  mcpMiddleware(handler: McpMiddlewareFn): this;
99
- /**
100
- * Register MCP protocol-level middleware for all requests (`extra` is `McpExtra`).
101
- */
111
+ /** Register MCP protocol-level middleware for all requests (`extra` is `McpExtra`). */
102
112
  mcpMiddleware(filter: "request", handler: (request: {
103
113
  method: string;
104
114
  params: Record<string, unknown>;
105
115
  }, extra: McpExtra, next: () => Promise<ServerResult>) => Promise<unknown> | unknown): this;
106
- /**
107
- * Register MCP protocol-level middleware for all notifications (`extra` is `undefined`).
108
- */
116
+ /** Register MCP protocol-level middleware for all notifications (`extra` is `undefined`). */
109
117
  mcpMiddleware(filter: "notification", handler: (request: {
110
118
  method: string;
111
119
  params: Record<string, unknown>;
@@ -132,19 +140,18 @@ export declare class McpServer<TTools extends Record<string, ToolDef> = Record<n
132
140
  private applyMcpMiddleware;
133
141
  connect(transport: Parameters<typeof McpServerBase.prototype.connect>[0]): Promise<void>;
134
142
  run(): Promise<void>;
135
- registerWidget<TName extends string, TInput extends ZodRawShapeCompat, TReturn extends {
136
- content: CallToolResult["content"];
137
- }>(name: TName, resourceConfig: McpServerOriginalResourceConfig, toolConfig: McpServerOriginalToolConfig & {
138
- inputSchema?: TInput;
139
- outputSchema?: ZodRawShapeCompat | AnySchema;
140
- }, toolCallback: ToolHandler<TInput, TReturn>): AddTool<TTools, TName, TInput, ExtractStructuredContent<TReturn>, ExtractMeta<TReturn>>;
141
- registerTool<TName extends string, InputArgs extends ZodRawShapeCompat, TReturn extends {
142
- content: CallToolResult["content"];
143
- }>(name: TName, config: ToolConfig<InputArgs>, cb: ToolHandler<InputArgs, TReturn>): AddTool<TTools, TName, InputArgs, ExtractStructuredContent<TReturn>, ExtractMeta<TReturn>>;
144
- registerTool<InputArgs extends ZodRawShapeCompat>(name: string, config: ToolConfig<InputArgs>, cb: ToolHandler<InputArgs>): RegisteredTool;
145
- private registerWidgetResource;
143
+ private enforceOneToolPerView;
144
+ private registerViewResources;
145
+ private registerViewResource;
146
+ private wrapHandler;
147
+ private lookupViewFile;
146
148
  private lookupDistFile;
147
- private lookupDistFileWithIndexFallback;
148
149
  private readManifest;
150
+ registerTool<TName extends string, InputArgs extends ZodRawShapeCompat, TReturn extends {
151
+ content?: HandlerContent;
152
+ }>(config: ToolConfig<InputArgs> & {
153
+ name: TName;
154
+ }, cb: ToolHandler<InputArgs, TReturn>): AddTool<TTools, TName, InputArgs, ExtractStructuredContent<TReturn>, ExtractMeta<TReturn>>;
155
+ registerTool<InputArgs extends ZodRawShapeCompat>(config: ToolConfig<InputArgs>, cb: ToolHandler<InputArgs>): this;
149
156
  }
150
157
  export {};
@@ -2,7 +2,7 @@ import crypto from "node:crypto";
2
2
  import { readFileSync } from "node:fs";
3
3
  import http from "node:http";
4
4
  import path from "node:path";
5
- import { McpServer as McpServerBase, } from "@modelcontextprotocol/sdk/server/mcp.js";
5
+ import { McpServer as McpServerBase } from "@modelcontextprotocol/sdk/server/mcp.js";
6
6
  import { mergeWith, union } from "es-toolkit";
7
7
  import { createApp } from "./express.js";
8
8
  import { createMiddlewareEntry } from "./metric.js";
@@ -15,12 +15,26 @@ const mergeWithUnion = (target, source) => {
15
15
  }
16
16
  });
17
17
  };
18
- export class McpServer extends McpServerBase {
18
+ export function normalizeContent(content) {
19
+ if (content === undefined) {
20
+ return [];
21
+ }
22
+ if (typeof content === "string") {
23
+ return [{ type: "text", text: content }];
24
+ }
25
+ if (Array.isArray(content)) {
26
+ return content;
27
+ }
28
+ return [content];
29
+ }
30
+ const McpServerBaseOmitted = McpServerBase;
31
+ export class McpServer extends McpServerBaseOmitted {
19
32
  express;
20
33
  customMiddleware = [];
21
34
  customErrorMiddleware = [];
22
35
  mcpMiddlewareEntries = [];
23
36
  mcpMiddlewareApplied = false;
37
+ claimedViews = new Map();
24
38
  use(pathOrHandler, ...handlers) {
25
39
  if (typeof pathOrHandler === "string") {
26
40
  this.customMiddleware.push({
@@ -83,7 +97,6 @@ export class McpServer extends McpServerBase {
83
97
  return;
84
98
  }
85
99
  const { requestHandlers, notificationHandlers } = getHandlerMaps(this.server);
86
- // Wrap existing handlers and proxy future .set() for lazy SDK registration
87
100
  const instrumentMap = (map, isNotification) => {
88
101
  for (const [method, handler] of map) {
89
102
  map.set(method, buildMiddlewareChain(method, isNotification, handler, entries));
@@ -96,7 +109,7 @@ export class McpServer extends McpServerBase {
96
109
  }
97
110
  async connect(transport) {
98
111
  this.applyMcpMiddleware();
99
- return super.connect(transport);
112
+ return McpServerBase.prototype.connect.call(this, transport);
100
113
  }
101
114
  async run() {
102
115
  this.applyMcpMiddleware();
@@ -110,7 +123,7 @@ export class McpServer extends McpServerBase {
110
123
  });
111
124
  }
112
125
  httpServer.on("request", this.express);
113
- await new Promise((resolve, reject) => {
126
+ return new Promise((resolve, reject) => {
114
127
  httpServer.on("error", (error) => {
115
128
  console.error("Failed to start server:", error);
116
129
  reject(error);
@@ -120,113 +133,120 @@ export class McpServer extends McpServerBase {
120
133
  resolve();
121
134
  });
122
135
  });
123
- const shutdown = () => {
124
- // Drop both handlers so a second signal falls through to Node's default
125
- // (force-quit on a second Ctrl+C while drain is hanging).
126
- process.off("SIGTERM", shutdown);
127
- process.off("SIGINT", shutdown);
128
- httpServer.close(() => process.exit(0));
129
- // Force exit if connections don't drain in time so the port is still
130
- // released promptly (e.g. for nodemon restarts).
131
- setTimeout(() => process.exit(0), 3000).unref();
132
- };
133
- process.on("SIGTERM", shutdown);
134
- process.on("SIGINT", shutdown);
135
136
  }
136
- registerWidget(name, resourceConfig, toolConfig, toolCallback) {
137
- const userMeta = resourceConfig._meta;
138
- const toolMeta = {
139
- ...toolConfig._meta,
140
- };
141
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("apps-sdk")) {
142
- const widgetConfig = {
137
+ enforceOneToolPerView(component, toolName) {
138
+ const existingTool = this.claimedViews.get(component);
139
+ if (existingTool) {
140
+ throw new Error(`skybridge: view "${component}" is already used by tool "${existingTool}". Tool "${toolName}" cannot also reference it — each view backs exactly one tool.`);
141
+ }
142
+ this.claimedViews.set(component, toolName);
143
+ }
144
+ registerViewResources(toolName, view, toolMeta) {
145
+ const hosts = view.hosts ?? ["apps-sdk", "mcp-app"];
146
+ if (hosts.includes("apps-sdk")) {
147
+ const viewResource = {
143
148
  hostType: "apps-sdk",
144
- uri: `ui://widgets/apps-sdk/${name}.html`,
149
+ uri: `ui://widgets/apps-sdk/${view.component}.html`,
145
150
  mimeType: "text/html+skybridge",
146
151
  buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
147
- const userUi = userMeta?.ui;
148
- const userCsp = userUi?.csp;
149
152
  const defaults = {
150
153
  "openai/widgetCSP": {
151
154
  resource_domains: resourceDomains,
152
155
  connect_domains: connectDomains,
153
156
  },
154
157
  "openai/widgetDomain": domain,
155
- "openai/widgetDescription": resourceConfig.description,
158
+ "openai/widgetDescription": view.description,
156
159
  };
157
- const fromUi = {
160
+ const fromView = {
158
161
  "openai/widgetCSP": {
159
- resource_domains: userCsp?.resourceDomains,
160
- connect_domains: userCsp?.connectDomains,
161
- frame_domains: userCsp?.frameDomains,
162
- redirect_domains: userCsp?.redirectDomains,
162
+ resource_domains: view.csp?.resourceDomains,
163
+ connect_domains: view.csp?.connectDomains,
164
+ frame_domains: view.csp?.frameDomains,
165
+ redirect_domains: view.csp?.redirectDomains,
163
166
  },
164
- "openai/widgetDomain": userUi?.domain,
165
- "openai/widgetPrefersBorder": userUi?.prefersBorder,
167
+ "openai/widgetDomain": view.domain,
168
+ "openai/widgetPrefersBorder": view.prefersBorder,
166
169
  };
167
- const directOpenaiKeys = Object.fromEntries(Object.entries(userMeta ?? {}).filter(([key]) => key.startsWith("openai/")));
168
- return mergeWithUnion(mergeWithUnion(mergeWithUnion(defaults, fromUi), directOpenaiKeys), { "openai/widgetDomain": overrides.domain });
170
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
171
+ "openai/widgetDomain": overrides.domain,
172
+ });
173
+ if (view._meta) {
174
+ return { ...base, ...view._meta };
175
+ }
176
+ return base;
169
177
  },
170
178
  };
171
- this.registerWidgetResource({
172
- name,
173
- widgetConfig,
174
- resourceConfig,
179
+ this.registerViewResource({
180
+ name: toolName,
181
+ viewResource,
182
+ view,
175
183
  });
176
- toolMeta["openai/outputTemplate"] = widgetConfig.uri;
184
+ toolMeta["openai/outputTemplate"] = viewResource.uri;
177
185
  }
178
- if (!resourceConfig.hosts || resourceConfig.hosts.includes("mcp-app")) {
179
- const widgetConfig = {
186
+ if (hosts.includes("mcp-app")) {
187
+ const viewResource = {
180
188
  hostType: "mcp-app",
181
- uri: `ui://widgets/ext-apps/${name}.html`,
189
+ uri: `ui://widgets/ext-apps/${view.component}.html`,
182
190
  mimeType: "text/html;profile=mcp-app",
183
- buildContentMeta: ({ resourceDomains, connectDomains, domain }, overrides) => {
191
+ buildContentMeta: ({ resourceDomains, connectDomains, domain, baseUriDomains }, overrides) => {
184
192
  const defaults = {
185
193
  ui: {
186
194
  csp: {
187
195
  resourceDomains,
188
196
  connectDomains,
197
+ baseUriDomains,
189
198
  },
190
199
  domain,
191
200
  },
192
201
  };
193
- return mergeWithUnion(defaults, {
194
- ui: { ...userMeta?.ui, ...overrides },
202
+ const fromView = {
203
+ ui: {
204
+ ...(view.description && { description: view.description }),
205
+ ...(view.prefersBorder !== undefined && {
206
+ prefersBorder: view.prefersBorder,
207
+ }),
208
+ ...(view.domain && { domain: view.domain }),
209
+ csp: {
210
+ ...(view.csp?.resourceDomains && {
211
+ resourceDomains: view.csp.resourceDomains,
212
+ }),
213
+ ...(view.csp?.connectDomains && {
214
+ connectDomains: view.csp.connectDomains,
215
+ }),
216
+ ...(view.csp?.frameDomains && {
217
+ frameDomains: view.csp.frameDomains,
218
+ }),
219
+ ...(view.csp?.baseUriDomains && {
220
+ baseUriDomains: view.csp.baseUriDomains,
221
+ }),
222
+ ...(view.csp?.redirectDomains && {
223
+ redirectDomains: view.csp.redirectDomains,
224
+ }),
225
+ },
226
+ },
227
+ };
228
+ const base = mergeWithUnion(mergeWithUnion(defaults, fromView), {
229
+ ui: overrides,
195
230
  });
231
+ if (view._meta) {
232
+ return { ...base, ...view._meta };
233
+ }
234
+ return base;
196
235
  },
197
236
  };
198
- this.registerWidgetResource({
199
- name,
200
- widgetConfig,
201
- resourceConfig,
237
+ this.registerViewResource({
238
+ name: toolName,
239
+ viewResource,
240
+ view,
202
241
  });
203
242
  // @ts-expect-error - For backwards compatibility with Claude current implementation of the specs
204
- toolMeta["ui/resourceUri"] = widgetConfig.uri;
205
- toolMeta.ui = { resourceUri: widgetConfig.uri };
243
+ toolMeta["ui/resourceUri"] = viewResource.uri;
244
+ toolMeta.ui = { resourceUri: viewResource.uri };
206
245
  }
207
- const wrappedToolCallback = async (args, extra) => {
208
- const result = await toolCallback(args, extra);
209
- return {
210
- ...result,
211
- _meta: {
212
- ...result._meta,
213
- viewUUID: crypto.randomUUID(),
214
- },
215
- };
216
- };
217
- this.registerTool(name, {
218
- ...toolConfig,
219
- _meta: toolMeta,
220
- }, wrappedToolCallback);
221
- return this;
222
246
  }
223
- registerTool(name, config, cb) {
224
- super.registerTool(name, config, cb);
225
- return this;
226
- }
227
- registerWidgetResource({ name, widgetConfig, resourceConfig, }) {
228
- const { hostType, uri: widgetUri, mimeType, buildContentMeta, } = widgetConfig;
229
- this.registerResource(name, widgetUri, { ...resourceConfig, _meta: resourceConfig._meta }, async (uri, extra) => {
247
+ registerViewResource({ name, viewResource, view, }) {
248
+ const { hostType, uri: viewUri, mimeType, buildContentMeta } = viewResource;
249
+ this.registerResource(name, viewUri, { description: view.description }, async (uri, extra) => {
230
250
  const isProduction = process.env.NODE_ENV === "production";
231
251
  const isClaude = extra?.requestInfo?.headers?.["user-agent"] === "Claude-User";
232
252
  const headers = extra?.requestInfo?.headers || {};
@@ -259,13 +279,13 @@ export class McpServer extends McpServerBase {
259
279
  ? templateHelper.renderProduction({
260
280
  hostType,
261
281
  serverUrl,
262
- widgetFile: this.lookupDistFileWithIndexFallback(`src/widgets/${name}`),
263
- styleFile: this.lookupDistFile("style.css"),
282
+ viewFile: this.lookupViewFile(view.component),
283
+ styleFile: this.lookupDistFile("style.css") ?? "",
264
284
  })
265
285
  : templateHelper.renderDevelopment({
266
286
  hostType,
267
287
  serverUrl,
268
- widgetName: name,
288
+ viewName: view.component,
269
289
  });
270
290
  const connectDomains = [serverUrl];
271
291
  if (!isProduction) {
@@ -300,18 +320,54 @@ export class McpServer extends McpServerBase {
300
320
  };
301
321
  });
302
322
  }
303
- lookupDistFile(key) {
323
+ wrapHandler(cb, { attachViewUUID }) {
324
+ return async (args, extra) => {
325
+ const result = await cb(args, extra);
326
+ return {
327
+ ...result,
328
+ content: normalizeContent(result.content),
329
+ ...(attachViewUUID && {
330
+ _meta: {
331
+ ...result._meta,
332
+ viewUUID: crypto.randomUUID(),
333
+ },
334
+ }),
335
+ };
336
+ };
337
+ }
338
+ lookupViewFile(viewName) {
304
339
  const manifest = this.readManifest();
305
- return manifest[key]?.file;
340
+ for (const entry of Object.values(manifest)) {
341
+ if (entry?.isEntry && entry.name === viewName && entry.file) {
342
+ return entry.file;
343
+ }
344
+ }
345
+ throw new Error(`View "${viewName}" not found in Vite manifest. Did the build complete successfully? Look for an entry with name "${viewName}" in dist/assets/.vite/manifest.json.`);
306
346
  }
307
- lookupDistFileWithIndexFallback(basePath) {
347
+ lookupDistFile(key) {
308
348
  const manifest = this.readManifest();
309
- const flatFileKey = `${basePath}.tsx`;
310
- const indexFileKey = `${basePath}/index.tsx`;
311
- return manifest[flatFileKey]?.file ?? manifest[indexFileKey]?.file;
349
+ return manifest[key]?.file;
312
350
  }
313
351
  readManifest() {
314
352
  return JSON.parse(readFileSync(path.join(process.cwd(), "dist", "assets", ".vite", "manifest.json"), "utf-8"));
315
353
  }
354
+ registerTool(...args) {
355
+ const baseFn = McpServerBase.prototype.registerTool;
356
+ if (typeof args[0] === "string") {
357
+ baseFn.call(this, args[0], args[1], args[2]);
358
+ return this;
359
+ }
360
+ const config = args[0];
361
+ const cb = args[1];
362
+ const { name, view, _meta: userToolMeta, ...toolFields } = config;
363
+ const toolMeta = { ...userToolMeta };
364
+ if (view) {
365
+ this.enforceOneToolPerView(view.component, name);
366
+ this.registerViewResources(name, view, toolMeta);
367
+ }
368
+ const wrappedCb = this.wrapHandler(cb, { attachViewUUID: Boolean(view) });
369
+ baseFn.call(this, name, { ...toolFields, _meta: toolMeta }, wrappedCb);
370
+ return this;
371
+ }
316
372
  }
317
373
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import type { WidgetHostType } from "./server.js";
1
+ import type { ViewHostType } from "./server.js";
2
2
  declare class TemplateHelper {
3
3
  private templateCache;
4
4
  private loadTemplate;
5
5
  renderProduction(data: {
6
- hostType: WidgetHostType;
6
+ hostType: ViewHostType;
7
7
  serverUrl: string;
8
- widgetFile: string;
8
+ viewFile: string;
9
9
  styleFile: string;
10
10
  }): string;
11
11
  renderDevelopment(data: {
12
- hostType: WidgetHostType;
12
+ hostType: ViewHostType;
13
13
  serverUrl: string;
14
- widgetName: string;
14
+ viewName: string;
15
15
  }): string;
16
16
  }
17
17
  export declare const templateHelper: TemplateHelper;
@@ -7,6 +7,6 @@
7
7
  </script>
8
8
  <script type="module" src="{{serverUrl}}/@vite/client"></script>
9
9
  <div id="root"></div>
10
- <script type="module" id="dev-widget-entry">
11
- import('{{serverUrl}}/src/widgets/{{widgetName}}');
10
+ <script type="module" id="dev-view-entry">
11
+ import('{{serverUrl}}/_skybridge/view/{{viewName}}');
12
12
  </script>
@@ -1,6 +1,6 @@
1
1
  <script type="module">window.skybridge = { hostType: "{{hostType}}", serverUrl: "{{serverUrl}}" };</script>
2
2
  <div id="root"></div>
3
3
  <script type="module">
4
- import('{{serverUrl}}/assets/{{widgetFile}}');
4
+ import('{{serverUrl}}/assets/{{viewFile}}');
5
5
  </script>
6
6
  <link rel="stylesheet" crossorigin href="{{serverUrl}}/assets/{{styleFile}}" />
@@ -0,0 +1,14 @@
1
+ import type http from "node:http";
2
+ import { type Router } from "express";
3
+ /**
4
+ * Vite dev-server middleware for view assets.
5
+ *
6
+ * MUST be mounted at the Express app root so Vite can intercept
7
+ * `/@vite/client`, `/@react-refresh`, and `/_skybridge/view/...` imports:
8
+ *
9
+ * const app = express();
10
+ * if (env.NODE_ENV !== "production") {
11
+ * app.use(await viewsDevServer(httpServer));
12
+ * }
13
+ */
14
+ export declare const viewsDevServer: (httpServer: http.Server) => Promise<Router>;