MCP数据库服务器-完整实施
此存储库包含用于数据库访问的MCP服务器和代理的生产就绪实现,如本系列博客所述。
文件概述
database_server.py-基本MCP服务器实现(学习/开发)secure_database_server.py-具有安全功能的生产强化版本agent_app.py-使用MCP服务器的LangGraph代理Dockerfile-用于生产部署的容器配置docker-compose.yml-完整的本地测试环境init_db.sql-示例数据库模式和数据requirements.txt-Python依赖关系
快速开始
选项1:Docker编写(最简单)
这将启动测试数据库和MCP服务器:
# Start everything
docker-compose up -d
# Check logs
docker-compose logs -f mcp-server
# Stop everything
docker-compose down选项2:本地Python
要求:
- Python 3.11+
- PostgreSQL在本地运行
# Install dependencies
pip install -r requirements.txt
# Set environment variables
export DB_HOST=localhost
export DB_PASSWORD=your_password
export DB_USER=readonly_user
export DB_NAME=production
# Run the server
python database_server.py使用代理
代理应用程序演示了如何将MCP服务器与LangGraph集成。
# Set your Anthropic API key
export ANTHROPIC_API_KEY=your_key_here
# Run in interactive mode
python agent_app.py
# Run demo queries
python agent_app.py demo
# Use Docker MCP server instead of local
export MCP_SERVER_MODE=docker
python agent_app.pyMCP检验员测试
MCP Inspector允许您在不构建完整代理的情况下测试服务器:
# Install Inspector
npm install -g @modelcontextprotocol/inspector
# Test your server
mcp-inspector python database_server.py然后打开终端中显示的web界面。
LangSmith追踪
启用详细跟踪以调试代理行为:
export LANGCHAIN_TRACING_V2=true
export LANGCHAIN_API_KEY=your_langsmith_key
export LANGCHAIN_PROJECT=mcp-database-agent
python agent_app.py查看痕迹https://smith.langchain.com
生产部署
构建Docker镜像
docker build -t mcp-database-server .安全强化跑步
docker run -d \
--name mcp-database \
--memory=512m \
--cpus=1.0 \
--security-opt seccomp=default.json \
--cap-drop=ALL \
--read-only \
--tmpfs /tmp \
-e DB_HOST=your-db-host \
-e DB_PASSWORD=secure_password \
mcp-database-server健康监测
# Check container health
docker inspect --format='{{.State.Health.Status}}' mcp-database
# View logs
docker logs -f mcp-database
# View audit logs (if volume mounted)
docker exec mcp-database cat /var/log/mcp/server.log安全最佳实践
- 从不硬编码凭据 -使用环境变量或机密管理
- 以非root身份运行 -Dockerfile创建并使用非root用户
- 使用只读数据库用户 -仅授予SELECT权限
- 启用速率限制 -安全版本实现了这一点
- 审核日志记录 -记录所有工具调用以进行安全审查
- 输入验证 -所有查询在执行前都经过验证
- 网络限制 -限制容器网络访问
- 资源限制 -设置内存和CPU限制
- 定期更新 -保持依赖关系最新
故障排除
“连接被拒绝”错误
检查:
- PostgreSQL正在运行:
pg_isready -h localhost - 凭据正确
- 网络允许连接(防火墙、Docker网络)
“超出费率限制”
安全服务器限制为每分钟20个查询。等待或调整 MAX_CALLS_PER_MINUTE 在代码中。
“只允许SELECT查询”
这是故意的安全。只允许使用SELECT语句。要修改数据,请添加具有适当验证的特定工具。
代理找不到工具
确保:
- MCP服务器正在运行且可访问
- 环境变量设置正确
- 服务器日志显示初始化成功
扩展服务器
添加新工具
@mcp.tool()
async def your_tool_name(param: str) -> dict:
"""
Clear description for the AI.
Args:
param: Description of the parameter
"""
# Your implementation
return {"result": "data"}添加新资源
@mcp.resource("custom://your-resource")
async def your_resource() -> str:
"""Description of what this resource provides."""
data = {"key": "value"}
return json.dumps(data, indent=2)许可证
MIT许可证-您可以自由使用和修改您的项目。
支持
如有疑问或问题:
- 查看博客文章以获取详细解释
- 查看代码注释
- 与MCP检查员一起进行测试,以隔离问题
- 检查Docker/PostgreSQL日志中的错误消息
快乐建筑! 🚀
