workbench-mcp
workbench-mcp
一个用于 Fedora/Linux 系统上交互式 PostgreSQL 数据探索、API 集成和自动化的本地 Python MCP 服务器。
概述
版本 1 包括:
针对 Fedora/Linux 系统的 Python 虚拟环境设置
通过
.env文件配置的 PostgreSQL 18 连接MCP 工具,用于:
发现表、列和模式结构
运行只读查询预览
执行带有临时表支持的受限 SQL 批处理
调用 PostgreSQL 存储函数和过程
通过完整 URL 请求访问外部 API
执行
PATH中可用的 bash 脚本
强制安全:禁止持久化模式和数据修改
支持 SQL 批处理内的会话级临时表工作流
Fedora / Linux 设置
首先安装所需的系统包:
sudo dnf install -y python3 python3-pip nodejs npm需要 Python 3.12 或更高版本。如果管理多个版本,请使用 pyenv 或类似工具。
虚拟环境设置
在项目根目录下,创建并激活 Python 虚拟环境:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e .环境变量
复制示例配置并填充 PostgreSQL 连接详细信息:
cp .env.example .env必需:
DB_HOST— PostgreSQL 服务器主机名DB_NAME— 数据库名称DB_USER— 数据库用户名DB_PASSWORD— 数据库密码
可选(调优):
DB_PORT— 连接端口(默认:5432)DB_SSLMODE— SSL 模式(默认:prefer)DB_APPLICATION_NAME— 应用程序标识符DB_QUERY_TIMEOUT_SECONDS— 查询超时(默认:30)DB_MAX_ROWS— 每个结果集的最大行数(默认:100)DB_MAX_RESULT_SETS— 每个批次的最大结果集数(默认:5)DB_OBJECT_PREVIEW_CHARS— 最大定义预览长度(默认:4000)
本地开发示例:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=app_dev
DB_USER=app_user
DB_PASSWORD=your-secure-password
DB_SSLMODE=prefer可选:HTTP 请求调优
HTTP 工具每次调用使用完整 URL,不需要 API 配置文件。
支持的环境设置:
变量 | 用途 |
| HTTP 请求超时 |
| HTTP 工具返回的最大响应字节数 |
|
|
| 当工具调用未传递 |
| 作为 |
调用形状示例:
url: https://localhost:44331/api/breakouts/filter/1871161/dd-table?ParameterSetId=231022
method: GET对于经过身份验证的调用,请在 .env(或进程环境变量)中设置 API_BEARER_TOKEN。除非调用者传递了自己的 jwt_token,否则 HTTP 工具会自动使用它。
授权处理
HTTP 工具支持两种授权来源:
在工具调用中传递的
jwt_token来自
.env或进程环境的API_BEARER_TOKEN
优先级
如果提供了
jwt_token,该令牌将作为Authorization: Bearer <jwt_token>转发。如果
jwt_token被省略或为空,服务器将回退到API_BEARER_TOKEN。如果两个值都不存在,请求将不带
Authorization标头发送。
代理的重要规则
不要将 bearer token 放在 headers.Authorization 中。
MCP 服务器会从 headers 中剥离 Authorization,并且仅接受通过专用 jwt_token 字段进行的身份验证。
这可以防止意外的标头冲突,并使令牌优先级明确。
示例:使用默认服务器令牌
{
"url": "https://localhost:5001/api/v1/sales/my-sales"
}示例:转发调用者自己的令牌
{
"url": "https://localhost:5001/api/v1/sales/my-sales",
"jwt_token": "eyJhbGciOi..."
}示例:转发带有额外标头的调用者令牌
{
"url": "https://localhost:5001/api/v1/sales/my-sales",
"jwt_token": "eyJhbGciOi...",
"headers": {
"Accept": "application/json"
}
}相同的 jwt_token 字段在 http_get、http_head、http_post、http_put、http_patch 和 http_delete 上可用。
会话身份验证
代理无需为每次调用传递 jwt_token,而是可以获取一次会话级 JWT,并让每个 HTTP 工具调用在会话的其余部分自动使用它。
工作原理
代理使用目标用户的电子邮件调用
auth_start_session。MCP 服务器将共享密钥 + 电子邮件交换为来自后端代理的范围限定 JWT (
POST /api/v1/mcp/exchange)。令牌缓存在进程内存中。
随后每个省略
jwt_token的 HTTP 工具调用都会自动使用会话令牌。代理可以使用
auth_status检查会话,使用auth_switch_user切换用户,或使用auth_clear_session清除它。
令牌优先级(从高到低)
优先级 | 来源 |
1 | 工具调用中传递的 |
2 |
|
3 |
|
所需环境变量
变量 | 用途 |
| 后端代理端点的完整 URL |
| 在 |
| 当剩余时间少于 N 秒时刷新(默认:60) |
会话身份验证工具
工具 | 描述 |
| 获取给定电子邮件的会话令牌 |
| 将活动会话切换到其他用户(与 start 相同) |
| 检查当前会话(电子邮件、过期时间、是否需要刷新) |
| 从内存中清除缓存的会话令牌 |
请参阅 docs/SESSION_AUTH.md 获取完整的代理参考。
本地运行
激活虚拟环境并安装依赖项后,使用以下任一命令启动 MCP 服务器:
workbench-mcppython -m workbench_mcp.serverMCP 检查器
对于本地 MCP 开发和调试,MCP 检查器提供了快速的手动测试循环:
npx @modelcontextprotocol/inspector .venv/bin/python -m workbench_mcp.server要在 debugpy 下启动 MCP 服务器以在检查器中进行断点调试:
npx @modelcontextprotocol/inspector .venv/bin/python -m debugpy --listen 127.0.0.1:5678 -m workbench_mcp.server启动后,打开检查器 UI,通过 STDIO 连接,并测试诸如 health、describe_object 和 exec_proc_preview 等工具。
断点 (debugpy): 使用端口 5678 进行调试,而不是 6274(6274 仅是检查器 Web UI)。分步工作流和“之前出了什么问题”在 docs/DEBUG_MCP.md 中。
VS Code 设置
要在 VS Code 中注册本地 MCP 服务器,请在工作区 MCP 配置文件中添加一个条目:
工作区文件:
.vscode/mcp.json
配置示例:
{
"servers": {
"workbench-mcp": {
"type": "stdio",
"command": "/absolute/path/to/workbench-mcp/.venv/bin/python",
"args": ["-m", "workbench_mcp.server"]
}
}
}将命令路径替换为虚拟环境 Python 的本地存储库路径。
密钥和环境变量值
您可以在以下任一位置提供环境变量值:
workbench-mcp/.env.vscode/mcp.json中的env— VS Code 将这些注入到 MCP 服务器进程中。
优先级: 进程环境(包括 .vscode/mcp.json -> env)会覆盖 .env 中相同键的值。
VS Code 中 HTTP 调优示例:
{
"servers": {
"workbench-mcp": {
"type": "stdio",
"command": "/absolute/path/to/workbench-mcp/.venv/bin/python",
"args": ["-m", "workbench_mcp.server"],
"env": {
"API_TIMEOUT_SECONDS": "30",
"API_MAX_RESPONSE_BYTES": "2097152",
"API_VERIFY_SSL": "false"
}
}
}
}不要提交真实的令牌。建议使用仅限本地的工作区配置,或者省略 env 并使用 .env(应将其排除在 git 之外)。
如果已经配置了其他 MCP 服务器,请将 workbench-mcp 添加到现有的 servers 对象中,而不是替换整个文件。
保存 .vscode/mcp.json 后,重新加载 VS Code 或刷新 MCP 服务器,以便发现新服务器。服务器加载后,在测试数据库过程之前运行 health 工具。
初始工具
healthdescribe_objectlist_tables_and_columnspreview_queryexecute_readonly_sqlexec_proc_previewexec_function_previewinsert_rowinsert_rowshttp_gethttp_headhttp_posthttp_puthttp_patchhttp_deleteauth_start_sessionauth_switch_userauth_statusauth_clear_sessionexecute_path_bash_script(脚本名称通过PATH解析)
安全模型
在临时 PostgreSQL 批处理中禁止持久化 DDL 和 DML
仅允许临时表写入,且仅限于在当前批处理中创建的临时表
preview_query仅允许SELECT语句和基于 CTE 的读取exec_proc_preview可以执行 PostgreSQL 过程和函数;重载例程应使用签名传递,例如public.my_func(integer, text)execute_path_bash_script仅接受脚本名称(而非路径),通过PATH解析它们,并通过bash执行
建议的首次检查
配置 .env 后,典型的验证流程是:
描述要检查的函数、过程、表或视图。
预览理解该对象所需的辅助配置或参考数据。
使用已知输入运行
exec_proc_preview、preview_query或execute_readonly_sql。将返回的形状与正在评估的功能、调查或调试场景进行比较。
函数执行示例
对于位置 PostgreSQL 函数调用,请使用 exec_function_preview。
将 PostgreSQL 数组作为普通 JSON 列表传递。
SQL 目标示例:
select * from sales."Fn_GetSalesChamps"(2, 2025, array[1,2,5,6,7,8,9,10,11,12,15,16,18,19], 5);等效的 MCP 工具输入:
{
"function_name": "sales.\"Fn_GetSalesChamps\"",
"parameters": [2, 2025, [1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 15, 16, 18, 19], 5]
}插入示例
单行插入:
{
"table_name": "sales.orders",
"row": {
"customer_id": 10,
"status": "new"
},
"returning_columns": ["order_id"]
}批量插入:
{
"table_name": "sales.orders",
"rows": [
{"customer_id": 10, "status": "new"},
{"customer_id": 11, "status": "pending"}
]
}Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/antonov2010/mcp-dev'
If you have feedback or need assistance with the MCP directory API, please join our Discord server