ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何将 PostgreSQL MCP 服务器与 Cursor 或 Claude 结合使用:TaoToken 统一 Key 接入实战

如何将 PostgreSQL MCP 服务器与 Cursor 或 Claude 结合使用:TaoToken 统一 Key 接入实战

1. 为什么 PostgreSQL MCP 服务器值得接入 Cursor 与 Claude

PostgreSQL MCP 服务器本质上是一个遵循 Model Context Protocol 的中间层,它把 PostgreSQL 数据库的能力(查询、表结构、索引、执行计划)包装成 AI 工具能理解的标准工具调用。Cursor 和 Claude Desktop 这类客户端在支持 MCP 之后,就能在对话里直接调用这些工具,让模型帮你读表、写 SQL、分析慢查询,而不是你手动复制粘贴 schema 再问它。

它适合谁?三类人最明显:一是天天写 SQL 但懒得记复杂 catalog 查询的后端开发;二是需要快速摸清陌生库结构的数据分析同学;三是想把数据库操作纳入 AI Agent 工作流的自动化玩家。你不需要把数据库暴露到公网,MCP 服务器跑在本地,通过 stdio 和客户端通信,连接串里的凭据只留在你机器上。

但真正动手时,很多人会卡在同一个地方:Cursor 要配一套模型 Key,Claude Desktop 又要配一套,如果再加上别的 AI 工具,Key 就散落在四五个配置文件里。改一次 Key 要翻遍全盘,团队协作时更是灾难。这篇就围绕这个碎片化问题,用 TaoToken 的统一 Key 和 API 通道把 Cursor 与 Claude 的模型接入收敛到一处,同时把 PostgreSQL MCP 服务器完整跑通。

我试过把 MCP 配置和模型配置混在一个文件里,结果排查报错时完全分不清是 MCP 没起来还是模型鉴权失败。所以下面会把两件事拆开讲:先解决模型通道(TaoToken),再解决 MCP 服务器(PostgreSQL),最后在 Cursor 和 Claude 里分别验证查询是否真的返回了数据。

TaoToken 在这里的角色是统一模型入口。它提供兼容 OpenAI 风格的 Base URL 和 API Key,Cursor 的自定义模型、Claude Code 的 Anthropic 兼容通道都能指向同一个地址。这样你只需要维护一个 Key,MCP 服务器本身不碰模型鉴权,它只负责数据库;模型鉴权全部交给 TaoToken。职责清晰,排错也快。

2. TaoToken 统一 Key 与 PostgreSQL MCP 前置准备

在写任何配置文件之前,先把两边的依赖装齐。PostgreSQL MCP 服务器是 Node 项目,所以 Node.js 版本必须到位;TaoToken 这边你只需要一个 API Key 和对应的 Base URL。

2.1 环境依赖清单

Node.js 建议 v18.0.0 以上,v20 LTS 更稳。用node -v确认,低于 18 就先升级。PostgreSQL 本地或远程都行,但要保证你的机器能网络访问到它,并且有一个可用的连接串。连接串格式后面会用到,先记在心里:postgresql://用户名:密码@主机:5432/库名。

TaoToken 的 Key 在控制台生成,地址是 https://taotoken.net/api-keys 。生成后复制保存,它只会完整显示一次。Base URL 用 https://taotoken.net/api ,注意这个地址不带任何查询参数,直接填进客户端的 base_url 字段即可。

2.2 拉取并构建 PostgreSQL MCP 服务器

打开终端,克隆仓库并安装依赖:

git clone https://github.com/modelcontext/postgresql-mcp-server.git cd postgresql-mcp-server npm install npm run build

npm install会装 TypeScript 和运行库,npm run build把 TS 编译到build/目录。构建成功后你会看到build/index.js,这个文件就是 MCP 服务器的入口。记住它的绝对路径,比如/home/user/postgresql-mcp-server/build/index.js,后面配置里要用。

如果你在 Windows 上,路径类似C:\\Users\\you\\postgresql-mcp-server\\build\\index.js,JSON 里反斜杠要转义成双反斜杠。

2.3 用环境变量管理数据库连接串

不要把连接串硬编码进配置文件。在 MCP 服务器的启动环境里注入DATABASE_URL更安全。Linux/macOS 可以在 shell 里 export,Windows 用系统环境变量。连接串带上 SSL 参数更稳妥:

export DATABASE_URL="postgresql://user:password@host:5432/dbname?sslmode=require"

如果你的库在本地且没开 SSL,去掉sslmode=require即可。这一步做完,MCP 服务器就知道连哪个库了,而模型通道由 TaoToken 单独负责,两者互不干扰。

2.4 确认 TaoToken 通道可用

在正式写 Cursor 和 Claude 配置前,先用一条 curl 确认 Key 和 Base URL 是通的:

curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"ping"}]}'

返回里有choices字段就说明通道正常。这一步能提前排掉 401 和地址写错的问题,省得后面在 Cursor 里反复试。模型 ID 按你实际订阅的填,这里只是演示。

3. 可复制配置:Cursor 与 Claude 的 settings 与 auth.json

这一节是全文的核心,所有片段都可以直接复制。关键原则:模型鉴权走 TaoToken,MCP 服务器走本地 stdio,两套配置分开写。

3.1 Cursor 的 MCP 配置(mcp.json)

Cursor 的 MCP 配置放在~/.cursor/mcp.json。这个文件只负责告诉 Cursor 去哪里启动 PostgreSQL MCP 服务器,不涉及模型 Key:

{ "mcpServers": { "postgresql": { "command": "node", "args": [ "/home/user/postgresql-mcp-server/build/index.js" ], "env": { "DATABASE_URL": "postgresql://user:password@host:5432/dbname?sslmode=require" } } } }

注意command用node而不是直接指向 js 文件,args里放入口路径。env里注入连接串,这样服务器启动时就能读到。Windows 用户把路径改成双反斜杠形式。

3.2 Cursor 的模型通道配置

Cursor 里模型通道在设置界面配置,但底层等价于下面这段 settings 结构。Base URL 填 TaoToken 的地址,Key 填你的 TaoToken Key,Model ID 填你要用的模型:

{ "openai.baseUrl": "https://taotoken.net/api", "openai.apiKey": "你的TaoTokenKey", "openai.model": "gpt-4o-mini" }

如果你用的是 Cursor 的 Anthropic 兼容模式,Base URL 同样指向 TaoToken,Key 不变。这样 Cursor 的对话模型和 MCP 工具调用都走同一条通道,Key 只有一份。

3.3 Claude Desktop 的 claude_desktop_config.json

Claude Desktop 的配置在claude_desktop_config.json,路径因系统而异:macOS 在~/Library/Application Support/Claude/,Windows 在%APPDATA%\Claude\。内容如下:

{ "mcpServers": { "postgresql": { "command": "node", "args": [ "/home/user/postgresql-mcp-server/build/index.js" ], "env": { "DATABASE_URL": "postgresql://user:password@host:5432/dbname?sslmode=require" } } } }

Claude Desktop 本身不直接读 OpenAI 风格的 Base URL,它的模型通道由官方管理。但如果你通过 Claude Code 走 Anthropic 兼容通道接 TaoToken,就需要 auth.json。

3.4 Claude Code 的 auth.json 三件套

Claude Code 的鉴权文件是~/.claude/auth.json(或项目级.claude/auth.json)。这里必须写全三件套:Base URL、Key、Model ID,缺一不可:

{ "baseUrl": "https://taotoken.net/api", "apiKey": "你的TaoTokenKey", "model": "claude-3-5-sonnet-20241022" }

baseUrl指向 TaoToken,apiKey是统一 Key,model填你要调用的模型 ID。三件套齐全,Claude Code 才能正确发起请求。如果只填 Key 不填 Base URL,它会走默认官方地址,导致鉴权失败。

3.5 配置对照表

客户端配置文件模型通道MCP 服务器
Cursor~/.cursor/mcp.jsonsettings 里填 TaoToken Base URL + KeymcpServers 里配 node 启动
Claude Desktopclaude_desktop_config.json官方管理mcpServers 里配 node 启动
Claude Code~/.claude/auth.jsonbaseUrl + apiKey + model 三件套通过 MCP 配置引用

注意:MCP 配置和模型配置是两个独立文件,不要混写。混写会导致排错时无法区分是鉴权问题还是服务器启动问题。

4. 验证请求:在 Cursor 与 Claude 中跑通 PostgreSQL 查询

配置写完,重启客户端,然后做实际验证。验证分两层:先确认 MCP 服务器被识别,再确认模型能通过 MCP 工具查到真实数据。

4.1 启动 MCP 服务器并观察日志

在终端手动跑一次服务器,确认它能启动:

DATABASE_URL="postgresql://user:password@host:5432/dbname?sslmode=require" \ node /home/user/postgresql-mcp-server/build/index.js

如果连接串正确,进程会保持运行并等待 stdio 输入。如果报连接错误,说明连接串或网络有问题,先解决这个再往下走。按 Ctrl+C 退出,然后重启 Cursor 或 Claude Desktop,让它们读取新配置。

4.2 在 Cursor 中验证

打开 Cursor,进入对话面板,输入类似这样的指令:

列出当前数据库里所有的表,并告诉我每张表的行数。

如果 MCP 服务器被正确加载,Cursor 会调用 PostgreSQL MCP 工具,返回表名和行数。你可以在对话里看到工具调用记录。如果它只是凭空回答而没有调用工具,说明 MCP 没被识别,检查mcp.json路径和 node 命令。

再试一条更具体的:

查询 orders 表里最近 7 天的订单总数,按天分组。

成功的话你会看到真实的聚合结果。这一步同时验证了模型通道(TaoToken)和 MCP 通道(PostgreSQL)都通了。

4.3 在 Claude Desktop 中验证

Claude Desktop 重启后,在对话里输入:

用 PostgreSQL MCP 工具查看 users 表的结构。

Claude 会调用 MCP 工具返回列名、类型、约束。如果它说没有可用工具,检查claude_desktop_config.json的 JSON 格式是否合法,以及路径是否正确。Claude Desktop 对配置格式比较敏感,多一个逗号都会导致加载失败。

4.4 在 Claude Code 中验证

Claude Code 走 auth.json 三件套,验证方式是直接在项目里提问:

帮我分析当前数据库的慢查询,给出优化建议。

Claude Code 会通过 MCP 工具读取执行计划,再结合模型能力给出建议。如果返回 401,说明 auth.json 里的 Key 或 Base URL 有问题;如果返回工具不存在,说明 MCP 配置没生效。

4.5 成功结果的判断标准

真正的成功不是模型说“我查到了”,而是你能在返回里看到具体的表名、行数、字段类型这些只有连上库才能拿到的信息。如果模型回答得很泛,大概率是没调用工具,只是在用训练数据编。这时候回去检查 MCP 服务器是否真的在运行。

5. 本篇常见错排查:401、local proxy failed 与 reading choices

配置过程中最容易撞上的几类报错,这里逐个对照。

5.1 401 Unauthorized

这个报错几乎都出在模型通道。如果你在 Cursor 里看到 401,先检查 settings 里的openai.apiKey是不是 TaoToken 的 Key,以及openai.baseUrl是不是https://taotoken.net/api。常见错误是把 Base URL 写成了带/v1的完整路径,或者 Key 复制时带了空格。

Claude Code 里出现 401,检查 auth.json 三件套是否齐全。只填 apiKey 不填 baseUrl,请求会发到默认地址,自然 401。

5.2 local proxy failed

这个报错通常出现在 Cursor 或 Claude 尝试连接本地 MCP 服务器时。原因可能是 node 命令不在 PATH 里,或者入口文件路径写错。先在终端手动跑一遍node /path/to/build/index.js,确认能启动。如果终端能跑但客户端报 local proxy failed,多半是客户端配置里的路径和实际路径不一致。

另一个原因是端口或 stdio 冲突。MCP 服务器用 stdio 通信,不需要端口,所以端口冲突可能性低,但如果你同时开了多个 MCP 服务器实例,可能会有资源竞争。关掉多余实例再试。

5.3 reading choices 报错

这个报错说明请求发出去了,但返回体里没有choices字段。常见原因是模型 ID 写错,或者 TaoToken 通道返回了错误结构。先用第 2.4 节的 curl 命令确认通道正常,再检查客户端里填的 model 字段是否和订阅的模型一致。

如果 curl 正常但客户端报 reading choices,检查客户端是否在请求里加了额外参数导致格式不兼容。Cursor 的某些版本会在请求里注入额外字段,换成标准 OpenAI 兼容模式通常能解决。

5.4 OAuth 相关报错

Claude Code 如果提示 OAuth 失败,说明它尝试走官方鉴权而不是 auth.json。确认 auth.json 文件位置正确,且 JSON 格式合法。Claude Code 优先读项目级.claude/auth.json,再读用户级~/.claude/auth.json。如果两处都有且内容冲突,以项目级为准。

5.5 MCP 工具不出现的排查顺序

按这个顺序查:第一,配置文件 JSON 是否合法,用在线 JSON 校验器过一遍;第二,node 路径和入口文件是否存在;第三,DATABASE_URL 是否能连通;第四,客户端是否重启。四步走完,九成问题能定位。

提示:每次改完配置都要完全退出客户端再重启,不是关窗口,是彻底退出进程。Cursor 和 Claude Desktop 都有后台驻留,不彻底退出不会重读配置。

6. 把统一 Key 接入纳入日常开发流

配置跑通之后,日常使用其实很轻。你不需要每次开库都手动连,直接在 Cursor 或 Claude 里用自然语言提问,MCP 服务器会把数据库能力暴露给模型。TaoToken 的统一 Key 让你在多个工具之间只维护一份凭据,换模型或换工具时不用重新配一遍。

如果你打算长期在编码和 Agent 场景里用这套组合,可以了解 TaoToken 的 Coding Plan,地址是 https://taotoken.net/coding-plan ,它针对高频编码调用做了通道优化。模型对话调试可以在 https://taotoken.net/chat 直接试。接入文档在 https://taotoken.net/doc ,里面有各客户端的详细字段说明。API Key 管理在 https://taotoken.net/api-keys ,随时可以轮换。

实际用下来,最省心的做法是把 DATABASE_URL 和 TaoToken Key 都放进系统环境变量,配置文件里只引用变量名。这样换机器或分享配置时不会泄露凭据。MCP 服务器本身不碰模型鉴权,TaoToken 只管模型通道,两边职责清晰,出问题时排查路径也短。

最后一个小技巧:给不同的库配不同的 MCP 服务器实例,在 mcp.json 里用不同的 id 区分,比如postgresql-prod和postgresql-dev。这样在对话里可以明确指定查哪个库,避免误操作生产数据。每个实例的 DATABASE_URL 指向不同库,模型通道仍然共用同一个 TaoToken Key。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进