From 2c7962f5d3a15a1ee65cfa723e0229b4837cf394 Mon Sep 17 00:00:00 2001 From: Syngnat Date: Wed, 10 Jun 2026 12:13:45 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(ai):=20=E5=AE=8C=E5=96=84=20MC?= =?UTF-8?q?P=20=E6=96=B0=E5=A2=9E=E5=8F=82=E6=95=B0=E6=8C=87=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 npx MCP 服务模板和启动预览 - 补充 command/args 表单说明与内置指引快照 - 覆盖 MCP 参数草稿、指引和 AI 配置检查测试 --- .../src/components/ai/AIMCPServerCard.test.tsx | 7 +++++-- .../src/components/ai/AIMCPServerFormPanel.tsx | 8 ++++---- .../components/ai/AISettingsMCPSection.test.tsx | 15 +++++++++------ .../src/components/ai/AISettingsMCPSection.tsx | 2 +- ...aiLocalToolExecutor.aiConfigInspection.test.ts | 4 +++- frontend/src/utils/aiBuiltinInspectionToolInfo.ts | 4 ++-- frontend/src/utils/mcpCommandDraft.test.ts | 11 +++++++++++ frontend/src/utils/mcpServerGuidance.test.ts | 2 ++ frontend/src/utils/mcpServerGuidance.ts | 12 +++++++----- frontend/src/utils/mcpServerTemplates.ts | 13 +++++++++++++ 10 files changed, 57 insertions(+), 21 deletions(-) diff --git a/frontend/src/components/ai/AIMCPServerCard.test.tsx b/frontend/src/components/ai/AIMCPServerCard.test.tsx index ab1d104..45bec5b 100644 --- a/frontend/src/components/ai/AIMCPServerCard.test.tsx +++ b/frontend/src/components/ai/AIMCPServerCard.test.tsx @@ -40,7 +40,7 @@ describe('AIMCPServerCard', () => { expect(markup).toContain('保存后显示给你和 AI 看的名字'); expect(markup).toContain('示例值:'); expect(markup).toContain('Filesystem / Browser / GitHub'); - expect(markup).toContain('server.js / --stdio / -m / your_mcp_server'); + expect(markup).toContain('-y / @modelcontextprotocol/server-filesystem / --stdio / server.js'); expect(markup).toContain('当前固定为 stdio'); expect(markup).toContain('单次工具发现或调用最多等待多久'); expect(markup).toContain('必填'); @@ -50,10 +50,12 @@ describe('AIMCPServerCard', () => { expect(markup).toContain('自动拆分到下方字段'); expect(markup).toContain('$env:KEY=VALUE;'); expect(markup).toContain('set KEY=VALUE &&'); + expect(markup).toContain('npx -y package --stdio'); + expect(markup).toContain('-y、@modelcontextprotocol/server-filesystem、--stdio、server.js'); expect(markup).toContain('每个参数单独录入一个标签'); expect(markup).toContain('每行一个 KEY=VALUE'); expect(markup).toContain('没有等号或 key 含空格的行不会保存'); - expect(markup).toContain('不要把 node server.js --stdio 整串都塞进这里'); + expect(markup).toContain('不要把 npx -y package --stdio 或 node server.js --stdio 整串都塞进这里'); expect(markup).toContain('不要写 export'); expect(markup).toContain('当前阶段只支持 stdio'); expect(markup).toContain('实际启动命令预览'); @@ -67,6 +69,7 @@ describe('AIMCPServerCard', () => { expect(markup).toContain('默认 20 秒'); expect(markup).toContain('稍宽松 45 秒'); expect(markup).toContain('慢启动 60 秒'); + expect(markup).toContain('npx -y @modelcontextprotocol/server-filesystem --stdio'); expect(markup).toContain('node server.js --stdio'); expect(markup).toContain('$env:GITHUB_TOKEN=...; uvx mcp-server-github --stdio'); }); diff --git a/frontend/src/components/ai/AIMCPServerFormPanel.tsx b/frontend/src/components/ai/AIMCPServerFormPanel.tsx index b47cfec..147c877 100644 --- a/frontend/src/components/ai/AIMCPServerFormPanel.tsx +++ b/frontend/src/components/ai/AIMCPServerFormPanel.tsx @@ -73,11 +73,11 @@ const AIMCPServerFormPanel: React.FC = ({ options={[{ label: 'stdio', value: 'stdio' }]} /> - + onChange({ command: event.target.value })} - placeholder="启动命令,例如:node / uvx / python" + placeholder="启动命令,例如:npx / node / uvx / python" style={{ borderRadius: 10, background: inputBg, border: `1px solid ${cardBorder}` }} /> @@ -120,12 +120,12 @@ const AIMCPServerFormPanel: React.FC = ({ - +