使用说明
HelloMCP
一个模型上下文协议(MCP)服务器和客户端,为PostgreSQL、MySQL和Oracle提供安全的数据库工具。包括:
- MCP服务器及其工具:
db_test_connection,db_validate,db_schema,db_list_tables,db_query - 用于stdio和流式HTTP传输的MCP客户端线束
- 用于快速即席查询的可选代理工具模式
- 可选的自然语言web UI→ SQL显示
需求
- Python 3.12(
py -3.12在Windows上) - 具有可访问凭据的正在运行的数据库
- 推荐:Windows上的PowerShell
安装依赖项:
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
配置
在以下位置创建本地客户端配置 config/mcp_client.json:
{
"transport": "streamable-http",
"url": "http://127.0.0.1:8000/mcp",
"server": "src.core.server",
"python_cmd": "py -3.12",
"db": {
"type": "postgresql",
"host": "<< >>",
"port": 5432,
"name": "<< >>",
"user": "<< >>",
"pass": "<< >>",
"ssl_mode": null,
"schema": null
}
}
或者设置一个环境变量:
$env:MCP_CLIENT_CONFIG = "config/mcp_client.json"
运行MCP服务器
- HTTP传输(建议用于浏览器/远程客户端):
$env:MCP_TRANSPORT = "streamable-http"
py -3.12 -m src.core.server
- Stdio传输(建议用于本地IDE客户端):
py -3.12 -m src.core.server
运输选择由以下因素控制 MCP_TRANSPORT;参见 src/core/server.py.
运行MCP客户端
使用客户端工具初始化会话并练习数据库工具。
$env:MCP_CLIENT_CONFIG = "config/mcp_client.json"
py -3.12 -m src.client.mcp_client
它的作用:
- 初始化MCP会话并列出工具
- 电话:
db_test_connectiondb_validate随着SELECT 1db_schemadb_list_tablesdb_query随着SELECT 1
客户端代码参考:
- 条目:
src/client/mcp_client.py:154–163 - HTTP模式:
src/client/mcp_client.py:64–71 - 标准模式:
src/client/mcp_client.py:52–62
快速测试(代理工具模式)
使用代理的工具模式运行无需Bedrock的即席查询。
- 列表表格:
py -3.12 src\ai\bedrock_agent.py --transport http --url http://127.0.0.1:8000/mcp --tool db_list_tables
- 查询行:
py -3.12 src\ai\bedrock_agent.py --transport http --url http://127.0.0.1:8000/mcp --tool db_query --sql "SELECT id, name FROM apartments_apartment ORDER BY id LIMIT 10"
- 参数化查询(Postgres样式):
py -3.12 src\ai\bedrock_agent.py --transport http --url http://127.0.0.1:8000/mcp --tool db_query --sql "SELECT * FROM payments_paymentrecord WHERE payment_date >= %(start)s" --params "{\"start\":\"2024-01-01\"}"
S3 MCP服务器
- 在以下位置配置客户端
config/mc_S3.json:{ "transport": "streamable-http", "url": "http://127.0.0.1:8002/mcp", "server": "src.s3.server", "bucket": "", "prefix": "", "key": "", "max_bytes": null, "decode_text": true } - 在端口8002上启动服务器:
$env:MCP_TRANSPORT="streamable-http"; $env:MCP_HTTP_PORT=8002; py -3.12 -m src.s3.server
- 与客户进行测试:
$env:MCP_CLIENT_CONFIG="config/mc_S3.json"; py -3.12 -m src.client.s3_client
- 工具:
s3_list_buckets列出buckets3_list_objects列出bucket中的对象(使用bucket/prefix)s3_read_object读取对象内容(使用bucket/key)
- 笔记:
- AWS凭据必须可用(环境或默认配置文件)
s3_list_buckets需要s3:ListAllMyBuckets许可;集bucket和使用s3_list_objects否则- 可选的
AWS_REGION和AWS_S3_ENDPOINT由服务器支持 - 服务器代码:
src/s3/server.py:38–108,运行:src/s3/server.py:112–116
LocalFS MCP服务器
- 在以下位置配置客户端
config/localfile_mcp.json:{ "transport": "streamable-http", "url": "http://127.0.0.1:8003/mcp", "server": "src.localfs.server", "path": ".", "types": ["py", "txt"], "ignore": [".venv/**", "__pycache__/**", "node_modules/**"], "read": "README.md", "max_depth": 5, "max_items": 200 } - 在端口8003上启动服务器:
$env:MCP_TRANSPORT="streamable-http"; $env:MCP_HTTP_PORT=8003; py -3.12 -m src.localfs.server
- 与客户进行测试:
$env:MCP_CLIENT_CONFIG="config/localfile_mcp.json"; py -3.12 -m src.client.localfs_client
- 工具:
localfs_list列出以下文件path可选types和ignore
-
localfs_read读取相对于的文件path
- 笔记:
ignore使用相对于以下对象的全局模式pathtypes是没有点的扩展(例如。,"py")- 路径限制已强制执行(无法在库外读取)
- 服务器代码:
src/localfs/server.py:33–104,运行:src/localfs/server.py:108–114
故障排除
- 406呼叫时不可接受
/mcp直接:- 使用客户端或代理工具模式,执行MCP握手。
- Pydantic缺少字段错误
db_query:- 确保有效载荷包括
query以及DB连接字段。
- 确保有效载荷包括
- 参数绑定:
- PostgreSQL/MySQL:传递参数字典;使用
%(name)s在SQL for Postgres中。 - Oracle:占位符转换为
:name内部。
- PostgreSQL/MySQL:传递参数字典;使用
项目结构
- 服务器和工具:
src/core/server.py - 客户端线束:
src/client/mcp_client.py - 数据库连接器:
src/database/connectors/*.py - 安全检查:
src/database/safety/risk_checker.py - 代理工具模式:
src/ai/bedrock_agent.py - Web用户界面:
src/ui/chat_server.py
安全
- 通过以下方式忽略机密和本地配置
.gitignore(例如。,.env,config/mcp_client.json,src/creds). - 不要提交凭据;使用env-vars或本地配置文件。