Stitch MCP は何をしますか?
概要
Google Stitch は、プロンプトからUI画面を生成し、各画面をHTMLドキュメントとスクリーンショットとして保存します。stitch-mcp(npmパッケージ @_davideast/stitch-mcp、独立したオープンソースプロジェクト)は、コードベースへのブリッジです。これは3つの役割を果たします: コーディングエージェントにStitchをMCPサーバーとして登録する、エージェントが画面のマークアップを単一の呼び出しで取得できるヘルパーツールを追加する、画面をプレビューしたりAstroプロジェクトとしてエクスポートする。以下の情報はバージョン0.9.0で確認したものです。フラグが拒否された場合は、任意のコマンドを --help 付きで実行してください。
エージェントの実際の作業はフェッチ後に始まります: Stitchの出力は画面ごとに1つの静的なHTMLページであり、それをリポジトリに適合するコンポーネントに変換するのが仕事です。
手順
1. 開始点を確認する
以下の順序で質問するか、調べてください:
- どのMCPクライアントが使用されているか(Claude Code、Cursor、VS Code、Codex、OpenCode、Gemini CLI、Antigravity)、および
stitchサーバーがすでに登録されているかどうか。 - ユーザーがStitch APIキーを持っているかどうか。持っていない場合、セットアップはブラウザと課金が有効なプロジェクトが必要なGoogle Cloud OAuthを経由します。
- Stitchプロジェクトと実装する画面。プロジェクトIDは
7302915846120394175のような長い数字です。画面IDは32桁の16進数文字列です。表示名は受け付けられません。 - リポジトリから読み取るターゲットスタック: フレームワーク、スタイリングシステム、既存のコンポーネントとデザイントークン。ReactとTailwindを決して想定しないでください。
2. 認証方法を選択する
| モード | 提供方法 | 選択する状況 |
|---|---|---|
| APIキー | 環境変数 STITCH_API_KEY、.env ファイル、またはMCPサーバーの env ブロック | デフォルト。ヘッドレス、CI、SSH経由で動作し、更新の必要なし |
| ウィザード経由のOAuth | init が独自のgcloud SDKを ~/.stitch-mcp/ にダウンロードしてサインイン | ユーザーがキーを持っていないが、Google Cloudプロジェクトを所有している場合 |
| 既存のgcloud経由のOAuth | STITCH_USE_SYSTEM_GCLOUD=1 と以下の3つのコマンド | gcloudがすでにインストールされ、サインインしている場合 |
既存のgcloudルート。ブラウザを開くため、ユーザーが実行します:
gcloud auth application-default login
gcloud config set project orchard-design-prod
gcloud beta services mcp enable stitch.googleapis.com --project=orchard-design-prod
キーが存在しない場合、CLIはOAuthを想定します。チェック実行では、クリーンなマシンで doctor を実行すると、何かを報告する前に約500 MBのgcloud SDKが ~/.stitch-mcp/ にフェッチされるため、キールートを意図する場合は最初にキーをエクスポートしてください。
3. 接続方法を選択する
| プロキシ経由 stdio | ダイレクト HTTP | |
|---|---|---|
| クライアントが起動するもの | npx @_davideast/stitch-mcp proxy を子プロセスとして | なし。https://stitch.googleapis.com/mcp を呼び出す |
| エージェントが使用できるツール | Stitch自身のツール + ステップ6の4つのヘルパー | Stitch自身のツールのみ |
| OAuthトークンの有効期間 | プロキシが自動更新 | 1時間、その後手動で交換 |
| 適している状況 | インタラクティブなデザイン→コードセッション | プロセスを起動できないパイプラインやサンドボックス |
具体的な理由がない限りプロキシを選択してください: get_screen_code がないと、エージェントは get_screen を呼び出し、ダウンロードURLを見つけて、自分でマークアップをフェッチする必要があります。
4. サーバーを登録する
Claude Code、シェル環境から取得したAPIキーを使用したプロキシ:
claude mcp add stitch -e STITCH_API_KEY="$STITCH_API_KEY" -- npx @_davideast/stitch-mcp proxy
Claude Code、ダイレクトHTTP(-s user は ~/.claude.json に書き込み、-s project は ./.mcp.json に書き込みます):
claude mcp add stitch --transport http https://stitch.googleapis.com/mcp \
--header "X-Goog-Api-Key: $STITCH_API_KEY" -s user
Cursor(.cursor/mcp.json)とAntigravityは同じ形式を共有します。このバリアントはOAuthを使用するため、ファイルに秘密情報は含まれず、コミットしても安全です:
{
"mcpServers": {
"stitch": {
"command": "npx",
"args": ["@_davideast/stitch-mcp", "proxy"],
"env": { "STITCH_PROJECT_ID": "orchard-design-prod" }
}
}
}
APIキールートの場合、env ブロックには代わりに STITCH_API_KEY が含まれます。そのファイルはバージョン管理の対象外にするか、クライアントの環境変数補間機能を使用してください。
他のクライアントでの違い:
- VS Code(
.vscode/mcp.json): トップレベルのキーはserversで、各エントリに"type": "stdio"(または"type": "http"とurl、headers)が必要です。 - Codex(
~/.codex/config.toml):[mcp_servers.stitch]テーブルにcommand = "npx"とargs = ["@_davideast/stitch-mcp", "proxy"]。変数は[mcp_servers.stitch.env]の下に配置します。 - OpenCode(
opencode.json):"mcp": { "stitch": { "type": "local", "command": ["npx", "@_davideast/stitch-mcp", "proxy"], "environment": { } } }。 - Antigravity(ダイレクトモードのみ): フィールドは
serverUrlであり、urlではありません。 - Gemini CLI:
gemini extensions install https://github.com/gemini-cli-extensions/stitch。
npx @_davideast/stitch-mcp init は、プロンプトを通じて同じ設定を書き込みます。-c, --client(claude-code、cursor、vscode、codex、opencode、gemini-cli、antigravity)と -t, --transport(stdio または http)を受け付けてそのうちの2つをスキップできますが、ウィザードであることに変わりはありません。エージェントシェルから実行するのではなく、ユーザーに渡してください。
MCP設定を変更した後は、クライアントを再起動してください。
5. 使用前に確認する
npx @_davideast/stitch-mcp doctor --verbose # 機械可読な結果を取得するには --json を追加
npx @_davideast/stitch-mcp tool # CLIがアクセスできる全てのツールを一覧表示
doctor は、モードに応じて以下をチェックします: キーの存在、キーがAPIに受け入れられるか、gcloud 400.0.0以降、ユーザーがサインインしているか、アプリケーションデフォルト認証情報、アクティブなプロジェクト、APIに到達可能か。tool の一覧に build_site が含まれていれば、ヘルパーツールが利用可能です。
6. 画面を見つけて取得する
いくつかのコマンドはターミナルUIを開き、エージェントシェルでハングします: init、screens、view、および --routes やそのJSONフラグのない site。代わりに以下を使用してください:
npx @_davideast/stitch-mcp tool list_projects -o json
npx @_davideast/stitch-mcp site -p 7302915846120394175 --list-screens
npx @_davideast/stitch-mcp tool get_screen_code -o json \
-d '{"projectId":"7302915846120394175","screenId":"c41f0a9e7d2b4c6385a1f09b3e7d5a12"}'
site --list-screens は { success, projectId, screens: [{ screenId, title, suggestedRoute, hasHtml }] } を出力します。hasHtml: false の画面は、まだ取得するマークアップがありません。
| ツール | ソース | 入力 | 返されるもの |
|---|---|---|---|
list_projects、get_project | Stitch | なし / name(projects/ID) | アカウントが開けるプロジェクト |
list_screens、get_screen | Stitch | projectId / name(projects/ID/screens/SCREEN_ID) | メタデータとダウンロードURL(マークアップではありません) |
generate_screen_from_text、edit_screens、generate_variants | Stitch | プロンプト駆動 | プロジェクト内の新規または変更された画面 |
get_screen_code | プロキシ | projectId、screenId | { screenId, projectId, htmlContent } |
get_screen_image | プロキシ | projectId、screenId | { screenId, projectId, imageContent }、base64エンコードされたスクリーンショット |
build_site | プロキシ | projectId、{ screenId, route } の routes[] | { success, pages: [{ screenId, route, title, html }], message } |
list_tools | プロキシ | なし | 名前、説明、入力スキーマ |
tool NAME -s は任意のツールの入力スキーマを出力します。-f, --data-file はJSON本文をファイルから読み取り、-o は json、pretty(デフォルト)、raw を受け付けます。
7. マークアップをプロジェクトコードに変換する
- 各画面について
get_screen_codeとget_screen_imageを取得します。HTMLには正確な色、間隔、フォントスタックが含まれています。画像は結果がどのように見えるべきかを示します。 - ファイルを書き込む前に、画面間で繰り返されるもの(ナビゲーション、フッター、ボタン、カード)を棚卸しし、それぞれを既存のコンポーネントまたは新しい共有コンポーネントにマッピングします。
- 生の値をプロジェクトのトークンにマッピングします。テーマ変数と一致する16進数カラーはその変数になります。一回限りの値はリテラルのままにし、引き継ぎノートにリストアップします。
- セマンティックな要素、実際のリンクとフォームコントロール、そしてハードコードされたサンプルコンテンツの代わりにプロジェクトのデータレイヤーを使用して構造を再構築します。
- 実行中のページをデザインの幅でスクリーンショットと比較し、次にスマートフォンの幅で比較し、意図的な逸脱をすべて報告します。
create_project、delete_project、およびデザインシステムツールはユーザーのStitchアカウントを変更します。これらはユーザーが明示的に要求した場合にのみ呼び出し、デザインを実装する結果として呼び出さないでください。
8. エージェントなしでプレビューまたはエクスポートする
| コマンド | 目的 | 知っておくべきフラグ |
|---|---|---|
serve -p ID | ローカルのViteサーバー、/screens/ の下に画面ごとに1つのURL | --list-screens はパスをJSONとして出力します。--json はヘッドレスで起動し、サーバーの準備ができたらJSONを出力します |
site -p ID | 画面からルートへのマップからAstroプロジェクトを書き出します | -o DIR 出力フォルダー。-r JSON はマップを指定してUIをスキップします。-e はマップを build_site の入力として出力します |
upload -p ID -f FILE | PNG、JPG、WEBP、またはHTMLファイルを新しい画面として追加します | --title |
proxy | MCPサーバー自体 | --debug は /tmp/stitch-proxy-debug.log にログを記録します |
logout | OAuthサインインを取り消します | --force、--clear-config(最初にユーザーに確認します: バンドルされたgcloud設定を削除します) |
Astroの出力には src/layouts/Layout.astro、src/pages/ の下にルートごとに1つのファイル、ダウンロードされたアセットが public/assets/ に含まれます。npm install && npm run dev でポート4321で起動します。
例
例1: 既存のNext.jsアプリに1つのStitch画面を実装する
Ilse Brandt は、予約アプリ(Next.js App Router、tailwind.config.ts にトークンを持つTailwind)を管理しています。彼女はClaude Codeを使用しており、シェルプロファイルにStitch APIキーを持っており、「StitchプロジェクトからPricing画面を実装して」と依頼します。
claude mcp add stitch -e STITCH_API_KEY="$STITCH_API_KEY" -- npx @_davideast/stitch-mcp proxy
npx @_davideast/stitch-mcp site -p 7302915846120394175 --list-screens
一覧には {"screenId":"c41f0a9e7d2b4c6385a1f09b3e7d5a12","title":"Pricing","suggestedRoute":"/pricing","hasHtml":true} と表示されます。クライアントを再起動した後、エージェントはこれらのIDで get_screen_code と get_screen_image を呼び出し、次に以下を報告します:
画面: Pricing (c41f0a9e…5a12) -> app/pricing/page.tsx
再利用: components/SiteHeader.tsx、components/Button.tsx (バリアント "primary")
作成: components/pricing/PlanCard.tsx、components/pricing/BillingToggle.tsx
トークン: #1F6F5C -> colors.brand.600; 24px カード間隔 -> gap-6; 44px 見出しは text-[44px] のまま
意図的に変更: プラン価格はサンプル値の代わりに lib/plans.ts から読み込む
確認済み: 1440px と 390px をスクリーンショットと比較。トグルはキーボード操作可能
例2: ヘッドレスシェルから3つの画面をAstroサイトとしてエクスポートする
Tomasz Wrona はビルドホストにSSHで接続して作業しており、ターミナルUIを介さずにStitchプロジェクトから静的なマーケティングサイトを取得したいと考えています。キーはすでにセッションにエクスポートされています。
npx @_davideast/stitch-mcp site -p 5518204776390142068 --list-screens > screens.json
npx @_davideast/stitch-mcp site -p 5518204776390142068 -o ./harbour-site -r '[
{"screenId":"0b7e3c915ad84f2e9c6d1a8f4e2b7c30","route":"/"},
{"screenId":"9a2d6f1c4b8e47a3b5c0e7d19f3a6b48","route":"/services"},
{"screenId":"e5c81b07d3f24a69a1b4c92d6e0f7a15","route":"/contact"}
]'
cd harbour-site && npm install && npm run build
結果: src/pages/index.astro、services.astro、contact.astro が共有レイアウトでラップされ、画像とフォントは public/assets/ の下に配置されます。エージェントは次に、3つのページで重複しているヘッダーとフッターのマークアップをそれぞれ1つのAstroコンポーネントに置き換え、2つのルートがパスを共有しない可能性があること、および不明な画面IDがビルドを中止し、欠落しているIDがリストされることをメモします。
ガイドライン
- OAuth下での「Permission Denied」応答は、通常、次の3つのいずれかを意味します: 課金がオフ、プロジェクトでStitch APIが有効になっていない、またはアカウントにOwnerまたはEditorロールがない。
doctor --verboseでHTTPエラーが表示されます。 - 2つのgcloudインストールはよくある落とし穴です。バンドルされたものは
~/.stitch-mcp/config/に認証情報を保持します。システムのgcloudでサインインしても、STITCH_USE_SYSTEM_GCLOUD=1が設定されていない限り、バンドルされたものには影響しません。 - CLIが読み取るその他の変数:
STITCH_ACCESS_TOKEN(別の場所で取得したトークン)、STITCH_PROJECT_IDまたはGOOGLE_CLOUD_PROJECT(プロジェクトの上書き)、STITCH_HOST(代替エンドポイント)。 - WSL、SSH、コンテナでは、OAuthリンクが開かれる代わりに表示されます。ユーザーはそれをブラウザにコピーします。APIキーを使用すればこの問題を完全に回避できます。
snapshotは、データファイルからCLI自身のターミナル画面をレンダリングするためのものです。Stitchのデザインを保存したりバージョン管理したりするものではありません。レコードが必要な場合は、フェッチしたHTMLをリポジトリに保持してください。- フェッチしたHTMLはデザインリファレンスとして扱ってください。そのままページに貼り付けると、インラインスタイル、リモートのフォントや画像URLが含まれ、アクセシビリティは考慮されていません。
- 共有設定でパッケージ(
@_davideast/[email protected])を固定し、すべてのチームメイトとCIが同じツールセットを実行するようにしてください。このプロジェクトは実験的であり、Googleとは関係ありません。 - 実装後のビジュアルポリッシュパスには、このスキルを
impeccableおよびfrontend-designスキルと組み合わせて使用してください。 - デザインがFigmaや静的なモックアップ画像として存在する場合、またはユーザーが生成されたデザインを実装せずに欲しい場合には、適切なツールではありません。後者の場合、StitchのWeb UIで十分です。