micro--go-micro
ba24e723d0
Harness (E2E) / Harnesses (mock LLM) (push) Has been cancelled
govulncheck / govulncheck (push) Has been cancelled
Run Tests / Unit Tests (push) Has been cancelled
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Has been cancelled
Lint / golangci-lint (push) Has been cancelled
Run Tests / Etcd Integration Tests (push) Has been cancelled
Closes #4813. The stdio transport is the path an external MCP host (Claude Desktop) uses, and it emitted broken output: - tool results were `fmt.Sprintf("%v", decodedJSON)` → Go map-syntax (`map[id:1 name:bob]`), not JSON. Now returned as JSON text. - tool-execution failures were returned as JSON-RPC protocol errors; per the MCP spec they must be a result with `isError:true` so the agent can read the failure. Now they are (span/audit still record the error). Both fixes are shared between stdio and websocket via a new `mcpToolResult`/ `mcpToolError` (dedupes the two transports). Added the missing stdio round-trip tests (the package had zero) proving JSON output and the isError contract, using an injected fake client; updated the websocket auth tests that asserted the old protocol-error-on-tool-failure behavior. Also fixes a pre-existing golangci-lint failure on master (unnecessary `string(...)` conversion in grpcreflect.go from #4821) so the mcp package lints clean — another one the required-checks gap let through. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CmdEY7pYmV5zzwCjNJ4ykL