@axtary/mcp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,429 @@
1
+ import { generateKeyPairSync, createPrivateKey, randomUUID } from "node:crypto";
2
+ import { mkdir, open, readFile, rename, rm } from "node:fs/promises";
3
+ import { dirname } from "node:path";
4
+ import { decodeProtectedHeader, importJWK, jwtVerify, SignJWT, } from "jose";
5
+ import { z } from "zod";
6
+ import { createMcpToolHandler, hashMcpToolDefinition, mcpToolResource, } from "./core.js";
7
+ /**
8
+ * A signed MCP tool definition gives a tool a *publisher identity* and an
9
+ * immutable, versioned lineage on top of the content hash that
10
+ * `@axtary/mcp` already computes. This is the Axtary profile of the ETDI idea
11
+ * (arXiv:2506.01333): the publisher signs the exact `definitionHash`, a
12
+ * semantic version, the required scopes, and a pointer to the prior version's
13
+ * hash. A client rejects any definition that is unsigned, signed by an
14
+ * unknown key, mis-signed, or whose on-the-wire bytes no longer hash to the
15
+ * signed `definitionHash` — and it rejects it *before* the tool is invoked.
16
+ *
17
+ * We stay on the JOSE/ES256 profile already used by the ActionPass issuer
18
+ * keyring; the signature is a compact JWT (`statement+jwt`).
19
+ */
20
+ export const MCP_SIGNED_DEFINITION_PROFILE = "axtary.mcp_signed_definition.v1";
21
+ export const MCP_SIGNED_DEFINITION_TYP = "axtary-mcp-tool-definition+jwt";
22
+ export const MCP_PUBLISHER_KEYRING_VERSION = "axtary.mcp_publisher_keyring.v0";
23
+ export const MCP_PUBLISHER_TRUST_VERSION = "axtary.mcp_publisher_trust.v0";
24
+ export const MCP_SIGNED_DEFINITION_REGISTRY_VERSION = "axtary.mcp_signed_definition_registry.v0";
25
+ const SemverSchema = z
26
+ .string()
27
+ .regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/, "mcp_semver_invalid");
28
+ /**
29
+ * The claims the publisher signs. `definitionHash` binds the signature to the
30
+ * exact tool definition; `priorDefinitionHash` links this version to the one
31
+ * it supersedes so a rug-pull (silent re-definition) is visible as a chain.
32
+ */
33
+ export const McpSignedDefinitionClaimsSchema = z.object({
34
+ iss: z.string().min(1),
35
+ sub: z.string().min(1),
36
+ iat: z.number().int().positive(),
37
+ axtary_mcp_profile: z.literal(MCP_SIGNED_DEFINITION_PROFILE),
38
+ serverIdentity: z.string().min(1),
39
+ toolName: z.string().min(1),
40
+ schemaVersion: z.string().min(1),
41
+ definitionHash: z.string().regex(/^sha256:[a-f0-9]{64}$/),
42
+ semver: SemverSchema,
43
+ requiredScopes: z.array(z.string().min(1)).default([]),
44
+ priorDefinitionHash: z
45
+ .string()
46
+ .regex(/^sha256:[a-f0-9]{64}$/)
47
+ .nullable()
48
+ .default(null),
49
+ });
50
+ /** A public publisher key, JWKS-shaped, resolvable by `kid`. */
51
+ export const McpPublisherKeySchema = z.object({
52
+ kid: z.string().min(1),
53
+ kty: z.string().min(1),
54
+ crv: z.string().min(1),
55
+ x: z.string().min(1),
56
+ y: z.string().min(1),
57
+ alg: z.literal("ES256").default("ES256"),
58
+ use: z.literal("sig").default("sig"),
59
+ });
60
+ const McpPublisherKeyRecordSchema = McpPublisherKeySchema.extend({
61
+ privateKeyPem: z.string().min(1),
62
+ createdAt: z.string().min(1),
63
+ });
64
+ export const McpPublisherKeyringSchema = z.object({
65
+ schemaVersion: z.literal(MCP_PUBLISHER_KEYRING_VERSION),
66
+ publisher: z.string().min(1),
67
+ activeKid: z.string().min(1),
68
+ keys: z.array(McpPublisherKeyRecordSchema).min(1),
69
+ });
70
+ /**
71
+ * The verifier-side trust anchor: a configured map of publisher identity to
72
+ * the public keys we will accept signatures from. A signature whose `kid` is
73
+ * not in this store is rejected — there is no trust-on-first-use for
74
+ * *signatures* (that would defeat publisher identity); TOFU stays at the pin
75
+ * layer, which is a deliberate, separate, human-reviewed decision.
76
+ */
77
+ export const McpPublisherTrustEntrySchema = z.object({
78
+ publisher: z.string().min(1),
79
+ keys: z.array(McpPublisherKeySchema).min(1),
80
+ });
81
+ export const McpPublisherTrustStoreSchema = z.object({
82
+ schemaVersion: z.literal(MCP_PUBLISHER_TRUST_VERSION),
83
+ publishers: z.array(McpPublisherTrustEntrySchema).default([]),
84
+ });
85
+ export const McpSignedDefinitionRegistryEntrySchema = z.object({
86
+ serverIdentity: z.string().min(1),
87
+ toolName: z.string().min(1),
88
+ publisher: z.string().min(1),
89
+ statement: z.string().min(1),
90
+ });
91
+ export const McpSignedDefinitionRegistrySchema = z.object({
92
+ schemaVersion: z.literal(MCP_SIGNED_DEFINITION_REGISTRY_VERSION),
93
+ statements: z.array(McpSignedDefinitionRegistryEntrySchema).default([]),
94
+ });
95
+ /**
96
+ * Publisher-side: sign a tool definition. The signature commits to the exact
97
+ * `definitionHash`, so a later byte-level change to the definition cannot be
98
+ * presented under this signature.
99
+ */
100
+ export async function signMcpToolDefinition(input) {
101
+ const semver = SemverSchema.parse(input.semver);
102
+ const definitionHash = hashMcpToolDefinition(input.definition);
103
+ const serverIdentity = input.definition.serverIdentity;
104
+ const toolName = input.definition.name;
105
+ const issuedAt = Math.floor((input.now ?? new Date()).getTime() / 1000);
106
+ const claims = McpSignedDefinitionClaimsSchema.parse({
107
+ iss: input.publisher,
108
+ sub: mcpToolResource(serverIdentity, toolName),
109
+ iat: issuedAt,
110
+ axtary_mcp_profile: MCP_SIGNED_DEFINITION_PROFILE,
111
+ serverIdentity,
112
+ toolName,
113
+ schemaVersion: input.definition.schemaVersion,
114
+ definitionHash,
115
+ semver,
116
+ requiredScopes: input.requiredScopes ?? [],
117
+ priorDefinitionHash: input.priorDefinitionHash ?? null,
118
+ });
119
+ const statement = await new SignJWT({
120
+ axtary_mcp_profile: claims.axtary_mcp_profile,
121
+ serverIdentity: claims.serverIdentity,
122
+ toolName: claims.toolName,
123
+ schemaVersion: claims.schemaVersion,
124
+ definitionHash: claims.definitionHash,
125
+ semver: claims.semver,
126
+ requiredScopes: claims.requiredScopes,
127
+ priorDefinitionHash: claims.priorDefinitionHash,
128
+ })
129
+ .setProtectedHeader({
130
+ alg: "ES256",
131
+ kid: input.keyId,
132
+ typ: MCP_SIGNED_DEFINITION_TYP,
133
+ })
134
+ .setIssuer(claims.iss)
135
+ .setSubject(claims.sub)
136
+ .setIssuedAt(issuedAt)
137
+ .sign(input.signingKey);
138
+ return { statement, claims };
139
+ }
140
+ /**
141
+ * Verifier-side: verify a signed definition against a known publisher key and
142
+ * the *actual* tool definition presented now. Fails closed on every distinct
143
+ * failure with a stable reason. The `definitionHash` recomputed from the live
144
+ * definition must equal the signed hash — that is the altered-definition /
145
+ * tool-poisoning rejection.
146
+ */
147
+ export async function verifyMcpSignedDefinition(input) {
148
+ let header;
149
+ try {
150
+ header = decodeProtectedHeader(input.statement);
151
+ }
152
+ catch {
153
+ throw new Error("mcp_signature_malformed");
154
+ }
155
+ if (header.typ !== MCP_SIGNED_DEFINITION_TYP) {
156
+ throw new Error("mcp_signature_type_invalid");
157
+ }
158
+ if (!header.kid) {
159
+ throw new Error("mcp_signature_key_id_required");
160
+ }
161
+ const key = await input.verificationKeys(header.kid);
162
+ if (!key) {
163
+ throw new Error(`mcp_publisher_key_not_found:${header.kid}`);
164
+ }
165
+ const expectedSubject = mcpToolResource(input.definition.serverIdentity, input.definition.name);
166
+ let payload;
167
+ try {
168
+ ({ payload } = await jwtVerify(input.statement, key, {
169
+ algorithms: ["ES256"],
170
+ issuer: input.expectedPublisher,
171
+ subject: expectedSubject,
172
+ }));
173
+ }
174
+ catch {
175
+ throw new Error("mcp_signature_invalid");
176
+ }
177
+ const parsed = McpSignedDefinitionClaimsSchema.safeParse(payload);
178
+ if (!parsed.success) {
179
+ throw new Error("mcp_signed_claims_invalid");
180
+ }
181
+ const claims = parsed.data;
182
+ if (claims.axtary_mcp_profile !== MCP_SIGNED_DEFINITION_PROFILE) {
183
+ throw new Error("mcp_signed_profile_invalid");
184
+ }
185
+ if (claims.serverIdentity !== input.definition.serverIdentity) {
186
+ throw new Error(`mcp_signed_server_identity_mismatch:${input.definition.serverIdentity}`);
187
+ }
188
+ if (claims.toolName !== input.definition.name) {
189
+ throw new Error(`mcp_signed_tool_name_mismatch:${input.definition.name}`);
190
+ }
191
+ if (claims.schemaVersion !== input.definition.schemaVersion) {
192
+ throw new Error(`mcp_signed_schema_version_mismatch:${input.definition.schemaVersion}`);
193
+ }
194
+ const liveHash = hashMcpToolDefinition(input.definition);
195
+ if (claims.definitionHash !== liveHash) {
196
+ throw new Error(`mcp_signed_definition_hash_mismatch:${liveHash}`);
197
+ }
198
+ return {
199
+ claims,
200
+ publisher: claims.iss,
201
+ kid: header.kid,
202
+ semver: claims.semver,
203
+ requiredScopes: claims.requiredScopes,
204
+ definitionHash: claims.definitionHash,
205
+ priorDefinitionHash: claims.priorDefinitionHash,
206
+ };
207
+ }
208
+ /**
209
+ * Wrap a tool invoker so the publisher signature is verified against the live
210
+ * definition *before* the tool runs. Any failure — unsigned (no statement
211
+ * configured is simply not this handler), mis-signed, unknown key, or an
212
+ * altered definition whose bytes no longer hash to the signed value — throws
213
+ * and the tool is never invoked. When the action carries bound provenance, it
214
+ * must also agree with the verified signature.
215
+ */
216
+ export function createSignedMcpToolHandler(input) {
217
+ const baseHandler = createMcpToolHandler({
218
+ definition: input.definition,
219
+ invoke: input.invoke,
220
+ });
221
+ return async (request) => {
222
+ const verification = await verifyMcpSignedDefinition({
223
+ statement: input.statement,
224
+ definition: input.definition,
225
+ verificationKeys: input.verificationKeys,
226
+ expectedPublisher: input.expectedPublisher,
227
+ });
228
+ assertActionProvenanceMatches(request.action, verification);
229
+ return baseHandler(request);
230
+ };
231
+ }
232
+ /**
233
+ * If an action was built with bound signed provenance, it must match the
234
+ * signature we just verified. A hash-only action (no bound provenance) is
235
+ * allowed through a signed handler — the signature check above already gates
236
+ * it — but mismatched bound provenance is a fail-closed rejection.
237
+ */
238
+ function assertActionProvenanceMatches(action, verification) {
239
+ const bound = action.toolDefinition;
240
+ if (!bound)
241
+ return;
242
+ if (bound.definitionHash !== verification.definitionHash) {
243
+ throw new Error(`mcp_signed_definition_hash_mismatch:${verification.definitionHash}`);
244
+ }
245
+ if (bound.publisher && bound.publisher !== verification.publisher) {
246
+ throw new Error(`mcp_signed_publisher_mismatch:${verification.publisher}`);
247
+ }
248
+ if (bound.publisherKeyId && bound.publisherKeyId !== verification.kid) {
249
+ throw new Error(`mcp_signed_publisher_key_mismatch:${verification.kid}`);
250
+ }
251
+ if (bound.semver && bound.semver !== verification.semver) {
252
+ throw new Error(`mcp_signed_semver_mismatch:${verification.semver}`);
253
+ }
254
+ }
255
+ /**
256
+ * Build a key resolver from a configured trust store. A `kid` that is not
257
+ * present (optionally scoped to `expectedPublisher`) resolves to `undefined`,
258
+ * which makes verification fail closed.
259
+ */
260
+ export function mcpPublisherKeyResolver(store, options = {}) {
261
+ const parsed = McpPublisherTrustStoreSchema.parse(store);
262
+ return async (kid) => {
263
+ if (!kid)
264
+ return undefined;
265
+ for (const entry of parsed.publishers) {
266
+ if (options.publisher && entry.publisher !== options.publisher) {
267
+ continue;
268
+ }
269
+ const jwk = entry.keys.find((key) => key.kid === kid);
270
+ if (jwk) {
271
+ return importJWK(jwk, "ES256");
272
+ }
273
+ }
274
+ return undefined;
275
+ };
276
+ }
277
+ export function emptyMcpPublisherTrustStore() {
278
+ return { schemaVersion: MCP_PUBLISHER_TRUST_VERSION, publishers: [] };
279
+ }
280
+ export function parseMcpPublisherTrustStore(input) {
281
+ return McpPublisherTrustStoreSchema.parse(input);
282
+ }
283
+ export async function loadMcpPublisherTrustStore(path) {
284
+ try {
285
+ return parseMcpPublisherTrustStore(JSON.parse(await readFile(path, "utf8")));
286
+ }
287
+ catch (error) {
288
+ if (error.code === "ENOENT") {
289
+ return emptyMcpPublisherTrustStore();
290
+ }
291
+ throw error;
292
+ }
293
+ }
294
+ export async function saveMcpPublisherTrustStore(path, store) {
295
+ await writePrivateJson(path, McpPublisherTrustStoreSchema.parse(store));
296
+ }
297
+ export async function loadMcpSignedDefinitionRegistry(path) {
298
+ try {
299
+ return McpSignedDefinitionRegistrySchema.parse(JSON.parse(await readFile(path, "utf8")));
300
+ }
301
+ catch (error) {
302
+ if (error.code === "ENOENT") {
303
+ return {
304
+ schemaVersion: MCP_SIGNED_DEFINITION_REGISTRY_VERSION,
305
+ statements: [],
306
+ };
307
+ }
308
+ throw error;
309
+ }
310
+ }
311
+ export function findMcpSignedDefinition(registry, serverIdentity, toolName) {
312
+ const parsed = McpSignedDefinitionRegistrySchema.parse(registry);
313
+ return parsed.statements.find((entry) => entry.serverIdentity === serverIdentity && entry.toolName === toolName);
314
+ }
315
+ /**
316
+ * Add (or replace) a publisher's public keys in the trust store. Pure: never
317
+ * mutates the input. Used to register a publisher's JWKS for verification.
318
+ */
319
+ export function trustMcpPublisher(store, publisher, keys) {
320
+ const parsed = McpPublisherTrustStoreSchema.parse(store);
321
+ const entry = McpPublisherTrustEntrySchema.parse({
322
+ publisher,
323
+ keys: keys.map((key) => McpPublisherKeySchema.parse(key)),
324
+ });
325
+ const others = parsed.publishers.filter((p) => p.publisher !== publisher);
326
+ return {
327
+ schemaVersion: MCP_PUBLISHER_TRUST_VERSION,
328
+ publishers: [...others, entry].sort((left, right) => left.publisher < right.publisher ? -1 : left.publisher > right.publisher ? 1 : 0),
329
+ };
330
+ }
331
+ /** Public JWKS for a publisher keyring, suitable for distribution. */
332
+ export function mcpPublisherJwks(keyring) {
333
+ const parsed = McpPublisherKeyringSchema.parse(keyring);
334
+ return {
335
+ keys: parsed.keys.map((key) => McpPublisherKeySchema.parse(stripPrivate(key))),
336
+ };
337
+ }
338
+ /** The active signing key for a publisher keyring. */
339
+ export function mcpPublisherSigningKey(keyring) {
340
+ const parsed = McpPublisherKeyringSchema.parse(keyring);
341
+ const active = parsed.keys.find((key) => key.kid === parsed.activeKid);
342
+ if (!active) {
343
+ throw new Error("mcp_publisher_active_key_missing");
344
+ }
345
+ return {
346
+ kid: active.kid,
347
+ privateKey: createPrivateKey(active.privateKeyPem),
348
+ publicJwk: McpPublisherKeySchema.parse(stripPrivate(active)),
349
+ };
350
+ }
351
+ /**
352
+ * Load or create a publisher keyring. The private keys are written `0600` via
353
+ * an atomic rename; a missing file is first-use, a corrupt file fails loud.
354
+ */
355
+ export async function loadOrCreateMcpPublisherKeyring(input) {
356
+ try {
357
+ const data = McpPublisherKeyringSchema.parse(JSON.parse(await readFile(input.filePath, "utf8")));
358
+ if (data.publisher !== input.publisher) {
359
+ throw new Error("mcp_publisher_keyring_identity_mismatch");
360
+ }
361
+ return data;
362
+ }
363
+ catch (error) {
364
+ if (error.code !== "ENOENT") {
365
+ throw error;
366
+ }
367
+ }
368
+ const key = createMcpPublisherKeyRecord(input.now ?? new Date());
369
+ const keyring = {
370
+ schemaVersion: MCP_PUBLISHER_KEYRING_VERSION,
371
+ publisher: input.publisher,
372
+ activeKid: key.kid,
373
+ keys: [key],
374
+ };
375
+ await writePrivateJson(input.filePath, keyring);
376
+ return keyring;
377
+ }
378
+ function createMcpPublisherKeyRecord(now) {
379
+ const { privateKey, publicKey } = generateKeyPairSync("ec", {
380
+ namedCurve: "P-256",
381
+ });
382
+ const kid = `mcp-publisher-${randomUUID().slice(0, 12)}`;
383
+ const jwk = publicKey.export({ format: "jwk" });
384
+ return McpPublisherKeyRecordSchema.parse({
385
+ kid,
386
+ kty: jwk.kty,
387
+ crv: jwk.crv,
388
+ x: jwk.x,
389
+ y: jwk.y,
390
+ alg: "ES256",
391
+ use: "sig",
392
+ privateKeyPem: privateKey.export({ type: "pkcs8", format: "pem" }).toString(),
393
+ createdAt: now.toISOString(),
394
+ });
395
+ }
396
+ function stripPrivate(key) {
397
+ return {
398
+ kid: key.kid,
399
+ kty: key.kty,
400
+ crv: key.crv,
401
+ x: key.x,
402
+ y: key.y,
403
+ alg: key.alg,
404
+ use: key.use,
405
+ };
406
+ }
407
+ async function writePrivateJson(filePath, value) {
408
+ await mkdir(dirname(filePath), { recursive: true });
409
+ const tmpPath = `${filePath}.${process.pid}.${randomUUID()}.tmp`;
410
+ let renamed = false;
411
+ try {
412
+ const handle = await open(tmpPath, "wx", 0o600);
413
+ try {
414
+ await handle.writeFile(`${JSON.stringify(value, null, 2)}\n`, "utf8");
415
+ await handle.sync();
416
+ }
417
+ finally {
418
+ await handle.close();
419
+ }
420
+ await rename(tmpPath, filePath);
421
+ renamed = true;
422
+ }
423
+ finally {
424
+ if (!renamed) {
425
+ await rm(tmpPath, { force: true });
426
+ }
427
+ }
428
+ }
429
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../src/signing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axtary/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "private": false,
5
5
  "description": "MCP tool provenance helpers and fail-closed handler wrappers for Axtary.",
6
6
  "type": "module",
@@ -39,8 +39,9 @@
39
39
  },
40
40
  "types": "./dist/index.d.ts",
41
41
  "dependencies": {
42
- "@axtary/actionpass": "^0.1.0",
43
- "@axtary/proxy": "^0.1.0",
42
+ "@axtary/actionpass": "^0.2.0",
43
+ "@axtary/proxy": "^0.2.0",
44
+ "jose": "^6.2.3",
44
45
  "zod": "^4.4.3"
45
46
  }
46
47
  }