关于 pgport
pgport 是面向 Agent 和命令行用户的 PostgreSQL 只读查询工具。它只接受单条 SELECT 或 WITH ... SELECT,并在只读事务中执行;查询通过 psql 运行。
主要功能
- 01执行 PostgreSQL 只读查询
- 02拒绝非 SELECT 单条语句
- 03在只读事务中运行查询
- 04将查询结果返回为 JSON 行对象
- 05CLI 查询及查看表结构
适用场景
- 01让 Agent 查询 PostgreSQL 数据
- 02在不修改数据库的情况下分析记录
- 03通过 CLI 查看表和列信息
- 04限制查询为单条只读语句
MCP 相关
提供 stdio MCP 服务,向客户端开放只读 query 工具;查询需连接字符串和 PATH 中的 psql。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
pgport
pgport 让 Agent(或在终端中的你)能够向 PostgreSQL
数据库提问,同时完全无法更改数据库。它接受连接字符串,运行一条只读查询,并返回
行。任何不是一条普通 SELECT 或 WITH ... SELECT
语句的内容,都会在离开进程前被拒绝;实际执行的语句则会在显式的只读事务中运行。
它不捆绑数据库驱动程序。pgport 在底层会调用
psql 命令行客户端,因此需要实时获取结果的机器必须在 PATH 中包含
psql。如果没有 psql,或没有连接字符串,服务仍会启动并列出其工具;只有查询
本身会报告问题。
安装
npx @reneturcios/pgport query postgres://user@localhost:5432/mydb "SELECT 1"
或者运行容器镜像:
docker run -i ghcr.io/cloudcorprecords/pgport
容器默认启动 MCP 服务(见下文)。传入 CLI 参数即可将其用作 CLI。
CLI
# Run one read-only query; rows print as JSON
pgport query postgres://alice@localhost/shop "SELECT id, name FROM products ORDER BY id"
# See what tables exist and which columns each one has
pgport schemas postgres://alice@localhost/shop
# Start the MCP server (connection string optional, see below)
pgport mcp postgres://alice@localhost/shop
pgport --version
退出代码:成功时为 0;查询、连接字符串或
psql 本身失败时为 1(错误信息会指出原因);用法错误时为 2。
连接字符串是标准的 PostgreSQL URL:
postgres:// 或 postgresql://,包含主机、可选端口(默认
5432)、路径中的数据库名称,以及 userinfo 中可选的用户名和密码。对于 mcp
命令,可以不在命令行中提供连接字符串,改为通过
PGPORT_DATABASE_URL 环境变量提供(也可以使用普通的 DATABASE_URL)。
只读防护
只有满足以下所有条件,查询才会被接受:
- 去除开头的空白和注释后,第一个关键字是
SELECT或WITH。 - 查询必须是单条语句:分号后只要还有非空白内容,就会终止处理。
- 字符串字面量之外不能出现
INSERT、UPDATE、DELETE、DROP、ALTER、CREATE、TRUNCATE、GRANT、REVOKE、COPY或VACUUM中的任何一个完整单词。扫描前会将单引号字面量清空,因此SELECT 'delete me'是完全有效的查询;但字面名称为update的列不行——防护机制宁可拒绝不常见的名称,也不会被绕过。
接受的查询会通过
psql -v ON_ERROR_STOP=1 --csv 执行为
BEGIN TRANSACTION READ ONLY; <sql>; COMMIT;,并将 CSV 输出解析为行对象。值会以 psql 输出的字符串形式返回。
MCP 服务
同一个可执行文件支持两种用法。mcp 子命令会启动 stdio MCP
服务:
npx -y @reneturcios/pgport mcp postgres://alice@localhost/shop
MCP 客户端配置:
{
"mcpServers": {
"pgport": {
"command": "npx",
"args": ["-y", "@reneturcios/pgport", "mcp"],
"env": { "PGPORT_DATABASE_URL": "postgres://alice@localhost/shop" }
}
}
}
工具
| 工具 | 输入 | 返回内容 |
|---|---|---|
query | sql(字符串,必填)——一条只读 SQL 语句 | 结果行组成的 JSON 对象数组,每个对象以列名为键。防护规则违规、缺少连接、缺少 psql 以及数据库错误都会作为工具错误返回,绝不会伪造行数据。 |
在 MCP 层,服务刻意不掌握你的架构信息:例如,可以直接向数据库提问:SELECT table_name FROM information_schema.tables;也可以使用 CLI 的 schemas 命令,将 information_schema.columns 的行按表归类为列列表。
开发
npm install
npm run build # tsc -> dist/
npm test # node test runner over test/*.test.ts, no network, no live database
npm run dev # run the CLI from source via tsx
核心逻辑位于可注入的执行器接口之后,测试套件会通过该接口进行测试:连接字符串解析、防护机制、查询透传、错误传播和架构分组,均由模拟执行器覆盖。
许可证
MIT——参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。