e071084ebe
govulncheck / govulncheck (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Run Tests / Unit Tests (push) Has been cancelled
Run Tests / Etcd Integration Tests (push) Has been cancelled
Harness (E2E) / Harnesses (mock LLM) (push) Has been cancelled
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Has been cancelled
33 lines
1.3 KiB
Go
33 lines
1.3 KiB
Go
package mcp
|
|
|
|
// MCP tools/call result shaping, shared by the stdio and websocket JSON-RPC
|
|
// transports. Kept in one place so both transports produce spec-shaped results.
|
|
|
|
// mcpToolResult builds a successful MCP tools/call result. The downstream RPC
|
|
// response body (data) is JSON, so it is returned as JSON text — NOT
|
|
// fmt.Sprintf("%v", ...) of a decoded value, which produces Go map-syntax
|
|
// (map[id:1 name:bob]) instead of JSON and is what an external MCP client
|
|
// (e.g. Claude Desktop over stdio) would otherwise receive.
|
|
func mcpToolResult(traceID string, data []byte) map[string]interface{} {
|
|
return map[string]interface{}{
|
|
"content": []interface{}{
|
|
map[string]interface{}{"type": "text", "text": string(data)},
|
|
},
|
|
"trace_id": traceID,
|
|
}
|
|
}
|
|
|
|
// mcpToolError builds an MCP tools/call result for a tool-EXECUTION failure.
|
|
// Per the MCP spec a tool that fails returns a normal result with isError:true
|
|
// (the error as text content), NOT a JSON-RPC protocol error — that way the
|
|
// agent can read the failure instead of seeing a transport-level error.
|
|
func mcpToolError(traceID, msg string) map[string]interface{} {
|
|
return map[string]interface{}{
|
|
"content": []interface{}{
|
|
map[string]interface{}{"type": "text", "text": msg},
|
|
},
|
|
"isError": true,
|
|
"trace_id": traceID,
|
|
}
|
|
}
|