使用说明
Azure MCP服务器(Python版)
用于Azure云和Azure DevOps的生产就绪模型上下文协议(MCP)服务器,使用Python为DevOps团队构建。
🚀 特性
🛡️ 安全第一:100%只读
此服务器无法在Azure中删除、修改或创建任何内容。所有操作都是只读的。
Azure云资源
- ✅ 列出资源组
- ✅ 跨多个Azure帐户列出和管理订阅
- ✅ 管理AKS集群(列表、获取详细信息、自动缩放器信息)
- ✅ 存储帐户操作(列表、详细信息、容器)
- ✅ 密钥保管库管理(列出保管库,获取详细信息)
- ✅ 数据库服务(Azure SQL、Cosmos DB、MySQL、PostgreSQL)
Kubernetes操作(AKS)
- ✅ 列出AKS集群中的命名空间
- ✅ 使用标签过滤查询吊舱(例如,查找气流吊舱)
- ✅ 检索pod日志以进行调试
- ✅ 列出部署和服务
- ✅ 监控吊舱健康状况和状态
Azure 登录 ID(Azure AD)
- ✅ 列出并搜索Azure AD组
- ✅ 获取详细的组信息
- ✅ 列出具有OData筛选的用户
- ✅ 列出服务负责人
Azure DevOps
- ✅ 项目和团队管理
- ✅ 管道监控和执行历史
- ✅ 存储库操作
- ✅ 与审阅者一起进行请求跟踪
- ✅ 团队列表和详细信息
- ✅ 分支政策(所需的审阅者、构建验证等)
- ✅ 分支权限和ACL
生产就绪
- ✅ 通过重试进行全面的错误处理
- ✅ 结构化日志记录
structlog - ✅ 全程键入提示
- ✅ 70%+测试覆盖率
- ✅ Docker支持
- ✅ 多种身份验证方法
- ✅ 使用Pydantic进行输入验证
📋 先决条件
- Python 3.11或更高版本
- 诗歌(推荐)或pip
- Azure订阅
- Azure CLI(用于本地开发)
- (可选)Azure DevOps组织和PAT
- (可选)Node.js/npx(用于官方Azure MCP)
🚀 快速启动(新机器设置)
# 1. Clone and navigate
git clone https://github.com/nomadicmehul/azure-mcp-server.git
cd azure-mcp-server
# 2. Run automated setup (installs everything + Azure login)
./scripts/setup.sh
# 3. Verify installation
make test
# 4. Start the server
poetry run azure-mcp-server
就是这样! 安装脚本处理:
- 诗歌装置和依赖关系
- Azure登录和订阅选择
- 可选:服务主体创建
- 可选:带PAT令牌的Azure DevOps配置
🔧 安装
使用诗歌(推荐)
# Clone the repository
git clone https://github.com/nomadicmehul/azure-mcp-server.git
cd azure-mcp-server
# Install dependencies
poetry install
# Set up environment
cp .env.example .env
# Edit .env with your Azure credentials
使用pip
# Install from source
pip install -e .
# Or install from PyPI (when published)
pip install azure-mcp-server
使用Make
# Install all dependencies
make install
# Set up environment file
make setup-env
# Validate configuration
make validate
⚙️ 配置
环境变量
创建一个 .env 项目根目录中的文件:
# Required
AZURE_SUBSCRIPTION_ID=your-subscription-id
# Optional: Service Principal (for production)
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
# Optional: Azure DevOps
AZURE_DEVOPS_ORG=your-org-name
AZURE_DEVOPS_PAT=your-personal-access-token
# Server settings
LOG_LEVEL=INFO
ENABLE_CACHE=true
CACHE_TTL=300
创建Azure DevOps PAT令牌
如果你想使用Azure DevOps功能,你需要一个个人访问令牌:
- 首选
https://dev.azure.com/{your-org}/_usersSettings/tokens - 点击 “新令牌”
- 选择以下范围:
- 代码:阅读
- 构建:阅读
- 项目和团队:阅读
- 图:阅读
- 身份:阅读
- 复制令牌并将其添加到您的
.env文件
备注Azure DevOps是可选的。如果未配置,则只有Azure资源工具可用。
身份验证方法
服务器支持多种身份验证方法(按优先级顺序):
-
服务主体 (生产)
export AZURE_TENANT_ID="..." export AZURE_CLIENT_ID="..." export AZURE_CLIENT_SECRET="..." -
Azure命令行界面 (发展)
az login az account set --subscription "your-subscription-id" -
管理身份 (Azure资源)
- 在Azure虚拟机、AKS、应用服务、容器实例上自动工作
🚀 用法
运行服务器
# Using Poetry
poetry run azure-mcp-server
# Using Make
make run
# Direct Python
python -m azure_mcp_server.main
Claude桌面集成
添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
选项1:同时使用官方服务器和自定义服务器(推荐)
{
"mcpServers": {
"azure-official": {
"command": "npx",
"args": [
"-y",
"@azure/mcp@latest",
"server",
"start",
"--read-only"
]
},
"azure-devops": {
"command": "/Users/yourusername/.local/bin/poetry",
"args": [
"-C",
"/path/to/azure-mcp-server",
"run",
"azure-mcp-server"
]
}
}
}
选项2:仅限自定义服务器(适用于Kubernetes/DevOps)
{
"mcpServers": {
"azure": {
"command": "/Users/yourusername/.local/bin/poetry",
"args": [
"-C",
"/path/to/azure-mcp-server",
"run",
"azure-mcp-server"
]
}
}
}
为什么两者都用?
azure-official:常规Azure资源(官方支持)azure-devops:Kubernetes、Azure DevOps、Entra ID(自定义功能)
注: 服务器会自动从以下位置读取配置:
.env项目目录中的文件(Azure订阅ID、DevOps PAT等)- Azure CLI会话(
az login) - 系统环境变量
无需在Claude的配置文件中指定凭据。
更新配置后重新启动Claude Desktop。
Claude中的查询示例
一旦与Claude Desktop集成,您可以提出以下问题:
Kubernetes操作:
- “列出我的prod集群中air命名空间中的所有Pod”
- “显示调度程序pod的日志”
- “与气流相关的吊舱正在运行什么?(使用标签:app=Airflow)”
- “列出默认命名空间中的所有部署”
Azure资源:
- “列出我订阅中的所有AKS集群”
- “显示prod资源组中的存储帐户”
- “我的生产AKS集群的详细信息是什么?”
- “列出我的所有Azure订阅”
- “显示安全资源组中的所有密钥库”
- “列出保险库中的秘密https://myvault.vault.azure.net/"
- “在所有密钥库中搜索秘密的‘数据库密码’”
- “在prod资源组中查找包含‘api密钥’的机密”
- “列出我的订阅中的所有SQL服务器”
- “我们有哪些Cosmos DB帐户?”
- “列出数据库资源组中的MySQL服务器”
Azure AD:
- “列出所有Azure AD组”
- “显示工程部门的用户”
- “我们有哪些服务负责人?”
Docker部署
# Build image
make docker-build
# Run container
make docker-run
# View logs
make docker-logs
# Stop container
make docker-stop
🧪 发展
运行测试
# Run all tests
make test
# Run with coverage
make test-cov
# Run specific test file
poetry run pytest tests/test_auth.py -v
代码质量
# Format code
make format
# Run linters
make lint
# Type checking
poetry run mypy src/
项目结构
azure-mcp-server/
├── src/azure_mcp_server/ # Main source code
│ ├── main.py # MCP server entry point
│ ├── config.py # Configuration management
│ ├── logging.py # Structured logging
│ ├── azure/
│ │ └── auth.py # Azure authentication
│ └── tools/
│ ├── aks.py # AKS operations
│ ├── storage.py # Storage operations
│ ├── devops.py # DevOps operations
│ ├── entra.py # Azure AD/Entra ID operations
│ └── kubernetes.py # Kubernetes operations
├── tests/ # Test suite
│ ├── conftest.py
│ ├── test_aks.py
│ ├── test_auth.py
│ └── test_config.py
├── scripts/ # Setup and utility scripts
│ ├── setup.sh # Full project setup
│ ├── azure-setup.sh # Azure configuration
│ ├── quick-login.sh # Quick Azure login
│ └── validate-azure.sh # Validate configuration
├── .github/workflows/ # CI/CD pipeline
├── .env.example # Environment template
├── .gitignore # Git ignore rules
├── pyproject.toml # Poetry dependencies
├── Dockerfile # Container image
├── docker-compose.yml # Docker orchestration
├── Makefile # Development shortcuts
├── LICENSE # MIT License
└── README.md # Documentation
📚 可用工具
Azure订阅(2个工具)
list_subscriptions-列出您帐户可访问的所有Azure订阅get_subscription_details-获取特定订阅的详细信息
多订阅支持:您现在可以查看和使用所有Azure订阅中的资源!
Azure资源(共15个工具)
资源组
list_resource_groups-列出订阅中的所有资源组
AKS集群
list_aks_clusters-在资源组中列出AKS集群get_aks_cluster_details-获取详细的集群信息
存储
list_storage_accounts-列出存储帐户get_storage_account_details-获取帐户详细信息list_blob_containers-列出blob容器
钥匙库
list_key_vaults-列出资源组或订阅中的密钥库get_key_vault_details-获取详细的密钥库信息,包括策略和网络ACLlist_vault_secrets-在密钥库中列出秘密名称和元数据(不返回秘密值)search_secret_across_vaults-在所有密钥库中按名称搜索机密(仅限元数据)
数据库
list_sql_servers-列出资源组或订阅中的Azure SQL服务器list_sql_databases-列出Azure SQL server中的数据库list_cosmos_accounts-列出Cosmos数据库帐户list_mysql_servers-列出MySQL灵活服务器list_postgresql_servers-列出PostgreSQL灵活服务器
Kubernetes(AKS)-5个工具
list_k8s_namespaces-列出AKS集群中的所有命名空间list_k8s_pods-在命名空间中列出Pod(支持Airflow等应用程序的标签过滤)get_k8s_pod_logs-从特定pod获取日志list_k8s_deployments-列出命名空间中的部署list_k8s_services-在命名空间中列出服务
例子: 查询气流吊舱 label_selector: "app=airflow"
Azure Entra ID(Azure AD)-4个工具
list_entra_groups-列出具有可选OData筛选的Azure AD组get_entra_group_details-获取特定组的详细信息list_entra_users-列出具有可选筛选的Azure AD用户list_service_principals-列出服务负责人
例子: 按部门筛选用户: filter: "department eq 'Engineering'"
Azure DevOps(可选)-8个工具
list_devops_projects-列出所有DevOps项目list_pipelines-列出项目中的管道get_pipeline_runs-获取最近的管道运行list_repositories-列出Git存储库get_pull_requests-获取审阅者的拉取请求list_teams-列出项目或组织中的团队get_branch_policies-获取分支策略(所需的审阅者、构建验证等)get_branch_permissions-获取存储库的分支权限和ACL
注: 需要 AZURE_DEVOPS_ORG 和 AZURE_DEVOPS_PAT 在.env中
🔒 安全
只读操作(无删除/修改权限)
🛡️ 此MCP服务器设计为100%只读:
- ❌ 无法创建 Azure资源
- ❌ 无法删除 任何东西(Pod、集群、存储等)
- ❌ 无法修改 配置
- ❌ 无法重新启动 或停止服务
- ❌ 无法缩放 部署
- ✅ 仅阅读 来自Azure的信息
所有工具都是只读的:
list_*-仅列出资源get_*-仅检索信息- 不存在写入、更新、删除或修改操作
安全功能
- ✅ 没有硬编码凭据
- ✅ 多种身份验证方法
- ✅ 默认情况下为只读操作 (并强制执行)
- ✅ 所有参数的输入验证
- ✅ 结构化错误处理
- ✅ 安全的秘密管理
- ✅ 不可能进行破坏性操作
- ✅ 密钥库秘密:仅列出秘密名称,从不返回实际秘密值
这个服务器不能做什么?
Azure资源:
- ❌ 创建/删除资源组
- ❌ 创建/删除AKS集群
- ❌ 修改存储帐户
- ❌ 删除blob容器
密钥库安全:
- ✅ 可以列出秘密名称和元数据
- ❌ 无法检索实际的秘密值
- ❌ 无法创建或删除机密
- ❌ 无法修改机密值或权限
- ✅ 只提供对存在的秘密的可见性
- ❌ 更改权限
库贝内特斯:
- ❌ 删除Pod或部署
- ❌ 扩展部署
- ❌ 重新启动Pod
- ❌ 修改配置
- ❌ 应用YAML清单
- ✅ 仅查看日志(只读)
Azure AD:
- ❌ 创建/删除用户或组
- ❌ 修改权限
- ❌ 更改组成员资格
Azure DevOps:
- ❌ 触发管道运行
- ❌ 批准/拒绝PR
- ❌ 修改存储库设置
这个服务器能做什么?
✅ 仅阅读并遵守:
- 列出并查看Azure资源
- 查询Kubernetes Pod和日志
- 检查Azure AD用户和组
- 监控Azure DevOps管道
- 获取有关资源的详细信息
非常适合: 监控、故障排除、盘点、记录和观察,没有意外更改的风险。
🐛 故障排除
常见问题
1.未找到诗歌
# Install Poetry
curl -sSL https://install.python-poetry.org | python3 -
export PATH="$HOME/.local/bin:$PATH"
2.身份验证问题
# Verify Azure CLI login
az account show
# Re-login
az login
az account set --subscription "your-subscription-id"
# Test authentication
poetry run python -c "from azure_mcp_server.azure.auth import AzureAuth; from azure_mcp_server.config import get_config; import asyncio; auth = AzureAuth(get_config()); asyncio.run(auth.validate())"
3.Kubernetes工具失败
# Verify AKS access
az aks get-credentials --resource-group your-rg --name your-cluster
# Test kubectl access
kubectl get namespaces
4.配置问题
# Validate entire setup
make validate
# Or use the validation script
./scripts/validate-azure.sh
5.克劳德桌面未连接
- 验证诗歌路径:
which poetry(在配置中使用完整路径) - 检查日志:
tail -f ~/Library/Logs/Claude/mcp*.log - 完全重新启动克劳德桌面(Cmd+Q,然后重新打开)
- 验证
.env文件存在于项目根目录中,文件名为AZURE_SUBSCRIPTION_ID - 确保Claude配置中的项目路径与实际位置匹配
新机器上的新安装
# One-command setup
git clone <repo> && cd azure-mcp-server && ./scripts/setup.sh
这将运行完整的设置:诗歌安装、依赖关系、Azure登录、配置和验证。
🔄 部署场景
开发机器
# Quick setup
./scripts/setup.sh
# Daily use
poetry run azure-mcp-server
CI/CD管道
# Use Service Principal
export AZURE_TENANT_ID="..."
export AZURE_CLIENT_ID="..."
export AZURE_CLIENT_SECRET="..."
export AZURE_SUBSCRIPTION_ID="..."
# Install and run
poetry install
poetry run pytest
Docker容器
# Build and run
docker-compose up -d
# Or use Make
make docker-build
make docker-run
生产服务器
# Use environment variables (no .env file)
export AZURE_SUBSCRIPTION_ID="..."
export AZURE_TENANT_ID="..."
export AZURE_CLIENT_ID="..."
export AZURE_CLIENT_SECRET="..."
# Run as systemd service
sudo systemctl start azure-mcp-server
🤝 贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 进行更改
- 添加测试
- 运行过梁和测试(
make lint test) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
📄 许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
🙏 致谢
- 建于 MCP-SDK
- 用途 Azure Python SDK
- 受到DevOps最佳实践的启发
📞 支持
由...制作❤️ DevOps爱好者