@kya-os/mcp 1.18.0 → 1.20.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.
Files changed (65) hide show
  1. package/CHANGELOG.md +336 -0
  2. package/CONFORMANCE.md +10 -4
  3. package/README.md +57 -0
  4. package/SPEC.md +37 -3
  5. package/dist/card/cimd.js +6 -2
  6. package/dist/card/cimd.js.map +1 -1
  7. package/dist/card/index.d.ts +1 -0
  8. package/dist/card/index.js +1 -0
  9. package/dist/card/index.js.map +1 -1
  10. package/dist/card/revocation.d.ts +15 -4
  11. package/dist/card/revocation.js +9 -4
  12. package/dist/card/revocation.js.map +1 -1
  13. package/dist/card/status-list-proof.d.ts +32 -0
  14. package/dist/card/status-list-proof.js +102 -0
  15. package/dist/card/status-list-proof.js.map +1 -0
  16. package/dist/delegation/verification-method-key.d.ts +4 -1
  17. package/dist/delegation/verification-method-key.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/middleware/index.d.ts +3 -1
  22. package/dist/middleware/index.js +2 -0
  23. package/dist/middleware/index.js.map +1 -1
  24. package/dist/middleware/kya-os-transport.d.ts +43 -12
  25. package/dist/middleware/kya-os-transport.js +151 -28
  26. package/dist/middleware/kya-os-transport.js.map +1 -1
  27. package/dist/middleware/mcp-tool-callback.d.ts +48 -0
  28. package/dist/middleware/mcp-tool-callback.js +38 -0
  29. package/dist/middleware/mcp-tool-callback.js.map +1 -0
  30. package/dist/middleware/serve-in-process.d.ts +41 -0
  31. package/dist/middleware/serve-in-process.js +86 -0
  32. package/dist/middleware/serve-in-process.js.map +1 -0
  33. package/dist/middleware/with-kya-os-server.d.ts +14 -3
  34. package/dist/middleware/with-kya-os-server.js +4 -1
  35. package/dist/middleware/with-kya-os-server.js.map +1 -1
  36. package/dist/middleware/with-kya-os.config-types.d.ts +24 -0
  37. package/dist/middleware/with-kya-os.d.ts +4 -0
  38. package/dist/middleware/with-kya-os.delegation-gate.d.ts +2 -1
  39. package/dist/middleware/with-kya-os.delegation-gate.js +12 -18
  40. package/dist/middleware/with-kya-os.delegation-gate.js.map +1 -1
  41. package/dist/middleware/with-kya-os.delegation-verify.d.ts +7 -12
  42. package/dist/middleware/with-kya-os.delegation-verify.js +37 -9
  43. package/dist/middleware/with-kya-os.delegation-verify.js.map +1 -1
  44. package/dist/middleware/with-kya-os.deps.d.ts +15 -4
  45. package/dist/middleware/with-kya-os.helpers.d.ts +5 -0
  46. package/dist/middleware/with-kya-os.helpers.js +13 -0
  47. package/dist/middleware/with-kya-os.helpers.js.map +1 -1
  48. package/dist/middleware/with-kya-os.js +23 -0
  49. package/dist/middleware/with-kya-os.js.map +1 -1
  50. package/dist/middleware/with-kya-os.outcome.d.ts +18 -0
  51. package/dist/middleware/with-kya-os.outcome.js +36 -0
  52. package/dist/middleware/with-kya-os.outcome.js.map +1 -0
  53. package/dist/middleware/with-kya-os.policy-gate.d.ts +2 -1
  54. package/dist/middleware/with-kya-os.policy-gate.js +2 -1
  55. package/dist/middleware/with-kya-os.policy-gate.js.map +1 -1
  56. package/dist/middleware/with-kya-os.session.d.ts +76 -10
  57. package/dist/middleware/with-kya-os.session.js +739 -164
  58. package/dist/middleware/with-kya-os.session.js.map +1 -1
  59. package/dist/middleware/with-kya-os.types.d.ts +102 -8
  60. package/dist/proof/generator.d.ts +13 -0
  61. package/dist/proof/generator.js +15 -0
  62. package/dist/proof/generator.js.map +1 -1
  63. package/dist/proof/verifier.js +14 -9
  64. package/dist/proof/verifier.js.map +1 -1
  65. package/package.json +3 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,342 @@ Versioning: https://semver.org/spec/v2.0.0.html
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.20.0] - 2026-10-13
11
+
12
+ 1.19.0 was tagged but never published to npm; its changes (listed under
13
+ 1.19.0 below) ship to npm for the first time in this release.
14
+
15
+ ### Upgrading — BREAKING without an open KYA-OS transport
16
+
17
+ - **Every response proof is now made where the KYA-OS transport sends the
18
+ result, under the default body profile as under the envelope profile, and
19
+ the wrappers refuse to run without one.** While no KYA-OS transport is open
20
+ for the middleware, `wrapWithProof`, `wrapWithDelegation`, `withPolicyGate`
21
+ and `proveOutcome` throw on entry, before they record or run anything, with
22
+ an error that names `withKyaOs` and `createKyaOsTransport`. A transport
23
+ counts as open from `start()` until it closes, by `close()` or by its own
24
+ `onclose`. Once a KYA-OS transport has been created for a middleware, every
25
+ wrapper result must go out through one. Before, the proofs were signed in
26
+ the handler, and they did not verify on 2026-07-28 (envelope) or after an
27
+ SDK reshaped `content` (body). Find your setup:
28
+ - **`withKyaOs(server, …)` before `server.connect()`, `proofAllTools` left
29
+ on:** nothing to change.
30
+ - **The low-level `Server` API with `createKyaOsMiddleware`:** connect
31
+ through the KYA-OS transport, as this repository's examples now do:
32
+
33
+ ```ts
34
+ await server.connect(createKyaOsTransport(transport, kyaos)); // was server.connect(transport)
35
+ ```
36
+
37
+ The transport proves and audits every tool's result, as `withKyaOs`
38
+ does, including tools you registered without a wrapper, which went out
39
+ unproven on 1.19.0. List any to leave unproven in its third argument,
40
+ which adds to the always-excluded `_kyaos` and `_kyaos_handshake`.
41
+ - **A script, walkthrough or test that calls a wrapped handler directly:**
42
+ serve it in process, and read the result a client would receive:
43
+
44
+ ```ts
45
+ const local = serveInProcess(kyaos);
46
+ const checkout = local.tool('checkout', kyaos.wrapWithDelegation('checkout', consent, handler));
47
+ const result = await checkout({ item: 'laptop' }); // proved
48
+ await local.close();
49
+ ```
50
+ - **`withKyaOs` with `proofAllTools: false`:** it wraps no transport, so
51
+ the wrappers refuse. Leave it on and list the tools to leave unproven in
52
+ `excludeTools`.
53
+ - **`withKyaOs` called after `connect()`:** the connected transport is not
54
+ wrapped; call `withKyaOs` first.
55
+ - **Code that reads the proof inside the handler:** the result
56
+ `proveOutcome` or a wrapper returns no longer carries one, under either
57
+ profile. Return it from the handler; the transport adds the proof.
58
+ - **Results delivered later, such as MCP task results:** a result is
59
+ proved the first time the same middleware sends it, within
60
+ `pendingProofTtlMs` (default five minutes, at most 2147483647) of the
61
+ handler returning. Raise it for task results fetched later; a later or
62
+ repeated send goes out with `proofError` (see below).
63
+
64
+ ### Added
65
+
66
+ - **The Entity Card revocation checker can verify a status list's proof.**
67
+ `createRevocationChecker` fetched a Bitstring status list and read its bits
68
+ without checking the list's proof, which Bitstring Status List v1.0 requires
69
+ (§3.2, step 4). Whoever could serve or alter the list could clear a
70
+ revocation. It now takes an optional `verifyStatusList`: a list it rejects,
71
+ by returning anything but `true` or by throwing, resolves to revoked and not
72
+ fresh, like any other unreadable list. `createStatusListProofVerifier({
73
+ didResolver })` is a ready verifier for `DataIntegrityProof` /
74
+ `eddsa-jcs-2022` lists. It finds the key that `proof.verificationMethod`
75
+ names in the issuer's DID document, requires that method to belong to the
76
+ list's `issuer`, and accepts relative method ids and `publicKeyJwk` or
77
+ `publicKeyMultibase` keys. It verifies a status list published by
78
+ builders.kya-os.org, signed by an independent implementation. Without
79
+ `verifyStatusList` the checker behaves as before. The option becomes
80
+ required in 2.0, and SPEC.md §6.10 states the requirement.
81
+ - **`createKyaOsTransport` is exported from `@kya-os/mcp`,** next to
82
+ `createKyaOsMiddleware`, for servers on the low-level `Server` API, which
83
+ now connect through it. It was only on `@kya-os/mcp/middleware`. Its
84
+ `Transport` type declares the callbacks as methods, so an SDK 1 or SDK 2
85
+ transport is accepted, and the wrapper connects to either SDK's server,
86
+ without a cast.
87
+ - **`serveInProcess(kyaos)` calls wrapped handlers outside an MCP server.**
88
+ `local.tool(name, handler)` answers as a server would, through a KYA-OS
89
+ transport, so the result carries its proof; `local.close()` closes the
90
+ transport. It replaces the examples' own helper.
91
+ - **`pendingProofTtlMs`** on `KyaOsConfig` and `WithKyaOsOptions`: how long a
92
+ wrapper's result may wait to be sent before its proof is given up (default
93
+ 300000, five minutes; at most 2147483647, about 24.8 days, the longest timer
94
+ a JavaScript runtime keeps). Memory stays bounded by the caps on waiting
95
+ proofs.
96
+
97
+ ### Changed
98
+
99
+ - **Envelope-profile proofs are made at the transport, over the result as it
100
+ is sent.** On the 2026-07-28 revision, MCP SDK 2 adds `resultType:
101
+ 'complete'` to a tool result after the handler returns it. An
102
+ envelope-profile proof made in the handler, by `proveOutcome`,
103
+ `wrapWithProof` or either gate, did not cover that member, so the client's
104
+ check of the result it received failed. Under the envelope profile these
105
+ paths now leave the proof to the `withKyaOs` transport, or one built with
106
+ `createKyaOsTransport`, which makes it in `send()`, after the SDK has
107
+ finished the result. The proof covers exactly the result the client
108
+ receives, on 2025-11-25 and on 2026-07-28, with SDK 1 or SDK 2. This
109
+ supersedes the 1.19.0 advice to set `resultType: 'complete'` on a result
110
+ before proving it under the envelope profile: that is no longer needed, and
111
+ a result that sets it is proved as sent.
112
+ - What a proof claims stays in the middleware. The result carries only a
113
+ private one-time id, redeemed only on a result that also carries the
114
+ middleware's stamp, and the session is read again when the proof is made,
115
+ which takes its audience from it. A result naming no waiting proof, or
116
+ one whose session is gone by then, goes out without a proof and with
117
+ `_meta.proofError`, as does an outcome whose proof fails at send.
118
+ - A waiting proof holds the request's hash, computed when the call was
119
+ recorded, never the arguments, so a waiting proof is small however large
120
+ they were, and later changes to the arguments cannot reach what is
121
+ signed. Arguments that cannot be hashed fail the proof in the handler
122
+ (`proofError`, `proof.rejected` with `PROOF_GENERATION_FAILED`).
123
+ - The claims, `_meta` keys and audit events are the ones the handler-side
124
+ proof had. For a result that is sent, the audit events are recorded in
125
+ the same order as before: an allowed call's `tool.call.started` in the
126
+ handler, then `proof.generated` and `tool.call.completed` at send.
127
+ - A result the SDK never sends (a cancelled call, or an SDK 1 result
128
+ replaced after an `outputSchema` check) is closed in the audit trail with
129
+ `proof.rejected` under the new code `PROOF_NOT_SENT`. An allowed call
130
+ then records `tool.call.failed` with the reason `RESULT_NOT_SENT`, never
131
+ `tool.call.completed`, since its client did not get the result. An
132
+ outcome's terminal events were recorded in the handler. This happens five
133
+ minutes after the handler returned; when the last KYA-OS transport for
134
+ the middleware closes; or, oldest first, when 10,000 proofs are waiting
135
+ or they hold about 16 MB of audit context.
136
+ - **Body-profile proofs are made at the transport too, so neither profile
137
+ signs in the handler.** The MCP SDK also changes `content` after the
138
+ handler returns. SDK 2, on both revisions, appends a text item when
139
+ `structuredContent` is not an object and `content` has none. Both SDKs fill
140
+ in `content: []` when a handler leaves it out. A body-profile proof made in
141
+ the handler did not cover the appended item, so it failed verification, and
142
+ over a missing `content` it could not be made at all. The body profile now
143
+ takes the same path as the envelope profile above: the claims stay in the
144
+ middleware by request hash, and the transport makes the proof in `send()`
145
+ over the result as sent, with the same claims, `_meta` keys and audit
146
+ events, recorded in the same order. `_meta` keeps its place among the
147
+ result's members. Where the SDK does not reshape the result, the output is
148
+ byte-identical to 1.19.0. An outcome proof that fails now also says so in
149
+ `_meta.proofError`, as an allowed call's already did.
150
+ - **A result is proved once, within the window.** A stamped result whose
151
+ pending proof is no longer waiting, because its window passed, it was
152
+ evicted, or it was already sent (a task result fetched again), goes out
153
+ with `proofError`, and the audit trail records `proof.rejected` with the
154
+ new code `PROOF_EXPIRED`, with the call's audit context when it is still
155
+ known. That record of closed proofs is bounded too: 10,000 entries and
156
+ about 4 MB, oldest first, holding no context over 16 KB.
157
+ - **`createKyaOsTransport`'s `exclude` adds to the protocol tools.** The
158
+ third argument replaced the default `["_kyaos", "_kyaos_handshake"]`, so a
159
+ caller passing its own list had the protocol tools' results proved. It now
160
+ adds to them, as `excludeTools` does in `withKyaOs`; the protocol tools
161
+ are always excluded.
162
+
163
+ ### Security
164
+
165
+ - **SDK 2's per-tool OAuth scope challenges were bypassed under `withKyaOs`
166
+ in earlier versions.** SDK 2's `McpServer.connect()` installs
167
+ the `scopeChallenge` enforcement of `registerTool` only on a transport
168
+ that has `setScopeChallengeResolver`, and the KYA-OS transport did not
169
+ pass that member through. A tool registered with, for example,
170
+ `scopeChallenge: requireScopes('payments:write')` therefore ran, and was
171
+ even proved, for a token without that scope. The caller should have
172
+ received a 403. This affected 1.19.0 and earlier:
173
+ - `withKyaOs` with a server's own `WebStandardStreamableHTTPServerTransport`;
174
+ - `createMcpHandler` serving a client that negotiates 2025-11-25.
175
+
176
+ At 2026-07-28, `createMcpHandler` enforces the challenge at its entry, before
177
+ the transport. The transport now passes the resolver through, and every
178
+ other transport member either SDK feature-detects or reads is passed
179
+ through too.
180
+ - **The private members could leave in a message that is not a result, and
181
+ a copied stamp and id could make the transport sign chosen content.** The
182
+ transport removed the lifecycle stamp and pending-proof id only from
183
+ `result`. A tool that logged a wrapped result in a notification therefore
184
+ sent both to the client. A tool that relays caller-controlled `_meta` into
185
+ its own result could then redeem them, and the client got a server-signed
186
+ proof over content of its choosing, verifying as the wrapped call's
187
+ response. With envelope-profile proofs at the transport this was possible
188
+ before this release; with the body profile there too, in this release
189
+ before the fix. Now:
190
+ - every outgoing message is cleaned at any depth: its `params`,
191
+ `result` and `error.data`;
192
+ - a waiting proof whose id is found anywhere other than its own result is
193
+ closed, so nothing can redeem it;
194
+ - on the answer to a `tools/call` the transport tracked, a pending proof
195
+ left for a different tool is not redeemed. The answer goes out unproven,
196
+ and the audit trail records `proof.rejected` with the new code
197
+ `PROOF_TOOL_MISMATCH`.
198
+
199
+ ### Fixed
200
+
201
+ - **The proof wrappers no longer change the result a handler returns.**
202
+ `wrapWithProof` set its `_meta` members (the pending-proof id, the
203
+ lifecycle stamp, `proofError`, the audit marker) on the handler's own
204
+ object, and its audit-degraded path set `isError: true` on it. A handler
205
+ that returned one object from every call, a module-level constant or a
206
+ cached result, found those members on it, and a later call could go out
207
+ with an earlier call's `isError` and audit marker; a frozen result made the
208
+ wrapper throw. Every member now goes on a shallow copy of the result with a
209
+ new `_meta`, in `wrapWithProof` and in the outcome path behind the gates
210
+ and `proveOutcome`, and the handler's object and its `_meta` are never
211
+ changed. What the client receives is otherwise the same. Closes #249.
212
+
213
+ - **The KYA-OS transport passes the SDK's request context through.** It
214
+ dropped the second argument of `onmessage` and of `send`, and did not
215
+ expose the inner transport's `sessionId`, `setProtocolVersion`,
216
+ `setSupportedProtocolVersions` or `hasPerRequestStream`. Under `withKyaOs`,
217
+ tools lost the request's `sessionId`, `authInfo` and `requestInfo` (SDK 1)
218
+ and `ctx.http.authInfo` (SDK 2, both revisions); SDK 1 task stores stopped
219
+ separating tasks by session; and notifications a tool sent during a call
220
+ lost their `relatedRequestId`, so on Streamable HTTP they missed the
221
+ request's stream. All of these now pass through unchanged. Closes #248.
222
+ - **The proof's scope is the call's, as the wrapper received it.**
223
+ `wrapWithProof` read `context.scopeId` and the audit context after the
224
+ handler ran, so a handler could change the scope a proof claims by changing
225
+ the context object it was handed. They are now read before the handler
226
+ runs.
227
+ - **Private members never reach the wire from a nested result.** A wrapped
228
+ result a handler placed inside its own result, in `structuredContent` for
229
+ example, carried the lifecycle stamp and the pending-proof id to the
230
+ client. They are now removed at any depth: the walk is iterative, with no
231
+ depth limit. A wrapped result serialized into a string, a text item for
232
+ example, cannot be cleaned that way. Such a result is sent without a
233
+ proof and with `proofError`, recorded as `proof.rejected` with the new
234
+ code `PRIVATE_MEMBER_IN_RESULT`. Every waiting proof whose id appears in
235
+ that string is closed, so it cannot be redeemed.
236
+
237
+ ## [1.19.0] - 2026-10-09
238
+
239
+ ### Added
240
+
241
+ - **`proveOutcome` proves the authorization outcomes application code
242
+ decides.** A server that enforces OAuth scopes in its tool handlers
243
+ returns its own challenges and denials as tool results, and the
244
+ `withKyaOs` transport sent such an error result unproven. The middleware
245
+ now has `proveOutcome({ toolName, args, outcome, reason, result,
246
+ sessionId? })`, which returns a copy of `result` carrying the proof the
247
+ gates attach to their outcomes: the same claims, the same `_meta` keys,
248
+ the configured response-proof profile and the same audit events. It runs
249
+ the gates' own code, and the transport passes its result through as
250
+ proven. A `needs_authorization` proof binds the result and a denial or
251
+ step-up proof binds none, as SPEC.md §7.4 has it. The `_kyaos*` control
252
+ arguments are left out of the signed request, `_meta` members only the
253
+ middleware may set are dropped, and no session needs to be opened. Under
254
+ the envelope profile, set `resultType: 'complete'` on the result first: on
255
+ the 2026-07-28 revision the MCP SDK adds it after the handler returns,
256
+ outside a proof made there. It is
257
+ optional on `KyaOsMiddleware`, as `withPolicyGate` is, so structural
258
+ implementers still type-check; the new `KyaOsOutcomeProver` role requires
259
+ it. New types: `KyaOsOutcomeProofRequest`, `KyaOsAuthorizationOutcome`,
260
+ `KyaOsToolResult`.
261
+ - **`formatChallenge` may return the whole challenge result.** Besides the
262
+ content array, the delegation gate's hook may return `{ content,
263
+ structuredContent?, isError?, _meta? }` (`KyaOsChallengeResult`; the hook
264
+ type is `KyaOsChallengeFormatter`). The gate sets all of it before it
265
+ signs the challenge, so the envelope profile covers `isError` and
266
+ `structuredContent`; the body profile still covers `content` only.
267
+ `_meta` members the middleware owns are dropped from what the hook
268
+ returns. The array form and the default challenge are unchanged; the
269
+ default challenge still carries no `isError`, unlike the policy gate's
270
+ step-up.
271
+ - **`toMcpToolCallback` registers a wrapped handler with `registerTool`
272
+ without a cast.** Passed straight to `McpServer.registerTool`, a
273
+ `KyaOsToolHandler` needed `as never`, and the SDK's request context then
274
+ arrived as the KYA-OS session id, so `wrapWithProof` found no session and
275
+ sent the result unproven. The adapter passes the arguments alone. Types:
276
+ `McpToolCallback`, `McpToolCallbackResult`.
277
+
278
+ ### Changed
279
+
280
+ - **A `formatChallenge` hook that returns neither form gets the default
281
+ challenge**, as a throwing hook does. Before, the value was emitted as
282
+ `content`, which `McpServer` then rejected as an invalid result.
283
+ - **`wrapWithProof` keeps an outcome proof it is handed.** A result
284
+ produced by the outcome-proof path, recognized by identity, is returned
285
+ as it is. Before, a challenge that was not an error result was signed
286
+ again there as an allowed call. No gate composition in this repository
287
+ reached that path.
288
+
289
+ ### Fixed
290
+
291
+ - **An allow result the session fallback cannot attribute says so.** A
292
+ call that threads no session, which is every call on the `withKyaOs`
293
+ transport path, is proved under the single established session. With
294
+ more than one session live the middleware refuses to pick one and the
295
+ result went out unproven, with only a log line; opening a session in the
296
+ middleware's `SessionManager` from application code did this to every
297
+ later allow result. Such a result now carries `_meta.proofError`, the
298
+ marker a failed proof generation already sets. `isError`, the content and
299
+ the audit events are unchanged, and a server with no session at all
300
+ emits what it did before.
301
+ - **Three DID-document readers accept a key published as
302
+ `publicKeyMultibase`.** `ProofVerifier.fetchPublicKeyFromDID`, the Entity
303
+ Card `didKeyedJwks` projection, and the conformance adapter's DID-resolution
304
+ check read only `publicKeyJwk`. A verification method that published its
305
+ Ed25519 key as `publicKeyMultibase`, the material property of
306
+ `Ed25519VerificationKey2020` and the form did:cheqd documents use, failed
307
+ with `PUBLIC_KEY_NOT_FOUND`, projected no key, or failed the check. They now
308
+ read the key through `verificationMethodJwk`, as the credential verifiers
309
+ already do: a `publicKeyJwk` is used unchanged, otherwise the key is taken
310
+ from `publicKeyMultibase` or `publicKeyBase58`, and anything that is not a
311
+ 32-byte Ed25519 key is still refused. The `PUBLIC_KEY_NOT_FOUND` message from
312
+ `fetchPublicKeyFromDID` now names all three properties. The did:key resolver's
313
+ output is unchanged.
314
+ - **Conformance suite 1.2.0: the status-list vectors' list verifies, and a
315
+ list altered after signing must be rejected.** The StatusList2021Credential
316
+ in `status-list.json` carried a proof that did not verify, and the reference
317
+ adapter read its bits without checking it. The suite therefore passed an
318
+ implementation that never checked a list's proof and failed one that did.
319
+ The list is re-signed, the reference adapter verifies its proof on the
320
+ delegation credentials' path before reading a bit, and a new negative
321
+ vector, `status-list/tampered-list`, clears the revoked bit after signing.
322
+ SPEC.md §6.6 and CONFORMANCE.md L3.11 state the check. The other eight
323
+ vector files change only their `version`, the suite has 49 vectors, and the
324
+ library is unchanged.
325
+
326
+ ### Documentation
327
+
328
+ - **The README says what a response proof does not cover.** `_meta` is
329
+ outside every response proof (SPEC.md §7.6), so a server should repeat
330
+ security-relevant hints it carries there, such as an OAuth
331
+ `resource_metadata`, `scope` or `error`, in `content` or
332
+ `structuredContent`. The new section on proving application outcomes says
333
+ so, and says which profile covers which members.
334
+ - **SPEC.md §6.2 states how a base-profile credential is signed.** Its
335
+ example labels the proof `Ed25519Signature2020`, and CONFORMANCE.md L3.1
336
+ asked for "Ed25519Signature2020 or equivalent", but the profile has never
337
+ used the W3C suite of that name. §6.2 now specifies the construction the
338
+ reference implementation and the vectors use: Ed25519 over the JCS
339
+ canonicalization of the credential without `proof`, `proofValue` as
340
+ unpadded base64url, the key found by `proof.verificationMethod`, and the
341
+ proof options outside the signature. L3.1 and L3.5 point to it. A new
342
+ conformance test checks the vectors' delegation credentials against that
343
+ text with `node:crypto` rather than the library's verifier. Moving to a
344
+ standard cryptosuite stays open in #184.
345
+
10
346
  ## [1.18.0] - 2026-10-08
11
347
 
12
348
  ### Added
package/CONFORMANCE.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Compliance levels for KYA-OS implementations**
4
4
 
5
- Version: 1.1.0
5
+ Version: 1.2.0
6
6
  Status: Stable
7
7
 
8
8
  ---
@@ -231,7 +231,7 @@ Implementation MUST:
231
231
  - Include `issuer` as DID string or object with `id`
232
232
  - Include `issuanceDate` in ISO 8601 format
233
233
  - Include `credentialSubject` with delegation details
234
- - Include `proof` with Ed25519Signature2020 or equivalent
234
+ - Include `proof` as SPEC.md §6.2 specifies: an Ed25519 signature over the JCS canonicalization of the credential without `proof`, in `proofValue` as unpadded base64url. This is not the W3C `Ed25519Signature2020` suite, despite the `proof.type` value ([#184](https://github.com/decentralized-identity/kya-os-mcp/issues/184))
235
235
 
236
236
  #### L3.5 — VC Verification
237
237
 
@@ -242,12 +242,13 @@ Implementation MUST validate:
242
242
  - `issuanceDate` is present and in the past
243
243
  - `expirationDate` (if present) is in the future
244
244
  - `credentialSubject.delegation` has required fields
245
- - `proof` is present
245
+ - `proof` is present and verifies as SPEC.md §6.2 specifies
246
246
 
247
247
  #### L3.11 — StatusList2021 Checking
248
248
 
249
249
  Implementation MUST:
250
250
  - Fetch StatusList2021 credential from `credentialStatus.statusListCredential`
251
+ - Verify the list's `proof` as SPEC.md §6.2 specifies, and reject the credential when it does not verify
251
252
  - Decompress and decode the bitstring
252
253
  - Check bit at `statusListIndex`
253
254
  - Return revoked status if bit is 1
@@ -430,7 +431,7 @@ so it is reproducible against any implementation without re-signing.
430
431
  |------|----------|----------|----------|
431
432
  | `vectors/signed-proof.json` | Detached proof verification | valid signature + in-window ts; envelope content binding (profile `org.kya-os/response-proof.envelope`) | tampered signature, tampered meta, wrong key, timestamp skew exceeded; tampered `structuredContent` under envelope coverage, `prf` stripped (downgrade), unknown profile |
432
433
  | `vectors/delegation-chain.json` | Delegation chain verification | single-hop, two-hop attenuated | broken issuer↔subject linkage, scope widening, tampered signature, audience mismatch |
433
- | `vectors/status-list.json` | StatusList2021 revocation | active (bit unset) | revoked (bit set) |
434
+ | `vectors/status-list.json` | StatusList2021 revocation | active (bit unset) | revoked (bit set), list altered after signing |
434
435
  | `vectors/did-key-resolution.json` | did:key resolution | valid Ed25519 | malformed multibase, wrong method |
435
436
  | `vectors/did-web-resolution.json` | did:web resolution | well-formed id-matched document | document id mismatch, not found |
436
437
  | `vectors/card-proof.json` | `org.kya-os/proof.v1` holder-of-key proof | valid signed proof, in-window, audience-bound | tampered body, tampered signature, wrong audience, expired, kid⇄did forgery |
@@ -458,6 +459,11 @@ This vector leaves the JWS byte-identical to `valid-basic` and alters only the m
458
459
  A conformant verifier MUST reconcile `meta` against the decoded JWS payload and reject on any mismatch.
459
460
  Signature validity alone does not pass this vector: it is the `requestHash` counterpart of the `responseHash` recompute rule in L2.11.
460
461
 
462
+ **On `status-list/tampered-list` (suite ≥ 1.2.0).**
463
+ This vector carries the revoked credential and its signed list with the revoked bit cleared and the list's proof left as signed.
464
+ A verifier that reads the bits without verifying the list's proof reports the credential active and passes a vector it must reject (L3.11).
465
+ Suites before 1.2.0 shipped a list whose proof did not verify, so an implementation that checked it failed `status-list/active-credential`.
466
+
461
467
  ### Running the reference implementation
462
468
 
463
469
  ```bash
package/README.md CHANGED
@@ -54,6 +54,24 @@ npm install @kya-os/mcp
54
54
 
55
55
  ---
56
56
 
57
+ ## Upgrading to 1.20: proofs need a KYA-OS transport
58
+
59
+ > **Breaking for servers without a KYA-OS transport.** From 1.20, every response proof (under the default body profile as under the envelope profile) is made where the KYA-OS transport sends the result, after the MCP SDK has finished it. While no KYA-OS transport is open for the middleware, `wrapWithProof`, `wrapWithDelegation`, `withPolicyGate` and `proveOutcome` throw before they run anything.
60
+
61
+ | Your setup | What to do |
62
+ |---|---|
63
+ | `withKyaOs(server, …)` before `server.connect()` | Nothing. |
64
+ | Low-level `Server` with `createKyaOsMiddleware` | `await server.connect(createKyaOsTransport(transport, kyaos))`. It proves every tool's result, unwrapped tools included (unproven on 1.19.0); its third argument adds tools to leave unproven. |
65
+ | A script or test that calls a wrapped handler directly | `const local = serveInProcess(kyaos); const call = local.tool('name', handler); await call(args); await local.close();` |
66
+ | `withKyaOs` with `proofAllTools: false` | Leave it on; list tools to leave unproven in `excludeTools`. |
67
+ | `withKyaOs` after `connect()` | Call it before `connect()`. |
68
+ | Reading the proof inside the handler | The transport adds it when the result is sent; read it from what the client receives. |
69
+ | MCP task results fetched later | A result is proved the first time the same middleware sends it, within `pendingProofTtlMs` (default five minutes, at most 2147483647 ms); raise it for later fetches. |
70
+
71
+ See the [changelog](./CHANGELOG.md) for the details.
72
+
73
+ ---
74
+
57
75
  ## Migrate any MCP server in 2 lines
58
76
 
59
77
  **Before**, a standard MCP server with no identity or proofs:
@@ -106,6 +124,45 @@ When an agent calls `checkout` without a delegation credential, it gets back a `
106
124
 
107
125
  > Try it yourself: [examples/consent-basic](./examples/consent-basic/) walks through the full consent flow end-to-end.
108
126
 
127
+ ### Prove the outcomes your own code decides
128
+
129
+ A server that enforces authorization itself, checking OAuth scopes in the tool handler for example, returns its own challenges and denials as tool results. `withKyaOs` proves the results it can attribute, but it sends an error result its own gates did not produce as the handler returned it, without a proof. `proveOutcome` gives that result the proof the gates attach to theirs, with the same claims, `_meta` keys and audit events:
130
+
131
+ ```typescript
132
+ import { toMcpToolCallback } from '@kya-os/mcp';
133
+
134
+ server.registerTool('get_report', { inputSchema }, toMcpToolCallback(async (args) => {
135
+ if (!grantedScopes.includes('reports:read')) {
136
+ return kyaos.proveOutcome!({
137
+ toolName: 'get_report',
138
+ args,
139
+ outcome: 'needs_authorization', // or 'step_up_required', 'denied'
140
+ reason: 'insufficient_scope',
141
+ result: {
142
+ content: [{ type: 'text', text: 'Sign in to see this report.' }],
143
+ structuredContent: { error: 'insufficient_scope', scope: 'reports:read', resource_metadata },
144
+ isError: true,
145
+ _meta: { 'mcp/www_authenticate': [`Bearer resource_metadata="${resource_metadata}"`] },
146
+ },
147
+ });
148
+ }
149
+ return { content: [{ type: 'text', text: report }] };
150
+ }));
151
+ ```
152
+
153
+ - **Build the whole result before proving it**, and return what `proveOutcome` gives you from the handler.
154
+ - **Every proof is made where the result is sent.** The `withKyaOs` transport makes it when it sends the result, after the MCP SDK has finished the result, so it covers what the client receives. Under the default body profile it covers `content`, including a text item SDK 2 appends when `structuredContent` is not an object, and the `content: []` either SDK fills in when a handler leaves it out. Under the envelope response-proof profile (`responseProofProfile: RESPONSE_PROOF_PROFILE_ENVELOPE`) it covers every member except `_meta`, including the `resultType` that SDK 2 adds on the 2026-07-28 revision. This applies to `proveOutcome`, `wrapWithProof` and both gates.
155
+ - **Every wrapper needs an open KYA-OS transport.** `withKyaOs` wraps the transport you connect, unless `proofAllTools` is `false`; for a transport you connect yourself (the low-level `Server` API with `createKyaOsMiddleware`), wrap it with `createKyaOsTransport`, exported from `@kya-os/mcp`. Once a KYA-OS transport has been created for a middleware, every wrapper result must go out through one. While none is open (none was started, or all have closed), the wrappers and `proveOutcome` throw before they run anything, instead of sending a result they cannot prove.
156
+ - **`_meta` is outside every response proof** (SPEC §7.6). Repeat anything a client must be able to trust, such as `resource_metadata`, `scope` and `error`, in `content` or `structuredContent`.
157
+ - A `needs_authorization` proof binds the result; a denial or step-up proof binds none (SPEC §7.4).
158
+ - The result carries private members until the transport sends it, and the transport removes them. One of them is a one-time id: what the proof claims (by request hash) and its session stay in the middleware, and the transport redeems the id once. A result the SDK never sends, such as a cancelled call's, is closed in the audit trail with `proof.rejected` (`PROOF_NOT_SENT`) and, for an allowed call, `tool.call.failed` (`RESULT_NOT_SENT`).
159
+ - **A result is proved once, by the middleware that sends it, within `pendingProofTtlMs`** (default five minutes, at most 2147483647 ms). A task result fetched again, or later than the window, goes out with `proofError`, recorded as `PROOF_EXPIRED`. What the proof claims lives in that middleware's memory, so only the process that recorded the call can make the proof; [#250](https://github.com/decentralized-identity/kya-os-mcp/issues/250) proposes sealed claims so that any process holding the identity could.
160
+ - **Do not serialize a wrapped result into a string.** Its private members cannot be removed from inside the string, so the result that carries it goes out unproven (`PRIVATE_MEMBER_IN_RESULT`), and the serialized result's own proof is voided. Nest the result as an object instead: private members are removed at any depth from every outgoing message (results, notification and request `params`, and error `data`), and a wrapped result that goes out anywhere but as its own answer has its proof closed. On the answer to a `tools/call`, only a proof left for that tool is made.
161
+ - **Connect every server that shares a middleware through a KYA-OS transport.** The refusal checks only that some KYA-OS transport is open for the middleware. A second server sharing it over a plain transport therefore runs its wrappers, and its results leave with the lifecycle stamp and the pending-proof id in `_meta` and no proof. Those proofs are later closed as `PROOF_NOT_SENT`, although the results were sent.
162
+ - Leave `kyaos.sessionManager` alone. A second live session makes the fallback session ambiguous, and allow results then go out unproven, marked with `_meta.proofError`.
163
+ - `wrapWithDelegation`'s `formatChallenge` can return the same `{ content, structuredContent, isError, _meta }` shape for the library's own challenge, and all of it is set before signing.
164
+ - `toMcpToolCallback` adapts any wrapped handler to `registerTool` without a cast. The SDK's request context never reaches the handler as its session id.
165
+
109
166
  ---
110
167
 
111
168
  ## Turn proofs into a verifiable audit trail
package/SPEC.md CHANGED
@@ -513,6 +513,33 @@ Delegations are issued as W3C Verifiable Credentials:
513
513
  }
514
514
  ```
515
515
 
516
+ **The proof.** The example's `proof.type` is `Ed25519Signature2020`, but this
517
+ profile does not use the W3C suite of that name, and a W3C Data Integrity
518
+ verifier will not verify it. A conformant issuer produces, and a conformant
519
+ verifier checks, exactly this:
520
+
521
+ - **Signing input.** The UTF-8 bytes of the RFC 8785 (JCS) canonicalization of
522
+ the credential with its `proof` member removed. There is no RDF
523
+ canonicalization and no hash of the proof options.
524
+ - **Signature.** Ed25519 (RFC 8032), 64 bytes.
525
+ - **`proofValue`.** The signature as base64url without padding (86 characters),
526
+ with no multibase prefix.
527
+ - **Key.** The verification method in the issuer's DID document whose `id`
528
+ equals `proof.verificationMethod`.
529
+ - **`proof.type`.** Issuers set `Ed25519Signature2020`. A verifier MAY also
530
+ accept `DataIntegrityProof` for the same construction, and MUST reject any
531
+ other `proof.type`.
532
+
533
+ The other `proof` members (`type`, `created`, `verificationMethod`,
534
+ `proofPurpose`) are not covered by the signature; a verifier uses
535
+ `verificationMethod` only to select the key. The `StatusList2021Credential` of
536
+ §6.6 is signed the same way. The delegation credentials in the
537
+ `delegation-chain` and `status-list` conformance vectors, and the status
538
+ lists in the `status-list` vectors, carry this construction. Whether 2.0
539
+ moves this profile to a standard cryptosuite is tracked in [#184](https://github.com/decentralized-identity/kya-os-mcp/issues/184).
540
+ The §6.10 profile uses `DataIntegrityProof` with `eddsa-jcs-2022` and is not
541
+ affected.
542
+
516
543
  A `DelegationCredential` carries a _permission_, not a _claim_. To keep claim
517
544
  semantics out of an authorization decision — a confused-deputy vector (§11.6) —
518
545
  the `credentialSubject` MUST contain only two properties: `id` (the delegate's
@@ -718,6 +745,10 @@ KYA-OS uses the W3C StatusList2021 specification for revocation:
718
745
  }
719
746
  ```
720
747
 
748
+ A verifier that reads a `StatusList2021Credential` MUST verify its proof, as
749
+ §6.2 states, before reading any bit. A list whose proof does not verify is
750
+ unresolvable: the credential it covers is rejected, never read as active.
751
+
721
752
  L1 implementations do not require revocation support; revocation checking is available at L3 only.
722
753
 
723
754
  Revocation does not require a globally accessible list. A verifier only needs to
@@ -871,9 +902,12 @@ different resource fails at the root check instead of being accepted by an unrel
871
902
  (`BitstringStatusListEntry`) - the **successor to** the deprecated StatusList2021 - behind a
872
903
  pluggable `RevocationChecker` seam so status-list churn never reaches callers. The default checker
873
904
  resolves `statusListCredential` via SafeFetch (§6.6), inflates the multibase (`u` = base64url) +
874
- GZIP `encodedList`, and reads the bit at `statusListIndex` MSB-first within each byte. It is
875
- **fail-closed**: an unreachable list, malformed credential, mismatched `statusPurpose`, or
876
- out-of-range index all resolve to `{ revoked: true }`. Each verdict also reports `fresh` - `true`
905
+ GZIP `encodedList`, and reads the bit at `statusListIndex` MSB-first within each byte. A verifier
906
+ MUST verify the status list credential's proof before it reads a bit, as Bitstring Status List
907
+ v1.0 requires. The reference checker does so when given its `verifyStatusList` seam (optional
908
+ until 2.0) and ships a verifier for `eddsa-jcs-2022` lists. It is **fail-closed**: an unreachable
909
+ list, malformed credential, rejected list proof, mismatched `statusPurpose`, or out-of-range index
910
+ all resolve to `{ revoked: true }`. Each verdict also reports `fresh` - `true`
877
911
  only when read from a live, in-validity-window (`validFrom`/`validUntil`, or
878
912
  `issuanceDate`/`expirationDate`) status list. The chain walk is **cascading**: root→leaf,
879
913
  short-circuiting on the first revoked/unresolvable hop (a revoked ancestor invalidates the subtree),
package/dist/card/cimd.js CHANGED
@@ -27,6 +27,7 @@
27
27
  * no runtime (mcp-i-core) dependency leaks into `@kya-os/mcp`.
28
28
  */
29
29
  import { isRecord } from '../utils/guards.js';
30
+ import { verificationMethodJwk } from '../delegation/verification-method-key.js';
30
31
  import { parseCard } from './resolve.js';
31
32
  /** The OAuth `client_id` metadata-document prefix this module transforms. */
32
33
  const DID_WEB_PREFIX = 'did:web:';
@@ -208,11 +209,14 @@ function urlOrigin(url) {
208
209
  return null;
209
210
  }
210
211
  }
211
- /** Project one verification method to a public OKP JWK (Ed25519 only; `d` stripped), or null. */
212
+ /**
213
+ * Project one verification method to a public OKP JWK (Ed25519 only; `d` stripped), or null.
214
+ * The key may be published as `publicKeyJwk`, `publicKeyMultibase`, or `publicKeyBase58`.
215
+ */
212
216
  function vmToOkpJwk(vm) {
213
217
  if (!isRecord(vm))
214
218
  return null;
215
- const jwk = vm.publicKeyJwk;
219
+ const jwk = verificationMethodJwk(vm);
216
220
  if (!isRecord(jwk) || jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519' || typeof jwk.x !== 'string') {
217
221
  return null;
218
222
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cimd.js","sourceRoot":"","sources":["../../src/card/cimd.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cimd.js","sourceRoot":"","sources":["../../src/card/cimd.ts"],"names":[],"mappings":"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"}
@@ -39,4 +39,5 @@ export * from './delegation.js';
39
39
  export * from './builder.js';
40
40
  export * from './middleware.js';
41
41
  export * from './revocation.js';
42
+ export * from './status-list-proof.js';
42
43
  export { createSafeFetch, fetchTransport, isBlockedAddress, type SafeFetch, type SafeFetchOptions, type SafeFetchResponse, type SafeFetchTransport, type TransportInit, type DnsLookup, type DnsAddress, } from '../utils/safe-fetch.js';
@@ -39,6 +39,7 @@ export * from './delegation.js';
39
39
  export * from './builder.js';
40
40
  export * from './middleware.js';
41
41
  export * from './revocation.js';
42
+ export * from './status-list-proof.js';
42
43
  // The SSRF-hardened fetch is the card's production wiring for resolveCard / status-list
43
44
  // resolution — export it (and the address classifier) so consumers can actually reach it,
44
45
  // not just the mocked-transport unit tests.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/card/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,wFAAwF;AACxF,0FAA0F;AAC1F,4CAA4C;AAC5C,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,GAQjB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/card/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AAEvC,wFAAwF;AACxF,0FAA0F;AAC1F,4CAA4C;AAC5C,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,GAQjB,MAAM,wBAAwB,CAAC"}