@agentic-ui-experience/ui-mcp 0.0.1-beta.3 → 0.0.1-beta.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 +60 -35
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +18 -18
- package/dist/index.js +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -6,21 +6,26 @@ This package does not render or ingest UI. It exposes catalog discovery tools
|
|
|
6
6
|
and a `send_ui_to_client` MCP tool that returns validated A2UI messages in
|
|
7
7
|
`structuredContent`, so the host can forward them to `@agentic-ui-experience/ui-runtime`.
|
|
8
8
|
|
|
9
|
+
MCP is one integration path for producing the project's UI Message Contract. The Host app still owns the Transport that forwards the result to the frontend; this package does not choose or operate that Transport. See the [project glossary](../../docs/glossary.md).
|
|
10
|
+
|
|
9
11
|
`@agentic-ui-experience/ui-mcp` is an MCP adapter over
|
|
10
|
-
`@agentic-ui-experience/ui-core/tool-mode`. Catalog
|
|
12
|
+
`@agentic-ui-experience/ui-core/tool-mode`. Catalog configuration, catalog resource
|
|
11
13
|
payloads, catalog filtering, and `send_ui_to_client` normalization live in
|
|
12
14
|
`ui-core`; this package only maps those provider-neutral operations onto MCP
|
|
13
15
|
resources and tools.
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
A server serves exactly one catalog. A2UI fixes a surface's catalog at
|
|
18
|
+
`createSurface` time and never composes two catalogs into one component tree, and
|
|
19
|
+
the upstream agent SDK selects a single catalog before it prompts the model, so
|
|
20
|
+
the catalog is a server configuration rather than a model choice. To serve more
|
|
21
|
+
than one vocabulary, merge them when you define the catalog. Omit `catalog` to
|
|
22
|
+
serve the A2UI basic catalog.
|
|
17
23
|
|
|
18
24
|
```ts
|
|
19
25
|
import { createUIMCPServer } from "@agentic-ui-experience/ui-mcp";
|
|
20
26
|
|
|
21
27
|
const server = createUIMCPServer({
|
|
22
|
-
|
|
23
|
-
defaultCatalogId: "com.agentic-ui-experience.examples.weather.v1",
|
|
28
|
+
catalog: weatherPromptDescriptor,
|
|
24
29
|
catalogInstructionMode: "compact"
|
|
25
30
|
});
|
|
26
31
|
|
|
@@ -87,13 +92,12 @@ The local-development wildcard CORS shortcut is:
|
|
|
87
92
|
pnpm --filter @agentic-ui-experience/ui-mcp start:http:cors
|
|
88
93
|
```
|
|
89
94
|
|
|
90
|
-
|
|
95
|
+
A custom catalog can be loaded from an ESM module:
|
|
91
96
|
|
|
92
97
|
```bash
|
|
93
98
|
ax-ui-mcp \
|
|
94
99
|
--transport http \
|
|
95
100
|
--catalog ./weather-catalog.js \
|
|
96
|
-
--default-catalog-id com.agentic-ui-experience.examples.weather.v1 \
|
|
97
101
|
--catalog-instruction-mode compact
|
|
98
102
|
```
|
|
99
103
|
|
|
@@ -101,12 +105,10 @@ With the package scripts, append extra CLI flags after `--`:
|
|
|
101
105
|
|
|
102
106
|
```bash
|
|
103
107
|
pnpm --filter @agentic-ui-experience/ui-mcp start:http -- \
|
|
104
|
-
--catalog ./weather-catalog.js
|
|
105
|
-
--default-catalog-id com.agentic-ui-experience.examples.weather.v1
|
|
108
|
+
--catalog ./weather-catalog.js
|
|
106
109
|
```
|
|
107
110
|
|
|
108
|
-
The catalog module may export a descriptor directly
|
|
109
|
-
array, and optionally `defaultCatalogId`:
|
|
111
|
+
The catalog module may export a descriptor directly or as `catalog`:
|
|
110
112
|
|
|
111
113
|
```ts
|
|
112
114
|
export const catalog = {
|
|
@@ -114,29 +116,27 @@ export const catalog = {
|
|
|
114
116
|
baseComponentNames: ["Card", "Text"],
|
|
115
117
|
customComponents: []
|
|
116
118
|
};
|
|
117
|
-
|
|
118
|
-
export const defaultCatalogId = "example/weather/v1";
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
The normal agent flow is:
|
|
122
122
|
|
|
123
123
|
```ts
|
|
124
|
-
// Step
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
// Step 1a: discover what the catalog has. With no componentNames the server
|
|
125
|
+
// returns the directory — every component name with one line on what it is for
|
|
126
|
+
// — and no schemas, so discovery costs a listing rather than the catalog.
|
|
127
|
+
get_ui_catalog();
|
|
128
|
+
|
|
129
|
+
// Step 1b: fetch instructions and schemas for the components this UI needs.
|
|
130
|
+
// Use instructionMode: "full" when exact fields are needed.
|
|
131
|
+
// Name a function in functionNames only when the UI actually calls it.
|
|
129
132
|
get_ui_catalog({
|
|
130
|
-
catalogId: "com.agentic-ui-experience.examples.weather.v1",
|
|
131
133
|
componentNames: ["Card", "Text", "WeatherIcon"],
|
|
134
|
+
functionNames: ["formatDate"],
|
|
132
135
|
instructionMode: "full"
|
|
133
136
|
});
|
|
134
137
|
|
|
135
|
-
// Step
|
|
138
|
+
// Step 2: submit messages built from the catalog returned by get_ui_catalog.
|
|
136
139
|
send_ui_to_client({
|
|
137
|
-
// Top-level catalogId is an expected-value guard for the MCP server.
|
|
138
|
-
// The createSurface message must still repeat the same catalogId.
|
|
139
|
-
catalogId: "com.agentic-ui-experience.examples.weather.v1",
|
|
140
140
|
surfaceId: "main",
|
|
141
141
|
messages: [
|
|
142
142
|
{ version: "v0.9", createSurface: { surfaceId: "main", catalogId: "com.agentic-ui-experience.examples.weather.v1" } },
|
|
@@ -145,9 +145,37 @@ send_ui_to_client({
|
|
|
145
145
|
});
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
148
|
+
Neither tool takes a `catalogId`. The server pins the catalog, so there is
|
|
149
|
+
nothing for the model to choose; `createSurface.catalogId` is validated against
|
|
150
|
+
the configured catalog.
|
|
151
|
+
|
|
152
|
+
`componentNames` is what narrows the response: supply it and the server returns
|
|
153
|
+
only those basic and custom component schemas.
|
|
154
|
+
|
|
155
|
+
Function schemas are opt-in and are *not* covered by `componentNames`. Components
|
|
156
|
+
never reference functions through `$ref`, so no component selection can narrow
|
|
157
|
+
them — they have to be named. The instructions always list every function with
|
|
158
|
+
its arguments, so an agent can see what exists and then request only the schemas
|
|
159
|
+
it needs via `functionNames`. Omit `functionNames` when the UI calls no
|
|
160
|
+
functions. This works in both instruction modes, and with or without
|
|
161
|
+
`componentNames`: an explicitly requested function schema is returned even in
|
|
162
|
+
`"compact"` (which otherwise emits no schemas at all) and even on a directory
|
|
163
|
+
call.
|
|
164
|
+
|
|
165
|
+
The returned `descriptor` carries component schemas only. The catalog's
|
|
166
|
+
`styleGuide` and `examples` are prose that `instructions` already renders, so
|
|
167
|
+
repeating them in `descriptor` would have doubled every response; the
|
|
168
|
+
`a2ui://catalog` resource still carries the descriptor whole.
|
|
169
|
+
|
|
170
|
+
`get_ui_catalog` returns `componentPurposes` on every call — a
|
|
171
|
+
`componentName -> what it is for` map covering base and custom components
|
|
172
|
+
together, regardless of what the call requested. Component names alone do not say
|
|
173
|
+
when to reach for `Tabs` over `List`, or `Card` over `Column`, and field rules
|
|
174
|
+
only help once the component is already chosen. Keeping the whole directory in
|
|
175
|
+
view also means an agent that under-selected can see what it missed and widen
|
|
176
|
+
with a second call, instead of quietly building something worse out of the
|
|
177
|
+
components it already has. For custom components the prose is the descriptor's
|
|
178
|
+
`description`.
|
|
151
179
|
|
|
152
180
|
`get_ui_catalog` returns compact instructions by default. Pass
|
|
153
181
|
`instructionMode: "full"` when the agent needs the authoritative JSON schema in
|
|
@@ -160,16 +188,13 @@ serialize the message list into a JSON string, and do not pass static catalog
|
|
|
160
188
|
schema such as `customComponents` in the tool call.
|
|
161
189
|
|
|
162
190
|
`send_ui_to_client` is the final submission tool, not the schema discovery
|
|
163
|
-
tool. Agents should call `
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
The top-level `catalogId` is not copied into the A2UI payload. Always include
|
|
167
|
-
the same value in the first message at `createSurface.catalogId`; the MCP server
|
|
168
|
-
validates that the two values match.
|
|
191
|
+
tool. Agents should call `get_ui_catalog` before using it, then build component
|
|
192
|
+
objects from the returned catalog schema.
|
|
169
193
|
|
|
170
|
-
|
|
194
|
+
The catalog is also exposed as an MCP resource. Resources are read by hosts and
|
|
195
|
+
clients rather than picked from by a model, so this payload carries every
|
|
196
|
+
component and function:
|
|
171
197
|
|
|
172
198
|
```text
|
|
173
|
-
a2ui://catalog
|
|
174
|
-
a2ui://catalog/{catalogId}
|
|
199
|
+
a2ui://catalog
|
|
175
200
|
```
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
const _0x448f3b=_0x736e;(function(_0x548320,_0x26b48e){const _0x4dff72=_0x736e,_0x445ba0=_0x548320();while(!![]){try{const _0x1e99a5=parseInt(_0x4dff72(0xa0))/0x1*(-parseInt(_0x4dff72(0xad))/0x2)+-parseInt(_0x4dff72(0xc3))/0x3*(-parseInt(_0x4dff72(0xbe))/0x4)+parseInt(_0x4dff72(0x8b))/0x5+parseInt(_0x4dff72(0x99))/0x6*(parseInt(_0x4dff72(0xb7))/0x7)+parseInt(_0x4dff72(0xc4))/0x8+parseInt(_0x4dff72(0xc2))/0x9+-parseInt(_0x4dff72(0xac))/0xa;if(_0x1e99a5===_0x26b48e)break;else _0x445ba0['push'](_0x445ba0['shift']());}catch(_0x1534a1){_0x445ba0['push'](_0x445ba0['shift']());}}}(_0x4e82,0x5936e));import{createServer}from'node:http';import{resolve}from'node:path';import{pathToFileURL}from'node:url';import{parseArgs}from'node:util';import{StreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/streamableHttp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{createUIMCPServer}from'./index.js';const helpText=_0x448f3b(0xb9);function stringValue(_0x5b2be7,_0xb5511d){const _0xb595f0=_0x448f3b;return typeof _0x5b2be7===_0xb595f0(0x8c)&&_0x5b2be7[_0xb595f0(0x90)]>0x0?_0x5b2be7:_0xb5511d;}function optionalStringValue(_0x401556){const _0x1d295f=_0x448f3b;return typeof _0x401556==='string'&&_0x401556[_0x1d295f(0x90)]>0x0?_0x401556:void 0x0;}function stringArrayValue(_0x359ec1){const _0x11fd29=_0x448f3b;if(Array['isArray'](_0x359ec1))return _0x359ec1;if(typeof _0x359ec1===_0x11fd29(0x8c)&&_0x359ec1[_0x11fd29(0x90)]>0x0)return[_0x359ec1];return[];}function parseTransport(_0x52f906){const _0x38b60c=_0x448f3b;if(_0x52f906==='stdio'||_0x52f906===_0x38b60c(0x9e))return _0x52f906;throw new Error('Unsupported\x20transport\x20\x22'+_0x52f906+_0x38b60c(0xc8));}function _0x4e82(){const _0x367a74=['Internal\x20MCP\x20server\x20error','setHeader','\x22.\x20Expected\x20an\x20integer\x20from\x201\x20to\x2065535.','port','OPTIONS','catalog-instruction-mode','123137ezsUId','Origin','@agentic-ui-experience/ui-mcp\x0a\x0aUsage:\x0a\x20\x20ax-ui-mcp\x20[options]\x0a\x0aOptions:\x0a\x20\x20--transport\x20<stdio|http>\x20\x20\x20\x20\x20\x20MCP\x20transport\x20to\x20start.\x20Default:\x20stdio\x0a\x20\x20--host\x20<host>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HTTP\x20bind\x20host.\x20Default:\x20127.0.0.1\x0a\x20\x20--port\x20<port>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HTTP\x20bind\x20port.\x20Default:\x203001\x0a\x20\x20--endpoint\x20<path>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HTTP\x20MCP\x20endpoint.\x20Default:\x20/mcp\x0a\x20\x20--cors-origin\x20<origin>\x20\x20\x20\x20\x20\x20\x20\x20Allow\x20a\x20browser\x20origin.\x20Repeatable.\x20Use\x20\x22*\x22\x20for\x20development.\x0a\x20\x20--catalog\x20<module>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ESM\x20module\x20exporting\x20a\x20CatalogPromptDescriptor\x20or\x20array.\x20Repeatable.\x0a\x20\x20--default-catalog-id\x20<id>\x20\x20\x20\x20\x20Default\x20catalog\x20id.\x0a\x20\x20--catalog-instruction-mode\x20<compact|full>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Default\x20get_ui_catalog\x20instruction\x20detail.\x20Default:\x20compact\x0a\x20\x20--name\x20<name>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20MCP\x20server\x20name.\x20Default:\x20@agentic-ui-experience/ui-mcp\x0a\x20\x20--version\x20<version>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20MCP\x20server\x20version.\x20Default:\x200.0.0\x0a\x20\x20--help\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help.\x0a\x0aCatalog\x20modules\x20may\x20export\x20one\x20of:\x0a\x20\x20export\x20default\x20descriptor\x0a\x20\x20export\x20const\x20catalog\x20=\x20descriptor\x0a\x20\x20export\x20const\x20catalogs\x20=\x20[descriptor]\x0a\x20\x20export\x20const\x20defaultCatalogId\x20=\x20\x22...\x22\x0a','statusCode','help','serverVersion','serverName','376CFfCed','catalogs','\x22.\x20Expected\x20\x22compact\x22\x20or\x20\x22full\x22.','catalog','6220197KlMazO','20337ULIvXG','4470600nYmYKs','connect','compact','boolean','\x22.\x20Expected\x20\x22stdio\x22\x20or\x20\x22http\x22.','stdout','stdio','object','SIGTERM','baseComponentNames','method','defaultCatalogId','host','catch','localhost','3082355MSYqgv','string','once','message','Invalid\x20--port\x20\x22','length','Access-Control-Expose-Headers','Unsupported\x20catalog\x20instruction\x20mode\x20\x22','[@agentic-ui-experience/ui-mcp]\x20request\x20failed','origin','endpoint','stringify','headers','\x22\x20exported\x20an\x20invalid\x20catalog\x20descriptor.','222UZJvRt','href','transport','GET,POST,DELETE,OPTIONS','error','http','Content-Type,\x20Accept,\x20Authorization,\x20MCP-Protocol-Version,\x20Mcp-Session-Id,\x20Last-Event-ID','11zyxOWy','content-type','version','end','name','Not\x20Found','default','values','close','3001','includes','headersSent','23531590bxInDb','79262McRtAL','isArray','@agentic-ui-experience/ui-mcp\x20listening\x20on\x20http://','corsOrigins'];_0x4e82=function(){return _0x367a74;};return _0x4e82();}function parseCatalogInstructionMode(_0x47cf15){const _0x29d021=_0x448f3b;if(_0x47cf15==='compact'||_0x47cf15==='full')return _0x47cf15;throw new Error(_0x29d021(0x92)+_0x47cf15+_0x29d021(0xc0));}function parsePort(_0x2b4e8d){const _0x35f978=_0x448f3b,_0x4339a2=Number(_0x2b4e8d);if(!Number['isInteger'](_0x4339a2)||_0x4339a2<0x1||_0x4339a2>0xffff)throw new Error(_0x35f978(0x8f)+_0x2b4e8d+_0x35f978(0xb3));return _0x4339a2;}function _0x736e(_0x4cc1c0,_0x3c5a73){_0x4cc1c0=_0x4cc1c0-0x87;const _0x4e828a=_0x4e82();let _0x736e54=_0x4e828a[_0x4cc1c0];return _0x736e54;}function normalizeEndpoint(_0xc022f2){if(!_0xc022f2['startsWith']('/'))return'/'+_0xc022f2;return _0xc022f2;}function isCatalogDescriptor(_0x415437){const _0x30f057=_0x448f3b;return!!_0x415437&&typeof _0x415437===_0x30f057(0xcb)&&!Array['isArray'](_0x415437)&&typeof _0x415437['id']==='string'&&Array[_0x30f057(0xae)](_0x415437[_0x30f057(0xcd)]);}function readCatalogExports(_0x202a50,_0x12e0de){const _0x40cecf=_0x448f3b,_0x288d57=_0x202a50[_0x40cecf(0xbf)]??_0x202a50[_0x40cecf(0xc1)]??_0x202a50[_0x40cecf(0xa6)],_0x59953f=[];if(Array['isArray'](_0x288d57))for(const _0x1141ce of _0x288d57){if(!isCatalogDescriptor(_0x1141ce))throw new Error('Catalog\x20module\x20\x22'+_0x12e0de+_0x40cecf(0x98));_0x59953f['push'](_0x1141ce);}else{if(_0x288d57!==void 0x0){if(!isCatalogDescriptor(_0x288d57))throw new Error('Catalog\x20module\x20\x22'+_0x12e0de+_0x40cecf(0x98));_0x59953f['push'](_0x288d57);}}if(_0x59953f['length']===0x0)throw new Error('Catalog\x20module\x20\x22'+_0x12e0de+'\x22\x20did\x20not\x20export\x20a\x20catalog\x20descriptor.');const _0x3203af=typeof _0x202a50['defaultCatalogId']==='string'&&_0x202a50[_0x40cecf(0x87)][_0x40cecf(0x90)]>0x0?_0x202a50[_0x40cecf(0x87)]:void 0x0;return{'catalogs':_0x59953f,'defaultCatalogId':_0x3203af};}async function loadCatalogs(_0x3be76f){const _0x440621=_0x448f3b,_0x8d659d=[];let _0x27a098;for(const _0x5886e7 of _0x3be76f){const _0x43610e=await import(pathToFileURL(resolve(_0x5886e7))[_0x440621(0x9a)]),_0x94ccc4=readCatalogExports(_0x43610e,_0x5886e7);_0x8d659d['push'](..._0x94ccc4[_0x440621(0xbf)]),_0x27a098??(_0x27a098=_0x94ccc4[_0x440621(0x87)]);}return{'catalogs':_0x8d659d,'defaultCatalogId':_0x27a098};}async function parseCliOptions(){const _0x45dd94=_0x448f3b,_0x51d7c8=parseArgs({'allowPositionals':![],'options':{'transport':{'type':_0x45dd94(0x8c)},'host':{'type':'string'},'port':{'type':'string'},'endpoint':{'type':_0x45dd94(0x8c)},'cors-origin':{'type':'string','multiple':!![]},'catalog':{'type':_0x45dd94(0x8c),'multiple':!![]},'default-catalog-id':{'type':_0x45dd94(0x8c)},'catalog-instruction-mode':{'type':_0x45dd94(0x8c)},'name':{'type':'string'},'version':{'type':_0x45dd94(0x8c)},'help':{'type':_0x45dd94(0xc7),'short':'h'}}});_0x51d7c8['values'][_0x45dd94(0xbb)]&&(process[_0x45dd94(0xc9)]['write'](helpText),process['exit'](0x0));const _0x56746a=await loadCatalogs(stringArrayValue(_0x51d7c8['values'][_0x45dd94(0xc1)])),_0x2f1021=optionalStringValue(_0x51d7c8[_0x45dd94(0xa7)]['default-catalog-id'])??_0x56746a['defaultCatalogId'];return{'transport':parseTransport(stringValue(_0x51d7c8[_0x45dd94(0xa7)][_0x45dd94(0x9b)],_0x45dd94(0xca))),'host':stringValue(_0x51d7c8[_0x45dd94(0xa7)][_0x45dd94(0x88)],'127.0.0.1'),'port':parsePort(stringValue(_0x51d7c8[_0x45dd94(0xa7)][_0x45dd94(0xb4)],_0x45dd94(0xa9))),'endpoint':normalizeEndpoint(stringValue(_0x51d7c8['values'][_0x45dd94(0x95)],'/mcp')),'corsOrigins':stringArrayValue(_0x51d7c8['values']['cors-origin']),'catalogs':_0x56746a[_0x45dd94(0xbf)],..._0x2f1021?{'defaultCatalogId':_0x2f1021}:{},'catalogInstructionMode':parseCatalogInstructionMode(stringValue(_0x51d7c8[_0x45dd94(0xa7)][_0x45dd94(0xb6)],_0x45dd94(0xc6))),...optionalStringValue(_0x51d7c8[_0x45dd94(0xa7)]['name'])?{'serverName':optionalStringValue(_0x51d7c8['values'][_0x45dd94(0xa4)])}:{},...optionalStringValue(_0x51d7c8[_0x45dd94(0xa7)][_0x45dd94(0xa2)])?{'serverVersion':optionalStringValue(_0x51d7c8['values'][_0x45dd94(0xa2)])}:{}};}function createServerOptions(_0x3b8440){const _0x27ec3d=_0x448f3b;return{'catalogs':_0x3b8440[_0x27ec3d(0xbf)],..._0x3b8440[_0x27ec3d(0x87)]?{'defaultCatalogId':_0x3b8440[_0x27ec3d(0x87)]}:{},..._0x3b8440['catalogInstructionMode']?{'catalogInstructionMode':_0x3b8440['catalogInstructionMode']}:{},'server':{..._0x3b8440[_0x27ec3d(0xbd)]?{'name':_0x3b8440[_0x27ec3d(0xbd)]}:{},..._0x3b8440['serverVersion']?{'version':_0x3b8440[_0x27ec3d(0xbc)]}:{}}};}function setCorsHeaders(_0x1e0bf0,_0x2a3758,_0x3130f0){const _0xf341a6=_0x448f3b;if(_0x3130f0['length']===0x0)return;const _0x413ba2=_0x1e0bf0[_0xf341a6(0x97)][_0xf341a6(0x94)],_0x190c62=_0x3130f0[_0xf341a6(0xaa)]('*'),_0x545482=_0x190c62?'*':typeof _0x413ba2===_0xf341a6(0x8c)&&_0x3130f0[_0xf341a6(0xaa)](_0x413ba2)?_0x413ba2:void 0x0;if(!_0x545482)return;_0x2a3758[_0xf341a6(0xb2)]('Access-Control-Allow-Origin',_0x545482),_0x2a3758['setHeader']('Vary',_0xf341a6(0xb8)),_0x2a3758['setHeader']('Access-Control-Allow-Methods',_0xf341a6(0x9c)),_0x2a3758['setHeader']('Access-Control-Allow-Headers',_0xf341a6(0x9f)),_0x2a3758[_0xf341a6(0xb2)](_0xf341a6(0x91),'Mcp-Session-Id');}function writeJsonRpcError(_0x12b71e,_0x142f0b,_0x259cc9){const _0x486c96=_0x448f3b;_0x12b71e[_0x486c96(0xba)]=_0x142f0b,_0x12b71e['setHeader'](_0x486c96(0xa1),'application/json'),_0x12b71e[_0x486c96(0xa3)](JSON[_0x486c96(0x96)]({'jsonrpc':'2.0','error':{'code':-0x7f5b,'message':_0x259cc9},'id':null}));}async function startStdio(_0x5b9c84){const _0x29282f=createUIMCPServer(createServerOptions(_0x5b9c84));await _0x29282f['connect'](new StdioServerTransport());}async function startHttp(_0x31b19d){const _0x2836bc=_0x448f3b,_0x4c809e=createServer(async(_0x445358,_0x2e53ca)=>{const _0x563c18=_0x736e,_0x56e8cc=new URL(_0x445358['url']??'/','http://'+(_0x445358['headers']['host']??_0x563c18(0x8a)));if(_0x56e8cc['pathname']!==_0x31b19d['endpoint']){_0x2e53ca['statusCode']=0x194,_0x2e53ca[_0x563c18(0xa3)](_0x563c18(0xa5));return;}setCorsHeaders(_0x445358,_0x2e53ca,_0x31b19d[_0x563c18(0xb0)]);if(_0x445358[_0x563c18(0xce)]===_0x563c18(0xb5)){_0x2e53ca[_0x563c18(0xba)]=0xcc,_0x2e53ca[_0x563c18(0xa3)]();return;}const _0x23c0a0=createUIMCPServer(createServerOptions(_0x31b19d)),_0x1b7c27=new StreamableHTTPServerTransport({'sessionIdGenerator':void 0x0});try{await _0x23c0a0[_0x563c18(0xc5)](_0x1b7c27),await _0x1b7c27['handleRequest'](_0x445358,_0x2e53ca),_0x2e53ca['on'](_0x563c18(0xa8),()=>{const _0x5a3840=_0x563c18;void _0x1b7c27[_0x5a3840(0xa8)](),void _0x23c0a0[_0x5a3840(0xa8)]();});}catch(_0x3560ef){console['error'](_0x563c18(0x93),_0x3560ef),!_0x2e53ca[_0x563c18(0xab)]&&writeJsonRpcError(_0x2e53ca,0x1f4,_0x3560ef instanceof Error?_0x3560ef['message']:_0x563c18(0xb1));}});await new Promise((_0x3ddd32,_0x38fd01)=>{const _0x4b86ea=_0x736e;_0x4c809e[_0x4b86ea(0x8d)](_0x4b86ea(0x9d),_0x38fd01),_0x4c809e['listen'](_0x31b19d[_0x4b86ea(0xb4)],_0x31b19d[_0x4b86ea(0x88)],_0x3ddd32);});const _0x546283=()=>{const _0x2cfaac=_0x736e;_0x4c809e[_0x2cfaac(0xa8)](()=>process['exit'](0x0));};process[_0x2836bc(0x8d)]('SIGINT',_0x546283),process['once'](_0x2836bc(0xcc),_0x546283),process['stderr']['write'](_0x2836bc(0xaf)+_0x31b19d['host']+':'+_0x31b19d[_0x2836bc(0xb4)]+_0x31b19d['endpoint']+'\x0a');}async function main(){const _0x2f0a43=_0x448f3b,_0x5939ca=await parseCliOptions();if(_0x5939ca[_0x2f0a43(0x9b)]===_0x2f0a43(0xca)){await startStdio(_0x5939ca);return;}await startHttp(_0x5939ca);}main()[_0x448f3b(0x89)](_0x206766=>{const _0x51393c=_0x448f3b;process['stderr']['write']((_0x206766 instanceof Error?_0x206766[_0x51393c(0x8e)]:String(_0x206766))+'\x0a'),process['exit'](0x1);});
|
|
2
|
+
const _0x24bdc9=_0x55a8;function _0x55a8(_0x48c825,_0x5caa02){_0x48c825=_0x48c825-0x19f;const _0x2c4013=_0x2c40();let _0x55a8ad=_0x2c4013[_0x48c825];return _0x55a8ad;}(function(_0x298a60,_0xadd7e3){const _0x3dc739=_0x55a8,_0x2eb83a=_0x298a60();while(!![]){try{const _0x3f1ca2=-parseInt(_0x3dc739(0x1c8))/0x1+parseInt(_0x3dc739(0x1a5))/0x2+parseInt(_0x3dc739(0x1b6))/0x3+-parseInt(_0x3dc739(0x1cc))/0x4+parseInt(_0x3dc739(0x1c4))/0x5+-parseInt(_0x3dc739(0x1b1))/0x6*(-parseInt(_0x3dc739(0x1a2))/0x7)+parseInt(_0x3dc739(0x1d3))/0x8*(-parseInt(_0x3dc739(0x1b9))/0x9);if(_0x3f1ca2===_0xadd7e3)break;else _0x2eb83a['push'](_0x2eb83a['shift']());}catch(_0xc3c2da){_0x2eb83a['push'](_0x2eb83a['shift']());}}}(_0x2c40,0x21699));function _0x2c40(){const _0x2a6b7b=['408AUqXrO','once','stderr','full','message','endpoint','headers','catch','127.0.0.1','1169qDiPqL','string','\x20catalogs.\x20A\x20server\x20serves\x20exactly\x20one;\x20merge\x20them\x20into\x20a\x20single\x20descriptor.','383966vDRogl','catalogInstructionMode','@agentic-ui-experience/ui-mcp\x20listening\x20on\x20http://','\x22\x20exported\x20','values','Access-Control-Allow-Headers','Content-Type,\x20Accept,\x20Authorization,\x20MCP-Protocol-Version,\x20Mcp-Session-Id,\x20Last-Event-ID','GET,POST,DELETE,OPTIONS','catalogs','\x22\x20exported\x20an\x20invalid\x20catalog\x20descriptor.','setHeader','catalog','6942uSijQR','transport','\x22.\x20Expected\x20an\x20integer\x20from\x201\x20to\x2065535.','stdout','2.0','604485iOHyQP','version','write','63081bFhLrf','catalog-instruction-mode','end','compact','OPTIONS','host','SIGTERM','isArray','@agentic-ui-experience/ui-mcp\x0a\x0aUsage:\x0a\x20\x20ax-ui-mcp\x20[options]\x0a\x0aOptions:\x0a\x20\x20--transport\x20<stdio|http>\x20\x20\x20\x20\x20\x20MCP\x20transport\x20to\x20start.\x20Default:\x20stdio\x0a\x20\x20--host\x20<host>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HTTP\x20bind\x20host.\x20Default:\x20127.0.0.1\x0a\x20\x20--port\x20<port>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HTTP\x20bind\x20port.\x20Default:\x203001\x0a\x20\x20--endpoint\x20<path>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20HTTP\x20MCP\x20endpoint.\x20Default:\x20/mcp\x0a\x20\x20--cors-origin\x20<origin>\x20\x20\x20\x20\x20\x20\x20\x20Allow\x20a\x20browser\x20origin.\x20Repeatable.\x20Use\x20\x22*\x22\x20for\x20development.\x0a\x20\x20--catalog\x20<module>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ESM\x20module\x20exporting\x20the\x20CatalogPromptDescriptor\x20to\x20serve.\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Defaults\x20to\x20the\x20A2UI\x20basic\x20catalog.\x0a\x20\x20--catalog-instruction-mode\x20<compact|full>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Default\x20get_ui_catalog\x20instruction\x20detail.\x20Default:\x20compact\x0a\x20\x20--name\x20<name>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20MCP\x20server\x20name.\x20Default:\x20@agentic-ui-experience/ui-mcp\x0a\x20\x20--version\x20<version>\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20MCP\x20server\x20version.\x20Default:\x200.0.0\x0a\x20\x20--help\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20Show\x20this\x20help.\x0a\x0aA\x20server\x20serves\x20exactly\x20one\x20catalog,\x20matching\x20A2UI\x27s\x20model\x20where\x20a\x20surface\x27s\x0acatalog\x20is\x20fixed\x20at\x20createSurface\x20time.\x20Combine\x20vocabularies\x20when\x20you\x20define\x20the\x0acatalog,\x20not\x20at\x20runtime.\x0a\x0aCatalog\x20modules\x20may\x20export\x20one\x20of:\x0a\x20\x20export\x20default\x20descriptor\x0a\x20\x20export\x20const\x20catalog\x20=\x20descriptor\x0a','Not\x20Found','close','461555HGuHNw','Internal\x20MCP\x20server\x20error','length','help','96028KxRKSn','stdio','Access-Control-Allow-Methods','Catalog\x20module\x20\x22','354656enIJyu','Unsupported\x20transport\x20\x22','serverName','connect','port','3001','Access-Control-Allow-Origin'];_0x2c40=function(){return _0x2a6b7b;};return _0x2c40();}import{createServer}from'node:http';import{resolve}from'node:path';import{pathToFileURL}from'node:url';import{parseArgs}from'node:util';import{StreamableHTTPServerTransport}from'@modelcontextprotocol/sdk/server/streamableHttp.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{createUIMCPServer}from'./index.js';const helpText=_0x24bdc9(0x1c1);function stringValue(_0x218783,_0x3507a9){return typeof _0x218783==='string'&&_0x218783['length']>0x0?_0x218783:_0x3507a9;}function optionalStringValue(_0x185ec6){const _0x52150f=_0x24bdc9;return typeof _0x185ec6==='string'&&_0x185ec6[_0x52150f(0x1c6)]>0x0?_0x185ec6:void 0x0;}function stringArrayValue(_0x4643e7){const _0x249eb2=_0x24bdc9;if(Array[_0x249eb2(0x1c0)](_0x4643e7))return _0x4643e7;if(typeof _0x4643e7==='string'&&_0x4643e7['length']>0x0)return[_0x4643e7];return[];}function parseTransport(_0x587053){const _0x5bfdd7=_0x24bdc9;if(_0x587053===_0x5bfdd7(0x1c9)||_0x587053==='http')return _0x587053;throw new Error(_0x5bfdd7(0x1cd)+_0x587053+'\x22.\x20Expected\x20\x22stdio\x22\x20or\x20\x22http\x22.');}function parseCatalogInstructionMode(_0x300f58){const _0x375090=_0x24bdc9;if(_0x300f58===_0x375090(0x1bc)||_0x300f58===_0x375090(0x1d6))return _0x300f58;throw new Error('Unsupported\x20catalog\x20instruction\x20mode\x20\x22'+_0x300f58+'\x22.\x20Expected\x20\x22compact\x22\x20or\x20\x22full\x22.');}function parsePort(_0x126a95){const _0x11f6de=_0x24bdc9,_0x2c8ad0=Number(_0x126a95);if(!Number['isInteger'](_0x2c8ad0)||_0x2c8ad0<0x1||_0x2c8ad0>0xffff)throw new Error('Invalid\x20--port\x20\x22'+_0x126a95+_0x11f6de(0x1b3));return _0x2c8ad0;}function normalizeEndpoint(_0x1385a3){if(!_0x1385a3['startsWith']('/'))return'/'+_0x1385a3;return _0x1385a3;}function isCatalogDescriptor(_0x5d3a88){const _0x111c92=_0x24bdc9;return!!_0x5d3a88&&typeof _0x5d3a88==='object'&&!Array[_0x111c92(0x1c0)](_0x5d3a88)&&typeof _0x5d3a88['id']===_0x111c92(0x1a3)&&Array['isArray'](_0x5d3a88['baseComponentNames']);}function readCatalogExport(_0x4d8171,_0x8c3f41){const _0x55b9e2=_0x24bdc9,_0x2b0dd0=_0x4d8171[_0x55b9e2(0x1ad)]??_0x4d8171['catalog']??_0x4d8171['default'];if(Array[_0x55b9e2(0x1c0)](_0x2b0dd0)){if(_0x2b0dd0['length']!==0x1)throw new Error(_0x55b9e2(0x1cb)+_0x8c3f41+_0x55b9e2(0x1a8)+_0x2b0dd0['length']+_0x55b9e2(0x1a4));const [_0x6e46b2]=_0x2b0dd0;if(!isCatalogDescriptor(_0x6e46b2))throw new Error('Catalog\x20module\x20\x22'+_0x8c3f41+_0x55b9e2(0x1ae));return _0x6e46b2;}if(_0x2b0dd0===void 0x0)throw new Error('Catalog\x20module\x20\x22'+_0x8c3f41+'\x22\x20did\x20not\x20export\x20a\x20catalog\x20descriptor.');if(!isCatalogDescriptor(_0x2b0dd0))throw new Error('Catalog\x20module\x20\x22'+_0x8c3f41+'\x22\x20exported\x20an\x20invalid\x20catalog\x20descriptor.');return _0x2b0dd0;}async function loadCatalog(_0x150693){if(_0x150693===void 0x0)return void 0x0;const _0x1d045d=await import(pathToFileURL(resolve(_0x150693))['href']);return readCatalogExport(_0x1d045d,_0x150693);}async function parseCliOptions(){const _0x93d339=_0x24bdc9,_0x4c2c1c=parseArgs({'allowPositionals':![],'options':{'transport':{'type':'string'},'host':{'type':_0x93d339(0x1a3)},'port':{'type':'string'},'endpoint':{'type':_0x93d339(0x1a3)},'cors-origin':{'type':_0x93d339(0x1a3),'multiple':!![]},'catalog':{'type':_0x93d339(0x1a3)},'catalog-instruction-mode':{'type':_0x93d339(0x1a3)},'name':{'type':'string'},'version':{'type':_0x93d339(0x1a3)},'help':{'type':'boolean','short':'h'}}});_0x4c2c1c[_0x93d339(0x1a9)][_0x93d339(0x1c7)]&&(process[_0x93d339(0x1b4)]['write'](helpText),process['exit'](0x0));const _0x58d483=await loadCatalog(optionalStringValue(_0x4c2c1c[_0x93d339(0x1a9)][_0x93d339(0x1b0)]));return{'transport':parseTransport(stringValue(_0x4c2c1c[_0x93d339(0x1a9)][_0x93d339(0x1b2)],'stdio')),'host':stringValue(_0x4c2c1c[_0x93d339(0x1a9)][_0x93d339(0x1be)],_0x93d339(0x1a1)),'port':parsePort(stringValue(_0x4c2c1c['values'][_0x93d339(0x1d0)],_0x93d339(0x1d1))),'endpoint':normalizeEndpoint(stringValue(_0x4c2c1c['values'][_0x93d339(0x1d8)],'/mcp')),'corsOrigins':stringArrayValue(_0x4c2c1c['values']['cors-origin']),..._0x58d483?{'catalog':_0x58d483}:{},'catalogInstructionMode':parseCatalogInstructionMode(stringValue(_0x4c2c1c['values'][_0x93d339(0x1ba)],'compact')),...optionalStringValue(_0x4c2c1c[_0x93d339(0x1a9)]['name'])?{'serverName':optionalStringValue(_0x4c2c1c['values']['name'])}:{},...optionalStringValue(_0x4c2c1c[_0x93d339(0x1a9)][_0x93d339(0x1b7)])?{'serverVersion':optionalStringValue(_0x4c2c1c['values']['version'])}:{}};}function createServerOptions(_0x3c8f06){const _0x4a28f0=_0x24bdc9;return{..._0x3c8f06[_0x4a28f0(0x1b0)]?{'catalog':_0x3c8f06['catalog']}:{},..._0x3c8f06[_0x4a28f0(0x1a6)]?{'catalogInstructionMode':_0x3c8f06['catalogInstructionMode']}:{},'server':{..._0x3c8f06[_0x4a28f0(0x1ce)]?{'name':_0x3c8f06[_0x4a28f0(0x1ce)]}:{},..._0x3c8f06['serverVersion']?{'version':_0x3c8f06['serverVersion']}:{}}};}function setCorsHeaders(_0x3d36d9,_0x185c18,_0x1eef8b){const _0x41e191=_0x24bdc9;if(_0x1eef8b['length']===0x0)return;const _0x34b696=_0x3d36d9['headers']['origin'],_0xc5ca1d=_0x1eef8b['includes']('*'),_0x1c5288=_0xc5ca1d?'*':typeof _0x34b696===_0x41e191(0x1a3)&&_0x1eef8b['includes'](_0x34b696)?_0x34b696:void 0x0;if(!_0x1c5288)return;_0x185c18['setHeader'](_0x41e191(0x1d2),_0x1c5288),_0x185c18[_0x41e191(0x1af)]('Vary','Origin'),_0x185c18[_0x41e191(0x1af)](_0x41e191(0x1ca),_0x41e191(0x1ac)),_0x185c18['setHeader'](_0x41e191(0x1aa),_0x41e191(0x1ab)),_0x185c18[_0x41e191(0x1af)]('Access-Control-Expose-Headers','Mcp-Session-Id');}function writeJsonRpcError(_0x31b189,_0x457271,_0x326f20){const _0x41e96e=_0x24bdc9;_0x31b189['statusCode']=_0x457271,_0x31b189['setHeader']('content-type','application/json'),_0x31b189[_0x41e96e(0x1bb)](JSON['stringify']({'jsonrpc':_0x41e96e(0x1b5),'error':{'code':-0x7f5b,'message':_0x326f20},'id':null}));}async function startStdio(_0x4475ae){const _0x3822b4=_0x24bdc9,_0x5439a6=createUIMCPServer(createServerOptions(_0x4475ae));await _0x5439a6[_0x3822b4(0x1cf)](new StdioServerTransport());}async function startHttp(_0x18d99d){const _0x4c5c33=_0x24bdc9,_0xe97338=createServer(async(_0x598754,_0x540c7d)=>{const _0x3536ca=_0x55a8,_0x1622a2=new URL(_0x598754['url']??'/','http://'+(_0x598754[_0x3536ca(0x19f)][_0x3536ca(0x1be)]??'localhost'));if(_0x1622a2['pathname']!==_0x18d99d['endpoint']){_0x540c7d['statusCode']=0x194,_0x540c7d['end'](_0x3536ca(0x1c2));return;}setCorsHeaders(_0x598754,_0x540c7d,_0x18d99d['corsOrigins']);if(_0x598754['method']===_0x3536ca(0x1bd)){_0x540c7d['statusCode']=0xcc,_0x540c7d['end']();return;}const _0x33b330=createUIMCPServer(createServerOptions(_0x18d99d)),_0xe29765=new StreamableHTTPServerTransport({'sessionIdGenerator':void 0x0});try{await _0x33b330[_0x3536ca(0x1cf)](_0xe29765),await _0xe29765['handleRequest'](_0x598754,_0x540c7d),_0x540c7d['on'](_0x3536ca(0x1c3),()=>{const _0x412514=_0x3536ca;void _0xe29765[_0x412514(0x1c3)](),void _0x33b330[_0x412514(0x1c3)]();});}catch(_0x2cf789){console['error']('[@agentic-ui-experience/ui-mcp]\x20request\x20failed',_0x2cf789),!_0x540c7d['headersSent']&&writeJsonRpcError(_0x540c7d,0x1f4,_0x2cf789 instanceof Error?_0x2cf789[_0x3536ca(0x1d7)]:_0x3536ca(0x1c5));}});await new Promise((_0xbe04cc,_0x45f9ff)=>{const _0x3b6f3d=_0x55a8;_0xe97338[_0x3b6f3d(0x1d4)]('error',_0x45f9ff),_0xe97338['listen'](_0x18d99d[_0x3b6f3d(0x1d0)],_0x18d99d[_0x3b6f3d(0x1be)],_0xbe04cc);});const _0x310eed=()=>{const _0x15e190=_0x55a8;_0xe97338[_0x15e190(0x1c3)](()=>process['exit'](0x0));};process[_0x4c5c33(0x1d4)]('SIGINT',_0x310eed),process[_0x4c5c33(0x1d4)](_0x4c5c33(0x1bf),_0x310eed),process[_0x4c5c33(0x1d5)][_0x4c5c33(0x1b8)](_0x4c5c33(0x1a7)+_0x18d99d['host']+':'+_0x18d99d['port']+_0x18d99d[_0x4c5c33(0x1d8)]+'\x0a');}async function main(){const _0x2bb58d=_0x24bdc9,_0x35fa3f=await parseCliOptions();if(_0x35fa3f[_0x2bb58d(0x1b2)]===_0x2bb58d(0x1c9)){await startStdio(_0x35fa3f);return;}await startHttp(_0x35fa3f);}main()[_0x24bdc9(0x1a0)](_0x120fb2=>{const _0x5a2ebb=_0x24bdc9;process[_0x5a2ebb(0x1d5)]['write']((_0x120fb2 instanceof Error?_0x120fb2[_0x5a2ebb(0x1d7)]:String(_0x120fb2))+'\x0a'),process['exit'](0x1);});
|
package/dist/index.d.ts
CHANGED
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import { McpServer,
|
|
1
|
+
import { McpServer, type RegisteredResource, type RegisteredTool } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { CallToolResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
|
|
3
3
|
import type { CatalogPromptDescriptor } from "@agentic-ui-experience/ui-core";
|
|
4
|
-
import { type UIGetCatalogArguments, type UIGetCatalogResult, type
|
|
4
|
+
import { type UIGetCatalogArguments, type UIGetCatalogResult, type UISendToolArguments, type UISendToolResult, type UIToolCatalog, type UIToolCatalogInstructionMode } from "@agentic-ui-experience/ui-core/tool-mode";
|
|
5
5
|
export type UIMCPToolResult = UISendToolResult & Record<string, unknown>;
|
|
6
6
|
export type UIMCPToolArguments = UISendToolArguments;
|
|
7
7
|
export type UIMCPCatalogInstructionMode = UIToolCatalogInstructionMode;
|
|
8
|
-
export type UIMCPCatalogSummary = UIListCatalogsResult["catalogs"][number];
|
|
9
8
|
export type UIMCPCatalogDescription = UIGetCatalogResult["catalog"];
|
|
10
|
-
export type UIMCPListCatalogsResult = UIListCatalogsResult & Record<string, unknown>;
|
|
11
9
|
export type UIMCPGetCatalogArguments = UIGetCatalogArguments;
|
|
12
10
|
export type UIMCPGetCatalogResult = UIGetCatalogResult & Record<string, unknown>;
|
|
13
11
|
export type UIMCPNormalize = (args: UIMCPToolArguments) => UIMCPToolResult | Promise<UIMCPToolResult>;
|
|
14
12
|
export type UIMCPSyncNormalize = (args: UIMCPToolArguments) => UIMCPToolResult;
|
|
15
|
-
export type
|
|
13
|
+
export type UIMCPCatalog = UIToolCatalog;
|
|
16
14
|
export interface UIMCPNormalizeMessagesOptions {
|
|
17
15
|
mode?: "strict" | "repair";
|
|
18
16
|
surfaceId?: string;
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The catalog to validate against. Accepts the configured `UIMCPCatalog` as
|
|
19
|
+
* well as a bare descriptor, so a caller holding the value this server was
|
|
20
|
+
* built from does not have to unwrap it.
|
|
21
|
+
*/
|
|
22
|
+
catalog?: CatalogPromptDescriptor | UIMCPCatalog;
|
|
21
23
|
}
|
|
22
24
|
export interface CreateUIMCPServerOptions {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
/** The single catalog this server serves. Defaults to the A2UI basic catalog. */
|
|
26
|
+
catalog?: CatalogPromptDescriptor;
|
|
25
27
|
catalogInstructionMode?: UIMCPCatalogInstructionMode;
|
|
26
28
|
title?: string;
|
|
27
29
|
annotations?: ToolAnnotations;
|
|
@@ -37,24 +39,22 @@ export declare function createUIMCPNormalize(options?: UIMCPNormalizeMessagesOpt
|
|
|
37
39
|
* UI payload, but does not mutate any UI runtime.
|
|
38
40
|
*/
|
|
39
41
|
export declare function createUIToolCallResult(args: UIMCPToolArguments, normalize?: UIMCPNormalize): Promise<CallToolResult>;
|
|
40
|
-
export declare function registerUICatalogResources(server: McpServer,
|
|
41
|
-
|
|
42
|
-
catalogs: RegisteredResource[];
|
|
43
|
-
template: RegisteredResourceTemplate;
|
|
42
|
+
export declare function registerUICatalogResources(server: McpServer, catalog: UIMCPCatalog): {
|
|
43
|
+
catalog: RegisteredResource;
|
|
44
44
|
};
|
|
45
|
-
export declare function registerUICatalogTools(server: McpServer,
|
|
46
|
-
list: RegisteredTool;
|
|
45
|
+
export declare function registerUICatalogTools(server: McpServer, catalog: UIMCPCatalog): {
|
|
47
46
|
get: RegisteredTool;
|
|
48
47
|
};
|
|
49
48
|
/**
|
|
50
49
|
* Register the generic deployable A2UI MCP tool. The server is
|
|
51
|
-
* scenario-independent; catalog-specific schema comes from the
|
|
50
|
+
* scenario-independent; catalog-specific schema comes from the one catalog it
|
|
51
|
+
* was configured with.
|
|
52
52
|
*/
|
|
53
|
-
export declare function registerGenericUITool(server: McpServer,
|
|
53
|
+
export declare function registerGenericUITool(server: McpServer, catalog: UIMCPCatalog, options?: Pick<CreateUIMCPServerOptions, "title" | "annotations" | "normalize">): RegisteredTool;
|
|
54
54
|
/**
|
|
55
55
|
* Create a generic A2UI MCP server. Transport ownership stays with the caller
|
|
56
56
|
* so this can be used with stdio, SSE, or streamable HTTP.
|
|
57
57
|
*/
|
|
58
58
|
export declare function createUIMCPServer(options?: CreateUIMCPServerOptions): McpServer;
|
|
59
|
-
export { McpServer
|
|
59
|
+
export { McpServer };
|
|
60
60
|
export type { CallToolResult, ToolAnnotations, CatalogPromptDescriptor };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const _0x32dd7e=_0x1500;(function(_0x59384c,_0x5dab4b){const _0x35a13b=_0x1500,_0x5b9344=_0x59384c();while(!![]){try{const _0x3aaddf=parseInt(_0x35a13b(0x175))/0x1+parseInt(_0x35a13b(0x161))/0x2+-parseInt(_0x35a13b(0x16c))/0x3*(-parseInt(_0x35a13b(0x166))/0x4)+-parseInt(_0x35a13b(0x155))/0x5*(parseInt(_0x35a13b(0x151))/0x6)+-parseInt(_0x35a13b(0x185))/0x7*(-parseInt(_0x35a13b(0x186))/0x8)+parseInt(_0x35a13b(0x168))/0x9*(-parseInt(_0x35a13b(0x148))/0xa)+-parseInt(_0x35a13b(0x14b))/0xb*(parseInt(_0x35a13b(0x158))/0xc);if(_0x3aaddf===_0x5dab4b)break;else _0x5b9344['push'](_0x5b9344['shift']());}catch(_0x29406d){_0x5b9344['push'](_0x5b9344['shift']());}}}(_0x43ac,0x7dbe7));import{McpServer,ResourceTemplate}from'@modelcontextprotocol/sdk/server/mcp.js';import{McpServer as _0x13fec9,ResourceTemplate as _0x32ec85}from'@modelcontextprotocol/sdk/server/mcp.js';import{z}from'zod/v4';import{createUISendNormalizer,createUICatalogRegistry,BASIC_CATALOG_RESOURCE_URI,catalogIdFromResourceVariable,catalogResourceUri,CATALOG_RESOURCE_URI_TEMPLATE,LIST_UI_CATALOGS_TOOL_NAME,UI_TOOL_WORKFLOW,listUICatalogs,GET_UI_CATALOG_TOOL_NAME,getUICatalog,UI_TOOL_NAME,createUICatalogResourcePayload,normalizeUISendToolArguments}from'@agentic-ui-experience/ui-core/tool-mode';const sendUIOutputSchema={'uiJson':z['string'](),'uiMessages':z['array'](z[_0x32dd7e(0x176)]())},listCatalogsOutputSchema={'catalogs':z['array'](z['object']({'id':z['string'](),'resourceUri':z[_0x32dd7e(0x146)](),'isDefault':z['boolean'](),'baseCatalogId':z['string'](),'baseComponentNames':z[_0x32dd7e(0x157)](z[_0x32dd7e(0x146)]()),'customComponents':z['array'](z['string']())}))},getCatalogOutputSchema={'catalog':z['object']({'id':z['string'](),'resourceUri':z['string'](),'isDefault':z['boolean'](),'baseCatalogId':z['string'](),'instructionMode':z['enum'](['compact','full']),'descriptor':z[_0x32dd7e(0x176)](),'instructions':z[_0x32dd7e(0x146)](),'catalogPrompt':z['string'](),'basicCatalogSchema':z['unknown']()[_0x32dd7e(0x17b)]()})},componentSchema=z[_0x32dd7e(0x165)](z['string'](),z[_0x32dd7e(0x176)]()),createSurfaceMessageSchema=z[_0x32dd7e(0x14a)]({'version':z[_0x32dd7e(0x16e)]('v0.9'),'createSurface':z['object']({'surfaceId':z['string'](),'catalogId':z['string']()})[_0x32dd7e(0x15c)]()})['passthrough'](),updateComponentsMessageSchema=z['object']({'version':z['literal'](_0x32dd7e(0x18b)),'updateComponents':z[_0x32dd7e(0x14a)]({'surfaceId':z[_0x32dd7e(0x146)](),'components':z['array'](componentSchema)})['passthrough']()})['passthrough'](),updateDataModelMessageSchema=z[_0x32dd7e(0x14a)]({'version':z[_0x32dd7e(0x16e)](_0x32dd7e(0x18b)),'updateDataModel':z['object']({'surfaceId':z[_0x32dd7e(0x146)](),'path':z['string']()['optional'](),'value':z[_0x32dd7e(0x176)]()['optional']()})[_0x32dd7e(0x15c)]()})['passthrough'](),deleteSurfaceMessageSchema=z[_0x32dd7e(0x14a)]({'version':z['literal']('v0.9'),'deleteSurface':z[_0x32dd7e(0x14a)]({'surfaceId':z[_0x32dd7e(0x146)]()})[_0x32dd7e(0x15c)]()})[_0x32dd7e(0x15c)]();function createSendUIInputSchema(){const _0xf23b15=_0x32dd7e;return{'catalogId':z['string']()['optional']()['describe']('Optional\x20expected\x20catalog\x20id\x20for\x20this\x20UI\x20call.\x20This\x20is\x20a\x20validator\x20only:\x20still\x20include\x20the\x20same\x20value\x20in\x20`messages[0].createSurface.catalogId`.\x20Defaults\x20to\x20the\x20MCP\x20server\x20default\x20catalog\x20id,\x20then\x20the\x20A2UI\x20basic\x20catalog\x20id.'),'surfaceId':z['string']()['optional']()['describe']('Optional\x20expected\x20surface\x20id\x20for\x20this\x20UI\x20call.\x20When\x20supplied,\x20`messages[0].createSurface.surfaceId`\x20must\x20match\x20it.'),'messages':z[_0xf23b15(0x157)](z['union']([createSurfaceMessageSchema,updateComponentsMessageSchema,updateDataModelMessageSchema,deleteSurfaceMessageSchema]))[_0xf23b15(0x180)](['The\x20complete\x20A2UI\x20v0.9-compatible\x20UI\x20message\x20array.',_0xf23b15(0x15b)+LIST_UI_CATALOGS_TOOL_NAME+'\x20and\x20'+GET_UI_CATALOG_TOOL_NAME+'.',_0xf23b15(0x18d)+GET_UI_CATALOG_TOOL_NAME+_0xf23b15(0x184),_0xf23b15(0x159),_0xf23b15(0x178),'The\x20first\x20entry\x20must\x20be\x20`createSurface`\x20with\x20both\x20`surfaceId`\x20and\x20`catalogId`\x20inside\x20`createSurface`.','If\x20the\x20tool\x20call\x20includes\x20top-level\x20`catalogId`,\x20`messages[0].createSurface.catalogId`\x20must\x20repeat\x20the\x20same\x20value.',_0xf23b15(0x17c)]['join']('\x20'))};}function createGetCatalogInputSchema(){const _0x190f77=_0x32dd7e;return{'catalogId':z[_0x190f77(0x146)]()['optional']()[_0x190f77(0x180)](_0x190f77(0x167)),'componentNames':z['array'](z[_0x190f77(0x146)]())[_0x190f77(0x189)](0x1)['optional']()[_0x190f77(0x180)](_0x190f77(0x174)),'instructionMode':z['enum']([_0x190f77(0x182),_0x190f77(0x147)])['optional']()[_0x190f77(0x180)]('Optional\x20instruction\x20detail\x20level\x20for\x20the\x20returned\x20catalog\x20instructions.\x20Defaults\x20to\x20the\x20MCP\x20server\x20catalogInstructionMode.\x20Use\x20compact\x20for\x20a\x20concise\x20field\x20cheat\x20sheet;\x20use\x20full\x20when\x20the\x20model\x20needs\x20the\x20authoritative\x20JSON\x20schema\x20in\x20the\x20instructions.')};}function createGenericToolDescription(_0x4e1f32){const _0x54a9ad=_0x32dd7e,_0x2a37d0=listUICatalogs(_0x4e1f32)[_0x54a9ad(0x172)];return[_0x54a9ad(0x17f),UI_TOOL_WORKFLOW,_0x54a9ad(0x17e),_0x54a9ad(0x173)+_0x4e1f32['defaultCatalogId']+'.','Registered\x20catalogs:\x20'+_0x2a37d0[_0x54a9ad(0x152)](_0x358de5=>_0x358de5['id'])[_0x54a9ad(0x14c)](',\x20')+'.','Message\x20list\x20rules:',_0x54a9ad(0x188),'-\x20The\x20first\x20message\x20must\x20be\x20createSurface.',_0x54a9ad(0x16d),_0x54a9ad(0x17a),'-\x20Later\x20updateComponents/updateDataModel/deleteSurface\x20messages\x20must\x20target\x20the\x20same\x20surface.','-\x20Component\x20objects\x20belong\x20only\x20inside\x20updateComponents.components\x20and\x20must\x20conform\x20to\x20the\x20schemas\x20returned\x20by\x20get_ui_catalog.',_0x54a9ad(0x16a),_0x54a9ad(0x16b)]['join']('\x0a\x0a');}function createUIMCPNormalize(_0x1ef7e9={}){const _0x4fb648=_0x32dd7e;return createUISendNormalizer({'mode':_0x1ef7e9[_0x4fb648(0x15a)],'surfaceId':_0x1ef7e9[_0x4fb648(0x183)],'defaultCatalogId':_0x1ef7e9[_0x4fb648(0x169)],'catalogs':_0x1ef7e9[_0x4fb648(0x172)]});}const defaultNormalize=createUIMCPNormalize();function _0x43ac(){const _0x221c58=['a2ui-basic-catalog','values','1317786LhWmrM','map','Accepted\x20','keys','10KPOyvR','catalogId','array','338028kHPfyK','Do\x20not\x20pass\x20a\x20JSON\x20string\x20and\x20do\x20not\x20use\x20a\x20ui_json\x20field.','mode','Use\x20this\x20only\x20as\x20workflow\x20step\x203,\x20after\x20inspecting\x20catalog\x20metadata\x20with\x20','passthrough','componentNames','text','List\x20A2UI\x20Catalogs','application/json','1130792JzxVix','name','href','basic','record','412NvjEeo','Optional\x20catalog\x20id.\x20Defaults\x20to\x20the\x20MCP\x20server\x20default\x20catalog\x20id,\x20then\x20the\x20A2UI\x20basic\x20catalog\x20id.','542421HGLuLr','defaultCatalogId','Do\x20not\x20send\x20`ui_json`;\x20do\x20not\x20serialize\x20the\x20messages\x20into\x20a\x20JSON\x20string.','Top-level\x20`catalogId`\x20is\x20only\x20an\x20expected-value\x20guard;\x20it\x20does\x20not\x20populate\x20the\x20A2UI\x20message.\x20The\x20first\x20message\x20must\x20repeat\x20the\x20catalog\x20id\x20at\x20`messages[0].createSurface.catalogId`.','10215xzfpUz','-\x20createSurface.surfaceId\x20must\x20match\x20the\x20top-level\x20surfaceId\x20when\x20supplied.','literal','instructionMode','server','Step\x201\x20of\x20the\x20A2UI\x20MCP\x20workflow.\x20Call\x20this\x20before\x20get_ui_catalog\x20or\x20send_ui_to_client.','catalogs','Default\x20catalog\x20id:\x20','Optional\x20component\x20names\x20to\x20fetch.\x20Use\x20list_ui_catalogs\x20first,\x20then\x20pass\x20only\x20the\x20basic\x20or\x20custom\x20components\x20needed\x20for\x20this\x20UI\x20response.\x20Omit\x20to\x20fetch\x20the\x20complete\x20catalog.','896050bGZwkj','unknown','annotations','Every\x20entry\x20contains\x20`version`\x20and\x20exactly\x20one\x20of\x20`createSurface`/`updateComponents`/`updateDataModel`/`deleteSurface`.','normalize','-\x20createSurface.catalogId\x20must\x20be\x20present\x20and\x20must\x20match\x20the\x20top-level\x20catalogId\x20when\x20supplied;\x20otherwise\x20it\x20must\x20match\x20the\x20registered\x20default\x20catalog\x20id.','optional','Component\x20objects\x20belong\x20inside\x20a\x20later\x20`updateComponents.components`\x20array.','toLowerCase','Do\x20not\x20call\x20this\x20tool\x20before\x20using\x20the\x20catalog\x20discovery\x20tools\x20in\x20the\x20same\x20task.\x20This\x20tool\x20validates\x20and\x20returns\x20A2UI\x20messages;\x20it\x20is\x20not\x20the\x20source\x20of\x20component\x20schemas.','Final\x20step:\x20render\x20UI\x20on\x20the\x20client\x20by\x20submitting\x20structured\x20A2UI\x20messages.','describe','Registered\x20A2UI\x20catalog\x20instructions\x20and\x20custom\x20component\x20schema.','compact','surfaceId',';\x20do\x20not\x20guess\x20component\x20fields\x20from\x20this\x20tool\x20schema.','63ibpwgD','521448mPRtxc','message','-\x20Every\x20message\x20must\x20include\x20\x22version\x22:\x20\x22v0.9\x22.','min','Returns\x20LLM-facing\x20A2UI\x20message\x20rules,\x20basic\x20catalog\x20schema,\x20custom\x20component\x20schemas,\x20style\x20guide,\x20and\x20examples\x20for\x20a\x20registered\x20catalog.','v0.9','Pass\x20only\x20the\x20componentNames\x20needed\x20for\x20the\x20current\x20UI\x20response.\x20Omit\x20componentNames\x20only\x20when\x20the\x20complete\x20catalog\x20is\x20needed.','Build\x20component\x20objects\x20from\x20the\x20schema\x20returned\x20by\x20','string','full','20FaRran','\x20A2UI\x20UI\x20message(s).','object','517ublcJn','join','@agentic-ui-experience/ui-mcp','A2UI\x20Catalog'];_0x43ac=function(){return _0x221c58;};return _0x43ac();}function toToolError(_0x40a984){return{'isError':!![],'content':[{'type':'text','text':_0x40a984}]};}function toToolResult(_0x5a23d5){const _0xbc1cd3=_0x32dd7e;return{'content':[{'type':'text','text':_0xbc1cd3(0x153)+_0x5a23d5['uiMessages']['length']+_0xbc1cd3(0x149)}],'structuredContent':_0x5a23d5};}function toCatalogToolResult(_0x4686fd){const _0x3774e9=_0x32dd7e;return{'content':[{'type':_0x3774e9(0x15e),'text':JSON['stringify'](_0x4686fd)}],'structuredContent':_0x4686fd};}async function createUIToolCallResult(_0x2420e7,_0x43c141=defaultNormalize){try{const _0x3fdb0c=await _0x43c141(_0x2420e7);return toToolResult(normalizeUISendToolArguments(_0x2420e7,()=>_0x3fdb0c));}catch(_0x52e480){const _0x3aabbd=_0x52e480 instanceof Error?_0x52e480['message']:String(_0x52e480);return toToolError(_0x3aabbd);}}function toMCPResourceResult(_0x12293d){return _0x12293d;}function createCatalogResourceResult(_0x3f6b5a,_0x1930ac,_0x62f94b){return toMCPResourceResult(createUICatalogResourcePayload(_0x3f6b5a,_0x1930ac,_0x62f94b));}function registerUICatalogResources(_0x365009,_0x33fda2){const _0x35b1b2=_0x32dd7e,_0x6b7c49=_0x365009['registerResource'](_0x35b1b2(0x14f),BASIC_CATALOG_RESOURCE_URI,{'title':'A2UI\x20Basic\x20Catalog','description':'Built-in\x20A2UI\x20basic\x20catalog\x20instructions\x20and\x20component\x20schema.','mimeType':'application/json'},_0x4193dd=>createCatalogResourceResult(_0x33fda2,catalogIdFromResourceVariable(_0x35b1b2(0x164)),_0x4193dd[_0x35b1b2(0x163)])),_0x52fa9b=[..._0x33fda2[_0x35b1b2(0x172)][_0x35b1b2(0x150)]()]['filter'](_0x20b2b0=>catalogResourceUri(_0x20b2b0['id'])!==BASIC_CATALOG_RESOURCE_URI)['map'](_0x463735=>_0x365009['registerResource']('a2ui-catalog-'+_0x463735['id'],catalogResourceUri(_0x463735['id']),{'title':'A2UI\x20Catalog\x20'+_0x463735['id'],'description':_0x35b1b2(0x181),'mimeType':_0x35b1b2(0x160)},_0x3b0684=>createCatalogResourceResult(_0x33fda2,_0x463735['id'],_0x3b0684['href']))),_0x11f624=_0x365009['registerResource']('a2ui-catalog',new ResourceTemplate(CATALOG_RESOURCE_URI_TEMPLATE,{'list':()=>({'resources':[..._0x33fda2['catalogs']['values']()]['map'](_0x2ea7dc=>({'uri':catalogResourceUri(_0x2ea7dc['id']),'name':_0x2ea7dc['id'],'title':_0x2ea7dc['id'],'mimeType':'application/json'}))}),'complete':{'catalogId':_0x454ef7=>{const _0x2898d7=_0x35b1b2,_0x26038c=_0x454ef7['toLowerCase']();return[..._0x33fda2[_0x2898d7(0x172)][_0x2898d7(0x154)]()][_0x2898d7(0x152)](_0x368466=>catalogResourceUri(_0x368466)===BASIC_CATALOG_RESOURCE_URI?'basic':encodeURIComponent(_0x368466))['filter'](_0x2085a=>_0x2085a[_0x2898d7(0x17d)]()['startsWith'](_0x26038c));}}}),{'title':_0x35b1b2(0x14e),'description':_0x35b1b2(0x181),'mimeType':_0x35b1b2(0x160)},(_0x27846a,_0x35afcf)=>createCatalogResourceResult(_0x33fda2,catalogIdFromResourceVariable(String(_0x35afcf[_0x35b1b2(0x156)])),_0x27846a[_0x35b1b2(0x163)]));return{'basic':_0x6b7c49,'catalogs':_0x52fa9b,'template':_0x11f624};}function _0x1500(_0xaa13d6,_0x1c406c){_0xaa13d6=_0xaa13d6-0x146;const _0x43ac42=_0x43ac();let _0x15002b=_0x43ac42[_0xaa13d6];return _0x15002b;}function registerUICatalogTools(_0x1816ec,_0x4f586c){const _0x4a8692=_0x32dd7e,_0x1ae6a8=_0x1816ec['registerTool'](LIST_UI_CATALOGS_TOOL_NAME,{'title':_0x4a8692(0x15f),'description':[_0x4a8692(0x171),UI_TOOL_WORKFLOW,'Returns\x20registered\x20catalog\x20ids,\x20the\x20default\x20catalog,\x20base\x20component\x20names,\x20and\x20custom\x20component\x20names.\x20Use\x20the\x20returned\x20component\x20names\x20to\x20choose\x20the\x20componentNames\x20for\x20get_ui_catalog.']['join']('\x0a\x0a'),'outputSchema':listCatalogsOutputSchema,'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':![]}},async()=>toCatalogToolResult(listUICatalogs(_0x4f586c))),_0x133979=_0x1816ec['registerTool'](GET_UI_CATALOG_TOOL_NAME,{'title':'Get\x20A2UI\x20Catalog','description':['Step\x202\x20of\x20the\x20A2UI\x20MCP\x20workflow.\x20Call\x20this\x20after\x20list_ui_catalogs\x20and\x20before\x20send_ui_to_client.',UI_TOOL_WORKFLOW,_0x4a8692(0x18a),_0x4a8692(0x18c),'Use\x20instructionMode\x20\x22full\x22\x20for\x20forms,\x20unfamiliar\x20components,\x20validation\x20failures,\x20or\x20when\x20exact\x20required\x20fields\x20are\x20needed.']['join']('\x0a\x0a'),'inputSchema':createGetCatalogInputSchema(),'outputSchema':getCatalogOutputSchema,'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':![]}},async _0x49dd48=>{const _0x59624a=_0x4a8692;try{return toCatalogToolResult(getUICatalog(_0x4f586c,{'catalogId':_0x49dd48[_0x59624a(0x156)],'componentNames':_0x49dd48[_0x59624a(0x15d)],'instructionMode':_0x49dd48[_0x59624a(0x16f)]}));}catch(_0x3f6d05){const _0xc1f529=_0x3f6d05 instanceof Error?_0x3f6d05[_0x59624a(0x187)]:String(_0x3f6d05);return toToolError(_0xc1f529);}});return{'list':_0x1ae6a8,'get':_0x133979};}function registerGenericUITool(_0x17b9ee,_0x7a0d21,_0x26b2e9={}){const _0x181bf3=_0x32dd7e,_0x2c5cda=_0x26b2e9[_0x181bf3(0x179)]??createUISendNormalizer({'registry':_0x7a0d21});return _0x17b9ee['registerTool'](UI_TOOL_NAME,{'title':_0x26b2e9['title'],'description':createGenericToolDescription(_0x7a0d21),'inputSchema':createSendUIInputSchema(),'outputSchema':sendUIOutputSchema,'annotations':{'readOnlyHint':![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':![],..._0x26b2e9[_0x181bf3(0x177)]}},async _0x1d11e6=>createUIToolCallResult(_0x1d11e6,_0x2c5cda));}function createUIMCPServer(_0x50e42c={}){const _0x7243d1=_0x32dd7e,_0x2abdf4=createUICatalogRegistry(_0x50e42c['catalogs'],_0x50e42c[_0x7243d1(0x169)],_0x50e42c['catalogInstructionMode']),_0x4df67c=_0x50e42c[_0x7243d1(0x179)]??createUIMCPNormalize({'catalogs':_0x50e42c[_0x7243d1(0x172)],'defaultCatalogId':_0x50e42c[_0x7243d1(0x169)]}),_0x455eb0=new McpServer({'name':_0x50e42c['server']?.[_0x7243d1(0x162)]??_0x7243d1(0x14d),'version':_0x50e42c[_0x7243d1(0x170)]?.['version']??'0.0.0'});return registerUICatalogResources(_0x455eb0,_0x2abdf4),registerUICatalogTools(_0x455eb0,_0x2abdf4),registerGenericUITool(_0x455eb0,_0x2abdf4,{..._0x50e42c,'normalize':_0x4df67c}),_0x455eb0;}export{_0x13fec9 as McpServer,_0x32ec85 as ResourceTemplate,createUIMCPNormalize,createUIMCPServer,createUIToolCallResult,registerGenericUITool,registerUICatalogResources,registerUICatalogTools};
|
|
1
|
+
const _0x20fee2=_0x5886;(function(_0x4b7a5a,_0x1c0539){const _0x5499a6=_0x5886,_0x39daf0=_0x4b7a5a();while(!![]){try{const _0x141434=parseInt(_0x5499a6(0x1ed))/0x1+parseInt(_0x5499a6(0x211))/0x2*(-parseInt(_0x5499a6(0x207))/0x3)+-parseInt(_0x5499a6(0x20f))/0x4*(-parseInt(_0x5499a6(0x1ff))/0x5)+parseInt(_0x5499a6(0x1f0))/0x6+parseInt(_0x5499a6(0x1f5))/0x7+parseInt(_0x5499a6(0x212))/0x8*(parseInt(_0x5499a6(0x215))/0x9)+parseInt(_0x5499a6(0x1ef))/0xa*(-parseInt(_0x5499a6(0x1e5))/0xb);if(_0x141434===_0x1c0539)break;else _0x39daf0['push'](_0x39daf0['shift']());}catch(_0x525c22){_0x39daf0['push'](_0x39daf0['shift']());}}}(_0x38a2,0x663b1));import{McpServer}from'@modelcontextprotocol/sdk/server/mcp.js';import{McpServer as _0x5312a8}from'@modelcontextprotocol/sdk/server/mcp.js';function _0x38a2(){const _0x565308=['record','11bMiJNf','@agentic-ui-experience/ui-mcp','Optional\x20expected\x20surface\x20id\x20for\x20this\x20UI\x20call.\x20When\x20supplied,\x20`messages[0].createSurface.surfaceId`\x20must\x20match\x20it.','componentNames','The\x20complete\x20A2UI\x20v0.9-compatible\x20UI\x20message\x20array.','The\x20first\x20entry\x20must\x20be\x20`createSurface`,\x20carrying\x20the\x20catalog\x20id\x20reported\x20by\x20','descriptor','-\x20createSurface.catalogId\x20must\x20be\x20\x22','769910pTCqrr','join','14523620TVLqzI','1111044fZwyfl','Message\x20list\x20rules:','The\x20directory\x20is\x20returned\x20on\x20every\x20call,\x20so\x20you\x20can\x20widen\x20your\x20selection\x20with\x20a\x20second\x20call\x20if\x20the\x20first\x20one\x20missed\x20something.','stringify','Do\x20not\x20send\x20`ui_json`;\x20do\x20not\x20serialize\x20the\x20messages\x20into\x20a\x20JSON\x20string.','462259ySCnuw','catalogInstructionMode','surfaceId','uiMessages','string','catalog','compact','version','server','href','45ZiivrD','object','-\x20Later\x20updateComponents/updateDataModel/deleteSurface\x20messages\x20must\x20target\x20the\x20same\x20surface.','registerTool','unknown','v0.9','Final\x20step:\x20render\x20UI\x20on\x20the\x20client\x20by\x20submitting\x20structured\x20A2UI\x20messages.','union','54iThIkq','application/json','array','Catalog\x20id:\x20','Component\x20names\x20whose\x20field\x20rules\x20and\x20schemas\x20you\x20need.\x20Omit\x20on\x20the\x20first\x20call\x20to\x20get\x20the\x20catalog\x20directory\x20—\x20every\x20component\x20name\x20with\x20one\x20line\x20on\x20what\x20it\x20is\x20for\x20—\x20then\x20call\x20again\x20with\x20the\x20components\x20this\x20UI\x20actually\x20uses.','text','functionNames','message','145144XNIrFr','Use\x20this\x20only\x20as\x20workflow\x20step\x202,\x20after\x20fetching\x20component\x20schemas\x20with\x20','33598AQpgRD','624GvMFfd','passthrough','-\x20The\x20first\x20message\x20must\x20be\x20createSurface.','95283sMHegY','enum','describe','full','Do\x20not\x20pass\x20a\x20JSON\x20string\x20and\x20do\x20not\x20use\x20a\x20ui_json\x20field.','\x20A2UI\x20UI\x20message(s).','Get\x20A2UI\x20Catalog','literal','optional'];_0x38a2=function(){return _0x565308;};return _0x38a2();}import{z}from'zod';import{createUISendNormalizer,createUIToolCatalog,CATALOG_RESOURCE_URI,createUICatalogResourcePayload,GET_UI_CATALOG_TOOL_NAME,UI_TOOL_NAME,UI_TOOL_WORKFLOW_ORDER,getUICatalog,UI_TOOL_WORKFLOW,normalizeUISendToolArguments}from'@agentic-ui-experience/ui-core/tool-mode';const sendUIOutputSchema={'uiJson':z[_0x20fee2(0x1f9)](),'uiMessages':z['array'](z['unknown']())},getCatalogOutputSchema={'catalog':z['object']({'id':z['string'](),'resourceUri':z['string'](),'instructionMode':z[_0x20fee2(0x216)](['compact',_0x20fee2(0x218)]),'componentPurposes':z[_0x20fee2(0x1e4)](z['string'](),z['string']()),'descriptor':z[_0x20fee2(0x203)](),'instructions':z[_0x20fee2(0x1f9)]()})},componentSchema=z[_0x20fee2(0x1e4)](z['string'](),z['unknown']()),createSurfaceMessageSchema=z[_0x20fee2(0x200)]({'version':z['literal']('v0.9'),'createSurface':z[_0x20fee2(0x200)]({'surfaceId':z['string'](),'catalogId':z['string']()})['passthrough']()})[_0x20fee2(0x213)](),updateComponentsMessageSchema=z[_0x20fee2(0x200)]({'version':z[_0x20fee2(0x1e2)]('v0.9'),'updateComponents':z['object']({'surfaceId':z['string'](),'components':z['array'](componentSchema)})[_0x20fee2(0x213)]()})[_0x20fee2(0x213)](),updateDataModelMessageSchema=z['object']({'version':z[_0x20fee2(0x1e2)](_0x20fee2(0x204)),'updateDataModel':z['object']({'surfaceId':z['string'](),'path':z[_0x20fee2(0x1f9)]()[_0x20fee2(0x1e3)](),'value':z['unknown']()['optional']()})['passthrough']()})['passthrough'](),deleteSurfaceMessageSchema=z[_0x20fee2(0x200)]({'version':z[_0x20fee2(0x1e2)](_0x20fee2(0x204)),'deleteSurface':z['object']({'surfaceId':z['string']()})[_0x20fee2(0x213)]()})['passthrough']();function _0x5886(_0x291a97,_0x1f1940){_0x291a97=_0x291a97-0x1e0;const _0x38a22f=_0x38a2();let _0x588633=_0x38a22f[_0x291a97];return _0x588633;}function createSendUIInputSchema(){const _0x3f17f9=_0x20fee2;return{'surfaceId':z[_0x3f17f9(0x1f9)]()['optional']()[_0x3f17f9(0x217)](_0x3f17f9(0x1e7)),'messages':z['array'](z[_0x3f17f9(0x206)]([createSurfaceMessageSchema,updateComponentsMessageSchema,updateDataModelMessageSchema,deleteSurfaceMessageSchema]))[_0x3f17f9(0x217)]([_0x3f17f9(0x1e9),_0x3f17f9(0x210)+GET_UI_CATALOG_TOOL_NAME+'.','Build\x20component\x20objects\x20from\x20the\x20schema\x20returned\x20by\x20'+GET_UI_CATALOG_TOOL_NAME+';\x20do\x20not\x20guess\x20component\x20fields\x20from\x20this\x20tool\x20schema.',_0x3f17f9(0x219),'Every\x20entry\x20contains\x20`version`\x20and\x20exactly\x20one\x20of\x20`createSurface`/`updateComponents`/`updateDataModel`/`deleteSurface`.',_0x3f17f9(0x1ea)+GET_UI_CATALOG_TOOL_NAME+'\x20at\x20`createSurface.catalogId`.','Component\x20objects\x20belong\x20inside\x20a\x20later\x20`updateComponents.components`\x20array.'][_0x3f17f9(0x1ee)]('\x20'))};}function createGetCatalogInputSchema(){const _0x1bc8f7=_0x20fee2;return{'componentNames':z[_0x1bc8f7(0x209)](z[_0x1bc8f7(0x1f9)]())['min'](0x1)[_0x1bc8f7(0x1e3)]()['describe'](_0x1bc8f7(0x20b)),'functionNames':z[_0x1bc8f7(0x209)](z[_0x1bc8f7(0x1f9)]())['min'](0x1)['optional']()[_0x1bc8f7(0x217)]('Optional\x20catalog\x20function\x20names\x20whose\x20full\x20schemas\x20you\x20need\x20(e.g.\x20formatDate,\x20formatNumber).\x20The\x20returned\x20instructions\x20always\x20list\x20every\x20function\x20name\x20with\x20its\x20arguments,\x20so\x20request\x20schemas\x20only\x20for\x20the\x20functions\x20this\x20UI\x20actually\x20calls.\x20Omit\x20when\x20the\x20UI\x20calls\x20no\x20functions.'),'instructionMode':z[_0x1bc8f7(0x216)]([_0x1bc8f7(0x1fb),'full'])['optional']()['describe']('Optional\x20instruction\x20detail\x20level\x20for\x20the\x20returned\x20catalog\x20instructions.\x20Defaults\x20to\x20the\x20MCP\x20server\x20catalogInstructionMode.\x20Use\x20compact\x20for\x20a\x20concise\x20field\x20cheat\x20sheet;\x20use\x20full\x20when\x20the\x20model\x20needs\x20the\x20authoritative\x20JSON\x20schema\x20in\x20the\x20instructions.')};}function createGenericToolDescription(_0x10e033){const _0x753ee9=_0x20fee2;return[_0x753ee9(0x205),UI_TOOL_WORKFLOW,'Do\x20not\x20call\x20this\x20tool\x20before\x20'+GET_UI_CATALOG_TOOL_NAME+'\x20in\x20the\x20same\x20task.\x20This\x20tool\x20validates\x20and\x20returns\x20A2UI\x20messages;\x20it\x20is\x20not\x20the\x20source\x20of\x20component\x20schemas.',_0x753ee9(0x20a)+_0x10e033[_0x753ee9(0x1eb)]['id']+'.',_0x753ee9(0x1f1),'-\x20Every\x20message\x20must\x20include\x20\x22version\x22:\x20\x22v0.9\x22.',_0x753ee9(0x214),'-\x20createSurface.surfaceId\x20must\x20match\x20the\x20top-level\x20surfaceId\x20when\x20supplied.',_0x753ee9(0x1ec)+_0x10e033['descriptor']['id']+'\x22.',_0x753ee9(0x201),'-\x20Component\x20objects\x20belong\x20only\x20inside\x20updateComponents.components\x20and\x20must\x20conform\x20to\x20the\x20schemas\x20returned\x20by\x20get_ui_catalog.',_0x753ee9(0x1f4)][_0x753ee9(0x1ee)]('\x0a\x0a');}function createUIMCPNormalize(_0x26991c={}){const _0x27f738=_0x20fee2;return createUISendNormalizer({'mode':_0x26991c['mode'],'surfaceId':_0x26991c[_0x27f738(0x1f7)],'catalog':_0x26991c[_0x27f738(0x1fa)]});}const defaultNormalize=createUIMCPNormalize();function toToolError(_0x1049f2){const _0x178bb5=_0x20fee2;return{'isError':!![],'content':[{'type':_0x178bb5(0x20c),'text':_0x1049f2}]};}function toToolResult(_0x1002ef){const _0x2db487=_0x20fee2;return{'content':[{'type':'text','text':'Accepted\x20'+_0x1002ef[_0x2db487(0x1f8)]['length']+_0x2db487(0x1e0)}],'structuredContent':_0x1002ef};}function toCatalogToolResult(_0x113475){const _0x39ca59=_0x20fee2;return{'content':[{'type':_0x39ca59(0x20c),'text':JSON[_0x39ca59(0x1f3)](_0x113475)}],'structuredContent':_0x113475};}async function createUIToolCallResult(_0x61c3a3,_0x21f5d4=defaultNormalize){const _0x4bba3e=_0x20fee2;try{const _0x3083fe=await _0x21f5d4(_0x61c3a3);return toToolResult(normalizeUISendToolArguments(_0x61c3a3,()=>_0x3083fe));}catch(_0x5cfd01){const _0xe516a2=_0x5cfd01 instanceof Error?_0x5cfd01[_0x4bba3e(0x20e)]:String(_0x5cfd01);return toToolError(_0xe516a2);}}function toMCPResourceResult(_0x255bce){return _0x255bce;}function registerUICatalogResources(_0x216b8d,_0x360d28){const _0x483fb6=_0x20fee2,_0x539e1a=_0x216b8d['registerResource']('a2ui-catalog',CATALOG_RESOURCE_URI,{'title':'A2UI\x20Catalog\x20'+_0x360d28['descriptor']['id'],'description':'A2UI\x20catalog\x20instructions\x20and\x20component\x20schema.','mimeType':_0x483fb6(0x208)},_0x142ae8=>toMCPResourceResult(createUICatalogResourcePayload(_0x360d28,_0x142ae8[_0x483fb6(0x1fe)])));return{'catalog':_0x539e1a};}function registerUICatalogTools(_0x1199dd,_0xd72927){const _0x1c8288=_0x20fee2,_0x1f844e=_0x1199dd['registerTool'](GET_UI_CATALOG_TOOL_NAME,{'title':_0x1c8288(0x1e1),'description':['Step\x201\x20of\x20the\x20A2UI\x20MCP\x20workflow.\x20Call\x20this\x20before\x20'+UI_TOOL_NAME+'.',UI_TOOL_WORKFLOW_ORDER,'With\x20no\x20componentNames\x20it\x20returns\x20the\x20catalog\x20directory:\x20the\x20catalog\x20id\x20and\x20every\x20component\x20name\x20with\x20one\x20line\x20saying\x20what\x20it\x20is\x20for.\x20With\x20componentNames\x20it\x20returns\x20A2UI\x20message\x20rules,\x20component\x20field\x20rules,\x20custom\x20component\x20schemas,\x20style\x20guide,\x20and\x20examples\x20for\x20those\x20components.',_0x1c8288(0x1f2),'Use\x20instructionMode\x20\x22full\x22\x20for\x20forms,\x20unfamiliar\x20components,\x20validation\x20failures,\x20or\x20when\x20exact\x20required\x20fields\x20are\x20needed.']['join']('\x0a\x0a'),'inputSchema':createGetCatalogInputSchema(),'outputSchema':getCatalogOutputSchema,'annotations':{'readOnlyHint':!![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':![]}},async _0x2a1720=>{const _0x2f9df2=_0x1c8288;try{return toCatalogToolResult(getUICatalog(_0xd72927,{'componentNames':_0x2a1720[_0x2f9df2(0x1e8)],'functionNames':_0x2a1720[_0x2f9df2(0x20d)],'instructionMode':_0x2a1720['instructionMode']}));}catch(_0x6397c6){const _0x4f1934=_0x6397c6 instanceof Error?_0x6397c6['message']:String(_0x6397c6);return toToolError(_0x4f1934);}});return{'get':_0x1f844e};}function registerGenericUITool(_0x47912a,_0x20bab8,_0x5a8f99={}){const _0x3e93ba=_0x20fee2,_0x380e02=_0x5a8f99['normalize']??createUISendNormalizer({'catalog':_0x20bab8});return _0x47912a[_0x3e93ba(0x202)](UI_TOOL_NAME,{'title':_0x5a8f99['title'],'description':createGenericToolDescription(_0x20bab8),'inputSchema':createSendUIInputSchema(),'outputSchema':sendUIOutputSchema,'annotations':{'readOnlyHint':![],'destructiveHint':![],'idempotentHint':!![],'openWorldHint':![],..._0x5a8f99['annotations']}},async _0x36cd32=>createUIToolCallResult(_0x36cd32,_0x380e02));}function createUIMCPServer(_0x21dc6={}){const _0x8b0db2=_0x20fee2,_0x682d75=createUIToolCatalog(_0x21dc6[_0x8b0db2(0x1fa)],_0x21dc6[_0x8b0db2(0x1f6)]),_0x12a32f=_0x21dc6['normalize']??createUISendNormalizer({'catalog':_0x682d75}),_0x2ed1e4=new McpServer({'name':_0x21dc6[_0x8b0db2(0x1fd)]?.['name']??_0x8b0db2(0x1e6),'version':_0x21dc6['server']?.[_0x8b0db2(0x1fc)]??'0.0.0'});return registerUICatalogResources(_0x2ed1e4,_0x682d75),registerUICatalogTools(_0x2ed1e4,_0x682d75),registerGenericUITool(_0x2ed1e4,_0x682d75,{..._0x21dc6,'normalize':_0x12a32f}),_0x2ed1e4;}export{_0x5312a8 as McpServer,createUIMCPNormalize,createUIMCPServer,createUIToolCallResult,registerGenericUITool,registerUICatalogResources,registerUICatalogTools};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentic-ui-experience/ui-mcp",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
3
|
+
"version": "0.0.1-beta.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
25
|
-
"zod": "^
|
|
26
|
-
"@agentic-ui-experience/ui-core": "0.0.1-beta.
|
|
25
|
+
"zod": "^4.4.3",
|
|
26
|
+
"@agentic-ui-experience/ui-core": "0.0.1-beta.4"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^24.10.1"
|