关于 prbody
prbody 根据提供的标题、提交列表和可选 issue 编号填充 PR 模板,供希望统一 PR 正文格式的作者使用。它只处理输入内容,不访问网络或代码仓库。
主要功能
- 01填充标题和提交占位符
- 02生成含短哈希的提交摘要
- 03添加关闭 issue 的语句
- 04报告未知占位符
- 05验证输入并返回结构化结果
适用场景
- 01根据提交草拟 PR 正文
- 02填充代码仓库的 PR 模板
- 03识别工具无法填充的模板字段
MCP 相关
它向 MCP 客户端提供 build_pr_body 工具;调用方传入模板、提交列表以及可选标题和 issue 编号。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| title | string | 否 | PR 标题(可选) |
| commits | array | 是 | PR 的提交,按时间从旧到新排列:{hash, subject} |
| template | string | 是 | 仓库的 PR 模板文本,包含 {{...}} 占位符 |
| issue_number | integer | 否 | 关联的 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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。