Azure DevOps-MCP管理工具
该服务器提供了一个方便的 API,用于与 Azure DevOps 服务进行交互,使 AI 助手和其他工具能够管理工件、代码仓库、看板、冲刺等更多内容。它采用模型上下文协议构建,为与 Azure DevOps 通信提供了标准化接口。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"azure-devops": {
"args": [
"@ryancardin/azuredevops-mcp-server@latest"
],
"command": "npx",
"env": {
"AZURE_DEVOPS_AUTH_TYPE": "pat",
"AZURE_DEVOPS_IS_ON_PREMISES": "false",
"AZURE_DEVOPS_ORG_URL": "https://dev.azure.com/your-organization",
"AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN": "your-personal-access-token",
"AZURE_DEVOPS_PROJECT": "your-project"
}
}
}
}
该服务需要配置环境变量:AZURE_DEVOPS_ORG_URL、AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN、AZURE_DEVOPS_PROJECT
服务介绍
Azure DevOps MCP 集成
这是一个强大的 Azure DevOps 集成,通过 Model Context Protocol (MCP) 服务器提供无缝访问工作项、仓库、项目、看板和冲刺的功能。
概览
该服务器提供了与 Azure DevOps 服务交互的便捷 API,使 AI 助手和其他工具能够管理工作项、代码仓库、看板、冲刺等。它基于 Model Context Protocol 构建,为与 Azure DevOps 通信提供了一个标准化接口。
演示

特性
该集成被组织成八个主要工具类别:
工作项工具
- 使用 WIQL 查询列出工作项
- 通过 ID 获取工作项详情
- 搜索工作项
- 获取最近更新的工作项
- 获取分配给你的工作项
- 创建新的工作项
- 更新现有工作项
- 向工作项添加评论
- 更新工作项状态
- 分配工作项
- 在工作项之间创建链接
- 批量创建/更新工作项
看板 & 冲刺工具
- 获取团队看板
- 获取看板列
- 获取看板项
- 在看板上移动卡片
- 获取冲刺
- 获取当前冲刺
- 获取冲刺工作项
- 获取冲刺容量
- 获取团队成员
项目工具
- 列出项目
- 获取项目详情
- 创建新项目
- 获取区域
- 获取迭代
- 创建区域
- 创建迭代
- 获取过程模板
- 获取工作项类型
- 获取工作项类型的字段
Git 工具
- 列出仓库
- 获取仓库详情
- 创建仓库
- 列出分支
- 搜索代码
- 浏览仓库
- 获取文件内容
- 获取提交历史
- 列出拉取请求
- 创建拉取请求
- 获取拉取请求详情
- 获取拉取请求评论
- 批准拉取请求
- 合并拉取请求
测试功能工具
- 运行自动化测试
- 获取测试自动化状态
- 配置测试代理
- 创建测试数据生成器
- 管理测试环境
- 获取测试不稳定分析
- 获取测试缺口分析
- 运行测试影响分析
- 获取测试健康仪表盘
- 运行测试优化
- 创建探索性会话
- 记录探索性测试结果
- 将发现转换为工作项
- 获取探索性测试统计信息
DevSecOps 工具
- 运行安全扫描
- 获取安全扫描结果
- 跟踪安全漏洞
- 生成安全合规报告
- 集成 SARIF 结果
- 运行合规检查
- 获取合规状态
- 创建合规报告
- 管理安全策略
- 跟踪安全意识
- 轮换密钥
- 审计密钥使用情况
- 配置保险库集成
工件管理工具
- 列出工件源
- 获取包版本
- 发布包
- 提升包
- 删除包版本
- 列出容器镜像
- 获取容器镜像标签
- 扫描容器镜像
- 管理容器策略
- 管理通用包
- 创建包下载报告
- 检查包依赖
AI辅助开发工具
- 获取AI驱动的代码审查
- 建议代码优化
- 识别代码异味
- 获取预测性错误分析
- 获取开发者生产力指标
- 获取预测性工作量估算
- 获取代码质量趋势
- 建议工作项细化
- 建议自动化机会
- 创建智能警报
- 预测构建失败
- 优化测试选择
安装
通过Smithery安装
要通过Smithery自动为Claude Desktop安装azuredevops-mcp:
npx -y @smithery/cli install @RyanCardin15/azuredevops-mcp --client claude
先决条件
- Node.js (v16或更高版本)
- TypeScript (v4或更高版本)
- 一个带有个人访问令牌(PAT)或适当本地凭据的Azure DevOps账号
设置
-
克隆仓库:
git clone <repository-url> cd AzureDevOps -
安装依赖项:
npm install -
配置环境变量(创建一个
.env文件或直接设置它们):对于Azure DevOps服务(云端):
AZURE_DEVOPS_ORG_URL=https://dev.azure.com/your-organization AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN=your-personal-access-token AZURE_DEVOPS_PROJECT=your-default-project AZURE_DEVOPS_IS_ON_PREMISES=false对于Azure DevOps Server(本地):
AZURE_DEVOPS_ORG_URL=https://your-server/tfs AZURE_DEVOPS_PROJECT=your-default-project AZURE_DEVOPS_IS_ON_PREMISES=true AZURE_DEVOPS_COLLECTION=your-collection AZURE_DEVOPS_API_VERSION=6.0 # 根据您的服务器版本进行调整 # 身份验证(选择一种): # 对于PAT身份验证: AZURE_DEVOPS_AUTH_TYPE=pat AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN=your-personal-access-token # 对于NTLM身份验证: AZURE_DEVOPS_AUTH_TYPE=ntlm AZURE_DEVOPS_USERNAME=your-username AZURE_DEVOPS_PASSWORD=your-password AZURE_DEVOPS_DOMAIN=your-domain # 对于基本身份验证: AZURE_DEVOPS_AUTH_TYPE=basic AZURE_DEVOPS_USERNAME=your-username AZURE_DEVOPS_PASSWORD=your-password -
构建项目:
npm run build如果遇到TypeScript错误但仍然希望继续:
npm run build:ignore-errors -
启动服务器:
npm run start
配置
个人访问令牌(PAT)
对于Azure DevOps服务(云端),您需要创建具有适当权限的个人访问令牌:
- 转到您的 Azure DevOps 组织
- 点击右上角的个人资料图标
- 选择“个人访问令牌”
- 点击“新建令牌”
- 为它命名并选择适当的范围:
- 工作项:读取与写入
- 代码:读取与写入
- 项目和团队:读取与写入
- 构建:读取
- 发布:读取
对于 Azure DevOps Server(本地部署),您有三种身份验证选项:
-
个人访问令牌 (PAT):
- 类似于云设置,但在本地实例中创建 PAT
- 设置
AZURE_DEVOPS_AUTH_TYPE=pat
-
NTLM 身份验证:
- 使用 Windows 域凭据
- 设置
AZURE_DEVOPS_AUTH_TYPE=ntlm - 提供用户名、密码和域
-
基本身份验证:
- 使用本地凭据
- 设置
AZURE_DEVOPS_AUTH_TYPE=basic - 提供用户名和密码
Azure DevOps 服务 vs. Azure DevOps Server
此集成支持云托管的 Azure DevOps 服务和本地部署的 Azure DevOps Server:
Azure DevOps 服务(云)
- 通过组织 URL 和 PAT 进行简单设置
- 默认配置期望格式:
https://dev.azure.com/your-organization - 始终使用 PAT 身份验证
- 示例配置文件在
.env.cloud.example中提供
Azure DevOps Server(本地部署)
- 需要额外配置服务器 URL、集合和身份验证
- URL 格式根据您的服务器设置而变化:
https://your-server/tfs - 需要指定集合名称
- 支持多种身份验证方法(PAT、NTLM、基本)
- 对于较旧的服务器版本可能需要指定 API 版本
- 示例配置文件在
.env.on-premises.example中提供
主要差异
| 功能 | Azure DevOps 服务 | Azure DevOps Server |
|---|---|---|
| URL 格式 | https://dev.azure.com/org | https://server/tfs |
| 集合 | 不需要 | 需要 |
| 身份验证方法 | 仅 PAT | PAT、NTLM、基本 |
| API 版本 | 最新(自动) | 可能需要指定 |
| 连接 | 总是互联网 | 可以是隔离网络 |
示例配置
将 .env.cloud.example 或 .env.on-premises.example 复制到 .env 并按需更新值。
环境变量
服务器可以使用以下环境变量进行配置:
| 变量 | 描述 | 是否必需 | 默认值 |
|---|---|---|---|
| AZURE_DEVOPS_ORG_URL | 您的 Azure DevOps 组织或服务器的 URL | 是 | - |
| AZURE_DEVOPS_PROJECT | 要使用的默认项目 | 是 | - |
| AZURE_DEVOPS_IS_ON_PREMISES | 是否使用 Azure DevOps Server | 否 | false |
| AZURE_DEVOPS_COLLECTION | 本地部署的集合名称 | 否* | - |
| AZURE_DEVOPS_API_VERSION | 本地部署的 API 版本 | 否 | - |
| AZURE_DEVOPS_AUTH_TYPE | 认证类型 (pat/ntlm/basic) | 否 | pat |
| AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN | 个人访问令牌 | 否** | - |
| AZURE_DEVOPS_USERNAME | NTLM/Basic 认证用户名 | 否** | - |
| AZURE_DEVOPS_PASSWORD | NTLM/Basic 认证密码 | 否** | - |
| AZURE_DEVOPS_DOMAIN | NTLM 认证域 | 否 | - |
| ALLOWED_TOOLS | 逗号分隔的工具方法列表,以启用 | 否 | 所有工具 |
* 如果 AZURE_DEVOPS_IS_ON_PREMISES=true 则必需
** 根据所选认证类型决定是否必需
使用 ALLOWED_TOOLS 进行工具过滤
ALLOWED_TOOLS 环境变量允许您限制哪些工具方法可用。这是完全可选的 - 如果未指定,则所有工具都将被启用。
格式:无空格的逗号分隔的方法名称列表。
示例:
ALLOWED_TOOLS=listWorkItems,getWorkItemById,searchWorkItems,createWorkItem
这将仅启用指定的工作项方法,同时禁用所有其他方法。
使用
一旦服务器运行起来,您可以使用 MCP 协议与其交互。服务器为不同的 Azure DevOps 功能提供了多个工具。
可用工具
注意: 默认情况下,只有部分工具在
index.ts文件中注册,以保持初始实现的简单性。有关如何注册额外工具的信息,请参阅 工具注册 部分。
示例:列出工作项
{
"tool": "listWorkItems",
"params": {
"query": "SELECT [System.Id], [System.Title], [System.State] FROM WorkItems WHERE [System.State] = 'Active' ORDER BY [System.CreatedDate] DESC"
}
}
示例:创建工作项
{
"tool": "createWorkItem",
"params": {
"workItemType": "User Story",
"title": "Implement new feature",
"description": "As a user, I want to be able to export reports to PDF.",
"assignedTo": "john@example.com"
}
}
示例:列出仓库
{
"tool": "listRepositories",
"params": {
"projectId": "MyProject"
}
}
示例:创建拉取请求
{
"tool": "createPullRequest",
"params": {
"repositoryId": "repo-guid",
"sourceRefName": "refs/heads/feature-branch",
"targetRefName": "refs/heads/main",
"title": "Add new feature",
"description": "This PR adds the export to PDF feature"
}
}
架构
项目结构如下:
src/Interfaces/: 参数和响应类型的定义Services/: 与 Azure DevOps API 交互的服务类Tools/: 向客户端暴露功能的工具实现index.ts: 主入口点,用于注册工具并启动服务器config.ts: 配置处理
服务层
服务层负责直接与 Azure DevOps API 通信:
WorkItemService: 工作项操作BoardsSprintsService: 看板和冲刺操作ProjectService: 项目管理操作GitService: Git 仓库操作TestingCapabilitiesService: 测试能力操作DevSecOpsService: DevSecOps 操作ArtifactManagementService: 构件管理操作AIAssistedDevelopmentService: AI 辅助开发操作
工具层
工具层封装了服务并为MCP协议提供了一致的接口:
WorkItemTools:用于工作项操作的工具BoardsSprintsTools:用于看板和冲刺操作的工具ProjectTools:用于项目管理操作的工具GitTools:用于Git操作的工具TestingCapabilitiesTools:用于测试功能操作的工具DevSecOpsTools:用于DevSecOps操作的工具ArtifactManagementTools:用于制品管理操作的工具AIAssistedDevelopmentTools:用于AI辅助开发操作的工具
工具注册
MCP服务器要求在index.ts文件中显式注册工具。默认情况下,仅注册所有可能工具的一个子集,以保持初始实现的可管理性。
要注册更多工具,请执行以下步骤:
- 打开
src/index.ts文件 - 按照现有工具的模式添加新的工具注册
- 构建并重启服务器
有关工具注册的详细指南,请参阅仓库中的TOOL_REGISTRATION.md文件。
注意: 在注册工具时,请小心使用正确的参数类型,特别是枚举值。
Interfaces目录中的类型定义指定了每个参数的预期类型。使用错误的类型(例如,对于枚举值使用z.string()而不是z.enum())会导致构建时出现TypeScript错误。
注册新工具的例子:
server.tool("searchCode",
"Search for code in repositories",
{
searchText: z.string().describe("Text to search for"),
repositoryId: z.string().optional().describe("ID of the repository")
},
async (params, extra) => {
const result = await gitTools.searchCode(params);
return {
content: result.content,
rawData: result.rawData,
isError: result.isError
};
}
);
故障排除
常见问题
身份验证错误
- 确保您的个人访问令牌有效且具有所需的权限
- 检查组织URL是否正确
构建时的TypeScript错误
- 使用
npm run build:ignore-errors来绕过TypeScript错误 - 检查是否存在缺失或不正确的类型定义
运行时错误
- 验证指定的Azure DevOps项目存在且可访问
贡献
欢迎贡献!以下是您如何贡献的方法:
- 分叉仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交您的更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启一个拉取请求
请确保您的代码通过了lint检查,并包含了适当的测试。