2
0

2 Commits

Author SHA1 Message Date
f059b6f458 fix(mcp): use NDJSON instead of LSP framing for MCP stdio
All checks were successful
Release / build (amd64, windows) (push) Successful in 43s
Release / build (arm64, linux) (push) Successful in 1m0s
Release / build (amd64, linux) (push) Successful in 1m10s
Release / build (amd64, darwin) (push) Successful in 1m19s
Release / build (arm64, darwin) (push) Successful in 1m46s
Release / release (push) Successful in 21s
Replace Content-Length framing with newline-delimited JSON (NDJSON) for MCP stdio transport. MCP clients like Claude Code expect one JSON object per line, not LSP-style Content-Length headers. The previous framing caused clients to reject responses.
2026-04-15 02:20:20 -04:00
4b350fe967 fix(mcp): use Content-Length framing for all responses
All checks were successful
Release / build (amd64, linux) (push) Successful in 38s
Release / build (amd64, windows) (push) Successful in 38s
Release / build (arm64, darwin) (push) Successful in 44s
Release / build (amd64, darwin) (push) Successful in 1m4s
Release / build (arm64, linux) (push) Successful in 1m14s
Release / release (push) Successful in 21s
Adds writeFramed helper to send responses with HTTP-style Content-Length headers instead of raw JSON lines. Ensures compatibility with Claude Code which expects framed messages. Updates both main loop and writeResponse to use consistent framing.
2026-04-05 02:48:24 -04:00

13
main.go
View File

@@ -110,8 +110,8 @@ func main() {
debugLog("Response: %s", string(response)) debugLog("Response: %s", string(response))
// Write response to stdout // Write response to stdout with Content-Length framing
fmt.Println(string(response)) writeFramed(response)
} }
} }
@@ -211,7 +211,14 @@ func readMessage(reader *bufio.Reader) ([]byte, error) {
func writeResponse(resp interface{}) { func writeResponse(resp interface{}) {
data, _ := json.Marshal(resp) data, _ := json.Marshal(resp)
fmt.Println(string(data)) writeFramed(data)
}
func writeFramed(data []byte) {
// MCP stdio transport uses newline-delimited JSON (NDJSON), not LSP-style
// Content-Length framing. Claude Code and other MCP clients reject
// Content-Length headers on stdio, so we emit one JSON object per line.
fmt.Fprintf(os.Stdout, "%s\n", data)
} }
func debugLog(format string, args ...interface{}) { func debugLog(format string, args ...interface{}) {