Merge pull request #10933 from Kilo-Org/fix/mcp-json-strict-output

fix(cli): write strict JSON for MCP config
This commit is contained in:
Catriel Müller
2026-06-05 10:25:35 -03:00
committed by GitHub
4 changed files with 52 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
---
"@kilocode/cli": patch
---
Write strict JSON when adding MCP servers to `kilo.json` configuration files.
+2 -1
View File
@@ -17,6 +17,7 @@ import { InstallationVersion } from "@opencode-ai/core/installation/version"
import path from "path"
import { Global } from "@opencode-ai/core/global"
import { modify, applyEdits } from "jsonc-parser"
import { KilocodeMcpConfig } from "@/kilocode/cli/cmd/mcp" // kilocode_change
import { Filesystem } from "@/util/filesystem"
import { Bus } from "../../bus"
import { Effect } from "effect"
@@ -438,7 +439,7 @@ async function addMcpToConfig(name: string, mcpConfig: ConfigMCP.Info, configPat
const edits = modify(text, ["mcp", name], mcpConfig, {
formattingOptions: { tabSize: 2, insertSpaces: true },
})
const result = applyEdits(text, edits)
const result = KilocodeMcpConfig.format(configPath, applyEdits(text, edits)) // kilocode_change
await Filesystem.write(configPath, result)
@@ -0,0 +1,8 @@
import { ConfigParse } from "@/config/parse"
export namespace KilocodeMcpConfig {
export function format(file: string, input: string) {
if (file.endsWith(".jsonc")) return input
return JSON.stringify(ConfigParse.jsonc(input, file), null, 2)
}
}
@@ -0,0 +1,37 @@
import { describe, expect, test } from "bun:test"
import { KilocodeMcpConfig } from "@/kilocode/cli/cmd/mcp"
const added = `{
"permission": {
"bash": "allow"
},
"mcp": {
"linear": {
"type": "remote",
"url": "https://mcp.linear.app/mcp",
"oauth": {}
}
},
}`
describe("KilocodeMcpConfig.format", () => {
test("writes strict JSON for kilo.json", () => {
const output = KilocodeMcpConfig.format("/tmp/kilo.json", added)
expect(JSON.parse(output)).toEqual({
permission: { bash: "allow" },
mcp: {
linear: {
type: "remote",
url: "https://mcp.linear.app/mcp",
oauth: {},
},
},
})
expect(output).not.toEndWith(",\n}")
})
test("preserves JSONC formatting for kilo.jsonc", () => {
expect(KilocodeMcpConfig.format("/tmp/kilo.jsonc", added)).toBe(added)
})
})