街机蔚蓝devops mcp
用于Azure DevOps的MCP服务器 Arcade.dev。使AI助手能够与Azure DevOps项目、工作项、存储库、管道、wiki等进行交互。
特性
21工具 涵盖:
- 核心:列出项目、团队、搜索身份
- 工作项:获取、创建、更新、查询工作项;添加注释
- 仓库:列出仓库、分支、拉取请求;创建PR
- 管道:列出定义、版本;队列构建;运行管道
- 维基:列出wiki,获取wiki页面
- 搜索:跨存储库搜索代码
快速开始
1.安装依赖项
uv sync2.配置凭据
提供Azure DevOps凭据有两种选择:
选项A:环境变量(.env 文件)
复制示例环境文件并添加您的凭据:
cp .env.example .env编辑 .env:
AZURE_DEVOPS_ORG=your-organization-name
AZURE_DEVOPS_PAT=your-personal-access-token选项B:街机秘密(建议用于制作)
如果没有 .env 如果找到文件或环境变量,服务器会自动回退到 街机秘密这非常适合:
- 向Arcade市场发布
- 共享工具包而不暴露凭据
- 通过Arcade Deploy进行生产部署
在Arcade中配置机密:
# Login to Arcade
arcade login
# Set your secrets
arcade secrets set AZURE_DEVOPS_ORG "your-organization-name"
arcade secrets set AZURE_DEVOPS_PAT "your-personal-access-token"或通过配置 街机仪表板.
它是如何工作的:
- 服务器首先检查环境变量
- 如果未找到,请通过以下方式向Arcade Cloud请求机密
context.get_secret() - Arcade提示用户授权秘密访问(仅限第一次)
3.创建个人访问令牌(PAT)
- 首选
https://dev.azure.com/{your-org}/_usersSettings/tokens - 点击“新建令牌”
- 选择范围:代码(读取/写入)、工作项(读取/写)、构建(读取/执行)、Wiki(读取/编写)
- 复制令牌
4.运行MCP服务器
# stdio transport (default) - for Claude Desktop, CLI tools
uv run server.py stdio
# http transport - for Cursor, VS Code
uv run server.py http对于HTTP传输,请在上查看API文档http://127.0.0.1:8000/docs
配置MCP客户端
光标IDE
arcade configure cursor或手动添加到 .cursor/mcp.json:
对于环境变量:
{
"mcpServers": {
"azure-devops": {
"command": "uv",
"args": ["run", "server.py", "stdio"],
"cwd": "/path/to/arcade-azure-devops-mcp",
"env": {
"AZURE_DEVOPS_ORG": "your-org",
"AZURE_DEVOPS_PAT": "your-pat"
}
}
}
}使用Arcade Secrets(无本地凭据):
{
"mcpServers": {
"azure-devops": {
"command": "uv",
"args": ["run", "server.py", "stdio"],
"cwd": "/path/to/arcade-azure-devops-mcp"
}
}
}VS Code
arcade configure vscode克劳德桌面
arcade configure claude可用工具
| 类别 | 工具 | 描述 |
|---|---|---|
| 核心 | list_projects | 列出组织中的所有项目 |
get_project | 获取项目详细信息 | |
list_teams | 列出项目中的团队 | |
search_identities | 搜索用户/组 | |
| 工作项 | get_work_item | 按ID获取工作项 |
create_work_item | 创建新工作项 | |
update_work_item | 更新现有工作项 | |
run_work_item_query | 运行WIQL查询 | |
my_work_items | 获得分配给您的工作项 | |
add_work_item_comment | 向工作项添加注释 | |
| 回购协议 | list_repositories | 列出Git存储库 |
list_branches | 列出存储库中的分支 | |
list_pull_requests | 列出拉取请求 | |
create_pull_request | 创建新的PR | |
| 管道 | list_build_definitions | 列出管道定义 |
list_builds | 列表构建 | |
queue_build | 排队新建 | |
run_pipeline | 启动管道运行 | |
| 维基 | list_wikis | 列出Wiki |
get_wiki_page | 获取wiki页面内容 | |
| 搜索 | search_code | 跨存储库搜索代码 |
建筑
请求流
┌────────────┐ ┌────────────┐ ┌──────────────┐ ┌─────────────┐
│ MCP Client │ │ MCP Server │ │ Arcade Cloud │ │ Azure DevOps│
└─────┬──────┘ └─────┬──────┘ └──────┬───────┘ └──────┬──────┘
│ │ │ │
│ Call tool │ │ │
│──────────────────>│ │ │
│ │ │ │
│ │ Check env vars │ │
│ │◄──────────────────►│ │
│ │ │ │
│ │ [If env vars missing - paid tier] │
│ │ get_secret() │ │
│ │───────────────────>│ │
│ ││
│ │
View Mermaid diagram (for GitHub/GitLab)
sequenceDiagram participant C as MCP Client participant S as MCP Server participant A as Arcade Cloud participant D as Azure DevOps
C->>S: Call tool (e.g., list_projects)
Note over S: Resolve Credentials S->>S: Check env: AZURE_DEVOPS_ORG S->>S: Check env: AZURE_DEVOPS_PAT
alt Environment variables exist S->>S: Use local credentials else Environment variables missing (paid tier) S->>A: context.get_secret("AZURE_DEVOPS_ORG") A-->>S: Return organization name S->>A: context.get_secret("AZURE_DEVOPS_PAT") A-->>S: Return PAT token end
Note over S,D: API Request S->>D: GET /{org}/_apis/projects?api-version=7.1 D-->>S: JSON response
S-->>C: Tool result
### 组件概述
┌─────────────────────────────────────────────────────────────────────────────┐ │ MCP CLIENT │ │ (Cursor / Claude Desktop) │ └─────────────────────────────────┬───────────────────────────────────────────┘ │ MCP Protocol (stdio/http) ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ MCP SERVER │ │ ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────────────┐ │ │ │ MCPApp │ │ Azure DevOps │ │ AuthManager │ │ │ │ Framework │──│ Tools (21) │──│ (credential resolver) │ │ │ └─────────────────┘ └──────────────────┘ └───────────┬─────────────┘ │ └─────────────────────────────────────────────────────────┼───────────────────┘ │ ┌─────────────────────────────────┼─────────────────┐ │ │ │ ▼ [Priority 1] ▼ [Priority 2] │ ┌─────────────────────────┐ ┌───────────────────────┐ │ │ Local .env / │ │ Arcade Cloud │ │ │ Environment Variables │ │ (Secrets API) │ │ └─────────────────────────┘ │ [Paid tier only] │ │ └───────────────────────┘ │ │ ┌─────────────────┘ ▼ ┌───────────────────────┐ │ Azure DevOps │ │ REST API v7.1 │ └───────────────────────┘
View Mermaid diagram (for GitHub/GitLab)
flowchart TB subgraph MCPClient [MCP Client] Cursor[Cursor / Claude Desktop] end
subgraph MCPServer [MCP Server] App[MCPApp Framework] Tools[Azure DevOps Tools] Auth[AuthManager] end
subgraph External [External Services] Arcade[Arcade Cloud - Secrets API] ADO[Azure DevOps REST API v7.1] end
subgraph Local [Local Config] Env[.env file / Environment Variables] end
Cursor -->|MCP Protocol| App App --> Tools Tools --> Auth Auth -->|Priority 1| Env Auth -.->|Priority 2 - Paid Tier| Arcade Auth -->|Basic Auth| ADO
### 凭证解析优先级
1. **环境变量** (`.env` 文件或系统环境)-先检查
1. **Arcade Cloud的秘密** -如果找不到env变量,则回退(需要付费Arcade层)
## 项目结构
arcade-azure-devops-mcp/ ├── server.py # MCP server entry point with all tools ├── arcade_azure_devops_mcp/ # Azure DevOps client library │ ├── __init__.py │ ├── client.py # REST API client (httpx) │ ├── models.py # Pydantic models │ └── auth/ # Authentication │ ├── __init__.py │ ├── manager.py # Credential management (env + Arcade secrets) │ └── oauth.py # OAuth/Azure AD (optional) ├── pyproject.toml # Dependencies & entry points ├── .env.example # Environment template └── README.md
## 发展
Install with dev dependencies
uv sync --all-extras
Run tests
uv run pytest
## 发布到Arcade
要将此工具包发布到Arcade市场:
Ensure pyproject.toml has correct entry points
arcade publish
然后,用户可以通过以下方式安装:
arcade install arcade-azure-devops-mcp
## 许可证
麻省理工学院
## 链接
- [Arcade.dev文档](https://docs.arcade.dev)
- [Azure DevOps REST API](https://docs.microsoft.com/en-us/rest/api/azure/devops)
- [MCP规范](https://modelcontextprotocol.io)