Skip to content

Commit 129e635

Browse files
committed
test: mcp discover — env-var interpolation in external configs
Cover the readJsonSafe env-var resolution path added in f030bf8. Users with ${VAR} or ${VAR:-default} in .vscode/mcp.json now get their MCP servers resolved correctly; these tests guard against regressions in that interpolation path. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f030bf8 commit 129e635

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

packages/opencode/test/mcp/discover.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,4 +363,44 @@ describe("discoverExternalMcp", () => {
363363
expect(result["project-server"]).toBeDefined()
364364
expect((result["project-server"] as any).enabled).toBe(false)
365365
})
366+
367+
// altimate_change start — env-var interpolation in external MCP configs (commit f030bf8)
368+
test("resolves ${VAR} env-var references in external config values", async () => {
369+
const envKey = "__TEST_MCP_DISCOVER_CMD_" + Date.now()
370+
process.env[envKey] = "my-custom-node"
371+
try {
372+
await mkdir(path.join(tempDir, ".vscode"), { recursive: true })
373+
await writeFile(
374+
path.join(tempDir, ".vscode/mcp.json"),
375+
`{"servers": {"env-test": {"command": "\${${envKey}}", "args": ["serve"]}}}`,
376+
)
377+
378+
const { servers: result } = await discoverExternalMcp(tempDir)
379+
expect(result["env-test"]).toBeDefined()
380+
expect(result["env-test"]).toMatchObject({
381+
type: "local",
382+
command: ["my-custom-node", "serve"],
383+
})
384+
} finally {
385+
delete process.env[envKey]
386+
}
387+
})
388+
389+
test("resolves ${VAR:-default} with fallback when env var is unset", async () => {
390+
const envKey = "__TEST_MCP_DISCOVER_UNSET_" + Date.now()
391+
delete process.env[envKey]
392+
await mkdir(path.join(tempDir, ".vscode"), { recursive: true })
393+
await writeFile(
394+
path.join(tempDir, ".vscode/mcp.json"),
395+
`{"servers": {"default-test": {"command": "\${${envKey}:-fallback-cmd}", "args": ["run"]}}}`,
396+
)
397+
398+
const { servers: result } = await discoverExternalMcp(tempDir)
399+
expect(result["default-test"]).toBeDefined()
400+
expect(result["default-test"]).toMatchObject({
401+
type: "local",
402+
command: ["fallback-cmd", "run"],
403+
})
404+
})
405+
// altimate_change end
366406
})

0 commit comments

Comments
 (0)