这是一个提供数据库访问能力的模型上下文协议(MCP)服务器,并配备了一个由 LangChain 驱动的客户端进行智能查询处理。
pip install -r requirements.txt
复制 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 终端 URLAZURE_OPENAI_API_VERSION:API 版本(默认:2024-02-15-preview)python src/server.py
python src/client.py path/to/server.py
客户端将:
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 开发者 CLI(azd)将 MCP 服务器部署到 Azure。这两种方法都提供了可扩展的托管服务来运行你的应用程序。
最快捷的部署方式是使用 Azure 开发者 CLI,它会自动处理基础设施配置和部署。
初始化 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 CLI 进行部署。
登录到 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"
创建资源组:
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
登录到 Azure 容器注册表:
az acr login --name $ACR_NAME
构建并推送 Docker 镜像:
# 构建镜像
docker build -t $ACR_NAME.azurecr.io/$IMAGE_NAME:latest .
# 推送到 ACR
docker push $ACR_NAME.azurecr.io/$IMAGE_NAME:latest
创建容器应用:
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 密钥:
启用系统分配的托管身份:
az containerapp identity assign \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--system-assigned
授予 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>"
授予 Cosmos DB 权限:
# 分配 Cosmos DB 内置数据贡献者角色
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
获取应用 URL:
FQDN=$(az containerapp show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--query properties.configuration.ingress.fqdn \
--output tsv)
echo "应用 URL: https://$FQDN"
检查应用健康状况:
curl -f https://$FQDN/health
查看应用日志:
az containerapp logs show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--follow
az containerapp logs show 查看日志az group delete 删除不再需要的所有资源