使用说明
远程DB MCP服务器
一种提供数据库访问功能的模型上下文协议(MCP)服务器,具有用于智能查询处理的LangChain客户端。
特性
- MCP服务器:提供数据库工具和操作
- 朗链客户端:使用Azure OpenAI和ReAct代理进行智能工具使用
- 异步支持:完全支持async/await以获得更好的性能
- 工具集成: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 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 "<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>" -
部署到Azure:
azd up此命令将:
- 提供Azure资源(容器应用程序、容器注册表等)
- 构建并推送你的Docker镜像
- 部署您的应用程序
- 配置托管身份和RBAC权限
选项2:使用Azure容器应用程序手动部署
为了更好地控制部署过程,您可以使用Azure CLI手动部署。
设置先决条件
- 已安装并配置Azure CLI
- 本地安装Docker
- Azure容器注册表(ACR)或Docker Hub帐户
第一步:准备好你的环境
-
登录到Azure:
az login az account set --subscription "<your-subscription-id>" -
设置部署变量:
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="<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>"
步骤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 "<your-openai-resource-id>" -
授予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 "<your-cosmos-db-resource-id>" -
更新容器应用程序以删除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在不再需要时删除所有资源