mcpField
P
pgport

pgport

本地服务
github.com/CloudCorpRecords其他01 天前更新

关于 pgport

pgport 是面向 Agent 和命令行用户的 PostgreSQL 只读查询工具。它只接受单条 SELECT 或 WITH ... SELECT,并在只读事务中执行;查询通过 psql 运行。

主要功能

  1. 01执行 PostgreSQL 只读查询
  2. 02拒绝非 SELECT 单条语句
  3. 03在只读事务中运行查询
  4. 04将查询结果返回为 JSON 行对象
  5. 05CLI 查询及查看表结构

适用场景

  1. 01让 Agent 查询 PostgreSQL 数据
  2. 02在不修改数据库的情况下分析记录
  3. 03通过 CLI 查看表和列信息
  4. 04限制查询为单条只读语句

MCP 相关

提供 stdio MCP 服务,向客户端开放只读 query 工具;查询需连接字符串和 PATH 中的 psql。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-pgport": {
"command": "npx",
"args": [
"-y",
"@reneturcios/pgport"
]
}
}
}
启动命令npx -y @reneturcios/pgport

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/pgport0.1.0
ocighcr.io/cloudcorprecords/pgport:0.1.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

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" }
    }
  }
}
工具
工具输入返回内容
querysql(字符串,必填)——一条只读 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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。