使用说明
PostgreSQL MCP服务器(增强型)
一个模型上下文协议服务器,提供对PostgreSQL数据库的读写访问。此服务器使LLM能够检查数据库模式、执行查询、修改数据以及创建/修改数据库模式对象。
注: 这是原始版本的增强版 PostgreSQL MCP服务器 通过Anthropic。原始服务器提供只读访问,而此增强版本添加了写入功能和模式管理。
组件
工具
数据查询
- 怎么翻译
- 对连接的数据库执行只读SQL查询
- 输入:
sql(string):要执行的SQL查询 - 所有查询都在只读事务中执行
数据修改
-
执行
- 执行修改数据的SQL语句(INSERT、UPDATE、DELETE)
- 输入:
sql(string):要执行的SQL语句 - 在具有适当COMMIT/ROLLBACK处理的事务中执行
-
插入
- 将新记录插入表中
- 输入:
table(string):表名data(object):键值对,其中键是列名,值是要插入的数据
-
更新
- 更新表中的记录
- 输入:
table(string):表名data(object):要更新的字段的键值对where(string):用于标识要更新的记录的WHERE条件
-
删除
- 从表中删除记录
- 输入:
table(string):表名where(string):用于标识要删除的记录的WHERE条件
模式管理
-
createTable
- 使用指定的列和约束创建新表
- 输入:
tableName(string):表名columns(array):具有名称、类型和可选约束的列定义数组constraints(array):表级约束的可选数组
-
createFunction
- 创建PostgreSQL函数/过程
- 输入:
name(string):函数名称parameters(string):函数参数returnType(string):返回类型language(string):语言(plpgsql、sql等)body(string):函数体options(string):可选附加功能选项
-
createTrigger
- 在桌子上创建触发器
- 输入:
name(string):触发器名称tableName(string):应用触发器的表functionName(string):要调用的函数when(string):之前、之后或代替events(array):事件数组(INSERT、UPDATE、DELETE)forEach(string):ROW或STATEMENTcondition(string):可选WHEN条件
-
创建指数
- 在表上创建索引
- 输入:
tableName(string):表名indexName(string):索引名称columns(数组):要索引的列unique(boolean):索引是否唯一type(string):可选索引类型(BTREE、HASH、GIN、GIST等)where(string):可选条件
-
alterTable
- 更改表结构
- 输入:
tableName(string):表名operation(string):操作(添加列、删除列等)details(string):操作细节
资源
服务器为数据库中的每个表提供架构信息:
- 持微软签名的表模式 (
postgres://<host>/<table>/schema)- 每个表的JSON模式信息
- 包括列名和数据类型
- 从数据库元数据中自动发现
使用Claude Desktop
要将此服务器与Claude Desktop应用程序一起使用,请将以下配置添加到您的“mcpServers”部分 claude_desktop_config.json:
码头工人
- 在macos上运行docker时,如果服务器在主机网络上运行(例如localhost),请使用host.docker.internal
- 用户名/密码可以添加到postgresql url中
postgresql://user:password@host:port/db-name - 添加
?sslmode=no-verify如果您需要绕过SSL证书验证
{
"mcpServers": {
"postgres": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"mcp/postgres",
"postgresql://host.docker.internal:5432/mydb"]
}
}
}
NPX
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://localhost/mydb"
]
}
}
}
替换 /mydb 使用您的数据库名称。
示例用法
查询数据
/query SELECT * FROM users LIMIT 5
插入数据
/insert table="users", data={"name": "John Doe", "email": "john@example.com"}
更新数据
/update table="users", data={"status": "inactive"}, where="id='123'"
创建表
/createTable tableName="tasks", columns=[
{"name": "id", "type": "SERIAL", "constraints": "PRIMARY KEY"},
{"name": "title", "type": "VARCHAR(100)", "constraints": "NOT NULL"},
{"name": "created_at", "type": "TIMESTAMP", "constraints": "DEFAULT CURRENT_TIMESTAMP"}
]
创建函数和触发器
/createFunction name="update_timestamp", parameters="", returnType="TRIGGER", language="plpgsql", body="BEGIN NEW.updated_at = NOW(); RETURN NEW; END;"
/createTrigger name="set_timestamp", tableName="tasks", functionName="update_timestamp", when="BEFORE", events=["UPDATE"], forEach="ROW"
建筑
Docker:
docker build -t mcp/postgres -f Dockerfile .
安全注意事项
- 所有数据修改操作都使用具有适当COMMIT/ROLLBACK处理的事务
- 每个操作都返回为提高透明度而执行的SQL
- 服务器使用参数化查询进行插入/更新操作,以防止SQL注入
- 安全修复程序(v1.0.2):只读查询工具现在使用预处理语句来防止SQL注入攻击,这些攻击可以通过执行多个语句来绕过事务隔离
许可证
此MCP服务器根据MIT许可证获得许可。这意味着您可以根据MIT许可证的条款和条件自由使用、修改和分发软件。有关更多详细信息,请参阅项目存储库中的LICENSE文件。