@kya-os/contracts 1.5.3-canary.15 → 1.5.3-canary.17

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 (73) hide show
  1. package/.turbo/turbo-build.log +17 -0
  2. package/.turbo/turbo-test$colon$coverage.log +85 -0
  3. package/.turbo/turbo-test.log +32 -0
  4. package/coverage/coverage-final.json +38 -0
  5. package/dist/config/identity.d.ts +138 -3
  6. package/dist/config/identity.js +28 -0
  7. package/dist/consent/schemas.d.ts +18 -0
  8. package/dist/consent/schemas.js +10 -0
  9. package/dist/dashboard-config/schemas.d.ts +1424 -220
  10. package/dist/tool-protection/index.d.ts +418 -8
  11. package/dist/tool-protection/index.js +61 -2
  12. package/package.json +35 -129
  13. package/schemas/cli/register-output/v1.0.0.json +69 -0
  14. package/schemas/identity/v1.0.0.json +46 -0
  15. package/schemas/proof/v1.0.0.json +80 -0
  16. package/schemas/registry/receipt-v1.0.0.json +60 -0
  17. package/schemas/verifier/verify-page/v1.0.0.json +94 -0
  18. package/schemas/well-known/agent/v1.0.0.json +67 -0
  19. package/schemas/well-known/did/v1.0.0.json +174 -0
  20. package/scripts/emit-schemas.js +11 -0
  21. package/src/agentshield-api/admin-schemas.ts +31 -0
  22. package/src/agentshield-api/admin-types.ts +47 -0
  23. package/src/agentshield-api/endpoints.ts +60 -0
  24. package/src/agentshield-api/index.ts +70 -0
  25. package/src/agentshield-api/schemas.ts +304 -0
  26. package/src/agentshield-api/types.ts +317 -0
  27. package/src/audit/index.ts +128 -0
  28. package/src/cli.ts +156 -0
  29. package/src/config/base.ts +107 -0
  30. package/src/config/builder.ts +97 -0
  31. package/src/config/delegation.ts +232 -0
  32. package/src/config/identity.ts +252 -0
  33. package/src/config/index.ts +78 -0
  34. package/src/config/proofing.ts +138 -0
  35. package/src/config/tool-context.ts +41 -0
  36. package/src/config/tool-protection.ts +174 -0
  37. package/src/consent/index.ts +32 -0
  38. package/src/consent/schemas.ts +334 -0
  39. package/src/consent/types.ts +199 -0
  40. package/src/dashboard-config/default-config.json +86 -0
  41. package/src/dashboard-config/default-config.ts +266 -0
  42. package/src/dashboard-config/index.ts +48 -0
  43. package/src/dashboard-config/schemas.ts +286 -0
  44. package/src/dashboard-config/types.ts +404 -0
  45. package/src/delegation/constraints.ts +267 -0
  46. package/src/delegation/index.ts +8 -0
  47. package/src/delegation/schemas.ts +595 -0
  48. package/src/did/index.ts +9 -0
  49. package/src/did/resolve-contract.ts +255 -0
  50. package/src/did/schemas.ts +190 -0
  51. package/src/did/types.ts +224 -0
  52. package/src/env/constants.ts +70 -0
  53. package/src/env/index.ts +5 -0
  54. package/src/handshake.ts +125 -0
  55. package/src/index.ts +45 -0
  56. package/src/proof/index.ts +31 -0
  57. package/src/proof/proof-record.ts +163 -0
  58. package/src/proof/signing-spec.ts +146 -0
  59. package/src/proof.ts +99 -0
  60. package/src/registry.ts +146 -0
  61. package/src/runtime/errors.ts +153 -0
  62. package/src/runtime/headers.ts +136 -0
  63. package/src/runtime/index.ts +6 -0
  64. package/src/test.ts +143 -0
  65. package/src/tlkrc/index.ts +5 -0
  66. package/src/tlkrc/rotation.ts +153 -0
  67. package/src/tool-protection/index.ts +343 -0
  68. package/src/utils/validation.ts +93 -0
  69. package/src/vc/index.ts +8 -0
  70. package/src/vc/schemas.ts +277 -0
  71. package/src/vc/statuslist.ts +279 -0
  72. package/src/verifier.ts +92 -0
  73. package/src/well-known/index.ts +237 -0
package/package.json CHANGED
@@ -1,161 +1,67 @@
1
1
  {
2
2
  "name": "@kya-os/contracts",
3
- "version": "1.5.3-canary.15",
4
- "description": "Shared types and schemas for XMCP-I ecosystem",
5
- "type": "commonjs",
6
- "sideEffects": false,
7
- "main": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
3
+ "version": "1.5.3-canary.17",
4
+ "description": "Shared contracts, types, and schemas for MCP-I framework",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
9
7
  "exports": {
10
8
  ".": {
11
9
  "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js",
13
- "require": "./dist/index.js"
10
+ "default": "./dist/index.js"
14
11
  },
15
- "./handshake": {
16
- "types": "./dist/handshake.d.ts",
17
- "import": "./dist/handshake.js",
18
- "require": "./dist/handshake.js"
19
- },
20
- "./proof": {
21
- "types": "./dist/proof/index.d.ts",
22
- "import": "./dist/proof/index.js",
23
- "require": "./dist/proof/index.js"
24
- },
25
- "./verifier": {
26
- "types": "./dist/verifier.d.ts",
27
- "import": "./dist/verifier.js",
28
- "require": "./dist/verifier.js"
29
- },
30
- "./registry": {
31
- "types": "./dist/registry.d.ts",
32
- "import": "./dist/registry.js",
33
- "require": "./dist/registry.js"
34
- },
35
- "./cli": {
36
- "types": "./dist/cli.d.ts",
37
- "import": "./dist/cli.js",
38
- "require": "./dist/cli.js"
39
- },
40
- "./test": {
41
- "types": "./dist/test.d.ts",
42
- "import": "./dist/test.js",
43
- "require": "./dist/test.js"
44
- },
45
- "./did": {
46
- "types": "./dist/did/index.d.ts",
47
- "import": "./dist/did/index.js",
48
- "require": "./dist/did/index.js"
49
- },
50
- "./vc": {
51
- "types": "./dist/vc/index.d.ts",
52
- "import": "./dist/vc/index.js",
53
- "require": "./dist/vc/index.js"
12
+ "./consent": {
13
+ "types": "./dist/consent/index.d.ts",
14
+ "default": "./dist/consent/index.js"
54
15
  },
55
16
  "./delegation": {
56
17
  "types": "./dist/delegation/index.d.ts",
57
- "import": "./dist/delegation/index.js",
58
- "require": "./dist/delegation/index.js"
59
- },
60
- "./runtime": {
61
- "types": "./dist/runtime/index.d.ts",
62
- "import": "./dist/runtime/index.js",
63
- "require": "./dist/runtime/index.js"
64
- },
65
- "./tlkrc": {
66
- "types": "./dist/tlkrc/index.d.ts",
67
- "import": "./dist/tlkrc/index.js",
68
- "require": "./dist/tlkrc/index.js"
69
- },
70
- "./env": {
71
- "types": "./dist/env/index.d.ts",
72
- "import": "./dist/env/index.js",
73
- "require": "./dist/env/index.js"
18
+ "default": "./dist/delegation/index.js"
74
19
  },
75
20
  "./agentshield-api": {
76
21
  "types": "./dist/agentshield-api/index.d.ts",
77
- "import": "./dist/agentshield-api/index.js",
78
- "require": "./dist/agentshield-api/index.js"
22
+ "default": "./dist/agentshield-api/index.js"
79
23
  },
80
- "./audit": {
81
- "types": "./dist/audit/index.d.ts",
82
- "import": "./dist/audit/index.js",
83
- "require": "./dist/audit/index.js"
24
+ "./runtime": {
25
+ "types": "./dist/runtime/index.d.ts",
26
+ "default": "./dist/runtime/index.js"
27
+ },
28
+ "./proof": {
29
+ "types": "./dist/proof/index.d.ts",
30
+ "default": "./dist/proof/index.js"
84
31
  },
85
32
  "./tool-protection": {
86
33
  "types": "./dist/tool-protection/index.d.ts",
87
- "import": "./dist/tool-protection/index.js",
88
- "require": "./dist/tool-protection/index.js"
89
- },
90
- "./well-known": {
91
- "types": "./dist/well-known/index.d.ts",
92
- "import": "./dist/well-known/index.js",
93
- "require": "./dist/well-known/index.js"
34
+ "default": "./dist/tool-protection/index.js"
94
35
  },
95
36
  "./config": {
96
37
  "types": "./dist/config/index.d.ts",
97
- "import": "./dist/config/index.js",
98
- "require": "./dist/config/index.js"
99
- },
100
- "./dashboard-config": {
101
- "types": "./dist/dashboard-config/index.d.ts",
102
- "import": "./dist/dashboard-config/index.js",
103
- "require": "./dist/dashboard-config/index.js"
38
+ "default": "./dist/config/index.js"
104
39
  },
105
- "./consent": {
106
- "types": "./dist/consent/index.d.ts",
107
- "import": "./dist/consent/index.js",
108
- "require": "./dist/consent/index.js"
40
+ "./audit": {
41
+ "types": "./dist/audit/index.d.ts",
42
+ "default": "./dist/audit/index.js"
109
43
  }
110
44
  },
111
- "files": [
112
- "dist/**/*.js",
113
- "dist/**/*.d.ts",
114
- "!dist/**/*.map",
115
- "!dist/**/__tests__/**",
116
- "!dist/**/__fixtures__/**",
117
- "!dist/**/*.spec.*",
118
- "!dist/**/*.test.*",
119
- "!README.md",
120
- "!*.md",
121
- "!CHANGELOG.md"
122
- ],
123
45
  "scripts": {
124
46
  "build": "tsc -p tsconfig.build.json && npm run emit-schemas",
125
47
  "emit-schemas": "node scripts/emit-schemas.js",
126
- "clean": "rm -rf dist && rm -f *.tsbuildinfo",
127
- "dev": "tsc -p tsconfig.build.json --watch",
128
- "type-check": "tsc --noEmit",
129
48
  "test": "vitest run",
130
49
  "test:watch": "vitest",
131
- "test:coverage": "vitest run --coverage",
132
- "prepublishOnly": "npm run build && node ../create-mcpi-app/scripts/validate-dependencies.js"
133
- },
134
- "devDependencies": {
135
- "@types/node": "^20.0.0",
136
- "@vitest/coverage-v8": "^4.0.5",
137
- "ajv": "^8.12.0",
138
- "ajv-formats": "^2.1.1",
139
- "fast-check": "^3.15.0",
140
- "typescript": "^5.0.0",
141
- "vitest": "^4.0.5",
142
- "zod-to-json-schema": "^3.22.0"
50
+ "lint": "eslint .",
51
+ "format": "prettier --write \"src/**/*.{ts,tsx}\"",
52
+ "clean": "rm -rf dist .turbo node_modules",
53
+ "prepublishOnly": "npm run build && node ../create-mcpi-app/scripts/validate-no-workspace.js"
143
54
  },
144
55
  "dependencies": {
145
- "zod": "^3.22.0"
56
+ "zod": "^3.23.8"
57
+ },
58
+ "devDependencies": {
59
+ "@types/node": "^20.14.9",
60
+ "eslint": "^8.57.0",
61
+ "typescript": "^5.5.3",
62
+ "vitest": "^1.6.0"
146
63
  },
147
- "keywords": [
148
- "xmcp",
149
- "mcp",
150
- "identity",
151
- "types",
152
- "contracts"
153
- ],
154
- "author": "KYA OS",
155
- "license": "MIT",
156
- "repository": {
157
- "type": "git",
158
- "url": "https://github.com/kya-os/xmcp-i.git",
159
- "directory": "packages/contracts"
64
+ "publishConfig": {
65
+ "access": "public"
160
66
  }
161
67
  }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.kya-os.ai/xmcp-i/cli/register-output/v1.0.0",
4
+ "title": "XMCP-I CLI Register Output",
5
+ "description": "Schema for mcpi register command JSON output",
6
+ "type": "object",
7
+ "properties": {
8
+ "agentDID": {
9
+ "type": "string",
10
+ "description": "Agent DID",
11
+ "minLength": 1
12
+ },
13
+ "agentURL": {
14
+ "type": "string",
15
+ "format": "uri",
16
+ "description": "Agent URL"
17
+ },
18
+ "agentId": {
19
+ "type": "string",
20
+ "description": "Agent identifier",
21
+ "minLength": 1
22
+ },
23
+ "agentSlug": {
24
+ "type": "string",
25
+ "description": "Agent slug",
26
+ "minLength": 1
27
+ },
28
+ "claimURL": {
29
+ "type": "string",
30
+ "format": "uri",
31
+ "description": "Claim URL (when draft)"
32
+ },
33
+ "verificationEndpoint": {
34
+ "type": "string",
35
+ "format": "uri",
36
+ "description": "Verification endpoint URL"
37
+ },
38
+ "conformanceCapabilities": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "string",
42
+ "enum": ["handshake", "signing", "verification"]
43
+ },
44
+ "minItems": 3,
45
+ "maxItems": 3,
46
+ "description": "Exactly the three MCP-I capabilities"
47
+ },
48
+ "mirrorStatus": {
49
+ "type": "string",
50
+ "enum": ["pending", "success", "error"],
51
+ "description": "MCP Registry mirror status"
52
+ },
53
+ "mirrorLink": {
54
+ "type": "string",
55
+ "format": "uri",
56
+ "description": "MCP Registry mirror link"
57
+ }
58
+ },
59
+ "required": [
60
+ "agentDID",
61
+ "agentURL",
62
+ "agentId",
63
+ "agentSlug",
64
+ "verificationEndpoint",
65
+ "conformanceCapabilities",
66
+ "mirrorStatus"
67
+ ],
68
+ "additionalProperties": false
69
+ }
@@ -0,0 +1,46 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.kya-os.ai/xmcp-i/identity/v1.0.0",
4
+ "title": "MCP-I Identity File",
5
+ "description": "Schema for .mcpi/identity.json file structure used in development mode",
6
+ "type": "object",
7
+ "properties": {
8
+ "version": {
9
+ "type": "string",
10
+ "const": "1.0",
11
+ "description": "Identity file format version"
12
+ },
13
+ "did": {
14
+ "type": "string",
15
+ "pattern": "^did:",
16
+ "description": "Decentralized Identifier (DID) for the agent"
17
+ },
18
+ "kid": {
19
+ "type": "string",
20
+ "pattern": "^z[1-9A-HJ-NP-Za-km-z]+$",
21
+ "description": "Key identifier in multibase format (z-prefix base58btc)"
22
+ },
23
+ "privateKey": {
24
+ "type": "string",
25
+ "pattern": "^[A-Za-z0-9+/]{43}=$",
26
+ "description": "Base64-encoded Ed25519 private key (32 bytes)"
27
+ },
28
+ "publicKey": {
29
+ "type": "string",
30
+ "pattern": "^[A-Za-z0-9+/]{43}=$",
31
+ "description": "Base64-encoded Ed25519 public key (32 bytes)"
32
+ },
33
+ "createdAt": {
34
+ "type": "string",
35
+ "format": "date-time",
36
+ "description": "ISO 8601 timestamp of identity creation"
37
+ },
38
+ "lastRotated": {
39
+ "type": "string",
40
+ "format": "date-time",
41
+ "description": "ISO 8601 timestamp of last key rotation (optional)"
42
+ }
43
+ },
44
+ "required": ["version", "did", "kid", "privateKey", "publicKey", "createdAt"],
45
+ "additionalProperties": false
46
+ }
@@ -0,0 +1,80 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.kya-os.ai/mcpi/proof/v1.0.0",
4
+ "title": "XMCP-I Detached Proof",
5
+ "description": "Schema for detached proofs in XMCP-I protocol",
6
+ "type": "object",
7
+ "properties": {
8
+ "jws": {
9
+ "type": "string",
10
+ "description": "Compact JWS format detached signature",
11
+ "minLength": 1
12
+ },
13
+ "meta": {
14
+ "type": "object",
15
+ "properties": {
16
+ "did": {
17
+ "type": "string",
18
+ "description": "Agent DID",
19
+ "minLength": 1
20
+ },
21
+ "kid": {
22
+ "type": "string",
23
+ "description": "Key identifier",
24
+ "minLength": 1
25
+ },
26
+ "ts": {
27
+ "type": "integer",
28
+ "description": "Unix timestamp",
29
+ "minimum": 1
30
+ },
31
+ "nonce": {
32
+ "type": "string",
33
+ "description": "Session nonce",
34
+ "minLength": 1
35
+ },
36
+ "audience": {
37
+ "type": "string",
38
+ "description": "Intended audience",
39
+ "minLength": 1
40
+ },
41
+ "sessionId": {
42
+ "type": "string",
43
+ "description": "Session identifier",
44
+ "minLength": 1
45
+ },
46
+ "requestHash": {
47
+ "type": "string",
48
+ "pattern": "^sha256:[a-f0-9]{64}$",
49
+ "description": "SHA-256 hash of canonical request"
50
+ },
51
+ "responseHash": {
52
+ "type": "string",
53
+ "pattern": "^sha256:[a-f0-9]{64}$",
54
+ "description": "SHA-256 hash of canonical response"
55
+ },
56
+ "scopeId": {
57
+ "type": "string",
58
+ "description": "Optional scope identifier"
59
+ },
60
+ "delegationRef": {
61
+ "type": "string",
62
+ "description": "Optional delegation reference"
63
+ }
64
+ },
65
+ "required": [
66
+ "did",
67
+ "kid",
68
+ "ts",
69
+ "nonce",
70
+ "audience",
71
+ "sessionId",
72
+ "requestHash",
73
+ "responseHash"
74
+ ],
75
+ "additionalProperties": false
76
+ }
77
+ },
78
+ "required": ["jws", "meta"],
79
+ "additionalProperties": false
80
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.kya-os.ai/mcpi/receipt/v1.0.0.json",
4
+ "title": "XMCP-I Receipt",
5
+ "description": "Receipt object returned by KTA for verifiable operations",
6
+ "type": "object",
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string",
10
+ "const": "https://schemas.kya-os.ai/mcpi/receipt/v1.0.0.json"
11
+ },
12
+ "ref": {
13
+ "type": "string",
14
+ "minLength": 1,
15
+ "description": "Unique reference identifier for the receipt"
16
+ },
17
+ "contentHash": {
18
+ "type": "string",
19
+ "pattern": "^sha256:[a-f0-9]{64}$",
20
+ "description": "SHA-256 hash of the content with sha256: prefix"
21
+ },
22
+ "action": {
23
+ "type": "string",
24
+ "enum": ["issue", "revoke"],
25
+ "description": "The action performed (issue or revoke)"
26
+ },
27
+ "ts": {
28
+ "type": "integer",
29
+ "minimum": 1,
30
+ "description": "Unix timestamp when the action was performed"
31
+ },
32
+ "logIndex": {
33
+ "type": "integer",
34
+ "minimum": 0,
35
+ "description": "Index in the KTA log for this receipt"
36
+ },
37
+ "logRoot": {
38
+ "type": "string",
39
+ "minLength": 1,
40
+ "description": "Merkle log root hash for verification"
41
+ },
42
+ "inclusionProof": {
43
+ "type": "array",
44
+ "items": {
45
+ "type": "string"
46
+ },
47
+ "description": "Merkle inclusion proof for verifying the receipt against the log root"
48
+ }
49
+ },
50
+ "required": [
51
+ "ref",
52
+ "contentHash",
53
+ "action",
54
+ "ts",
55
+ "logIndex",
56
+ "logRoot",
57
+ "inclusionProof"
58
+ ],
59
+ "additionalProperties": false
60
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.kya-os.ai/xmcp-i/verifier/verify-page/v1.0.0",
4
+ "title": "XMCP-I Verify Page Payload",
5
+ "description": "Schema for /verify debug page payload",
6
+ "type": "object",
7
+ "properties": {
8
+ "canonicalHashes": {
9
+ "type": "object",
10
+ "properties": {
11
+ "requestHash": {
12
+ "type": "string",
13
+ "pattern": "^sha256:[a-f0-9]{64}$",
14
+ "description": "SHA-256 hash of canonical request"
15
+ },
16
+ "responseHash": {
17
+ "type": "string",
18
+ "pattern": "^sha256:[a-f0-9]{64}$",
19
+ "description": "SHA-256 hash of canonical response"
20
+ }
21
+ },
22
+ "required": ["requestHash", "responseHash"],
23
+ "additionalProperties": false
24
+ },
25
+ "proof": {
26
+ "type": "object",
27
+ "properties": {
28
+ "jws": {
29
+ "type": "string",
30
+ "description": "Compact JWS format detached signature",
31
+ "minLength": 1
32
+ },
33
+ "meta": {
34
+ "$ref": "https://schemas.kya-os.ai/mcpi/proof/v1.0.0#/properties/meta"
35
+ }
36
+ },
37
+ "required": ["jws", "meta"],
38
+ "additionalProperties": false
39
+ },
40
+ "didDocumentLink": {
41
+ "type": "string",
42
+ "format": "uri",
43
+ "description": "Link to DID document"
44
+ },
45
+ "ktaURL": {
46
+ "type": "string",
47
+ "format": "uri",
48
+ "description": "Know-That-AI URL"
49
+ },
50
+ "mcpMirrorStatus": {
51
+ "type": "string",
52
+ "enum": ["pending", "success", "error"],
53
+ "description": "MCP Registry mirror status"
54
+ },
55
+ "protocolCapabilities": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "string",
59
+ "enum": ["handshake", "signing", "verification"]
60
+ },
61
+ "minItems": 3,
62
+ "maxItems": 3,
63
+ "description": "Advertised protocol capabilities"
64
+ },
65
+ "localVerificationResult": {
66
+ "type": "object",
67
+ "properties": {
68
+ "valid": {
69
+ "type": "boolean",
70
+ "description": "Local verification result"
71
+ },
72
+ "errors": {
73
+ "type": "array",
74
+ "items": {
75
+ "type": "string"
76
+ },
77
+ "description": "Validation errors if any"
78
+ }
79
+ },
80
+ "required": ["valid"],
81
+ "additionalProperties": false
82
+ }
83
+ },
84
+ "required": [
85
+ "canonicalHashes",
86
+ "proof",
87
+ "didDocumentLink",
88
+ "ktaURL",
89
+ "mcpMirrorStatus",
90
+ "protocolCapabilities",
91
+ "localVerificationResult"
92
+ ],
93
+ "additionalProperties": false
94
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://schemas.kya-os.ai/xmcp-i/well-known/agent/v1.0.0",
4
+ "title": "MCP-I Agent Document",
5
+ "description": "Schema for /.well-known/agent.json endpoint (MCP-I capabilities). Top-level schema uses additionalProperties:false for strict validation - new top-level fields require explicit schema version bumps to ensure deliberate evolution. Vendor-specific extensions should be placed in the 'metadata' object which allows additionalProperties:true for backward-compatible extensibility.",
6
+ "type": "object",
7
+ "properties": {
8
+ "id": {
9
+ "type": "string",
10
+ "description": "Agent DID identifier",
11
+ "pattern": "^did:"
12
+ },
13
+ "capabilities": {
14
+ "type": "object",
15
+ "description": "Agent capabilities by protocol",
16
+ "properties": {
17
+ "mcp-i": {
18
+ "type": "array",
19
+ "description": "MCP-I protocol capabilities",
20
+ "items": {
21
+ "type": "string",
22
+ "enum": [
23
+ "handshake",
24
+ "signing",
25
+ "verification"
26
+ ]
27
+ },
28
+ "minItems": 3,
29
+ "maxItems": 3
30
+ }
31
+ },
32
+ "required": ["mcp-i"],
33
+ "additionalProperties": {
34
+ "type": "array",
35
+ "items": {
36
+ "type": "string"
37
+ }
38
+ }
39
+ },
40
+ "metadata": {
41
+ "type": "object",
42
+ "description": "Optional agent metadata. This object is the designated extensibility point - vendors can add custom fields here without requiring schema version changes. Use this for implementation-specific data, vendor identifiers, custom features, etc.",
43
+ "properties": {
44
+ "name": {
45
+ "type": "string",
46
+ "description": "Human-readable service name"
47
+ },
48
+ "serviceEndpoint": {
49
+ "type": "string",
50
+ "description": "Service endpoint URL",
51
+ "format": "uri"
52
+ },
53
+ "description": {
54
+ "type": "string",
55
+ "description": "Service description"
56
+ },
57
+ "version": {
58
+ "type": "string",
59
+ "description": "Service version"
60
+ }
61
+ },
62
+ "additionalProperties": true
63
+ }
64
+ },
65
+ "required": ["id", "capabilities"],
66
+ "additionalProperties": false
67
+ }