@kya-os/mcp 1.18.0 → 1.21.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 (80) hide show
  1. package/CHANGELOG.md +377 -0
  2. package/CONFORMANCE.md +10 -4
  3. package/README.md +58 -1
  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 +21 -10
  11. package/dist/card/revocation.js +12 -16
  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/bitstring.d.ts +41 -6
  17. package/dist/delegation/bitstring.js +36 -21
  18. package/dist/delegation/bitstring.js.map +1 -1
  19. package/dist/delegation/index.d.ts +1 -0
  20. package/dist/delegation/index.js +1 -0
  21. package/dist/delegation/index.js.map +1 -1
  22. package/dist/delegation/statuslist-manager.d.ts +20 -4
  23. package/dist/delegation/statuslist-manager.js +16 -0
  24. package/dist/delegation/statuslist-manager.js.map +1 -1
  25. package/dist/delegation/verification-method-key.d.ts +4 -1
  26. package/dist/delegation/verification-method-key.js.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.js +2 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/middleware/index.d.ts +3 -1
  31. package/dist/middleware/index.js +2 -0
  32. package/dist/middleware/index.js.map +1 -1
  33. package/dist/middleware/kya-os-transport.d.ts +43 -12
  34. package/dist/middleware/kya-os-transport.js +151 -28
  35. package/dist/middleware/kya-os-transport.js.map +1 -1
  36. package/dist/middleware/mcp-tool-callback.d.ts +48 -0
  37. package/dist/middleware/mcp-tool-callback.js +38 -0
  38. package/dist/middleware/mcp-tool-callback.js.map +1 -0
  39. package/dist/middleware/serve-in-process.d.ts +41 -0
  40. package/dist/middleware/serve-in-process.js +86 -0
  41. package/dist/middleware/serve-in-process.js.map +1 -0
  42. package/dist/middleware/with-kya-os-server.d.ts +14 -3
  43. package/dist/middleware/with-kya-os-server.js +4 -1
  44. package/dist/middleware/with-kya-os-server.js.map +1 -1
  45. package/dist/middleware/with-kya-os.config-types.d.ts +24 -0
  46. package/dist/middleware/with-kya-os.d.ts +4 -0
  47. package/dist/middleware/with-kya-os.delegation-gate.d.ts +2 -1
  48. package/dist/middleware/with-kya-os.delegation-gate.js +12 -18
  49. package/dist/middleware/with-kya-os.delegation-gate.js.map +1 -1
  50. package/dist/middleware/with-kya-os.delegation-verify.d.ts +7 -12
  51. package/dist/middleware/with-kya-os.delegation-verify.js +37 -9
  52. package/dist/middleware/with-kya-os.delegation-verify.js.map +1 -1
  53. package/dist/middleware/with-kya-os.deps.d.ts +15 -4
  54. package/dist/middleware/with-kya-os.helpers.d.ts +5 -0
  55. package/dist/middleware/with-kya-os.helpers.js +13 -0
  56. package/dist/middleware/with-kya-os.helpers.js.map +1 -1
  57. package/dist/middleware/with-kya-os.js +23 -0
  58. package/dist/middleware/with-kya-os.js.map +1 -1
  59. package/dist/middleware/with-kya-os.outcome.d.ts +18 -0
  60. package/dist/middleware/with-kya-os.outcome.js +36 -0
  61. package/dist/middleware/with-kya-os.outcome.js.map +1 -0
  62. package/dist/middleware/with-kya-os.policy-gate.d.ts +2 -1
  63. package/dist/middleware/with-kya-os.policy-gate.js +2 -1
  64. package/dist/middleware/with-kya-os.policy-gate.js.map +1 -1
  65. package/dist/middleware/with-kya-os.session.d.ts +76 -10
  66. package/dist/middleware/with-kya-os.session.js +739 -164
  67. package/dist/middleware/with-kya-os.session.js.map +1 -1
  68. package/dist/middleware/with-kya-os.types.d.ts +102 -8
  69. package/dist/proof/generator.d.ts +13 -0
  70. package/dist/proof/generator.js +15 -0
  71. package/dist/proof/generator.js.map +1 -1
  72. package/dist/proof/verifier.js +14 -9
  73. package/dist/proof/verifier.js.map +1 -1
  74. package/dist/utils/statuslist-bits.d.ts +15 -0
  75. package/dist/utils/statuslist-bits.js +44 -6
  76. package/dist/utils/statuslist-bits.js.map +1 -1
  77. package/dist/utils/statuslist-gzip.d.ts +18 -0
  78. package/dist/utils/statuslist-gzip.js +45 -0
  79. package/dist/utils/statuslist-gzip.js.map +1 -0
  80. package/package.json +3 -1
@@ -1,4 +1,6 @@
1
1
  import type { VerificationMethod } from './vc-verifier.types.js';
2
+ /** The verification-method fields that can carry an Ed25519 public key. */
3
+ type VerificationMethodKeyMaterial = Pick<VerificationMethod, 'publicKeyJwk' | 'publicKeyMultibase' | 'publicKeyBase58'>;
2
4
  /**
3
5
  * The verification method's public key as an Ed25519 OKP JWK: an existing
4
6
  * `publicKeyJwk` is returned untouched (byte-for-byte — zero behavior change
@@ -7,8 +9,9 @@ import type { VerificationMethod } from './vc-verifier.types.js';
7
9
  * prefix) or legacy `publicKeyBase58`. `undefined` when no usable Ed25519 key
8
10
  * is present (fail-closed).
9
11
  */
10
- export declare function verificationMethodJwk(method: VerificationMethod): {
12
+ export declare function verificationMethodJwk(method: VerificationMethodKeyMaterial): {
11
13
  kty: string;
12
14
  crv: string;
13
15
  x: string;
14
16
  } | undefined;
17
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"verification-method-key.js","sourceRoot":"","sources":["../../src/delegation/verification-method-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAA0B;IAE1B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,YAAuD,CAAC;IACxE,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,iHAAiH;AACjH,SAAS,aAAa,CAAC,MAA0B;IAC/C,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/D,wEAAwE;YACxE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAC3F,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,yBAAyB,GAAG,yBAAyB,CAAC,MAAM;gBAC/E,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBACzC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC;YACd,OAAO,QAAQ,CAAC,MAAM,KAAK,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;YAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,CAAC,iCAAiC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"verification-method-key.js","sourceRoot":"","sources":["../../src/delegation/verification-method-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAQhC;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqC;IAErC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,YAAuD,CAAC;IACxE,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,iHAAiH;AACjH,SAAS,aAAa,CAAC,MAAqC;IAC1D,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/D,wEAAwE;YACxE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAC3F,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,yBAAyB,GAAG,yBAAyB,CAAC,MAAM;gBAC/E,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBACzC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC;YACd,OAAO,QAAQ,CAAC,MAAM,KAAK,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;YAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,CAAC,iCAAiC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -24,6 +24,7 @@ export { DelegationGraphManager, createDelegationGraph, type DelegationNode, typ
24
24
  export { StatusList2021Manager, createStatusListManager, type StatusListStorageProvider, type StatusListIdentityProvider, } from './delegation/statuslist-manager.js';
25
25
  export { CascadingRevocationManager, createCascadingRevocationManager, type RevocationEvent, type RevocationHook, type CascadingRevocationOptions, } from './delegation/cascading-revocation.js';
26
26
  export { BitstringManager, isIndexSet, type CompressionFunction, type DecompressionFunction, } from './delegation/bitstring.js';
27
+ export { statusListGzipCodec } from './utils/statuslist-gzip.js';
27
28
  export { verifyDelegationAudience, } from './delegation/audience-validator.js';
28
29
  export { buildDelegationProofJWT, buildChainString, type DelegationProofOptions, type Ed25519PrivateJWK, } from './delegation/outbound-proof.js';
29
30
  export { buildOutboundDelegationHeaders, OUTBOUND_HEADER_NAMES, type OutboundDelegationContext, type OutboundDelegationHeaders, } from './delegation/outbound-headers.js';
@@ -51,7 +52,7 @@ export { AuditLogProvider, MemoryAuditLogProvider, NoopAuditLogProvider, buildAu
51
52
  export * from './audit/index.js';
52
53
  export { GrantStore, MemoryGrantStore, type Grant, type MemoryGrantStoreOptions, } from './providers/grant-store.js';
53
54
  export { PendingFlowStore, MemoryPendingFlowStore, type PendingFlow, type MemoryPendingFlowStoreOptions, } from './authz/oidc/pending-flow-store.js';
54
- export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsServer, withKyaOs, generateIdentity, type WithKyaOsOptions, } from './middleware/index.js';
55
+ export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsToolResult, type KyaOsServer, type KyaOsAuthorizationOutcome, type KyaOsOutcomeProofRequest, type KyaOsOutcomeProver, type KyaOsChallengeResult, type KyaOsChallengeFormatter, withKyaOs, generateIdentity, type WithKyaOsOptions, toMcpToolCallback, type McpToolCallback, type McpToolCallbackResult, createKyaOsTransport, serveInProcess, type InProcessServer, } from './middleware/index.js';
55
56
  export * from './policy/index.js';
56
57
  export { matchScope, scopeSatisfies, type ScopeMatcher, type ScopeSatisfaction, } from './delegation/scope-matcher.js';
57
58
  export { logger, createDefaultConsoleLogger, type Logger, type Level, } from './logging/index.js';
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ export { DelegationGraphManager, createDelegationGraph, } from './delegation/del
26
26
  export { StatusList2021Manager, createStatusListManager, } from './delegation/statuslist-manager.js';
27
27
  export { CascadingRevocationManager, createCascadingRevocationManager, } from './delegation/cascading-revocation.js';
28
28
  export { BitstringManager, isIndexSet, } from './delegation/bitstring.js';
29
+ export { statusListGzipCodec } from './utils/statuslist-gzip.js';
29
30
  export { verifyDelegationAudience, } from './delegation/audience-validator.js';
30
31
  export { buildDelegationProofJWT, buildChainString, } from './delegation/outbound-proof.js';
31
32
  export { buildOutboundDelegationHeaders, OUTBOUND_HEADER_NAMES, } from './delegation/outbound-headers.js';
@@ -63,7 +64,7 @@ export { GrantStore, MemoryGrantStore, } from './providers/grant-store.js';
63
64
  // Pending OAuth/OIDC PKCE-flow store (durable resume across instances/restarts).
64
65
  export { PendingFlowStore, MemoryPendingFlowStore, } from './authz/oidc/pending-flow-store.js';
65
66
  // Middleware
66
- export { createKyaOsMiddleware, withKyaOs, generateIdentity, } from './middleware/index.js';
67
+ export { createKyaOsMiddleware, withKyaOs, generateIdentity, toMcpToolCallback, createKyaOsTransport, serveInProcess, } from './middleware/index.js';
67
68
  // Policy-as-Code subsystem + step-up gate
68
69
  export * from './policy/index.js';
69
70
  export { matchScope, scopeSatisfies, } from './delegation/scope-matcher.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,10 @@
6
6
  *
7
7
  * For the low-level `Server` API or custom patterns, use `createKyaOsMiddleware` directly.
8
8
  */
9
- export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsServer, } from './with-kya-os.js';
9
+ export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsToolResult, type KyaOsServer, type KyaOsAuthorizationOutcome, type KyaOsOutcomeProofRequest, type KyaOsOutcomeProver, type KyaOsChallengeResult, type KyaOsChallengeFormatter, } from './with-kya-os.js';
10
10
  export { withKyaOs, generateIdentity, type WithKyaOsOptions, } from './with-kya-os-server.js';
11
+ export { toMcpToolCallback, type McpToolCallback, type McpToolCallbackResult, } from './mcp-tool-callback.js';
11
12
  export { createKyaOsTransport, type Transport, type JSONRPCMessage, } from './kya-os-transport.js';
13
+ export { serveInProcess, type InProcessServer } from './serve-in-process.js';
12
14
  export { card, CardBuilder, type CardBuilderInit, type AccountableToOptions, type VcInput, } from '../card/builder.js';
13
15
  export { withKyaOsCard, requireProof, readCardProof, type KyaOsCardMount, type ServerJsonLike, type DidDocumentLike, type ProofGuard, type ProofGateResult, type ProofGateError, type ProofGateCode, type RequireProofOptions, type MinProofLevel, } from '../card/middleware.js';
@@ -8,7 +8,9 @@
8
8
  */
9
9
  export { createKyaOsMiddleware, } from './with-kya-os.js';
10
10
  export { withKyaOs, generateIdentity, } from './with-kya-os-server.js';
11
+ export { toMcpToolCallback, } from './mcp-tool-callback.js';
11
12
  export { createKyaOsTransport, } from './kya-os-transport.js';
13
+ export { serveInProcess } from './serve-in-process.js';
12
14
  // Entity Card DevX surface — the 10-minute adoption path. The fluent `card()` builder and the
13
15
  // `withKyaOsCard` / `requireProof` wrappers hide the RFC 9421/9449/8785 machinery behind
14
16
  // ergonomics (see `src/card/builder.ts` + `src/card/middleware.ts`).
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,GAQtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,oBAAoB,GAGrB,MAAM,uBAAuB,CAAC;AAE/B,8FAA8F;AAC9F,yFAAyF;AACzF,qEAAqE;AACrE,OAAO,EACL,IAAI,EACJ,WAAW,GAIZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,GAUd,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,GActB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,GAGrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AAE7E,8FAA8F;AAC9F,yFAAyF;AACzF,qEAAqE;AACrE,OAAO,EACL,IAAI,EACJ,WAAW,GAIZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,GAUd,MAAM,uBAAuB,CAAC"}
@@ -13,30 +13,61 @@
13
13
  * 1. Incoming `tools/call` requests are captured (by id) to record tool
14
14
  * name and arguments for proof generation.
15
15
  * 2. Outgoing responses for those ids get a proof injected into `_meta`,
16
- * unless the middleware's own wrappers already proved or audited the
17
- * result, which they mark with a private per-middleware stamp.
18
- * 3. All other message types pass through unmodified, except that the
19
- * stamp is removed from every result before it is sent.
16
+ * unless the middleware's own wrappers produced the result, which they
17
+ * mark with a private per-middleware stamp.
18
+ * 3. The wrappers leave their proofs here, and every proof is made in
19
+ * `send()`, over the result as the MCP SDK finished it: the SDK changes
20
+ * a result after the handler returns (`resultType` on the 2026-07-28
21
+ * revision, a filled-in or appended `content`), and the proof covers
22
+ * what it covers of the result the client receives.
23
+ * 4. All other message types pass through unmodified, except that the
24
+ * middleware's private members are removed from every result before it
25
+ * is sent.
20
26
  *
21
27
  * @module kya-os-transport
22
28
  */
23
29
  import type { KyaOsMiddleware } from "./with-kya-os.js";
24
- /** Minimal Transport interface — matches @modelcontextprotocol/sdk Transport */
30
+ /**
31
+ * Minimal Transport interface — matches @modelcontextprotocol/sdk Transport.
32
+ * The callbacks are declared as methods, so an SDK transport, whose callbacks
33
+ * take the SDK's own message type, is accepted as it is (SDK 1 and SDK 2).
34
+ * The SDK's send options and message context (`extra`: the session id,
35
+ * `authInfo`, `requestInfo`) are opaque here and passed through unchanged.
36
+ */
25
37
  export interface Transport {
26
38
  start(): Promise<void>;
27
- send(message: JSONRPCMessage): Promise<void>;
39
+ send(message: JSONRPCMessage, options?: unknown): Promise<void>;
28
40
  close(): Promise<void>;
29
- onmessage?: (message: JSONRPCMessage) => void;
30
- onclose?: () => void;
31
- onerror?: (error: Error) => void;
41
+ onmessage?(message: JSONRPCMessage, extra?: unknown): void;
42
+ onclose?(): void;
43
+ onerror?(error: Error): void;
44
+ sessionId?: string;
45
+ setProtocolVersion?(version: string): void;
46
+ setSupportedProtocolVersions?(versions: string[]): void;
47
+ /** SDK 2: installs per-tool OAuth `scopeChallenge` enforcement on an HTTP transport. */
48
+ setScopeChallengeResolver?(resolver: unknown): void;
49
+ readonly hasPerRequestStream?: boolean;
32
50
  }
33
51
  export type JSONRPCMessage = Record<string, unknown>;
34
52
  /**
35
53
  * Creates a transport wrapper that injects KYA-OS proofs into `tools/call`
36
- * responses.
54
+ * responses, and makes the proofs the middleware's wrappers and
55
+ * `proveOutcome` leave to it, over each result as it is sent. A server on the
56
+ * low-level `Server` API connects through it:
57
+ * `server.connect(createKyaOsTransport(transport, kyaos))`.
58
+ *
59
+ * It proves and audits the result of every tool it is not told to exclude,
60
+ * including tools registered without a wrapper, as `withKyaOs` does. A
61
+ * low-level server that used only the wrappers on an unwrapped transport,
62
+ * which 1.19.0 allowed, sent its unwrapped tools' results unproven; through
63
+ * this transport they carry a proof too.
37
64
  *
38
65
  * @param inner - The real transport (Stdio, HTTP, etc.)
39
66
  * @param kyaos - Configured KyaOsMiddleware instance
40
- * @param exclude - Tool names to skip proof generation for
67
+ * @param exclude - More tool names whose results are not proved by the
68
+ * transport itself, in addition to the protocol tools `_kyaos` and
69
+ * `_kyaos_handshake`, which are always excluded (as `excludeTools` adds
70
+ * to them in `withKyaOs`). A wrapper's own proof is made whatever this
71
+ * says.
41
72
  */
42
- export declare function createKyaOsTransport(inner: Transport, kyaos: KyaOsMiddleware, exclude?: string[]): Transport;
73
+ export declare function createKyaOsTransport(inner: Transport, kyaos: KyaOsMiddleware, exclude?: readonly string[]): Transport;
@@ -13,33 +13,72 @@
13
13
  * 1. Incoming `tools/call` requests are captured (by id) to record tool
14
14
  * name and arguments for proof generation.
15
15
  * 2. Outgoing responses for those ids get a proof injected into `_meta`,
16
- * unless the middleware's own wrappers already proved or audited the
17
- * result, which they mark with a private per-middleware stamp.
18
- * 3. All other message types pass through unmodified, except that the
19
- * stamp is removed from every result before it is sent.
16
+ * unless the middleware's own wrappers produced the result, which they
17
+ * mark with a private per-middleware stamp.
18
+ * 3. The wrappers leave their proofs here, and every proof is made in
19
+ * `send()`, over the result as the MCP SDK finished it: the SDK changes
20
+ * a result after the handler returns (`resultType` on the 2026-07-28
21
+ * revision, a filled-in or appended `content`), and the proof covers
22
+ * what it covers of the result the client receives.
23
+ * 4. All other message types pass through unmodified, except that the
24
+ * middleware's private members are removed from every result before it
25
+ * is sent.
20
26
  *
21
27
  * @module kya-os-transport
22
28
  */
23
- import { attachOuterProofLayer, withoutLifecycleStamp, withoutOutcomeMeta, } from "./with-kya-os.session.js";
29
+ import { attachOuterProofLayer, withoutOutcomeMeta, withoutPrivateMeta, withoutPrivateMembers, } from "./with-kya-os.session.js";
24
30
  import { logger } from "../logging/index.js";
25
31
  /**
26
32
  * Creates a transport wrapper that injects KYA-OS proofs into `tools/call`
27
- * responses.
33
+ * responses, and makes the proofs the middleware's wrappers and
34
+ * `proveOutcome` leave to it, over each result as it is sent. A server on the
35
+ * low-level `Server` API connects through it:
36
+ * `server.connect(createKyaOsTransport(transport, kyaos))`.
37
+ *
38
+ * It proves and audits the result of every tool it is not told to exclude,
39
+ * including tools registered without a wrapper, as `withKyaOs` does. A
40
+ * low-level server that used only the wrappers on an unwrapped transport,
41
+ * which 1.19.0 allowed, sent its unwrapped tools' results unproven; through
42
+ * this transport they carry a proof too.
28
43
  *
29
44
  * @param inner - The real transport (Stdio, HTTP, etc.)
30
45
  * @param kyaos - Configured KyaOsMiddleware instance
31
- * @param exclude - Tool names to skip proof generation for
46
+ * @param exclude - More tool names whose results are not proved by the
47
+ * transport itself, in addition to the protocol tools `_kyaos` and
48
+ * `_kyaos_handshake`, which are always excluded (as `excludeTools` adds
49
+ * to them in `withKyaOs`). A wrapper's own proof is made whatever this
50
+ * says.
32
51
  */
33
- export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_handshake"]) {
52
+ export function createKyaOsTransport(inner, kyaos, exclude = []) {
34
53
  // Request id → { toolName, args } for pending tool calls
35
54
  const pending = new Map();
36
- // From here on the middleware's wrappers stamp what they return, and this
37
- // tells a stamped result from one that only looks proven. Undefined for a
38
- // custom middleware, whose results are all proved here.
39
- const isOwnResult = attachOuterProofLayer(kyaos.wrapWithProof);
55
+ const excluded = new Set(["_kyaos", "_kyaos_handshake", ...exclude]);
56
+ // From here on the middleware's wrappers stamp what they return, and the
57
+ // layer tells a stamped result from one that only looks proven, and makes
58
+ // the proofs they leave to it. Undefined for a custom middleware, whose
59
+ // results are all proved here.
60
+ const layer = attachOuterProofLayer(kyaos.wrapWithProof);
61
+ // While started and not closed, this transport counts as open for the
62
+ // middleware; its wrappers run only then.
63
+ let release;
64
+ const releaseOpen = () => {
65
+ release?.();
66
+ release = undefined;
67
+ };
68
+ // The close handler the server installed through the wrapper. It runs the
69
+ // handler the caller set on the inner transport before connecting, which
70
+ // the server read through the getter below and chained.
71
+ let closeHandler;
72
+ const closed = () => {
73
+ releaseOpen();
74
+ closeHandler?.();
75
+ };
40
76
  const wrapper = {
41
77
  start: () => inner.start(),
42
- close: () => inner.close(),
78
+ close: async () => {
79
+ releaseOpen();
80
+ await inner.close();
81
+ },
43
82
  // McpServer writes into wrapper.onmessage — forward to inner so the
44
83
  // real transport can drive it.
45
84
  set onmessage(handler) {
@@ -48,11 +87,17 @@ export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_
48
87
  get onmessage() {
49
88
  return inner.onmessage;
50
89
  },
90
+ // The inner transport may close on its own (the client went away), so
91
+ // its close also ends this transport's count. Before a handler is set
92
+ // here, the getter reports the inner transport's own: the SDK reads it
93
+ // when it connects and chains it (a session map's cleanup, say), so it
94
+ // keeps running.
51
95
  set onclose(handler) {
52
- inner.onclose = handler;
96
+ closeHandler = handler;
97
+ inner.onclose = closed;
53
98
  },
54
99
  get onclose() {
55
- return inner.onclose;
100
+ return closeHandler ?? (inner.onclose === closed ? undefined : inner.onclose);
56
101
  },
57
102
  set onerror(handler) {
58
103
  inner.onerror = handler;
@@ -60,9 +105,43 @@ export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_
60
105
  get onerror() {
61
106
  return inner.onerror;
62
107
  },
108
+ // What the SDK reads off, or hands to, the transport it connects passes
109
+ // through to the inner transport: its session id (which the SDK puts on
110
+ // each request's context), the negotiated protocol versions, the scope
111
+ // challenge resolver, and whether it streams per request. These are every
112
+ // transport member SDK 1 and SDK 2 servers read or feature-detect.
113
+ get sessionId() {
114
+ return inner.sessionId;
115
+ },
116
+ set sessionId(sessionId) {
117
+ inner.sessionId = sessionId;
118
+ },
119
+ get setProtocolVersion() {
120
+ return inner.setProtocolVersion === undefined
121
+ ? undefined
122
+ : (version) => inner.setProtocolVersion(version);
123
+ },
124
+ get setSupportedProtocolVersions() {
125
+ return inner.setSupportedProtocolVersions === undefined
126
+ ? undefined
127
+ : (versions) => inner.setSupportedProtocolVersions(versions);
128
+ },
129
+ // SDK 2's McpServer installs per-tool OAuth scope enforcement only when
130
+ // the transport has this member (an `in` check), so a wrapper without it
131
+ // silently switched the enforcement off.
132
+ get setScopeChallengeResolver() {
133
+ return inner.setScopeChallengeResolver === undefined
134
+ ? undefined
135
+ : (resolver) => inner.setScopeChallengeResolver(resolver);
136
+ },
137
+ get hasPerRequestStream() {
138
+ return inner.hasPerRequestStream;
139
+ },
63
140
  // McpServer calls send() for every outgoing message.
64
141
  // Intercept tools/call responses here to inject proofs.
65
- async send(message) {
142
+ // The SDK's send options (relatedRequestId, resumption tokens) are
143
+ // passed through unchanged.
144
+ async send(message, options) {
66
145
  // Only a response (result or error, no method) can answer a pending call:
67
146
  // a server-initiated request such as elicitation/create numbers its ids
68
147
  // in the server's own space, so its id can equal a pending client id.
@@ -74,11 +153,12 @@ export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_
74
153
  const rawResult = message.result;
75
154
  // A result the middleware's wrappers already proved or audited (a
76
155
  // delegated call's scope-bearing proof, a signed needs_authorization
77
- // outcome, an audited error) passes through: proving it again would
78
- // replace its proof and record its lifecycle twice. Only the stamp
79
- // shows that; proof, proofError and audit members can come from any
80
- // handler, including one relaying an upstream server's result.
81
- if (rawResult && isOwnResult?.(rawResult) !== true) {
156
+ // outcome, an outcome application code proved with proveOutcome, an
157
+ // audited error) passes through: proving it again would replace its
158
+ // proof and record its lifecycle twice. Only the stamp shows that;
159
+ // proof, proofError and audit members can come from any handler,
160
+ // including one relaying an upstream server's result.
161
+ if (rawResult && layer?.owns(rawResult) !== true) {
82
162
  // Those members are untrusted here, so they are removed and the
83
163
  // result is proved and audited as any other. Other members stay.
84
164
  const received = withoutOutcomeMeta(rawResult);
@@ -116,13 +196,33 @@ export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_
116
196
  }
117
197
  }
118
198
  }
119
- // The stamp never leaves the process, whichever path the message took.
199
+ // Whichever path the message took: a proof a wrapper left for the wire
200
+ // is made now, over the result as it is sent, and only by a proof left
201
+ // for the tool this answers. The private members never leave the
202
+ // process, from a result or from any other part of a message: a
203
+ // notification or request's params (a tool logging a wrapped result,
204
+ // say) or an error's data.
120
205
  if (typeof message.result === "object" && message.result !== null) {
121
- const sent = withoutLifecycleStamp(message.result);
206
+ const result = message.result;
207
+ const sent = layer
208
+ ? await layer.send(result, call === undefined ? undefined : { toolName: call.toolName })
209
+ : withoutPrivateMeta(result);
122
210
  if (sent !== message.result)
123
211
  message = { ...message, result: sent };
124
212
  }
125
- return inner.send(message);
213
+ const scrub = (value) => (layer ? layer.scrub(value) : withoutPrivateMembers(value));
214
+ if (message.params !== undefined) {
215
+ const params = scrub(message.params);
216
+ if (params !== message.params)
217
+ message = { ...message, params };
218
+ }
219
+ const error = message.error;
220
+ if (error !== null && typeof error === "object" && error.data !== undefined) {
221
+ const data = scrub(error.data);
222
+ if (data !== error.data)
223
+ message = { ...message, error: { ...error, data } };
224
+ }
225
+ return options === undefined ? inner.send(message) : inner.send(message, options);
126
226
  },
127
227
  };
128
228
  // Intercept incoming messages from the real transport to capture
@@ -131,18 +231,35 @@ export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_
131
231
  // via server.connect() — so we proxy through the getter/setter above and
132
232
  // add our interception in a one-time initializer on start().
133
233
  const originalStart = inner.start.bind(inner);
234
+ let interceptor;
134
235
  wrapper.start = async () => {
135
236
  await originalStart();
237
+ // Counted once however often start() is called, until the transport closes.
238
+ release ??= layer?.open();
239
+ // A close handler set on the inner transport and never read through the
240
+ // wrapper is adopted, so it still runs, after the one installed here.
241
+ const foreign = inner.onclose;
242
+ if (foreign !== undefined && foreign !== closed) {
243
+ const installed = closeHandler;
244
+ closeHandler = installed === undefined ? foreign : () => {
245
+ foreign();
246
+ installed();
247
+ };
248
+ }
249
+ inner.onclose = closed;
136
250
  // At this point McpServer has called server.connect(wrapper) which set
137
251
  // wrapper.onmessage = <McpServer handler>. That assignment forwarded to
138
- // inner.onmessage via the setter above. Now we inject our interceptor.
252
+ // inner.onmessage via the setter above. Now we inject our interceptor,
253
+ // once.
254
+ if (interceptor !== undefined && inner.onmessage === interceptor)
255
+ return;
139
256
  const downstream = inner.onmessage;
140
- inner.onmessage = (message) => {
257
+ interceptor = (message, extra) => {
141
258
  if (message.method === "tools/call" &&
142
259
  message.id !== undefined) {
143
260
  const params = message.params;
144
261
  const toolName = params?.name;
145
- if (toolName && !exclude.includes(toolName)) {
262
+ if (toolName && !excluded.has(toolName)) {
146
263
  pending.set(message.id, {
147
264
  toolName,
148
265
  args: params?.arguments ?? {},
@@ -155,8 +272,14 @@ export function createKyaOsTransport(inner, kyaos, exclude = ["_kyaos", "_kyaos_
155
272
  const params = message.params;
156
273
  pending.delete(params?.requestId);
157
274
  }
158
- downstream?.(message);
275
+ // The SDK's message context (session id, authInfo, requestInfo) rides
276
+ // through unchanged.
277
+ if (extra === undefined)
278
+ downstream?.(message);
279
+ else
280
+ downstream?.(message, extra);
159
281
  };
282
+ inner.onmessage = interceptor;
160
283
  };
161
284
  return wrapper;
162
285
  }
@@ -1 +1 @@
1
- {"version":3,"file":"kya-os-transport.js","sourceRoot":"","sources":["../../src/middleware/kya-os-transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kya-os-transport.js","sourceRoot":"","sources":["../../src/middleware/kya-os-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Register a middleware-wrapped handler with the MCP SDK's `registerTool`.
3
+ *
4
+ * A {@link KyaOsToolHandler} takes `(args, sessionId?, context?)`; the SDK
5
+ * calls a tool callback with `(args, extra)`, where `extra` is its own request
6
+ * context. Passed straight in, the handler needs a cast, and the SDK's context
7
+ * then arrives as the KYA-OS session id: no session matches it, and the
8
+ * result goes out unproven. The adapter passes the arguments alone, so the
9
+ * handler resolves its session as any unthreaded call does. The SDK's
10
+ * transport session id is a different thing from a KYA-OS session id, so
11
+ * nothing from `extra` is forwarded.
12
+ *
13
+ * Typed structurally, so this package keeps no type dependency on the SDK.
14
+ */
15
+ import type { KyaOsToolHandler } from "./with-kya-os.types.js";
16
+ /** A tool result in the shape the MCP SDK's `registerTool` callback returns. */
17
+ export interface McpToolCallbackResult {
18
+ content: Array<{
19
+ type: "text";
20
+ text: string;
21
+ [key: string]: unknown;
22
+ }>;
23
+ structuredContent?: Record<string, unknown>;
24
+ isError?: boolean;
25
+ _meta?: Record<string, unknown>;
26
+ [key: string]: unknown;
27
+ }
28
+ /**
29
+ * A callback for a tool registered with an `inputSchema` (an empty one for a
30
+ * tool without arguments): the SDK calls it with the parsed arguments and its
31
+ * request context.
32
+ */
33
+ export type McpToolCallback<T extends Record<string, unknown> = Record<string, unknown>> = (args: T, extra: unknown) => Promise<McpToolCallbackResult>;
34
+ /**
35
+ * Adapt a handler (one from `wrapWithProof`, `wrapWithDelegation`,
36
+ * `withPolicyGate`, or one returning `proveOutcome`'s result) to the MCP
37
+ * SDK's `registerTool`, with no cast:
38
+ *
39
+ * ```ts
40
+ * server.registerTool('checkout', { inputSchema }, toMcpToolCallback(gated));
41
+ * ```
42
+ *
43
+ * The handler's result is returned as it is; the SDK validates it. Called
44
+ * with one argument, which is how the SDK calls a tool registered without an
45
+ * `inputSchema`, the handler gets empty arguments instead of the SDK's
46
+ * request context.
47
+ */
48
+ export declare function toMcpToolCallback<T extends Record<string, unknown> = Record<string, unknown>>(handler: KyaOsToolHandler<T>): McpToolCallback<T>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Register a middleware-wrapped handler with the MCP SDK's `registerTool`.
3
+ *
4
+ * A {@link KyaOsToolHandler} takes `(args, sessionId?, context?)`; the SDK
5
+ * calls a tool callback with `(args, extra)`, where `extra` is its own request
6
+ * context. Passed straight in, the handler needs a cast, and the SDK's context
7
+ * then arrives as the KYA-OS session id: no session matches it, and the
8
+ * result goes out unproven. The adapter passes the arguments alone, so the
9
+ * handler resolves its session as any unthreaded call does. The SDK's
10
+ * transport session id is a different thing from a KYA-OS session id, so
11
+ * nothing from `extra` is forwarded.
12
+ *
13
+ * Typed structurally, so this package keeps no type dependency on the SDK.
14
+ */
15
+ /**
16
+ * Adapt a handler (one from `wrapWithProof`, `wrapWithDelegation`,
17
+ * `withPolicyGate`, or one returning `proveOutcome`'s result) to the MCP
18
+ * SDK's `registerTool`, with no cast:
19
+ *
20
+ * ```ts
21
+ * server.registerTool('checkout', { inputSchema }, toMcpToolCallback(gated));
22
+ * ```
23
+ *
24
+ * The handler's result is returned as it is; the SDK validates it. Called
25
+ * with one argument, which is how the SDK calls a tool registered without an
26
+ * `inputSchema`, the handler gets empty arguments instead of the SDK's
27
+ * request context.
28
+ */
29
+ export function toMcpToolCallback(handler) {
30
+ return async (...params) => {
31
+ const args = params.length > 1 ? params[0] : {};
32
+ // KyaOsToolHandler types content items' `type` as string; the SDK checks
33
+ // the result it receives, so the narrower declared type is not a claim
34
+ // this adapter has to prove.
35
+ return (await handler(args));
36
+ };
37
+ }
38
+ //# sourceMappingURL=mcp-tool-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tool-callback.js","sourceRoot":"","sources":["../../src/middleware/mcp-tool-callback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAuBH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA4B;IAE5B,OAAO,KAAK,EAAE,GAAG,MAAqB,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,EAAQ,CAAC;QACvD,yEAAyE;QACzE,uEAAuE;QACvE,6BAA6B;QAC7B,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAA0B,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Call KYA-OS-wrapped tool handlers in process, outside an MCP server, and
3
+ * get the results a client would receive.
4
+ *
5
+ * The middleware makes its response proofs where the KYA-OS transport sends a
6
+ * result, because the MCP SDK changes a result after the handler returns it.
7
+ * A script, a walkthrough or a test that calls a wrapped handler directly
8
+ * therefore needs a KYA-OS transport to send what the handler returns, as a
9
+ * server connected through `withKyaOs()` or `createKyaOsTransport()` has. This
10
+ * module is that transport, with nothing on the far end but the caller.
11
+ *
12
+ * ```ts
13
+ * const local = serveInProcess(kyaos);
14
+ * const checkout = local.tool('checkout', kyaos.wrapWithDelegation('checkout', consent, handler));
15
+ * const result = await checkout({ item: 'laptop' }); // proved, as a client receives it
16
+ * await local.close();
17
+ * ```
18
+ *
19
+ * @module serve-in-process
20
+ */
21
+ import type { KyaOsMiddleware, KyaOsToolHandler, KyaOsToolResult } from "./with-kya-os.types.js";
22
+ /** A KYA-OS transport for in-process calls, open until {@link InProcessServer.close}. */
23
+ export interface InProcessServer {
24
+ /**
25
+ * `handler`, answering as an MCP server would: its result goes through the
26
+ * KYA-OS transport, and the caller gets what a client receives, proof
27
+ * included. `toolName` names the call, as a client's `tools/call` would.
28
+ */
29
+ tool<R = KyaOsToolResult>(toolName: string, handler: KyaOsToolHandler): (args: Record<string, unknown>, sessionId?: string) => Promise<R>;
30
+ /**
31
+ * Close the transport. It no longer counts as open for the middleware, and
32
+ * its tools refuse further calls.
33
+ */
34
+ close(): Promise<void>;
35
+ }
36
+ /**
37
+ * Open a KYA-OS transport for `kyaos` whose far end is the caller. While it
38
+ * is open it counts as an open KYA-OS transport for the middleware, so close
39
+ * it when done.
40
+ */
41
+ export declare function serveInProcess(kyaos: KyaOsMiddleware): InProcessServer;