mcpField
P
prbody

prbody

本地服务
github.com/CloudCorpRecords版本控制01 周前更新

关于 prbody

prbody 根据提供的标题、提交列表和可选 issue 编号填充 PR 模板,供希望统一 PR 正文格式的作者使用。它只处理输入内容,不访问网络或代码仓库。

主要功能

  1. 01填充标题和提交占位符
  2. 02生成含短哈希的提交摘要
  3. 03添加关闭 issue 的语句
  4. 04报告未知占位符
  5. 05验证输入并返回结构化结果

适用场景

  1. 01根据提交草拟 PR 正文
  2. 02填充代码仓库的 PR 模板
  3. 03识别工具无法填充的模板字段

MCP 相关

它向 MCP 客户端提供 build_pr_body 工具;调用方传入模板、提交列表以及可选标题和 issue 编号。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-prbody": {
"command": "npx",
"args": [
"-y",
"@reneturcios/prbody"
]
}
}
}
启动命令npx -y @reneturcios/prbody

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/prbody0.1.0
ocighcr.io/cloudcorprecords/prbody:0.1.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
titlestring否PR 标题(可选)
commitsarray是PR 的提交,按时间从旧到新排列:{hash, subject}
templatestring是仓库的 PR 模板文本,包含 {{...}} 占位符
issue_numberinteger否关联的 issue 编号(可选)

详细介绍

prbody

每个仓库都有 PR 模板,而每位 PR 作者填写模板的 方式都不一样——有人会覆盖模板,有人会留下空标题。 prbody 将这部分机械工作从作者手中接过来:你把模板、 PR 的提交以及它要关闭的问题交给它,它就会返回一份 填好模板占位符的正文,每次都保持一致。

有四个固定占位符,拼写必须完全如下:

  • {{title}} — PR 标题;未提供标题时为空字符串。
  • {{summary}} — 每个提交占一行,顺序与提交给定的顺序相同:- <subject>。
  • {{commits}} — 每个提交占一行,顺序相同,并附上短哈希: - <subject> (<hash7>),其中 <hash7> 是提交哈希的前 7 个字符(如果哈希长度不足 7,则使用整个哈希)。
  • {{issue_link}} — 提供问题编号时为 Closes #<issue_number>, 未提供时为空字符串。

每个已知占位符的所有出现位置都会被替换。 任何其他 {{...}} 片段——从 {{ 到下一个 }} 之间的所有内容——都会在正文中保持原样,并将其中的名称 去除首尾空白后,作为 unfilled_placeholders 报告(去重并按升序 排序),这样模板中 prbody 不认识的内容会显式显示出来,而不会被悄悄丢弃。 后面没有 }} 的 {{ 并非占位符:会保留原样,也不会报告。 替换文本不会再次扫描,因此标题或提交主题中包含的 {{...}} 序列会保持原样。

结果还会报告 commit_count(提交数量)和 closes_issue(仅当提供了问题编号时为 true)。格式错误的输入—— 缺失、为空或非字符串的 template;缺失、非数组或为空的 commits;不是对象的提交条目,或其 hash 或 subject 缺失、 为空或非字符串;非大于等于 1 的整数 issue_number;或存在但为空 或非字符串的 title——都会导致验证错误,并指出有问题的路径 (例如 commits[1].subject must be a non-empty string),且不会返回 部分结果。未知的额外字段会被忽略,包括提交条目中的额外字段。 计算过程纯粹且在本地进行:不会访问网络、配置或读取、触碰任何 仓库——prbody 只会填充传入的模板。

CLI

npx @reneturcios/prbody build --input args.json
npx @reneturcios/prbody --version

args.json 包含完整的参数对象:

{
  "template": "## {{title}}\n\n### Commits\n{{commits}}\n\n{{issue_link}}",
  "commits": [
    { "hash": "abc1234def5678", "subject": "Add login form" },
    { "hash": "9876fedcba4321", "subject": "Fix redirect loop" }
  ],
  "issue_number": 42,
  "title": "Login rework"
}

结果会以 JSON 格式打印:

{
  "body": "## Login rework\n\n### Commits\n- Add login form (abc1234)\n- Fix redirect loop (9876fed)\n\nCloses #42",
  "unfilled_placeholders": [],
  "commit_count": 2,
  "closes_issue": true
}

退出代码:成功时为 0,运行时错误时为 1(包括无法读取或无效的输入文件,或无效输入),用法错误时为 2。

MCP 服务

npx -y @reneturcios/prbody mcp

MCP 客户端配置:

{
  "mcpServers": {
    "prbody": {
      "command": "npx",
      "args": ["-y", "@reneturcios/prbody", "mcp"]
    }
  }
}
工具
  • build_pr_body — 通过将 PR 标题、提交摘要、完整提交列表以及 与关联问题对应的关闭说明填入仓库的 PR 模板,来构建拉取请求正文。

    • template(字符串,必需,非空)— 仓库的 PR 模板文本,包含 {{...}} 占位符
    • commits(数组,必需,非空)— PR 的提交,按时间从早到晚排列;每个条目都是包含 hash(字符串,必需,非空)和 subject (字符串,必需,非空)的对象
    • issue_number(整数,可选,至少为 1)— 关联的问题编号
    • title(字符串,可选;若提供则不能为空)— 拉取请求标题

    返回 {body, unfilled_placeholders, commit_count, closes_issue}。

Docker

docker run -i ghcr.io/cloudcorprecords/prbody
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/prbody build --input /w/args.json

开发

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

许可证

MIT — 版权所有 (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。