Azure DevOps 查询服务器

Azure DevOps MCP服务器是一个通过自然语言交互查询Azure DevOps的ChatGPT风格界面,集成了Azure OpenAI功能调用。

  • by dammyboss
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 dammyboss/Azure-DevOps-mcp-server

使用说明

Azure DevOps MCP服务器

由达米洛拉·奥纳丁德建造 DevOps工程师和云基础设施专家

用于查询Azure DevOps的MCP(模型上下文协议)服务器,具有用于完成聊天的前端UI。该项目通过由Azure OpenAI函数调用支持的ChatGPT风格的界面,实现了与Azure DevOps的自然语言交互。

🎥 快速演示

观看Azure DevOps MCP服务器的快速演示,使用自然语言创建和更新工作项。

✨ 特性

  • MCP服务器:实现模型上下文协议,将51个Azure DevOps工具作为MCP工具公开。
  • 前端用户界面:基于Next.js的聊天界面,用于通过自然语言与MCP服务器交互。
  • Azure DevOps集成:使用Azure DevOps REST API查询工作项、项目、构建、发布、存储库、管道、板等。
  • 环境配置:将机密和配置存储在 .env 文件夹。
  • OpenAI函数调用:使用Azure OpenAI解析自然语言查询并调用相应的工具。
  • 实时数据:所有工具都从您的Azure DevOps组织获取实时数据。
  • 现代用户界面:响应式、ChatGPT风格的界面,带有侧边栏工具列表、对话历史记录和markdown渲染。

🏗️ 架构概述

Azure DevOps MCP Server
├── Server (Node.js + TypeScript)
│   ├── MCP Server (Model Context Protocol)
│   ├── HTTP API (Express)
│   ├── Azure DevOps Client (Axios)
│   └── OpenAI Integration (function calling)
├── Frontend (Next.js 14 + React + Tailwind CSS)
│   ├── Chat interface with message bubbles
│   ├── Sidebar with tool listing
│   ├── Real‑time tool execution
│   └── Responsive design
└── Configuration
    ├── .env (secrets)
    ├── Azure DevOps PAT
    └── Azure OpenAI credentials

🚀 快速开始

先决条件

  • Node.js 18+
  • 具有读/写权限的个人访问令牌(PAT)的Azure DevOps组织
  • (可选)用于自然语言处理的Azure OpenAI服务

安装

  1. 克隆存储库:

    git clone <repo-url>
    cd azure-devops-mcp
    
  2. 安装根依赖项(并发):

    npm install
    
  3. 安装服务器依赖项:

    cd server && npm install
    
  4. 安装前端依赖项:

    cd ../frontend && npm install
    
  5. 配置环境变量:

    • 复制 .env.example 到 .env 在根目录中。
    • 编辑 .env 使用您的Azure DevOps凭据:
      AZURE_DEVOPS_ORG_URL=https://dev.azure.com/your-organization
      AZURE_DEVOPS_PAT=your-personal-access-token
      AZURE_DEVOPS_PROJECT=Your-Project-Name
      PORT=3001
      NEXT_PUBLIC_API_URL=http://localhost:3001
      AZURE_OPENAI_API_KEY=your-openai-key
      AZURE_OPENAI_ENDPOINT=https://your-openai-endpoint.cognitiveservices.azure.com
      AZURE_OPENAI_API_VERSION=2025-01-01-preview
      AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4
      

运行系统

选项1:同时运行服务器和前端(推荐)

从根目录:

npm run dev

这将开始:

  • MCP服务器已打开 http://localhost:3001
  • 前端打开 http://localhost:3000

选项2:单独运行

启动MCP服务器:

cd server
npm run dev

启动前端:

cd frontend
npm run dev

🛠️ 使用MCP服务器

作为MCP服务器(stdio)

该服务器可以用作标准MCP服务器,具有Claude Desktop、Cursor等客户端。

  1. 构建服务器:

    cd server
    npm run build
    
  2. 配置您的MCP客户端以使用服务器可执行文件:

    {
      "mcpServers": {
        "azure-devops": {
          "command": "node",
          "args": ["/path/to/azure-devops-mcp/server/dist/index.js", "--stdio"]
        }
      }
    }
    

HTTP API终结点

服务器还为前端公开了一个HTTP API:

  • GET /health -健康检查
  • GET /api/tools -列出可用工具
  • POST /api/tools/:name -使用JSON参数执行工具
  • POST /api/chat -通过OpenAI函数调用完成聊天

使用前端UI

  1. 打开 http://localhost:3000 在您的浏览器中。
  2. 侧边栏显示了所有51个可用的Azure DevOps工具。
  3. 键入一个自然语言查询(例如,“列出所有项目”,“创建一个名为“登录问题”的bug”,“向我展示最新版本”)。
  4. AI将解析您的查询,调用相应的工具,并在聊天窗口中显示结果。
  5. 您还可以从侧边栏中手动选择一个工具并填写参数。

📋 可用工具(共51个)

工具名称 描述 必需参数 可选参数
list_projects 列出Azure DevOps组织中的所有项目 无 无
list_project_teams 检索指定Azure DevOps项目的团队列表。 项目 无
get_identity_ids 检索提供的搜索筛选器的Azure DevOps身份ID。 搜索筛选器 无
query_work_items 使用WIQL(Azure DevOps查询语言)查询工作项 WIQL 无
get_work_items_by_ids 按ID IDs 项获取工作项
get_builds 获取项目的最新版本 None definitionId
get_releases 获取项目的最新版本 无 top
create_work_item 在Azure DevOps中创建新的工作项(使用环境中配置的默认项目)。提供工作项类型和标题。项目已设置,因此您不需要指定它。 workItemType,title 无
update_work_item 更新Azure DevOps中现有工作项的字段。提供工作项ID和具有字段名称(例如System.Description)和新值的字段对象。您还可以添加可选注释。常见字段映射:“description”->系统。描述,“title”->系统。标题,“状态”->系统。状态,“分配给”->系统。分配给。 id,字段 无
assign_work_item 将工作项分配给用户。提供工作项ID和受让人(用户显示名称或电子邮件)。可选择添加评论。 id,受让人 无
list_repositories 列出项目中的存储库(如果未指定,则使用默认项目) 无 项目
list_branches 列出存储库中的分支 repositoryId 无
list_pull_requests 列出存储库或项目中的拉取请求 无 repositoryId
get_pull_request 获取特定拉取请求的详细信息 repositoryId,pullRequestId 无
search_code 跨存储库搜索代码 searchText 无
search_work_items 使用文本搜索搜索工作项 searchText 无
list_wikis 列出项目中的Wiki 无 项目
get_wiki_page 获取wiki页面的内容 wikiIdentifier 无
list_team_iterations 列出团队 项目、团队 无迭代
list_test_plans 列出项目中的测试计划 项目 无
get_current_user 获取当前经过身份验证的用户详细信息 无 无
list_work_item_types 列出项目中可用的工作项类型 无 项目
list_iterations 列出项目的迭代(冲刺) 无 项目
list_build_definitions 列出项目的生成定义(管道) 无 项目
list_release_definitions 列出项目的发布定义 无 项目
list_queries 列出项目中已保存的工作项查询 无 项目
get_work_item_revisions 获取工作项的修订历史 id 无
get_work_item_links 获取工作项的链接(关系) id 无
create_pull_request 创建新的拉取请求 repositoryId、sourceBranch、targetBranch、title 无
list_commits 存储库中的列表提交 repositoryId 无
get_file_content 获取存储库中文件的内容 repositoryId,路径 无
list_areas 列出项目中的区域(分类节点) 无 项目
list_iteration_capacities 获取团队迭代的容量 项目、团队、迭代ID 无
list_work_item_categories 列出项目中的工作项类别 无 项目
list_dashboards 列出项目中的仪表板 无 项目
list_pipelines 列出项目中的管道(YAML管道) 无 项目
list_test_suites 列出测试计划中的测试套件 项目,planId 无
list_variable_groups 列出管道的变量组 无 项目
list_service_endpoints 列出服务终结点(服务连接) 无 项目
list_tags 列出项目中的标记 无 项目
list_team_members 列出团队成员 项目,团队 无
list_boards 列出团队的板(工作项板) 项目,团队 无
list_board_columns 列出董事会的列 项目、团队、董事会 无
list_board_rows 列出董事会的行 项目、团队、董事会 无
list_work_item_states 列出工作项类型 项目、workItemType 无的状态
list_work_item_fields 列出工作项字段(元数据) 无 项目
list_work_item_updates 列出工作项的更新(历史记录) id 无
list_work_item_attachments 列出工作项的附件 id 无
list_work_item_comments 列出工作项的注释 id 无
list_work_item_relations 列出工作项的关系(链接) id 无
list_work_item_query_results 运行已保存的查询并获取结果 项目,queryId 无

💬 查询示例

工作项

  • “列出terraform模块项目中的所有活动错误”
  • “创建一个名为“更新文档”的新任务”
  • “将工作项123分配给John Doe”
  • 将工作项456的描述更新为“已修复登录错误”

项目和团队

  • “显示所有项目”
  • “列出地形模块项目中的团队”
  • “地形模块团队的成员是谁?”

构建与发布

  • “显示最新版本”
  • “列出发布定义”
  • “最新版本的状态如何?”

存储库和代码

  • “列出存储库”
  • 在代码中搜索“TODO”
  • “显示主分支中README.md的内容”

木板和Sprints

  • “列出地形模块团队的板”
  • “Sprint板上的列是什么?”
  • “显示团队的迭代”

🔧 发展

服务器开发

  • 服务器是用TypeScript编写的,并使用 @modelcontextprotocol/sdk 包裹。
  • 要修改工具,请编辑 server/src/index.ts.
  • 若要更改Azure DevOps API交互,请编辑 server/src/azure-devops-client.ts.
  • 重建与 cd server && npm run build.

前端开发

  • 前端使用Next.js 14和App Router以及Tailwind CSS。
  • 组件位于 frontend/components/.
  • 主聊天界面位于 frontend/app/page.tsx.
  • 使用以下命令运行前端开发服务器 cd frontend && npm run dev.

添加新工具

  1. 将新工具定义添加到 tools 数组 server/src/index.ts.
  2. 在中实施相应的方法 server/src/azure-devops-client.ts.
  3. 在MCP CallTool处理程序开关中添加一个案例。
  4. 在HTTP API端点开关中添加案例。
  5. 在聊天完成端点开关中添加一个案例。
  6. 通过HTTP POST或前端测试该工具。

🚢 部署

服务器部署

构建用于生产的服务器:

cd server
npm run build

输出将在 server/dist/。您可以使用以下命令运行它:

node dist/index.js

在生产服务器上设置环境变量。

前端部署

构建前端:

cd frontend
npm run build

您可以部署 frontend/.next Vercel、Netlify或任何静态主机的目录。

Docker部署

A. Dockerfile 可以创建以容器化服务器和前端。

🔒 环境变量

看 .env.example 对于所有可用变量。

变量 描述 必填
AZURE_DEVOPS_ORG_URL 您的Azure DevOps组织URL(例如。, https://dev.azure.com/your-org) 是
AZURE_DEVOPS_PAT 具有适当权限的个人访问令牌 是
AZURE_DEVOPS_PROJECT 默认项目名称 是
PORT HTTP服务器端口(默认 3001) 没有
NEXT_PUBLIC_API_URL 前端API URL(默认值 http://localhost:3001) 没有
AZURE_OPENAI_API_KEY Azure OpenAI API密钥 否(聊天需要)
AZURE_OPENAI_ENDPOINT Azure OpenAI端点 否
AZURE_OPENAI_API_VERSION API版本 否
AZURE_OPENAI_DEPLOYMENT_NAME 部署名称(例如。, gpt-4) 没有

🛠️ 故障排除

  • 服务器无法启动:检查一下 .env 文件存在于根目录中,并具有正确的Azure DevOps凭据。
  • 前端无法连接到服务器:确保 NEXT_PUBLIC_API_URL 匹配服务器的端口(默认 http://localhost:3001).
  • Azure DevOps API错误:验证您的PAT是否具有足够的权限(对项目、工作项、构建、发布等的读取权限)。
  • OpenAI函数调用不起作用:确保设置了Azure OpenAI凭据并且部署处于活动状态。
  • 工具返回空结果:Azure DevOps API可能没有数据;检查你的项目/团队名称。

☕ 支持开发者

如果你觉得这个项目很有帮助,并想支持我的工作,可以考虑给我买杯咖啡!

您的支持帮助我继续创建开源工具并改进这个项目!

👨‍💻 关于开发者

达米洛拉·奥纳丁德 DevOps/AI工程师|云基础设施专家|开源贡献者

联系我:

📝 许可证

MIT许可证-可自由用于个人或商业项目。

🆘 支持

对于问题或疑问:

  1. 检查上面的故障排除部分。
  2. 查看Azure DevOps REST API文档。
  3. 验证Azure OpenAI服务状态。
  4. 检查服务器日志以获取详细的错误消息。

🎉 接下来是什么?

  • 添加对Azure DevOps Analytics查询的支持。
  • 实现实时通知(webhooks)。
  • 添加更多工具(测试运行、审批、权限)。
  • 带有图表和仪表板的增强用户界面。
  • 多组织支持。
  • 查询结果的导出功能。

内置于❤️ 达米洛拉·奥纳丁德| 支持我的工作