azure-devops-mcp

by RyanCardin15
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • The server provides tools for interacting with Git repositories in Azure DevOps, including listing repositories, branches, commits, creating pull requests, and more.

  • Node.js is listed as a prerequisite for running the server, but it's not what the server integrates with.

  • The MCP server is built with TypeScript, but it doesn't integrate with TypeScript as a service.

Azure DevOps MCP 集成

Azure DevOps 的强大集成,可通过模型上下文协议 (MCP) 服务器无缝访问工作项、存储库、项目、板和冲刺。

概述

该服务器提供便捷的 API,用于与 Azure DevOps 服务交互,使 AI 助手和其他工具能够管理工作项、代码存储库、看板、冲刺等。它基于模型上下文协议构建,提供与 Azure DevOps 通信的标准化接口。

演示

特征

该集成分为八个主要工具类别:

工作项工具

  • 使用 WIQL 查询列出工作项
  • 通过 ID 获取工作项详细信息
  • 搜索工作项
  • 获取最近更新的工作项
  • 获取分配的工作项目
  • 创建新的工作项
  • 更新现有工作项
  • 向工作项添加评论
  • 更新工作项状态
  • 分配工作项
  • 在工作项之间创建链接
  • 批量创建/更新工作项

看板和冲刺工具

  • 获取团队公告板
  • 获取板列
  • 获取棋盘物品
  • 在棋盘上移动卡片
  • 获得冲刺
  • 获取当前冲刺
  • 获取冲刺工作项
  • 获得冲刺能力
  • 获取团队成员

项目工具

  • 列出项目
  • 获取项目详细信息
  • 创建新项目
  • 获取区域
  • 获取迭代次数
  • 创建区域
  • 创建迭代
  • 获取流程模板
  • 获取工作项类型
  • 获取工作项类型字段

Git 工具

  • 列出存储库
  • 获取存储库详细信息
  • 创建存储库
  • 列出分支
  • 搜索代码
  • 浏览存储库
  • 获取文件内容
  • 获取提交历史记录
  • 列出拉取请求
  • 创建拉取请求
  • 获取拉取请求详细信息
  • 获取拉取请求评论
  • 批准拉取请求
  • 合并拉取请求

测试能力工具

  • 运行自动化测试
  • 获取测试自动化状态
  • 配置测试代理
  • 创建测试数据生成器
  • 管理测试环境
  • 获取测试不稳定性分析
  • 获取测试差距分析
  • 运行测试影响分析
  • 获取测试健康仪表板
  • 运行测试优化
  • 创建探索性会议
  • 记录探索性测试结果
  • 将发现结果转换为工作项
  • 获取探索性测试统计数据

DevSecOps 工具

  • 运行安全扫描
  • 获取安全扫描结果
  • 追踪安全漏洞
  • 生成安全合规性报告
  • 整合 SARIF 结果
  • 运行合规性检查
  • 获取合规状态
  • 创建合规性报告
  • 管理安全策略
  • 追踪安全意识
  • 轮换机密
  • 审计秘密使用情况
  • 配置保险库集成

工件管理工具

  • 列出工件源
  • 获取包版本
  • 发布包
  • 推广套餐
  • 删除包版本
  • 列出容器镜像
  • 获取容器镜像标签
  • 扫描容器镜像
  • 管理容器策略
  • 管理通用包
  • 创建包下载报告
  • 检查包依赖关系

人工智能辅助开发工具

  • 获得 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 帐户

设置

  1. 克隆存储库:
    git clone <repository-url> cd AzureDevOps
  2. 安装依赖项:
    npm install
  3. 配置环境变量(创建.env文件或者直接设置):对于 Azure DevOps Services(云):
    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 # Adjust based on your server version # Authentication (choose one): # For PAT authentication: AZURE_DEVOPS_AUTH_TYPE=pat AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN=your-personal-access-token # For NTLM authentication: AZURE_DEVOPS_AUTH_TYPE=ntlm AZURE_DEVOPS_USERNAME=your-username AZURE_DEVOPS_PASSWORD=your-password AZURE_DEVOPS_DOMAIN=your-domain # For Basic authentication: AZURE_DEVOPS_AUTH_TYPE=basic AZURE_DEVOPS_USERNAME=your-username AZURE_DEVOPS_PASSWORD=your-password
  4. 构建项目:
    npm run build
    如果您遇到 TypeScript 错误但仍想继续:
    npm run build:ignore-errors
  5. 启动服务器:
    npm run start

配置

个人访问令牌(PAT)

对于 Azure DevOps 服务(云),您需要创建具有适当权限的个人访问令牌:

  1. 转到你的 Azure DevOps 组织
  2. 点击右上角的个人资料图标
  3. 选择“个人访问令牌”
  4. 点击“新代币”
  5. 为其命名并选择适当的范围:
    • 工作项目:阅读和写作
    • 代码:读取和写入
    • 项目和团队:阅读和写作
    • 构建:阅读
    • 发布:阅读

对于 Azure DevOps Server(本地),您有三种身份验证选项:

  1. 个人访问令牌(PAT):
    • 与云设置类似,但在本地实例中创建 PAT
    • 设置AZURE_DEVOPS_AUTH_TYPE=pat
  2. NTLM 身份验证:
    • 使用您的 Windows 域凭据
    • 设置AZURE_DEVOPS_AUTH_TYPE=ntlm
    • 提供用户名、密码和域名
  3. 基本身份验证:
    • 使用您的本地凭证
    • 设置AZURE_DEVOPS_AUTH_TYPE=basic
    • 提供用户名和密码

Azure DevOps Services 与 Azure DevOps Server

此集成支持云托管的 Azure DevOps Services 和本地 Azure DevOps Server:

Azure DevOps 服务(云)

  • 使用组织 URL 和 PAT 进行简单设置
  • 默认配置预期格式: https://dev.azure.com/your-organization
  • 始终使用 PAT 身份验证
  • .env.cloud.example中提供的示例配置文件

Azure DevOps 服务器(本地)

  • 需要对服务器 URL、收集和身份验证进行额外配置
  • URL 格式根据您的服务器设置而有所不同: https://your-server/tfs
  • 需要指定集合名称
  • 支持多种身份验证方法(PAT、NTLM、Basic)
  • 可能需要针对旧服务器版本的 API 版本规范
  • .env.on-premises.example中提供的示例配置文件

主要区别

特征Azure DevOps 服务Azure DevOps 服务器
URL 格式https://dev.azure.com/orghttps://server/tfs
收藏不要求必需的
身份验证方法仅限 PATPAT、NTLM、基础
API 版本最新(自动)可能需要规范
联系始终保持互联网连接可以气隙

示例配置

.env.cloud.example.env.on-premises.example复制到.env并根据需要更新值。

环境变量

可以使用以下环境变量配置服务器:

多变的描述必需的默认
AZURE_DEVOPS_ORG_URL您的 Azure DevOps 组织或服务器的 URL是的-
AZURE_DEVOPS_项目默认使用的项目是的-
AZURE_DEVOPS_IS_ON_PREMISES是否使用 Azure DevOps Server错误的
AZURE_DEVOPS_COLLECTION本地集合名称*-
AZURE_DEVOPS_API_版本本地 API 版本-
AZURE_DEVOPS_AUTH_TYPE身份验证类型(pat/ntlm/basic)
AZURE_DEVOPS_PERSONAL_ACCESS_TOKEN个人访问令牌**-
AZURE_DEVOPS_用户名NTLM/Basic 身份验证的用户名**-
AZURE_DEVOPS_密码NTLM/基本身份验证的密码**-
AZURE_DEVOPS_DOMAINNTLM 身份验证的域-
允许的工具要启用的工具方法的逗号分隔列表所有工具

* 如果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 :Artifact管理操作
  • AIAssistedDevelopmentService :AI辅助开发运营

工具层

工具层包装服务并为 MCP 协议提供一致的接口:

  • WorkItemTools :工作项操作工具
  • BoardsSprintsTools :用于板和冲刺操作的工具
  • ProjectTools :项目管理操作工具
  • GitTools :Git操作工具
  • TestingCapabilitiesTools :用于测试功能操作的工具
  • DevSecOpsTools :DevSecOps 操作工具
  • ArtifactManagementTools :用于工件管理操作的工具
  • AIAssistedDevelopmentTools :AI辅助开发操作工具

工具注册

MCP 服务器要求在index.ts文件中明确注册工具。默认情况下,仅注册所有可能工具中的一小部分,以确保初始实现的可管理性。

要注册更多工具:

  1. 打开src/index.ts文件
  2. 按照现有工具的模式添加新的工具注册
  3. 构建并重启服务器

存储库中的TOOL_REGISTRATION.md文件提供了有关工具注册的综合指南。

**注意:**注册工具时,请务必使用正确的参数类型,尤其是枚举值。Interfaces 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 项目是否存在且可访问

贡献

欢迎贡献!贡献方式如下:

  1. 分叉存储库
  2. 创建功能分支( git checkout -b feature/amazing-feature
  3. 提交您的更改( git commit -m 'Add some amazing feature'
  4. 推送到分支( git push origin feature/amazing-feature
  5. 打开拉取请求

请确保您的代码通过 linting 并包含适当的测试。

ID: z7mxfcinp8