2b95e3a3 by Ean Schuessler

Fix MCP initialize to follow specification - remove tool/resource discovery

- Remove expensive ToolsList and ResourcesList calls during initialization
- Simplify initialize response to only include capabilities declaration
- Tools and resources now discovered via separate list requests per MCP spec
- Improves initialization speed and ensures protocol compliance
1 parent 9b06780f
...@@ -89,22 +89,11 @@ ...@@ -89,22 +89,11 @@
89 def userId = ec.user.userId 89 def userId = ec.user.userId
90 def userAccountId = userId ? userId : null 90 def userAccountId = userId ? userId : null
91 91
92 // Get user-specific tools and resources in SAME transaction context 92 // Build server capabilities - don't fetch actual tools/resources during init
93 def toolsResult = ec.service.sync().name("McpServices.mcp#ToolsList") 93 // Tools and resources will be discovered via separate list requests per MCP spec
94 .parameters([sessionId: visit.visitId])
95 .requireNewTransaction(false) // Use current transaction
96 .disableAuthz() // Disable authz for internal call
97 .call()
98 def resourcesResult = ec.service.sync().name("McpServices.mcp#ResourcesList")
99 .parameters([sessionId: visit.visitId])
100 .requireNewTransaction(false) // Use current transaction
101 .disableAuthz() // Disable authz for internal call
102 .call()
103
104 // Build server capabilities based on what user can access
105 def serverCapabilities = [ 94 def serverCapabilities = [
106 tools: toolsResult?.result?.tools ? [listChanged: true] : [:], 95 tools: [listChanged: true],
107 resources: resourcesResult?.result?.resources ? [subscribe: true, listChanged: true] : [:], 96 resources: [subscribe: true, listChanged: true],
108 logging: [:] 97 logging: [:]
109 ] 98 ]
110 99
...@@ -122,7 +111,7 @@ ...@@ -122,7 +111,7 @@
122 sessionId: visit.visitId 111 sessionId: visit.visitId
123 ] 112 ]
124 113
125 ec.logger.info("MCP Initialize for user ${userId} (session ${sessionId}): ${toolsResult?.result?.tools?.size() ?: 0} tools, ${resourcesResult?.result?.resources?.size() ?: 0} resources") 114 ec.logger.info("MCP Initialize for user ${userId} (session ${sessionId}): capabilities negotiated")
126 ]]></script> 115 ]]></script>
127 </actions> 116 </actions>
128 </service> 117 </service>
......