@kya-os/mcp-i-core 1.2.3-canary.6 → 1.3.0-canary.clientinfo.20251126003544
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-test$colon$coverage.log +4239 -0
- package/.turbo/turbo-test.log +2973 -0
- package/COMPLIANCE_IMPROVEMENT_REPORT.md +483 -0
- package/Composer 3.md +615 -0
- package/GPT-5.md +1169 -0
- package/OPUS-plan.md +352 -0
- package/PHASE_3_AND_4.1_SUMMARY.md +585 -0
- package/PHASE_3_SUMMARY.md +317 -0
- package/PHASE_4.1.3_SUMMARY.md +428 -0
- package/PHASE_4.1_COMPLETE.md +525 -0
- package/PHASE_4_USER_DID_IDENTITY_LINKING_PLAN.md +1240 -0
- package/SCHEMA_COMPLIANCE_REPORT.md +275 -0
- package/TEST_PLAN.md +571 -0
- package/coverage/coverage-final.json +57 -0
- package/dist/__tests__/utils/mock-providers.d.ts +1 -2
- package/dist/__tests__/utils/mock-providers.d.ts.map +1 -1
- package/dist/__tests__/utils/mock-providers.js.map +1 -1
- package/dist/cache/oauth-config-cache.d.ts +69 -0
- package/dist/cache/oauth-config-cache.d.ts.map +1 -0
- package/dist/cache/oauth-config-cache.js +76 -0
- package/dist/cache/oauth-config-cache.js.map +1 -0
- package/dist/identity/idp-token-resolver.d.ts +53 -0
- package/dist/identity/idp-token-resolver.d.ts.map +1 -0
- package/dist/identity/idp-token-resolver.js +108 -0
- package/dist/identity/idp-token-resolver.js.map +1 -0
- package/dist/identity/idp-token-storage.interface.d.ts +42 -0
- package/dist/identity/idp-token-storage.interface.d.ts.map +1 -0
- package/dist/identity/idp-token-storage.interface.js +12 -0
- package/dist/identity/idp-token-storage.interface.js.map +1 -0
- package/dist/identity/user-did-manager.d.ts +39 -1
- package/dist/identity/user-did-manager.d.ts.map +1 -1
- package/dist/identity/user-did-manager.js +69 -3
- package/dist/identity/user-did-manager.js.map +1 -1
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/audit-logger.d.ts +37 -0
- package/dist/runtime/audit-logger.d.ts.map +1 -0
- package/dist/runtime/audit-logger.js +9 -0
- package/dist/runtime/audit-logger.js.map +1 -0
- package/dist/runtime/base.d.ts +58 -2
- package/dist/runtime/base.d.ts.map +1 -1
- package/dist/runtime/base.js +266 -11
- package/dist/runtime/base.js.map +1 -1
- package/dist/services/access-control.service.d.ts.map +1 -1
- package/dist/services/access-control.service.js +200 -35
- package/dist/services/access-control.service.js.map +1 -1
- package/dist/services/authorization/authorization-registry.d.ts +29 -0
- package/dist/services/authorization/authorization-registry.d.ts.map +1 -0
- package/dist/services/authorization/authorization-registry.js +57 -0
- package/dist/services/authorization/authorization-registry.js.map +1 -0
- package/dist/services/authorization/types.d.ts +53 -0
- package/dist/services/authorization/types.d.ts.map +1 -0
- package/dist/services/authorization/types.js +10 -0
- package/dist/services/authorization/types.js.map +1 -0
- package/dist/services/batch-delegation.service.d.ts +53 -0
- package/dist/services/batch-delegation.service.d.ts.map +1 -0
- package/dist/services/batch-delegation.service.js +95 -0
- package/dist/services/batch-delegation.service.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +4 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/oauth-config.service.d.ts +53 -0
- package/dist/services/oauth-config.service.d.ts.map +1 -0
- package/dist/services/oauth-config.service.js +117 -0
- package/dist/services/oauth-config.service.js.map +1 -0
- package/dist/services/oauth-provider-registry.d.ts +77 -0
- package/dist/services/oauth-provider-registry.d.ts.map +1 -0
- package/dist/services/oauth-provider-registry.js +112 -0
- package/dist/services/oauth-provider-registry.js.map +1 -0
- package/dist/services/oauth-service.d.ts +77 -0
- package/dist/services/oauth-service.d.ts.map +1 -0
- package/dist/services/oauth-service.js +348 -0
- package/dist/services/oauth-service.js.map +1 -0
- package/dist/services/oauth-token-retrieval.service.d.ts +49 -0
- package/dist/services/oauth-token-retrieval.service.d.ts.map +1 -0
- package/dist/services/oauth-token-retrieval.service.js +150 -0
- package/dist/services/oauth-token-retrieval.service.js.map +1 -0
- package/dist/services/provider-resolver.d.ts +48 -0
- package/dist/services/provider-resolver.d.ts.map +1 -0
- package/dist/services/provider-resolver.js +120 -0
- package/dist/services/provider-resolver.js.map +1 -0
- package/dist/services/provider-validator.d.ts +55 -0
- package/dist/services/provider-validator.d.ts.map +1 -0
- package/dist/services/provider-validator.js +135 -0
- package/dist/services/provider-validator.js.map +1 -0
- package/dist/services/session-registration.service.d.ts +80 -0
- package/dist/services/session-registration.service.d.ts.map +1 -0
- package/dist/services/session-registration.service.js +172 -0
- package/dist/services/session-registration.service.js.map +1 -0
- package/dist/services/tool-context-builder.d.ts +57 -0
- package/dist/services/tool-context-builder.d.ts.map +1 -0
- package/dist/services/tool-context-builder.js +125 -0
- package/dist/services/tool-context-builder.js.map +1 -0
- package/dist/services/tool-protection.service.d.ts +87 -10
- package/dist/services/tool-protection.service.d.ts.map +1 -1
- package/dist/services/tool-protection.service.js +282 -112
- package/dist/services/tool-protection.service.js.map +1 -1
- package/dist/types/oauth-required-error.d.ts +40 -0
- package/dist/types/oauth-required-error.d.ts.map +1 -0
- package/dist/types/oauth-required-error.js +40 -0
- package/dist/types/oauth-required-error.js.map +1 -0
- package/dist/utils/did-helpers.d.ts +33 -0
- package/dist/utils/did-helpers.d.ts.map +1 -1
- package/dist/utils/did-helpers.js +40 -0
- package/dist/utils/did-helpers.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/docs/API_REFERENCE.md +1362 -0
- package/docs/COMPLIANCE_MATRIX.md +691 -0
- package/docs/STATUSLIST2021_GUIDE.md +696 -0
- package/docs/W3C_VC_DELEGATION_GUIDE.md +710 -0
- package/package.json +24 -50
- package/scripts/audit-compliance.ts +724 -0
- package/src/__tests__/cache/tool-protection-cache.test.ts +640 -0
- package/src/__tests__/config/provider-runtime-config.test.ts +309 -0
- package/src/__tests__/delegation-e2e.test.ts +690 -0
- package/src/__tests__/identity/user-did-manager.test.ts +213 -0
- package/src/__tests__/index.test.ts +56 -0
- package/src/__tests__/integration/full-flow.test.ts +776 -0
- package/src/__tests__/integration.test.ts +281 -0
- package/src/__tests__/providers/base.test.ts +173 -0
- package/src/__tests__/providers/memory.test.ts +319 -0
- package/src/__tests__/regression/phase2-regression.test.ts +427 -0
- package/src/__tests__/runtime/audit-logger.test.ts +154 -0
- package/src/__tests__/runtime/base-extensions.test.ts +593 -0
- package/src/__tests__/runtime/base.test.ts +869 -0
- package/src/__tests__/runtime/delegation-flow.test.ts +164 -0
- package/src/__tests__/runtime/proof-client-did.test.ts +375 -0
- package/src/__tests__/runtime/route-interception.test.ts +686 -0
- package/src/__tests__/runtime/tool-protection-enforcement.test.ts +908 -0
- package/src/__tests__/services/agentshield-integration.test.ts +784 -0
- package/src/__tests__/services/provider-resolver-edge-cases.test.ts +487 -0
- package/src/__tests__/services/tool-protection-oauth-provider.test.ts +480 -0
- package/src/__tests__/services/tool-protection.service.test.ts +1366 -0
- package/src/__tests__/utils/mock-providers.ts +340 -0
- package/src/cache/oauth-config-cache.d.ts +69 -0
- package/src/cache/oauth-config-cache.d.ts.map +1 -0
- package/src/cache/oauth-config-cache.js +71 -0
- package/src/cache/oauth-config-cache.js.map +1 -0
- package/src/cache/oauth-config-cache.ts +123 -0
- package/src/cache/tool-protection-cache.ts +171 -0
- package/src/compliance/EXAMPLE.md +412 -0
- package/src/compliance/__tests__/schema-verifier.test.ts +797 -0
- package/src/compliance/index.ts +8 -0
- package/src/compliance/schema-registry.ts +460 -0
- package/src/compliance/schema-verifier.ts +708 -0
- package/src/config/__tests__/remote-config.spec.ts +268 -0
- package/src/config/remote-config.ts +174 -0
- package/src/config.ts +309 -0
- package/src/delegation/__tests__/audience-validator.test.ts +112 -0
- package/src/delegation/__tests__/bitstring.test.ts +346 -0
- package/src/delegation/__tests__/cascading-revocation.test.ts +628 -0
- package/src/delegation/__tests__/delegation-graph.test.ts +584 -0
- package/src/delegation/__tests__/utils.test.ts +152 -0
- package/src/delegation/__tests__/vc-issuer.test.ts +442 -0
- package/src/delegation/__tests__/vc-verifier.test.ts +922 -0
- package/src/delegation/audience-validator.ts +52 -0
- package/src/delegation/bitstring.ts +278 -0
- package/src/delegation/cascading-revocation.ts +370 -0
- package/src/delegation/delegation-graph.ts +299 -0
- package/src/delegation/index.ts +14 -0
- package/src/delegation/statuslist-manager.ts +353 -0
- package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +366 -0
- package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +228 -0
- package/src/delegation/storage/index.ts +9 -0
- package/src/delegation/storage/memory-graph-storage.ts +178 -0
- package/src/delegation/storage/memory-statuslist-storage.ts +77 -0
- package/src/delegation/utils.ts +42 -0
- package/src/delegation/vc-issuer.ts +232 -0
- package/src/delegation/vc-verifier.ts +568 -0
- package/src/identity/idp-token-resolver.ts +147 -0
- package/src/identity/idp-token-storage.interface.ts +59 -0
- package/src/identity/user-did-manager.ts +370 -0
- package/src/index.ts +271 -0
- package/src/providers/base.d.ts +91 -0
- package/src/providers/base.d.ts.map +1 -0
- package/src/providers/base.js +38 -0
- package/src/providers/base.js.map +1 -0
- package/src/providers/base.ts +96 -0
- package/src/providers/memory.ts +142 -0
- package/src/runtime/audit-logger.ts +39 -0
- package/src/runtime/base.ts +1329 -0
- package/src/services/__tests__/access-control.integration.test.ts +443 -0
- package/src/services/__tests__/access-control.proof-response-validation.test.ts +578 -0
- package/src/services/__tests__/access-control.service.test.ts +970 -0
- package/src/services/__tests__/batch-delegation.service.test.ts +351 -0
- package/src/services/__tests__/crypto.service.test.ts +531 -0
- package/src/services/__tests__/oauth-provider-registry.test.ts +142 -0
- package/src/services/__tests__/proof-verifier.integration.test.ts +485 -0
- package/src/services/__tests__/proof-verifier.test.ts +489 -0
- package/src/services/__tests__/provider-resolution.integration.test.ts +198 -0
- package/src/services/__tests__/provider-resolver.test.ts +217 -0
- package/src/services/__tests__/storage.service.test.ts +358 -0
- package/src/services/access-control.service.ts +990 -0
- package/src/services/authorization/authorization-registry.ts +66 -0
- package/src/services/authorization/types.ts +71 -0
- package/src/services/batch-delegation.service.ts +137 -0
- package/src/services/crypto.service.ts +302 -0
- package/src/services/errors.ts +76 -0
- package/src/services/index.ts +18 -0
- package/src/services/oauth-config.service.d.ts +53 -0
- package/src/services/oauth-config.service.d.ts.map +1 -0
- package/src/services/oauth-config.service.js +113 -0
- package/src/services/oauth-config.service.js.map +1 -0
- package/src/services/oauth-config.service.ts +166 -0
- package/src/services/oauth-provider-registry.d.ts +57 -0
- package/src/services/oauth-provider-registry.d.ts.map +1 -0
- package/src/services/oauth-provider-registry.js +73 -0
- package/src/services/oauth-provider-registry.js.map +1 -0
- package/src/services/oauth-provider-registry.ts +123 -0
- package/src/services/oauth-service.ts +510 -0
- package/src/services/oauth-token-retrieval.service.ts +245 -0
- package/src/services/proof-verifier.ts +478 -0
- package/src/services/provider-resolver.d.ts +48 -0
- package/src/services/provider-resolver.d.ts.map +1 -0
- package/src/services/provider-resolver.js +106 -0
- package/src/services/provider-resolver.js.map +1 -0
- package/src/services/provider-resolver.ts +144 -0
- package/src/services/provider-validator.ts +170 -0
- package/src/services/session-registration.service.ts +251 -0
- package/src/services/storage.service.ts +566 -0
- package/src/services/tool-context-builder.ts +172 -0
- package/src/services/tool-protection.service.ts +958 -0
- package/src/types/oauth-required-error.ts +63 -0
- package/src/types/tool-protection.ts +155 -0
- package/src/utils/__tests__/did-helpers.test.ts +101 -0
- package/src/utils/base64.ts +148 -0
- package/src/utils/cors.ts +83 -0
- package/src/utils/did-helpers.ts +150 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/storage-keys.ts +278 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +56 -0
package/OPUS-plan.md
ADDED
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
# Phase 4 Master Plan: User DID & Identity Linking for MCP-I
|
|
2
|
+
|
|
3
|
+
**Document Version:** 2.0 (Polished)
|
|
4
|
+
**Date:** November 2024
|
|
5
|
+
**Status:** Ready for Implementation
|
|
6
|
+
**Impact:** Game-Changing Identity Foundation
|
|
7
|
+
|
|
8
|
+
## Executive Summary
|
|
9
|
+
|
|
10
|
+
This master plan addresses the critical gap in the MCP-I implementation: persistent user identity. Currently, User DIDs are ephemeral, OAuth integration is disconnected, and delegation creation doesn't follow the MCP-I specification. This plan provides a comprehensive solution that will establish persistent user identity through OAuth linking while maintaining full MCP-I spec compliance.
|
|
11
|
+
|
|
12
|
+
**Key Innovation:** By linking OAuth identities to persistent User DIDs, we enable true session continuity while preserving the decentralized, cryptographically verifiable nature of the MCP-I identity model.
|
|
13
|
+
|
|
14
|
+
## Critical Architecture Insights
|
|
15
|
+
|
|
16
|
+
### The Three-DID Model (Clarified)
|
|
17
|
+
|
|
18
|
+
Based on comprehensive analysis, the MCP-I architecture requires tracking three distinct DIDs:
|
|
19
|
+
|
|
20
|
+
1. **User DID** (`issuerDid`): The human who grants permissions
|
|
21
|
+
- Currently ephemeral `did:key:z6MkUser...`
|
|
22
|
+
- Phase 4 makes persistent via OAuth linking
|
|
23
|
+
- Used as `issuerDid` in delegations
|
|
24
|
+
|
|
25
|
+
2. **Agent DID** (`subjectDid`): The AI/software receiving permissions
|
|
26
|
+
- Examples: `did:key:z6MkClaude...` (Claude Desktop)
|
|
27
|
+
- Used as `subjectDid` in delegations
|
|
28
|
+
- Captured during MCP-I handshake
|
|
29
|
+
|
|
30
|
+
3. **Server DID** (`serverDid`): The MCP-I server/bouncer
|
|
31
|
+
- Example: `did:web:service-x-bouncer`
|
|
32
|
+
- Provides services and validates delegations
|
|
33
|
+
- Can also act as an agent when calling upstream services
|
|
34
|
+
|
|
35
|
+
### OAuth Integration Architecture
|
|
36
|
+
|
|
37
|
+
The AgentShield dashboard already provides OAuth provider configuration:
|
|
38
|
+
- Database: `bouncer_configs` table with OAuth fields
|
|
39
|
+
- UI: `/dashboard/bouncer/config/[projectId]/page.tsx`
|
|
40
|
+
- Current Limitation: Project-level OAuth (not tool-specific)
|
|
41
|
+
|
|
42
|
+
### Cross-Agent Delegation Validation
|
|
43
|
+
|
|
44
|
+
The bouncer architecture supports validating delegations from ANY agent:
|
|
45
|
+
- Local agents (Claude Desktop)
|
|
46
|
+
- External SaaS agents (`did:web:agent:saavvy-shopping-mcp`)
|
|
47
|
+
- Other bouncers acting as agents
|
|
48
|
+
- Validation via centralized AgentShield database
|
|
49
|
+
|
|
50
|
+
## Implementation Plan (Refined)
|
|
51
|
+
|
|
52
|
+
### Part A: Fix Core Delegation Flow (Critical - 2 days)
|
|
53
|
+
|
|
54
|
+
**Problem:** API schema mismatch causing delegation creation failures.
|
|
55
|
+
|
|
56
|
+
**Solution:**
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
// Before (BROKEN):
|
|
60
|
+
const delegationRequest = {
|
|
61
|
+
agent_did: request.agent_did,
|
|
62
|
+
scopes: request.scopes,
|
|
63
|
+
expires_in_days: expiresInDays,
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// After (FIXED):
|
|
67
|
+
const userDid = await this.getUserDidForSession(request.session_id);
|
|
68
|
+
const delegationRecord: DelegationRecord = {
|
|
69
|
+
id: generateDelegationId(),
|
|
70
|
+
issuerDid: userDid, // User who grants
|
|
71
|
+
subjectDid: request.agent_did, // Agent who receives
|
|
72
|
+
vcId: generateVcId(),
|
|
73
|
+
constraints: {
|
|
74
|
+
scopes: request.scopes,
|
|
75
|
+
notAfter: calculateExpiry(expiresInDays),
|
|
76
|
+
},
|
|
77
|
+
signature: await this.signDelegation(...),
|
|
78
|
+
status: 'active',
|
|
79
|
+
createdAt: Date.now(),
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const delegationRequest = {
|
|
83
|
+
delegation: delegationRecord // Full record as expected by API
|
|
84
|
+
};
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Part B: OAuth Identity Linking (Priority - 3 days)
|
|
88
|
+
|
|
89
|
+
**Innovation:** Link OAuth identities to persistent User DIDs.
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
// OAuth callback handler enhancement
|
|
93
|
+
async handleOAuthCallback(request: Request): Promise<Response> {
|
|
94
|
+
const { provider, userInfo } = await this.validateOAuthCallback(request);
|
|
95
|
+
|
|
96
|
+
// Create persistent User DID linked to OAuth identity
|
|
97
|
+
const userDid = await this.linkOAuthToUserDid(provider, userInfo.sub);
|
|
98
|
+
|
|
99
|
+
// Store mapping for future retrieval
|
|
100
|
+
await this.identityStorage.set(
|
|
101
|
+
`oauth:${provider}:${userInfo.sub}`,
|
|
102
|
+
{
|
|
103
|
+
userDid,
|
|
104
|
+
email: userInfo.email,
|
|
105
|
+
linkedAt: new Date().toISOString(),
|
|
106
|
+
},
|
|
107
|
+
{ expirationTtl: 90 * 24 * 60 * 60 } // 90 days
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
return new Response(null, {
|
|
111
|
+
status: 302,
|
|
112
|
+
headers: {
|
|
113
|
+
'Location': '/consent',
|
|
114
|
+
'Set-Cookie': `user_did=${userDid}; HttpOnly; Secure; SameSite=Strict`
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Part C: Multi-Tenant Storage Fix (1 day)
|
|
121
|
+
|
|
122
|
+
**Problem:** User delegations overwrite each other.
|
|
123
|
+
|
|
124
|
+
**Solution:** User+Agent scoped storage keys.
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
// Storage key structure
|
|
128
|
+
const keys = {
|
|
129
|
+
primary: `delegation:user:${userDid}:agent:${agentDid}`,
|
|
130
|
+
session: `delegation:session:${sessionId}`,
|
|
131
|
+
agent: `delegation:agent:${agentDid}:users` // List of users
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Part D: Identity Mode Configuration (2 days)
|
|
136
|
+
|
|
137
|
+
**Innovation:** Support different deployment scenarios.
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
export enum IdentityMode {
|
|
141
|
+
EPHEMERAL = 'ephemeral', // Dev/test: New DID per session
|
|
142
|
+
PERSISTENT = 'persistent', // Production: OAuth required
|
|
143
|
+
HYBRID = 'hybrid' // Flexible: OAuth optional
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Mode-based behavior
|
|
147
|
+
switch (config.identityMode) {
|
|
148
|
+
case IdentityMode.EPHEMERAL:
|
|
149
|
+
return generateEphemeralDid();
|
|
150
|
+
case IdentityMode.PERSISTENT:
|
|
151
|
+
if (!oauthIdentity) throw new Error('OAuth required');
|
|
152
|
+
return getOrCreatePersistentDid(oauthIdentity);
|
|
153
|
+
case IdentityMode.HYBRID:
|
|
154
|
+
return oauthIdentity
|
|
155
|
+
? getOrCreatePersistentDid(oauthIdentity)
|
|
156
|
+
: generateEphemeralDid();
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Part E: Security & Privacy (2 days)
|
|
161
|
+
|
|
162
|
+
**GDPR Compliance & Security:**
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
class PrivacyService {
|
|
166
|
+
async handleRequest(request: PrivacyRequest) {
|
|
167
|
+
switch (request.type) {
|
|
168
|
+
case 'export':
|
|
169
|
+
return this.exportUserData(request.userDid);
|
|
170
|
+
case 'delete':
|
|
171
|
+
return this.deleteAllUserData(request.userDid);
|
|
172
|
+
case 'opt-out':
|
|
173
|
+
return this.switchToEphemeral(request.userDid);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Part F: Enhanced Handshake (1 day)
|
|
180
|
+
|
|
181
|
+
**Proper DID Exchange:**
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
async handleHandshake(request: HandshakeRequest) {
|
|
185
|
+
const identity = await this.getIdentity();
|
|
186
|
+
const userDid = await this.userDidManager.getOrCreateUserDid(sessionId);
|
|
187
|
+
|
|
188
|
+
const session = {
|
|
189
|
+
id: sessionId,
|
|
190
|
+
userDid, // Human user DID
|
|
191
|
+
agentDid: request.agentDid, // AI agent DID
|
|
192
|
+
serverDid: identity.did, // Server/bouncer DID
|
|
193
|
+
createdAt: Date.now(),
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
return {
|
|
197
|
+
sessionId,
|
|
198
|
+
serverDid: identity.did,
|
|
199
|
+
userDid, // Include for transparency
|
|
200
|
+
capabilities: ['identity', 'proof', 'delegation'],
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Architecture Validation
|
|
206
|
+
|
|
207
|
+
### Scenario 1: Claude Desktop → Service X
|
|
208
|
+
```
|
|
209
|
+
1. Claude Desktop (agentDid) → Handshake → service-x-bouncer (serverDid)
|
|
210
|
+
2. Tool call requires delegation
|
|
211
|
+
3. OAuth flow → User authenticates with GitHub
|
|
212
|
+
4. User DID created/retrieved: did:key:z6MkUserPersistent
|
|
213
|
+
5. Delegation: User (issuerDid) → Claude (subjectDid)
|
|
214
|
+
6. Future sessions: Same User DID via GitHub identity
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### Scenario 2: SaaS Agent → Service X
|
|
218
|
+
```
|
|
219
|
+
1. saavvy-shopping-mcp (agentDid) → Handshake → service-x-bouncer
|
|
220
|
+
2. Delegation validation via AgentShield API
|
|
221
|
+
3. Cross-agent delegation works seamlessly
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Scenario 3: Chained Delegations (Future)
|
|
225
|
+
```
|
|
226
|
+
1. User → Shopping Assistant (local MCP)
|
|
227
|
+
2. Shopping Assistant → Service X (delegation chain)
|
|
228
|
+
3. Memory graph storage tracks relationships
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Success Metrics
|
|
232
|
+
|
|
233
|
+
### Technical Metrics
|
|
234
|
+
- ✅ User DIDs persist across sessions via OAuth
|
|
235
|
+
- ✅ Delegations include proper `issuerDid` and `subjectDid`
|
|
236
|
+
- ✅ API schema matches AgentShield expectations
|
|
237
|
+
- ✅ Multi-tenant conflicts resolved
|
|
238
|
+
- ✅ <100ms overhead for DID operations
|
|
239
|
+
- ✅ 95% test coverage for new code
|
|
240
|
+
|
|
241
|
+
### Business Impact
|
|
242
|
+
- 🎯 Users authenticate once, delegations persist
|
|
243
|
+
- 🎯 True "Know Your User" capability
|
|
244
|
+
- 🎯 Foundation for reputation systems
|
|
245
|
+
- 🎯 GDPR compliant with privacy controls
|
|
246
|
+
- 🎯 Enterprise-ready identity management
|
|
247
|
+
|
|
248
|
+
## Risk Mitigation
|
|
249
|
+
|
|
250
|
+
### Risk: Performance Impact
|
|
251
|
+
- **Mitigation:** Aggressive caching, async operations
|
|
252
|
+
- **Monitoring:** Track p95 latency for DID operations
|
|
253
|
+
|
|
254
|
+
### Risk: Privacy Concerns
|
|
255
|
+
- **Mitigation:** Clear consent, data deletion API, identity modes
|
|
256
|
+
- **Compliance:** GDPR audit before launch
|
|
257
|
+
|
|
258
|
+
### Risk: OAuth Provider Downtime
|
|
259
|
+
- **Mitigation:** Multi-provider support, graceful fallback
|
|
260
|
+
- **Monitoring:** Provider health checks
|
|
261
|
+
|
|
262
|
+
## Timeline
|
|
263
|
+
|
|
264
|
+
### Week 1: Foundation (5 days)
|
|
265
|
+
- Days 1-2: Part A - Fix delegation API
|
|
266
|
+
- Days 3-5: Part B - OAuth integration (partial)
|
|
267
|
+
|
|
268
|
+
### Week 2: Core Identity (5 days)
|
|
269
|
+
- Days 6-7: Part B - Complete OAuth linking
|
|
270
|
+
- Day 8: Part C - Storage fixes
|
|
271
|
+
- Days 9-10: Part D - Identity modes
|
|
272
|
+
|
|
273
|
+
### Week 3: Enhancement (4 days)
|
|
274
|
+
- Days 11-12: Part E - Security/privacy
|
|
275
|
+
- Day 13: Part F - Enhanced handshake
|
|
276
|
+
- Day 14: Integration testing
|
|
277
|
+
|
|
278
|
+
**Total: 14 working days**
|
|
279
|
+
|
|
280
|
+
## Testing Strategy
|
|
281
|
+
|
|
282
|
+
### Unit Tests
|
|
283
|
+
```typescript
|
|
284
|
+
describe('OAuth Identity Linking', () => {
|
|
285
|
+
it('creates persistent User DID for new OAuth identity');
|
|
286
|
+
it('retrieves same User DID for returning OAuth user');
|
|
287
|
+
it('handles multiple OAuth providers per user');
|
|
288
|
+
it('respects identity mode configuration');
|
|
289
|
+
});
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Integration Tests
|
|
293
|
+
- Full OAuth → Consent → Delegation flow
|
|
294
|
+
- Multi-user, multi-agent scenarios
|
|
295
|
+
- Cross-session persistence validation
|
|
296
|
+
|
|
297
|
+
### E2E Tests
|
|
298
|
+
- User journey: Login → Approve → Return next day
|
|
299
|
+
- Privacy: Request data export/deletion
|
|
300
|
+
- Security: Token expiration, revocation
|
|
301
|
+
|
|
302
|
+
## Why This Plan Is Game-Changing
|
|
303
|
+
|
|
304
|
+
### 1. **True Persistent Identity**
|
|
305
|
+
Unlike current ephemeral DIDs, users maintain identity across sessions, enabling:
|
|
306
|
+
- Reputation building
|
|
307
|
+
- Audit trails
|
|
308
|
+
- Compliance tracking
|
|
309
|
+
|
|
310
|
+
### 2. **OAuth Bridge to Decentralized Identity**
|
|
311
|
+
Leverages familiar OAuth while establishing decentralized DIDs:
|
|
312
|
+
- Easy user onboarding
|
|
313
|
+
- Enterprise integration ready
|
|
314
|
+
- Progressive decentralization path
|
|
315
|
+
|
|
316
|
+
### 3. **Multi-Agent Ecosystem Ready**
|
|
317
|
+
Supports complex delegation scenarios:
|
|
318
|
+
- Agent-to-agent delegations
|
|
319
|
+
- Service composition
|
|
320
|
+
- Delegation chains
|
|
321
|
+
|
|
322
|
+
### 4. **Privacy-First Architecture**
|
|
323
|
+
Users control their identity:
|
|
324
|
+
- Choose persistence level
|
|
325
|
+
- Delete data anytime
|
|
326
|
+
- Switch modes dynamically
|
|
327
|
+
|
|
328
|
+
### 5. **MCP-I Spec Compliance**
|
|
329
|
+
Full alignment with spec while solving real-world needs:
|
|
330
|
+
- Proper issuer/subject model
|
|
331
|
+
- W3C VC compatibility
|
|
332
|
+
- CRISP constraints support
|
|
333
|
+
|
|
334
|
+
## Comparison with V3 Plan
|
|
335
|
+
|
|
336
|
+
### Dependencies Identified
|
|
337
|
+
1. V3 Scaffolder Refactor MUST complete first
|
|
338
|
+
2. Consent service creation can merge with Part A fixes
|
|
339
|
+
3. Security work can parallelize
|
|
340
|
+
|
|
341
|
+
### Unified Approach
|
|
342
|
+
- Phase 4 provides detailed implementation for V3's Phase 1
|
|
343
|
+
- Total timeline: 3 weeks with parallel work
|
|
344
|
+
- Clear execution order established
|
|
345
|
+
|
|
346
|
+
## Conclusion
|
|
347
|
+
|
|
348
|
+
This Phase 4 plan transforms the MCP-I implementation from a proof-of-concept to a production-ready identity system. By establishing persistent User DIDs through OAuth linking, we create a foundation for trust, reputation, and compliance in the AI agent ecosystem.
|
|
349
|
+
|
|
350
|
+
The plan addresses all critical issues identified during review, provides clear implementation steps, and maintains full MCP-I specification compliance while solving real-world identity persistence needs.
|
|
351
|
+
|
|
352
|
+
**This is not just an implementation plan—it's the blueprint for the future of verifiable AI agent identity.**
|