skybridge 0.0.0-dev.50d83cf → 0.0.0-dev.51c9c19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/src/server/server.d.ts +19 -10
- package/dist/src/server/server.js +36 -33
- package/dist/src/server/server.js.map +1 -1
- package/dist/src/test/utils.d.ts +11 -0
- package/dist/src/test/utils.js +20 -0
- package/dist/src/test/utils.js.map +1 -1
- package/dist/src/test/widget.test.js +33 -11
- package/dist/src/test/widget.test.js.map +1 -1
- package/dist/src/web/generate-helpers.test-d.js +27 -1
- package/dist/src/web/generate-helpers.test-d.js.map +1 -1
- package/dist/src/web/hooks/use-mcp-app-bridge.d.ts +22 -0
- package/dist/src/web/hooks/use-mcp-app-bridge.js +105 -0
- package/dist/src/web/hooks/use-mcp-app-bridge.js.map +1 -0
- package/dist/src/web/hooks/use-mcp-app-bridge.test.d.ts +1 -0
- package/dist/src/web/hooks/use-mcp-app-bridge.test.js +46 -0
- package/dist/src/web/hooks/use-mcp-app-bridge.test.js.map +1 -0
- package/dist/src/web/proxy.js +5 -0
- package/dist/src/web/proxy.js.map +1 -1
- package/dist/src/web/types/ext-apps.d.ts +421 -0
- package/dist/src/web/types/ext-apps.js +19 -0
- package/dist/src/web/types/ext-apps.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,14 +9,19 @@ export type ToolDef<TInput = unknown, TOutput = unknown, TResponseMetadata = unk
|
|
|
9
9
|
};
|
|
10
10
|
type McpServerOriginalResourceConfig = Omit<Resource, "uri" | "name" | "mimeType">;
|
|
11
11
|
type McpServerOriginalToolConfig = Omit<Parameters<typeof McpServerBase.prototype.registerTool<ZodRawShapeCompat, ZodRawShapeCompat>>[1], "inputSchema" | "outputSchema">;
|
|
12
|
+
type Simplify<T> = {
|
|
13
|
+
[K in keyof T]: T[K];
|
|
14
|
+
};
|
|
12
15
|
type ExtractStructuredContent<T> = T extends {
|
|
13
16
|
structuredContent: infer SC;
|
|
14
|
-
} ? SC : never;
|
|
15
|
-
type ExtractMeta<T> = Extract<T, {
|
|
17
|
+
} ? Simplify<SC> : never;
|
|
18
|
+
type ExtractMeta<T> = [Extract<T, {
|
|
19
|
+
_meta: unknown;
|
|
20
|
+
}>] extends [never] ? unknown : Extract<T, {
|
|
16
21
|
_meta: unknown;
|
|
17
22
|
}> extends {
|
|
18
23
|
_meta: infer M;
|
|
19
|
-
} ? M : unknown;
|
|
24
|
+
} ? Simplify<M> : unknown;
|
|
20
25
|
/**
|
|
21
26
|
* Type-level marker interface for cross-package type inference.
|
|
22
27
|
* This enables TypeScript to infer tool types across package boundaries
|
|
@@ -29,9 +34,6 @@ type ExtractMeta<T> = Extract<T, {
|
|
|
29
34
|
export interface McpServerTypes<TTools extends Record<string, ToolDef>> {
|
|
30
35
|
readonly tools: TTools;
|
|
31
36
|
}
|
|
32
|
-
type Simplify<T> = {
|
|
33
|
-
[K in keyof T]: T[K];
|
|
34
|
-
};
|
|
35
37
|
type ShapeOutput<Shape extends ZodRawShapeCompat> = Simplify<{
|
|
36
38
|
[K in keyof Shape as undefined extends SchemaOutput<Shape[K]> ? never : K]: SchemaOutput<Shape[K]>;
|
|
37
39
|
} & {
|
|
@@ -48,17 +50,24 @@ type ToolConfig<TInput extends ZodRawShapeCompat | AnySchema> = {
|
|
|
48
50
|
annotations?: ToolAnnotations;
|
|
49
51
|
_meta?: Record<string, unknown>;
|
|
50
52
|
};
|
|
51
|
-
type ToolHandler<TInput extends ZodRawShapeCompat, TReturn extends
|
|
53
|
+
type ToolHandler<TInput extends ZodRawShapeCompat, TReturn extends {
|
|
54
|
+
content: CallToolResult["content"];
|
|
55
|
+
} = CallToolResult> = (args: ShapeOutput<TInput>, extra: RequestHandlerExtra<ServerRequest, ServerNotification>) => TReturn | Promise<TReturn>;
|
|
52
56
|
export declare class McpServer<TTools extends Record<string, ToolDef> = Record<never, ToolDef>> extends McpServerBase {
|
|
53
57
|
readonly $types: McpServerTypes<TTools>;
|
|
54
|
-
registerWidget<TName extends string, TInput extends ZodRawShapeCompat, TReturn extends
|
|
58
|
+
registerWidget<TName extends string, TInput extends ZodRawShapeCompat, TReturn extends {
|
|
59
|
+
content: CallToolResult["content"];
|
|
60
|
+
}>(name: TName, resourceConfig: McpServerOriginalResourceConfig, toolConfig: McpServerOriginalToolConfig & {
|
|
55
61
|
inputSchema?: TInput;
|
|
56
62
|
outputSchema?: ZodRawShapeCompat | AnySchema;
|
|
57
63
|
}, toolCallback: ToolHandler<TInput, TReturn>): AddTool<TTools, TName, TInput, ExtractStructuredContent<TReturn>, ExtractMeta<TReturn>>;
|
|
58
|
-
registerTool<TName extends string, InputArgs extends ZodRawShapeCompat, TReturn extends
|
|
64
|
+
registerTool<TName extends string, InputArgs extends ZodRawShapeCompat, TReturn extends {
|
|
65
|
+
content: CallToolResult["content"];
|
|
66
|
+
}>(name: TName, config: ToolConfig<InputArgs>, cb: ToolHandler<InputArgs, TReturn>): AddTool<TTools, TName, InputArgs, ExtractStructuredContent<TReturn>, ExtractMeta<TReturn>>;
|
|
59
67
|
registerTool<InputArgs extends ZodRawShapeCompat>(name: string, config: ToolConfig<InputArgs>, cb: ToolHandler<InputArgs>): RegisteredTool;
|
|
68
|
+
private registerWidgetResource;
|
|
60
69
|
private lookupDistFile;
|
|
61
|
-
private
|
|
70
|
+
private lookupDistFileWithIndexFallback;
|
|
62
71
|
private readManifest;
|
|
63
72
|
}
|
|
64
73
|
export {};
|
|
@@ -4,45 +4,33 @@ import { McpServer as McpServerBase, } from "@modelcontextprotocol/sdk/server/mc
|
|
|
4
4
|
import { templateHelper } from "./templateHelper.js";
|
|
5
5
|
export class McpServer extends McpServerBase {
|
|
6
6
|
registerWidget(name, resourceConfig, toolConfig, toolCallback) {
|
|
7
|
-
const uri = `ui://widgets/${name}.html`;
|
|
8
7
|
const resourceMetadata = {
|
|
9
8
|
...(resourceConfig._meta ?? {}),
|
|
10
9
|
};
|
|
11
10
|
if (toolConfig.description !== undefined) {
|
|
12
11
|
resourceMetadata["openai/widgetDescription"] = toolConfig.description;
|
|
13
12
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
widgetName: name,
|
|
31
|
-
});
|
|
32
|
-
return {
|
|
33
|
-
contents: [
|
|
34
|
-
{
|
|
35
|
-
uri,
|
|
36
|
-
mimeType: "text/html+skybridge",
|
|
37
|
-
text: html,
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
};
|
|
13
|
+
const appsSdkResourceConfig = {
|
|
14
|
+
uri: `ui://widgets/apps-sdk/${name}.html`,
|
|
15
|
+
mimeType: "text/html+skybridge",
|
|
16
|
+
};
|
|
17
|
+
const extAppsResourceConfig = {
|
|
18
|
+
uri: `ui://widgets/ext-apps/${name}.html`,
|
|
19
|
+
mimeType: "text/html;profile=mcp-app",
|
|
20
|
+
};
|
|
21
|
+
[appsSdkResourceConfig, extAppsResourceConfig].forEach(({ uri, mimeType }) => {
|
|
22
|
+
this.registerWidgetResource({
|
|
23
|
+
name,
|
|
24
|
+
widgetUri: uri,
|
|
25
|
+
mimeType,
|
|
26
|
+
resourceConfig,
|
|
27
|
+
resourceMetadata,
|
|
28
|
+
});
|
|
41
29
|
});
|
|
42
30
|
const toolMeta = {
|
|
43
31
|
...toolConfig._meta,
|
|
44
|
-
"openai/outputTemplate": uri,
|
|
45
|
-
"ui/resourceUri": uri,
|
|
32
|
+
"openai/outputTemplate": appsSdkResourceConfig.uri,
|
|
33
|
+
// "ui/resourceUri": extAppsResourceConfig.uri,
|
|
46
34
|
};
|
|
47
35
|
this.registerTool(name, {
|
|
48
36
|
...toolConfig,
|
|
@@ -54,15 +42,30 @@ export class McpServer extends McpServerBase {
|
|
|
54
42
|
super.registerTool(name, config, cb);
|
|
55
43
|
return this;
|
|
56
44
|
}
|
|
45
|
+
registerWidgetResource({ name, widgetUri, mimeType, resourceConfig, resourceMetadata, }) {
|
|
46
|
+
this.registerResource(name, widgetUri, { ...resourceConfig, _meta: resourceMetadata }, async (uri, extra) => {
|
|
47
|
+
const serverUrl = process.env.NODE_ENV === "production"
|
|
48
|
+
? `https://${extra?.requestInfo?.headers?.["x-forwarded-host"] ?? extra?.requestInfo?.headers?.host}`
|
|
49
|
+
: `http://localhost:3000`;
|
|
50
|
+
const html = process.env.NODE_ENV === "production"
|
|
51
|
+
? templateHelper.renderProduction({
|
|
52
|
+
serverUrl,
|
|
53
|
+
widgetFile: this.lookupDistFileWithIndexFallback(`src/widgets/${name}`),
|
|
54
|
+
styleFile: this.lookupDistFile("style.css"),
|
|
55
|
+
})
|
|
56
|
+
: templateHelper.renderDevelopment({ serverUrl, widgetName: name });
|
|
57
|
+
return { contents: [{ uri: uri.href, mimeType, text: html }] };
|
|
58
|
+
});
|
|
59
|
+
}
|
|
57
60
|
lookupDistFile(key) {
|
|
58
61
|
const manifest = this.readManifest();
|
|
59
62
|
return manifest[key]?.file;
|
|
60
63
|
}
|
|
61
|
-
|
|
64
|
+
lookupDistFileWithIndexFallback(basePath) {
|
|
62
65
|
const manifest = this.readManifest();
|
|
63
66
|
const flatFileKey = `${basePath}.tsx`;
|
|
64
|
-
const
|
|
65
|
-
return manifest[flatFileKey]?.file ?? manifest[
|
|
67
|
+
const indexFileKey = `${basePath}/index.tsx`;
|
|
68
|
+
return manifest[flatFileKey]?.file ?? manifest[indexFileKey]?.file;
|
|
66
69
|
}
|
|
67
70
|
readManifest() {
|
|
68
71
|
return JSON.parse(readFileSync(path.join(process.cwd(), "dist", "assets", ".vite", "manifest.json"), "utf-8"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,SAAS,IAAI,aAAa,GAG3B,MAAM,yCAAyC,CAAC;AAcjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"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"}
|
package/dist/src/test/utils.d.ts
CHANGED
|
@@ -104,6 +104,17 @@ export declare function createMinimalTestServer(): McpServer<Record<never, impor
|
|
|
104
104
|
}[];
|
|
105
105
|
}, unknown>;
|
|
106
106
|
}>;
|
|
107
|
+
export declare function createInterfaceTestServer(): McpServer<Record<never, import("../server/server.js").ToolDef<unknown, unknown, unknown>> & {
|
|
108
|
+
"interface-widget": import("../server/server.js").ToolDef<{
|
|
109
|
+
id: string;
|
|
110
|
+
}, {
|
|
111
|
+
itemName: string;
|
|
112
|
+
quantity: number;
|
|
113
|
+
}, {
|
|
114
|
+
processedBy: string;
|
|
115
|
+
version: number;
|
|
116
|
+
}>;
|
|
117
|
+
}>;
|
|
107
118
|
/**
|
|
108
119
|
* Mock extra parameter for resource callback
|
|
109
120
|
*/
|
package/dist/src/test/utils.js
CHANGED
|
@@ -197,6 +197,26 @@ export function createMinimalTestServer() {
|
|
|
197
197
|
};
|
|
198
198
|
});
|
|
199
199
|
}
|
|
200
|
+
export function createInterfaceTestServer() {
|
|
201
|
+
return new McpServer({ name: "interface-test-app", version: "1.0.0" }, {}).registerWidget("interface-widget", {}, {
|
|
202
|
+
description: "Widget with interface-typed output",
|
|
203
|
+
inputSchema: {
|
|
204
|
+
id: z.string(),
|
|
205
|
+
},
|
|
206
|
+
}, async ({ id }) => {
|
|
207
|
+
return {
|
|
208
|
+
content: [{ type: "text", text: `Item ${id}` }],
|
|
209
|
+
structuredContent: {
|
|
210
|
+
itemName: "Test Item",
|
|
211
|
+
quantity: 42,
|
|
212
|
+
},
|
|
213
|
+
_meta: {
|
|
214
|
+
processedBy: "test",
|
|
215
|
+
version: 1,
|
|
216
|
+
},
|
|
217
|
+
};
|
|
218
|
+
});
|
|
219
|
+
}
|
|
200
220
|
/**
|
|
201
221
|
* Mock extra parameter for resource callback
|
|
202
222
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/test/utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/test/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,17 +43,17 @@ describe("McpServer.registerWidget", () => {
|
|
|
43
43
|
const mockToolConfig = { description: "Test tool" };
|
|
44
44
|
server.registerWidget("my-widget", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
|
|
45
45
|
// Get the resource callback function
|
|
46
|
-
const
|
|
46
|
+
const appsSdkResourceCallback = mockRegisterResource.mock
|
|
47
47
|
.calls[0]?.[3];
|
|
48
|
-
expect(
|
|
48
|
+
expect(appsSdkResourceCallback).toBeDefined();
|
|
49
49
|
const serverUrl = "http://localhost:3000";
|
|
50
50
|
const mockExtra = createMockExtra("__not_used__");
|
|
51
|
-
const result = await
|
|
51
|
+
const result = await appsSdkResourceCallback(new URL("ui://widgets/apps-sdk/my-widget.html"), mockExtra);
|
|
52
52
|
expect(mockRegisterTool).toHaveBeenCalled();
|
|
53
53
|
expect(result).toEqual({
|
|
54
54
|
contents: [
|
|
55
55
|
{
|
|
56
|
-
uri: "ui://widgets/my-widget.html",
|
|
56
|
+
uri: "ui://widgets/apps-sdk/my-widget.html",
|
|
57
57
|
mimeType: "text/html+skybridge",
|
|
58
58
|
text: expect.stringContaining('<div id="root"></div>'),
|
|
59
59
|
},
|
|
@@ -72,16 +72,16 @@ describe("McpServer.registerWidget", () => {
|
|
|
72
72
|
const mockToolConfig = { description: "Test tool" };
|
|
73
73
|
server.registerWidget("my-widget", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
|
|
74
74
|
// Get the resource callback function
|
|
75
|
-
const
|
|
75
|
+
const appsSdkResourceCallback = mockRegisterResource.mock
|
|
76
76
|
.calls[0]?.[3];
|
|
77
|
-
expect(
|
|
77
|
+
expect(appsSdkResourceCallback).toBeDefined();
|
|
78
78
|
const serverUrl = "https://myapp.com";
|
|
79
79
|
const mockExtra = createMockExtra(serverUrl);
|
|
80
|
-
const result = await
|
|
80
|
+
const result = await appsSdkResourceCallback(new URL("ui://widgets/apps-sdk/my-widget.html"), mockExtra);
|
|
81
81
|
expect(result).toEqual({
|
|
82
82
|
contents: [
|
|
83
83
|
{
|
|
84
|
-
uri: "ui://widgets/my-widget.html",
|
|
84
|
+
uri: "ui://widgets/apps-sdk/my-widget.html",
|
|
85
85
|
mimeType: "text/html+skybridge",
|
|
86
86
|
text: expect.stringContaining('<div id="root"></div>'),
|
|
87
87
|
},
|
|
@@ -99,14 +99,36 @@ describe("McpServer.registerWidget", () => {
|
|
|
99
99
|
const mockRegisterResourceConfig = { description: "Folder widget" };
|
|
100
100
|
const mockToolConfig = { description: "Folder tool" };
|
|
101
101
|
server.registerWidget("folder-widget", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
|
|
102
|
-
const
|
|
102
|
+
const appsSdkResourceCallback = mockRegisterResource.mock
|
|
103
103
|
.calls[0]?.[3];
|
|
104
|
-
expect(
|
|
104
|
+
expect(appsSdkResourceCallback).toBeDefined();
|
|
105
105
|
const serverUrl = "https://myapp.com";
|
|
106
106
|
const mockExtra = createMockExtra(serverUrl);
|
|
107
|
-
const result = await
|
|
107
|
+
const result = await appsSdkResourceCallback(new URL("ui://widgets/apps-sdk/folder-widget.html"), mockExtra);
|
|
108
108
|
// Should resolve to folder-widget.js from the manifest entry "src/widgets/folder-widget/index.tsx"
|
|
109
109
|
expect(result.contents[0]?.text).toContain(`${serverUrl}/assets/folder-widget.js`);
|
|
110
110
|
});
|
|
111
|
+
it("should register resources for both apps-sdk and ext-apps formats", async () => {
|
|
112
|
+
const mockToolCallback = vi.fn();
|
|
113
|
+
const mockRegisterResourceConfig = { description: "Test widget" };
|
|
114
|
+
const mockToolConfig = { description: "Test tool" };
|
|
115
|
+
server.registerWidget("my-widget", mockRegisterResourceConfig, mockToolConfig, mockToolCallback);
|
|
116
|
+
expect(mockRegisterResource).toHaveBeenCalledTimes(2);
|
|
117
|
+
const [, appsSdkUri] = mockRegisterResource.mock.calls[0] ?? [];
|
|
118
|
+
expect(appsSdkUri).toBe("ui://widgets/apps-sdk/my-widget.html");
|
|
119
|
+
const extAppsResourceCallback = mockRegisterResource.mock
|
|
120
|
+
.calls[1]?.[3];
|
|
121
|
+
expect(extAppsResourceCallback).toBeDefined();
|
|
122
|
+
const extAppsResult = await extAppsResourceCallback(new URL("ui://widgets/ext-apps/my-widget.html"), createMockExtra("__not_used__"));
|
|
123
|
+
expect(extAppsResult).toEqual({
|
|
124
|
+
contents: [
|
|
125
|
+
{
|
|
126
|
+
uri: "ui://widgets/ext-apps/my-widget.html",
|
|
127
|
+
mimeType: "text/html;profile=mcp-app",
|
|
128
|
+
text: expect.stringContaining('<div id="root"></div>'),
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
});
|
|
132
|
+
});
|
|
111
133
|
});
|
|
112
134
|
//# sourceMappingURL=widget.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.test.js","sourceRoot":"","sources":["../../../src/test/widget.test.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EAEF,EAAE,GACH,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,MAAM,YAAY,GAAG;IACnB,2BAA2B,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IACrD,qCAAqC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACnE,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;CACnC,CAAC;AAEF,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAA2B,SAAS,CAAC,CAAC;IAC1E,MAAM,gBAAgB,GAAG,CACvB,IAA+C,EAC/C,GAAG,IAAe,EACsB,EAAE;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAEjC,CAAC;QACJ,CAAC;QACD,0FAA0F;QAC1F,qFAAqF;QACrF,0EAA0E;QAC1E,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAA+B,CAAC;IAE3E,OAAO;QACL,YAAY;QACZ,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,MAAiB,CAAC;IACtB,IAAI,oBAAiE,CAAC;IACtE,IAAI,gBAAyD,CAAC;IAE9D,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE;YACjD,mBAAmB,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,UAAU,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QAExC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,qCAAqC;QACrC,MAAM,
|
|
1
|
+
{"version":3,"file":"widget.test.js","sourceRoot":"","sources":["../../../src/test/widget.test.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EAEF,EAAE,GACH,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,MAAM,YAAY,GAAG;IACnB,2BAA2B,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;IACrD,qCAAqC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACnE,WAAW,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;CACnC,CAAC;AAEF,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAA2B,SAAS,CAAC,CAAC;IAC1E,MAAM,gBAAgB,GAAG,CACvB,IAA+C,EAC/C,GAAG,IAAe,EACsB,EAAE;QAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAEjC,CAAC;QACJ,CAAC;QACD,0FAA0F;QAC1F,qFAAqF;QACrF,0EAA0E;QAC1E,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAA+B,CAAC;IAE3E,OAAO;QACL,YAAY;QACZ,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,MAAiB,CAAC;IACtB,IAAI,oBAAiE,CAAC;IACtE,IAAI,gBAAyD,CAAC;IAE9D,UAAU,CAAC,GAAG,EAAE;QACd,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,gBAAgB,EAAE;YACjD,mBAAmB,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,YAAY,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,UAAU,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QAExC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,qCAAqC;QACrC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,SAAS,GAAG,uBAAuB,CAAC;QAC1C,MAAM,SAAS,GAAG,eAAe,CAC/B,cAAc,CACsD,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;iBACvD;aACF;SACF,CAAC,CAAC;QAEH,qCAAqC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,iBAAiB,CAAC,CAAC;QAC1E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,eAAe,CAAC,CAAC;QACxE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,wBAAwB,CACrC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAC5C,GAAG,SAAS,4BAA4B,CACzC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,qCAAqC;QACrC,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACtC,MAAM,SAAS,GAAG,eAAe,CAC/B,SAAS,CAC2D,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,qBAAqB;oBAC/B,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;iBACvD;aACF;SACF,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAC5C,GAAG,SAAS,gBAAgB,CAC7B,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,SAAS,cAAc,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,sBAAsB,CACnC,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,mBAAmB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QAEvC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;QACpE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAEtD,MAAM,CAAC,cAAc,CACnB,eAAe,EACf,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,SAAS,GAAG,mBAAmB,CAAC;QACtC,MAAM,SAAS,GAAG,eAAe,CAC/B,SAAS,CAC2D,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAC1C,IAAI,GAAG,CAAC,0CAA0C,CAAC,EACnD,SAAS,CACV,CAAC;QAEF,mGAAmG;QACnG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CACxC,GAAG,SAAS,0BAA0B,CACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,0BAA0B,GAAG,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAClE,MAAM,cAAc,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;QAEpD,MAAM,CAAC,cAAc,CACnB,WAAW,EACX,0BAA0B,EAC1B,cAAc,EACd,gBAAgB,CACjB,CAAC;QAEF,MAAM,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAEtD,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAEhE,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,IAAI;aACtD,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAKb,CAAC;QACH,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE,CAAC;QAE9C,MAAM,aAAa,GAAG,MAAM,uBAAuB,CACjD,IAAI,GAAG,CAAC,sCAAsC,CAAC,EAC/C,eAAe,CAAC,cAAc,CAG7B,CACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;YAC5B,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sCAAsC;oBAC3C,QAAQ,EAAE,2BAA2B;oBACrC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;iBACvD;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { expectTypeOf, test } from "vitest";
|
|
2
|
-
import { createTestServer } from "../test/utils.js";
|
|
2
|
+
import { createInterfaceTestServer, createTestServer } from "../test/utils.js";
|
|
3
3
|
import { generateHelpers } from "./generate-helpers.js";
|
|
4
4
|
const server = createTestServer();
|
|
5
|
+
const interfaceServer = createInterfaceTestServer();
|
|
5
6
|
test("InferTools extracts the tool registry type (widgets + registerTool)", () => {
|
|
6
7
|
expectTypeOf().toHaveProperty("search-voyage");
|
|
7
8
|
expectTypeOf().toHaveProperty("get-trip-details");
|
|
@@ -177,4 +178,29 @@ test("useToolInfo infers responseMetadata type from generateHelpers", () => {
|
|
|
177
178
|
test("ToolResponseMetadata extracts _meta from mixed return paths", () => {
|
|
178
179
|
expectTypeOf().toEqualTypeOf();
|
|
179
180
|
});
|
|
181
|
+
test("ToolOutput extracts correct type when using interface declaration", () => {
|
|
182
|
+
expectTypeOf().toHaveProperty("itemName");
|
|
183
|
+
expectTypeOf().toBeString();
|
|
184
|
+
expectTypeOf().toBeNumber();
|
|
185
|
+
});
|
|
186
|
+
test("ToolResponseMetadata extracts correct type when using interface declaration", () => {
|
|
187
|
+
expectTypeOf().toHaveProperty("processedBy");
|
|
188
|
+
expectTypeOf().toBeString();
|
|
189
|
+
expectTypeOf().toBeNumber();
|
|
190
|
+
});
|
|
191
|
+
test("generateHelpers works with interface-typed server", () => {
|
|
192
|
+
const { useCallTool, useToolInfo } = generateHelpers();
|
|
193
|
+
const { data } = useCallTool("interface-widget");
|
|
194
|
+
if (data) {
|
|
195
|
+
expectTypeOf(data.structuredContent.itemName).toBeString();
|
|
196
|
+
expectTypeOf(data.structuredContent.quantity).toBeNumber();
|
|
197
|
+
}
|
|
198
|
+
const toolInfo = useToolInfo();
|
|
199
|
+
if (toolInfo.isSuccess) {
|
|
200
|
+
expectTypeOf(toolInfo.output.itemName).toBeString();
|
|
201
|
+
expectTypeOf(toolInfo.output.quantity).toBeNumber();
|
|
202
|
+
expectTypeOf(toolInfo.responseMetadata.processedBy).toBeString();
|
|
203
|
+
expectTypeOf(toolInfo.responseMetadata.version).toBeNumber();
|
|
204
|
+
}
|
|
205
|
+
});
|
|
180
206
|
//# sourceMappingURL=generate-helpers.test-d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-helpers.test-d.js","sourceRoot":"","sources":["../../../src/web/generate-helpers.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAQ5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-helpers.test-d.js","sourceRoot":"","sources":["../../../src/web/generate-helpers.test-d.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type McpUiHostContext, type McpUiInitializeRequest } from "../types/ext-apps.js";
|
|
2
|
+
type McpAppInitializationOptions = Pick<McpUiInitializeRequest["params"], "appInfo">;
|
|
3
|
+
export declare class McpAppBridge {
|
|
4
|
+
context: McpUiHostContext | null;
|
|
5
|
+
private listeners;
|
|
6
|
+
private pendingRequests;
|
|
7
|
+
private nextId;
|
|
8
|
+
private initialized;
|
|
9
|
+
private appInitializationOptions;
|
|
10
|
+
constructor(options: McpAppInitializationOptions);
|
|
11
|
+
subscribe: (onChange: () => void) => () => boolean;
|
|
12
|
+
private request;
|
|
13
|
+
private emit;
|
|
14
|
+
private setContext;
|
|
15
|
+
private init;
|
|
16
|
+
private handleMessage;
|
|
17
|
+
private connect;
|
|
18
|
+
private notify;
|
|
19
|
+
}
|
|
20
|
+
export declare function getMcpHost(options?: Partial<McpAppInitializationOptions>): McpAppBridge;
|
|
21
|
+
export declare function useMcpAppBridge<K extends keyof McpUiHostContext>(key: K, options?: Partial<McpAppInitializationOptions>): McpUiHostContext[K] | undefined;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { useSyncExternalStore } from "react";
|
|
2
|
+
import { LATEST_PROTOCOL_VERSION, } from "../types/ext-apps.js";
|
|
3
|
+
export class McpAppBridge {
|
|
4
|
+
context = null;
|
|
5
|
+
listeners = new Set();
|
|
6
|
+
pendingRequests = new Map();
|
|
7
|
+
nextId = 1;
|
|
8
|
+
initialized;
|
|
9
|
+
appInitializationOptions;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.initialized = false;
|
|
12
|
+
this.appInitializationOptions = {
|
|
13
|
+
appInfo: options.appInfo,
|
|
14
|
+
appCapabilities: {},
|
|
15
|
+
protocolVersion: LATEST_PROTOCOL_VERSION,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
subscribe = (onChange) => {
|
|
19
|
+
this.listeners.add(onChange);
|
|
20
|
+
this.init();
|
|
21
|
+
return () => this.listeners.delete(onChange);
|
|
22
|
+
};
|
|
23
|
+
request({ method, params, }) {
|
|
24
|
+
const id = this.nextId++;
|
|
25
|
+
return new Promise((resolve, reject) => {
|
|
26
|
+
this.pendingRequests.set(id, {
|
|
27
|
+
resolve: resolve,
|
|
28
|
+
reject,
|
|
29
|
+
});
|
|
30
|
+
window.parent.postMessage({ jsonrpc: "2.0", id, method, params }, "*");
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
emit() {
|
|
34
|
+
this.listeners.forEach((l) => {
|
|
35
|
+
l();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
setContext(context) {
|
|
39
|
+
if (context !== undefined)
|
|
40
|
+
this.context = context;
|
|
41
|
+
this.emit();
|
|
42
|
+
}
|
|
43
|
+
init() {
|
|
44
|
+
if (this.initialized)
|
|
45
|
+
return;
|
|
46
|
+
this.initialized = true;
|
|
47
|
+
if (typeof window === "undefined" || window.parent === window) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
window.addEventListener("message", this.handleMessage);
|
|
51
|
+
this.connect();
|
|
52
|
+
}
|
|
53
|
+
handleMessage = (event) => {
|
|
54
|
+
const data = event.data;
|
|
55
|
+
if (data?.jsonrpc !== "2.0")
|
|
56
|
+
return;
|
|
57
|
+
if (data.id !== undefined && this.pendingRequests.has(data.id)) {
|
|
58
|
+
const request = this.pendingRequests.get(data.id);
|
|
59
|
+
if (request) {
|
|
60
|
+
this.pendingRequests.delete(data.id);
|
|
61
|
+
if (data.error) {
|
|
62
|
+
request.reject(new Error(data.error.message));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
request.resolve(data.result);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (data.method === "ui/notifications/host-context-changed") {
|
|
71
|
+
this.setContext({ ...this.context, ...data.params });
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
async connect() {
|
|
75
|
+
try {
|
|
76
|
+
const result = await this.request({
|
|
77
|
+
method: "ui/initialize",
|
|
78
|
+
params: this.appInitializationOptions,
|
|
79
|
+
});
|
|
80
|
+
this.setContext(result.hostContext);
|
|
81
|
+
this.notify({ method: "ui/notifications/initialized" });
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
console.error(err);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
notify(notification) {
|
|
88
|
+
window.parent.postMessage({ jsonrpc: "2.0", ...notification }, "*");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
let instance = null;
|
|
92
|
+
const defaultOptions = {
|
|
93
|
+
appInfo: { name: "skybridge-app", version: "0.0.1" },
|
|
94
|
+
};
|
|
95
|
+
export function getMcpHost(options) {
|
|
96
|
+
if (!instance) {
|
|
97
|
+
instance = new McpAppBridge({ ...defaultOptions, ...options });
|
|
98
|
+
}
|
|
99
|
+
return instance;
|
|
100
|
+
}
|
|
101
|
+
export function useMcpAppBridge(key, options) {
|
|
102
|
+
const host = getMcpHost(options);
|
|
103
|
+
return useSyncExternalStore(host.subscribe, () => host.context?.[key]);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=use-mcp-app-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mcp-app-bridge.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-mcp-app-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACL,uBAAuB,GAKxB,MAAM,sBAAsB,CAAC;AAY9B,MAAM,OAAO,YAAY;IAChB,OAAO,GAA4B,IAAI,CAAC;IACvC,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAClC,eAAe,GAAG,IAAI,GAAG,EAAmC,CAAC;IAC7D,MAAM,GAAG,CAAC,CAAC;IACX,WAAW,CAAU;IACrB,wBAAwB,CAAmC;IAEnE,YAAY,OAAoC;QAC9C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,wBAAwB,GAAG;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,eAAe,EAAE,EAAE;YACnB,eAAe,EAAE,uBAAuB;SACzC,CAAC;IACJ,CAAC;IAED,SAAS,GAAG,CAAC,QAAoB,EAAE,EAAE;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEM,OAAO,CAAoD,EACjE,MAAM,EACN,MAAM,GACJ;QACF,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC3B,OAAO,EAAE,OAAmC;gBAC5C,MAAM;aACP,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,IAAI;QACV,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC3B,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,OAAgC;QACjD,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;IAEO,aAAa,GAAG,CAAC,KAAmB,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,IAAI,EAAE,OAAO,KAAK,KAAK;YAAE,OAAO;QAEpC,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,uCAAuC,EAAE,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,CAAC;IAEM,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAG/B;gBACA,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,IAAI,CAAC,wBAAwB;aACtC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,YAA0C;QACvD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;CACF;AAED,IAAI,QAAQ,GAAwB,IAAI,CAAC;AAEzC,MAAM,cAAc,GAAgC;IAClD,OAAO,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE;CACrD,CAAC;AAEF,MAAM,UAAU,UAAU,CACxB,OAA8C;IAE9C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,YAAY,CAAC,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,GAAM,EACN,OAA8C;IAE9C,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAEjC,OAAO,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { act, renderHook, waitFor } from "@testing-library/react";
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
|
+
describe("useMcpAppBridge", () => {
|
|
4
|
+
let mockPostMessage;
|
|
5
|
+
const useHook = async () => {
|
|
6
|
+
const { useMcpAppBridge } = await import("./use-mcp-app-bridge.js");
|
|
7
|
+
return useMcpAppBridge;
|
|
8
|
+
};
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
vi.resetModules();
|
|
11
|
+
mockPostMessage = vi.fn();
|
|
12
|
+
Object.defineProperty(window, "parent", {
|
|
13
|
+
value: { postMessage: mockPostMessage },
|
|
14
|
+
writable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
afterEach(() => {
|
|
19
|
+
vi.clearAllMocks();
|
|
20
|
+
});
|
|
21
|
+
it("should return the theme value from host context", async () => {
|
|
22
|
+
const useMcpAppBridge = await useHook();
|
|
23
|
+
const { result } = renderHook(() => useMcpAppBridge("theme"));
|
|
24
|
+
const initCall = mockPostMessage.mock.calls.find((call) => call[0].method === "ui/initialize");
|
|
25
|
+
if (initCall) {
|
|
26
|
+
act(() => {
|
|
27
|
+
window.dispatchEvent(new MessageEvent("message", {
|
|
28
|
+
data: {
|
|
29
|
+
jsonrpc: "2.0",
|
|
30
|
+
id: initCall[0].id,
|
|
31
|
+
result: {
|
|
32
|
+
protocolVersion: "2025-06-18",
|
|
33
|
+
hostInfo: { name: "test-host", version: "1.0.0" },
|
|
34
|
+
hostCapabilities: {},
|
|
35
|
+
hostContext: { theme: "light" },
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
await waitFor(() => {
|
|
42
|
+
expect(result.current).toBe("light");
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=use-mcp-app-bridge.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mcp-app-bridge.test.js","sourceRoot":"","sources":["../../../../src/web/hooks/use-mcp-app-bridge.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,eAAyC,CAAC;IAE9C,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACpE,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,YAAY,EAAE,CAAC;QAClB,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE;YACtC,KAAK,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;YACvC,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,eAAe,GAAG,MAAM,OAAO,EAAE,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAC9C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,CAC7C,CAAC;QAEF,IAAI,QAAQ,EAAE,CAAC;YACb,GAAG,CAAC,GAAG,EAAE;gBACP,MAAM,CAAC,aAAa,CAClB,IAAI,YAAY,CAAC,SAAS,EAAE;oBAC1B,IAAI,EAAE;wBACJ,OAAO,EAAE,KAAK;wBACd,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;wBAClB,MAAM,EAAE;4BACN,eAAe,EAAE,YAAY;4BAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;4BACjD,gBAAgB,EAAE,EAAE;4BACpB,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;yBAChC;qBACF;iBACF,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,CAAC,GAAG,EAAE;YACjB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/src/web/proxy.js
CHANGED
|
@@ -9,6 +9,11 @@ export function installOpenAILoggingProxy() {
|
|
|
9
9
|
console.warn("[openai-proxy] window.openai not found, skipping proxy installation");
|
|
10
10
|
return;
|
|
11
11
|
}
|
|
12
|
+
const descriptor = Object.getOwnPropertyDescriptor(window, "openai");
|
|
13
|
+
if (descriptor?.configurable === false || descriptor?.writable === false) {
|
|
14
|
+
console.warn("[openai-proxy] window.openai is not configurable or writable, skipping proxy installation");
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
12
17
|
const originalOpenAI = window.openai;
|
|
13
18
|
const handler = {
|
|
14
19
|
get(target, prop, receiver) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/web/proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../src/web/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Apps Protocol Types (spec.types.ts)
|
|
3
|
+
*
|
|
4
|
+
* This file contains pure TypeScript interface definitions for the MCP Apps protocol.
|
|
5
|
+
* These types are the source of truth and are used to generate Zod schemas via ts-to-zod.
|
|
6
|
+
*
|
|
7
|
+
* - Use `@description` JSDoc tags to generate `.describe()` calls on schemas
|
|
8
|
+
* - Run `npm run generate:schemas` to regenerate schemas from these types
|
|
9
|
+
*
|
|
10
|
+
* @see https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx
|
|
11
|
+
*/
|
|
12
|
+
import type { CallToolResult, ContentBlock, Implementation, RequestId, Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
13
|
+
/**
|
|
14
|
+
* Current protocol version supported by this SDK.
|
|
15
|
+
*
|
|
16
|
+
* The SDK automatically handles version negotiation during initialization.
|
|
17
|
+
* Apps and hosts don't need to manage protocol versions manually.
|
|
18
|
+
*/
|
|
19
|
+
export declare const LATEST_PROTOCOL_VERSION = "2025-11-21";
|
|
20
|
+
/**
|
|
21
|
+
* @description Color theme preference for the host environment.
|
|
22
|
+
*/
|
|
23
|
+
export type McpUiTheme = "light" | "dark";
|
|
24
|
+
/**
|
|
25
|
+
* @description Display mode for UI presentation.
|
|
26
|
+
*/
|
|
27
|
+
export type McpUiDisplayMode = "inline" | "fullscreen" | "pip";
|
|
28
|
+
/**
|
|
29
|
+
* @description CSS variable keys available to MCP apps for theming.
|
|
30
|
+
*/
|
|
31
|
+
export type McpUiStyleVariableKey = "--color-background-primary" | "--color-background-secondary" | "--color-background-tertiary" | "--color-background-inverse" | "--color-background-ghost" | "--color-background-info" | "--color-background-danger" | "--color-background-success" | "--color-background-warning" | "--color-background-disabled" | "--color-text-primary" | "--color-text-secondary" | "--color-text-tertiary" | "--color-text-inverse" | "--color-text-info" | "--color-text-danger" | "--color-text-success" | "--color-text-warning" | "--color-text-disabled" | "--color-text-ghost" | "--color-border-primary" | "--color-border-secondary" | "--color-border-tertiary" | "--color-border-inverse" | "--color-border-ghost" | "--color-border-info" | "--color-border-danger" | "--color-border-success" | "--color-border-warning" | "--color-border-disabled" | "--color-ring-primary" | "--color-ring-secondary" | "--color-ring-inverse" | "--color-ring-info" | "--color-ring-danger" | "--color-ring-success" | "--color-ring-warning" | "--font-sans" | "--font-mono" | "--font-weight-normal" | "--font-weight-medium" | "--font-weight-semibold" | "--font-weight-bold" | "--font-text-xs-size" | "--font-text-sm-size" | "--font-text-md-size" | "--font-text-lg-size" | "--font-heading-xs-size" | "--font-heading-sm-size" | "--font-heading-md-size" | "--font-heading-lg-size" | "--font-heading-xl-size" | "--font-heading-2xl-size" | "--font-heading-3xl-size" | "--font-text-xs-line-height" | "--font-text-sm-line-height" | "--font-text-md-line-height" | "--font-text-lg-line-height" | "--font-heading-xs-line-height" | "--font-heading-sm-line-height" | "--font-heading-md-line-height" | "--font-heading-lg-line-height" | "--font-heading-xl-line-height" | "--font-heading-2xl-line-height" | "--font-heading-3xl-line-height" | "--border-radius-xs" | "--border-radius-sm" | "--border-radius-md" | "--border-radius-lg" | "--border-radius-xl" | "--border-radius-full" | "--border-width-regular" | "--shadow-hairline" | "--shadow-sm" | "--shadow-md" | "--shadow-lg";
|
|
32
|
+
/**
|
|
33
|
+
* @description Style variables for theming MCP apps.
|
|
34
|
+
*
|
|
35
|
+
* Individual style keys are optional - hosts may provide any subset of these values.
|
|
36
|
+
* Values are strings containing CSS values (colors, sizes, font stacks, etc.).
|
|
37
|
+
*
|
|
38
|
+
* Note: This type uses `Record<K, string | undefined>` rather than `Partial<Record<K, string>>`
|
|
39
|
+
* for compatibility with Zod schema generation. Both are functionally equivalent for validation.
|
|
40
|
+
*/
|
|
41
|
+
export type McpUiStyles = Record<McpUiStyleVariableKey, string | undefined>;
|
|
42
|
+
/**
|
|
43
|
+
* @description Request to open an external URL in the host's default browser.
|
|
44
|
+
* @see {@link app.App.sendOpenLink} for the method that sends this request
|
|
45
|
+
*/
|
|
46
|
+
export interface McpUiOpenLinkRequest {
|
|
47
|
+
method: "ui/open-link";
|
|
48
|
+
params: {
|
|
49
|
+
/** @description URL to open in the host's browser */
|
|
50
|
+
url: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Result from opening a URL.
|
|
55
|
+
* @see {@link McpUiOpenLinkRequest}
|
|
56
|
+
*/
|
|
57
|
+
export interface McpUiOpenLinkResult {
|
|
58
|
+
/** @description True if the host failed to open the URL (e.g., due to security policy). */
|
|
59
|
+
isError?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Index signature required for MCP SDK `Protocol` class compatibility.
|
|
62
|
+
* Note: The schema intentionally omits this to enforce strict validation.
|
|
63
|
+
*/
|
|
64
|
+
[key: string]: unknown;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description Request to send a message to the host's chat interface.
|
|
68
|
+
* @see {@link app.App.sendMessage} for the method that sends this request
|
|
69
|
+
*/
|
|
70
|
+
export interface McpUiMessageRequest {
|
|
71
|
+
method: "ui/message";
|
|
72
|
+
params: {
|
|
73
|
+
/** @description Message role, currently only "user" is supported. */
|
|
74
|
+
role: "user";
|
|
75
|
+
/** @description Message content blocks (text, image, etc.). */
|
|
76
|
+
content: ContentBlock[];
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @description Result from sending a message.
|
|
81
|
+
* @see {@link McpUiMessageRequest}
|
|
82
|
+
*/
|
|
83
|
+
export interface McpUiMessageResult {
|
|
84
|
+
/** @description True if the host rejected or failed to deliver the message. */
|
|
85
|
+
isError?: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Index signature required for MCP SDK `Protocol` class compatibility.
|
|
88
|
+
* Note: The schema intentionally omits this to enforce strict validation.
|
|
89
|
+
*/
|
|
90
|
+
[key: string]: unknown;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* @description Notification that the sandbox proxy iframe is ready to receive content.
|
|
94
|
+
* @internal
|
|
95
|
+
* @see https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#sandbox-proxy
|
|
96
|
+
*/
|
|
97
|
+
export interface McpUiSandboxProxyReadyNotification {
|
|
98
|
+
method: "ui/notifications/sandbox-proxy-ready";
|
|
99
|
+
params: Record<string, unknown>;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* @description Notification containing HTML resource for the sandbox proxy to load.
|
|
103
|
+
* @internal
|
|
104
|
+
* @see https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx#sandbox-proxy
|
|
105
|
+
*/
|
|
106
|
+
export interface McpUiSandboxResourceReadyNotification {
|
|
107
|
+
method: "ui/notifications/sandbox-resource-ready";
|
|
108
|
+
params: {
|
|
109
|
+
/** @description HTML content to load into the inner iframe. */
|
|
110
|
+
html: string;
|
|
111
|
+
/** @description Optional override for the inner iframe's sandbox attribute. */
|
|
112
|
+
sandbox?: string;
|
|
113
|
+
/** @description CSP configuration from resource metadata. */
|
|
114
|
+
csp?: {
|
|
115
|
+
/** @description Origins for network requests (fetch/XHR/WebSocket). */
|
|
116
|
+
connectDomains?: string[];
|
|
117
|
+
/** @description Origins for static resources (scripts, images, styles, fonts). */
|
|
118
|
+
resourceDomains?: string[];
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* @description Notification of UI size changes (bidirectional: Guest <-> Host).
|
|
124
|
+
* @see {@link app.App.sendSizeChanged} for the method to send this from Guest UI
|
|
125
|
+
*/
|
|
126
|
+
export interface McpUiSizeChangedNotification {
|
|
127
|
+
method: "ui/notifications/size-changed";
|
|
128
|
+
params: {
|
|
129
|
+
/** @description New width in pixels. */
|
|
130
|
+
width?: number;
|
|
131
|
+
/** @description New height in pixels. */
|
|
132
|
+
height?: number;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* @description Notification containing complete tool arguments (Host -> Guest UI).
|
|
137
|
+
*/
|
|
138
|
+
export interface McpUiToolInputNotification {
|
|
139
|
+
method: "ui/notifications/tool-input";
|
|
140
|
+
params: {
|
|
141
|
+
/** @description Complete tool call arguments as key-value pairs. */
|
|
142
|
+
arguments?: Record<string, unknown>;
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* @description Notification containing partial/streaming tool arguments (Host -> Guest UI).
|
|
147
|
+
*/
|
|
148
|
+
export interface McpUiToolInputPartialNotification {
|
|
149
|
+
method: "ui/notifications/tool-input-partial";
|
|
150
|
+
params: {
|
|
151
|
+
/** @description Partial tool call arguments (incomplete, may change). */
|
|
152
|
+
arguments?: Record<string, unknown>;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* @description Notification containing tool execution result (Host -> Guest UI).
|
|
157
|
+
*/
|
|
158
|
+
export interface McpUiToolResultNotification {
|
|
159
|
+
method: "ui/notifications/tool-result";
|
|
160
|
+
/** @description Standard MCP tool execution result. */
|
|
161
|
+
params: CallToolResult;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* @description Notification that tool execution was cancelled (Host -> Guest UI).
|
|
165
|
+
* Host MUST send this if tool execution was cancelled for any reason (user action,
|
|
166
|
+
* sampling error, classifier intervention, etc.).
|
|
167
|
+
*/
|
|
168
|
+
export interface McpUiToolCancelledNotification {
|
|
169
|
+
method: "ui/notifications/tool-cancelled";
|
|
170
|
+
params: {
|
|
171
|
+
/** @description Optional reason for the cancellation (e.g., "user action", "timeout"). */
|
|
172
|
+
reason?: string;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @description CSS blocks that can be injected by apps.
|
|
177
|
+
*/
|
|
178
|
+
export interface McpUiHostCss {
|
|
179
|
+
/** @description CSS for font loading (@font-face rules or @import statements). Apps must apply using applyHostFonts(). */
|
|
180
|
+
fonts?: string;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* @description Style configuration for theming MCP apps.
|
|
184
|
+
*/
|
|
185
|
+
export interface McpUiHostStyles {
|
|
186
|
+
/** @description CSS variables for theming the app. */
|
|
187
|
+
variables?: McpUiStyles;
|
|
188
|
+
/** @description CSS blocks that apps can inject. */
|
|
189
|
+
css?: McpUiHostCss;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* @description Rich context about the host environment provided to Guest UIs.
|
|
193
|
+
*/
|
|
194
|
+
export interface McpUiHostContext {
|
|
195
|
+
/** @description Allow additional properties for forward compatibility. */
|
|
196
|
+
[key: string]: unknown;
|
|
197
|
+
/** @description Metadata of the tool call that instantiated this App. */
|
|
198
|
+
toolInfo?: {
|
|
199
|
+
/** @description JSON-RPC id of the tools/call request. */
|
|
200
|
+
id: RequestId;
|
|
201
|
+
/** @description Tool definition including name, inputSchema, etc. */
|
|
202
|
+
tool: Tool;
|
|
203
|
+
};
|
|
204
|
+
/** @description Current color theme preference. */
|
|
205
|
+
theme?: McpUiTheme;
|
|
206
|
+
/** @description Style configuration for theming the app. */
|
|
207
|
+
styles?: McpUiHostStyles;
|
|
208
|
+
/** @description How the UI is currently displayed. */
|
|
209
|
+
displayMode?: McpUiDisplayMode;
|
|
210
|
+
/** @description Display modes the host supports. */
|
|
211
|
+
availableDisplayModes?: string[];
|
|
212
|
+
/** @description Current and maximum dimensions available to the UI. */
|
|
213
|
+
viewport?: {
|
|
214
|
+
/** @description Current viewport width in pixels. */
|
|
215
|
+
width: number;
|
|
216
|
+
/** @description Current viewport height in pixels. */
|
|
217
|
+
height: number;
|
|
218
|
+
/** @description Maximum available height in pixels (if constrained). */
|
|
219
|
+
maxHeight?: number;
|
|
220
|
+
/** @description Maximum available width in pixels (if constrained). */
|
|
221
|
+
maxWidth?: number;
|
|
222
|
+
};
|
|
223
|
+
/** @description User's language and region preference in BCP 47 format. */
|
|
224
|
+
locale?: string;
|
|
225
|
+
/** @description User's timezone in IANA format. */
|
|
226
|
+
timeZone?: string;
|
|
227
|
+
/** @description Host application identifier. */
|
|
228
|
+
userAgent?: string;
|
|
229
|
+
/** @description Platform type for responsive design decisions. */
|
|
230
|
+
platform?: "web" | "desktop" | "mobile";
|
|
231
|
+
/** @description Device input capabilities. */
|
|
232
|
+
deviceCapabilities?: {
|
|
233
|
+
/** @description Whether the device supports touch input. */
|
|
234
|
+
touch?: boolean;
|
|
235
|
+
/** @description Whether the device supports hover interactions. */
|
|
236
|
+
hover?: boolean;
|
|
237
|
+
};
|
|
238
|
+
/** @description Mobile safe area boundaries in pixels. */
|
|
239
|
+
safeAreaInsets?: {
|
|
240
|
+
/** @description Top safe area inset in pixels. */
|
|
241
|
+
top: number;
|
|
242
|
+
/** @description Right safe area inset in pixels. */
|
|
243
|
+
right: number;
|
|
244
|
+
/** @description Bottom safe area inset in pixels. */
|
|
245
|
+
bottom: number;
|
|
246
|
+
/** @description Left safe area inset in pixels. */
|
|
247
|
+
left: number;
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* @description Notification that host context has changed (Host -> Guest UI).
|
|
252
|
+
* @see {@link McpUiHostContext} for the full context structure
|
|
253
|
+
*/
|
|
254
|
+
export interface McpUiHostContextChangedNotification {
|
|
255
|
+
method: "ui/notifications/host-context-changed";
|
|
256
|
+
/** @description Partial context update containing only changed fields. */
|
|
257
|
+
params: McpUiHostContext;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* @description Request for graceful shutdown of the Guest UI (Host -> Guest UI).
|
|
261
|
+
* @see {@link app-bridge.AppBridge.teardownResource} for the host method that sends this
|
|
262
|
+
*/
|
|
263
|
+
export interface McpUiResourceTeardownRequest {
|
|
264
|
+
method: "ui/resource-teardown";
|
|
265
|
+
params: Record<string, unknown>;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* @description Result from graceful shutdown request.
|
|
269
|
+
* @see {@link McpUiResourceTeardownRequest}
|
|
270
|
+
*/
|
|
271
|
+
export interface McpUiResourceTeardownResult {
|
|
272
|
+
/**
|
|
273
|
+
* Index signature required for MCP SDK `Protocol` class compatibility.
|
|
274
|
+
*/
|
|
275
|
+
[key: string]: unknown;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* @description Capabilities supported by the host application.
|
|
279
|
+
* @see {@link McpUiInitializeResult} for the initialization result that includes these capabilities
|
|
280
|
+
*/
|
|
281
|
+
export interface McpUiHostCapabilities {
|
|
282
|
+
/** @description Experimental features (structure TBD). */
|
|
283
|
+
experimental?: Record<string, unknown>;
|
|
284
|
+
/** @description Host supports opening external URLs. */
|
|
285
|
+
openLinks?: Record<string, unknown>;
|
|
286
|
+
/** @description Host can proxy tool calls to the MCP server. */
|
|
287
|
+
serverTools?: {
|
|
288
|
+
/** @description Host supports tools/list_changed notifications. */
|
|
289
|
+
listChanged?: boolean;
|
|
290
|
+
};
|
|
291
|
+
/** @description Host can proxy resource reads to the MCP server. */
|
|
292
|
+
serverResources?: {
|
|
293
|
+
/** @description Host supports resources/list_changed notifications. */
|
|
294
|
+
listChanged?: boolean;
|
|
295
|
+
};
|
|
296
|
+
/** @description Host accepts log messages. */
|
|
297
|
+
logging?: Record<string, unknown>;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* @description Capabilities provided by the Guest UI (App).
|
|
301
|
+
* @see {@link McpUiInitializeRequest} for the initialization request that includes these capabilities
|
|
302
|
+
*/
|
|
303
|
+
export interface McpUiAppCapabilities {
|
|
304
|
+
/** @description Experimental features (structure TBD). */
|
|
305
|
+
experimental?: Record<string, unknown>;
|
|
306
|
+
/** @description App exposes MCP-style tools that the host can call. */
|
|
307
|
+
tools?: {
|
|
308
|
+
/** @description App supports tools/list_changed notifications. */
|
|
309
|
+
listChanged?: boolean;
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* @description Initialization request sent from Guest UI to Host.
|
|
314
|
+
* @see {@link app.App.connect} for the method that sends this request
|
|
315
|
+
*/
|
|
316
|
+
export interface McpUiInitializeRequest {
|
|
317
|
+
method: "ui/initialize";
|
|
318
|
+
params: {
|
|
319
|
+
/** @description App identification (name and version). */
|
|
320
|
+
appInfo: Implementation;
|
|
321
|
+
/** @description Features and capabilities this app provides. */
|
|
322
|
+
appCapabilities: McpUiAppCapabilities;
|
|
323
|
+
/** @description Protocol version this app supports. */
|
|
324
|
+
protocolVersion: string;
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* @description Initialization result returned from Host to Guest UI.
|
|
329
|
+
* @see {@link McpUiInitializeRequest}
|
|
330
|
+
*/
|
|
331
|
+
export interface McpUiInitializeResult {
|
|
332
|
+
/** @description Negotiated protocol version string (e.g., "2025-11-21"). */
|
|
333
|
+
protocolVersion: string;
|
|
334
|
+
/** @description Host application identification and version. */
|
|
335
|
+
hostInfo: Implementation;
|
|
336
|
+
/** @description Features and capabilities provided by the host. */
|
|
337
|
+
hostCapabilities: McpUiHostCapabilities;
|
|
338
|
+
/** @description Rich context about the host environment. */
|
|
339
|
+
hostContext: McpUiHostContext;
|
|
340
|
+
/**
|
|
341
|
+
* Index signature required for MCP SDK `Protocol` class compatibility.
|
|
342
|
+
* Note: The schema intentionally omits this to enforce strict validation.
|
|
343
|
+
*/
|
|
344
|
+
[key: string]: unknown;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* @description Notification that Guest UI has completed initialization (Guest UI -> Host).
|
|
348
|
+
* @see {@link app.App.connect} for the method that sends this notification
|
|
349
|
+
*/
|
|
350
|
+
export interface McpUiInitializedNotification {
|
|
351
|
+
method: "ui/notifications/initialized";
|
|
352
|
+
params?: object;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* @description Content Security Policy configuration for UI resources.
|
|
356
|
+
*/
|
|
357
|
+
export interface McpUiResourceCsp {
|
|
358
|
+
/** @description Origins for network requests (fetch/XHR/WebSocket). */
|
|
359
|
+
connectDomains?: string[];
|
|
360
|
+
/** @description Origins for static resources (scripts, images, styles, fonts). */
|
|
361
|
+
resourceDomains?: string[];
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* @description UI Resource metadata for security and rendering configuration.
|
|
365
|
+
*/
|
|
366
|
+
export interface McpUiResourceMeta {
|
|
367
|
+
/** @description Content Security Policy configuration. */
|
|
368
|
+
csp?: McpUiResourceCsp;
|
|
369
|
+
/** @description Dedicated origin for widget sandbox. */
|
|
370
|
+
domain?: string;
|
|
371
|
+
/** @description Visual boundary preference - true if UI prefers a visible border. */
|
|
372
|
+
prefersBorder?: boolean;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* @description Request to change the display mode of the UI.
|
|
376
|
+
* The host will respond with the actual display mode that was set,
|
|
377
|
+
* which may differ from the requested mode if not supported.
|
|
378
|
+
* @see {@link app.App.requestDisplayMode} for the method that sends this request
|
|
379
|
+
*/
|
|
380
|
+
export interface McpUiRequestDisplayModeRequest {
|
|
381
|
+
method: "ui/request-display-mode";
|
|
382
|
+
params: {
|
|
383
|
+
/** @description The display mode being requested. */
|
|
384
|
+
mode: McpUiDisplayMode;
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* @description Result from requesting a display mode change.
|
|
389
|
+
* @see {@link McpUiRequestDisplayModeRequest}
|
|
390
|
+
*/
|
|
391
|
+
export interface McpUiRequestDisplayModeResult {
|
|
392
|
+
/** @description The display mode that was actually set. May differ from requested if not supported. */
|
|
393
|
+
mode: McpUiDisplayMode;
|
|
394
|
+
/**
|
|
395
|
+
* Index signature required for MCP SDK `Protocol` class compatibility.
|
|
396
|
+
* Note: The schema intentionally omits this to enforce strict validation.
|
|
397
|
+
*/
|
|
398
|
+
[key: string]: unknown;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* @description Tool visibility scope - who can access the tool.
|
|
402
|
+
*/
|
|
403
|
+
export type McpUiToolVisibility = "model" | "app";
|
|
404
|
+
/**
|
|
405
|
+
* @description UI-related metadata for tools.
|
|
406
|
+
*/
|
|
407
|
+
export interface McpUiToolMeta {
|
|
408
|
+
/**
|
|
409
|
+
* URI of the UI resource to display for this tool.
|
|
410
|
+
* This is converted to `_meta["ui/resourceUri"]`.
|
|
411
|
+
*
|
|
412
|
+
* @example "ui://weather/widget.html"
|
|
413
|
+
*/
|
|
414
|
+
resourceUri: string;
|
|
415
|
+
/**
|
|
416
|
+
* @description Who can access this tool. Default: ["model", "app"]
|
|
417
|
+
* - "model": Tool visible to and callable by the agent
|
|
418
|
+
* - "app": Tool callable by the app from this server only
|
|
419
|
+
*/
|
|
420
|
+
visibility?: McpUiToolVisibility[];
|
|
421
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Apps Protocol Types (spec.types.ts)
|
|
3
|
+
*
|
|
4
|
+
* This file contains pure TypeScript interface definitions for the MCP Apps protocol.
|
|
5
|
+
* These types are the source of truth and are used to generate Zod schemas via ts-to-zod.
|
|
6
|
+
*
|
|
7
|
+
* - Use `@description` JSDoc tags to generate `.describe()` calls on schemas
|
|
8
|
+
* - Run `npm run generate:schemas` to regenerate schemas from these types
|
|
9
|
+
*
|
|
10
|
+
* @see https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/draft/apps.mdx
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Current protocol version supported by this SDK.
|
|
14
|
+
*
|
|
15
|
+
* The SDK automatically handles version negotiation during initialization.
|
|
16
|
+
* Apps and hosts don't need to manage protocol versions manually.
|
|
17
|
+
*/
|
|
18
|
+
export const LATEST_PROTOCOL_VERSION = "2025-11-21";
|
|
19
|
+
//# sourceMappingURL=ext-apps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-apps.js","sourceRoot":"","sources":["../../../../src/web/types/ext-apps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,YAAY,CAAC"}
|