@webmcp-auto-ui/core 0.4.0 → 2.5.0
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 +52 -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 +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- 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/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 +420 -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 +12 -0
- package/src/index.ts +5 -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 +54 -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 +533 -0
package/README.md
CHANGED
|
@@ -8,6 +8,10 @@ W3C WebMCP Draft 2026-03-27 polyfill and MCP Streamable HTTP client. Pure TypeSc
|
|
|
8
8
|
|
|
9
9
|
**McpClient** — connects to MCP servers over Streamable HTTP (SSE). Handles `initialize`, `tools/list`, and `tools/call`.
|
|
10
10
|
|
|
11
|
+
**McpMultiClient** — manages simultaneous connections to multiple MCP servers. Aggregates tool lists and routes `callTool` to the correct server. Useful for apps that connect to several data sources at once (e.g. flex with multi-MCP).
|
|
12
|
+
|
|
13
|
+
**Prompt caching** — the `cache_control` property is applied on the tools array (not individual tools) to work correctly with Anthropic's prompt caching. This fix ensures cache hits when the tool set is stable across requests.
|
|
14
|
+
|
|
11
15
|
**createToolGroup** — registers a named group of tools on `navigator.modelContext`. Aborting the group unregisters all tools at once — useful for component lifecycle cleanup.
|
|
12
16
|
|
|
13
17
|
**sanitizeSchema** — strips JSON Schema keywords that Anthropic's API rejects (`oneOf`, `anyOf`, `allOf`, `$ref`, `if/then/else`). Applied automatically before any LLM call.
|
|
@@ -30,6 +34,7 @@ npm install @webmcp-auto-ui/core
|
|
|
30
34
|
import {
|
|
31
35
|
initializeWebMCPPolyfill,
|
|
32
36
|
McpClient,
|
|
37
|
+
McpMultiClient,
|
|
33
38
|
createToolGroup,
|
|
34
39
|
textResult, jsonResult,
|
|
35
40
|
listenForAgentCalls,
|
|
@@ -52,9 +57,56 @@ const init = await client.connect();
|
|
|
52
57
|
const tools = await client.listTools();
|
|
53
58
|
const result = await client.callTool('my_tool', { arg: 'value' });
|
|
54
59
|
|
|
60
|
+
// Multi-server connections
|
|
61
|
+
const multi = new McpMultiClient();
|
|
62
|
+
await multi.addServer('https://mcp1.example.com/mcp');
|
|
63
|
+
await multi.addServer('https://mcp2.example.com/mcp');
|
|
64
|
+
const allTools = multi.listAllTools(); // aggregated from all servers
|
|
65
|
+
const result = await multi.callTool('query_sql', { sql: 'SELECT 1' }); // routes to correct server
|
|
66
|
+
|
|
55
67
|
// Cleanup
|
|
56
68
|
stop();
|
|
57
69
|
group.abort();
|
|
70
|
+
await multi.disconnectAll();
|
|
71
|
+
```
|
|
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
|
|
58
110
|
```
|
|
59
111
|
|
|
60
112
|
## Types
|
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":"AAAA,8EAA8E;AAC9E,mCAAmC;AACnC,gEAAgE;AAChE,sBAAsB;AACtB,8EAA8E;AAc9E,MAAM,QAAQ,GAAG;IACf,UAAU,EAAE,gBAAgB;IAC5B,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,EAA4B;IACrC,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,CAAC;CACa,CAAC;AAEvC,MAAM,OAAO,SAAS;IACZ,GAAG,CAAS;IACZ,OAAO,CAA6B;IACpC,SAAS,GAAkB,IAAI,CAAC;IAChC,KAAK,GAAc,EAAE,CAAC;IACtB,UAAU,GAAyB,IAAI,CAAC;IACxC,YAAY,GAA2B,IAAI,CAAC;IAC5C,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,GAAG,CAAC,CAAC;IACjB,cAAc,GAAG,KAAK,CAAC;IACvB,gBAAgB,GAAyB,IAAI,CAAC;IAEtD,YAAY,GAAW,EAAE,OAA0B;QACjD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;IACpG,CAAC;IAED,8EAA8E;IAC9E,aAAa;IACb,8EAA8E;IAE9E,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAsB,YAAY,EAAE;YAC/D,eAAe,EAAE,YAAY;YAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;YAC9C,UAAU,EAAE;gBACV,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;gBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;aACpC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,2DAA2D;QAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAE/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAqB,YAAY,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,IAA8B;QACzD,OAAO,IAAI,CAAC,GAAG,CAAgB,YAAY,EAAE;YAC3C,IAAI;YACJ,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,qCAAqC;YACrC,MAAM,OAAO,GAA2B;gBACtC,gBAAgB,EAAE,IAAI,CAAC,SAAS;gBAChC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;aACxB,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAE9E,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,8EAA8E;IAC9E,UAAU;IACV,8EAA8E;IAEtE,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAgC;QACnE,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAChD,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,qCAAqC;YAC7C,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;SACxB,CAAC;QACF,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IACjN,CAAC;IAEO,KAAK,CAAC,GAAG,CAAI,MAAc,EAAE,MAAgC,EAAE,OAAO,GAAG,CAAC;QAChF,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,CAAC;QAE/B,MAAM,IAAI,GAAmB;YAC3B,OAAO,EAAE,KAAK;YACd,EAAE;YACF,MAAM;YACN,MAAM;SACP,CAAC;QAEF,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,qCAAqC;YAC7C,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;SACxB,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7C,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,MAAM;gBACd,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,GAAG,YAAY,SAAS,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,4CAA6C,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,sDAAsD;QACtD,MAAM,YAAY,GAChB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACtC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACzC,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAChC,CAAC;QAED,0CAA0C;QAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,oEAAoE;gBACpE,MAAM,IAAI,CAAC,gBAAgB,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAI,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;gBAChD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAK,IAAI,EAAE;oBAClC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;oBAC7D,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;gBACvB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;oBAChB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;oBAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC/B,CAAC,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,gBAAgB,CAAC;gBAC5B,OAAO,IAAI,CAAC,GAAG,CAAI,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,OAAO,WAAW,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAE/D,IAAI,WAA+B,CAAC;QACpC,IAAI,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC9C,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAuB,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QACtD,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,sBAAsB,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,CAC7E,CAAC;QACJ,CAAC;QAED,OAAO,WAAW,CAAC,MAAW,CAAC;IACjC,CAAC;IAEO,gBAAgB,CAAC,GAAW;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,YAAY,GAA2B,IAAI,CAAC;QAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAoB,CAAC;oBAC1D,mEAAmE;oBACnE,oEAAoE;oBACpE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,OAAO,MAAM,CAAC;oBAChB,CAAC;oBACD,YAAY,GAAG,MAAM,CAAC;oBACtB,WAAW,GAAG,EAAE,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,sCAAsC;gBACxC,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBACvB,uEAAuE;gBACvE,WAAW,GAAG,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,9 @@ export { initializeWebMCPPolyfill, cleanupWebMCPPolyfill, hasNativeWebMCP, execu
|
|
|
5
5
|
export { McpClient } from './client.js';
|
|
6
6
|
export { listenForAgentCalls, stopListening, callToolViaPostMessage, isWebMCPEvent, } from './events.js';
|
|
7
7
|
export { dispatchAndWait, signalCompletion, sanitizeSchema, createToolGroup, } from './utils.js';
|
|
8
|
-
export { textResult, jsonResult,
|
|
9
|
-
export type { SkillDef } from './webmcp-helpers.js';
|
|
8
|
+
export { textResult, jsonResult, } from './webmcp-helpers.js';
|
|
10
9
|
export { McpMultiClient } from './multi-client.js';
|
|
11
10
|
export type { ConnectedServer } from './multi-client.js';
|
|
11
|
+
export { createWebMcpServer, parseFrontmatter, mountWidget } from './webmcp-server.js';
|
|
12
|
+
export type { WebMcpServer, WebMcpServerOptions, WebMcpToolDef, WidgetEntry, WidgetRenderer } from './webmcp-server.js';
|
|
12
13
|
//# 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;AAGpB,OAAO,EACL,UAAU,EACV,UAAU,
|
|
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;AAGpB,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
|
@@ -10,8 +10,10 @@ export { McpClient } from './client.js';
|
|
|
10
10
|
export { listenForAgentCalls, stopListening, callToolViaPostMessage, isWebMCPEvent, } from './events.js';
|
|
11
11
|
// Utilities
|
|
12
12
|
export { dispatchAndWait, signalCompletion, sanitizeSchema, createToolGroup, } from './utils.js';
|
|
13
|
-
// WebMCP helpers (
|
|
14
|
-
export { textResult, jsonResult,
|
|
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;AAEpB,
|
|
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;AAEpB,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/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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webmcp-helpers.js","sourceRoot":"","sources":["../src/webmcp-helpers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wCAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"webmcp-helpers.js","sourceRoot":"","sources":["../src/webmcp-helpers.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,wCAAwC;AACxC,8CAA8C;AAC9C,0CAA0C;AAC1C,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,kFAAkF;AAClF,8EAA8E;AAI9E,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export interface WebMcpServerOptions {
|
|
2
|
+
description: string;
|
|
3
|
+
}
|
|
4
|
+
export interface WebMcpToolDef {
|
|
5
|
+
name: string;
|
|
6
|
+
description: string;
|
|
7
|
+
inputSchema: Record<string, unknown>;
|
|
8
|
+
execute: (params: Record<string, unknown>) => Promise<unknown>;
|
|
9
|
+
}
|
|
10
|
+
/** A vanilla renderer: receives a container + data, optionally returns a cleanup function. */
|
|
11
|
+
export type WidgetRenderer = ((container: HTMLElement, data: Record<string, unknown>) => void | (() => void)) | unknown;
|
|
12
|
+
export interface WidgetEntry {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
inputSchema: Record<string, unknown>;
|
|
16
|
+
recipe: string;
|
|
17
|
+
renderer: WidgetRenderer;
|
|
18
|
+
group?: string;
|
|
19
|
+
/** True when the renderer is a plain function (not a framework component). */
|
|
20
|
+
vanilla: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface WebMcpServer {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
readonly description: string;
|
|
25
|
+
registerWidget(recipeMarkdown: string, renderer: WidgetRenderer): void;
|
|
26
|
+
addTool(tool: WebMcpToolDef): void;
|
|
27
|
+
layer(): {
|
|
28
|
+
protocol: 'webmcp';
|
|
29
|
+
serverName: string;
|
|
30
|
+
description: string;
|
|
31
|
+
tools: WebMcpToolDef[];
|
|
32
|
+
};
|
|
33
|
+
getWidget(name: string): WidgetEntry | undefined;
|
|
34
|
+
listWidgets(): WidgetEntry[];
|
|
35
|
+
}
|
|
36
|
+
export interface ParsedFrontmatter {
|
|
37
|
+
frontmatter: Record<string, unknown>;
|
|
38
|
+
body: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Parse a markdown file with YAML frontmatter (--- delimited).
|
|
42
|
+
* Supports: scalars, nested objects (indentation), arrays (- item), inline values.
|
|
43
|
+
* No external YAML dependency.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseFrontmatter(markdown: string): ParsedFrontmatter;
|
|
46
|
+
/**
|
|
47
|
+
* Mount a widget into a DOM container by searching registered servers.
|
|
48
|
+
* If the renderer is a function (vanilla renderer), it is called directly.
|
|
49
|
+
* Returns an optional cleanup function.
|
|
50
|
+
* Falls back to a text placeholder if no server provides the widget.
|
|
51
|
+
*/
|
|
52
|
+
export declare function mountWidget(container: HTMLElement, type: string, data: Record<string, unknown>, servers: WebMcpServer[]): (() => void) | void;
|
|
53
|
+
export declare function createWebMcpServer(name: string, options: WebMcpServerOptions): WebMcpServer;
|
|
54
|
+
//# sourceMappingURL=webmcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webmcp-server.d.ts","sourceRoot":"","sources":["../src/webmcp-server.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AAED,8FAA8F;AAC9F,MAAM,MAAM,cAAc,GACtB,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAChF,OAAO,CAAC;AAEZ,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IACvE,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAEnC,KAAK,IAAI;QACP,QAAQ,EAAE,QAAQ,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,aAAa,EAAE,CAAC;KACxB,CAAC;IAEF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACjD,WAAW,IAAI,WAAW,EAAE,CAAC;CAC9B;AAMD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAgBpE;AAsMD;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,WAAW,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,YAAY,EAAE,GACtB,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAQrB;AA6CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,mBAAmB,GAC3B,YAAY,CAmLd"}
|