Maple について
Maple は、プレビューデプロイ上で収集されたレビューコメントをコーディングエージェントが読み取り、対応し、解決済みにできるようにする MCP サーバーです。プレビュー環境でフロントエンドの変更をレビューするチームを対象とし、現在は 0.x のプレリリース版です。
主な機能
- 01新しいレビューコメントの待機と読み取り
- 02ファイルと行番号、ビューポート、スクリーンショットを含むコンテキスト
- 03修正したコミットを指定したコメントの解決
- 04未解決コメントがある間はエージェントの終了を防ぐ Stop フック
- 05GitHub ストアまたはローカルの .maple/ ファイルストア
活用シーン
- 01プレビューページのコメントをコーディングエージェントに一件ずつ対応させる
- 02プルリクエストがないローカル環境でフロントエンドのレビュー指摘に対応する
- 03CI で Gate アプリのトークンを使いレビューゲートの結果を公開する
MCP 対応
Maple は MCP サーバーとして動作し、list_comments、wait_for_comments、resolve_comment、get_comment_context、start_solo などのツールをクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @maple-kit/mcpGITHUB_TOKENシークレットA token that can read and write the repository's pull request comments. Required for the github store.MAPLE_GITHUB_OWNERThe repository's owner. Required for the github store.MAPLE_GITHUB_REPOThe repository. Required for the github store.MAPLE_STOREgithub, the default when a forge is configured, or file, the comments under .maple/ on this machine.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| branch | string | はい | コメントが付いたプルリクエストのヘッドブランチ。例:`feat/login`。プルリクエスト番号ではありません。 |
| statuses | array | いいえ | これらの状態のみを対象とします。省略するとすべての状態が対象になります。 |
詳細
@maple-kit/mcp
プレビュー環境へのデプロイでMapleが収集したレビューコメントをコーディングエージェントに渡す、Model Context Protocol サーバーです。
プレリリース版です。 ここにある各パッケージはすべて 0.x であり、互換性は保証されません。
エージェントはコメントを待ち、タグ付けした人が指定した file:line、ビューポート、スクリーンショット、そのコメントが書かれたモックなどのコンテキストとともに読み取り、変更を加え、その変更を修正したコミットに紐づけてコメントを解決します。レビュー担当者側の役割はオーバーレイで、両者はストアでつながります。
インストール
npm install @maple-kit/mcp
2 つのバイナリが同梱されています。サーバーである maple-mcp と、コメントがまだ未解決の状態でエージェントが作業を完了したと判断するのを防ぐ maple-stop-hook です。
エージェントを接続する
クライアントは引数なしでサーバーを起動するため、環境変数で設定します。Claude Code の .mcp.json では次のようにします。
{
"mcpServers": {
"maple": {
"command": "npx",
"args": ["-y", "-p", "@maple-kit/mcp", "maple-mcp"],
"env": { "MAPLE_GITHUB_OWNER": "acme", "MAPLE_GITHUB_REPO": "web" }
}
}
}
また、GITHUB_TOKEN がファイルに保存されないよう、op run --env-file でクライアントを実行します。値が設定されていない場合、最初のツール呼び出し時ではなく起動時にエラーになります。
| 名前 | シークレット | 説明 |
|---|---|---|
GITHUB_TOKEN | はい | プルリクエストのコメントを読み書きできるトークンです。github ストアで必須です。 |
MAPLE_GITHUB_OWNER | いいえ | リポジトリのオーナーです。github ストアで必須です。 |
MAPLE_GITHUB_REPO | いいえ | リポジトリです。github ストアで必須です。 |
MAPLE_GITHUB_API | いいえ | Enterprise Server 用の API ルートです。 |
MAPLE_STORE | いいえ | github は forge が設定されている場合のデフォルト、file は設定されていない場合のデフォルトです。コメントは .maple/ の下に保存されます。 |
MAPLE_BRANCH | いいえ | Stop フックが確認するブランチです。未設定の場合は、チェックアウト中のブランチが使われます。サーバーはこの値を無視します。 |
MAPLE_URL | いいえ | デプロイされたルートのマウント URL です。解決すると、ゲートの再公開が要求されます。 |
MAPLE_GATE_TOKEN | はい | CI 専用です。ゲート App のインストールトークンです。MAPLE_URL とは併用しません。 |
MAPLE_GATE_APP_ID | いいえ | ゲート App の ID です。これにより、他のチェック実行ではなく、自身のチェック実行を更新します。 |
MAPLE_REQUIRE_APPROVAL | いいえ | true にすると、誰かが承認するまでゲートを保留します。ルートおよび CI の設定と一致させます。 |
forge がない場合
GITHUB_TOKEN、MAPLE_GITHUB_OWNER、MAPLE_GITHUB_REPO をいずれも設定しない場合、サーバーは作業ディレクトリ内のリポジトリにある .maple/ の下で fileStore() が保持するコメントを読み書きします。そのため、プルリクエストのないノート PC でも一連の作業を行えます。MAPLE_STORE=file を設定すると、明示的にそのように指定できます。これはノート PC 用のストアであり、プレビュー Pod 用ではありません。その理由については docs/connectors.md を参照してください。Stop フックは、セッションの作業ディレクトリでチェックアウトされているブランチについて同じフォルダーを読み込みます。また、.maple/ フォルダーがない場合、そのブランチにコメントがない場合、またはリポジトリがない場合は何も出力しません。
ツール
| ツール | 読み取り | 内容 |
|---|---|---|
list_comments(branch, statuses?) | ✓ | ブランチ上のレビューコメントを新しい順に返します。 |
wait_for_comments(branch, cursor?, timeoutMs?) | ✓ | 新しいコメントが届くか、待機時間が経過するまでブロックします。コメントが届かなかった場合も失敗せず、ステータス「timeout」を返します。 |
resolve_comment(id, sha, note?) | コメントを解決済みとしてマークし、対応したコミットを記録します。 | |
get_comment_context(id, branch) | ✓ | 1つのコメントに対応するために必要な情報をすべて返します。アンカー、ビューポート、周辺のマークアップ、リプレイリンクが含まれます。Maple Mock の下に書かれたコメントには mock.recipe と mock.replay が含まれ、その状態のページへのリンクが示されます。 |
start_solo(previewUrl) | localhost でブリッジを起動し、デプロイ済みプレビューとブリッジを接続するリンクを返します。レビュアーがブラウザーでリンクを開くと、そこで書いたコメントが .maple/ に保存され、list_comments と wait_for_comments で読み取れるようになります。マージゲートの判定には一切影響しません。 |
wait_for_comments の待機時間は 55 秒に制限されています。すべてのコーディングクライアントが 60 秒でツール呼び出しを打ち切るためです。また、15 秒ごとに notifications/progress を出力します。タイムアウトは結果として返されます。タイムアウトをエラーとして扱うエージェントは、誰も見ていない最初の時点でループを停止してしまいます。カーソルはタイムスタンプです。初回の呼び出しでは省略して、すでに待機中のコメントをすべて取得してください。
Stop フック
MCP にはサーバーからクライアントを中断する方法がないため、反対側からループを閉じます。Claude Code の Stop フックはエージェントが作業を完了したと判断したときに実行され、Maple は未解決のコメントを返します。
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "npx -y -p @maple-kit/mcp maple-stop-hook" }] }
]
}
}
Maple の Claude Code プラグインがフックを登録します。コメントが open または needs_reverify の間、最大でセッションあたり連続8回の停止までブロックします。9回目にはセッションの終了を許可し、未解決の項目を伝えます。エージェントが抜け出すためにコメントを解決済みにするよりも適切です。回数はシステムの一時ディレクトリにある session_id ごとに保持されます。ブロックされなかった停止があると、カウントは再び最初から始まります。
このフックは .mcp.json の env を参照できません。 そのブロックは MCP サーバーだけに渡されます。フックはクライアント自身の環境で実行されます。そのため、MAPLE_GITHUB_OWNER、MAPLE_GITHUB_REPO、GITHUB_TOKEN はクライアント自体の起動時に設定する必要があります。つまり、同じ op run --env-file の下で設定してください。そうしないと、フックは不足している変数名を示して失敗します。最初の2つがどちらも設定されていない場合は、現在のブランチのコメントを .maple/ から読み取り、コメントがない場合はすべての停止を許可します。MAPLE_BRANCH の既定値は、セッションの作業ディレクトリでチェックアウトされているブランチです。
解決するとゲートが解除されます
MAPLE_URL に、デプロイ済みルートのマウント URL(https://web-482.preview.acme.dev/api/maple など)を設定すると、resolve_comment はそのルートに maple/visual-review の再公開を依頼します。これにより、最後のコメントを解決したエージェントが、プッシュするものが残っていないのに、チェックが完了済みの作業を保留し続ける事態を防げます。リクエストにはブランチと GITHUB_TOKEN が含まれます。このトークンには、リポジトリへのプッシュ権限が必要です。ルートが判定を行い、ルートから外部に出ることのないゲートアプリ独自の認証情報を使って公開します。更新に失敗した場合は標準エラーに記録されますが、解決は引き続き記録されます。
MAPLE_GATE_TOKEN は、CI で使用するもう 1 つの方法です。ゲートアプリのインストールトークンを指定すると、サーバーが直接公開します。このトークンの有効期限は発行から 1 時間のため、セッションではなくジョブに適しています。両方を設定すると、起動時にエラーになります。
ドキュメント
- エージェントのループ
- マージゲート
maple-reviewスキルを使うと、サーバーなしでプルリクエストの```mapleコメントを作業リストに変換できます。
ライセンス
Apache-2.0。LICENSE と NOTICE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。