万物皆可连接:如何手绑 MCP 协议把你的 IDE、数据库和本地 API 变成 Claude 的绝对大脑
为何 MCP 对进阶开发者重要
MCP 出现之前,每个 IDE 各自搞一套插件格式。Anthropic 的 Model Context Protocol 标准化了 AI 客户端发现能力的方式:列出工具 → 以 JSON 参数调用工具 → 返回结构化结果。这意味着一个 Postgres 只读服务器 可同时服务 Claude Desktop、Cursor 及其他 MCP 宿主,无需重写集成。
硬核开发者关注 MCP,因为:
- 数据库变成可查询上下文,不必每次聊天都粘贴 schema dump
- 内网 API(计费、功能开关、部署状态)以类型化工具呈现,替代脆弱的复制粘贴
- IDE + Agent 栈共享同一工具链——当你在远程 Mac 上同时运行 Claude Code 替代方案或 OpenClaw 时尤其如此
官方参考:Model Context Protocol 规范与 Anthropic MCP 文档。
MCP 架构 60 秒速览
┌─────────────┐ JSON-RPC ┌──────────────────┐
│ MCP Host │ ◄──────────────► │ MCP Server │
│ (Claude / │ tools/resources │ (你的自定义代码) │
│ Cursor) │ │ → DB / API / CLI │
└─────────────┘ └──────────────────┘
| 角色 | 示例 | 职责 |
|---|---|---|
| 宿主(Host) | Claude Desktop、Cursor、Claude Code | 启动服务器、发送 tools/call、渲染结果 |
| 服务器(Server) | 你的 Node/Python 二进制 | 实现 list_tools、call_tool,可选 resources/read |
| 传输(Transport) | stdio、SSE | 在宿主与服务器之间承载 JSON-RPC 消息 |
深度原则:每个信任边界一个服务器。不要把生产写权限和实验性 Shell 工具放在同一二进制里——拆成独立进程,这样撤销一个配置块时不必动另一个。
传输方式决策矩阵
| 传输 | 延迟 | 适用场景 | 配置文件(典型) |
|---|---|---|---|
| stdio | 最低 | 笔记本本地 DB、单用户 | claude_desktop_config.json、Cursor mcp.json |
| SSE(HTTP) | +1 跳 | NAS、远程 Mac、Docker 边车 | 宿主 URL http://host:port/sse |
| Streamable HTTP(较新宿主) | 与 SSE 相近 | 同 SSE;需核对宿主版本 | 见各宿主文档 |
| 场景 | 推荐传输 |
|---|---|
| SQLite 文件与 Claude Desktop 同机 | stdio |
| 办公室局域网 PostgreSQL | 跳板机 SSE 服务器,或 SSH 包装 stdio |
| 5 个内网 REST 微服务 | 一个网关 MCP 服务器,暴露命名空间工具 |
| 团队共享工具目录 | 在常开主机上部署中央 MCP 服务器(见 远程 Mac 部署) |
模式 1 — 数据库 MCP 服务器
目标:让模型对 PostgreSQL、MySQL 或 SQLite 执行只读 SQL(或预定义查询)。
设计约束:
- 尽量暴露命名工具(
query_sales_summary、list_tables),而非任意原始 SQL - 强制行数上限(如最多 200 行)与语句超时(如 5 秒)
- 连接串绝不经过模型——在服务器环境的
DATABASE_URL中加载
示例工具面:
| 工具名 | 输入 | 输出 |
|---|---|---|
postgres_query_readonly |
{ "sql": "SELECT ..." } |
JSON 行 + 列名 |
describe_table |
{ "table": "orders" } |
来自 information_schema 的列类型 |
使用只读 DB 角色:GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
模式 2 — 本地 REST API 网关
目标:将现有 HTTP 端点包装为 MCP 工具,让 Claude 不在聊天窗口持有长期 API Key。
网关模式:
Claude → MCP 工具 "deploy_status" → 你的服务器 → GET https://internal/api/v1/deployments
实现要点:
- 每个工具映射一种 HTTP 方法 + 路径模板
- 调用 fetch 前用 schema(Zod、Pydantic)校验输入
- 响应过大时返回截断 JSON(前 8 KB)并设
truncated: true标志 - 服务端记录 correlation ID;工具结果中不回显密钥
与 多智能体编排配合良好——OpenClaw Worker 通过 MCP 调用同一内网 API,替代临时 curl。
模式 3 — IDE 与仓库桥接
Cursor 与 Claude Code 已内置 MCP 客户端支持。自定义服务器可暴露:
- 仓库工具:
git_diff_summary、run_linter(沙箱化) - 文档资源:
file://或resources/read读取AGENTS.md、OpenAPI 规范 - ECC / 插件钩子:安装 ECC 后,添加包装团队
ecc脚本的 MCP 工具
IDE 桥接保持 stdio 本地,除非整个团队共享同一远程开发机。
八步 Runbook
步骤 1 — 安装官方 SDK
Node(大多数宿主推荐):
mkdir mcp-company-gateway && cd mcp-company-gateway
npm init -y
npm install @modelcontextprotocol/sdk zod pg
Python 替代:pip install mcp(见 MCP Python SDK)。
步骤 2 — 脚手架最小服务器
创建 src/index.ts:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({ name: "company-gateway", version: "1.0.0" });
server.tool("ping", {}, async () => ({
content: [{ type: "text", text: "pong" }],
}));
const transport = new StdioServerTransport();
await server.connect(transport);
运行一次:npx tsx src/index.ts — 应阻塞等待 stdio(无输出属正常)。
步骤 3 — 添加只读 Postgres 工具
export DATABASE_URL="postgresql://mcp_reader:****@127.0.0.1:5432/app"
注册 postgres_query_readonly,用 Zod 校验 SQL 必须以 SELECT 开头(服务端拒绝 ; 与 DDL 关键字)。
步骤 4 — 在 Claude Desktop 注册
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"],
"env": { "DATABASE_URL": "postgresql://mcp_reader@127.0.0.1:5432/app" }
}
}
}
重启 Claude Desktop。在新对话中确认锤子/工具图标列出 ping 与 postgres_query_readonly。
步骤 5 — 在 Cursor 注册
项目或全局 .cursor/mcp.json:
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"]
}
}
}
重载 Cursor 窗口。从 Agent 面板测试同一 ping 工具。
步骤 6 — 为远程宿主暴露 SSE(可选)
当 MCP 服务器跑在远程 Mac(团队堡垒机或 租用的 M4)时:
# 示例:SDK HTTP/SSE 传输监听 8787 — 除非在 VPN 后,否则只绑定 localhost
node dist/sse-server.js --port 8787 --host 127.0.0.1
通过 SSH 隧道将宿主配置指向 url: "http://127.0.0.1:8787/sse":
ssh -L 8787:127.0.0.1:8787 user@remote-mac
切勿将未鉴权的 MCP SSE 端口暴露到公网。
步骤 7 — 密钥与沙箱
| 规则 | 原因 |
|---|---|
密钥仅在服务器 env,绝不放入工具参数 |
防止提示词注入外泄 |
| 生产与 staging 分服务器 | 避免跨环境误查询 |
子进程工具加 timeout 与 allowlist |
阻止 rm -rf 类事故 |
步骤 8 — 用 MCP Inspector 验证
npx @modelcontextprotocol/inspector npx tsx src/index.ts
在信任宿主 UI 之前,手动调用 tools/list 与 tools/call。记录每次工具调用的时间戳 + OS 用户(不含聊天内容)以供审计。
安全与沙箱清单
- 分析工具用只读 DB 角色;写工具放在第二台服务器,仅限开发机
- 每个工具做输入校验;拒绝超过 32 KB 的嵌套对象
- 包装内网 API 时,对服务器进程做网络出口 allowlist(iptables 或 macOS 防火墙)
- SaaS OAuth — 在服务器内实现 token 刷新;向模型只暴露 opaque
tool_ok
何时在专用 Mac 上运行 MCP
笔记本休眠会杀死 stdio 服务器。想要共享 MCP 工具目录(8 名工程师共用同一 Postgres 工具)的团队,常在常开 Apple Silicon Mac上运行服务器——本地桌面或小型远程节点——再通过 SSH 隧道或 VPN 访问。
这是基础设施选择,非 MCP 硬性要求。16 GB M4 可舒适运行 3–5 个轻量 MCP 服务器进程(各约 80–150 MB)加 Node 工具链;若同机还跑 Docker 数据库,需加内存。
故障排查
错误:启动后立即 Connection closed
现象:Claude Desktop 日志显示服务器退出码 1。
修复:在终端运行相同 command + args;修复缺失 tsx、错误绝对路径或启动异常。MCP 宿主不在 UI 中展示 stderr。
错误:Tool not found / 工具列表为空
现象:配置 JSON 中服务器名拼写错误,或宿主未重载。
修复:用 jq . claude_desktop_config.json 校验 JSON;完全退出并重新打开宿主应用(非仅关窗口)。
错误:SSE 404 或 CORS 失败
现象:远程 URL 路径错误(/sse vs /mcp)。
修复:匹配 SDK HTTP 传输文档中的路径;用 ssh -L 隧道,配置中使用 127.0.0.1。
推荐路径
| 你的情况 | 建议做法 |
|---|---|
| 独立开发,DB 在笔记本 | stdio + Claude Desktop + Cursor mcp.json |
| 团队内网 API | 一个带命名空间工具的网关 MCP 服务器 |
| DB 在局域网,笔记本在外 | 跳板机 MCP 服务器 + SSH 隧道到 SSE/stdio |
| 重 Agent + MCP 同机 | 若 Docker DB + OpenClaw 扇出共享主机,建议 24 GB 内存 |
| 从零开始 | 先用 Inspector + ping 工具,再上生产 SQL |
若 X → Y:若数据在另一台机器,把 MCP 服务器放在数据旁边,再隧道到宿主——不要把原始数据库端口暴露到公网给 Claude。
常见问题
MCP 与 ChatGPT 插件有何区别?
MCP 是开放、与宿主无关的 JSON-RPC 协议,多语言 SDK 可用。插件是平台专属的。MCP 服务器以你控制的本地或远程进程运行;宿主只负责启动或连接它们。
MySQL 或 SQLite 能否像 PostgreSQL 一样连接?
可以。服务器实现层(驱动 + SQL 方言)不同,MCP 接口(list_tools、call_tool)保持一致。使用只读连接,并加方言特定的 SELECT 守卫。
Claude Code 是否支持 MCP 自定义服务器?
截至 2026 年,Claude Code 与 Cursor 均支持与 Claude Desktop 类似的 MCP 客户端配置。各产品配置文件路径不同——请查阅当前 Anthropic 与 Cursor 文档中 mcpServers 的位置。你编写的服务器代码可在各宿主间复用。
一个服务器应暴露多少工具?
每个服务器建议控制在约 20 个工具以内,以保证模型路由可靠。目录变大时拆分为 billing-gateway、data-gateway、ops-gateway 等独立服务器,各自在宿主配置中单独出现。
暴露写工具(DELETE、部署)是否安全?
仅应在非生产服务器上,并配合明确的人工确认流程。共享配置优先使用只读工具;写操作应放在第二个 MCP 服务器,仅由资深开发者在个人配置中启用。