UNPKG

@kohlarnhin/mcp-server-postgres

Version:

MCP server for interacting with PostgreSQL databases based on Node

135 lines (101 loc) 3 kB
# MCP Server for PostgreSQL 这是一个基于Node.js的MCP(Model Context Protocol)服务器,用于与PostgreSQL数据库交互。它允许AI模型通过MCP协议查询和操作PostgreSQL数据库。 ## 功能特点 - 支持基本的SQL查询操作 - 可配置的写操作权限(INSERT、UPDATE、DELETE、DDL) - 多数据库模式支持 - 基于模式的细粒度权限控制 - 安全的事务管理 - 查询结果以JSON格式返回 ## 安装 ```bash # 全局安装 npm install -g @kohlarnhin/mcp-server-postgres # 本地安装 npm install @kohlarnhin/mcp-server-postgres ``` ## 配置 环境变量可以通过`.env`文件或直接在运行环境中设置: ``` POSTGRES_HOST=127.0.0.1 POSTGRES_PORT=5432 POSTGRES_USER=postgres POSTGRES_PASS=your_password POSTGRES_DB=your_database # 日志设置 ENABLE_LOGGING=true # 写操作权限(全局) ALLOW_INSERT_OPERATION=true ALLOW_UPDATE_OPERATION=true ALLOW_DELETE_OPERATION=false ALLOW_DDL_OPERATION=false # 基于特定模式的权限(可选) # 格式: "schema1:true,schema2:false" SCHEMA_INSERT_PERMISSIONS="public:true,private:false" SCHEMA_UPDATE_PERMISSIONS="public:true,private:false" SCHEMA_DELETE_PERMISSIONS="public:false,private:false" SCHEMA_DDL_PERMISSIONS="public:false,private:false" # 多数据库模式(可选) # 当POSTGRES_DB为空时启用 MULTI_DB_WRITE_MODE=false ``` ## 使用方法 ### 本地开发 ```bash npm run dev ``` ### 生产环境 ```bash npm run build npm start ``` ### 以stdio模式运行(用于MCP集成) ```bash npm run stdio ``` ## MCP集成 在`~/.cursor/mcp.json`中添加以下配置,将其集成到支持MCP的环境中: ```json { "mcpServers": { "Postgres": { "command": "npx", "args": [ "mcprunner", "POSTGRES_HOST=127.0.0.1", "POSTGRES_PORT=5432", "POSTGRES_USER=postgres", "POSTGRES_PASS=123456", "POSTGRES_DB=your_database", "ALLOW_INSERT_OPERATION=true", "ALLOW_UPDATE_OPERATION=true", "ALLOW_DELETE_OPERATION=false", "--", "npx", "-y", "@kohlarnhin/mcp-server-postgres" ] } } } ``` ## 查询示例 通过MCP协议,可以执行如下SQL查询: ```sql -- 查询表列表 SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' -- 查询特定表的结构 SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'your_table' AND table_schema = 'public' -- 查询数据 SELECT * FROM your_table WHERE condition -- 插入数据(如果启用了INSERT权限) INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2') -- 更新数据(如果启用了UPDATE权限) UPDATE your_table SET column1 = 'new_value' WHERE condition -- 删除数据(如果启用了DELETE权限) DELETE FROM your_table WHERE condition -- DDL操作(如果启用了DDL权限) CREATE TABLE new_table (id SERIAL PRIMARY KEY, name VARCHAR(100)) ``` ## 许可证 MIT