返回市场
远程数据库MCP服务器

远程数据库MCP服务器

作者:jimmyshah832 星标更新:2025-07-27

项目介绍

远程数据库 MCP 服务器

这是一个提供数据库访问能力的模型上下文协议(MCP)服务器,并配备了一个由 LangChain 驱动的客户端进行智能查询处理。

特性

  • MCP 服务器:提供数据库工具和操作
  • LangChain 客户端:使用 Azure OpenAI 和 ReAct 代理进行智能工具使用
  • 异步支持:全面支持异步/等待以提高性能
  • 工具集成:MCP 工具与 LangChain 代理之间的无缝集成

设置

1. 安装依赖

pip install -r requirements.txt

2. 环境配置

复制 config.example.env 并配置你的 Azure OpenAI 设置:

cp config.example .env

所需环境变量:

  • AZURE_OPENAI_DEPLOYMENT_NAME:你的 Azure OpenAI 部署名称
  • AZURE_OPENAI_API_KEY:你的 Azure Open-OpenAI API 密钥
  • AZURE_OPENAI_ENDPOINT:你的 Azure OpenAI 终端 URL
  • AZURE_OPENAI_API_VERSION:API 版本(默认:2024-02-15-preview)

3. 使用方法

启动 MCP 服务器

python src/server.py

运行 LangChain 客户端

python src/client.py path/to/server.py

客户端将:

  1. 连接到 MCP 服务器
  2. 发现可用工具
  3. 创建一个带有这些工具的 ReAct 代理
  4. 开始交互式聊天循环

架构

MCPTool 类

  • 封装 MCP 工具以与 LangChain 一起工作
  • 处理异步工具执行
  • 提供适当的错误处理

MCPClient 类

  • 管理与 MCP 服务器的连接
  • 创建 LangChain ReAct 代理
  • 处理与工具集成的查询处理

依赖项

  • langchain-openai:Azure OpenAI 集成
  • langgraph:ReAct 代理实现
  • langchain-core:核心 LangChain 功能
  • mcp[cli]:模型上下文协议
  • python-dotenv:环境变量管理

示例用法

# 客户端会自动从 MCP 服务器发现工具
# 并创建一个可以智能使用它们的 ReAct 代理

# 启动客户端
client = MCPClient()
await client.connect_to_server("path/to/server.py")

# 提出问题,这些问题将使用可用工具
response = await client.process_query("显示数据库中的所有产品")
print(response)

部署到 Azure

你可以使用 Azure 容器应用(推荐)或 Azure 开发者 CLI(azd)将 MCP 服务器部署到 Azure。这两种方法都提供了可扩展的托管服务来运行你的应用程序。

方案 1:使用 Azure 开发者 CLI 快速部署(推荐)

最快捷的部署方式是使用 Azure 开发者 CLI,它会自动处理基础设施配置和部署。

前提条件

  1. 安装 Azure 开发者 CLI (azd)
  2. 安装 Azure CLI
  3. 拥有一个 Azure 订阅

部署步骤

  1. 初始化 azd 项目:

    azd init --template minimal
    
  2. 配置环境变量:

    将你的 .env 文件值复制到 azd 环境中:

    azd env set AZURE_OPENAI_DEPLOYMENT_NAME "<your-deployment-name>"
    azd env set AZURE_OPENAI_ENDPOINT "<your-openai-endpoint>"
    azd env set COSMOS_DB_ENDPOINT "<your-cosmos-endpoint>"
    azd env set COSMOS_DB_DATABASE "<your-database-name>"
    azd env set COSMOS_DB_CONTAINER "<your-container-name>"
    
  3. 部署到 Azure:

    azd up
    

    此命令将:

    • 配置 Azure 资源(容器应用、容器注册表等)
    • 构建并推送你的 Docker 镜像
    • 部署你的应用程序
    • 配置托管身份和 RBAC 权限

方案 2:手动部署到 Azure 容器应用

为了对部署过程有更多的控制,你可以手动使用 Azure CLI 进行部署。

准备前提条件

  1. 已安装并配置了 Azure CLI
  2. 本地已安装 Docker
  3. 一个 Azure 容器注册表(ACR)或 Docker Hub 账户

第一步:准备环境

  1. 登录到 Azure:

    az login
    az account set --subscription "<your-subscription-id>"
    
  2. 设置部署变量:

    RESOURCE_GROUP="rg-mcp-server"
    LOCATION="eastus"
    ACR_NAME="mcpserveracr$(date +%s)"
    CONTAINER_APP_ENV="mcp-server-env"
    CONTAINER_APP_NAME="mcp-server"
    IMAGE_NAME="remote-db-mcp-server"
    

第二步:创建 Azure 资源

  1. 创建资源组:

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. 创建 Azure 容器注册表:

    az acr create \
      --resource-group $RESOURCE_GROUP \
      --name $ACR_NAME \
      --sku Basic \
      --admin-enabled true
    
  3. 创建容器应用环境:

    az containerapp env create \
      --name $CONTAINER_APP_ENV \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

第三步:构建并推送容器镜像

  1. 登录到 Azure 容器注册表:

    az acr login --name $ACR_NAME
    
  2. 构建并推送 Docker 镜像:

    # 构建镜像
    docker build -t $ACR_NAME.azurecr.io/$IMAGE_NAME:latest .
    
    # 推送到 ACR
    docker push $ACR_NAME.azurecr.io/$IMAGE_NAME:latest
    

第四步:部署容器应用

  1. 创建容器应用:

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $CONTAINER_APP_ENV \
      --image $ACR_NAME.azurecr.io/$IMAGE_NAME:latest \
      --target-port 8000 \
      --ingress 'external' \
      --registry-server $ACR_NAME.azurecr.io \
      --min-replicas 1 \
      --max-replicas 3 \
      --cpu 0.25 \
      --memory 0.5Gi \
      --env-vars \
        AZURE_OPENAI_DEPLOYMENT_NAME="<your-deployment-name>" \
        AZURE_OPENAI_ENDPOINT="<your-openai-endpoint>" \
        AZURE_OPENAI_API_VERSION="2024-02-15-preview" \
        COSMOS_DB_ENDPOINT="<your-cosmos-endpoint>" \
        COSMOS_DB_DATABASE="<your-database-name>" \
        COSMOS_DB_CONTAINER="<your-container-name>"
    

第五步:配置托管身份(推荐)

对于生产部署,建议使用托管身份而不是 API 密钥:

  1. 启用系统分配的托管身份:

    az containerapp identity assign \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --system-assigned
    
  2. 授予 Azure OpenAI 权限:

    # 获取托管身份主体 ID
    PRINCIPAL_ID=$(az containerapp identity show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --query principalId \
      --output tsv)
    
    # 分配认知服务 OpenAI 用户角色
    az role assignment create \
      --role "Cognitive Services OpenAI User" \
      --assignee $PRINCIPAL_ID \
      --scope "<your-openai-resource-id>"
    
  3. 授予 Cosmos DB 权限:

    # 分配 Cosmos DB 内置数据贡献者角色
    az role assignment create \
      --role "Cosmos DB Built-in Data Contributor" \
      --assignee $PRINCIPAL_ID \
      --scope "<your-cosmos-db-resource-id>"
    
  4. 更新容器应用以移除 API 密钥:

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --remove-env-vars AZURE_OPENAI_API_KEY COSMOS_DB_KEY
    

第六步:验证部署

  1. 获取应用 URL:

    FQDN=$(az containerapp show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --query properties.configuration.ingress.fqdn \
      --output tsv)
    
    echo "应用 URL: https://$FQDN"
    
  2. 检查应用健康状况:

    curl -f https://$FQDN/health
    
  3. 查看应用日志:

    az containerapp logs show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --follow
    

安全最佳实践

  • 使用托管身份:始终优先使用托管身份而非 API 密钥进行认证
  • 安全存储秘密:在 Azure Key Vault 中存储敏感配置
  • 网络安全性:考虑使用私有终端连接数据库
  • 资源隔离:部署到专用资源组以便于管理
  • 监控:启用 Application Insights 进行监控和诊断

故障排除

  • 容器应用无法启动:使用 az containerapp logs show 查看日志
  • 认证问题:验证托管身份权限和角色分配
  • 网络连接:确保防火墙规则允许容器应用访问资源
  • 资源限制:监控 CPU 和内存使用情况,如有需要调整缩放参数

成本优化

  • 合理配置资源:从最小的 CPU/内存开始,根据使用情况进行扩展
  • 自动缩放:根据预期负载配置合适的最小/最大副本数
  • 资源清理:使用 az group delete 删除不再需要的所有资源