AI生成提交信息与PR描述工具

一款自动生成一致的提交信息、PR内容和发布说明的MCP服务器工具,支持多种开发场景和模板自动检测。

  • by mhaviv
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 mhaviv/pr-narrator-mcp

使用说明

公关解说员mcp

自动生成一致的提交消息、PR内容和发布说明。

一个MCP服务器,从git更改中生成提交消息、PR内容(标题、描述和模板)和发布说明。如果你的仓库还没有PR模板,它会自动检测域(移动、前端、后端、devops、安全、ML)并应用正确的模板——不需要配置。

安装

npx pr-narrator-mcp

快速开始

光标

增添 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "pr-narrator": {
      "command": "npx",
      "args": ["-y", "pr-narrator-mcp"],
      "env": {
        "BASE_BRANCH": "develop",
        "TICKET_PATTERN": "[A-Z]+-\\d+"
      }
    }
  }
}

克劳德桌面版

添加到您的Claude Desktop配置中:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "pr-narrator": {
      "command": "npx",
      "args": ["-y", "pr-narrator-mcp"],
      "env": {
        "BASE_BRANCH": "develop",
        "TICKET_PATTERN": "[A-Z]+-\\d+"
      }
    }
  }
}

帆板运动

增添 ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "pr-narrator": {
      "command": "npx",
      "args": ["-y", "pr-narrator-mcp"],
      "env": {
        "BASE_BRANCH": "develop",
        "TICKET_PATTERN": "[A-Z]+-\\d+"
      }
    }
  }
}

VS代码(GitHub副本)

增添 .vscode/mcp.json 在您的项目中:

{
  "servers": {
    "pr-narrator": {
      "command": "npx",
      "args": ["-y", "pr-narrator-mcp"],
      "env": {
        "BASE_BRANCH": "develop",
        "TICKET_PATTERN": "[A-Z]+-\\d+"
      }
    }
  }
}

其他MCP客户端

任何支持stdio传输的MCP客户端都可以使用此服务器。命令是:

npx -y pr-narrator-mcp

就是这样!不需要配置文件。所有env变量都是可选的。

设置

所有设置都是MCP JSON中的可选环境变量:

Env Var 它的作用 示例
BASE_BRANCH PR的基础分支 develop
TICKET_PATTERN 票证正则表达式 [A-Z]+-\\d+
TICKET_LINK 票证URL模板 https://jira.example.com/browse/{ticket}
PREFIX_STYLE 前缀格式 capitalized 或 bracketed
DEFAULT_REPO_PATH 后备回购路径(单个回购工作流) /Users/me/my-project
PR_TEMPLATE_PRESET 强制预置PR模板 mobile, backend, devops
PR_DETECT_REPO_TEMPLATE 启用/禁用回购模板检测 true (默认)或 false

如果 BASE_BRANCH 如果未设置,它会从仓库(主仓库、主仓库、开发仓库)自动检测。

注意 repoPath: 所有工具都接受 repoPath 参数。调用该工具的AI应传递用户当前的工作区目录。 DEFAULT_REPO_PATH 这只是单个repo工作流的后备方案。

工具

公关生成

generate_pr

生成一份完整的PR,包括标题、描述和AI增强的上下文。自动解析仓库的最佳模板(请参阅 PR模板).

退货:

  • title --PR标题(占位符来源于分支/提交——AI应该重写)
  • description --PR描述,包括已解析模板中的部分
  • purposeContext --所有提交标题、所有提交项目符号、测试信息、文件计数
  • purposeGuidelines --AI从所有数据中重写标题和目的的说明

重要提示: 标题和目的都是占位符。AI必须阅读所有内容 purposeContext.commitTitles 和 purposeContext.commitBullets 综合一个反映全部变化的标题和描述。

可选的 templatePreset 用于强制特定模板的参数(例如。, mobile, backend).

generate_pr_title

根据分支机构信息和提交生成PR标题。

generate_pr_description

生成带有自动填充部分的PR描述。模板分辨率与 generate_pr 但仅返回描述。接受可选 templatePreset 和 summary 参数。

get_pr_template

在生成之前预览已解析的回购PR模板。显示将根据仓库的模板文件、域自动检测或配置的预设显示哪些部分。有助于在打电话之前了解PR的样子 generate_pr.

返回模板源(repo, preset, auto-detected,或 default),检测到的域,以及基于当前分支更改的每个部分的可见性。

提交消息

generate_commit_message

根据阶段性或非阶段性更改准备提交消息上下文。

如果没有暂存,该工具会自动回退到未暂存的工作树更改,并提供暂存指令——无需运行 git add 首先,分析一下你的变化。该回复包括 source 现场("staged" 或 "unstaged")以及a hint 与确切 git add 命令运行。

当 includeBody 是真的,提供了实际的差异,这样AI就可以编写一个有意义的正文来描述 发生了什么变化 功能上——不仅仅是文件类型计数。

两种模式:

  • 随着 summary 参数(推荐): 返回具有正确前缀/格式的即用型提交消息。添加 includeBody: true 以获得基于diff的身体生成。
  • 没有 summary: 返回占位符标题+差异+AI编写消息和正文的准则

validate_commit_message

根据配置的规则(长度、格式、大小写、命令式语气)检查提交消息。

发布说明

generate_changelog

从两个引用(标签、SHA或分支)之间的git提交历史中生成更改日志/发布说明。

  • 自动解析引用 --默认值 from 到最新标签(如果没有标签,则为初始提交),以及 to 率领
  • 解析提交 --检测常规提交类型/范围,从非常规消息的关键字中推断类型,提取合著者和票证引用
  • 重复数据删除 挤压合并伪影
  • 三种输出格式: keepachangelog (默认), github-release, plain
  • 三种分组模式: type (默认), scope, ticket
  • 包括统计数据 --提交计数、贡献者计数、票证计数和单行摘要

退货 changelog (格式化标记), entries (结构化数据), summary, stats, range,以及 warnings.

存储库分析

分析it变化

分析当前存储库状态:阶段性更改、分支信息、工作树状态和文件分类。

提取门票

在分支机构名称中查找票号,并使用配置的 TICKET_PATTERN.

get_config

查看当前设置及其解析值。

前缀示例

分支 提交/PR前缀
feature/PROJ-123-add-login PROJ-123:
task/update-readme Task:
bug/fix-crash Bug:
main (无前缀)

PR模板

PR讲述人通过解析管道自动为每个存储库选择最佳模板:

  1. 回购模板 --如果a PULL_REQUEST_TEMPLATE.md 存在于回购中(.github/,根,或 docs/),它被解析为多个部分
  2. 显式预设 --如果 PR_TEMPLATE_PRESET 已设置或 templatePreset 传递给工具
  3. 自动检测域 --对仓库的文件树进行扫描和评分,以检测其域
  4. 默认 --一个通用的6节模板

这意味着在转发(iOS应用程序、Express API、Terraform infra)之间切换会自动使用正确的模板,零配置。

域自动检测

PR讲述者扫描回购文件树的前3个级别,并根据域信号模式对文件进行评分。只要达到最低阈值,得分最高的域名就获胜。

域 关键信号 已添加部分
移动 .swift, .kt, .xcodeproj, AndroidManifest.xml 屏幕截图、设备测试、可访问性
前端 .tsx, .vue, next.config, vite.config 屏幕截图/视觉变化、浏览器兼容性、可访问性
后端 .go, .rs, migrations/, prisma/schema API更改、数据库/迁移、中断更改
开发运维 .tf, helm/, k8s/, Dockerfile 基础设施影响、受影响的环境、回滚计划
安全 .snyk, tfsec, trivy 安全影响、威胁模型变化
毫升 .ipynb, model/, training/, dvc.yaml 模型更改、数据集更改、度量/评估

预置模式

预设 部分 最适合
default 6 通用仓库
minimal 2 快速PR(目的+测试计划)
detailed 10 全面审查,包括截图、重大变更、部署说明
mobile 8 iOS和Android应用程序
frontend 8 Web应用程序(React、Vue、Svelte等)
backend 8 API和服务
devops 8 基础设施和CI/CD
security 7 以安全为重点的变化
ml 8 机器学习和数据科学

条件段

部分可以根据上下文显示或隐藏:

  • has_tickets --只有在分行名称或提交中找到票证时,才会出现票证部分
  • file_pattern --截图部分仅在UI文件更改时出现;仅当迁移文件发生更改时才使用数据库部分
  • commit_count_gt --更改(提交列表)部分仅在提交次数超过1次时显示

回购模板检测

如果你的回购有 PULL_REQUEST_TEMPLATE.md,PR讲述人将自动查找并解析它。支持的位置:

  • .github/pull_request_template.md
  • .github/PULL_REQUEST_TEMPLATE/ (挑选 default.md 第一)
  • pull_request_template.md (回购根)
  • docs/pull_request_template.md

文件名匹配不区分大小写。两者 .md 和 .txt 支持扩展。

集 PR_DETECT_REPO_TEMPLATE=false 跳过仓库模板检测,改用预设或自动检测。

安全

此MCP服务器是 只读 和 仅限本地 (stdio传输)。它永远不会修改您的git存储库、发出网络请求或处理身份验证令牌。

需要注意的事项:

  • 差异可能包含秘密。 分阶段的更改和分支差异被发送到AI进行分析。如果提交包含API密钥或密码,则这些密钥或密码对模型可见。使用 git秘密 或 Git泄漏 以防止提交敏感数据。
  • 提交消息是不受信任的输入。 来自协作者的Git提交消息被传递给AI。理论上,对抗性提交消息可以尝试提示注入。此MCP的只读性质限制了影响。
  • 正则表达式模式已得到验证。 这 TICKET_PATTERN 在使用之前,会检查env-var的ReDoS安全性(灾难性回溯、长度限制)。

有关完整详细信息,请参阅 安全.md.

发展

git clone https://github.com/mhaviv/pr-narrator-mcp.git
cd pr-narrator-mcp
npm install
npm run build
npm test

许可证

麻省理工学院