Spotify MCP运维就绪(Azure容器应用+地形)
基于FastMCP的服务器,通过MCP公开Spotify+Last.fm工具,部署到 Azure容器应用 随着 地形.
- 私人集装箱登记处
- 托管身份(无注册表密码)
- 密钥保管库机密+RBAC(代码中没有API密钥)
- 日志分析工作区+容器应用程序环境
存储库布局
client/ # Python MCP client (talks to the deployed MCP server)
server/ # FastMCP server + Dockerfile (port 8080)
infra/ # Terraform: Azure Container Apps, ACR, Key Vault, RBAC, etc.
docs/ # Runbooks / structure notes (see docs/app-structure.md and docs/terraform-files.md)MCP工具暴露
search_spotifyartist_top_trackscurrent_user_profilecurrent_user_top_tracksget_current_user_playlistsget_playlist_itemscreate_playlistadd_to_playlistget_similar_tracks(Last.fm)get_similar_artists(Last.fm)start_playbackpause_playback
所需的Spotify OAuth作用域(刷新令牌)
- 用户资料和热门曲目:
user-read-private,user-read-email,user-top-read - 播放列表(已读):
playlist-read-private,playlist-read-collaborative - 播放列表(写入):
playlist-modify-public,playlist-modify-private - 播放控制:
user-modify-playback-state,user-read-playback-state,user-read-currently-playing
先决条件
- Azure命令行界面(
az)+已登录(az login) - 地形
- 构建/推送镜像的Docker守护进程
- Spotify+Last.fm API证书
部署(Azure)
1) 创建Azure资源(Terraform)
自 infra/,最简单的方法是先创建注册表,推送映像,然后部署容器应用程序:
terraform init
terraform apply -target=azurerm_container_registry.main注: infra/terraform.tfvars 被忽视了。把你的敏感值放在那里(或使用 TF_VAR_... env变量)。
2) 构建+将容器映像推送到ACR
ACR_SERVER="$(terraform -chdir=infra output -raw acr_login_server)"
IMAGE="$ACR_SERVER/spotify-mcp:1"
docker buildx build --platform linux/amd64 -t "$IMAGE" -f server/Dockerfile server --push3) 部署全栈(密钥库机密+容器应用程序)
terraform -chdir=infra apply4) 确认端点
URL="$(terraform -chdir=infra output -raw container_app_url)"
echo "$URL"在部署的服务器上运行客户端
export MCP_URL="$(terraform -chdir=infra output -raw container_app_url)"
export GOOGLE_API_KEY="..."
cd client
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python client.py