@xenosystem/capability-mcp 0.1.78 → 0.1.80
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/dist/capabilityClient.d.ts +11 -25
- package/dist/capabilityClient.d.ts.map +1 -1
- package/dist/capabilityClient.js +12 -50
- package/dist/capabilityClient.js.map +1 -1
- package/dist/catalogue.d.ts +13 -14
- package/dist/catalogue.d.ts.map +1 -1
- package/dist/catalogue.js +12 -18
- package/dist/catalogue.js.map +1 -1
- package/dist/mcpServer.d.ts +2 -0
- package/dist/mcpServer.d.ts.map +1 -1
- package/dist/mcpServer.js +1 -0
- package/dist/mcpServer.js.map +1 -1
- package/package.json +5 -3
|
@@ -22,34 +22,19 @@
|
|
|
22
22
|
* products are shipping. Normalising here is the driving half doing its job.
|
|
23
23
|
*/
|
|
24
24
|
import type { CapabilityDescriptor } from './descriptors.js';
|
|
25
|
-
|
|
26
|
-
export
|
|
27
|
-
name: string;
|
|
28
|
-
description: string;
|
|
29
|
-
/** A JSON Schema for the arguments. `{ type: 'object', properties: {} }` when absent. */
|
|
30
|
-
schema: {
|
|
31
|
-
type: 'object';
|
|
32
|
-
properties: Record<string, unknown>;
|
|
33
|
-
required?: string[] | undefined;
|
|
34
|
-
};
|
|
35
|
-
/** `safe` | `undoable` | `irreversible` when the app declares it. */
|
|
36
|
-
reversibility?: string | undefined;
|
|
37
|
-
}
|
|
25
|
+
import { extractCapabilities, normalizeCapability, type Capability } from '@xenosystem/capability-sdk';
|
|
26
|
+
export { extractCapabilities, normalizeCapability, type Capability };
|
|
38
27
|
export interface CapabilityClientOptions {
|
|
39
|
-
|
|
28
|
+
/** How long `GET /capabilities` may take. A listing is cheap; a slow one means the app is wedged. */
|
|
40
29
|
timeoutMs?: number | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* How long one capability call may take. SEPARATE from the listing budget because an export or a
|
|
32
|
+
* render legitimately runs far longer than a listing — one shared 15 s budget aborted real work
|
|
33
|
+
* mid-flight and reported the app as "not answering" while it was doing exactly what was asked.
|
|
34
|
+
*/
|
|
35
|
+
invokeTimeoutMs?: number | undefined;
|
|
36
|
+
fetchImpl?: typeof fetch | undefined;
|
|
41
37
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Pull the capability array out of whatever envelope this app answered with.
|
|
44
|
-
*
|
|
45
|
-
* Returns `undefined` rather than `[]` when nothing recognisable is there. That difference
|
|
46
|
-
* is load-bearing: an empty array says "this app has no capabilities" and an unreadable body
|
|
47
|
-
* says "this is not one of our servers" — and the second is how a descriptor whose port has
|
|
48
|
-
* been recycled by an unrelated process gets refused instead of advertised.
|
|
49
|
-
*/
|
|
50
|
-
export declare function extractCapabilities(body: unknown): unknown[] | undefined;
|
|
51
|
-
/** Normalise one descriptor entry. `argsSchema` and `inputSchema` are both in the wild. */
|
|
52
|
-
export declare function normalizeCapability(entry: unknown): Capability | undefined;
|
|
53
38
|
export declare class CapabilityUnavailable extends Error {
|
|
54
39
|
readonly app: string;
|
|
55
40
|
constructor(app: string, message: string);
|
|
@@ -59,6 +44,7 @@ export declare class CapabilityClient {
|
|
|
59
44
|
readonly descriptor: CapabilityDescriptor;
|
|
60
45
|
private readonly fetchImpl;
|
|
61
46
|
private readonly timeoutMs;
|
|
47
|
+
private readonly invokeTimeoutMs;
|
|
62
48
|
constructor(descriptor: CapabilityDescriptor, options?: CapabilityClientOptions);
|
|
63
49
|
private request;
|
|
64
50
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilityClient.d.ts","sourceRoot":"","sources":["../src/capabilityClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"capabilityClient.d.ts","sourceRoot":"","sources":["../src/capabilityClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAM5D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACtG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,KAAK,UAAU,EAAE,CAAA;AAEpE,MAAM,WAAW,uBAAuB;IACtC,qGAAqG;IACrG,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACpC,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAA;CACrC;AAKD,qBAAa,qBAAsB,SAAQ,KAAK;IAE5C,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM;CAKlB;AAED,+DAA+D;AAC/D,qBAAa,gBAAgB;IAMzB,QAAQ,CAAC,UAAU,EAAE,oBAAoB;IAL3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;gBAG7B,UAAU,EAAE,oBAAoB,EACzC,OAAO,GAAE,uBAA4B;YAOzB,OAAO;IAoBrB;;;;;OAKG;IACG,gBAAgB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAkC/C;;;;;;;OAOG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CA2B5E"}
|
package/dist/capabilityClient.js
CHANGED
|
@@ -21,54 +21,14 @@
|
|
|
21
21
|
* SPEC.md` §15 makes *exposing* the product's job and *driving* somebody else's, and the
|
|
22
22
|
* products are shipping. Normalising here is the driving half doing its job.
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
? value
|
|
28
|
-
: undefined;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Pull the capability array out of whatever envelope this app answered with.
|
|
32
|
-
*
|
|
33
|
-
* Returns `undefined` rather than `[]` when nothing recognisable is there. That difference
|
|
34
|
-
* is load-bearing: an empty array says "this app has no capabilities" and an unreadable body
|
|
35
|
-
* says "this is not one of our servers" — and the second is how a descriptor whose port has
|
|
36
|
-
* been recycled by an unrelated process gets refused instead of advertised.
|
|
24
|
+
/*
|
|
25
|
+
* The normaliser is capability-sdk's — ONE implementation shared with every other caller (the
|
|
26
|
+
* in-app Agent panel's resolver reads the same envelopes). It was a copy here until 0.1.79.
|
|
37
27
|
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if (Array.isArray(root['capabilities']))
|
|
43
|
-
return root['capabilities'];
|
|
44
|
-
// A manifest object carrying the list one level down.
|
|
45
|
-
const nested = asObject(root['capabilities']);
|
|
46
|
-
if (nested && Array.isArray(nested['capabilities']))
|
|
47
|
-
return nested['capabilities'];
|
|
48
|
-
const data = asObject(root['data']);
|
|
49
|
-
if (data && Array.isArray(data['capabilities']))
|
|
50
|
-
return data['capabilities'];
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
/** Normalise one descriptor entry. `argsSchema` and `inputSchema` are both in the wild. */
|
|
54
|
-
export function normalizeCapability(entry) {
|
|
55
|
-
const record = asObject(entry);
|
|
56
|
-
const name = record?.['name'];
|
|
57
|
-
if (typeof name !== 'string' || !name)
|
|
58
|
-
return undefined;
|
|
59
|
-
const rawSchema = asObject(record?.['argsSchema']) ?? asObject(record?.['inputSchema']) ?? asObject(record?.['schema']);
|
|
60
|
-
const properties = asObject(rawSchema?.['properties']) ?? {};
|
|
61
|
-
const rawRequired = rawSchema?.['required'];
|
|
62
|
-
const required = Array.isArray(rawRequired)
|
|
63
|
-
? rawRequired.filter((value) => typeof value === 'string')
|
|
64
|
-
: undefined;
|
|
65
|
-
return {
|
|
66
|
-
name,
|
|
67
|
-
description: typeof record?.['description'] === 'string' ? record['description'] : name,
|
|
68
|
-
schema: { type: 'object', properties, ...(required && required.length ? { required } : {}) },
|
|
69
|
-
reversibility: typeof record?.['reversibility'] === 'string' ? record['reversibility'] : undefined,
|
|
70
|
-
};
|
|
71
|
-
}
|
|
28
|
+
import { extractCapabilities, normalizeCapability } from '@xenosystem/capability-sdk';
|
|
29
|
+
export { extractCapabilities, normalizeCapability };
|
|
30
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
31
|
+
const DEFAULT_INVOKE_TIMEOUT_MS = 120_000;
|
|
72
32
|
export class CapabilityUnavailable extends Error {
|
|
73
33
|
app;
|
|
74
34
|
constructor(app, message) {
|
|
@@ -82,14 +42,16 @@ export class CapabilityClient {
|
|
|
82
42
|
descriptor;
|
|
83
43
|
fetchImpl;
|
|
84
44
|
timeoutMs;
|
|
45
|
+
invokeTimeoutMs;
|
|
85
46
|
constructor(descriptor, options = {}) {
|
|
86
47
|
this.descriptor = descriptor;
|
|
87
48
|
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
88
49
|
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
50
|
+
this.invokeTimeoutMs = options.invokeTimeoutMs ?? DEFAULT_INVOKE_TIMEOUT_MS;
|
|
89
51
|
}
|
|
90
|
-
async request(path, init) {
|
|
52
|
+
async request(path, init, timeoutMs = this.timeoutMs) {
|
|
91
53
|
const controller = new AbortController();
|
|
92
|
-
const timer = setTimeout(() => controller.abort(),
|
|
54
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
93
55
|
try {
|
|
94
56
|
return await this.fetchImpl(`${this.descriptor.url}${path}`, {
|
|
95
57
|
...init,
|
|
@@ -154,7 +116,7 @@ export class CapabilityClient {
|
|
|
154
116
|
method: 'POST',
|
|
155
117
|
headers: { 'content-type': 'application/json' },
|
|
156
118
|
body: JSON.stringify({ args }),
|
|
157
|
-
});
|
|
119
|
+
}, this.invokeTimeoutMs);
|
|
158
120
|
}
|
|
159
121
|
catch (error) {
|
|
160
122
|
throw new CapabilityUnavailable(this.descriptor.app, `${this.descriptor.app} is not answering: ${error.message}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilityClient.js","sourceRoot":"","sources":["../src/capabilityClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"capabilityClient.js","sourceRoot":"","sources":["../src/capabilityClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAmB,MAAM,4BAA4B,CAAA;AACtG,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAmB,CAAA;AAcpE,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACjC,MAAM,yBAAyB,GAAG,OAAO,CAAA;AAEzC,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAEnC;IADX,YACW,GAAW,EACpB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHL,QAAG,GAAH,GAAG,CAAQ;QAIpB,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,+DAA+D;AAC/D,MAAM,OAAO,gBAAgB;IAMhB;IALM,SAAS,CAAc;IACvB,SAAS,CAAQ;IACjB,eAAe,CAAQ;IAExC,YACW,UAAgC,EACzC,UAAmC,EAAE;QAD5B,eAAU,GAAV,UAAU,CAAsB;QAGzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAA;QACxD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,yBAAyB,CAAA;IAC7E,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,IAAkB,EAAE,SAAS,GAAG,IAAI,CAAC,SAAS;QAChF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;QAC7D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE;gBAC3D,GAAG,IAAI;gBACP,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE;oBACP,GAAI,IAAI,EAAE,OAA8C;oBACxD,gFAAgF;oBAChF,kFAAkF;oBAClF,oBAAoB;oBACpB,aAAa,EAAE,UAAU,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;iBACjD;aACF,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB;QACpB,IAAI,QAAkB,CAAA;QACtB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,qBAAqB,CAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EACnB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,wBAAwB,IAAI,CAAC,UAAU,CAAC,GAAG,KAAM,KAAe,CAAC,OAAO,EAAE,CACjG,CAAA;QACH,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,qBAAqB,CAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EACnB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,aAAa,QAAQ,CAAC,MAAM,yBAAyB,CAC5E,CAAA;QACH,CAAC;QACD,IAAI,IAAa,CAAA;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,0BAA0B,CAAC,CAAA;QACxG,CAAC;QACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,qBAAqB,CAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EACnB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,uFAAuF,CAC9G,CAAA;QACH,CAAC;QACD,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC1C,MAAM,CAAC,CAAC,UAAU,EAA4B,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,CAAA;IAC/E,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,IAA6B;QACtD,IAAI,QAAkB,CAAA;QACtB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE;gBACzE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;aAC/B,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,qBAAqB,CAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EACnB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,sBAAuB,KAAe,CAAC,OAAO,EAAE,CACvE,CAAA;QACH,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,qBAAqB,CAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,EACnB,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,aAAa,QAAQ,CAAC,MAAM,GAAG,CACtD,CAAA;QACH,CAAC;QACD,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;QACjF,CAAC;IACH,CAAC;CACF"}
|
package/dist/catalogue.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type Capability } from './capabilityClient.js';
|
|
9
9
|
import { type CapabilityDescriptor } from './descriptors.js';
|
|
10
|
+
import { toolNameFor } from '@xenosystem/capability-sdk';
|
|
10
11
|
export interface CatalogueEntry {
|
|
11
12
|
app: string;
|
|
12
13
|
capability: Capability;
|
|
@@ -26,21 +27,19 @@ export interface Catalogue {
|
|
|
26
27
|
app: string;
|
|
27
28
|
reason: string;
|
|
28
29
|
}[];
|
|
30
|
+
/**
|
|
31
|
+
* Capabilities an app published under ANOTHER running app's name (`pixel.layer.delete` from
|
|
32
|
+
* Canvas's server). Refused, not offered: the tool would be routed to the app that published it
|
|
33
|
+
* while its name says it acts on a different one — a model reading "pixel" would believe it was
|
|
34
|
+
* editing Pixel's document. Kept so the mislabel is visible rather than silently dropped.
|
|
35
|
+
*/
|
|
36
|
+
foreign: {
|
|
37
|
+
app: string;
|
|
38
|
+
capability: string;
|
|
39
|
+
}[];
|
|
29
40
|
}
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
*
|
|
33
|
-
* The name is app-qualified so two apps cannot collide and so the agent can say WHICH app it
|
|
34
|
-
* is acting on. Capability names are already qualified in every shipped app
|
|
35
|
-
* (`canvas.document.create`), so the prefix is added only when it is missing — otherwise the
|
|
36
|
-
* tool would read `canvas_canvas_document_create`.
|
|
37
|
-
*
|
|
38
|
-
* Dots become underscores. The consuming SDK's sanitiser permits dots
|
|
39
|
-
* (`/[^A-Za-z0-9_.-]+/`), but Anthropic's tool-name rule is `^[a-zA-Z0-9_-]{1,64}$` and this
|
|
40
|
-
* server is meant to work with any MCP client, so the conservative alphabet is the one that
|
|
41
|
-
* cannot be wrong somewhere else.
|
|
42
|
-
*/
|
|
43
|
-
export declare function toolNameFor(app: string, capabilityName: string): string;
|
|
41
|
+
/** App-qualified, dot-free tool names — capability-sdk's rule, shared with the in-app panel. */
|
|
42
|
+
export { toolNameFor };
|
|
44
43
|
export interface DiscoverOptions {
|
|
45
44
|
dir?: string | undefined;
|
|
46
45
|
fetchImpl?: typeof fetch | undefined;
|
package/dist/catalogue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../src/catalogue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAChG,OAAO,EAAmC,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"catalogue.d.ts","sourceRoot":"","sources":["../src/catalogue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA2C,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAChG,OAAO,EAAmC,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAExD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,UAAU,CAAA;IACtB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB;;;;;;OAMG;IACH,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC9C;;;;;OAKG;IACH,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAC/C;AAED,gGAAgG;AAChG,OAAO,EAAE,WAAW,EAAE,CAAA;AAEtB,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,GAAG,SAAS,CAAA;CAC7D;AAED,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,eAAoB,GAAG;IACnE,UAAU,EAAE,oBAAoB,EAAE,CAAA;IAClC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACxC,CASA;AAED,kGAAkG;AAClG,wBAAsB,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CA2ChF;AAED,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAM3D"}
|
package/dist/catalogue.js
CHANGED
|
@@ -7,23 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { CapabilityClient, CapabilityUnavailable } from './capabilityClient.js';
|
|
9
9
|
import { processIsAlive, readDescriptors } from './descriptors.js';
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* The name is app-qualified so two apps cannot collide and so the agent can say WHICH app it
|
|
14
|
-
* is acting on. Capability names are already qualified in every shipped app
|
|
15
|
-
* (`canvas.document.create`), so the prefix is added only when it is missing — otherwise the
|
|
16
|
-
* tool would read `canvas_canvas_document_create`.
|
|
17
|
-
*
|
|
18
|
-
* Dots become underscores. The consuming SDK's sanitiser permits dots
|
|
19
|
-
* (`/[^A-Za-z0-9_.-]+/`), but Anthropic's tool-name rule is `^[a-zA-Z0-9_-]{1,64}$` and this
|
|
20
|
-
* server is meant to work with any MCP client, so the conservative alphabet is the one that
|
|
21
|
-
* cannot be wrong somewhere else.
|
|
22
|
-
*/
|
|
23
|
-
export function toolNameFor(app, capabilityName) {
|
|
24
|
-
const qualified = capabilityName.startsWith(`${app}.`) ? capabilityName : `${app}.${capabilityName}`;
|
|
25
|
-
return qualified.replace(/[^A-Za-z0-9_-]+/g, '_').replace(/^_+|_+$/g, '').slice(0, 64);
|
|
26
|
-
}
|
|
10
|
+
import { toolNameFor } from '@xenosystem/capability-sdk';
|
|
11
|
+
/** App-qualified, dot-free tool names — capability-sdk's rule, shared with the in-app panel. */
|
|
12
|
+
export { toolNameFor };
|
|
27
13
|
/** Descriptors whose publishing process still exists. Cheap, and never the whole answer. */
|
|
28
14
|
export function candidateDescriptors(options = {}) {
|
|
29
15
|
const isAlive = options.isAlive ?? processIsAlive;
|
|
@@ -42,6 +28,8 @@ export async function discover(options = {}) {
|
|
|
42
28
|
const { candidates, dead } = candidateDescriptors(options);
|
|
43
29
|
const entries = [];
|
|
44
30
|
const unreachable = [...dead];
|
|
31
|
+
const foreign = [];
|
|
32
|
+
const runningApps = new Set(candidates.map((descriptor) => descriptor.app));
|
|
45
33
|
const probes = candidates.map(async (descriptor) => {
|
|
46
34
|
const client = new CapabilityClient(descriptor, {
|
|
47
35
|
fetchImpl: options.fetchImpl,
|
|
@@ -61,6 +49,11 @@ export async function discover(options = {}) {
|
|
|
61
49
|
if (!probe)
|
|
62
50
|
continue;
|
|
63
51
|
for (const capability of probe.capabilities) {
|
|
52
|
+
const claimed = capability.name.split('.')[0];
|
|
53
|
+
if (claimed && claimed !== probe.descriptor.app && runningApps.has(claimed)) {
|
|
54
|
+
foreign.push({ app: probe.descriptor.app, capability: capability.name });
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
64
57
|
entries.push({
|
|
65
58
|
app: probe.descriptor.app,
|
|
66
59
|
capability,
|
|
@@ -70,7 +63,8 @@ export async function discover(options = {}) {
|
|
|
70
63
|
}
|
|
71
64
|
entries.sort((a, b) => a.toolName.localeCompare(b.toolName));
|
|
72
65
|
unreachable.sort((a, b) => a.app.localeCompare(b.app));
|
|
73
|
-
|
|
66
|
+
foreign.sort((a, b) => a.app.localeCompare(b.app) || a.capability.localeCompare(b.capability));
|
|
67
|
+
return { entries, unreachable, foreign };
|
|
74
68
|
}
|
|
75
69
|
/** The description a model sees. It has to carry the app and the risk, not just the verb. */
|
|
76
70
|
export function describeEntry(entry) {
|
package/dist/catalogue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../src/catalogue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAmB,MAAM,uBAAuB,CAAA;AAChG,OAAO,EAAE,cAAc,EAAE,eAAe,EAA6B,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../src/catalogue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAmB,MAAM,uBAAuB,CAAA;AAChG,OAAO,EAAE,cAAc,EAAE,eAAe,EAA6B,MAAM,kBAAkB,CAAA;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AA4BxD,gGAAgG;AAChG,OAAO,EAAE,WAAW,EAAE,CAAA;AAUtB,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,UAA2B,EAAE;IAIhE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAA;IACjD,MAAM,UAAU,GAA2B,EAAE,CAAA;IAC7C,MAAM,IAAI,GAAsC,EAAE,CAAA;IAClD,KAAK,MAAM,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;;YACnD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,sCAAsC,UAAU,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;IAC1G,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA;AAC7B,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,UAA2B,EAAE;IAC1D,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAqB,EAAE,CAAA;IACpC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IAC7B,MAAM,OAAO,GAA0C,EAAE,CAAA;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IAE3E,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE;YAC9C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,gBAAgB,EAAE,CAAA;YACpD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GACV,KAAK,YAAY,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAiB,KAAe,CAAC,OAAO,EAAE,CAAA;YACrG,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAA;YACjD,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7C,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5E,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;gBACxE,SAAQ;YACV,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG;gBACzB,UAAU;gBACV,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,CAAC;aAC7D,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC5D,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IAC9F,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA;AAC1C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,aAAa,CAAC,KAAqB;IACjD,MAAM,IAAI,GACR,KAAK,CAAC,UAAU,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU,CAAC,aAAa,KAAK,MAAM;QACzE,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,aAAa,GAAG;QACxC,CAAC,CAAC,EAAE,CAAA;IACR,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAA;AAChE,CAAC"}
|
package/dist/mcpServer.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ type JsonRpcResponse = {
|
|
|
43
43
|
export interface McpServerOptions extends DiscoverOptions {
|
|
44
44
|
/** Injected so the whole request/response cycle can be exercised without a real app. */
|
|
45
45
|
discoverImpl?: ((options: DiscoverOptions) => Promise<Catalogue>) | undefined;
|
|
46
|
+
/** Budget for one `tools/call`. Defaults to 120 s — see `CapabilityClientOptions.invokeTimeoutMs`. */
|
|
47
|
+
invokeTimeoutMs?: number | undefined;
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
48
50
|
* Handle one JSON-RPC request.
|
package/dist/mcpServer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../src/mcpServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAIhD,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE9F,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAC5C,eAAO,MAAM,WAAW,sBAAsB,CAAA;AAE9C,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,KAAK,eAAe,GAChB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC/D;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAE5F,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,wFAAwF;IACxF,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../src/mcpServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAIhD,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAE9F,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAC5C,eAAO,MAAM,WAAW,sBAAsB,CAAA;AAE9C,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,KAAK,eAAe,GAChB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC/D;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAE5F,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,wFAAwF;IACxF,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAA;IAC7E,sGAAsG;IACtG,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACrC;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAiHtC;AAED,qEAAqE;AACrE,wBAAgB,KAAK,CACnB,KAAK,GAAE,QAAwB,EAC/B,MAAM,GAAE,QAAyB,EACjC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
package/dist/mcpServer.js
CHANGED
|
@@ -100,6 +100,7 @@ export async function handleRequest(request, options = {}) {
|
|
|
100
100
|
const client = new CapabilityClient(descriptor, {
|
|
101
101
|
fetchImpl: options.fetchImpl,
|
|
102
102
|
timeoutMs: options.timeoutMs,
|
|
103
|
+
invokeTimeoutMs: options.invokeTimeoutMs,
|
|
103
104
|
});
|
|
104
105
|
try {
|
|
105
106
|
const result = await client.invoke(entry.capability.name, args);
|
package/dist/mcpServer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpServer.js","sourceRoot":"","sources":["../src/mcpServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAwC,MAAM,gBAAgB,CAAA;AAE9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAA;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"mcpServer.js","sourceRoot":"","sources":["../src/mcpServer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenosystem/capability-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.80",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"description": "Presents every running XENO application's capability server to an agent as MCP tools.",
|
|
6
6
|
"type": "module",
|
|
@@ -32,8 +32,10 @@
|
|
|
32
32
|
"url": "git+https://github.com/XENO-CORPORATION/xeno-agent-interface.git",
|
|
33
33
|
"directory": "packages/capability-mcp"
|
|
34
34
|
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@xenosystem/capability-sdk": "0.1.0"
|
|
37
|
+
},
|
|
35
38
|
"scripts": {
|
|
36
39
|
"smoke:live": "node scripts/smoke-live-app.mjs"
|
|
37
|
-
}
|
|
38
|
-
"gitHead": "d0ec450d718014c41186a62c8915b1d57a833bf3"
|
|
40
|
+
}
|
|
39
41
|
}
|