远程DB MCP服务器
一种提供数据库访问功能的模型上下文协议(MCP)服务器,具有用于智能查询处理的LangChain客户端。
特性
- MCP服务器:提供数据库工具和操作
- 朗链客户端:使用Azure OpenAI和ReAct代理进行智能工具使用
- 异步支持:完全支持async/await以获得更好的性能
- 工具集成:MCP工具和LangChain代理之间的无缝集成
设置
1.安装依赖项
pip install -r requirements.txt2.环境配置
复制 config.example 向 .env 并配置您的Azure OpenAI设置:
cp config.example .env所需的环境变量:
AZURE_OPENAI_DEPLOYMENT_NAME:您的Azure OpenAI部署名称AZURE_OPENAI_API_KEY:您的Azure OpenAI API密钥AZURE_OPENAI_ENDPOINT:您的Azure OpenAI端点URLAZURE_OPENAI_API_VERSION:API版本(默认:2024-02-15-preview)
3.使用方法
启动MCP服务器
python src/server.py运行LangChain客户端
python src/client.py path/to/server.py客户将:
- 连接到MCP服务器
- 发现可用工具
- 使用工具创建ReAct代理
- 启动交互式聊天循环
建筑
MCPTool类
- 包装MCP工具以与LangChain配合使用
- 处理异步工具执行
- 提供正确的错误处理
MCP客户端类
- 管理与MCP服务器的连接
- 创建LangChain ReAct代理
- 通过工具集成处理查询
依赖项
langchain-openai:Azure OpenAI集成langgraph:重新代理实施langchain-core:核心LangChain功能mcp[cli]:模型上下文协议python-dotenv:环境变量管理
示例用法
# The client automatically discovers tools from the MCP server
# and creates a ReAct agent that can use them intelligently
# Start the client
client = MCPClient()
await client.connect_to_server("path/to/server.py")
# Ask questions that will use the available tools
response = await client.process_query("Show me all products in the database")
print(response)部署到Azure
您可以使用Azure容器应用程序(推荐)或Azure Developer CLI(azd)将MCP服务器部署到Azure。这两种方法都为您的应用程序提供了可扩展的托管托管。
选项1:使用Azure Developer CLI快速部署(推荐)
最快的部署方式是使用Azure Developer CLI,它自动处理基础设施的配置和部署。
先决条件
- 安装 Azure开发者命令行界面(azd)
- 安装 Azure命令行界面
- 拥有Azure订阅
部署步骤
- 初始化azd项目:
azd init --template minimal- 配置环境变量:
复制您的 .env 将文件值保存到azd环境:
azd env set AZURE_OPENAI_DEPLOYMENT_NAME ""
azd env set AZURE_OPENAI_ENDPOINT ""
azd env set COSMOS_DB_ENDPOINT ""
azd env set COSMOS_DB_DATABASE ""
azd env set COSMOS_DB_CONTAINER ""- 部署到Azure:
azd up此命令将:
- 提供Azure资源(容器应用程序、容器注册表等) - 构建并推送你的Docker镜像 - 部署您的应用程序 - 配置托管身份和RBAC权限
选项2:使用Azure容器应用程序手动部署
为了更好地控制部署过程,您可以使用Azure CLI手动部署。
设置先决条件
- 已安装并配置Azure CLI
- 本地安装Docker
- Azure容器注册表(ACR)或Docker Hub帐户
第一步:准备好你的环境
- 登录到Azure:
az login
az account set --subscription ""- 设置部署变量:
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"步骤2:创建Azure资源
- 创建资源组:
az group create --name $RESOURCE_GROUP --location $LOCATION- 创建Azure容器注册表:
az acr create \
--resource-group $RESOURCE_GROUP \
--name $ACR_NAME \
--sku Basic \
--admin-enabled true- 创建容器应用程序环境:
az containerapp env create \
--name $CONTAINER_APP_ENV \
--resource-group $RESOURCE_GROUP \
--location $LOCATION步骤3:构建并推送容器映像
- 登录到Azure容器注册表:
az acr login --name $ACR_NAME- 构建并推送Docker镜像:
# Build the image
docker build -t $ACR_NAME.azurecr.io/$IMAGE_NAME:latest .
# Push to ACR
docker push $ACR_NAME.azurecr.io/$IMAGE_NAME:latest步骤4:部署容器应用程序
- 创建容器应用程序:
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="" \
AZURE_OPENAI_ENDPOINT="" \
AZURE_OPENAI_API_VERSION="2024-02-15-preview" \
COSMOS_DB_ENDPOINT="" \
COSMOS_DB_DATABASE="" \
COSMOS_DB_CONTAINER=""步骤5:配置托管身份(推荐)
对于生产部署,请使用托管标识而不是API密钥:
- 启用系统分配的托管标识:
az containerapp identity assign \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--system-assigned- 授予Azure OpenAI权限:
# Get the managed identity principal ID
PRINCIPAL_ID=$(az containerapp identity show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--query principalId \
--output tsv)
# Assign Cognitive Services OpenAI User role
az role assignment create \
--role "Cognitive Services OpenAI User" \
--assignee $PRINCIPAL_ID \
--scope ""- 授予Cosmos DB权限:
# Assign Cosmos DB Built-in Data Contributor role
az role assignment create \
--role "Cosmos DB Built-in Data Contributor" \
--assignee $PRINCIPAL_ID \
--scope ""- 更新容器应用程序以删除API密钥:
az containerapp update \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--remove-env-vars AZURE_OPENAI_API_KEY COSMOS_DB_KEY步骤6:验证部署
- 获取应用程序URL:
FQDN=$(az containerapp show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--query properties.configuration.ingress.fqdn \
--output tsv)
echo "Application URL: https://$FQDN"- 检查应用程序运行状况:
curl -f https://$FQDN/health- 查看应用程序日志:
az containerapp logs show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--follow安全最佳实践
- 使用托管身份:对于身份验证,始终首选托管身份而不是API密钥
- 安全的秘密:将敏感配置存储在Azure密钥库中
- 网络安全:考虑使用私有端点进行数据库连接
- 资源隔离:部署到专用资源组以便于管理
- 监控:启用Application Insights进行监控和诊断
故障排除
- 容器应用程序未启动:使用检查日志
az containerapp logs show - 身份验证问题:验证托管身份权限和角色分配
- 网络连接:确保防火墙规则允许容器应用程序访问资源
- 资源限制:监控CPU和内存使用情况,必要时调整缩放参数
成本优化
- 适当大小的资源:从最小的CPU/内存开始,并根据使用情况进行扩展
- 自动缩放:根据预期负载配置适当的最小/最大副本
- 资源清理:使用
az group delete在不再需要时删除所有资源
