AI Gateway MCP について
AI Gateway MCP は、ユーザー自身の Vercel アカウントにデプロイするマルチメディア生成コネクターです。チャットアプリから Vercel AI Gateway のモデルを使う人向けに、画像・動画・音声の生成や文字起こしを提供し、呼び出しごとの費用も報告します。
主な機能
- 01画像の生成と編集
- 02動画の生成、編集、延長
- 03音声生成と音声・動画の文字起こし
- 04モデルとカタログ価格の一覧表示
- 05クレジット、支出、生成ファイルの確認
活用シーン
- 01物語の章ごとのイラストを作成
- 02テキストや画像から短い動画を作成
- 03テキストをナレーション音声に変換
- 04会議録音をタイムスタンプ付きで文字起こし
MCP 対応
Claude や ChatGPT などのクライアント向けに、マルチメディア生成、モデル検索、クレジット確認のツールを公開する MCP サーバーです。ユーザー自身の Vercel 環境で動作し、そのアカウントの AI Gateway クレジットを使います。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://{host}/mcp/{secret}claude mcp add --transport http armulee-ai-gateway https://{host}/mcp/{secret}{"mcpServers":{"armulee-ai-gateway":{"type":"http","url":"https://{host}/mcp/{secret}"}}}Cursor で開く{"servers":{"armulee-ai-gateway":{"type":"http","url":"https://{host}/mcp/{secret}"}}}VS Code で開く{"mcpServers":{"armulee-ai-gateway":{"type":"http","url":"https://{host}/mcp/{secret}"}}}{"mcpServers":{"armulee-ai-gateway":{"serverUrl":"https://{host}/mcp/{secret}"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
ワンクリックで完了です。
Vercel がこのリポジトリをあなたのアカウントにコピーし、プライベートストレージを作成して、シークレットを 1 つ尋ねます。その後は、コピーが残りの手順を案内します。
作れるもの · 仕組み · 始め方 · 料金 · ツール · 安全に使う
チャットの中で、プロバイダーが設定した価格のまま利用できます。上乗せ料金も、サブスクリプションも、API キーも不要です。 このコネクターを Claude、ChatGPT、または任意の MCP アプリに追加すると、Vercel AI Gateway の 400 以上のモデルで画像、動画、音声を作成できます。Veo、Kling、Seedance、Nano Banana、GPT Image、FLUX などに対応しています。自分の Vercel アカウントで自分用のコピーを実行するため、呼び出しの料金はすべて、プロバイダーが設定した価格で自分の Gateway クレジットから支払われます。
2026 年 10 月の claude.ai での実際のチャット:0.007 ドルの画像、その後、0.09 ドルの 5 秒動画(HeyGen Video 1)。モデルの処理中の待ち時間は早送りしています。デモを見る。
作れるもの
自然な言葉で頼むだけです。チャットが、あなたについてすでに知っていることをすべて活用して考え、文章を作り、コネクターが画像、動画、音声を作成します。
短編映画を撮影する「1分間のSF短編を書いて絵コンテを作り、すべてのシーンを音声付きで撮影してください。」 チャットが脚本を書き、各ショットを計画します。コネクターが絵コンテを描き、シーンを撮影します。 generate_image start_video get_video音声付きで10シーン:$12.00 Veo 3.1 Fastを使用 |
本を書いて挿絵を付ける「星を集めるキツネの12章からなる寝かしつけ用のお話を書いて、各章を水彩画で描いてください。」 チャットがお話を書きます。コネクターが表紙と各章の挿絵を、統一した画風で描きます。 generate_image edit_image挿絵12枚:$1.61 Nano Banana Proを使用 |
オーディオブックにする「第1章を、寝かしつけのお話のように、温かみのあるゆっくりした声で読み上げてください。」 コネクターがテキストを朗読し、チャットですぐに再生できる音声ファイルを返します。 generate_speech2,000語の章:約$0.33 TTS-1 HDを使用 |
商品を撮影する「このマグカップの写真を、朝の光が差す白い大理石の上に置いて、ゆっくり回転する動画にしてください。」 コネクターが手持ちの写真を編集して新しいショットを作り、最も良いショットから短い動画を撮影します。 edit_image start_video get_video4ショットと5秒の動画:$0.66 FLUX Kontext ProとVeo 3.1 Fastを使用 |
誰でも踊らせる「この画像のキャラクターに、この動画のダンスを踊らせてください。」 コネクターが参照動画の動きを、フレームごとにキャラクターへ反映します。 motion_control get_video10秒のダンス:$1.26 Kling 3.0 Motion Controlを使用 |
1か月分の投稿を作成する「私のベーカリー向けに30日分の投稿を計画し、キャプションを書いて、毎日分の画像を作ってください。」 チャットが1か月分の計画を立てます。コネクターが毎日の画像と、特に重要な投稿向けの縦型動画を作成します。 generate_image start_video get_video画像30枚と動画8本:$10.43 Nano Banana ProとVeo 3.1 Fastを使用 |
録音をメモにする「この会議をタイムスタンプ付きで文字起こししてから、決定事項と担当者をまとめてください。」 コネクターがすべての発言を書き起こし、チャットがメモや字幕、翻訳にまとめます。 transcribe20分の録音:$0.12 Whisperを使用 |
適切なモデルを選ぶ「見栄えを保ちながら、8秒の動画を最も安く作れるモデルはどれですか?」 コネクターがAI Gatewayのカタログ価格とともに各モデルを一覧表示するため、チャットが代わりに選んだり、複数のモデルを並べて比較したりできます。 list_models check_credits無料 カタログの閲覧に費用はかかりません |
list_models に問い合わせてください。
仕組み
- チャットで依頼します。 Claude、ChatGPT、またはMCPに対応する任意のアプリが、適切なツールを選びます。
- 自分専用のコピーが応答します。 Vercelアカウント上で実行され、シークレットリンクを確認します。
- AI Gatewayがモデルを実行し、 プロバイダーの価格に基づいて自分のクレジットから費用が差し引かれます。APIキーは不要です。自分専用のコピーがVercel独自のトークンで認証します。
MCPとは? Model Context Protocolは、チャットアプリが外部のツールを利用するためのプロトコルです。このプロジェクトもそのようなツールの1つです。リンクを追加すると、チャットアプリからAI Gateway上の任意のモデルを使ってコンテンツを作成できるようになります。
はじめに
Vercelアカウントと、GitHub、GitLab、またはBitbucketのアカウントが必要です。
1. デプロイするボタンをクリックします。Vercelがリポジトリをコピーし、プライベートストレージを作成します。新しいページでシークレットを作成します。エージェントでセットアップを選ぶと、Vercelコネクターを使ってClaudeにプロンプトを1つ貼り付けるだけで、シークレットのフィンガープリント(およびストレージがない場合はストレージ)が追加され、再デプロイされます。または、手動でセットアップを選んで、手順に従ってください。 |
2. 自分専用のコピーを開く
|
3. チャットに追加するClaudeの場合:Settings → Connectors → Add custom connector を開き、リンクを貼り付けます。ChatGPTなどでは、カスタムMCPサーバーとして登録します。 |
次に、Vercelダッシュボード(AI Gateway → Budgets)で利用額の予算を設定してください。これが、リンクで利用できる金額の実質的な上限になります。
あなたのコピーには専用のセットアップページが付属します
コピーを開くと、現在の進捗がひと目でわかります。6つの石でできたアーチが表示され、各石が1つのステップを表します。完了したステップの石は光り、次の石はゆっくり明滅します。石をクリックすると、そのステップが開きます。
1つずつ進めましょう。完了したステップは折りたたまれ、次のステップには何をすればよいかが明確に表示されます。 |
リンクをテストできます。シークレットを作成したブラウザーでは、自動でチェックされます。それ以外の場所では、1回貼り付けてテストしてください。スマートフォンで開くを選ぶと、シークレットが保存された状態でページを開くQRコードが表示されます。スマートフォンのClaudeでは、この操作は不要です。claude.aiで追加したコネクターは、自動でスマートフォンにも表示されます。 |
シークレットがブラウザーの外に出ることはありません。このステップに進んだ時点で作成され、ブラウザーに保存されます。リンクもすぐにコピーできます。Vercelに保存されるのはフィンガープリント( |
チャットアプリに追加しましょう。Claude、ChatGPT、その他のMCPアプリ向けの手順と、試すためのテスト用プロンプトが用意されています。 |
すべてのステップが完了すると、ガイドは表示されなくなります。それ以降は、ページを開くとブランドが表示され、そのまま利用状況の画面に進みます。後から何かが未完了の状態に戻った場合(たとえば、MCP_SECRET_SHA256が削除された場合)、ガイドが自動で再表示されます。
シークレットで確認できる利用状況(ここではサンプルの数値を表示):このコネクターの使用額を、日別、モデル別、チャットアプリ別に確認できます。
このプロジェクトの利用料金はかかりません。無料で、MIT ライセンスのもとで提供されており、プランも手数料もありません。ご自身の AI Gateway クレジットを使い、各プロバイダーが請求する料金をそのままお支払いいただきます。上乗せ料金はありません。また、すべての Vercel チームに、対象モデルの無料月次クレジットが付与されます。Vercel の説明を引用します(AI Gateway pricing)。
AI Gateway では、トークンに対する上乗せ料金やプラットフォーム料金はかかりません。従量課金制で、プロバイダーの定価をお支払いいただきます。
| リクエスト内容 | モデル | カタログ価格 |
|---|---|---|
| 画像を1枚生成 | recraft/recraft-v4.1-flash | $0.007 |
| 画像を1枚生成 | google/gemini-3-pro-image(Nano Banana Pro) | $0.134 |
| 手持ちの写真を1枚編集 | bfl/flux-kontext-pro | $0.04 |
| 音声付き動画を8秒生成 | google/veo-3.1-fast-generate-001 | $1.20 |
| キャラクターに動きをコピーした動画を10秒生成 | klingai/kling-v3.0-motion-control | $1.26 |
| 音声を1,000語分生成 | openai/tts-1-hd | 約 $0.17 |
| 音声を1時間分テキスト化 | openai/whisper-1 | $0.36 |
2026年10月時点の AI Gateway カタログに基づいています。カタログは料金の目安であり、請求額ではありません。プロバイダーの請求額は異なる場合があります。2026年10月には、カタログで bfl/flux-3-image の1024x1024画像の価格が $0.024 と表示されていましたが、Black Forest Labs の請求額は $0.048 でした(上乗せ料金なしで転嫁)。その後、カタログは修正されています。各呼び出しで実際の費用を確認できます。今日のカタログは list_models で確認してください。
このプロジェクトは Vercel が制作したものではなく、Vercel と提携しているものでもありません。バージョン1では、ご自身でコピーを実行します。セットアップはできるだけ簡単にしました。誰もがプロバイダーが実際に設定した価格で AI を使えるようにすることが目標です。
ツール
チャットアプリがこれらのツールを自動で選ぶため、ツール名を指定する必要はありません。すべてのツールは、モデル名が明記された分かりやすいエラーを返します。たとえば、モデルが不明、クレジット不足、プランで動画が利用できない、プロバイダーのエラーなどです。
画像generate_image は、画像モデル(FLUX、GPT Image、Recraft)や画像対応 LLM(Nano Banana)を使って、テキストから画像を生成します。edit_image は、手持ちの画像を編集します。背景の削除、スタイルの変更、キャンバスの拡張、複数画像の合成ができます。upscale_image は、画像をより鮮明に拡大します(Topaz)。
|
動画start_video は、テキスト、画像、最初と最後のフレーム、または参照用のキャラクターを使って動画を生成します。必要に応じて音声も付けられます。motion_control は、動画内の動きをキャラクターにコピーします(Kling)。edit_video、extend_video は、クリップを編集または続けて生成します(Grok Imagine)。upscale_video は、クリップを鮮明に拡大します(Topaz)。get_video は、準備ができた動画を取得します。
|
音声generate_speech は、ナレーションやボイスオーバー用にテキストを読み上げます(OpenAI、Gemini、Fish Audio、MAI Voice)。transcribe は、音声ファイルまたは動画ファイルの音声をテキスト化します。必要に応じてタイムスタンプも付けられます。
|
モデルとアカウントlist_models は、AI Gateway のカタログ価格とともにすべてのモデルを一覧表示します。generate_text は、別のモデルにテキストを生成させ、回答を比較します。check_credits は、クレジット残高とこのコネクターの利用額を表示します。list_files は、以前に作成した画像、動画、音声を検索します。
|
すべてのツールと入力項目
| ツール | 機能 | | --- | --- | | `list_models({ type?, query? })` | AI Gateway カタログにあるモデルを、タイプ(`text`、`image`、`video`、`speech`、`transcription`)、機能(`t2v`、`i2v`、…)、カタログ価格とともに一覧表示します。 | | `generate_text({ model, prompt, system?, max_tokens?, file_urls? })` | テキストを生成します。AI Gateway からコストが報告される場合は、テキストとあわせて返します。`file_urls`(画像、動画、音声、PDFへの https リンク。最大10ファイル、合計20 MB)を指定すると、モデルはそれらも読み取ります。たとえば、`google/gemini-3.5-flash-lite` が動画を要約します。`list_models` で `vision`、`video-input`、`audio-input`、`file-input` のタグが付いたモデルを選んでください。 | | `generate_image({ model, prompt, size_or_aspect?, n?, estimate_only? })` | 画像モデル(`bfl/flux-2-pro`、`openai/gpt-image-2`、…)と、画像対応の LLM(`google/gemini-3-pro-image`)を使用します。画像はインラインで返され、Blob が接続されている場合は有効期限付きリンクとしても返されます。正確なサイズのみを受け付けるモデル(Recraft、OpenAI)では、`16:9` のような比率に最も近いサイズが選ばれ、返信にそのサイズが記載されます。 | | `edit_image({ model, prompt, image_urls, mask_url?, size_or_aspect?, n?, estimate_only? })` | 指示に基づいて既存の画像を変更します。編集対応の画像モデル(`bfl/flux-kontext-pro`、`openai/gpt-image-2`、…)と、画像対応の LLM を使用します。https リンクを受け付けます。このサーバーが返したリンクも使用できます。入力はサーバーが自らダウンロードするためです。 | | `upscale_image({ image_url, model?, prompt?, estimate_only? })` | 画像を鮮明にし、拡大します。別のモデルを指定しない場合は `topaz/wonder-3.5` を使用します。 | | `start_video({ model, prompt, image_url?, end_image_url?, reference_urls?, duration?, aspect_ratio?, resolution?, sound?, estimate_only? })` | 動画ジョブを開始し、すぐに `job_id` を返します。テキストから動画、画像から動画、最初から最後のフレームへの変換、またはキャラクターの写真やクリップを最大4点使ったリファレンスからの動画生成に対応します。`resolution`(`480p`、`720p`、`1080p`、`4k`)で、Seedance、Grok Imagine Video、Veo、Wan 2.5–2.7 のサイズと価格を選べます。モデルがその解像度または長さに対応していない場合、生成は開始されません。返信には、対応する内容と、各モデルで生成できる最短のクリップおよび価格が記載されます。 | | `motion_control({ image_url, video_url, prompt?, orientation?, quality?, keep_sound?, estimate_only? })` | 参照動画の人物の動きに合わせて、画像内のキャラクターを動かします(Kling モーションコントロール)。 | | `upscale_video({ video_url, resolution?, model?, estimate_only? })` | 動画を鮮明にして拡大し、ノイズを除去します(デフォルトでは Topaz Proteus)。 | | `edit_video({ video_url, prompt, estimate_only? })` | 指示に基づいて既存の動画を変更します(Grok Imagine Video、最大720p)。 | | `extend_video({ video_url, prompt, duration?, estimate_only? })` | 最後のフレームから動画を続けます(Grok Imagine Video)。 | | `estimate_only: true` | 画像および動画ツールで指定すると、実行する代わりに AI Gateway カタログの価格を返します。生成や課金は行われません。解像度や音声の設定をモデルのデフォルトに任せる場合があるため、価格が範囲で示されることがよくあります。トークン単位で価格が設定されたモデル(例:`openai/gpt-image-2`、Seedance 2)では見積もりできません。プロバイダーがカタログ価格を上回る料金を請求する場合があります。`bfl/flux-3-image` は、かつて請求額の半額で掲載されていました。 | | `get_video({ job_id })` | 上記すべての動画ツールで使用します。ジョブの生成がまだ続いているかを報告します。呼び出しごとに最大40秒待機し、3分後には、依頼するまで確認を停止するようチャットアプリに伝えます。完了すると動画は Blob ストアに保存され、有効期限付きリンクが返されます。後から再度呼び出すと、新しいリンクを取得できます。 | | `generate_speech({ model, text, voice?, instructions?, speed?, language?, format? })` | テキストを音声に変換します(`openai/tts-1-hd`、`google/gemini-3.8-flash-tts`、`fish-audio/s2-pro`、…)。音声はインラインと有効期限付きリンクで返されます。 | | `transcribe({ model, audio_url, timestamps? })` | 音声または動画ファイル(最大25 MB)内の音声をテキストに変換します。タイムスタンプを付けることもできます。 | | `check_credits()` | チームの AI Gateway クレジットと、このコネクターが過去30日間に使用した金額を表示します。使用額の確認には AI Gateway の使用状況レポートが必要です。このレポートは Vercel の有料プランでのみ利用できます。Hobby ではその旨が表示され、いずれの返信にもその呼び出しにかかった費用が表示されます。 | | `list_files({ kind?, limit? })` | このコネクターが作成した画像、動画、音声を、新しいものから順に、有効期限が更新されたリンクとともに一覧表示します。 | **インラインビューアー。** [MCP Apps](https://github.com/modelcontextprotocol/ext-apps) に対応したチャットアプリ(Web、デスクトップ、スマートフォンの Claude)では、`generate_image`、`edit_image`、`upscale_image`、`get_video`、`list_files` の結果が会話内にそのまま表示されます。画像グリッド、動画プレーヤー、音声プレーヤーが表示され、「ダウンロード」「アップスケール」「延長」を利用できます。「アップスケール」と「延長」は、チャットにツールを実行するよう依頼するため、知らないうちに料金が発生することはありません。他のアプリでも、同じ画像やリンクが通常のコンテンツとして表示されます。コネクター URL を変更した後(たとえばシークレットを更新した後)、Claude デスクトップアプリでビューアーが表示されるはずの場所に「Unable to reach AI Gateway」と表示された場合は、アプリを完全に終了し(Mac では Cmd+Q)、もう一度開いてください。
安全に利用する
- リンクは、料金が発生するパスワードのようなものです。 リンクを持っている人は誰でも、AI Gateway のクレジットを使えます。非公開にしてください。
- AI Gateway の予算を設定してください。 合計支出を制限できるのは Vercel の予算だけです。
- リンクが漏えいした場合は、新しいシークレットを作成してください。 セットアップページで新しいシークレットを作成し、そのフィンガープリントを Project Settings → Environment Variables に設定して再デプロイします。古いリンクはただちに使えなくなります。
- 利用状況は本人だけが確認できます。 誰でもセットアップページを開けますが、数値が表示されるのはシークレットを持っている人だけです。
セキュリティとコストについて詳しく
- コネクター URL は、料金が発生するパスワードのようなものです。 URL を持っている人は誰でも、AI Gateway のクレジットを使い、あなたの Vercel アカウントでコンテンツを生成できます。
- AI Gateway の予算を設定してください。 このサーバーは各呼び出しを制限します(
MAX_VIDEO_SECONDS、MAX_IMAGES_PER_CALL、MAX_SPEECH_CHARACTERS、ALLOWED_MODELS)が、合計支出を制限できるのは Vercel の予算だけです。自身の動画を起点とするツール(motion_control、upscale_video、edit_video)は動画の長さに従いますが、この長さは呼び出しごとの上限では確認できません。 - URL が漏えいした場合はシークレットを更新してください。 新しいフィンガープリント(または
MCP_SECRET)を設定して再デプロイします。古い URL はただちに使えなくなり、未完了の動画ジョブは破棄されます。 - 任意:エンドポイントのレート制限を設定してください。 推測による特定は不可能ですが、間違ったリクエストもすべてプロジェクトの利用量に加算されます。お使いのプランに Vercel Firewall のレート制限が含まれている場合は、
/mcp/で始まるパスに対するルールを追加してください(たとえば、IP アドレス単位)。このルールでは Attack Challenge Mode を有効にしないでください。Claude と ChatGPT のサーバーはチャレンジを解決できないため、コネクターが機能しなくなります。 - ファイルは非公開ですが、リンクは公開されています。 画像、動画、音声は非公開の Blob ストアに保存されます。チャットで返されたリンクを持っている人は誰でも、リンクの有効期限が切れるまで(
SIGNED_URL_TTL_HOURS)、そのファイルを開けます。 - 利用状況の統計にはシークレットが必要です。
POST /api/statsは一定時間でシークレットを検証し、それ以外の場合は 404 を返します。ブラウザーにシークレットを記憶させると、そのブラウザーを使う人は誰でも利用状況を確認できます。「忘れる」を選ぶと削除されます。 - ログ: このアプリはシークレットやリクエスト URL をログに記録しません。ただし、Vercel 独自のリクエストログにはリクエストパスが記録されるため、Vercel チームのメンバーはそこからシークレットを確認できます。
- 生成されたメディアは、プロバイダーから返された状態のまま保存されます。ウォーターマークやメタデータが削除されることはありません。
リファレンス
シークレット
コネクターリンクは、デプロイ先のアドレスにシークレットを加えたものです。セットアップページは、ブラウザー内でリンクを作成します。
https://<your-project>.vercel.app/mcp/<your-secret>
シークレットは、32 文字以上のランダムな値です。「Deploy」ボタンでシークレットを求められることはありません。新規デプロイではエンドポイントがオフになった状態から始まり、セットアップページがブラウザー内でシークレットを作成して保存するため、再デプロイ後にリンクが自動入力されます。
Vercel に渡されるのは MCP_SECRET_SHA256 としての SHA-256 フィンガープリントだけで、シークレットそのものが渡されることはありません。フィンガープリントからシークレットを復元することはできないため、環境変数を読み取れる人や、セットアッププロンプトを貼り付けたチャットを見られる人でも、コネクターを使うことはできません。一方で、Vercel でもシークレットを表示できません。シークレットを保存したブラウザーを失い(また、スマートフォンやチャットアプリのコネクター設定にも保存されていない)場合は、新しいシークレットを作成して再デプロイしてください。
自分で設定するには、openssl rand -hex 32 でシークレットを生成し、printf %s '<your-secret>' | shasum -a 256 の出力(16 進数の部分)を MCP_SECRET_SHA256 に設定します。ローカル開発では、プレーンな MCP_SECRET=<your-secret> のほうが簡単です。両方設定されている場合は、フィンガープリントが優先されます。URL で安全に使える文字のみを使用してください。16 進数が最適です。
ランダムな 64 文字の 16 進数シークレットは 256 ビットの強度があり、ネットワーク経由で実際に推測することはできません。また、間違った推測には、未知の URL と同じ 404 が返され、比較は一定時間で行われます。手入力したシークレットは弱点になるため、異なる文字が 8 文字未満の場合や、短いブロックが繰り返される場合(aaaa…、passwordpassword…)もエンドポイントは無効になります。
claude.ai のカスタムコネクターがサポートしているのは OAuth または認証なしのみで、カスタムヘッダーを送信できないため、シークレットは URL のパスに含めます。シークレットが設定されていない場合(またはプレーンな MCP_SECRET が 32 文字未満の場合、あるいはフィンガープリントが 64 桁の 16 進数ではない場合)、MCP エンドポイントは無効になります。間違ったシークレットには、未知の URL と同じ 404 ページが返されます。
設定
| 変数 | デフォルト | 用途 |
|---|---|---|
MCP_SECRET_SHA256 | なし(これまたは MCP_SECRET が必要) | コネクター URL のシークレットの SHA-256 フィンガープリント(16 進数)。セットアップページで設定されます。MCP_SECRET より優先されます。 |
MCP_SECRET | なし | シークレット本体。32 文字以上が必要です。ローカル開発ではこちらのほうが簡単です。 |
MAX_VIDEO_SECONDS | 8 | start_video と extend_video が受け付ける動画の最長時間です。 |
MAX_IMAGES_PER_CALL | 4 | generate_image と edit_image が受け付ける n の最大値です。 |
MAX_SPEECH_CHARACTERS | 5000 | generate_speech が 1 回の呼び出しで受け付けるテキストの最大文字数です。 |
ALLOWED_MODELS | 空(すべてのモデル) | モデル ID の許可リストをカンマ区切りで指定します。 |
SIGNED_URL_TTL_HOURS | 24 | ファイルリンクが有効な時間です。最大値は 168(7 日間)です。 |
AI_GATEWAY_API_KEY | 未設定 | 任意です。ローカル開発で使用します。設定すると、OIDC トークンの代わりに使用されます。 |
ストアを接続すると、Vercel が Blob 変数(BLOB_STORE_ID と、フォールバックとしての BLOB_READ_WRITE_TOKEN)および VERCEL_OIDC_TOKEN を自動的に設定します。Blob ストアがなくても、テキスト、画像、音声はインラインで引き続き利用できますが、動画とファイルリンクには Blob ストアが必要です。プロジェクトの Storage タブでプライベート Blob ストアを作成して接続し、再デプロイしてください。セットアップページにリンクがあります。
ローカル開発
npm install
vercel link && vercel env pull # pulls MCP_SECRET_SHA256, Blob and a 12-hour OIDC token into .env.local
# or put AI_GATEWAY_API_KEY=... and MCP_SECRET=... in .env.local
npm run dev
MCP Inspector でサーバーをテストします。
npx @modelcontextprotocol/inspector@latest
Streamable HTTP を選択し、http://localhost:3000/mcp/<MCP_SECRET> に接続します。
同じツールは stdio 経由でも実行できます。これはローカル MCP クライアントや、サーバーを起動してツール一覧を取得するディレクトリで使われます(Glama はこの方式を使用します)。デプロイ環境では使用されません。
npm run build:stdio # bundles scripts/stdio.ts into dist/stdio.mjs
AI_GATEWAY_API_KEY=... MCP_SECRET=... node dist/stdio.mjs
stdio サーバーは自分で起動するプロセスなので、シークレットのチェックはありません。渡された Gateway キーをそのまま使用します。そこでの MCP_SECRET は動画ジョブ ID の署名にのみ使われます。ツール一覧を取得するのに変数は一切必要ありません。
次の 2 つの開発専用アドレスでは、デプロイしないと確認できない状態をプレビューできます。/?preview-open ではセットアップ完了後のページを表示し、/?sample-stats では使用状況にサンプルの数値を表示します。
内部の仕組み
- **セットアップページ:** `/` ではデプロイの稼働状況を確認し、各手順を案内します。必要な手順がすべて完了すると、ガイドは非表示になります(`gateway-open` Cookieを使用し、サーバーのチェックに失敗した場合は無視します)。コードで描かれた白黒の画面で、動きはモーション低減設定に従って停止します。`/setup` はこのページにリダイレクトします。 - **使用状況の統計:** このサーバーからのすべての呼び出しには、AI Gateway のタグ(`ai-gateway-mcp`、`tool:`、`client:`、User-Agent から推測したアプリ名)が付与されます。セットアップページは、これらのタグで絞り込んだ AI Gateway 独自の利用額レポートを読み込むため、データベースは必要ありません。このレポートは有料プランの機能です。Hobby では Vercel が 403 を返すため、ページにはその旨が表示されます(クレジットは引き続き表示されます)。Blob に独自のログを保存する案は採用しませんでした。Hobby に含まれる Blob の高度な操作は月 2,000 回までで、上限を超えると Blob が 30 日間ブロックされるためです。 - **インラインビューアー:** MCP Apps リソース `ui://gateway-mcp/media.html` を 1 つ使用します。これは `scripts/build-ui.mjs` により `ui/` からビルドされます(`dev`、`build`、`typecheck` の前に実行)。CSP では、画像とメディアに対して `https://*.blob.vercel-storage.com` を許可しています。 - **スタック:** Next.js(App Router)と TypeScript を使用しています。MCP は [`mcp-handler`](https://github.com/vercel/mcp-handler) v2 を使って Streamable HTTP 経由で提供し、モデル呼び出しには AI Gateway プロバイダーと [AI SDK](https://ai-sdk.dev) を使用します。 - **シークレットのチェック:** `proxy.ts` はルーティング前に誤ったシークレットを拒否し、標準の 404 ページにリライトします。その後、ルートハンドラーでもシークレットを一定時間比較で再チェックします。 - **メディアの入出力:** ツールに渡されたファイルはサーバーがダウンロードします(https のみ、サイズ上限あり)。そのため、このサーバー自身の非公開リンクを入力として使用できます。AI Gateway でジョブの開始リクエストを小さく保つため、動画ジョブではファイルをリンクとして送信します。 - **動画ジョブ:** データベースは使用しません。各 `job_id` にはモデルと AI Gateway のジョブ ID が格納され、フィンガープリント(または `MCP_SECRET`)から導出した鍵で署名されます。シークレットを持つ呼び出し元からのみ受け付けるため、偽造できません。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。