数据库访问服务器

MCP数据库服务器提供生产就绪的数据库访问实现,支持安全特性和LangGraph代理集成。

  • by SainadhAmul
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 SainadhAmul/MCP-Implementation-2

使用说明

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.py

MCP检验员测试

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

安全最佳实践

  1. 从不硬编码凭据 -使用环境变量或机密管理
  2. 以非root身份运行 -Dockerfile创建并使用非root用户
  3. 使用只读数据库用户 -仅授予SELECT权限
  4. 启用速率限制 -安全版本实现了这一点
  5. 审核日志记录 -记录所有工具调用以进行安全审查
  6. 输入验证 -所有查询在执行前都经过验证
  7. 网络限制 -限制容器网络访问
  8. 资源限制 -设置内存和CPU限制
  9. 定期更新 -保持依赖关系最新

故障排除

“连接被拒绝”错误

检查:

  • 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许可证-您可以自由使用和修改您的项目。

支持

如有疑问或问题:

  1. 查看博客文章以获取详细解释
  2. 查看代码注释
  3. 与MCP检查员一起进行测试,以隔离问题
  4. 检查Docker/PostgreSQL日志中的错误消息

快乐建筑! 🚀