天气查询服务

基于FastMCP和FastAPI的天气查询服务,提供MCP和HTTP端点,适用于Azure Container Apps的无服务器部署。

  • by galois17
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 galois17/azure-container-apps-mcp-server-demo

使用说明

MCP——Azure上的FastMCP+FastAPI

该项目是模型上下文协议(MCP)的演示,使用 FastMCP 以及轻量级的FastAPI桥。

它展示了简单的天气工具,如 get_forecast 通过MCP和标准HTTP端点,它被设计用于部署在Azure容器应用程序上,这是一个无服务器平台,在空闲时可扩展到零。


特性

  • FastMCP服务器(mcp_weather.py)

    • 通过提供MCP工具 stdio 运输。
    • 包括a get_forecast(latitude, longitude) 查询美国国家气象局API的工具。
  • FastAPI桥(main.py)

    • 将MCP工具封装到REST端点中以进行测试或集成。
    • 示例端点:
      GET /get_forecast?latitude=42.36&longitude=-71.06
      
  • 云部署

    • 集装箱化 uv Python 3.11。
    • 可通过无服务器自动扩展部署到Azure容器应用程序。

地方发展

# Install dependencies
uv venv
uv sync

uv run python main.py

在浏览器中打开:

http://localhost:8000/get_forecast?latitude=42.36&longitude=-71.06
docker build -t test-mcp-app .
docker run -p 8000:8000 test-mcp-app

测试端点:

curl "http://localhost:8000/get_forecast?latitude=42.36&longitude=-71.06"

部署到Azure(无服务器)

# Login to Azure
az login

# Create a resource group
az group create --name TestResourceGroup --location eastus2

# Create a container registry (Basic tier is cheapest)
az acr create \
  --name mcpdemoacr \
  --resource-group TestResourceGroup \
  --sku Basic

# Log in to the container registry
az acr login --name mcpdemoacr

# Build the Docker image locally
docker build -t test-mcp-app .

# Tag and push the image to ACR
docker tag test-mcp-app mcpdemoacr.azurecr.io/test-mcp-app:v1
docker push mcpdemoacr.azurecr.io/test-mcp-app:v1

# Create a Container Apps environment (serverless)
az containerapp env create \
  --name MCPDemoEnv \
  --resource-group TestResourceGroup \
  --location eastus2

# Create the Container App (serverless, scales to zero)
az containerapp create \
  --name test-mcp-app \
  --resource-group TestResourceGroup \
  --environment MCPDemoEnv \
  --image mcpdemoacr.azurecr.io/test-mcp-app:v1 \
  --target-port 8000 \
  --ingress external \
  --min-replicas 0 \
  --max-replicas 1 \
  --registry-server mcpdemoacr.azurecr.io \
  --registry-username $(az acr credential show --name mcpdemoacr --query "username" -o tsv) \
  --registry-password $(az acr credential show --name mcpdemoacr --query "passwords[0].value" -o tsv)


检索您的实时应用程序URL:

az containerapp show \
  --name test-mcp-app \
  --resource-group TestResourceGroup \
  --query "properties.configuration.ingress.fqdn" -o tsv