@webmcp-auto-ui/core 0.5.0 → 2.5.4
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 +39 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -1
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/multi-client.d.ts +7 -3
- package/dist/multi-client.d.ts.map +1 -1
- package/dist/multi-client.js +49 -4
- package/dist/multi-client.js.map +1 -1
- package/dist/utils.d.ts +27 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +136 -3
- package/dist/utils.js.map +1 -1
- package/dist/webmcp-helpers.d.ts +0 -16
- package/dist/webmcp-helpers.d.ts.map +1 -1
- package/dist/webmcp-helpers.js +5 -47
- package/dist/webmcp-helpers.js.map +1 -1
- package/dist/webmcp-server.d.ts +54 -0
- package/dist/webmcp-server.d.ts.map +1 -0
- package/dist/webmcp-server.js +425 -0
- package/dist/webmcp-server.js.map +1 -0
- package/package.json +1 -1
- package/src/client.d.ts +26 -0
- package/src/client.ts +3 -1
- package/src/events.d.ts +16 -0
- package/src/index.d.ts +13 -0
- package/src/index.ts +9 -7
- package/src/multi-client.d.ts +55 -0
- package/src/multi-client.ts +53 -4
- package/src/polyfill.d.ts +51 -0
- package/src/types.d.ts +331 -0
- package/src/utils.d.ts +81 -0
- package/src/utils.ts +163 -0
- package/src/validate.d.ts +13 -0
- package/src/webmcp-helpers.d.ts +3 -0
- package/src/webmcp-helpers.ts +6 -63
- package/src/webmcp-server.d.ts +53 -0
- package/src/webmcp-server.ts +538 -0
package/README.md
CHANGED
|
@@ -70,6 +70,45 @@ group.abort();
|
|
|
70
70
|
await multi.disconnectAll();
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
+
## WebMCP Server
|
|
74
|
+
|
|
75
|
+
WebMCP is a protocol symmetric to MCP. MCP provides remote data tools, WebMCP provides local display/interaction tools.
|
|
76
|
+
|
|
77
|
+
### Creating a WebMCP server
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
import { createWebMcpServer } from '@webmcp-auto-ui/core';
|
|
81
|
+
|
|
82
|
+
const myServer = createWebMcpServer('mywidgets', {
|
|
83
|
+
description: 'Custom visualization widgets'
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
// Register widgets (recipe .md + renderer component)
|
|
87
|
+
myServer.registerWidget(recipeMarkdown, RendererComponent);
|
|
88
|
+
|
|
89
|
+
// Add custom tools
|
|
90
|
+
myServer.addTool({
|
|
91
|
+
name: 'theme',
|
|
92
|
+
description: 'Switch theme',
|
|
93
|
+
inputSchema: { type: 'object', properties: { mode: { type: 'string' } } },
|
|
94
|
+
execute: async (params) => ({ ok: true })
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// Get a layer for the agent loop
|
|
98
|
+
const layer = myServer.layer();
|
|
99
|
+
// → { protocol: 'webmcp', serverName: 'mywidgets', description: '...', tools: [...] }
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Frontmatter parser
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
import { parseFrontmatter } from '@webmcp-auto-ui/core';
|
|
106
|
+
|
|
107
|
+
const { frontmatter, body } = parseFrontmatter(markdownString);
|
|
108
|
+
// frontmatter.widget, frontmatter.schema, frontmatter.description
|
|
109
|
+
// body = markdown content after the --- block
|
|
110
|
+
```
|
|
111
|
+
|
|
73
112
|
## Types
|
|
74
113
|
|
|
75
114
|
All types follow the W3C WebMCP Draft 2026-03-27 spec. See `src/types.ts`.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,aAAa,EAEb,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAWpB,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAA8B;gBAE1C,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAS7C,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoBvC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAO9E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,aAAa,GAAG,IAAI;IAIrC,eAAe,IAAI,eAAe,GAAG,IAAI;IAIzC,QAAQ,IAAI,OAAO,EAAE;IAIrB,YAAY,IAAI,MAAM,GAAG,IAAI;YAQf,MAAM;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,aAAa,EAEb,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAWpB,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAA8B;gBAE1C,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAS7C,OAAO,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoBvC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAM/B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAO9E,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC,WAAW,IAAI,OAAO;IAItB,aAAa,IAAI,aAAa,GAAG,IAAI;IAIrC,eAAe,IAAI,eAAe,GAAG,IAAI;IAIzC,QAAQ,IAAI,OAAO,EAAE;IAIrB,YAAY,IAAI,MAAM,GAAG,IAAI;YAQf,MAAM;YAaN,GAAG;IAiGjB,OAAO,CAAC,gBAAgB;CAsCzB"}
|
package/dist/client.js
CHANGED
|
@@ -101,7 +101,9 @@ export class McpClient {
|
|
|
101
101
|
};
|
|
102
102
|
if (this.sessionId)
|
|
103
103
|
headers['Mcp-Session-Id'] = this.sessionId;
|
|
104
|
-
|
|
104
|
+
const controller = new AbortController();
|
|
105
|
+
const timer = setTimeout(() => controller.abort(), this.options.timeout);
|
|
106
|
+
await fetch(this.url, { method: 'POST', headers, body: JSON.stringify(body), signal: controller.signal }).catch((e) => console.warn('[McpClient] notification failed:', e)).finally(() => clearTimeout(timer));
|
|
105
107
|
}
|
|
106
108
|
async rpc(method, params, attempt = 0) {
|
|
107
109
|
const id = ++this.rpcIdCounter;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,9 +4,11 @@ export type { ValidationResult, ValidationError } from './validate.js';
|
|
|
4
4
|
export { initializeWebMCPPolyfill, cleanupWebMCPPolyfill, hasNativeWebMCP, executeToolInternal, } from './polyfill.js';
|
|
5
5
|
export { McpClient } from './client.js';
|
|
6
6
|
export { listenForAgentCalls, stopListening, callToolViaPostMessage, isWebMCPEvent, } from './events.js';
|
|
7
|
-
export { dispatchAndWait, signalCompletion, sanitizeSchema, createToolGroup, } from './utils.js';
|
|
8
|
-
export {
|
|
9
|
-
export
|
|
7
|
+
export { dispatchAndWait, signalCompletion, sanitizeSchema, sanitizeSchemaWithReport, flattenSchema, unflattenParams, createToolGroup, } from './utils.js';
|
|
8
|
+
export type { SchemaPatch } from './utils.js';
|
|
9
|
+
export { textResult, jsonResult, } from './webmcp-helpers.js';
|
|
10
10
|
export { McpMultiClient } from './multi-client.js';
|
|
11
11
|
export type { ConnectedServer } from './multi-client.js';
|
|
12
|
+
export { createWebMcpServer, parseFrontmatter, mountWidget } from './webmcp-server.js';
|
|
13
|
+
export type { WebMcpServer, WebMcpServerOptions, WebMcpToolDef, WidgetEntry, WidgetRenderer } from './webmcp-server.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,OAAO,EACP,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,OAAO,EACL,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACvF,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,9 +9,11 @@ export { McpClient } from './client.js';
|
|
|
9
9
|
// postMessage bridge
|
|
10
10
|
export { listenForAgentCalls, stopListening, callToolViaPostMessage, isWebMCPEvent, } from './events.js';
|
|
11
11
|
// Utilities
|
|
12
|
-
export { dispatchAndWait, signalCompletion, sanitizeSchema, createToolGroup, } from './utils.js';
|
|
13
|
-
// WebMCP helpers (
|
|
14
|
-
export { textResult, jsonResult,
|
|
12
|
+
export { dispatchAndWait, signalCompletion, sanitizeSchema, sanitizeSchemaWithReport, flattenSchema, unflattenParams, createToolGroup, } from './utils.js';
|
|
13
|
+
// WebMCP helpers (result builders)
|
|
14
|
+
export { textResult, jsonResult, } from './webmcp-helpers.js';
|
|
15
15
|
// Multi-MCP client
|
|
16
16
|
export { McpMultiClient } from './multi-client.js';
|
|
17
|
+
// WebMCP Server
|
|
18
|
+
export { createWebMcpServer, parseFrontmatter, mountWidget } from './webmcp-server.js';
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,+DAA+D;AAiD/D,aAAa;AACb,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,WAAW;AACX,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAqB;AACrB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY;AACZ,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,+DAA+D;AAiD/D,aAAa;AACb,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,WAAW;AACX,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAqB;AACrB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,YAAY;AACZ,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,mCAAmC;AACnC,OAAO,EACL,UAAU,EACV,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/multi-client.d.ts
CHANGED
|
@@ -32,18 +32,22 @@ export declare class McpMultiClient {
|
|
|
32
32
|
/**
|
|
33
33
|
* List ALL tools from ALL connected servers.
|
|
34
34
|
* Each tool is augmented with its origin server URL and name.
|
|
35
|
-
*
|
|
35
|
+
* Duplicate tool names across servers are prefixed with the server name
|
|
36
|
+
* (e.g. "wikipedia__search") to satisfy the Claude API uniqueness constraint.
|
|
36
37
|
*/
|
|
37
38
|
listAllTools(): AggregatedTool[];
|
|
38
39
|
/**
|
|
39
|
-
* Call a tool by name. Automatically routes to the
|
|
40
|
-
*
|
|
40
|
+
* Call a tool by name. Automatically routes to the correct server.
|
|
41
|
+
* Supports both plain names ("search") and prefixed names ("wikipedia__search")
|
|
42
|
+
* for disambiguated duplicates.
|
|
41
43
|
*/
|
|
42
44
|
callTool(name: string, args?: Record<string, unknown>): Promise<McpToolResult>;
|
|
43
45
|
/**
|
|
44
46
|
* Disconnect from all servers.
|
|
45
47
|
*/
|
|
46
48
|
disconnectAll(): Promise<void>;
|
|
49
|
+
/** Convert a server name to a snake_case prefix for tool name disambiguation. */
|
|
50
|
+
private normalizeServerName;
|
|
47
51
|
/** Number of connected servers. */
|
|
48
52
|
get serverCount(): number;
|
|
49
53
|
/** True if at least one server is connected. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-client.d.ts","sourceRoot":"","sources":["../src/multi-client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EAEd,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAMjF,qBAAa,cAAc;IACzB,oEAAoE;IACpE,OAAO,CAAC,OAAO,CAA4E;IAM3F;;;OAGG;IACG,SAAS,CACb,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAoB9C;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C;;OAEG;IACH,WAAW,IAAI,eAAe,EAAE;IAQhC
|
|
1
|
+
{"version":3,"file":"multi-client.d.ts","sourceRoot":"","sources":["../src/multi-client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EAEd,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAMjF,qBAAa,cAAc;IACzB,oEAAoE;IACpE,OAAO,CAAC,OAAO,CAA4E;IAM3F;;;OAGG;IACG,SAAS,CACb,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC7C,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAoB9C;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO9C;;OAEG;IACH,WAAW,IAAI,eAAe,EAAE;IAQhC;;;;;OAKG;IACH,YAAY,IAAI,cAAc,EAAE;IA+BhC;;;;OAIG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IA2BpF;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAapC,iFAAiF;IACjF,OAAO,CAAC,mBAAmB;IAQ3B,mCAAmC;IACnC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,gDAAgD;IAChD,IAAI,cAAc,IAAI,OAAO,CAE5B;CACF"}
|
package/dist/multi-client.js
CHANGED
|
@@ -55,28 +55,66 @@ export class McpMultiClient {
|
|
|
55
55
|
/**
|
|
56
56
|
* List ALL tools from ALL connected servers.
|
|
57
57
|
* Each tool is augmented with its origin server URL and name.
|
|
58
|
-
*
|
|
58
|
+
* Duplicate tool names across servers are prefixed with the server name
|
|
59
|
+
* (e.g. "wikipedia__search") to satisfy the Claude API uniqueness constraint.
|
|
59
60
|
*/
|
|
60
61
|
listAllTools() {
|
|
62
|
+
// First pass: count occurrences of each tool name across all servers
|
|
63
|
+
const nameCounts = new Map();
|
|
64
|
+
for (const [, entry] of this.servers) {
|
|
65
|
+
for (const tool of entry.tools) {
|
|
66
|
+
nameCounts.set(tool.name, (nameCounts.get(tool.name) ?? 0) + 1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Second pass: build result, prefixing duplicates with serverName
|
|
61
70
|
const result = [];
|
|
62
71
|
for (const [url, entry] of this.servers) {
|
|
63
72
|
for (const tool of entry.tools) {
|
|
64
|
-
|
|
73
|
+
const isDuplicate = (nameCounts.get(tool.name) ?? 0) > 1;
|
|
74
|
+
if (isDuplicate) {
|
|
75
|
+
const prefix = this.normalizeServerName(entry.name);
|
|
76
|
+
result.push({
|
|
77
|
+
...tool,
|
|
78
|
+
name: `${prefix}__${tool.name}`,
|
|
79
|
+
description: `[${entry.name}] ${tool.description ?? ''}`,
|
|
80
|
+
serverUrl: url,
|
|
81
|
+
serverName: entry.name,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
result.push({ ...tool, serverUrl: url, serverName: entry.name });
|
|
86
|
+
}
|
|
65
87
|
}
|
|
66
88
|
}
|
|
67
89
|
return result;
|
|
68
90
|
}
|
|
69
91
|
/**
|
|
70
|
-
* Call a tool by name. Automatically routes to the
|
|
71
|
-
*
|
|
92
|
+
* Call a tool by name. Automatically routes to the correct server.
|
|
93
|
+
* Supports both plain names ("search") and prefixed names ("wikipedia__search")
|
|
94
|
+
* for disambiguated duplicates.
|
|
72
95
|
*/
|
|
73
96
|
async callTool(name, args) {
|
|
97
|
+
// 1. Exact match on original tool name (unprefixed)
|
|
74
98
|
for (const [, entry] of this.servers) {
|
|
75
99
|
const match = entry.tools.find((t) => t.name === name);
|
|
76
100
|
if (match) {
|
|
77
101
|
return entry.client.callTool(name, args);
|
|
78
102
|
}
|
|
79
103
|
}
|
|
104
|
+
// 2. Prefixed name: "serverprefix__realToolName"
|
|
105
|
+
const separatorIdx = name.indexOf('__');
|
|
106
|
+
if (separatorIdx !== -1) {
|
|
107
|
+
const prefix = name.slice(0, separatorIdx);
|
|
108
|
+
const realName = name.slice(separatorIdx + 2);
|
|
109
|
+
for (const [, entry] of this.servers) {
|
|
110
|
+
if (this.normalizeServerName(entry.name) === prefix) {
|
|
111
|
+
const match = entry.tools.find((t) => t.name === realName);
|
|
112
|
+
if (match) {
|
|
113
|
+
return entry.client.callTool(realName, args);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
80
118
|
throw new Error(`McpMultiClient: no server exposes tool "${name}"`);
|
|
81
119
|
}
|
|
82
120
|
/**
|
|
@@ -91,6 +129,13 @@ export class McpMultiClient {
|
|
|
91
129
|
this.servers.clear();
|
|
92
130
|
}
|
|
93
131
|
// -------------------------------------------------------------------------
|
|
132
|
+
// Private helpers
|
|
133
|
+
// -------------------------------------------------------------------------
|
|
134
|
+
/** Convert a server name to a snake_case prefix for tool name disambiguation. */
|
|
135
|
+
normalizeServerName(name) {
|
|
136
|
+
return name.toLowerCase().replace(/[^a-z0-9_-]+/g, '_').replace(/_{2,}/g, '_').replace(/^_|_$/g, '');
|
|
137
|
+
}
|
|
138
|
+
// -------------------------------------------------------------------------
|
|
94
139
|
// Getters
|
|
95
140
|
// -------------------------------------------------------------------------
|
|
96
141
|
/** Number of connected servers. */
|
package/dist/multi-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-client.js","sourceRoot":"","sources":["../src/multi-client.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wCAAwC;AACxC,gFAAgF;AAChF,+BAA+B;AAC/B,8EAA8E;AAE9E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAmBxC,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACzB,oEAAoE;IAC5D,OAAO,GAAG,IAAI,GAAG,EAAiE,CAAC;IAE3F,4EAA4E;IAC5E,aAAa;IACb,4EAA4E;IAE5E;;;OAGG;IACH,KAAK,CAAC,SAAS,CACb,GAAW,EACX,OAA8C;QAE9C,+DAA+D;QAC/D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,aAAa,GAAiC,OAAO,EAAE,OAAO;YAClE,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;YAC9B,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QAEvC,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAE/C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"multi-client.js","sourceRoot":"","sources":["../src/multi-client.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -20,6 +20,19 @@ export declare function dispatchAndWait<T = unknown>(eventName: string, detail?:
|
|
|
20
20
|
* Call this from your UI handler after the update is done.
|
|
21
21
|
*/
|
|
22
22
|
export declare function signalCompletion(completionEventName: string, detail?: unknown): void;
|
|
23
|
+
export interface SchemaPatch {
|
|
24
|
+
path: string;
|
|
25
|
+
type: 'additionalProperties';
|
|
26
|
+
value: false;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sanitize schema AND report patches applied for strict tool use.
|
|
30
|
+
* Use this when you need visibility into what was changed.
|
|
31
|
+
*/
|
|
32
|
+
export declare function sanitizeSchemaWithReport(schema: JsonSchema): {
|
|
33
|
+
schema: JsonSchema;
|
|
34
|
+
patches: SchemaPatch[];
|
|
35
|
+
};
|
|
23
36
|
/**
|
|
24
37
|
* Strip JSON Schema keywords that cause errors in AI SDKs
|
|
25
38
|
* (e.g., Vercel AI SDK rejects oneOf/anyOf on non-STRING types).
|
|
@@ -27,6 +40,20 @@ export declare function signalCompletion(completionEventName: string, detail?: u
|
|
|
27
40
|
* Use this before passing tool schemas to LLM providers.
|
|
28
41
|
*/
|
|
29
42
|
export declare function sanitizeSchema(schema: JsonSchema): JsonSchema;
|
|
43
|
+
/**
|
|
44
|
+
* Flatten nested object schemas into flat key__subkey properties.
|
|
45
|
+
* Returns { schema, pathMap } where pathMap maps flat keys to nested paths.
|
|
46
|
+
* Only flattens properties of type "object" with their own properties.
|
|
47
|
+
*/
|
|
48
|
+
export declare function flattenSchema(schema: JsonSchema): {
|
|
49
|
+
schema: JsonSchema;
|
|
50
|
+
pathMap: Record<string, string[]>;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Unflatten params using a pathMap from flattenSchema.
|
|
54
|
+
* Converts { a__b: 1, a__c: 2, d: 3 } back to { a: { b: 1, c: 2 }, d: 3 }
|
|
55
|
+
*/
|
|
56
|
+
export declare function unflattenParams(params: Record<string, unknown>, pathMap: Record<string, string[]>): Record<string, unknown>;
|
|
30
57
|
/**
|
|
31
58
|
* Create a named tool group backed by a shared AbortController.
|
|
32
59
|
* Ergonomic helper for SPA route-based tool registration.
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,YAAY,CAAC;AAM/D;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EACzC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACrE,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAGpF;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAG7D;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,YAAY,CAAC;AAM/D;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EACzC,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GACrE,OAAO,CAAC,CAAC,CAAC,CAoCZ;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAGpF;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,sBAAsB,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAK3G;AAiED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAG7D;AAiED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAsC3G;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CACR,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,UAAU,CAAC;QACzB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;QACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACvC,EACD,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,WAAW,CAAA;KAAE,KAAK,IAAI,KAC9D,IAAI,CAAC;IACV,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,OAAO,CAAC;CAC1B,CAqBA"}
|
package/dist/utils.js
CHANGED
|
@@ -53,9 +53,63 @@ export function signalCompletion(completionEventName, detail) {
|
|
|
53
53
|
return;
|
|
54
54
|
window.dispatchEvent(new CustomEvent(completionEventName, { detail }));
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Sanitize schema AND report patches applied for strict tool use.
|
|
58
|
+
* Use this when you need visibility into what was changed.
|
|
59
|
+
*/
|
|
60
|
+
export function sanitizeSchemaWithReport(schema) {
|
|
61
|
+
if (typeof schema === 'boolean')
|
|
62
|
+
return { schema, patches: [] };
|
|
63
|
+
const patches = [];
|
|
64
|
+
const result = sanitizeSchemaObjectWithReport({ ...schema }, new WeakSet(), 'root', patches);
|
|
65
|
+
return { schema: result, patches };
|
|
66
|
+
}
|
|
67
|
+
function sanitizeSchemaObjectWithReport(obj, seen, path, patches) {
|
|
68
|
+
if (seen.has(obj))
|
|
69
|
+
return obj;
|
|
70
|
+
seen.add(obj);
|
|
71
|
+
const result = { ...obj };
|
|
72
|
+
// Remove composition keywords that AI SDKs can't handle
|
|
73
|
+
delete result.oneOf;
|
|
74
|
+
delete result.anyOf;
|
|
75
|
+
delete result.allOf;
|
|
76
|
+
delete result.not;
|
|
77
|
+
// Remove conditional keywords
|
|
78
|
+
delete result.if;
|
|
79
|
+
delete result.then;
|
|
80
|
+
delete result.else;
|
|
81
|
+
// Remove $ref (needs dereferencing first)
|
|
82
|
+
delete result.$ref;
|
|
83
|
+
// Recursively sanitize nested schemas
|
|
84
|
+
if (result.properties) {
|
|
85
|
+
const sanitizedProps = {};
|
|
86
|
+
for (const [key, value] of Object.entries(result.properties)) {
|
|
87
|
+
sanitizedProps[key] = typeof value === 'boolean'
|
|
88
|
+
? value
|
|
89
|
+
: sanitizeSchemaObjectWithReport({ ...value }, seen, `${path}.properties.${key}`, patches);
|
|
90
|
+
}
|
|
91
|
+
result.properties = sanitizedProps;
|
|
92
|
+
}
|
|
93
|
+
if (result.items) {
|
|
94
|
+
if (Array.isArray(result.items)) {
|
|
95
|
+
result.items = result.items.map((item, i) => typeof item === 'boolean'
|
|
96
|
+
? item
|
|
97
|
+
: sanitizeSchemaObjectWithReport({ ...item }, seen, `${path}.items[${i}]`, patches));
|
|
98
|
+
}
|
|
99
|
+
else if (typeof result.items !== 'boolean') {
|
|
100
|
+
result.items = sanitizeSchemaObjectWithReport({ ...result.items }, seen, `${path}.items`, patches);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Strict tool use: ensure additionalProperties is set on any object type
|
|
104
|
+
if ((result.type === 'object' || result.properties) && !('additionalProperties' in result)) {
|
|
105
|
+
result.additionalProperties = false;
|
|
106
|
+
patches.push({ path, type: 'additionalProperties', value: false });
|
|
107
|
+
}
|
|
108
|
+
if (result.additionalProperties && typeof result.additionalProperties === 'object') {
|
|
109
|
+
result.additionalProperties = sanitizeSchemaObjectWithReport({ ...result.additionalProperties }, seen, `${path}.additionalProperties`, patches);
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
59
113
|
/**
|
|
60
114
|
* Strip JSON Schema keywords that cause errors in AI SDKs
|
|
61
115
|
* (e.g., Vercel AI SDK rejects oneOf/anyOf on non-STRING types).
|
|
@@ -103,12 +157,91 @@ function sanitizeSchemaObject(obj, seen) {
|
|
|
103
157
|
result.items = sanitizeSchemaObject({ ...result.items }, seen);
|
|
104
158
|
}
|
|
105
159
|
}
|
|
160
|
+
// Strict tool use: ensure additionalProperties is set on any object type
|
|
161
|
+
// Anthropic requires this on ALL objects, even without properties
|
|
162
|
+
if ((result.type === 'object' || result.properties) && !('additionalProperties' in result)) {
|
|
163
|
+
result.additionalProperties = false;
|
|
164
|
+
}
|
|
106
165
|
if (result.additionalProperties && typeof result.additionalProperties === 'object') {
|
|
107
166
|
result.additionalProperties = sanitizeSchemaObject({ ...result.additionalProperties }, seen);
|
|
108
167
|
}
|
|
109
168
|
return result;
|
|
110
169
|
}
|
|
111
170
|
// ---------------------------------------------------------------------------
|
|
171
|
+
// flattenSchema — flatten nested object properties for small LLMs
|
|
172
|
+
// ---------------------------------------------------------------------------
|
|
173
|
+
/**
|
|
174
|
+
* Flatten nested object schemas into flat key__subkey properties.
|
|
175
|
+
* Returns { schema, pathMap } where pathMap maps flat keys to nested paths.
|
|
176
|
+
* Only flattens properties of type "object" with their own properties.
|
|
177
|
+
*/
|
|
178
|
+
export function flattenSchema(schema) {
|
|
179
|
+
if (typeof schema === 'boolean')
|
|
180
|
+
return { schema, pathMap: {} };
|
|
181
|
+
const obj = schema;
|
|
182
|
+
if (!obj.properties)
|
|
183
|
+
return { schema, pathMap: {} };
|
|
184
|
+
const flatProps = {};
|
|
185
|
+
const pathMap = {};
|
|
186
|
+
const required = new Set(obj.required ?? []);
|
|
187
|
+
const flatRequired = [];
|
|
188
|
+
for (const [key, prop] of Object.entries(obj.properties)) {
|
|
189
|
+
if (typeof prop !== 'boolean' && prop.type === 'object' && prop.properties) {
|
|
190
|
+
// Flatten nested object
|
|
191
|
+
const nestedRequired = new Set(prop.required ?? []);
|
|
192
|
+
for (const [subKey, subProp] of Object.entries(prop.properties)) {
|
|
193
|
+
const flatKey = `${key}__${subKey}`;
|
|
194
|
+
flatProps[flatKey] = subProp;
|
|
195
|
+
pathMap[flatKey] = [key, subKey];
|
|
196
|
+
if (required.has(key) && nestedRequired.has(subKey)) {
|
|
197
|
+
flatRequired.push(flatKey);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
// Keep as-is
|
|
203
|
+
flatProps[key] = prop;
|
|
204
|
+
pathMap[key] = [key];
|
|
205
|
+
if (required.has(key))
|
|
206
|
+
flatRequired.push(key);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const result = {
|
|
210
|
+
...obj,
|
|
211
|
+
properties: flatProps,
|
|
212
|
+
};
|
|
213
|
+
if (flatRequired.length > 0)
|
|
214
|
+
result.required = flatRequired;
|
|
215
|
+
else
|
|
216
|
+
delete result.required;
|
|
217
|
+
return { schema: result, pathMap };
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Unflatten params using a pathMap from flattenSchema.
|
|
221
|
+
* Converts { a__b: 1, a__c: 2, d: 3 } back to { a: { b: 1, c: 2 }, d: 3 }
|
|
222
|
+
*/
|
|
223
|
+
export function unflattenParams(params, pathMap) {
|
|
224
|
+
const result = {};
|
|
225
|
+
for (const [flatKey, value] of Object.entries(params)) {
|
|
226
|
+
const path = pathMap[flatKey] ?? flatKey.split('__');
|
|
227
|
+
if (path.length === 1) {
|
|
228
|
+
result[path[0]] = value;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
// Build nested structure
|
|
232
|
+
let current = result;
|
|
233
|
+
for (let i = 0; i < path.length - 1; i++) {
|
|
234
|
+
if (!(path[i] in current) || typeof current[path[i]] !== 'object') {
|
|
235
|
+
current[path[i]] = {};
|
|
236
|
+
}
|
|
237
|
+
current = current[path[i]];
|
|
238
|
+
}
|
|
239
|
+
current[path[path.length - 1]] = value;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return result;
|
|
243
|
+
}
|
|
244
|
+
// ---------------------------------------------------------------------------
|
|
112
245
|
// createToolGroup — ergonomic helper for SPA route-based tool registration
|
|
113
246
|
// ---------------------------------------------------------------------------
|
|
114
247
|
/**
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4DAA4D;AAC5D,+BAA+B;AAC/B,8EAA8E;AAI9E,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,SAAiB,EACjB,MAAgC,EAChC,OAAsE;IAEtE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;IACzC,MAAM,SAAS,GACb,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU;QAChD,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;QACrB,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,mBAAmB,GAAG,mBAAmB,SAAS,EAAE,CAAC;IAE3D,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,SAAS,qBAAqB,OAAO,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC,EAAE,OAAO,CAAC,CAAC;QAEZ,SAAS,gBAAgB,CAAC,KAAY;YACpC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,KAAoB,CAAC;YACzC,OAAO,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,EAAE,YAAY,IAAK,SAAe,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;QAE/D,6FAA6F;QAC7F,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,SAAS,EAAE;YACzB,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE;SACtD,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,mBAA2B,EAAE,MAAgB;IAC5E,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAC1C,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/webmcp-helpers.d.ts
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
import { executeToolInternal } from './polyfill.js';
|
|
2
1
|
import type { ToolExecuteResult } from './types.js';
|
|
3
2
|
export declare function textResult(text: string): ToolExecuteResult;
|
|
4
3
|
export declare function jsonResult(data: unknown): ToolExecuteResult;
|
|
5
|
-
export interface SkillDef {
|
|
6
|
-
id: string;
|
|
7
|
-
name: string;
|
|
8
|
-
description: string;
|
|
9
|
-
component: string;
|
|
10
|
-
presentation?: string;
|
|
11
|
-
version?: string;
|
|
12
|
-
tags?: string[];
|
|
13
|
-
}
|
|
14
|
-
export declare function registerSkill(skill: SkillDef): void;
|
|
15
|
-
export declare function unregisterSkill(id: string): void;
|
|
16
|
-
export declare function getSkill(id: string): SkillDef | undefined;
|
|
17
|
-
export declare function listSkills(): SkillDef[];
|
|
18
|
-
export declare function clearSkills(): void;
|
|
19
|
-
export { executeToolInternal };
|
|
20
4
|
//# sourceMappingURL=webmcp-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webmcp-helpers.d.ts","sourceRoot":"","sources":["../src/webmcp-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webmcp-helpers.d.ts","sourceRoot":"","sources":["../src/webmcp-helpers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAMpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAE1D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CAE3D"}
|
package/dist/webmcp-helpers.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// ---------------------------------------------------------------------------
|
|
2
2
|
// @webmcp-auto-ui/core — WebMCP helpers
|
|
3
|
-
//
|
|
3
|
+
// Result builders for tool execute callbacks.
|
|
4
4
|
// Zero additional dependencies. SSR-safe.
|
|
5
|
+
//
|
|
6
|
+
// NOTE: The skill registry that used to live here (SkillDef, registerSkill,
|
|
7
|
+
// unregisterSkill, etc.) has been removed. The canonical skill type and
|
|
8
|
+
// registry now live in @webmcp-auto-ui/sdk (packages/sdk/src/skills/registry.ts).
|
|
5
9
|
// ---------------------------------------------------------------------------
|
|
6
|
-
import { executeToolInternal } from './polyfill.js';
|
|
7
10
|
// ---------------------------------------------------------------------------
|
|
8
11
|
// Result builders
|
|
9
12
|
// ---------------------------------------------------------------------------
|
|
@@ -13,49 +16,4 @@ export function textResult(text) {
|
|
|
13
16
|
export function jsonResult(data) {
|
|
14
17
|
return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
|
|
15
18
|
}
|
|
16
|
-
const _skills = new Map();
|
|
17
|
-
function mcNav() {
|
|
18
|
-
if (typeof navigator === 'undefined')
|
|
19
|
-
return null;
|
|
20
|
-
return navigator.modelContext ?? null;
|
|
21
|
-
}
|
|
22
|
-
export function registerSkill(skill) {
|
|
23
|
-
_skills.set(skill.id, skill);
|
|
24
|
-
const mc = mcNav();
|
|
25
|
-
if (!mc)
|
|
26
|
-
return;
|
|
27
|
-
const toolName = `skill__${skill.id}`;
|
|
28
|
-
try {
|
|
29
|
-
mc.unregisterTool(toolName);
|
|
30
|
-
}
|
|
31
|
-
catch { /* not yet registered */ }
|
|
32
|
-
mc.registerTool({
|
|
33
|
-
name: toolName,
|
|
34
|
-
description: `[Skill] ${skill.name} — ${skill.description}. Component: ${skill.component}.${skill.presentation ? ` Hints: ${skill.presentation}` : ''}`,
|
|
35
|
-
inputSchema: { type: 'object', properties: {} },
|
|
36
|
-
execute: () => jsonResult(skill),
|
|
37
|
-
annotations: { readOnlyHint: true },
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
export function unregisterSkill(id) {
|
|
41
|
-
_skills.delete(id);
|
|
42
|
-
const mc = mcNav();
|
|
43
|
-
if (!mc)
|
|
44
|
-
return;
|
|
45
|
-
try {
|
|
46
|
-
mc.unregisterTool(`skill__${id}`);
|
|
47
|
-
}
|
|
48
|
-
catch { /* already gone */ }
|
|
49
|
-
}
|
|
50
|
-
export function getSkill(id) {
|
|
51
|
-
return _skills.get(id);
|
|
52
|
-
}
|
|
53
|
-
export function listSkills() {
|
|
54
|
-
return Array.from(_skills.values());
|
|
55
|
-
}
|
|
56
|
-
export function clearSkills() {
|
|
57
|
-
for (const id of Array.from(_skills.keys()))
|
|
58
|
-
unregisterSkill(id);
|
|
59
|
-
}
|
|
60
|
-
export { executeToolInternal };
|
|
61
19
|
//# sourceMappingURL=webmcp-helpers.js.map
|