@capaxle/adapter-mcp 0.1.0-alpha.1
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/LICENSE +202 -0
- package/README.md +5 -0
- package/dist/host.d.ts +20 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +173 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +117 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +349 -0
- package/dist/manifest.js.map +1 -0
- package/dist/mcp.d.ts +167 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +445 -0
- package/dist/mcp.js.map +1 -0
- package/dist/schema.d.ts +7 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +212 -0
- package/dist/schema.js.map +1 -0
- package/dist/shared.d.ts +42 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +209 -0
- package/dist/shared.js.map +1 -0
- package/package.json +33 -0
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { canonicalBytes, compareText, dataObject, deepFreeze, GENERATOR_NAME, GENERATOR_VERSION, MCP_TARGET, ProjectionError, resolvedDiscoveryContext, validateDiscoveryContext, verifyCliBinary, verifyDocumentHash, } from "./shared.js";
|
|
3
|
+
const projection = (capability, name) => capability.interfaces[name];
|
|
4
|
+
function compareSemver(left, right) {
|
|
5
|
+
const parse = (value) => {
|
|
6
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?/.exec(value);
|
|
7
|
+
return match
|
|
8
|
+
? {
|
|
9
|
+
core: [Number(match[1]), Number(match[2]), Number(match[3])],
|
|
10
|
+
pre: match[4]?.split(".") ?? null,
|
|
11
|
+
}
|
|
12
|
+
: null;
|
|
13
|
+
};
|
|
14
|
+
const a = parse(left);
|
|
15
|
+
const b = parse(right);
|
|
16
|
+
if (!a || !b)
|
|
17
|
+
return compareText(left, right);
|
|
18
|
+
for (let index = 0; index < 3; index += 1) {
|
|
19
|
+
const difference = a.core[index] - b.core[index];
|
|
20
|
+
if (difference !== 0)
|
|
21
|
+
return difference;
|
|
22
|
+
}
|
|
23
|
+
if (a.pre === null || b.pre === null)
|
|
24
|
+
return a.pre === b.pre ? compareText(left, right) : a.pre === null ? 1 : -1;
|
|
25
|
+
const length = Math.max(a.pre.length, b.pre.length);
|
|
26
|
+
for (let index = 0; index < length; index += 1) {
|
|
27
|
+
const x = a.pre[index];
|
|
28
|
+
const y = b.pre[index];
|
|
29
|
+
if (x === undefined || y === undefined)
|
|
30
|
+
return x === y ? 0 : x === undefined ? -1 : 1;
|
|
31
|
+
if (x === y)
|
|
32
|
+
continue;
|
|
33
|
+
const xn = /^\d+$/.test(x);
|
|
34
|
+
const yn = /^\d+$/.test(y);
|
|
35
|
+
if (xn !== yn)
|
|
36
|
+
return xn ? -1 : 1;
|
|
37
|
+
return xn ? Number(x) - Number(y) : compareText(x, y);
|
|
38
|
+
}
|
|
39
|
+
return compareText(left, right);
|
|
40
|
+
}
|
|
41
|
+
function lifecycle(capability) {
|
|
42
|
+
const source = capability.lifecycle;
|
|
43
|
+
if (!dataObject(source) || typeof source.status !== "string")
|
|
44
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED", {
|
|
45
|
+
reason: "invalid_lifecycle",
|
|
46
|
+
capabilityId: capability.id,
|
|
47
|
+
});
|
|
48
|
+
const allowed = source.status === "deprecated"
|
|
49
|
+
? new Set(["status", "since", "deprecatedAt", "sunsetAt", "replacement"])
|
|
50
|
+
: source.status === "experimental" || source.status === "stable"
|
|
51
|
+
? new Set(["status", "since"])
|
|
52
|
+
: null;
|
|
53
|
+
if (!allowed ||
|
|
54
|
+
Object.keys(source).some((key) => !allowed.has(key)) ||
|
|
55
|
+
Object.entries(source).some(([key, value]) => key !== "status" && typeof value !== "string"))
|
|
56
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED", {
|
|
57
|
+
reason: "invalid_lifecycle",
|
|
58
|
+
capabilityId: capability.id,
|
|
59
|
+
});
|
|
60
|
+
const result = { status: source.status };
|
|
61
|
+
for (const key of ["since", "deprecatedAt", "sunsetAt", "replacement"])
|
|
62
|
+
if (source[key] !== undefined)
|
|
63
|
+
result[key] = source[key];
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
function validateVisibility(document, visibility) {
|
|
67
|
+
if (!visibility)
|
|
68
|
+
throw new ProjectionError("CAP_MANIFEST_VISIBILITY_INVALID", {
|
|
69
|
+
reason: "missing",
|
|
70
|
+
});
|
|
71
|
+
const result = new Set();
|
|
72
|
+
for (const entry of visibility) {
|
|
73
|
+
if (!dataObject(entry) ||
|
|
74
|
+
Object.keys(entry).sort().join("\0") !== "id\0interface\0version" ||
|
|
75
|
+
typeof entry.id !== "string" ||
|
|
76
|
+
typeof entry.version !== "string" ||
|
|
77
|
+
!["http", "cli", "mcp"].includes(entry.interface))
|
|
78
|
+
throw new ProjectionError("CAP_MANIFEST_VISIBILITY_INVALID", {
|
|
79
|
+
reason: "shape",
|
|
80
|
+
});
|
|
81
|
+
const key = `${entry.id}\0${entry.version}\0${entry.interface}`;
|
|
82
|
+
if (result.has(key))
|
|
83
|
+
throw new ProjectionError("CAP_MANIFEST_VISIBILITY_INVALID", {
|
|
84
|
+
reason: "duplicate",
|
|
85
|
+
});
|
|
86
|
+
const capability = document.capabilities.find((candidate) => candidate.id === entry.id && candidate.version === entry.version);
|
|
87
|
+
if (!capability ||
|
|
88
|
+
projection(capability, entry.interface).enabled !== true ||
|
|
89
|
+
capability.access.exposure[entry.interface] === "disabled")
|
|
90
|
+
throw new ProjectionError("CAP_MANIFEST_VISIBILITY_INVALID", {
|
|
91
|
+
reason: "unknown_or_disabled",
|
|
92
|
+
});
|
|
93
|
+
result.add(key);
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
const rfc3986 = (value) => encodeURIComponent(value).replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
98
|
+
function manifestCapability(capability, profile, live, discovery, cliBinary) {
|
|
99
|
+
const exposure = {};
|
|
100
|
+
const interfaces = {};
|
|
101
|
+
const describe = {};
|
|
102
|
+
for (const name of ["http", "cli", "mcp"]) {
|
|
103
|
+
const item = projection(capability, name);
|
|
104
|
+
const canonicalExposure = capability.access.exposure[name];
|
|
105
|
+
const selected = item.enabled === true &&
|
|
106
|
+
canonicalExposure !== "disabled" &&
|
|
107
|
+
(profile === "private" ||
|
|
108
|
+
(profile === "public" && canonicalExposure === "public") ||
|
|
109
|
+
(profile === "live" &&
|
|
110
|
+
live.has(`${capability.id}\0${capability.version}\0${name}`)));
|
|
111
|
+
if (!selected)
|
|
112
|
+
continue;
|
|
113
|
+
exposure[name] = canonicalExposure;
|
|
114
|
+
if (name === "http") {
|
|
115
|
+
if (typeof item.method !== "string" || typeof item.path !== "string")
|
|
116
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
117
|
+
interfaces.http = { method: item.method, path: item.path };
|
|
118
|
+
describe.http = discovery.http.detailTemplate.replace("{id}", rfc3986(capability.id));
|
|
119
|
+
}
|
|
120
|
+
else if (name === "cli") {
|
|
121
|
+
verifyCliBinary(cliBinary);
|
|
122
|
+
if (!Array.isArray(item.command) ||
|
|
123
|
+
item.command.some((part) => typeof part !== "string"))
|
|
124
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
125
|
+
interfaces.cli = { command: [cliBinary, ...item.command] };
|
|
126
|
+
describe.cli = [
|
|
127
|
+
cliBinary,
|
|
128
|
+
"capabilities",
|
|
129
|
+
"describe",
|
|
130
|
+
capability.id,
|
|
131
|
+
"--json",
|
|
132
|
+
];
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
if (typeof item.toolName !== "string")
|
|
136
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
137
|
+
interfaces.mcp = { toolName: item.toolName };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (profile !== "private" && Object.keys(interfaces).length === 0)
|
|
141
|
+
return null;
|
|
142
|
+
const effects = capability.effects;
|
|
143
|
+
if (!["read", "write", "destructive"].includes(effects.impact) ||
|
|
144
|
+
!["none", "required"].includes(effects.confirmation) ||
|
|
145
|
+
!["none", "intrinsic", "key"].includes(effects.idempotency))
|
|
146
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED", {
|
|
147
|
+
reason: "unsupported_effects",
|
|
148
|
+
});
|
|
149
|
+
return {
|
|
150
|
+
id: capability.id,
|
|
151
|
+
version: capability.version,
|
|
152
|
+
summary: capability.summary,
|
|
153
|
+
lifecycle: lifecycle(capability),
|
|
154
|
+
exposure,
|
|
155
|
+
effects: {
|
|
156
|
+
impact: effects.impact,
|
|
157
|
+
confirmation: effects.confirmation,
|
|
158
|
+
idempotency: effects.idempotency,
|
|
159
|
+
},
|
|
160
|
+
interfaces,
|
|
161
|
+
describe,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
export function generateAgentManifest(options) {
|
|
165
|
+
verifyDocumentHash(options.document, options.irHash);
|
|
166
|
+
const discovery = validateDiscoveryContext(options.discovery);
|
|
167
|
+
const profile = options.profile ?? "private";
|
|
168
|
+
if (!["private", "public", "live"].includes(profile))
|
|
169
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED", {
|
|
170
|
+
reason: "invalid_profile",
|
|
171
|
+
});
|
|
172
|
+
const live = profile === "live"
|
|
173
|
+
? validateVisibility(options.document, options.visibility)
|
|
174
|
+
: null;
|
|
175
|
+
if (profile !== "live" && options.visibility !== undefined)
|
|
176
|
+
throw new ProjectionError("CAP_MANIFEST_VISIBILITY_INVALID", {
|
|
177
|
+
reason: "unexpected",
|
|
178
|
+
});
|
|
179
|
+
const capabilities = [...options.document.capabilities]
|
|
180
|
+
.sort((left, right) => compareText(left.id, right.id) ||
|
|
181
|
+
compareSemver(left.version, right.version) ||
|
|
182
|
+
compareText(left.version, right.version))
|
|
183
|
+
.map((capability) => manifestCapability(capability, profile, live, discovery, options.cliBinary))
|
|
184
|
+
.filter((value) => value !== null);
|
|
185
|
+
const namespaces = [
|
|
186
|
+
...new Set(capabilities.map((entry) => String(entry.id).split(".")[0])),
|
|
187
|
+
].sort(compareText);
|
|
188
|
+
const service = options.document
|
|
189
|
+
.service;
|
|
190
|
+
if (!dataObject(service) ||
|
|
191
|
+
typeof service.name !== "string" ||
|
|
192
|
+
typeof service.version !== "string")
|
|
193
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
194
|
+
return deepFreeze({
|
|
195
|
+
manifestVersion: "0.1",
|
|
196
|
+
profile,
|
|
197
|
+
service: { name: service.name, version: service.version },
|
|
198
|
+
irVersion: "0.1",
|
|
199
|
+
irHash: options.irHash,
|
|
200
|
+
generatedBy: { name: GENERATOR_NAME, version: GENERATOR_VERSION },
|
|
201
|
+
discovery: {
|
|
202
|
+
http: discovery.http,
|
|
203
|
+
mcp: { endpoint: discovery.mcp.endpoint, target: MCP_TARGET },
|
|
204
|
+
},
|
|
205
|
+
namespaces,
|
|
206
|
+
capabilities,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
const SHA256 = /^sha256:[0-9a-f]{64}$/;
|
|
210
|
+
function verifyLocator(build, payload) {
|
|
211
|
+
if (!dataObject(build))
|
|
212
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
213
|
+
const keys = Object.keys(build).sort().join("\0");
|
|
214
|
+
if (keys !==
|
|
215
|
+
[
|
|
216
|
+
"artifactGraphVersion",
|
|
217
|
+
"buildId",
|
|
218
|
+
"index",
|
|
219
|
+
"indexSha256",
|
|
220
|
+
"payloadArtifactId",
|
|
221
|
+
"payloadSha256",
|
|
222
|
+
]
|
|
223
|
+
.sort()
|
|
224
|
+
.join("\0") ||
|
|
225
|
+
build.artifactGraphVersion !== "0.2" ||
|
|
226
|
+
build.payloadArtifactId !== "capaxle.agent-manifest" ||
|
|
227
|
+
typeof build.buildId !== "string" ||
|
|
228
|
+
typeof build.indexSha256 !== "string" ||
|
|
229
|
+
typeof build.payloadSha256 !== "string" ||
|
|
230
|
+
!SHA256.test(build.buildId) ||
|
|
231
|
+
!SHA256.test(build.indexSha256) ||
|
|
232
|
+
!SHA256.test(build.payloadSha256) ||
|
|
233
|
+
typeof build.index !== "string" ||
|
|
234
|
+
build.index.startsWith("/") ||
|
|
235
|
+
build.index
|
|
236
|
+
.split("/")
|
|
237
|
+
.some((part) => part === "" || part === "." || part === "..") ||
|
|
238
|
+
build.index.split("/").includes("current.json") ||
|
|
239
|
+
`sha256:${createHash("sha256").update(payload).digest("hex")}` !==
|
|
240
|
+
build.payloadSha256)
|
|
241
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED", {
|
|
242
|
+
reason: "invalid_build_locator",
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
export function assembleAgentManifestRoot(context) {
|
|
246
|
+
verifyLocator(context.build, context.payload);
|
|
247
|
+
let payload;
|
|
248
|
+
try {
|
|
249
|
+
payload = JSON.parse(new TextDecoder().decode(context.payload));
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
253
|
+
}
|
|
254
|
+
if (!dataObject(payload) ||
|
|
255
|
+
payload.manifestVersion !== "0.1" ||
|
|
256
|
+
Object.hasOwn(payload, "build"))
|
|
257
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
258
|
+
return canonicalBytes({
|
|
259
|
+
...payload,
|
|
260
|
+
build: context.build,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
export function createAgentManifestArtifactProducer(options = {}) {
|
|
264
|
+
const discoveryAssertion = options.discovery === undefined
|
|
265
|
+
? undefined
|
|
266
|
+
: validateDiscoveryContext(options.discovery);
|
|
267
|
+
const profile = options.profile ?? "private";
|
|
268
|
+
return deepFreeze({
|
|
269
|
+
id: "capaxle.agent-manifest",
|
|
270
|
+
version: GENERATOR_VERSION,
|
|
271
|
+
staticInputs: {
|
|
272
|
+
profile,
|
|
273
|
+
...(discoveryAssertion === undefined ? {} : { discoveryAssertion }),
|
|
274
|
+
},
|
|
275
|
+
diagnosticCodes: [
|
|
276
|
+
{
|
|
277
|
+
code: "CAP_BUILD_CONTEXT_INVALID",
|
|
278
|
+
severities: ["error"],
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
code: "CAP_DISCOVERY_CONTEXT_MISMATCH",
|
|
282
|
+
severities: ["error"],
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
code: "CAP_MANIFEST_GENERATION_FAILED",
|
|
286
|
+
severities: ["error"],
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
code: "CAP_MANIFEST_VISIBILITY_INVALID",
|
|
290
|
+
severities: ["error"],
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
artifacts: [
|
|
294
|
+
{
|
|
295
|
+
id: "capaxle.agent-manifest",
|
|
296
|
+
path: "agent-manifest.json",
|
|
297
|
+
mediaType: "application/json",
|
|
298
|
+
target: "capaxle:agent-manifest@0.1",
|
|
299
|
+
dependencies: ["document:capability-ir"],
|
|
300
|
+
produce(context) {
|
|
301
|
+
try {
|
|
302
|
+
const discovery = resolvedDiscoveryContext(context.buildContext.discovery, discoveryAssertion);
|
|
303
|
+
const bytes = context.dependencyBytes.get("document:capability-ir");
|
|
304
|
+
if (!bytes)
|
|
305
|
+
throw new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
306
|
+
const document = JSON.parse(new TextDecoder().decode(bytes));
|
|
307
|
+
return {
|
|
308
|
+
ok: true,
|
|
309
|
+
bytes: canonicalBytes(generateAgentManifest({
|
|
310
|
+
document,
|
|
311
|
+
irHash: context.buildContext.irHash,
|
|
312
|
+
discovery,
|
|
313
|
+
profile,
|
|
314
|
+
...(context.buildContext.cliBinary === undefined
|
|
315
|
+
? {}
|
|
316
|
+
: { cliBinary: context.buildContext.cliBinary }),
|
|
317
|
+
})),
|
|
318
|
+
diagnostics: [],
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
const failure = error instanceof ProjectionError
|
|
323
|
+
? error
|
|
324
|
+
: new ProjectionError("CAP_MANIFEST_GENERATION_FAILED");
|
|
325
|
+
return {
|
|
326
|
+
ok: false,
|
|
327
|
+
diagnostics: [
|
|
328
|
+
{
|
|
329
|
+
code: failure.code,
|
|
330
|
+
severity: "error",
|
|
331
|
+
message: "Agent manifest generation failed.",
|
|
332
|
+
target: "capaxle:agent-manifest@0.1",
|
|
333
|
+
details: failure.details,
|
|
334
|
+
},
|
|
335
|
+
],
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
],
|
|
341
|
+
rootPublication: {
|
|
342
|
+
payloadArtifactId: "capaxle.agent-manifest",
|
|
343
|
+
rootPath: "capaxle.manifest.json",
|
|
344
|
+
legacyPath: "capabuild.manifest.json",
|
|
345
|
+
assemble: assembleAgentManifestRoot,
|
|
346
|
+
},
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { JsonSchema, JsonValue } from "@capaxle/ir";
|
|
2
|
+
import type { AdapterIngress, InvocationResult, RuntimeDocument } from "@capaxle/runtime";
|
|
3
|
+
import { MCP_INVOCATION_META, MCP_PROFILE_VERSION, MCP_TARGET, MCP_TOOL_META, type DiscoveryContext } from "./shared.js";
|
|
4
|
+
type Capability = RuntimeDocument["capabilities"][number];
|
|
5
|
+
type Exposure = "disabled" | "private" | "authenticated" | "public";
|
|
6
|
+
type DisclosureProfile = "private" | "public";
|
|
7
|
+
export interface McpToolDefinition {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly description: string;
|
|
10
|
+
readonly inputSchema: JsonSchema;
|
|
11
|
+
readonly outputSchema: JsonSchema;
|
|
12
|
+
readonly annotations: Readonly<Record<string, boolean>>;
|
|
13
|
+
readonly _meta: {
|
|
14
|
+
readonly [MCP_TOOL_META]: {
|
|
15
|
+
readonly profileVersion: typeof MCP_PROFILE_VERSION;
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly version: string;
|
|
18
|
+
readonly irHash: string;
|
|
19
|
+
readonly confirmation: string;
|
|
20
|
+
readonly idempotency: string;
|
|
21
|
+
readonly invocationMetadataKey: typeof MCP_INVOCATION_META;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface McpToolResult {
|
|
26
|
+
readonly resultType: "complete";
|
|
27
|
+
readonly isError: boolean;
|
|
28
|
+
readonly structuredContent: InvocationResult;
|
|
29
|
+
readonly content: readonly [{
|
|
30
|
+
readonly type: "text";
|
|
31
|
+
readonly text: string;
|
|
32
|
+
}];
|
|
33
|
+
}
|
|
34
|
+
export interface McpJsonRpcError {
|
|
35
|
+
readonly jsonrpcError: {
|
|
36
|
+
readonly code: number;
|
|
37
|
+
readonly message: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export interface McpCallParams {
|
|
41
|
+
readonly name: string;
|
|
42
|
+
readonly arguments: Readonly<Record<string, unknown>>;
|
|
43
|
+
readonly _meta?: Readonly<Record<string, unknown>>;
|
|
44
|
+
}
|
|
45
|
+
export interface McpRequestContext {
|
|
46
|
+
readonly credentials?: unknown;
|
|
47
|
+
readonly signal?: AbortSignal;
|
|
48
|
+
readonly clientCanSendInvocationMetadata?: boolean;
|
|
49
|
+
readonly discovery?: McpTrustedDiscoveryContext;
|
|
50
|
+
}
|
|
51
|
+
export interface McpTrustedDiscoveryContext {
|
|
52
|
+
readonly visibility: "authenticated" | "private";
|
|
53
|
+
readonly principal?: JsonValue;
|
|
54
|
+
}
|
|
55
|
+
export interface McpToolVisibilityContext {
|
|
56
|
+
readonly visibility: "public" | "authenticated" | "private";
|
|
57
|
+
readonly principal?: JsonValue;
|
|
58
|
+
}
|
|
59
|
+
export interface McpAdapterOptions {
|
|
60
|
+
readonly document: RuntimeDocument;
|
|
61
|
+
readonly irHash: string;
|
|
62
|
+
readonly ingress: AdapterIngress;
|
|
63
|
+
readonly discovery: DiscoveryContext;
|
|
64
|
+
readonly target?: string;
|
|
65
|
+
readonly profile?: DisclosureProfile;
|
|
66
|
+
readonly isToolVisible?: (capability: Readonly<{
|
|
67
|
+
id: string;
|
|
68
|
+
version: string;
|
|
69
|
+
exposure: Exposure;
|
|
70
|
+
}>, context: McpToolVisibilityContext) => boolean | Promise<boolean>;
|
|
71
|
+
}
|
|
72
|
+
export interface McpAdapter {
|
|
73
|
+
readonly target: typeof MCP_TARGET;
|
|
74
|
+
readonly endpoint: string;
|
|
75
|
+
readonly irHash: string;
|
|
76
|
+
readonly discoveryContext: DiscoveryContext;
|
|
77
|
+
listTools(context?: McpRequestContext): Promise<readonly McpToolDefinition[]>;
|
|
78
|
+
callTool(params: unknown, context?: McpRequestContext): Promise<McpToolResult | McpJsonRpcError>;
|
|
79
|
+
}
|
|
80
|
+
export declare function mcpAnnotations(effects: Capability["effects"]): Readonly<Record<string, boolean>>;
|
|
81
|
+
export interface McpSnapshotOptions {
|
|
82
|
+
readonly document: RuntimeDocument;
|
|
83
|
+
readonly irHash: string;
|
|
84
|
+
readonly discovery: DiscoveryContext;
|
|
85
|
+
readonly target?: string;
|
|
86
|
+
readonly profile?: DisclosureProfile;
|
|
87
|
+
}
|
|
88
|
+
export declare function generateMcpSnapshot(options: McpSnapshotOptions): JsonValue;
|
|
89
|
+
export declare function toMcpToolResult(result: InvocationResult): McpToolResult;
|
|
90
|
+
export declare function createMcpAdapter(options: McpAdapterOptions): McpAdapter;
|
|
91
|
+
interface ArtifactContext {
|
|
92
|
+
readonly buildContext: {
|
|
93
|
+
readonly irHash: string;
|
|
94
|
+
readonly discovery: DiscoveryContext;
|
|
95
|
+
};
|
|
96
|
+
readonly dependencyBytes: ReadonlyMap<string, Uint8Array>;
|
|
97
|
+
}
|
|
98
|
+
export declare function createMcpSnapshotArtifactProducer(options?: Readonly<{
|
|
99
|
+
discovery?: DiscoveryContext;
|
|
100
|
+
profile?: DisclosureProfile;
|
|
101
|
+
}>): {
|
|
102
|
+
id: string;
|
|
103
|
+
version: "0.1.0-alpha.1";
|
|
104
|
+
staticInputs: {
|
|
105
|
+
discoveryAssertion?: DiscoveryContext;
|
|
106
|
+
profile: DisclosureProfile;
|
|
107
|
+
};
|
|
108
|
+
diagnosticCodes: ({
|
|
109
|
+
code: "CAP_BUILD_CONTEXT_INVALID";
|
|
110
|
+
severities: "error"[];
|
|
111
|
+
} | {
|
|
112
|
+
code: "CAP_DISCOVERY_CONTEXT_MISMATCH";
|
|
113
|
+
severities: "error"[];
|
|
114
|
+
} | {
|
|
115
|
+
code: "CAP_HTTP_ROUTE_COLLISION";
|
|
116
|
+
severities: "error"[];
|
|
117
|
+
} | {
|
|
118
|
+
code: "CAP_MCP_CLIENT_METADATA_REQUIRED";
|
|
119
|
+
severities: "warning"[];
|
|
120
|
+
} | {
|
|
121
|
+
code: "CAP_MCP_SCHEMA_UNREPRESENTABLE";
|
|
122
|
+
severities: "error"[];
|
|
123
|
+
} | {
|
|
124
|
+
code: "CAP_MCP_TARGET_UNSUPPORTED";
|
|
125
|
+
severities: "error"[];
|
|
126
|
+
} | {
|
|
127
|
+
code: "CAP_MCP_TOOL_NAME_COLLISION";
|
|
128
|
+
severities: "error"[];
|
|
129
|
+
} | {
|
|
130
|
+
code: "CAP_MCP_TOOL_NAME_INVALID";
|
|
131
|
+
severities: "error"[];
|
|
132
|
+
} | {
|
|
133
|
+
code: "CAP_MCP_TOOL_NAME_TOO_LONG";
|
|
134
|
+
severities: "error"[];
|
|
135
|
+
})[];
|
|
136
|
+
artifacts: {
|
|
137
|
+
id: string;
|
|
138
|
+
path: string;
|
|
139
|
+
mediaType: string;
|
|
140
|
+
target: "mcp@2026-07-28/streamable-http/tools-unary-v2";
|
|
141
|
+
dependencies: "document:capability-ir"[];
|
|
142
|
+
produce(context: ArtifactContext): {
|
|
143
|
+
ok: true;
|
|
144
|
+
bytes: Uint8Array<ArrayBufferLike>;
|
|
145
|
+
diagnostics: {
|
|
146
|
+
code: "CAP_MCP_CLIENT_METADATA_REQUIRED";
|
|
147
|
+
severity: "warning";
|
|
148
|
+
message: string;
|
|
149
|
+
target: "mcp@2026-07-28/streamable-http/tools-unary-v2";
|
|
150
|
+
capabilityId: string;
|
|
151
|
+
path: string;
|
|
152
|
+
}[];
|
|
153
|
+
} | {
|
|
154
|
+
ok: false;
|
|
155
|
+
diagnostics: {
|
|
156
|
+
code: `CAP_${string}`;
|
|
157
|
+
severity: "error";
|
|
158
|
+
message: string;
|
|
159
|
+
target: "mcp@2026-07-28/streamable-http/tools-unary-v2";
|
|
160
|
+
details: JsonValue;
|
|
161
|
+
}[];
|
|
162
|
+
bytes?: never;
|
|
163
|
+
};
|
|
164
|
+
}[];
|
|
165
|
+
};
|
|
166
|
+
export {};
|
|
167
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|