v2.0.2 的 node -e + -- 参数传递在 PowerShell 下 argv 偏移导致 mcpServers 为空。 改为: 将合并脚本写入 %TEMP%/bw-inject-mcp.js 再 node 执行, 绕过所有参数解析陷阱。 新增 inject-mcp.js 独立脚本供手动执行。 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
137 lines
3.6 KiB
JavaScript
137 lines
3.6 KiB
JavaScript
/**
|
|
* Bookworm MCP 注入脚本
|
|
* 将 MCP 服务器配置写入 ~/.claude.json (Claude Code v2.1+ 正确位置)
|
|
* 用法: node inject-mcp.js
|
|
*/
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
const f = path.join(process.env.USERPROFILE, ".claude.json");
|
|
let d = {};
|
|
try {
|
|
d = JSON.parse(fs.readFileSync(f, "utf8"));
|
|
} catch (e) {
|
|
console.log("未找到 .claude.json, 将创建新文件");
|
|
}
|
|
|
|
d.mcpServers = {
|
|
"context7": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@upstash/context7-mcp@2.1.1"],
|
|
type: "stdio"
|
|
},
|
|
"sequential-thinking": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@modelcontextprotocol/server-sequential-thinking@2025.12.18"],
|
|
type: "stdio"
|
|
},
|
|
"playwright": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@playwright/mcp@0.0.68", "--headless"],
|
|
type: "stdio"
|
|
},
|
|
"session-continuity": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "claude-session-continuity-mcp@1.13.0"],
|
|
type: "stdio"
|
|
},
|
|
"notebooklm": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "notebooklm-mcp@latest"],
|
|
type: "stdio",
|
|
env: {
|
|
https_proxy: "http://127.0.0.1:7893",
|
|
http_proxy: "http://127.0.0.1:7893"
|
|
}
|
|
},
|
|
"cloudflare": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "mcp-remote", "https://docs.mcp.cloudflare.com/sse"],
|
|
type: "stdio",
|
|
env: {
|
|
https_proxy: "http://127.0.0.1:7893",
|
|
http_proxy: "http://127.0.0.1:7893"
|
|
}
|
|
},
|
|
"chrome-devtools": {
|
|
command: "npx.cmd",
|
|
args: [
|
|
"--yes", "chrome-devtools-mcp@0.18.1",
|
|
"--executablePath", "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
|
|
"--viewport", "1280x720",
|
|
"--proxyServer", "http://127.0.0.1:7893"
|
|
],
|
|
type: "stdio"
|
|
},
|
|
"github": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@modelcontextprotocol/server-github"],
|
|
type: "stdio",
|
|
env: {
|
|
GITHUB_PERSONAL_ACCESS_TOKEN: process.env.GITHUB_PERSONAL_ACCESS_TOKEN || ""
|
|
}
|
|
},
|
|
"slack": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@modelcontextprotocol/server-slack"],
|
|
type: "stdio",
|
|
env: {
|
|
SLACK_BOT_TOKEN: process.env.SLACK_BOT_TOKEN || "",
|
|
SLACK_TEAM_ID: "T0A4L1JLEER"
|
|
}
|
|
},
|
|
"firecrawl": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "firecrawl-mcp"],
|
|
type: "stdio",
|
|
env: {
|
|
FIRECRAWL_API_KEY: process.env.FIRECRAWL_API_KEY || ""
|
|
}
|
|
},
|
|
"browserbase": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@anthropic-ai/browserbase-mcp"],
|
|
type: "stdio",
|
|
env: {
|
|
BROWSERBASE_API_KEY: process.env.BROWSERBASE_API_KEY || "",
|
|
BROWSERBASE_PROJECT_ID: "d3dbb32f-be2f-4e3a-b9ec-68e27474763c"
|
|
}
|
|
},
|
|
"mcp-image": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "mcp-image"],
|
|
type: "stdio",
|
|
env: {
|
|
GEMINI_API_KEY: process.env.GEMINI_API_KEY || ""
|
|
}
|
|
},
|
|
"google-drive": {
|
|
command: "npx.cmd",
|
|
args: ["--yes", "@piotr-agier/google-drive-mcp"],
|
|
type: "stdio"
|
|
},
|
|
"windows-mcp": {
|
|
command: "uvx",
|
|
args: ["--python", "3.13", "windows-mcp"],
|
|
type: "stdio"
|
|
},
|
|
"atlassian": {
|
|
command: "uvx",
|
|
args: ["mcp-atlassian"],
|
|
type: "stdio",
|
|
env: {
|
|
JIRA_URL: "https://huakoh.atlassian.net",
|
|
JIRA_USERNAME: "huakoh449@gmail.com",
|
|
JIRA_API_TOKEN: process.env.ATLASSIAN_API_TOKEN || "",
|
|
CONFLUENCE_URL: "https://huakoh.atlassian.net/wiki",
|
|
CONFLUENCE_USERNAME: "huakoh449@gmail.com",
|
|
CONFLUENCE_API_TOKEN: process.env.ATLASSIAN_API_TOKEN || ""
|
|
}
|
|
}
|
|
};
|
|
|
|
fs.writeFileSync(f, JSON.stringify(d, null, 2));
|
|
const count = Object.keys(d.mcpServers).length;
|
|
console.log("OK: " + count + " MCP servers written to " + f);
|
|
console.log("请重启 Claude Code 后运行 /mcp 验证");
|