PG_READ_MCP - PostgreSQL 只读 MCP 服务器
只读模型上下文协议服务器,提供安全的PostgreSQL工具。强制实施只读会话和严格的SQL验证,以防止大型语言模型(LLMs)执行写操作。
🚀 分步指南
先决条件
- Python 3.12及以上版本
- Git(注:Git是一个分布式版本控制系统,用于跟踪对文件的修改)
步骤0:复制模板
点击页面右上角的“使用此模板”按钮,复制这个GitHub模板。
步骤1:创建虚拟环境
在 Cursor、Windsur 或 VS Code 中:
- 打开命令面板:
- 在Mac上: Cmd + Shift + P - 在Windows上: Ctrl + Shift + P
- 输入并选择: Python:选择解释器
- 点击: + 创建虚拟环境
- 选择: Venv(注:这可能是“Venv”一词的直接翻译,若“Venv”有特定含义或上下文,请根据实际情况调整翻译) 作为环境类型
在终端中:
python -m venv venv
source venv/bin/activate工具
暴露的工具(所有读取DSN的) PG_DEFAULT_URL 在 .env):
PgListSchemasTool()列出非系统模式(或架构)PgListTablesTool(target_schema)列出模式中的表PgDescribeTableTool(target_schema, table)描述列PgRunReadQueryTool(sql, max_rows=5000, timeout_ms=10000)执行已验证的 SELECT/CTE(公用表表达式)
安全:
- 会议/会话:
SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY,statement_timeout,idle_in_transaction_session_timeout - 验证器:阻止 UPDATE/DELETE/INSERT/DDL/实用程序/锁/COPY 操作以及数据修改的 CTE(公用表表达式);允许在 SELECT 中使用常规函数
第二步:环境
创建 .env 与;带有;随同
PG_DEFAULT_URL=postgresql://user:pass@host:port/db
# optional
PG_DEFAULT_SCHEMA=public
PG_DEFAULT_TABLE=
PG_TEST_SQL=SELECT 1 AS one2.1 仅通过与AI聊天即可创建自定义工具
在聊天中提示你的AI集成开发环境(IDE)为你创建工具。 确保包含 ./.cursor/rules/workflow.mdc 在上下文中。(默认仅在 Cursor 中包含)。
例如:
Please create a tool that fetches the transcripts from a YouTube video. @workflow.mdc回答澄清问题,并不断迭代,直到工具创建完成并按预期运行。
确保将任何所需的环境变量添加到(配置中) ./.env 文件。
2.2 在本地运行
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
PYTHONPATH=. python server/start_mcp.py --tools-dir ./tools
# or include subdirs/multiple endpoints per README below if desired将其他预构建的开源 Stdio MCP 服务器添加到 mcp.json 与 Cursor 和其他客户端一样,文件(也支持)。
{
"mcpServers": {
"notionapi": {
"command": "npx",
"args": [
"-y",
"@notionhq/notion-mcp-server"
],
"env": {
"OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer ntn_****\",\"Notion-Version\":\"2022-06-28\"}"
}
}
# ... add more servers here
}仅 Stdio 此方法支持服务器。此仓库将自动将其转换为SSE(服务器发送事件) 超级网关.
你可以使用 npx 和 uv 来运行这些服务器。
2.3 快速烟雾测试
运行以下命令来测试MCP服务器,并确保所有服务器都在运行。
python tools/PgListSchemasTool.py
python tools/PgListTablesTool.py
python tools/PgDescribeTableTool.py
python tools/PgRunReadQueryTool.py对于使用子目录端点进行测试:
python server/start_mcp.py --split-subdirs你无法将本地服务器连接到Agencii,但可以通过将SSE URL添加到Cursor的“MCP服务器”选项卡中来对其进行测试。
这一步不是必须的。只要你的工具没有问题就行。
多端点MCP服务器
此模板支持从单个Python服务器提供多个工具目录作为独立的端点。
目录结构
按照惯例,我们建议使用“\_mcp”后缀来命名MCP实例目录,但也可以使用任何目录名称:
tools/
├── SharedTool1.py # Shared across all MCP instances
├── SharedTool2.py # Shared across all MCP instances
├── marketing_mcp/ # Marketing MCP instance
│ ├── MarketingTool1.py
│ └── MarketingTool2.py
└── analytics_mcp/ # Analytics MCP instance
├── AnalyticsTool1.py
└── AnalyticsTool2.py运行特定的MCP实例
要运行特定的MCP实例,请使用 MCP_TOOLS_DIR 环境变量:
# Run the marketing MCP instance
MCP_TOOLS_DIR="./tools/marketing_mcp" MCP_INSTANCE_NAME="marketing-mcp" python server/start_mcp.py
# Run the analytics MCP instance
MCP_TOOLS_DIR="./tools/analytics_mcp" MCP_INSTANCE_NAME="analytics-mcp" python server/start_mcp.py这将从指定的目录加载所有工具,并且从父工具目录加载所有工具。
服务器模式
单目录模式(默认):
python server/start_mcp.py仅在根端点提供来自指定目录的工具 /sse.
组合目录模式(默认):
python server/start_mcp.py --include-subdir在父目录、子目录以及MCP配置文件中找到的所有工具都将被部署到根端点 /sse。
多端点模式:
python server/start_mcp.py --split-subdirs每个子目录都有自己的端点:
- Root工具:
/sse - 营销工具:
/marketing_mcp/sse - 分析工具:
/analytics_mcp/sse - MCP配置工具:
/example-mcp-server/sse
配置选项
MCP_TOOLS_DIR工具目录的路径(默认:"./tools")MCP_HOST绑定服务器的主机(默认值:“0.0.0.0”)MCP_PORT运行服务器的端口(默认:8080)MCP_INSTANCE_NAME用于日志记录的实例名称(默认:“mcp-server”)MCP_CONFIG_PATHstdio MCP 服务器的 mcp 配置文件路径(可选)MCP_INCLUDE_SUBDIRS在根端点中包含所有子目录工具(默认:false)MCP_SPLIT_SUBDIRS为子目录创建单独的端点(默认:false)
重要提示: 当 MCP_INCLUDE_SUBDIRS=true所有来自子目录的工具都被加载到根目录中 /sse 在基础工具旁边设置一个端点。这样就创建了一个包含所有工具的单一端点。
这些也可以设置为命令行参数(配置路径除外):
python server/start_mcp.py --tools-dir ./tools/marketing --port 8001 --name marketing-mcp部署到铁路(系统/网络)
- 参观 railway.com 翻译成中文是“铁路网”或“铁路.com(网站名,根据具体语境可灵活翻译)”。不过,通常在中文语境中,如果直接提到这个域名,可能会保留原样或稍作解释,比如“铁路相关的网站(railway.com)”。但在这里,为了简洁明了,直接翻译为“铁路网”也是可以接受的.
- 创建一个新项目,并选择从GitHub部署。
- 连接并选择您在第一步中创建的GitHub仓库。
- 设置所需的环境变量(参见.env.example文件)。如果您计划更改应用程序的端口,请确保相应地调整Dockerfile。
- 点击部署。
要部署多个MCP实例,请在Railway中创建多个服务,每个服务都具有不同的环境变量。
如果遇到问题,您可以点击最新的部署,然后点击“日志”选项卡来查看铁路系统的日志。
这台服务器使用 Dockerfile 和 railway.json. 设置 PG_DEFAULT_URL 在铁路变量中。集装箱启动 server/start_mcp.py。
步骤5:复制您的铁路部署URL
- 进入设置 > 网络连接
- 点击“生成域名”
- 复制生成的URL。
在单端点模式下(默认):
- 仅限root工具:
https:///sse
在单端点模式下,与 MCP_INCLUDE_SUBDIRS=true:
- 所有工具(根目录 + 子目录):
https:///sse
在多端点模式(带有 MCP_SPLIT_SUBDIRS=true):
- Root工具:
https:///sse - 子目录工具:
https:////sse
来自(该系列/该品牌等,根据上下文补充具体信息)的其他MCP服务器 mcp.json 文件将在以下位置可访问:
https:///notionapi/sse
https:///example-mcp-server/sse步骤6:将MCP服务器连接到Agencii
- 导航至 代理工具页面。
- 点击“新建工具”
- 选择“MCP”
- 输入您的MCP服务器的URL
- 点击“同步工具”
- 点击“保存”
- 将您的工具添加到代理中。
我们建议再次复制此模板,并为每个新项目/客户重复此过程。
______________________________________________________________________
祝你建房愉快! 🚀
