PostgreSQL MCP服务器
一种模型上下文协议(MCP)服务器,为大型语言模型(LLM)提供对PostgreSQL数据库的安全、只读访问。此服务器使LLM能够查询PostgreSQL数据库,同时保持严格的安全控制,以防止数据修改或资源耗尽。
🚀 特性
- 安全数据库访问:具有自动安全控制的只读查询
- 查询限制:自动行限制和查询超时
- 资源发现:浏览数据库表和架构
- 安全第一:阻止危险的SQL模式并强制执行事务安全
- 易于集成:适用于Claude Desktop和其他MCP兼容客户端
Example Usage *PostgreSQL MCP服务器与Claude Desktop配合使用的示例*
Query Example *查询数据库表和查看结果的示例*
📋 先决条件
- Node.js(v16或更高版本)
- PostgreSQL数据库
- npm或yarn包管理器
🛠️ 安装
- 克隆或下载此存储库
git clone
cd my_pg_mcp- 安装依赖项
npm install- 构建项目
npm run build⚙️ 配置
数据库设置
确保你的PostgreSQL数据库正在运行并且可以访问。您需要:
- 数据库主机和端口
- 数据库名称
- 具有读取权限的用户名和密码
Claude桌面配置
根据您的Node.js设置选择以下配置方法之一:
选项1:使用NVM(建议NVM用户使用)
如果您使用的是NVM(节点版本管理器),请使用直接节点路径来确保正确的Node.js版本:
{
"mcpServers": {
"my-pg-mcp": {
"command": "/path/to/your/node",
"args": [
"/path/to/your/project/node_modules/ts-node/dist/bin.js",
"/path/to/your/project/src/server/index.ts"
],
"cwd": "/path/to/your/project",
"env": {
"DB_USER": "your_db_user",
"DB_PASSWORD": "your_db_password",
"DB_HOST": "127.0.0.1",
"DB_PORT": "5432",
"DB_NAME": "your_db_name"
}
}
}
}要使用NVM查找节点路径:
which node
# Example output: /Users/username/.nvm/versions/node/v18.16.1/bin/node选项2:使用npm(标准Node.js安装)
如果你全局安装了Node.js(不是通过NVM),你可以直接使用npm:
{
"mcpServers": {
"my-pg-mcp": {
"command": "npm",
"args": [
"start"
],
"cwd": "/path/to/your/project",
"env": {
"DB_USER": "your_db_user",
"DB_PASSWORD": "your_db_password",
"DB_HOST": "127.0.0.1",
"DB_PORT": "5432",
"DB_NAME": "your_db_name"
}
}
}
}配置文件位置
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
环境变量
您还可以将数据库凭据设置为环境变量,而不是在配置文件中:
export DB_USER="your_db_user"
export DB_PASSWORD="your_db_password"
export DB_HOST="127.0.0.1"
export DB_PORT="5432"
export DB_NAME="your_db_name"🔧 用法
可用工具
MCP服务器提供了一个主要工具:
query-database:对PostgreSQL数据库执行只读SQL查询
可用资源
- 数据库表:浏览数据库中的可用表
- 持微软签名的表模式:查看每个表的列信息和数据类型
查询示例
-- Get user information
SELECT id, name, email FROM users WHERE active = true LIMIT 10;
-- Count records
SELECT COUNT(*) FROM orders WHERE created_at > '2024-01-01';
-- Join tables
SELECT u.name, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name
LIMIT 20;🛡️ 安全功能
此MCP服务器包括全面的安全机制:
自动查询限制
- 行限制:查询自动限制为1000行
- 超时:30秒查询超时可防止长时间运行的查询
- 长度限制:最大查询长度为10000个字符
受阻操作
以下操作将被自动阻止:
DELETE声明INSERT声明UPDATE声明DROP声明CREATE声明ALTER声明TRUNCATE声明
只读执行
- 所有查询都在只读事务中运行
- 每次查询后自动回滚
- 无法修改数据
有关详细的安全信息,请参阅 查询_SAFETY.md.
🚀 发展
以开发模式运行
npm run dev建设项目
npm run build测试服务器
npm start🔍 故障排除
常见问题
- “找不到模块”错误
- 确保你已经跑过了 npm install - 检查你的Node.js版本是否兼容(v16+)
- 数据库连接错误
- 验证您的数据库凭据 - 确保PostgreSQL正在运行 - 检查数据库的网络连接
- NVM路径问题
- 使用 which node 找到正确的路径 - 确保配置中的路径与活动NVM版本匹配
- 权限错误
- 确保数据库用户具有读取权限 - 检查用户是否可以从您的主机连接
调试
通过设置环境变量启用调试日志记录:
export DEBUG=1📝 配置选项
查询限制(环境变量)
export MCP_MAX_ROWS=500 # Maximum rows to return (default: 1000)
export MCP_TIMEOUT_MS=15000 # Query timeout in milliseconds (default: 30000)
export MCP_MAX_QUERY_LENGTH=5000 # Maximum query length (default: 10000)🤝 贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 彻底测试
- 提交拉取请求
📄 许可证
该项目根据ISC许可证获得许可。
