使用说明
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服务
安装
-
克隆存储库:
git clone <repo-url> cd azure-devops-mcp -
安装根依赖项(并发):
npm install -
安装服务器依赖项:
cd server && npm install -
安装前端依赖项:
cd ../frontend && npm install -
配置环境变量:
- 复制
.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等客户端。
-
构建服务器:
cd server npm run build -
配置您的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
- 打开
http://localhost:3000在您的浏览器中。 - 侧边栏显示了所有51个可用的Azure DevOps工具。
- 键入一个自然语言查询(例如,“列出所有项目”,“创建一个名为“登录问题”的bug”,“向我展示最新版本”)。
- AI将解析您的查询,调用相应的工具,并在聊天窗口中显示结果。
- 您还可以从侧边栏中手动选择一个工具并填写参数。
📋 可用工具(共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.
添加新工具
- 将新工具定义添加到
tools数组server/src/index.ts. - 在中实施相应的方法
server/src/azure-devops-client.ts. - 在MCP CallTool处理程序开关中添加一个案例。
- 在HTTP API端点开关中添加案例。
- 在聊天完成端点开关中添加一个案例。
- 通过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工程师|云基础设施专家|开源贡献者
联系我:
- github: @damsconas
- 领英: 达米洛拉·奥纳丁德
- 文件夹: devopswithdami.com
- 油管 devopswithami
📝 许可证
MIT许可证-可自由用于个人或商业项目。
🆘 支持
对于问题或疑问:
- 检查上面的故障排除部分。
- 查看Azure DevOps REST API文档。
- 验证Azure OpenAI服务状态。
- 检查服务器日志以获取详细的错误消息。
🎉 接下来是什么?
- 添加对Azure DevOps Analytics查询的支持。
- 实现实时通知(webhooks)。
- 添加更多工具(测试运行、审批、权限)。
- 带有图表和仪表板的增强用户界面。
- 多组织支持。
- 查询结果的导出功能。
内置于❤️ 达米洛拉·奥纳丁德| 支持我的工作