hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Built on Bun runtime for high performance server execution, leveraging Bun's speed and JavaScript/TypeScript capabilities.
Allows AI agents to interact with multiple PostgreSQL databases, including running read-only queries, executing data-modifying statements, performing transactions, listing tables, and inspecting database schemas.
Implements end-to-end type-safety throughout the server with TypeScript, ensuring robust and error-resistant database interactions.
FastPostgresMCP🐘⚡️(功能齐全的多数据库 MCP 服务器)
该项目实现了速度极快、类型安全且功能齐全的模型上下文协议 (MCP) 服务器,专为 AI 代理(如 Cursor、Claude Desktop)设计,可与多个 PostgreSQL 数据库交互,包括列出表和检查模式。
它使用 Bun、TypeScript、 postgres
构建,并利用fastmcp
框架的高级功能来构建强大的 MCP 服务器。
用途:用于 AI 代理的 MCP 服务器
这不是一个需要导入到代码中的库。它是一个独立的服务器应用程序。您可以将其作为进程运行,MCP 客户端(例如 AI 代理)使用基于 JSON 的模型上下文协议 (v2.0) 与其通信,通常通过客户端应用程序(例如 Cursor)管理的stdio
连接进行。
故障排除和开发
使用 CLI 进行测试
该软件包包含一个内置的 CLI 命令,用于直接测试 MCP 服务器:
使用内置 MCP 检查器进行测试
您还可以使用 MCP 检查器进行可视化测试和调试:
常见问题
如果在运行bunx postgres-mcp
时看到此错误:
随后是 ping 消息,这意味着:
- MCP 服务器启动成功
- 客户端连接成功
- 但客户端只发送 ping 请求,并没有正确协商功能
这通常表示您需要使用合适的 MCP 客户端。请尝试:
- 使用
bun run cli
来测试 MCP CLI - 按照安装部分中的说明在 Cursor 或 Claude Desktop 中配置 MCP 服务器
如果您正在开发自定义 MCP 客户端,请确保它正确实现 MCP 协议(包括功能协商)。
✨ 核心功能
- **🚀 极快:**基于 Bun 和
fastmcp
构建。 - **🔒 类型安全:**具有 Zod 模式验证的端到端 TypeScript。
- **🐘 多数据库支持:**连接并管理
.env
中定义的多个 PostgreSQL 实例之间的交互。 - **🛡️ 安全设计:**通过
postgres
进行参数化查询可防止 SQL 注入。 - **🔑 可选身份验证:**使用 API 密钥验证(
fastmcp
的authenticate
挂钩)保护基于网络的连接(SSE / HTTP)。 - 📄 通过 MCP 资源获取数据库架构:
- **列出表:**通过
db://{dbAlias}/schema/tables
获取数据库中表的列表。 - **检查表模式:**通过
db://{dbAlias}/schema/{tableName}
获取特定表的详细列信息。
- **列出表:**通过
- 💬 增强工具交互:
- **工具内日志记录:**工具将详细日志发送回客户端(
log
上下文)。 - **进度报告:**长时间运行的操作报告进度(
reportProgress
上下文)。
- **工具内日志记录:**工具将详细日志发送回客户端(
- **🧠 会话感知:**在工具执行上下文(
session
上下文)内访问会话信息。 - **📡 事件驱动:**使用
server.on
和session.on
进行连接/会话事件处理。 - **🔧 现代开发者体验(DX):**清晰的配置、直观的 API、使用
fastmcp
工具轻松测试。
包含的内容(利用 fastmcp 功能)
FastMCP
服务器核心server.addTool
(用于query_tool
、execute_tool
、schema_tool
和transaction_tool
)server.addResourceTemplate
(用于列出表和检查表模式)server.start
(以stdio
为焦点,适用于sse
/http
)- 可选:
authenticate
Hook(用于 API 密钥验证) - 工具执行
context
(log
、reportProgress
、session
) - Zod 用于参数模式验证
server.on
(用于连接日志记录)- (可能)
session.on
用于会话特定逻辑
📋 先决条件
- **Bun (建议使用 v1.0 或更高版本):**已安装并位于 PATH 中。
- **PostgreSQL 数据库:**访问凭据和连接。用户需要权限才能查询
information_schema
。
⚙️ 安装
选项 1:NPM 包
npm 包可在https://www.npmjs.com/package/postgres-mcp获取
选项 2:克隆存储库
- 克隆存储库:Copy
- 安装依赖项:Copy
🔑 配置(多数据库和可选身份验证)
通过环境变量进行配置,从适当的.env
文件加载。
- 创建环境文件:
- 对于生产环境:
cp .env.example .env
- 对于开发:
cp .env.development.example .env.development
- 对于生产环境:
- **环境文件加载顺序:**服务器按照以下优先级顺序从文件加载环境变量:
.env.<NODE_ENV>
(例如,.env.development
,.env.production
,.env.staging
).env.local
(用于本地覆盖,不受版本控制).env
(默认后备)这允许针对不同的环境进行不同的配置。
- 编辑环境文件以定义数据库连接和身份验证:
DB_ALIASES
- 以逗号分隔的唯一 DB 别名列表DEFAULT_DB_ALIAS
- 如果在工具调用中省略了“dbAlias”,则为默认别名- 每个别名的数据库连接详细信息(例如
DB_MAIN_HOST
、DB_REPORTING_HOST
) - 可选 API 密钥认证(
ENABLE_AUTH
,MCP_API_KEY
)
🚀 运行服务器(作为进程)
直接使用 Bun 运行此服务器。AI 客户端(例如 Cursor)通常会为您启动并管理此命令。
选项 1:使用全局安装的包
- 手动运行:
postgres-mcp
选项 2:在项目中使用该包
- 从你的项目运行:
npx postgres-mcp
- 或者以编程方式导入:Copy
选项 3:从克隆的存储库
- 手动运行(用于测试):
bun run src/index.ts
- 手动开发模式:
bun run --watch src/index.ts
使用fastmcp
CLI 工具进行测试
- 交互式终端:
bunx fastmcp dev src/index.ts
- Web UI 检查器:
bunx fastmcp inspect src/index.ts
💻 使用编程 API(作为库)
除了作为独立的 MCP 服务器运行之外,postgres-mcp 还可以以编程方式用作 Node.js/TypeScript 应用程序中的库。
基本用法
直接函数导入
对于更简单的用例,您可以直接导入特定的函数:
配置选项
有关编程 API 的完整文档,请参阅docs/programmatic-api.md 。
🔌 与 AI 客户端连接(Cursor、Claude Desktop)
配置您的 AI 代理(MCP 客户端)以通过其命令/参数机制执行此服务器脚本。
光标 AI - 详细示例
- 打开光标设置/首选项(Cmd+,或 Ctrl+,)。
- 导航到“扩展”->“MCP”。
- 点击“添加 MCP 服务器”或编辑
settings.json
。 - 添加以下 JSON 配置:Copy
- 保存并重新启动 Cursor或“重新加载 MCP 服务器”。
- 验证Cursor 的 MCP 状态/日志中的连接。
克劳德桌面
- 找到并编辑
config.json
(请参阅前面的 README 了解路径)。 - 在
mcpServers
下添加类似的条目,并使用args
中的绝对路径。 - 重新启动 Claude Desktop。
🛠️ MCP 功能公开
身份验证(可选)
- 如果
ENABLE_AUTH=true
,则通过与MCP_API_KEY
匹配的X-API-Key
标头保护网络传输(HTTP / SSE)。 stdio
连接(Cursor/Claude 的默认连接)通常会绕过此检查。
资源
1.列出数据库表
- URI 模板:
db://{dbAlias}/schema/tables
- **描述:**检索指定数据库别名(通常来自“公共”模式)内的用户表名称列表。
- 资源定义(
addResourceTemplate
):uriTemplate
:"db://{dbAlias}/schema/tables"
arguments
:dbAlias
:(字符串,必需)- 数据库的别名(来自.env
)。
load({ dbAlias })
:连接到数据库,查询information_schema.tables
(在公共模式中筛选基表,可在实现中自定义),将结果格式化为 JSON 字符串数组["table1", "table2", ...]
,并返回{ text: "..." }
。
使用示例(AI 提示): “获取资源db://main/schema/tables
以列出主数据库中的表。”
2. 检查表结构
- URI 模板:
db://{dbAlias}/schema/{tableName}
- **描述:**提供特定表的详细架构信息(列、类型、可空性、默认值)。
- 资源定义(
addResourceTemplate
):uriTemplate
:"db://{dbAlias}/schema/{tableName}"
arguments
:dbAlias
:(字符串,必需)- 数据库别名。tableName
:(字符串,必需) - 表的名称。
load({ dbAlias, tableName })
:连接,查询特定表的information_schema.columns
,格式化为列对象的 JSON 字符串数组,返回{ text: "..." }
。
使用示例(AI提示): “描述资源db://reporting/schema/daily_sales
。”
响应内容示例(JSON字符串):
工具
工具接收context
对象( log
、 reportProgress
、 session
)。
1. query_tool
执行只读 SQL 查询。
- **描述:**安全地执行只读 SQL,获取结果,并记录执行日志/进度。
- 参数:
statement
(字符串)、params
(数组,opt)、dbAlias
(字符串,opt)。 - 上下文用法:
log.info/debug
、可选的reportProgress
、访问session
。 - **返回:**行数组的 JSON 字符串。
示例请求:
响应内容示例(JSON字符串):
2. execute_tool
执行数据修改 SQL 语句。
- **描述:**安全地执行数据修改 SQL,并带有执行日志记录。
- 参数:
statement
(字符串)、params
(数组,opt)、dbAlias
(字符串,opt)。 - 上下文用法:
log.info/debug
,访问session
。 - **返回:**表示受影响的行的字符串。
示例请求:
示例响应内容(字符串):
3. schema_tool
检索特定表的详细架构信息。
- **描述:**获取数据库表的列定义和详细信息。
- 参数:
tableName
(字符串),dbAlias
(字符串,可选)。 - 上下文用途:
log.info
,访问session
。 - **返回:**列信息对象的 JSON 字符串数组。
示例请求:
响应内容示例(JSON字符串):
4. transaction_tool
以原子方式执行多个 SQL 语句。
- **描述:**在事务中执行 SQL 序列,并记录步骤/进度。
- 参数:
operations
({statement,params} 数组)、dbAlias
(字符串、opt)。 - 上下文用法:
log.info/debug/error
、reportProgress``session
。 - **返回:**总结成功/失败的 JSON 字符串:
{"success": true, "results": [...]}
或{"success": false, "error": ..., "failedOperationIndex": ...}
。
示例请求:
成功响应内容示例(JSON字符串):
错误响应内容示例(JSON字符串):
服务器和会话事件
- 使用
server.on('connect'/'disconnect')
记录客户端连接。 - 如果需要,可以使用
session.on(...)
进行更精细的会话事件处理。
🔒 安全注意事项
- **SQL注入:**通过参数化查询缓解。无需直接输入连接。
- 数据库权限: **关键。**为每个
DB_<ALIAS>_USER
分配最低权限,包括对information_schema
的读取权限,以获取架构/表列表资源。 - SSL/TLS:生产必需(
DB_<ALIAS>_SSL=require
或更严格)。 - **机密管理:**保护
.env
文件(添加到.gitignore
)。在生产环境中使用安全的机密管理(Vault、Doppler、云机密)。 - 身份验证范围:
authenticate
钩子主要保护网络传输。stdiostdio
性依赖于执行环境。 - **数据敏感性:**注意通过连接/工具访问的数据。
- **资源查询:**用于列出表 (
information_schema.tables
) 和模式 (information_schema.columns
) 的查询通常是安全的,但依赖于数据库权限。请确保配置的用户拥有适当的读取权限。如果需要,出于安全性或清晰度的考虑,请自定义表列表查询(例如,模式筛选)。
📜 许可证
本项目遵循MIT 许可证。详情请参阅LICENSE文件。
📋 更新日志
1.0.0
- 初始版本
- 功能齐全的 PostgreSQL MCP 服务器
- 支持多种数据库连接
- 用于查询、执行、模式检查和事务的工具
- 模式自省资源
- 全面的文档和示例
You must be authenticated.
速度极快的 MCP 服务器使 AI 代理能够与多个 PostgreSQL 数据库交互,提供列出表、检查模式、执行查询和运行事务的功能。
- Purpose: An MCP Server for AI Agents
- Troubleshooting and Development
- ✨ Core Features
- What's Included (fastmcp Features Leveraged)
- 📋 Prerequisites
- ⚙️ Installation
- 🔑 Configuration (Multi-Database & Optional Auth)
- 🚀 Running the Server (as a Process)
- 💻 Using the Programmatic API (as a Library)
- 🔌 Connecting with AI Clients (Cursor, Claude Desktop)
- 🛠️ MCP Capabilities Exposed
- 🔒 Security Considerations
- 📜 License
- 📋 Changelog