Azure MCP服务器

一个用于Azure Cloud和Azure DevOps的生产级模型上下文协议(MCP)服务器,专为DevOps团队设计,提供只读访问和管理功能。

  • by nomadicmehul
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 nomadicmehul/Azure-MCP-Server

使用说明

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功能,你需要一个个人访问令牌:

  1. 首选 https://dev.azure.com/{your-org}/_usersSettings/tokens
  2. 点击 “新令牌”
  3. 选择以下范围:
    • 代码:阅读
    • 构建:阅读
    • 项目和团队:阅读
    • 图:阅读
    • 身份:阅读
  4. 复制令牌并将其添加到您的 .env 文件

备注Azure DevOps是可选的。如果未配置,则只有Azure资源工具可用。

身份验证方法

服务器支持多种身份验证方法(按优先级顺序):

  1. 服务主体 (生产)

    export AZURE_TENANT_ID="..."
    export AZURE_CLIENT_ID="..."
    export AZURE_CLIENT_SECRET="..."
    
  2. Azure命令行界面 (发展)

    az login
    az account set --subscription "your-subscription-id"
    
  3. 管理身份 (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 -获取详细的密钥库信息,包括策略和网络ACL
  • list_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

🤝 贡献

欢迎投稿!拜托:

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 进行更改
  4. 添加测试
  5. 运行过梁和测试(make lint test)
  6. 提交您的更改(git commit -m 'Add amazing feature')
  7. 推到分支(git push origin feature/amazing-feature)
  8. 打开拉取请求

📄 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。

🙏 致谢

📞 支持


由...制作❤️ DevOps爱好者