关于 standupgen
standupgen 将提供的 Git 提交和 PR 记录整理成事实性的 Markdown 站会摘要,适用于准备状态更新的团队成员。它只依据输入记录生成内容,并可按作者筛选,同时返回对应数量。
主要功能
- 01生成 Markdown 站会摘要
- 02按状态归类合并、进行中及已关闭 PR
- 03保留提交输入顺序
- 04按作者筛选记录
- 05返回活动数量
适用场景
- 01根据近期提交准备站会内容
- 02按状态汇总 PR
- 03生成指定作者的活动更新
- 04查看摘要内容对应的数量
MCP 相关
向 MCP 客户端提供 `generate_standup` 工具。客户端传入提交和 PR 记录,并可选提供作者和日期标签;工具返回站会摘要及数量。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| author | string | 否 | 指定后,仅纳入此作者的提交和拉取请求(精确匹配)(可选) |
| commits | array | 否 | 要报告的提交(可选) |
| date_label | string | 否 | 每日站会标题的标签(可选,默认值为 "Yesterday") |
| pull_requests | array | 否 | 要报告的拉取请求活动(可选) |
详细介绍
standupgen
凭记忆撰写的站会记录容易偏向当时觉得最重要的内容,也会悄悄漏掉那些实际已交付的小修复。standupgen 采用相反的做法:你将活动记录——git 提交和拉取请求活动——交给它,它只根据这些记录起草站会内容,不添加任何内容,也不加以润饰。结果客观、在本地生成,并且由你编辑后再粘贴到任何地方。
生成的站会内容是简短的 Markdown,最多包含三个部分:
- 已完成 — 按你提供的顺序列出每个提交,显示其哈希的前 7 个字符;随后按编号排序列出已合并的拉取请求。
- 进行中 — 按编号排序列出状态为
opened或updated的拉取请求,并标注各自的状态。 - 已关闭但未合并 — 按编号排序列出状态为
closed的拉取请求。
没有内容的部分会完全省略。如果完全没有活动,站会内容只有标题和“No recorded activity.”。除文本外,结果还包含计数——提交、已合并、进行中、已关闭——确保数字和文字始终一致。
可选的 author 筛选器会将站会内容缩小到一个人:只包含其 author 字段存在且完全匹配的提交和拉取请求,计数也基于筛选后的记录计算。没有作者的记录不会通过筛选。标题标签默认为“Yesterday”,可通过 date_label 设置。
格式错误的输入——不是数组的列表、不是对象的条目、缺失或为空的哈希、主题或标题,或其类型不是字符串;缺失、不是整数、小于 1 或重复的拉取请求编号;不属于 opened / updated / merged / closed 的状态;为空的作者或日期标签——都会导致验证错误,并指出出错路径(例如 pull_requests[1].number must be an integer >= 1),且不会生成不完整的站会内容。计算是纯粹且本地进行的:不访问网络、不需要配置,也不会读取任何仓库——只处理你传入的记录。
命令行
npx @reneturcios/standupgen generate --input args.json
npx @reneturcios/standupgen --version
args.json 包含完整的参数对象:
{
"date_label": "Yesterday",
"commits": [
{ "hash": "a1b2c3d4e5", "subject": "Fix retry backoff", "author": "rene" },
{ "hash": "f6e7d8c9b0", "subject": "Add export button", "author": "rene" }
],
"pull_requests": [
{ "number": 42, "title": "Retry backoff", "state": "merged", "author": "rene" },
{ "number": 43, "title": "Dark mode", "state": "opened", "author": "rene" },
{ "number": 40, "title": "Old experiment", "state": "closed", "author": "rene" }
]
}
commits 和 pull_requests 都是可选的,默认值为空。输出对象以 JSON 格式打印:
{
"standup": "## Standup — Yesterday\n\n### Done\n- Fix retry backoff (a1b2c3d)\n- Add export button (f6e7d8c)\n- Merged #42: Retry backoff\n\n### In progress\n- #43: Dark mode (opened)\n\n### Closed without merging\n- #40: Old experiment",
"counts": { "commits": 2, "merged": 1, "in_progress": 1, "closed": 1 }
}
生成的站会内容如下:
站会 — Yesterday
已完成
- 修复重试退避(a1b2c3d)
- 添加导出按钮(f6e7d8c)
- 已合并 #42:重试退避
进行中
- #43:深色模式(opened)
已关闭但未合并
- #40:旧实验
退出码:成功时为 0,运行时错误时为 1(包括无法读取或无效的输入文件,或无效输入),用法错误时为 2。
MCP 服务
npx -y @reneturcios/standupgen mcp
MCP 客户端配置:
{
"mcpServers": {
"standupgen": {
"command": "npx",
"args": ["-y", "@reneturcios/standupgen", "mcp"]
}
}
}
工具
-
generate_standup— 根据 git 提交和拉取请求活动起草客观的站会内容。commits(数组,可选,默认值为[])— 提交记录,采用{hash, subject, author?}对象;hash会显示其前 7 个字符pull_requests(数组,可选,默认值为[])— 拉取请求记录,采用{number, title, state, author?}对象;number是集合中唯一的正整数,state是opened、updated、merged、closed之一author(字符串,可选)— 若提供,则仅包含此作者的提交和拉取请求(完全匹配);没有作者的记录会被排除date_label(字符串,可选,默认值为"Yesterday")— 站会标题的标签
返回
{standup, counts},其中counts为{commits, merged, in_progress, closed},基于筛选后的记录计算。
Docker
docker run -i ghcr.io/cloudcorprecords/standupgen
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/standupgen generate --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 — Copyright (c) 2026 Rene Turcios
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。