使用说明
Azure容器应用程序上的MCP Hello World
构建此MCP服务器并将其部署到Azure的快速指南,然后验证它是否可访问。
这部署了什么
- 蟒蛇
FastMCP服务器从server/server.py - 集装箱化
server/Dockerfile - 托管在Azure容器应用程序上,端口上有外部入口
8000
先决条件
- Azure命令行界面
- Docker 桌面版
- 已登录到Azure:
az login
1) 设置变量
RG="mcp-rg"
LOCATION="centralus"
ACR_NAME="mcphelloworldacr2" # must be globally unique
ENV_NAME="mcp-env"
APP_NAME="mcp-hello-world"
IMAGE_NAME="mcp-hello-world:latest"
2) 创建资源组+注册表
az group create --name "$RG" --location "$LOCATION"
az acr create \
--resource-group "$RG" \
--name "$ACR_NAME" \
--sku Basic \
--admin-enabled true
3) 构建并推送镜像(linux/amd64)
从 server 目录:
cd server
az acr login --name "$ACR_NAME"
docker build --platform linux/amd64 -t mcp-hello-world:latest .
docker tag mcp-hello-world:latest "$ACR_NAME.azurecr.io/$IMAGE_NAME"
docker push "$ACR_NAME.azurecr.io/$IMAGE_NAME"
重要提示:使用
--platform linux/amd64以避免Azure容器应用程序映像平台错误。
4) 创建容器应用程序环境
az containerapp env create \
--name "$ENV_NAME" \
--resource-group "$RG" \
--location "$LOCATION"
5) 部署容器应用程序
az containerapp create \
--name "$APP_NAME" \
--resource-group "$RG" \
--environment "$ENV_NAME" \
--image "$ACR_NAME.azurecr.io/$IMAGE_NAME" \
--registry-server "$ACR_NAME.azurecr.io" \
--target-port 8000 \
--ingress external \
--min-replicas 1 \
--max-replicas 3 \
--cpu 0.25 \
--memory 0.5Gi
6) 获取URL
FQDN=$(az containerapp show \
--name "$APP_NAME" \
--resource-group "$RG" \
--query properties.configuration.ingress.fqdn \
--output tsv)
echo "https://$FQDN"
7) 验证MCP是否响应
检查端点行为:
curl -i "https://$FQDN/mcp"
预期:如果缺少标头,则会出现协议级错误(这仍然是MCP处于活动状态的好兆头)。
测试MCP初始化请求:
SESSION_ID=$(curl -sS -D - -o /dev/null \
-H "Accept: text/event-stream" \
"https://$FQDN/mcp" \
| awk 'BEGIN{IGNORECASE=1} /^mcp-session-id:/ {print $2}' | tr -d '\r')
curl -sS -X POST "https://$FQDN/mcp" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
--data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl-test","version":"1.0"}}}'
预期:JSON-RPC initialize 使用服务器信息进行响应(例如 hello-world-server).
注释/陷阱
- 如果
az acr build在您的订阅、本地Docker构建中被阻止+docker push作品。 - 根路径(
/)可能会回来404并且仍然保持健康。 - 在此部署中,MCP在
/mcp(不是/sse).
