diff --git a/src/resources/extensions/mcp-client/index.ts b/src/resources/extensions/mcp-client/index.ts index bdb60c2ed..904fbbcb4 100644 --- a/src/resources/extensions/mcp-client/index.ts +++ b/src/resources/extensions/mcp-client/index.ts @@ -114,6 +114,22 @@ function getServerConfig(name: string): McpServerConfig | undefined { return readConfigs().find((s) => s.name === name); } +/** Resolve ${VAR} references in env values against process.env. */ +function resolveEnv(env: Record): Record { + const resolved: Record = {}; + for (const [key, value] of Object.entries(env)) { + if (typeof value === "string") { + resolved[key] = value.replace( + /\$\{([^}]+)\}/g, + (_match, varName) => process.env[varName] ?? "", + ); + } else { + resolved[key] = value; + } + } + return resolved; +} + async function getOrConnect(name: string, signal?: AbortSignal): Promise { const existing = connections.get(name); if (existing) return existing.client; @@ -128,7 +144,7 @@ async function getOrConnect(name: string, signal?: AbortSignal): Promise transport = new StdioClientTransport({ command: config.command, args: config.args, - env: config.env ? { ...process.env, ...config.env } as Record : undefined, + env: config.env ? { ...process.env, ...resolveEnv(config.env) } as Record : undefined, cwd: config.cwd, stderr: "pipe", });