standup-mr について
standup-mr は、ローカルのコミット履歴ではなく GitLab や GitHub のマージリクエスト状況から、スタンドアップ用の情報をまとめます。レビュー状況やブロッカーを追うチーム向けで、失敗したパイプラインのジョブログからエラー行も取得できます。
主な機能
- 01GitLab と GitHub のマージリクエスト状況を取得
- 02レビュー待ちとブロッカーを集約
- 03失敗したジョブログのエラー行を取得
- 04JSON または Markdown のダイジェストを出力
- 05チャット Webhook にノートを投稿
- 06ローカルとホステッドの MCP サーバーを提供
活用シーン
- 01進行中のマージリクエストから報告内容を準備
- 02レビュー待ちと作業のブロッカーを確認
- 03ジョブログからパイプラインの失敗を調査
- 04Slack や Discord にスタンドアップノートを投稿
MCP 対応
スタンドアップデータの取得、ノート作成ルールの取得、チャット Webhook への投稿を行う 3 つの MCP ツールを提供します。HTTPS とサインインに対応したホステッド MCP サーバーもあります。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://standup.ilkerbalcilar.com/mcpclaude mcp add --transport http jubstaaa-standup-mr https://standup.ilkerbalcilar.com/mcp{"mcpServers":{"jubstaaa-standup-mr":{"type":"http","url":"https://standup.ilkerbalcilar.com/mcp"}}}Cursor で開く{"servers":{"jubstaaa-standup-mr":{"type":"http","url":"https://standup.ilkerbalcilar.com/mcp"}}}VS Code で開く{"mcpServers":{"jubstaaa-standup-mr":{"type":"http","url":"https://standup.ilkerbalcilar.com/mcp"}}}{"mcpServers":{"jubstaaa-standup-mr":{"serverUrl":"https://standup.ilkerbalcilar.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
standup-mr
コミットログではなく、マージリクエストの状態からスタンドアップミーティング用のメモを作成します。
ほとんどのスタンドアップツールは、ローカルの git log を読み取ります。それで分かるのは「何を入力したか」であり、スタンドアップミーティングで聞かれる内容とは異なります。このツールは GitLab または GitHub を読み取り、マージ可能なもの、ブロックされているもの、あなたの対応待ちのものを確認します。パイプラインが失敗している場合は、ジョブのログを開いて原因を伝えます。

特長
| コミットログツール | standup-mr | |
|---|---|---|
| 情報源 | ローカルの git log | GitLab または GitHub API |
| マージリクエストの状態 | ✗ | マージ可能/ブロック中/ドラフト/古い |
| レビューキュー | ✗ | 保留中のみ。承認済みは除外 |
| パイプラインの失敗 | ✗ | ジョブトレースまたは Actions ジョブログのエラー行 |
| セルフホスト(GitLab CE/EE、GitHub Enterprise) | さまざま | 標準で対応 |
使い方
npx standup-mr fetch # JSON, provider auto-detected
npx standup-mr fetch --provider github # GitHub
npx standup-mr fetch --provider gitlab # GitLab
npx standup-mr fetch --markdown # structured digest
npx standup-mr fetch --lang tr # Turkish date labels
npx standup-mr fetch --markdown | npx standup-mr post --google-chat "$URL"
認証情報
| GitHub | GitLab | |
|---|---|---|
| フラグ | --host / --token | --host / --token |
| 環境変数 | GITHUB_HOST / GITHUB_TOKEN | GITLAB_HOST / GITLAB_TOKEN |
| CLI セッション | gh の認証設定 | glab の認証設定 |
ホストを指定しない場合、GitHub は github.com をデフォルトとして使用します。GitLab にはデフォルトがありません。セルフホストが一般的なため、ホストはフラグ、環境変数、または glab 自体の設定から指定する必要があります。
プロバイダーは、次の順序で選択されます。
- 指定されている場合は、
--provider github/--provider gitlab - 識別可能な
--host(github.com、gitlab.com、またはgithub/gitlabを含むホスト名) STANDUP_PROVIDER、または設定されているGITHUB_*/GITLAB_*環境変数のペア- ログイン済みの
gh/glab
いずれの方法でも特定できない場合、または両方に該当して判断できない場合は、推測せず、明確なエラーを表示してコマンドを終了します。
そのため、すでに gh または glab を使用している場合、設定は不要です。
チャットに投稿する
npx standup-mr fetch --markdown | npx standup-mr post --slack "$SLACK_WEBHOOK_URL"
ホスト型コネクター:あらゆる AI アシスタントに対応
トークンも設定ファイルも不要です。代わりにサインインしてください。ホスト型サーバーは標準の MCP OAuth フローに対応しているため、リモート MCP サーバーをサポートするあらゆるアシスタントで使用できます。URL を追加すると、サインイン用のブラウザーページが開きます。
https://standup.ilkerbalcilar.com/mcp
| アシスタント | 方法 |
|---|---|
| claude.ai(ウェブ、モバイル、デスクトップ) | Settings → Connectors → Add custom connector → URL を貼り付け → Connect |
| Claude Code | claude mcp add --scope user --transport http standup https://standup.ilkerbalcilar.com/mcp を実行し、その後 /mcp でサインイン |
| Cursor | 上のボタンを使うか、~/.cursor/mcp.json に "standup": { "url": "https://standup.ilkerbalcilar.com/mcp" } を追加 |
| VS Code(Copilot) | 上のボタンを使うか、mcp.json に "standup": { "type": "http", "url": "https://standup.ilkerbalcilar.com/mcp" } を追加 |
| Gemini CLI | gemini extensions install https://github.com/Jubstaaa/standup-mr を実行し、その後 /mcp auth standup を実行 |
| Codex CLI | codex mcp add standup --url https://standup.ilkerbalcilar.com/mcp を実行し、その後 codex mcp login standup を実行 |
| ChatGPT | 開発者モードを有効にして、Settings → Apps → Create → URL を貼り付け、OAuth |
claude.ai と Claude Code はエンドツーエンドでテスト済みです。それ以外も同じ 標準的な手順を使用します。いずれかでサインインできない場合は、 issue を作成してください。
サインインページでアカウントを連携すると、メモには次の内容が表示されます。
- GitHub — standup-mr GitHub App を通じてサインインします。このアプリはインストール先の リポジトリのみを参照するため、組織にもインストールしてください。組織が承認しない場合は、 代わりにきめ細かなトークンを使って github.com を追加してください。
- gitlab.com — GitLab でサインインします。
- 会社の GitLab または GitHub Enterprise — ホストを入力します。会社の誰かがすでに サインインを設定している場合は、「Sign in with …」ボタンが表示されます。 まだ設定されていない場合は、一度だけ設定してください。ページに、ホスト上で OAuth アプリケーションを作成するための正確なリダイレクト URI とスコープが表示されるので、 その ID とシークレットを貼り付けます。以降、そのホストを利用する全員がサインインできます。 読み取り専用トークンも使用できます。
- チャットの Webhook (任意) — Slack、Discord、または Google Chat を連携すると、依頼したときに アシスタントが完成したメモを投稿できます。
好きなだけ連携できます。たとえば、個人プロジェクトには GitHub、仕事には会社の GitLab を使い、「自分の standup」または「仕事の standup」と依頼できます。 複数のアカウントを連携している場合は、どのアカウントを指しているのかアシスタントが尋ねます。
Claude や ChatGPT など、モバイルアプリのあるアシスタントに追加すれば、スマートフォンからも使えます。 会議に向かう途中に standup を尋ねてみてください。
保存される内容。 プロバイダートークンと Webhook URL は AES-256-GCM で暗号化され、
マージリクエストの読み取りとメモの投稿にのみ使用されます。アシスタントが保持する
アクセストークンはハッシュとして保存されます。連携を解除するとすべて削除され、
30 日間使用されていない連携も削除されます。サーバーのコードは
remote/ にあります。
代わりにローカルサーバーを使う場合。 VPN の背後やプライベートネットワーク上にある GitLab には、 ホスト型サーバーからアクセスできません。以下の stdio サーバーをご自身のマシンで実行してください。 トークンが外部に出ることはありません。
4 つの利用形態
CLI — 中核です。JSON を出力し、実行時の依存関係はありません。
MCP サーバー(mcp/)— Claude Desktop、Claude Code、Cursor、またはローカルプロセスを実行する任意の MCP クライアント向けの 3 つのツールです。mcp/README.md をご覧ください。
リモート MCP サーバー(remote/)— サインイン機能を備え、HTTPS 経由で同じツールを提供します。ウェブアプリやモバイルアプリを含む、リモート MCP サーバーに対応した任意のアシスタントで利用できます。上記をご覧ください。
Claude Code プラグイン — standup スキルとして提供される、メモ作成の手順です。Claude Code 内で次を実行します。
/plugin marketplace add Jubstaaa/standup-mr
/plugin install standup@standup-mr
次に /standup と入力します。/plugin marketplace update standup-mr で更新を取得できます。
Cursor、Codex、または別のアシスタントからの利用
Claude Code を使用していない場合は、ライブデータを取得するために MCP サーバーを設定し、メモ作成ルールを別途貼り付けてください。
Cursor — ~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクトローカル)に追加します。
{
"mcpServers": {
"standup": {
"command": "npx",
"args": ["-y", "standup-mr", "mcp"],
"env": {
"GITHUB_TOKEN": "ghp_..."
}
}
}
}
Codex — ~/.codex/config.toml に追加します。
[mcp_servers.standup]
command = "npx"
args = ["-y", "standup-mr", "mcp"]
[mcp_servers.standup.env]
GITHUB_TOKEN = "ghp_..."
両クライアントとも、正確な設定キーとファイルパスはバージョンによって異なります。上記のスニペットが動作しない場合は、このファイルを鵜呑みにせず、Cursor の MCP ドキュメントまたは Codex 独自の設定ドキュメントで、現在の形式を確認してください。
サーバーは 3 つのツールを公開します。
| ツール | 機能 |
|---|---|
get_standup_data | プロバイダーからデータを読み込み、レポートを JSON で返します。provider、host、lang は省略可能です。 |
get_note_instructions | メモ作成ルールを返すため、アシスタントはスキルと同じ方法でメモを作成できます。 |
post_standup_note | 完成したメモを Slack、Discord、または Google Chat の Webhook に投稿します。 |
post_standup_note は Webhook URL を STANDUP_WEBHOOK_URL から読み込み、引数として受け取ることはありません。この URL を持っている人なら誰でもチャンネルに投稿できるため、トランスクリプトではなくトークンと一緒に管理する必要があります。ペイロードの形式は URL のホストから推測されます。プロキシによってホストが隠されている場合にのみ、kind が必要です。
実装されている形式は 3 種類です。slack と google-chat はどちらも {"text"} を投稿し、discord は {"content"} を投稿します。
Slack と Google Chat は標準 Markdown をレンダリングしないため、投稿時にメモを書き換えます。**太字** は *太字* に、## 見出しは太字の行になります。インラインコード、フェンス付きコードブロック、およびその内容はそのままです。Discord は Markdown にネイティブ対応しているため、変更せずに送信します。Mattermost、Rocket.Chat、n8n や Zapier のエンドポイントなど、Slack 形式の本文を受け付けるその他のサービスは、kind: "slack" または CLI の --slack URL を指定すれば、現在利用できます。
MCP 以外でも、同じルールを stdout で利用できます。
npx standup-mr instructions >> AGENTS.md
--markdown は文章化されたメモではなく、ダイジェストです
--markdown は生の素材を読みやすいセクションに整理します。テーマごとにイベントをまとめたり、ブロッカーを診断したりはしません。それはモデルの役割であり、MCP クライアントのプロンプト、または Claude Code スキルで行います。
- AI なし:構造化されたダイジェストです。
- AI あり:そのまま読み上げられるメモになります。
ダイジェストの内容
実際の月曜日の実行結果を匿名化したものです。金曜日と土曜日がそれぞれ独立したセクションになっている点と、GitLab がまだ評価していないマージリクエストを「準備完了」としていない点に注目してください。
# Monday, 31 August — dev
_Structured digest — not a written note._
## Previous working day: Friday, 28 August
- `acme/ui` pushed to — fix(keyboard): scale keys to viewport (4 commits)
- `acme/ui` accepted — chore(deps): bump @acme/ui to 0.5.18
- `acme/api` opened — feat: package subscription sales
## Previous working day: Saturday, 29 August
- `acme/ui` pushed to — fix(keyboard): close the autofill bar (1 commit)
## Ready to merge (2)
- `acme/api` !196 fix: normalise the +90 trunk prefix
- `acme/web` !194 refactor: loading state — **no pipeline ran**
## Blocked (1)
- `acme/terminal` !49 fix: relative date chips — **1 unresolved comment(s)**
## Reviews (2 pending)
- `acme/mobile` !501 chore: upgrade to RN 0.87 — Teammate
## Blockers
- `acme/mobile` !6 — job `quality`
- `npm ERR! code E404`
- `npm ERR! 404 Not Found - GET https://registry.example.com/@acme%2fui`
最後のセクションこそ、このツールの要点です。他のスタンドアップツールではパイプラインが失敗していることしかわかりませんが、このツールは失敗したジョブのログを開き、404 を示します。403 ではなく 404 になる場合、通常はパッケージが存在しないのではなく、トークンのスコープが誤っています。
安定性
1.0.0 以降、CLI コマンドとフラグ、fetch と
get_standup_data が返す JSON、MCP ツール名と引数、環境変数には
セマンティックバージョニングを採用しています。既存の設定に影響する変更は、メジャーリリースまで行いません。
JSON の新しいフィールドはマイナーリリースで追加される場合があるため、位置ではなく名前で読み取ってください。ホスト型サーバー standup.ilkerbalcilar.com は継続的に更新され、npm のバージョンには連動しません。
既知の制限
- GitHub のイベントフィードは浅いです。 過去 90 日間でおよそ 300 件のイベントに制限されているため、非常にアクティブなアカウントや古い期間の空白がある場合、最も古いイベントが気付かないうちに失われることがあります。GitLab には、同等の公表済み上限はありません。
- GitHub のアクティビティを確認できるのは、同じアカウントに属するトークンだけです。 また、プライベートリポジトリのイベントは、他のユーザーのトークンでは、必要なスコープが揃っていても表示されません。
- GitHub では、従来の commit-statuses API 経由でしか結果を報告しない CI(一部のベンダーでは今もこの方式で連携しています)は、
pipelineMissingとして表示されます。チェックの状態は check-runs からのみ読み取られます。 - 診断情報を取得できなかったブロッカーも報告されます。
job: "unknown"と、diagnosis unavailable: …というエラー行が表示されます。どちらの場合もマージリクエストはブロックされ、説明だけが欠落します。サーバーエラーは先に 2 回再試行されますが、拒否されたトークンでは実行も失敗します。
0.1.x からのアップグレード
0.2.0 では、JSON 出力、ライブラリ API、MCP オプションが変更されています。standup fetch の出力を何かにパイプしている場合や、パッケージをインポートしている場合は、アップグレード前に
CHANGELOG.md をお読みください。要点は次のとおりです。
previousとpreviousEventsはpreviousDays[]に置き換わります。アクティブな日ごとに 1 つのエントリが作成されるため、週末によって金曜日のデータが失われることはなくなります。jq .previousはエラーではなくnullを返すようになります。MergeRequest、Review、Blockerには必須のproviderフィールドが追加され、Provider.getReviewsは数値 ID ではなくIdentityを受け取ります。- MCP の
CollectOptions.providerはプロバイダーの 名前 になりました。providerImplを通じてProviderインスタンスを渡してください。
Claude Code プラグインをお使いの場合は、/plugin marketplace update standup-mr を実行してください。レポート形式の変更に伴い、standup スキルも変更されています。
要件
Node 20 以降。CLI コア(fetch、post、instructions)は実行時依存関係を読み込みません。MCP サーバー(mcp コマンド)には、@modelcontextprotocol/sdk という依存関係が 1 つあります。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。