From 1acacfab881e81c986d7b72e3ed5b7a1199cdc0e Mon Sep 17 00:00:00 2001 From: Oven <503612012@qq.com> Date: Fri, 30 May 2025 23:02:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AEMCP=20Server=E6=97=B6?= =?UTF-8?q?=EF=BC=8Cenv=E4=B8=AD=E5=A1=AB=E5=86=99=E7=9A=84${xxx}=E5=80=BC?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BB=8E=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E4=B8=AD=E8=AF=BB=E5=8F=96=20(#135)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/index.ts | 8 ++++++++ src/services/mcpService.ts | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/config/index.ts b/src/config/index.ts index 8bf1adc..7ec1537 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -41,6 +41,14 @@ export const saveSettings = (settings: McpSettings): boolean => { } }; +export const replaceEnvVars = (env: Record): Record => { + const res: Record = {}; + for (const [key, value] of Object.entries(env)) { + res[key] = expandEnvVars(value); + } + return res; +}; + export const expandEnvVars = (value: string): string => { return value.replace(/\$\{([^}]+)\}/g, (_, key) => process.env[key] || ''); }; diff --git a/src/services/mcpService.ts b/src/services/mcpService.ts index 3f83688..ee16662 100644 --- a/src/services/mcpService.ts +++ b/src/services/mcpService.ts @@ -5,7 +5,7 @@ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'; import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; import { ServerInfo, ServerConfig } from '../types/index.js'; -import { loadSettings, saveSettings, expandEnvVars } from '../config/index.js'; +import { loadSettings, saveSettings, expandEnvVars, replaceEnvVars } from '../config/index.js'; import config from '../config/index.js'; import { getGroup } from './sseService.js'; import { getServersInGroup } from './groupService.js'; @@ -95,7 +95,7 @@ export const initializeClientsFromSettings = (isInit: boolean): ServerInfo[] => transport = new SSEClientTransport(new URL(conf.url)); } else if (conf.command && conf.args) { // If type is stdio or if command and args are provided without type - const env: Record = conf.env || {}; + const env: Record = replaceEnvVars(conf.env || {}); env['PATH'] = expandEnvVars(process.env.PATH as string) || ''; // Add UV_DEFAULT_INDEX from settings if available (for Python packages)