@craft-ts/function-registry-mcp 0.7.0-beta.15

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 ADDED
@@ -0,0 +1,50 @@
1
+ # Function registry MCP bridge
2
+
3
+ This package exposes the demo application's function registry through MCP over
4
+ stdio. It also listens on `ws://127.0.0.1:3333` for the browser application.
5
+
6
+ ```sh
7
+ npm run start --workspace @craft-ts/function-registry-mcp
8
+ ```
9
+
10
+ Set `REGISTRY_BRIDGE_HOST` and `REGISTRY_BRIDGE_PORT` to override the WebSocket
11
+ listener. MCP tools are `page`, `registry.clients`, `registry.list`, `registry.get`,
12
+ `registry.call`, primitive-specific value tools such as `registry.query.get`,
13
+ `registry.query.update`, `registry.mutation.patch`,
14
+ `registry.asyncProcess.set`, `registry.queryParams.update`,
15
+ `registry.override`, `registry.restore`, and `registry.logs`. Their WebSocket
16
+ methods use slash forms internally (`page`, `registry/list`, `registry/resource/update`,
17
+ etc.), and each request and response carries a `callId`.
18
+
19
+ `page` reads the named interactive surface (`data-craft-name`) on the connected
20
+ tab and can `act` (goto, fill, click, press) in the same round-trip. A read
21
+ without `act` still asks the live tab. Omit `clientId` when exactly one tab is
22
+ `ready`. A ghost `reloading` card (HMR, F5) does not count. Default `detail` is
23
+ `controls`; `dom-styles` is opt-in debug. The broker keeps the client card while
24
+ `ng serve` rebuilds and `page` waits until the tab is `ready` again. See the
25
+ demo docs page `/guide/ai/dev-page`.
26
+
27
+ Each browser tab keeps a stable `clientId` in `sessionStorage`. Duplicating a
28
+ tab copies it; the broker assigns a new id (`hello/ok`) so the two tabs do not
29
+ fight. Closing the tab sends `page/goodbye` and drops the card; opening a new
30
+ tab is a new id. Closing without goodbye (crash) looks like reload for up to
31
+ 20s. The broker keeps one socket and one snapshot per client instead of
32
+ choosing a global "latest" socket. Call `registry.clients` to list every card
33
+ (id, status, url). Two `ready` tabs require `clientId` — the error is
34
+ `Multiple ready page clients; clientId is required. Available clients: <id> ready <url>, <id> ready <url>`. If
35
+ `page client "<id>" is not connected`, list clients and retry without id when a
36
+ single ready remains. Never pick “latest”.
37
+
38
+ Runtime overrides are supported for insertion methods from `state`,
39
+ `insertSelect`, `query`, `asyncProcess`, `mutation`, and `queryParams`. The
40
+ override receives the matching primitive capability (`state`, `query`,
41
+ `asyncProcess`, `mutation`, or `queryParams`) plus `args`. Insertion methods are
42
+ published when their primitive is created, before their first UI invocation.
43
+
44
+ Primitive values from `query`, `asyncProcess`, `mutation`, and `queryParams` are
45
+ also published directly. Use the primitive-specific tools on the root primitive
46
+ entry, for example `registry.query.update` on
47
+ `query <= route:list#1 > component:List#2`, or `registry.queryParams.patch` on
48
+ `queryParams <= route:list#1 > component:List#2`. For `query`, `asyncProcess`,
49
+ and `mutation` primitives with identifiers, pass `id` to target the selected
50
+ instance; without `id`, the operation targets the by-id state record.
@@ -0,0 +1,20 @@
1
+ import type { RegistryBrokerMethod, RegistryClient, RegistrySnapshot } from './protocol.js';
2
+ export declare class RegistryBridgeBroker {
3
+ #private;
4
+ constructor({ host, port, requestTimeoutMs, heartbeatIntervalMs, heartbeatTimeoutMs, }?: {
5
+ host?: string;
6
+ port?: number;
7
+ requestTimeoutMs?: number;
8
+ heartbeatIntervalMs?: number;
9
+ heartbeatTimeoutMs?: number;
10
+ });
11
+ get clients(): readonly RegistryClient[];
12
+ snapshot(clientId: string): RegistrySnapshot;
13
+ ready(): Promise<void>;
14
+ address(): {
15
+ host: string;
16
+ port: number;
17
+ };
18
+ request(method: RegistryBrokerMethod, params?: Readonly<Record<string, unknown>>): Promise<unknown>;
19
+ close(): Promise<void>;
20
+ }
@@ -0,0 +1,525 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { WebSocket, WebSocketServer, } from 'ws';
3
+ const DEFAULT_PAGE_TIMEOUT_MS = 20_000;
4
+ const RELOADING_CARD_TTL_MS = 20_000;
5
+ export class RegistryBridgeBroker {
6
+ #server;
7
+ #pending = new Map();
8
+ #clients = new Map();
9
+ #socketClientIds = new WeakMap();
10
+ #heartbeats = new WeakMap();
11
+ #requestTimeoutMs;
12
+ #heartbeatIntervalMs;
13
+ #heartbeatTimeoutMs;
14
+ constructor({ host = '127.0.0.1', port = 3333, requestTimeoutMs = 10_000, heartbeatIntervalMs = 5_000, heartbeatTimeoutMs = 15_000, } = {}) {
15
+ const options = { host, port };
16
+ this.#server = new WebSocketServer(options);
17
+ this.#requestTimeoutMs = requestTimeoutMs;
18
+ this.#heartbeatIntervalMs = heartbeatIntervalMs;
19
+ this.#heartbeatTimeoutMs = heartbeatTimeoutMs;
20
+ this.#server.on('connection', (socket) => this.#handleConnection(socket));
21
+ }
22
+ get clients() {
23
+ return Array.from(this.#clients.values(), (client) => ({
24
+ clientId: client.clientId,
25
+ connectedAt: client.connectedAt,
26
+ status: client.status,
27
+ generation: client.generation,
28
+ ...(client.pageUrl === undefined ? {} : { pageUrl: client.pageUrl }),
29
+ ...(client.pageTitle === undefined
30
+ ? {}
31
+ : { pageTitle: client.pageTitle }),
32
+ entryCount: client.snapshot.entries.length,
33
+ logCount: client.snapshot.logs.length,
34
+ }));
35
+ }
36
+ snapshot(clientId) {
37
+ return this.#requireRegistryClient(clientId).snapshot;
38
+ }
39
+ async ready() {
40
+ if (this.#server.address() !== null) {
41
+ return;
42
+ }
43
+ await new Promise((resolve, reject) => {
44
+ this.#server.once('listening', resolve);
45
+ this.#server.once('error', reject);
46
+ });
47
+ }
48
+ address() {
49
+ const address = this.#server.address();
50
+ if (address === null || typeof address === 'string') {
51
+ throw new Error('Registry bridge is not listening');
52
+ }
53
+ return { host: address.address, port: address.port };
54
+ }
55
+ async request(method, params) {
56
+ if (method === 'registry/clients') {
57
+ return this.clients;
58
+ }
59
+ if (method === 'page') {
60
+ return this.#requestPage(params);
61
+ }
62
+ const { clientId, forwardedParams } = splitTargetParams(params);
63
+ const client = this.#resolveRegistryClient(clientId);
64
+ return this.#forward(client, method, forwardedParams, this.#requestTimeoutMs);
65
+ }
66
+ async close() {
67
+ this.#rejectPending('Registry bridge closed');
68
+ for (const client of this.#clients.values()) {
69
+ this.#rejectReadyWaiters(client, 'Registry bridge closed');
70
+ if (client.expireTimer !== undefined) {
71
+ clearTimeout(client.expireTimer);
72
+ }
73
+ }
74
+ for (const client of this.#server.clients) {
75
+ this.#clearHeartbeat(client);
76
+ client.close();
77
+ }
78
+ this.#clients.clear();
79
+ await new Promise((resolve, reject) => {
80
+ this.#server.close((error) => error === undefined ? resolve() : reject(error));
81
+ });
82
+ }
83
+ async #requestPage(params) {
84
+ const timeoutMs = pageTimeoutMs(params);
85
+ const { clientId, forwardedParams } = splitTargetParams(params, [
86
+ 'timeoutMs',
87
+ ]);
88
+ const client = this.#resolvePageClient(clientId);
89
+ const deadline = Date.now() + timeoutMs;
90
+ const clientIdForWait = client.clientId;
91
+ while (true) {
92
+ await this.#waitUntilPageReady(clientIdForWait, deadline);
93
+ const current = this.#clients.get(clientIdForWait);
94
+ if (current === undefined) {
95
+ throw new Error('page client is not connected');
96
+ }
97
+ try {
98
+ const result = await this.#forward(current, 'page', forwardedParams, Math.max(1, deadline - Date.now()));
99
+ return this.#mergeForwardedPageResult(current, result);
100
+ }
101
+ catch (error) {
102
+ if (!isDisconnectError(error) || Date.now() >= deadline) {
103
+ throw error;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ #waitUntilPageReady(clientId, deadline) {
109
+ const client = this.#clients.get(clientId);
110
+ if (client !== undefined && client.status === 'ready' && client.surface !== undefined) {
111
+ return Promise.resolve();
112
+ }
113
+ const remaining = deadline - Date.now();
114
+ if (remaining <= 0 || client === undefined) {
115
+ return Promise.reject(new Error(client === undefined
116
+ ? 'page client is not connected'
117
+ : reloadingMessage(client)));
118
+ }
119
+ return new Promise((resolve, reject) => {
120
+ const timeout = setTimeout(() => {
121
+ const current = this.#clients.get(clientId);
122
+ if (current !== undefined) {
123
+ current.readyWaiters = current.readyWaiters.filter((waiter) => waiter.timeout !== timeout);
124
+ }
125
+ reject(new Error(current === undefined
126
+ ? 'page client is not connected'
127
+ : reloadingMessage(current)));
128
+ }, remaining);
129
+ client.readyWaiters.push({ resolve, reject, timeout });
130
+ });
131
+ }
132
+ #mergeForwardedPageResult(client, result) {
133
+ if (typeof result !== 'object' || result === null) {
134
+ return result;
135
+ }
136
+ const record = result;
137
+ if (Array.isArray(record['controls']) && typeof record['url'] === 'string') {
138
+ this.#acceptSurface(client, {
139
+ type: 'page/surface',
140
+ clientId: client.clientId,
141
+ url: record['url'],
142
+ ...(typeof record['title'] === 'string' ? { title: record['title'] } : {}),
143
+ controls: record['controls'],
144
+ });
145
+ }
146
+ return {
147
+ ...record,
148
+ generation: client.generation,
149
+ surfaceRev: client.surfaceRev,
150
+ };
151
+ }
152
+ #forward(client, method, forwardedParams, timeoutMs) {
153
+ if (!isSocketOpen(client.socket)) {
154
+ return Promise.reject(new Error('Registry app disconnected'));
155
+ }
156
+ const socket = client.socket;
157
+ const callId = randomUUID();
158
+ const message = {
159
+ type: 'request',
160
+ callId,
161
+ method: method === 'page' ? 'page' : method,
162
+ ...(forwardedParams === undefined ? {} : { params: forwardedParams }),
163
+ };
164
+ return new Promise((resolve, reject) => {
165
+ const timeout = setTimeout(() => {
166
+ this.#pending.delete(callId);
167
+ reject(new Error(`${method} timed out after ${timeoutMs}ms`));
168
+ }, timeoutMs);
169
+ this.#pending.set(callId, {
170
+ clientId: client.clientId,
171
+ method,
172
+ resolve,
173
+ reject,
174
+ timeout,
175
+ });
176
+ socket.send(JSON.stringify(message), (error) => {
177
+ if (error == null) {
178
+ return;
179
+ }
180
+ const pending = this.#pending.get(callId);
181
+ if (pending !== undefined) {
182
+ clearTimeout(pending.timeout);
183
+ this.#pending.delete(callId);
184
+ pending.reject(error);
185
+ }
186
+ });
187
+ });
188
+ }
189
+ #handleConnection(socket) {
190
+ socket.on('message', (rawData) => this.#handleMessage(socket, rawData));
191
+ socket.on('close', () => {
192
+ this.#clearHeartbeat(socket);
193
+ const clientId = this.#socketClientIds.get(socket);
194
+ if (clientId === undefined) {
195
+ return;
196
+ }
197
+ const client = this.#clients.get(clientId);
198
+ if (client === undefined) {
199
+ return;
200
+ }
201
+ if (client.socket !== socket) {
202
+ return;
203
+ }
204
+ client.socket = undefined;
205
+ client.status = 'reloading';
206
+ client.reloadingSince = Date.now();
207
+ this.#rejectPending('Registry app disconnected', clientId);
208
+ client.expireTimer = setTimeout(() => {
209
+ const current = this.#clients.get(clientId);
210
+ if (current !== undefined &&
211
+ current.status === 'reloading' &&
212
+ current.readyWaiters.length === 0) {
213
+ this.#clients.delete(clientId);
214
+ }
215
+ }, RELOADING_CARD_TTL_MS);
216
+ });
217
+ }
218
+ #handleMessage(socket, rawData) {
219
+ let message;
220
+ try {
221
+ message = JSON.parse(rawData.toString());
222
+ }
223
+ catch {
224
+ return;
225
+ }
226
+ if (typeof message !== 'object' || message === null) {
227
+ return;
228
+ }
229
+ const record = message;
230
+ if (isHello(record)) {
231
+ this.#registerClient(socket, record);
232
+ return;
233
+ }
234
+ if (record['type'] === 'page/goodbye') {
235
+ const mappedId = this.#socketClientIds.get(socket);
236
+ if (mappedId === undefined) {
237
+ return;
238
+ }
239
+ this.#dropClient(mappedId, 'page client is not connected');
240
+ return;
241
+ }
242
+ const clientId = this.#socketClientIds.get(socket);
243
+ if (clientId === undefined) {
244
+ return;
245
+ }
246
+ const client = this.#clients.get(clientId);
247
+ if (client?.socket !== socket) {
248
+ return;
249
+ }
250
+ if (isSnapshot(record, clientId)) {
251
+ client.snapshot = record;
252
+ client.pageUrl = record.pageUrl ?? client.pageUrl;
253
+ client.pageTitle = record.pageTitle ?? client.pageTitle;
254
+ return;
255
+ }
256
+ if (isPageSurface(record, clientId)) {
257
+ this.#acceptSurface(client, record);
258
+ return;
259
+ }
260
+ if (isResponse(record)) {
261
+ const pending = this.#pending.get(record.callId);
262
+ if (pending === undefined || pending.clientId !== clientId) {
263
+ return;
264
+ }
265
+ clearTimeout(pending.timeout);
266
+ this.#pending.delete(record.callId);
267
+ if (record.error !== undefined) {
268
+ pending.reject(new Error(record.error.message));
269
+ }
270
+ else {
271
+ pending.resolve(record.result);
272
+ }
273
+ }
274
+ }
275
+ #acceptSurface(client, surface) {
276
+ client.surface = surface;
277
+ client.surfaceRev += 1;
278
+ client.status = 'ready';
279
+ client.pageUrl = surface.url;
280
+ if (surface.title !== undefined) {
281
+ client.pageTitle = surface.title;
282
+ }
283
+ const waiters = client.readyWaiters;
284
+ client.readyWaiters = [];
285
+ for (const waiter of waiters) {
286
+ clearTimeout(waiter.timeout);
287
+ waiter.resolve();
288
+ }
289
+ }
290
+ #registerClient(socket, hello) {
291
+ let clientId = hello.clientId;
292
+ const previous = this.#clients.get(clientId);
293
+ const previousOpenOnOtherSocket = previous !== undefined &&
294
+ isSocketOpen(previous.socket) &&
295
+ previous.socket !== socket;
296
+ if (previousOpenOnOtherSocket) {
297
+ clientId = randomUUID();
298
+ }
299
+ else if (previous?.expireTimer !== undefined) {
300
+ clearTimeout(previous.expireTimer);
301
+ }
302
+ const reused = previousOpenOnOtherSocket ? undefined : previous;
303
+ this.#socketClientIds.set(socket, clientId);
304
+ const generation = (reused?.generation ?? 0) + 1;
305
+ const surfaceRev = reused?.surfaceRev ?? 0;
306
+ const readyWaiters = reused?.readyWaiters ?? [];
307
+ this.#clients.set(clientId, {
308
+ socket,
309
+ clientId,
310
+ connectedAt: new Date().toISOString(),
311
+ ...(hello.pageUrl === undefined ? {} : { pageUrl: hello.pageUrl }),
312
+ ...(hello.pageTitle === undefined ? {} : { pageTitle: hello.pageTitle }),
313
+ snapshot: emptySnapshot(clientId, hello.pageUrl, hello.pageTitle),
314
+ status: 'connecting',
315
+ generation,
316
+ surfaceRev,
317
+ surface: undefined,
318
+ readyWaiters,
319
+ });
320
+ const helloOk = { type: 'hello/ok', clientId };
321
+ socket.send(JSON.stringify(helloOk));
322
+ this.#startHeartbeat(socket);
323
+ if (!previousOpenOnOtherSocket &&
324
+ previous !== undefined &&
325
+ previous.socket !== socket) {
326
+ this.#rejectPending('Registry app reconnected', clientId);
327
+ previous.socket?.close();
328
+ }
329
+ }
330
+ #resolveRegistryClient(clientId) {
331
+ if (clientId !== undefined) {
332
+ return this.#requireRegistryClient(clientId);
333
+ }
334
+ const clients = [...this.#clients.values()].filter((client) => isSocketOpen(client.socket));
335
+ if (clients.length === 0) {
336
+ throw new Error('Registry app is not connected to the WebSocket bridge');
337
+ }
338
+ if (clients.length > 1) {
339
+ throw new Error(`Multiple registry apps are connected; clientId is required. Available clients: ${clients
340
+ .map((client) => client.clientId)
341
+ .join(', ')}`);
342
+ }
343
+ return clients[0];
344
+ }
345
+ #resolvePageClient(clientId) {
346
+ if (clientId !== undefined) {
347
+ const client = this.#clients.get(clientId);
348
+ if (client === undefined) {
349
+ throw new Error(`page client "${clientId}" is not connected`);
350
+ }
351
+ return client;
352
+ }
353
+ const cards = [...this.#clients.values()];
354
+ const ready = cards.filter((client) => client.status === 'ready' && isSocketOpen(client.socket));
355
+ if (ready.length === 1) {
356
+ return ready[0];
357
+ }
358
+ if (ready.length > 1) {
359
+ throw new Error(`Multiple ready page clients; clientId is required. Available clients: ${ready
360
+ .slice()
361
+ .sort((left, right) => left.clientId.localeCompare(right.clientId))
362
+ .map((client) => `${client.clientId} ready ${client.pageUrl ?? ''}`)
363
+ .join(', ')}`);
364
+ }
365
+ if (cards.length === 0) {
366
+ throw new Error('page client is not connected');
367
+ }
368
+ if (cards.length === 1) {
369
+ return cards[0];
370
+ }
371
+ throw new Error(`No ready page client. Reloading: ${cards
372
+ .slice()
373
+ .sort((left, right) => left.clientId.localeCompare(right.clientId))
374
+ .map((client) => `${client.clientId} (last url ${client.pageUrl ?? 'unknown'})`)
375
+ .join(', ')}`);
376
+ }
377
+ #requireRegistryClient(clientId) {
378
+ const client = this.#clients.get(clientId);
379
+ if (client === undefined || !isSocketOpen(client.socket)) {
380
+ throw new Error(`Registry client "${clientId}" is not connected`);
381
+ }
382
+ return client;
383
+ }
384
+ #rejectPending(message, clientId) {
385
+ for (const [callId, pending] of this.#pending) {
386
+ if (clientId !== undefined && pending.clientId !== clientId) {
387
+ continue;
388
+ }
389
+ clearTimeout(pending.timeout);
390
+ pending.reject(new Error(message));
391
+ this.#pending.delete(callId);
392
+ }
393
+ }
394
+ #rejectReadyWaiters(client, message) {
395
+ const waiters = client.readyWaiters;
396
+ client.readyWaiters = [];
397
+ for (const waiter of waiters) {
398
+ clearTimeout(waiter.timeout);
399
+ waiter.reject(new Error(message));
400
+ }
401
+ }
402
+ #startHeartbeat(socket) {
403
+ this.#clearHeartbeat(socket);
404
+ let lastPongAt = Date.now();
405
+ socket.on('pong', () => {
406
+ lastPongAt = Date.now();
407
+ });
408
+ const timer = setInterval(() => {
409
+ if (Date.now() - lastPongAt > this.#heartbeatTimeoutMs) {
410
+ this.#clearHeartbeat(socket);
411
+ socket.terminate();
412
+ return;
413
+ }
414
+ if (socket.readyState === WebSocket.OPEN) {
415
+ socket.ping();
416
+ }
417
+ }, this.#heartbeatIntervalMs);
418
+ this.#heartbeats.set(socket, timer);
419
+ }
420
+ #clearHeartbeat(socket) {
421
+ const timer = this.#heartbeats.get(socket);
422
+ if (timer === undefined) {
423
+ return;
424
+ }
425
+ clearInterval(timer);
426
+ this.#heartbeats.delete(socket);
427
+ }
428
+ #dropClient(clientId, waiterMessage) {
429
+ const client = this.#clients.get(clientId);
430
+ if (client === undefined) {
431
+ return;
432
+ }
433
+ if (client.expireTimer !== undefined) {
434
+ clearTimeout(client.expireTimer);
435
+ }
436
+ this.#rejectReadyWaiters(client, waiterMessage);
437
+ this.#rejectPending(waiterMessage, clientId);
438
+ this.#clients.delete(clientId);
439
+ }
440
+ }
441
+ function splitTargetParams(params, omitKeys = []) {
442
+ if (params === undefined) {
443
+ return {};
444
+ }
445
+ const { clientId: rawClientId, ...rest } = params;
446
+ if (rawClientId !== undefined && typeof rawClientId !== 'string') {
447
+ throw new Error('params.clientId must be a string');
448
+ }
449
+ const forwardedEntries = Object.entries(rest).filter(([key]) => !omitKeys.includes(key));
450
+ const forwardedParams = Object.fromEntries(forwardedEntries);
451
+ return {
452
+ ...(rawClientId === undefined ? {} : { clientId: rawClientId }),
453
+ ...(forwardedEntries.length === 0 ? {} : { forwardedParams }),
454
+ };
455
+ }
456
+ function emptySnapshot(clientId, pageUrl, pageTitle) {
457
+ return {
458
+ type: 'registry/snapshot',
459
+ clientId,
460
+ ...(pageUrl === undefined ? {} : { pageUrl }),
461
+ ...(pageTitle === undefined ? {} : { pageTitle }),
462
+ entries: [],
463
+ logs: [],
464
+ };
465
+ }
466
+ function isHello(value) {
467
+ return (value['type'] === 'hello' &&
468
+ value['role'] === 'registry-app' &&
469
+ typeof value['clientId'] === 'string' &&
470
+ value['clientId'].length > 0 &&
471
+ (value['pageUrl'] === undefined || typeof value['pageUrl'] === 'string') &&
472
+ (value['pageTitle'] === undefined || typeof value['pageTitle'] === 'string'));
473
+ }
474
+ function isSnapshot(value, clientId) {
475
+ return (value['type'] === 'registry/snapshot' &&
476
+ value['clientId'] === clientId &&
477
+ Array.isArray(value['entries']) &&
478
+ Array.isArray(value['logs']) &&
479
+ (value['pageUrl'] === undefined || typeof value['pageUrl'] === 'string') &&
480
+ (value['pageTitle'] === undefined || typeof value['pageTitle'] === 'string'));
481
+ }
482
+ function isPageSurface(value, clientId) {
483
+ return (value['type'] === 'page/surface' &&
484
+ value['clientId'] === clientId &&
485
+ typeof value['url'] === 'string' &&
486
+ Array.isArray(value['controls']) &&
487
+ (value['title'] === undefined || typeof value['title'] === 'string'));
488
+ }
489
+ function isResponse(value) {
490
+ if (value['type'] !== 'response' || typeof value['callId'] !== 'string') {
491
+ return false;
492
+ }
493
+ const error = value['error'];
494
+ return (error === undefined ||
495
+ (typeof error === 'object' &&
496
+ error !== null &&
497
+ typeof error.message === 'string'));
498
+ }
499
+ function isSocketOpen(socket) {
500
+ return socket !== undefined && socket.readyState === WebSocket.OPEN;
501
+ }
502
+ function pageTimeoutMs(params) {
503
+ const timeoutMs = params?.['timeoutMs'];
504
+ if (timeoutMs === undefined) {
505
+ return DEFAULT_PAGE_TIMEOUT_MS;
506
+ }
507
+ if (typeof timeoutMs !== 'number' || !Number.isFinite(timeoutMs) || timeoutMs < 0) {
508
+ throw new Error('params.timeoutMs must be a non-negative number');
509
+ }
510
+ return timeoutMs;
511
+ }
512
+ function reloadingMessage(client) {
513
+ const startedAt = client.reloadingSince ?? Date.now();
514
+ const seconds = Math.max(0, Math.round((Date.now() - startedAt) / 1000));
515
+ const url = client.pageUrl ?? client.surface?.url ?? 'unknown';
516
+ return `page reloading since ${seconds}s, last url ${url}, generation ${client.generation} → still ${client.generation}`;
517
+ }
518
+ function isDisconnectError(error) {
519
+ if (!(error instanceof Error)) {
520
+ return false;
521
+ }
522
+ return (error.message === 'Registry app disconnected' ||
523
+ error.message === 'Registry app reconnected');
524
+ }
525
+ //# sourceMappingURL=bridge-broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-broker.js","sourceRoot":"","sources":["../src/bridge-broker.ts"],"names":[],"mappings":"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"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/main.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { RegistryBridgeBroker } from './bridge-broker.js';
4
+ import { createRegistryMcpServer } from './mcp-server.js';
5
+ const port = Number(process.env['REGISTRY_BRIDGE_PORT'] ?? '3333');
6
+ const host = process.env['REGISTRY_BRIDGE_HOST'] ?? '127.0.0.1';
7
+ const bridge = new RegistryBridgeBroker({ host, port });
8
+ await bridge.ready();
9
+ const server = createRegistryMcpServer(bridge);
10
+ await server.connect(new StdioServerTransport());
11
+ const shutdown = async () => {
12
+ await server.close();
13
+ await bridge.close();
14
+ };
15
+ process.once('SIGINT', () => void shutdown());
16
+ process.once('SIGTERM', () => void shutdown());
17
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,CAAC;AACnE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,WAAW,CAAC;AAChE,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACxD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AAErB,MAAM,MAAM,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AAEjD,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;IACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;AAC9C,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { RegistryBridgeBroker } from './bridge-broker.js';
3
+ type RegistryRequester = Pick<RegistryBridgeBroker, 'request'>;
4
+ export declare function createRegistryMcpServer(bridge: RegistryRequester): McpServer;
5
+ export {};
@@ -0,0 +1,102 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ export function createRegistryMcpServer(bridge) {
4
+ const server = new McpServer({
5
+ name: 'craft-ts-function-registry',
6
+ version: '0.1.0',
7
+ });
8
+ registerTool(server, bridge, 'page', 'page', 'Read named controls on the connected browser tab, or run act (goto / fill / click / press) then return the new page state. Omit clientId when exactly one tab is ready. Default detail is controls; pass detail "dom-styles" only to debug layout/CSS.', {
9
+ clientId: z.string().min(1).optional(),
10
+ act: z
11
+ .array(z.union([
12
+ z.object({
13
+ goto: z.string().min(1),
14
+ }),
15
+ z.object({
16
+ id: z.string().min(1),
17
+ fill: z.unknown().optional(),
18
+ press: z.string().optional(),
19
+ match: z
20
+ .object({
21
+ index: z.number().int().nonnegative().optional(),
22
+ track: z.string().min(1).optional(),
23
+ })
24
+ .optional(),
25
+ }),
26
+ ]))
27
+ .optional(),
28
+ detail: z.enum(['controls', 'dom-styles']).optional(),
29
+ styles: z.array(z.string()).optional(),
30
+ timeoutMs: z.number().int().nonnegative().optional(),
31
+ }, true);
32
+ registerTool(server, bridge, 'registry.clients', 'registry/clients', 'List every page/registry client card (ready, connecting, reloading). Pass clientId to page and registry.* when more than one card is ready.');
33
+ registerTool(server, bridge, 'registry.list', 'registry/list', 'List active registry entries', { clientId: z.string().min(1).optional() });
34
+ registerTool(server, bridge, 'registry.get', 'registry/get', 'Get one active registry entry', { clientId: z.string().min(1).optional(), key: z.string().min(1) });
35
+ registerTool(server, bridge, 'registry.call', 'registry/call', 'Invoke an active registry entry', {
36
+ clientId: z.string().min(1).optional(),
37
+ key: z.string().min(1),
38
+ args: z.array(z.unknown()).optional(),
39
+ }, true);
40
+ registerPrimitiveValueTools(server, bridge, 'query', true);
41
+ registerPrimitiveValueTools(server, bridge, 'mutation', true);
42
+ registerPrimitiveValueTools(server, bridge, 'asyncProcess', true);
43
+ registerPrimitiveValueTools(server, bridge, 'queryParams', false);
44
+ registerTool(server, bridge, 'registry.override', 'registry/override', 'Replace an active primitive method at runtime with a development-only JavaScript function such as ({ state }) => state.update(current => current + 10), ({ query }) => query.set(value), or ({ queryParams }) => queryParams.patch(current => ({ page: current.page + 1 }))', {
45
+ clientId: z.string().min(1).optional(),
46
+ key: z.string().min(1),
47
+ source: z.string().min(1).max(20_000),
48
+ }, true);
49
+ registerTool(server, bridge, 'registry.restore', 'registry/restore', 'Remove a runtime override and restore the original state method', { clientId: z.string().min(1).optional(), key: z.string().min(1) }, true);
50
+ registerTool(server, bridge, 'registry.logs', 'registry/logs', 'Read observable registry and bridge events', {
51
+ clientId: z.string().min(1).optional(),
52
+ sinceId: z.number().int().nonnegative().optional(),
53
+ });
54
+ return server;
55
+ }
56
+ function registerPrimitiveValueTools(server, bridge, kind, supportsId) {
57
+ const capitalizedKind = kind === 'queryParams' ? 'queryParams' : kind;
58
+ const baseSchema = {
59
+ clientId: z.string().min(1).optional(),
60
+ key: z.string().min(1),
61
+ ...(supportsId ? { id: z.string().min(1).optional() } : {}),
62
+ };
63
+ registerPrimitiveTool(server, bridge, `registry.${kind}.get`, 'registry/resource/get', `Read the current ${capitalizedKind} value${supportsId ? '; pass id for a grouped instance' : ''}`, baseSchema, kind);
64
+ registerPrimitiveTool(server, bridge, `registry.${kind}.set`, 'registry/resource/set', `Imperatively set the current ${capitalizedKind} value${supportsId ? '; pass id for a grouped instance' : ''}`, { ...baseSchema, value: z.unknown() }, kind, true);
65
+ registerPrimitiveTool(server, bridge, `registry.${kind}.update`, 'registry/resource/update', `Imperatively update the current ${capitalizedKind} value with JavaScript source evaluating to (current) => next${supportsId ? '; pass id for a grouped instance' : ''}`, { ...baseSchema, source: z.string().min(1).max(20_000) }, kind, true);
66
+ registerPrimitiveTool(server, bridge, `registry.${kind}.patch`, 'registry/resource/patch', `Imperatively patch the current ${capitalizedKind} value with JavaScript source evaluating to (current) => partialObject${supportsId ? '; pass id for a grouped instance' : ''}`, { ...baseSchema, source: z.string().min(1).max(20_000) }, kind, true);
67
+ }
68
+ function registerPrimitiveTool(server, bridge, toolName, method, description, inputSchema, kind, mutating = false) {
69
+ const annotations = {
70
+ readOnlyHint: !mutating,
71
+ destructiveHint: mutating,
72
+ };
73
+ server.registerTool(toolName, { description, inputSchema, annotations }, async (params) => {
74
+ const result = await bridge.request(method, { ...params, kind });
75
+ return toolResult(result);
76
+ });
77
+ }
78
+ function registerTool(server, bridge, toolName, method, description, inputSchema, mutating = false) {
79
+ const annotations = {
80
+ readOnlyHint: !mutating,
81
+ destructiveHint: mutating,
82
+ };
83
+ if (inputSchema === undefined) {
84
+ server.registerTool(toolName, { description, annotations }, async () => {
85
+ const result = await bridge.request(method);
86
+ return toolResult(result);
87
+ });
88
+ return;
89
+ }
90
+ server.registerTool(toolName, { description, inputSchema, annotations }, async (params) => {
91
+ const result = await bridge.request(method, params);
92
+ return toolResult(result);
93
+ });
94
+ }
95
+ function toolResult(result) {
96
+ const text = result === undefined ? 'null' : JSON.stringify(result, null, 2);
97
+ return {
98
+ content: [{ type: 'text', text }],
99
+ ...(result === undefined ? {} : { structuredContent: { result } }),
100
+ };
101
+ }
102
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ export type RegistryMethod = 'registry/list' | 'registry/get' | 'registry/call' | 'registry/resource/get' | 'registry/resource/set' | 'registry/resource/update' | 'registry/resource/patch' | 'registry/override' | 'registry/restore' | 'registry/logs';
2
+ export type PageMethod = 'page';
3
+ export type RegistryBrokerMethod = RegistryMethod | PageMethod | 'registry/clients';
4
+ export type RegistryEntry = Readonly<{
5
+ key: string;
6
+ hostName: string;
7
+ ancestry: readonly string[];
8
+ capabilities: readonly string[];
9
+ overrideActive: boolean;
10
+ }>;
11
+ export type RegistryLog = Readonly<{
12
+ id: number;
13
+ timestamp: string;
14
+ event: string;
15
+ key?: string;
16
+ message: string;
17
+ }>;
18
+ export type PageMatch = Readonly<{
19
+ index?: number;
20
+ track?: string;
21
+ }>;
22
+ export type PageAction = Readonly<{
23
+ goto: string;
24
+ }> | Readonly<{
25
+ id: string;
26
+ fill: unknown;
27
+ match?: PageMatch;
28
+ }> | Readonly<{
29
+ id: string;
30
+ press?: string;
31
+ match?: PageMatch;
32
+ }> | Readonly<{
33
+ id: string;
34
+ match?: PageMatch;
35
+ }>;
36
+ export type PageControl = Readonly<{
37
+ id: string;
38
+ role: string;
39
+ name: string;
40
+ value?: unknown;
41
+ enabled: boolean;
42
+ index: number;
43
+ track?: string;
44
+ }>;
45
+ export type PageControls = Readonly<{
46
+ generation: number;
47
+ surfaceRev: number;
48
+ url: string;
49
+ title?: string;
50
+ status: 'ready';
51
+ controls: readonly PageControl[];
52
+ }>;
53
+ export type PageSurface = Readonly<{
54
+ type: 'page/surface';
55
+ clientId: string;
56
+ url: string;
57
+ title?: string;
58
+ controls: readonly PageControl[];
59
+ }>;
60
+ export type PageGoodbye = Readonly<{
61
+ type: 'page/goodbye';
62
+ clientId: string;
63
+ }>;
64
+ export type HelloOk = Readonly<{
65
+ type: 'hello/ok';
66
+ clientId: string;
67
+ }>;
68
+ export type RegistryRequest = Readonly<{
69
+ type: 'request';
70
+ callId: string;
71
+ method: RegistryMethod | PageMethod;
72
+ params?: Readonly<Record<string, unknown>>;
73
+ }>;
74
+ export type RegistryResponse = Readonly<{
75
+ type: 'response';
76
+ callId: string;
77
+ result?: unknown;
78
+ error?: Readonly<{
79
+ message: string;
80
+ }>;
81
+ }>;
82
+ export type RegistrySnapshot = Readonly<{
83
+ type: 'registry/snapshot';
84
+ clientId: string;
85
+ pageUrl?: string;
86
+ pageTitle?: string;
87
+ entries: readonly RegistryEntry[];
88
+ logs: readonly RegistryLog[];
89
+ }>;
90
+ export type RegistryClient = Readonly<{
91
+ clientId: string;
92
+ connectedAt: string;
93
+ status: 'reloading' | 'connecting' | 'ready';
94
+ generation: number;
95
+ pageUrl?: string;
96
+ pageTitle?: string;
97
+ entryCount: number;
98
+ logCount: number;
99
+ }>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@craft-ts/function-registry-mcp",
3
+ "version": "0.7.0-beta.15",
4
+ "description": "MCP bridge for CraftTS browser pages and runtime registry",
5
+ "type": "module",
6
+ "files": [
7
+ "dist",
8
+ "README.md",
9
+ "!dist/**/*.spec.js",
10
+ "!dist/**/*.spec.d.ts",
11
+ "!dist/**/*.spec.js.map"
12
+ ],
13
+ "bin": {
14
+ "craft-ts-registry-mcp": "dist/main.js"
15
+ },
16
+ "scripts": {
17
+ "build": "tsc -p tsconfig.json",
18
+ "start": "npm run build && node dist/main.js",
19
+ "test": "vitest run --config vitest.config.mts"
20
+ },
21
+ "dependencies": {
22
+ "@modelcontextprotocol/sdk": "1.26.0",
23
+ "ws": "8.18.3",
24
+ "zod": "4.3.6"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "20.19.9",
28
+ "@types/ws": "8.18.1",
29
+ "typescript": "6.0.3",
30
+ "vitest": "^4.0.8"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ }
35
+ }