Azure DevOps发布说明——Claude代码插件
一个Claude Code MCP插件,可以自动生成Azure DevOps发行说明 指导、同意驱动的工作流程。通过sprint获取工作项,渲染Markdown 模板,并直接发布到您的Azure DevOps Wiki。
______________________________________________________________________
特性
- 🔍 智能工作项提取 --使用WIQL按迭代路径查询Azure DevOps
- 📋 工作项表预览 --在生成笔记之前查看所有项目
- 🎨 捆绑的Markdown模板 --开箱即用,完全可定制
- 📄 维基出版 --创建或更新带有覆盖确认的wiki页面
- 🔒 每一步都表示同意 --没有两个明确的确认,任何东西都不会发布
- 🔗 共享查询保存 --可选择将每个sprint的查询保存在Azure DevOps中
- ⚙️ 交互式设置向导 —
./setup.sh一次性配置所有内容 - 🔄 轻松更新 —
./setup.sh --update在不更改配置的情况下进行重建
______________________________________________________________________
快速开始
1.克隆仓库
git clone https://github.com/Chamalasela/azure-devops-release-notes-mcp.git
cd azure-devops-release-notes-mcp2.修复权限(macOS/Linux)
如果你得到一个 permission denied 运行安装脚本时出错,请先修复:
chmod +x setup.sh3.运行安装向导
./setup.sh向导将:
- 请求您的Azure DevOps凭据(PAT和Wiki URL)
- 安装npm依赖项
- 构建TypeScript项目
- 测试你的Azure DevOps连接
- 使用Claude Code自动注册插件
4.重新启动克劳德代码
| 平台 | 如何重新启动 |
|---|---|
| macOS | 媒体 Ctrl + C 在运行Claude Code的终端中,然后运行 claude 再一次 |
| 视窗 | 媒体 Ctrl + Shift + P → type Developer: Reload Window → 进入 |
5.使用它
/generate-release-note Sprint 42______________________________________________________________________
工作流程
/generate-release-note Sprint 42
│
▼
Fetch work items for iteration
Show work items table
│
▼
"Proceed and view?" or "Don't proceed"
│
▼
Render Markdown preview
│
▼
"Proceed?" or "Don't proceed"
(If page exists: confirm overwrite)
│
▼
Publish to Azure DevOps Wiki ✅没有任何东西是不会出版的 两个明确的确认 从你。
______________________________________________________________________
配置(.env)
复制 .env.example 到 .env 并填写以下值:
cp .env.example .env必需
| 变量 | 描述 | 示例 |
|---|---|---|
AZURE_DEVOPS_PAT | 个人访问令牌 | abc123... |
AZURE_DEVOPS_WIKI_URL | 发布发布说明的wiki文件夹的完整浏览器URL | https://dev.azure.com/myorg/MyProject/_wiki/wikis/MyProject.wiki?pagePath=/Release-Notes |
如何获得 AZURE_DEVOPS_WIKI_URL: 在浏览器中打开Azure DevOps Wiki, 导航到要存储发行说明的文件夹,并直接复制URL 从地址栏。可选(提供合理的默认值)
| 变量 | 描述 | 默认值 |
|---|---|---|
AZURE_DEVOPS_WORK_ITEM_TYPES | 要包含的逗号分隔的工作项类型 | User Story,Bug,Feature |
AZURE_DEVOPS_ITERATION_PATH_PREFIX | sprint名称前的路径前缀 | 解析自 AZURE_DEVOPS_WIKI_URL |
RELEASE_NOTE_NAME_FORMAT | Wiki页面名称格式({{sprintName}} =冲刺名称) | {{sprintName}} |
AZURE_DEVOPS_SHARED_QUERY_PATH | 用于保存共享查询的文件夹 | Shared Queries/Release Notes |
⚠️AZURE_DEVOPS_ITERATION_PATH_PREFIX警告: 这应该是 父母 路径 只是——不要在末尾包含sprint名称。例如,如果你的完整迭代 路径是MyProject\Team Alpha\Sprint 42,前缀应为MyProject\Team Alpha. 冲刺名称会自动附加。将其设置为MyProject\Team Alpha\Sprint 42将导致重复段错误(Sprint 42\Sprint 42).
______________________________________________________________________
PAT所需范围
在Azure DevOps中→ 用户设置→ 个人访问令牌,启用:
- ✅ 工作项目: 阅读
- ✅ 维基: 读与写
- ✅ 项目和团队: 阅读
- ✅ 工作项查询: 读与写
______________________________________________________________________
可用命令(克劳德代码)
| 命令 | 发生了什么 |
|---|---|
/generate-release-note | 完整的发行说明流程 |
/configure-release-notes | 显示配置状态 |
/validate-connection | 测试Azure DevOps连接 |
示例:
/generate-release-note Sprint 42
/generate-release-note 2026-03
/configure-release-notes
/validate-connection______________________________________________________________________
自定义模板
捆绑 release-note-template.md 使用Handlebars语法,开箱即用。 编辑它以匹配您团队的风格:
# Release Notes — {{sprintName}}
**Date:** {{generatedDate}} | **Project:** {{project}}
## 🐛 Bug Fixes
{{#each bugs}}
- [#{{this.id}}]({{this.url}}) {{this.title}} — *{{this.assignedTo}}*
{{/each}}
## 📖 User Stories
{{#each userStories}}
- [#{{this.id}}]({{this.url}}) {{this.title}}
{{/each}}可用变量:
| 变量 | 类型 | 描述 |
|---|---|---|
{{sprintName}} | string | 提供的Sprint名称 |
{{generatedDate}} | string | 格式化日期 |
{{project}} | string | Azure DevOps项目名称 |
{{iterationPath}} | string | 完整迭代路径 |
{{totalCount}} | number | 工作项总数 |
{{features}} | array | 功能工作项 |
{{userStories}} | array | 用户故事工作项 |
{{bugs}} | array | Bug工作项 |
{{tasks}} | array | 任务工作项 |
{{epics}} | array | 史诗级工作项 |
每个工作项都有: id, title, state, assignedTo, workItemType, url.
______________________________________________________________________
更新插件
同一台机器(之后 git pull)
git pull
./setup.sh --update这 --update flag跳过所有配置问题——它只是重新安装依赖关系, 重建并确保MCP服务器已注册。你的 .env 未被触碰。
然后重新启动Claude Code。
新机器(或首次克隆队友)
git clone https://github.com/Chamalasela/azure-devops-release-notes-mcp.git
cd azure-devops-release-notes-mcp
chmod +x setup.sh
./setup.sh| 态势 | 指挥 |
|---|---|
| 第一次使用这台机器 | ./setup.sh |
之后 git pull 在同一台机器上 | ./setup.sh --update |
| 只是重建 | npm run build |
______________________________________________________________________
故障排除
permission denied: ./setup.sh
chmod +x setup.shTypeScript build failed — heap out of memory
NODE_OPTIONS=--max-old-space-size=8192 npm run build或者,当向导在构建失败后要求继续时,可以说 y --它将使用 ts-node 模式(不需要编译输出)。
declare: -g: invalid option (macOS)
macOS附带了bash 3.2。拉取最新版本并重新运行——脚本兼容:
git pull && chmod +x setup.sh && ./setup.shAuthentication failed (401)
您的PAT已过期或作用域不足。创建一个新的 dev.azure.com → 用户设置→ 个人访问令牌,然后更新 AZURE_DEVOPS_PAT 在你的 .env 并重新运行 ./setup.sh --update.
No work items found
检查 AZURE_DEVOPS_ITERATION_PATH_PREFIX 匹配您的Azure DevOps项目结构。 完整路径构建为:
{AZURE_DEVOPS_ITERATION_PATH_PREFIX}\{sprint name you provided}跑 /validate-connection 在Claude Code中,如果前缀看起来像,它会警告您 配置错误。
Iteration path not found (HTTP 400) /重复路径段
这意味着 AZURE_DEVOPS_ITERATION_PATH_PREFIX 已经以sprint名称结尾。 例如,如果您将其设置为 MyProject\Team\2026-03 然后生成笔记 2026-03,路径变为 MyProject\Team\2026-03\2026-03.
修复: 从中删除后面的冲刺段 AZURE_DEVOPS_ITERATION_PATH_PREFIX. 应该是 父母 仅路径-- MyProject\Team.
generate_release_note tool unavailable /MCP服务器未连接
claude mcp list如果 azure-devops-release-notes 缺少,请注册:
claude mcp add azure-devops-release-notes \
--scope user \
-- node /absolute/path/to/azure-devops-release-notes-mcp/dist/index.js然后重新启动Claude Code。如果你使用 ./setup.sh --update 在一台新机器上 工具仍然缺失,请完整运行 ./setup.sh 在这台机器上注册一次。
插件可以在一台机器上工作,但不能在另一台计算机上工作
MCP服务器路径是特定于机器的。永远奔跑 ./setup.sh (不是 --update)the 第一次 在一台新机器上。要修复错误的路径,请执行以下操作:
claude mcp remove azure-devops-release-notes
claude mcp add azure-devops-release-notes \
--scope user \
-- node /correct/path/to/dist/index.js./setup.sh 在重新运行时不断要求PAT
拉取最新版本——即使在以下情况下,旧版本也总是会重新提示 .env 存在的:
git pull && ./setup.sh______________________________________________________________________
手动设置(适用于开发人员)
# 1. Install dependencies
npm install
# 2. Configure
cp .env.example .env
# Edit .env — minimum required: AZURE_DEVOPS_PAT and AZURE_DEVOPS_WIKI_URL
# 3. Build
npm run build
# 4. Register with Claude Code
claude mcp add azure-devops-release-notes \
--scope user \
-- node /absolute/path/to/azure-devops-release-notes-mcp/dist/index.js
# 5. Verify
claude mcp list______________________________________________________________________
项目结构
├── .env.example # Environment variable template
├── release-note-template.md # Bundled Handlebars template (edit to customise)
├── setup.sh # Interactive setup wizard (bash 3.2+ compatible)
├── CLAUDE.md # Claude Code plugin registration docs
├── CHANGELOG.md # Version history
├── .claude/
│ └── commands/ # Slash command definitions
│ ├── generate-release-note.md
│ ├── configure-release-notes.md
│ └── validate-connection.md
└── src/
├── index.ts # MCP server — tool registrations
├── commands/
│ ├── generate.ts # 3-step generation flow
│ └── configure.ts # Config status & connection test
├── services/
│ ├── azureDevops.ts # Axios client + error handling
│ ├── workItems.ts # WIQL queries + batch item fetching
│ ├── wiki.ts # Wiki page create/update (ETag safe)
│ └── sharedQuery.ts # Shared query management
└── utils/
├── config.ts # .env loader + validation
└── templateEngine.ts # Handlebars renderer + table formatter______________________________________________________________________
发展
npm run dev # Run without building (ts-node)
npm run build # Compile TypeScript → dist/
npm run typecheck # Type check without emitting______________________________________________________________________
贡献
- 分叉回购
- 创建要素分支:
git checkout -b feat/my-feature - 承诺:
git commit -m 'feat: add my feature' - 推送并打开PR
请更新 CHANGELOG.md 在...之下 [Unreleased] 并总结您的更改。
______________________________________________________________________
许可证
麻省理工学院
