prbody について
prbody は、指定されたタイトル、コミット一覧、任意の issue 番号を使ってプルリクエストのテンプレートを埋めます。リポジトリやネットワークにアクセスせず、PR 本文の形式を整えたい作成者向けです。
主な機能
- 01タイトルとコミットのプレースホルダー補完
- 02短縮ハッシュ付きコミット要約の生成
- 03issue を閉じる文の追加
- 04未知のプレースホルダーの報告
- 05入力検証と構造化結果の返却
活用シーン
- 01コミットから PR 本文の下書きを作成
- 02リポジトリの PR テンプレートを補完
- 03ツールが埋められないテンプレート項目を特定
MCP 対応
MCP クライアントに build_pr_body ツールを公開します。呼び出し側がテンプレート、コミット、任意のタイトルと issue 番号を渡します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
1掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| title | string | いいえ | プルリクエストのタイトル(任意) |
| commits | array | はい | PR のコミット。古い順:{hash, subject} |
| template | string | はい | {{...}} プレースホルダーを含む、リポジトリの PR テンプレートテキスト |
| issue_number | integer | いいえ | 関連 issue 番号(任意) |
詳細
prbody
各リポジトリには PR テンプレートがあり、PR の作成者はそれぞれ異なる方法で記入します。テンプレートを上書きしたり、見出しを空のままにしたりすることもあります。prbody を使えば、作成者が行う機械的な作業を省けます。テンプレート、PR のコミット、クローズする issue を渡すと、テンプレートのプレースホルダーを埋めた本文が、毎回同じ方法で返されます。
次の 4 つのプレースホルダーが固定で、表記は正確に以下のとおりです。
{{title}}— PR のタイトル。タイトルが指定されていない場合は空文字列です。{{summary}}— コミットごとに 1 行、指定された順に並べます:- <subject>。{{commits}}— コミットごとに 1 行、同じ順に並べ、短縮ハッシュを付けます:- <subject> (<hash7>)。<hash7>はコミットのハッシュの先頭 7 文字です(ハッシュが 7 文字未満の場合は全体)。{{issue_link}}— issue 番号が指定されている場合はCloses #<issue_number>、指定されていない場合は空文字列です。
既知のプレースホルダーは、出現するたびに置換されます。それ以外の {{...}} の範囲({{ から次の }} まで)は、本文内で記述されたとおりにそのまま残されます。また、その内側の名前から前後の空白を取り除いたものが unfilled_placeholders に報告されます(重複なし、昇順)。これにより、prbody が認識しない内容を求めるテンプレートも、黙って取り除かれることなく確認できます。後続に }} がない {{ はプレースホルダーではないため、そのまま残され、報告もされません。置換後のテキストは再スキャンされないため、タイトルやコミットの subject に含まれる {{...}} はリテラルのままです。
結果には commit_count(コミット数)と closes_issue(issue 番号が指定されている場合に限り true)も含まれます。不正な入力(template がない、空、または文字列ではない場合、commits がない、配列ではない、または空の場合、コミット項目がオブジェクトではない、あるいは hash または subject がない、空、または文字列ではない場合、issue_number が 1 以上の整数ではない場合、または 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 のタイトル、コミットの概要、コミット一覧全体、およびリンクされた issue をクローズする行を使って、リポジトリの PR テンプレートを埋め、プルリクエストの本文を作成します。template(文字列、必須、空でない)—{{...}}プレースホルダーを含む、リポジトリの PR テンプレートのテキストcommits(配列、必須、空でない)— PR のコミット。古いものから順に並べます。各項目はhash(文字列、必須、空でない)とsubject(文字列、必須、空でない)を含むオブジェクトです。issue_number(整数、任意、1 以上)— リンクされた issue の番号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 — Copyright (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。