Azure DevOps本地MCP服务器

一个模型上下文协议(MCP)服务器,通过AI助手(如Claude、GitHub Copilot等)实现与本地Azure DevOps实例的无缝交互。

  • by stephenjtyrrell
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 stephenjtyrrell/custom-mcp-server

使用说明

Azure DevOps本地MCP服务器

一个模型上下文协议(MCP)服务器,通过Claude、GitHub Copilot和其他MCP兼容工具等人工智能助手,实现与Azure DevOps内部部署实例的无缝交互。

✨ 特性

全面的Azure DevOps集成,涵盖多个类别的27多种工具:

🏢 核心API(2个工具)

  • 列出项目 -浏览组织中的所有项目
  • 列出项目团队 -查看特定项目中的团队

📋 工作项目(9个工具)

  • 获取工作项 -检索特定工作项的详细信息
  • 批量获取工作项 -按ID检索多个工作项
  • 创建工作项 -创建新的工作项(任务、bug、用户故事等)
  • 更新工作项 -修改现有工作项
  • 我的工作项目 -通过筛选查看分配给您的所有工作项
  • 添加评论 -向工作项添加注释
  • 列出评论 -查看对工作项的所有评论
  • 执行查询 -按ID运行已保存的工作项查询

📦 存储库(7个工具)

  • 列出存储库 -浏览项目中的所有存储库
  • 获取存储库 -获取特定存储库的详细信息
  • 列出分支机构 -查看存储库中的所有分支
  • 获取分支 -获取特定分支机构的详细信息
  • 列出拉取请求 -通过过滤浏览拉取请求
  • 获取拉取请求 -获取特定PR的详细信息
  • 创建拉取请求 -创建新的拉取请求

🚀 管道和建筑(3个工具)

  • 列表构建 -使用状态和结果过滤浏览构建
  • 获取构建状态 -检查特定构建的状态
  • 列表构建定义 -查看可用的构建/管道定义

📚 Wiki(3个工具)

  • 列出维基 -浏览组织或项目中的Wiki
  • 获取页面内容 -检索wiki页面内容
  • 列表页面 -查看wiki中的所有页面

🔍 搜索(3个工具)

  • 搜索代码 -通过过滤在存储库中搜索代码
  • 搜索Wiki -按关键字和内容搜索wiki页面
  • 搜索工作项 -跨工作项的全文搜索

⏱️ 工作和迭代(2个工具)

  • 列出迭代次数 -查看项目中的所有迭代/冲刺
  • 列出团队迭代 -查看分配给特定团队的迭代

🔒 安全功能

  • 内置WIQL注入预防和输入验证
  • 通过环境变量实现安全的凭证处理
  • 防止内存耗尽的结果限制

📋 先决条件

  • Node.js 18或更高版本

  • 访问Azure DevOps内部部署服务器

  • 具有以下权限的个人访问令牌(PAT):

    • 工作项(读写) -查看和修改工作项、添加注释时需要
    • 代码(读写) -存储库和拉取请求操作、代码搜索所需
    • 构建(读取) -查看构建和管道时需要
    • 项目和团队(阅读) -列出项目和团队所需
    • Wiki(阅读) -wiki搜索操作需要

    注意:如果您只需要查询/查看数据,则可以创建仅具有读取权限的PAT。

🚀 安装

方案1:地方发展

  1. 克隆存储库

    git clone <repository-url>
    cd custom-mcp-server
    
  2. 安装依赖项

    npm install
    
  3. 配置环境变量

    创建一个 .env 项目根目录中的文件:

    AZURE_DEVOPS_ORG_URL=https://your-devops-server.com/your-organization
    AZURE_DEVOPS_PAT=your-personal-access-token-here
    
  4. 构建项目

    npm run build
    

选项2:全局安装

全局安装该软件包,以便从任何地方使用它:

npm install -g .

然后使用环境变量运行它:

AZURE_DEVOPS_ORG_URL=https://your-server.com AZURE_DEVOPS_PAT=your-pat azure-devops-onprem-mcp-server

⚙️ 配置

VS代码(GitHub副本)

添加到您的VS代码设置文件(.vscode/mcp.json 或用户设置):

{
  "mcpServers": {
    "azure-devops-onprem": {
      "command": "node",
      "args": ["/absolute/path/to/custom-mcp-server/dist/index.js"],
      "env": {
        "AZURE_DEVOPS_ORG_URL": "https://your-devops-server.com/your-org",
        "AZURE_DEVOPS_PAT": "your-personal-access-token"
      }
    }
  }
}

克劳德桌面

添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "azure-devops-onprem": {
      "command": "node",
      "args": ["/absolute/path/to/custom-mcp-server/dist/index.js"],
      "env": {
        "AZURE_DEVOPS_ORG_URL": "https://your-devops-server.com/your-org",
        "AZURE_DEVOPS_PAT": "your-personal-access-token"
      }
    }
  }
}

其他MCP客户端

对于任何兼容MCP的客户端,请使用:

  • 命令: node
  • 参数: ["/path/to/dist/index.js"]
  • 运输标准: stdio
  • 环境:设置 AZURE_DEVOPS_ORG_URL 和 AZURE_DEVOPS_PAT

🛠️ 可用工具

核心API工具

mcp_ado_core_list_projects

列出Azure DevOps组织中的所有项目。

参数:

  • stateFilter (字符串,可选):按状态筛选(全部、格式良好、删除、新建)
  • top (number,可选):要返回的最大项目数

mcp_ado_core_list_project_teams

列出项目中的团队。

参数:

  • project (string,必填):项目名称或ID
  • top (数量,可选):可返回的最大团队数量

工作项工具

mcp_ado_wit_get_work_item

获取单个工作项的详细信息。

参数:

  • id (数字,必填):工作项ID
  • project (字符串,可选):项目名称(不需要,因为工作项ID是全局唯一的)
  • expand (字符串,可选):展开选项(无、关系、字段、链接、全部)

mcp_ado_wit_get_work_items_batch_by_ids

在单个批处理请求中检索多个工作项。

参数:

  • ids (数字数组,必填):工作项ID数组
  • project (string,必填):项目名称
  • fields (字符串数组,可选):要返回的特定字段

mcp_ado_wit_create_work_item

创建新工作项。

参数:

  • project (string,必填):项目名称
  • workItemType (字符串,必填):类型(例如,“任务”、“Bug”、“用户故事”)
  • title (字符串,必填):工作项标题
  • description (字符串,可选):工作项描述
  • assignedTo (字符串,可选):要分配给的用户
  • state (字符串,可选):初始状态
  • tags (字符串,可选):以分号分隔的标签

mcp_ado_wit_update_work_item

更新现有工作项。

参数:

  • id (数字,必填):工作项ID
  • project (string,必填):项目名称
  • title (字符串,可选):更新标题
  • description (字符串,可选):更新的描述
  • state (字符串,可选):更新状态
  • assignedTo (字符串,可选):已更新的受让人
  • tags (字符串,可选):已更新标签

mcp_ado_wit_my_work_items

获取所有项目中分配给当前用户的工作项,或按特定项目筛选的工作项。

参数:

  • project (字符串,可选):按项目名称筛选
  • state (字符串,可选):状态过滤器(例如,“活动”、“新建”)
  • type (字符串,可选):工作项类型筛选器
  • top (数字,可选):要返回的最大项目数(默认值:100)

mcp_ado_wit_add_work_item_comment

向工作项添加注释。

参数:

  • project (string,必填):项目名称
  • workItemId (数字,必填):工作项ID
  • comment (字符串,必填):注释文本

mcp_ado_wit_list_work_item_comments

列出对工作项的所有评论。

参数:

  • project (string,必填):项目名称
  • workItemId (数字,必填):工作项ID
  • top (数字,可选):返回的最大评论数

mcp_ado_wit_get_query_results_by_id

执行已保存的工作项查询并获取结果。

参数:

  • project (string,必填):项目名称
  • queryId (字符串,必填):查询ID(GUID)
  • top (数字,可选):返回的最大结果

存储库工具

mcp_ado_repo_list_repos_by_project

列出项目中的所有存储库。

参数:

  • project (string,必填):项目名称或ID

mcp_ado_repo_get_repo_by_name_or_id

获取详细的存储库信息。

参数:

  • project (string,必填):项目名称
  • repositoryNameOrId (字符串,必填):存储库名称或ID

mcp_ado_repo_list_branches_by_repo

列出存储库中的所有分支。

参数:

  • repositoryId (字符串,必填):存储库ID
  • project (string,必填):项目名称

mcp_ado_repo_get_branch_by_name

获取特定分支的详细信息。

参数:

  • repositoryId (字符串,必填):存储库ID
  • branchName (字符串,必填):分支名称(例如“main”或“refs/heads/main”)
  • project (string,必填):项目名称

mcp_ado_repo_list_pull_requests_by_repo_or_project

列出存储库或项目的拉取请求。

参数:

  • project (string,必填):项目名称
  • repositoryId (字符串,可选):存储库ID
  • status (字符串,可选):PR状态(活动、已完成、放弃、全部)
  • targetRefName (字符串,可选):目标分支筛选器
  • top (数字,可选):要返回的最大PR

mcp_ado_repo_get_pull_request_by_id

获取有关拉取请求的详细信息。

参数:

  • repositoryId (字符串,必填):存储库ID
  • pullRequestId (number,必填):拉取请求ID
  • project (string,必填):项目名称

mcp_ado_repo_create_pull_request

创建新的pull请求。

参数:

  • repositoryId (字符串,必填):存储库ID
  • project (string,必填):项目名称
  • sourceRefName (string,必填):源分支(例如,'refs/heads/feature')
  • targetRefName (string,必填):目标分支(例如,'refs/heads/main')
  • title (字符串,必填):PR标题
  • description (字符串,可选):PR描述
  • isDraft (布尔值,可选):创建为PR草稿

管道和构建工具

mcp_ado_pipelines_get_builds

为项目生成列表。

参数:

  • project (string,必填):项目名称
  • definitions (数字数组,可选):按构建定义ID筛选
  • top (数字,可选):返回的最大构建数
  • statusFilter (字符串,可选):状态过滤器(全部、取消、已完成、进行中、未开始、已推迟)
  • resultFilter (字符串,可选):结果筛选器(成功、部分成功、失败、取消)

mcp_ado_pipelines_get_build_status

获取特定版本的状态。

参数:

  • project (string,必填):项目名称
  • buildId (数字,必填):构建ID

mcp_ado_pipelines_get_build_definitions

列出项目中的生成定义。

参数:

  • project (string,必填):项目名称
  • name (字符串,可选):按定义名称筛选
  • top (数字,可选):要返回的最大定义数

Wiki工具

mcp_ado_wiki_list_wikis

列出组织或项目中的所有Wiki。

参数:

  • project (字符串,可选):按项目名称筛选

mcp_ado_wiki_get_page_content

获取wiki页面的内容。

参数:

  • wikiIdentifier (字符串,必填):Wiki ID或名称
  • project (string,必填):项目名称
  • path (字符串,必填):页面路径(例如,“/Page name”)

mcp_ado_wiki_list_pages

列出wiki中的所有页面。

参数:

  • wikiIdentifier (字符串,必填):Wiki ID或名称
  • project (string,必填):项目名称

搜索工具

⚠️ 对于本地安装很重要:
代码和Wiki搜索需要 代码搜索 扩展将安装在您的Azure DevOps服务器上。
如果遇到404或API未找到错误,请验证:

  • 代码搜索扩展已安装在您的组织中
  • 已为您的项目启用扩展
  • 您的PAT具有适当的搜索权限

看 安装代码搜索 有关设置说明。

mcp_ado_search_code

在Azure DevOps存储库中搜索代码。

参数:

  • searchText (字符串,必填):要在代码存储库中搜索的关键字
  • project (字符串数组,可选):按项目名称筛选
  • repository (字符串数组,可选):按存储库名称筛选
  • path (字符串数组,可选):按文件路径筛选
  • branch (字符串数组,可选):按分支名称筛选
  • includeFacets (布尔值,可选):在结果中包含方面(默认值:false)
  • skip (number,可选):分页时要跳过的结果数(默认值:0)
  • top (数字,可选):返回的最大结果数(默认值:5)

mcp_ado_search_wiki

按关键字搜索Azure DevOps维基页面。

参数:

  • searchText (字符串,必填):要在wiki页面中搜索的关键字
  • project (字符串数组,可选):按项目名称筛选
  • wiki (字符串数组,可选):按wiki名称筛选
  • includeFacets (布尔值,可选):在结果中包含方面(默认值:false)
  • skip (number,可选):分页时要跳过的结果数(默认值:0)
  • top (数字,可选):返回的最大结果数(默认值:10)

mcp_ado_search_workitem

按文本搜索工作项。

参数:

  • searchText (字符串,必填):要搜索的文本
  • project (字符串,可选):按项目名称筛选
  • top (数字,可选):最大结果(默认值:50)

工作和迭代工具

mcp_ado_work_list_iterations

列出项目中的所有迭代。

参数:

  • project (string,必填):项目名称

mcp_ado_work_list_team_iterations

列出特定团队的迭代。

参数:

  • project (string,必填):项目名称
  • team (string,必填):团队名称或ID

🔒 安全功能

此服务器包括多种安全措施:

  • WIQL注射预防:所有用户输入在用于WIQL查询之前都已正确转义
  • 输入验证:所有参数的类型和格式都经过验证
  • 结果限制:默认限制可防止大型结果集导致内存耗尽
  • 安全凭证处理:PAT令牌从环境变量加载,从不硬编码

最佳实践

  1. 永不承诺 你的 .env 文件或PAT令牌到版本控制
  2. 以最小权限使用PAT -只授予需要的东西:
    • 只读PAT:仅用于查询和查看数据
    • 读/写PAT:创建/更新工作项、添加注释、创建PR所需
  3. 定期轮换PAT 根据贵组织的安全策略
  4. 用于生产,考虑使用Azure密钥库或类似的密钥管理
  5. 网络安全:确保您的本地服务器具有正确的SSL/TLS证书

🔧 发展

可用脚本

# Install dependencies
npm install

# Build the TypeScript project
npm run build

# Watch mode (auto-rebuild on changes)
npm run watch

# Run the server (after building)
npm start

# Development mode (build and run)
npm run dev

项目结构

custom-mcp-server/
├── src/
│   └── index.ts          # Main server implementation
├── dist/                 # Compiled JavaScript output
├── .env                  # Environment variables (create this)
├── package.json          # Project configuration
├── tsconfig.json         # TypeScript configuration
└── README.md            # This file

🐛 故障排除

SSL证书问题

如果您在内部部署服务器上遇到自签名证书的SSL证书错误:

仅用于开发:

export NODE_TLS_REJECT_UNAUTHORIZED=0

⚠️ 警告:仅在具有受信任服务器的开发环境中使用此功能。切勿在生产中使用。

更好的解决方案:安装正确的证书链或将您组织的CA证书添加到Node.js受信任的证书中。

连接失败

  1. 验证您的PAT:直接使用Azure DevOps web界面或REST API进行测试
  2. 检查URL格式:应该是 https://your-server.com/your-organization
  3. 网络接入:确保您可以访问服务器(尝试 curl 或浏览器)
  4. PAT权限:
    • 读取操作:工作项(读取)、项目(读取)和构建(读取)
    • 写入操作:工作项(读写)、代码(读写
    • 验证令牌是否具有所需操作的适当范围

MCP服务器未出现

  1. 检查路径:确保路径 dist/index.js 绝对正确
  2. 重建:运行 npm run build 确保编译了最新代码
  3. 重新启动客户端:重新启动VS Code、Claude Desktop或MCP客户端
  4. 检查日志:在客户端的开发人员控制台中查找错误消息

未找到工作项

  1. 验证工作项是否存在:检查Azure DevOps web界面中的ID
  2. 检查权限:确保您的PAT可以访问该项目
  3. WIQL语法:对于自定义查询,请验证WIQL语法是否正确

搜索API问题

如果代码或wiki搜索失败:

  1. 检查扩展安装:

    • 代码搜索扩展必须安装在Azure DevOps服务器上
    • 转到“组织设置”>“扩展”以验证安装
    • 看 安装代码搜索
  2. 验证API的可用性:

    • 手动测试端点: curl -u :YOUR_PAT https://your-server.com/your-org/_apis/search/codesearchresults?api-version=7.1-preview.1
    • 404错误通常意味着未安装搜索扩展
    • 403错误表示权限问题
  3. 检查PAT权限:

    • 确保您的PAT具有代码搜索的“代码(读取)”权限
    • 确保您的PAT具有Wiki搜索的“Wiki(读取)”权限
  4. API版本兼容性:

    • 搜索API使用版本 7.1-preview.1
    • 较旧的内部部署服务器可能需要不同的API版本
    • 检查您的服务器版本和Azure DevOps API兼容性

📚 资源

🤝 贡献

欢迎投稿!以下是您可以提供帮助的一些方法:

  • 🐛 报告错误
  • 💡 建议新功能
  • 📝 改进文档
  • 🔧 提交拉取请求

📝 许可证

麻省理工学院

🙏 致谢

内置:


备注:此服务器专为Azure DevOps内部部署实例而设计。对于Azure DevOps服务(云),类似的配置适用,但请确保您的组织URL采用以下格式 https://dev.azure.com/your-organization.