Vercel MCPは、https://mcp.vercel.comで提供されるVercel公式のリモートMCPサーバーです。Claude CodeやCursorからつなぐと、デプロイの一覧や実行時エラーの調査、環境変数の確認を会話のなかで頼めるようになります。この記事では、各クライアントへの登録コマンドと、接続をプロジェクト単位に絞る方法、環境変数の復号やデプロイを行う書き込み系ツールを止める設定を示す構成です。後半では、自作のMCPサーバーをmcp-handlerでVercel Functionsに載せる手順を扱います。仕様と版番号は2026年11月時点の公式ドキュメントとnpmで確認しました。
まとめ:Vercel MCPは接続先の公式サーバーと自作MCPの置き場の2つの顔
「Vercel MCP」で調べる人の目的は2つに分かれます。1つはVercel公式のMCPサーバーにAIエージェントをつなぎ、デプロイやログを操作させたい場合。もう1つは、自分で書いたMCPサーバーをVercelにデプロイして公開したい場合です。前者は登録コマンド1行とブラウザでの認可で済み、後者はmcp-handlerを入れたNext.jsのルート1ファイルから始められます。
公式サーバーで最初に決めるのは権限です。接続したAIは自分のVercelアカウントと同じ操作ができ、環境変数の復号やデプロイ保護の解除を行うツールも含まれます。業務で使うなら、接続をプロジェクト単位に絞り、書き込み系ツールはクライアント側で拒否か確認待ちにしてから使い始めてください。
Vercel公式MCPサーバーの仕組みとOAuth接続で渡る権限の範囲
Vercelそのものの仕組みと料金はVercel(ヴァーセル)とは?サーバー不要の仕組みとできること・料金で、MCPという規格の全体像はMCP(Model Context Protocol)とは?仕組み・APIとの違い・MCPサーバーの作り方で扱っています。ここではVercelの公式サーバーの挙動に絞ります。
OAuth・Streamable HTTP接続と承認済み15クライアント
Vercel MCPの公式ドキュメントによると、Vercel MCPはmcp.vercel.comで提供され、全プランで使えるOAuth付きのリモートMCPで、MCPの認可仕様とStreamable HTTPのトランスポートを実装しています。APIトークンを設定ファイルに書く必要はなく、初回接続時にブラウザでサインインし、クライアントごとに接続を承認します。
接続できるのは、Vercelが審査して承認したクライアントか、CIMD(Client ID Metadata Documents)で自身を名乗るクライアントだけです。2026年11月時点の承認済み一覧は15種で、Claude Code、Claude.aiとClaude Desktop、ChatGPT、Codex CLI、Cursor、VS CodeのCopilot、Windsurf、Gemini CLIなどが並びます。
27カテゴリのツールのうち読み取り中心の定番8ツールと書き込み系の境界
ツールの一覧ページは、デプロイ・ドメイン・環境変数・ファイアウォール・ストレージ・Web Analyticsなど27のカテゴリに分かれています。最初に使うことが多いのは次の8つです。
| ツール名 | できること |
|---|---|
| list_teams | アクセスできるチームの一覧 |
| list_projects | チーム内のプロジェクト一覧 |
| get_project | プロジェクトの設定の確認 |
| list_deployments | プロジェクトのデプロイ一覧 |
| get_deployment | デプロイの状態と詳細 |
| get_runtime_logs | 実行時ログの絞り込み |
| get_runtime_errors | エラーと影響ルートの集計 |
| web_fetch_vercel_url | 保護付きURLの中身の取得 |
この8つはどれも状態を変えません。一方で同じ一覧には、デプロイの作成や取り消し、環境変数の追加と編集、プロジェクトの一時停止まで入っています。ツール名だけを見て読み取り専用だと思い込まないことが、後述の権限設計の出発点です。
VERCEL_TOKENを置く非公式の中継サーバーと公式サーバーの違い
MCPのディレクトリで「Vercel MCP」を探すと、有志がVercelのREST APIを包んだサーバーも見つかります。これらはアクセストークンを環境変数などに保存し、ローカルで起動する方式です。公式サーバーはOAuthで発行されたトークンをクライアントが持つため、長期有効のトークンを手元のファイルに置かずに済みます。
接続先の確認も公式ドキュメントが強調する点です。第三者のマーケットプレイスからワンクリックで入れるときは、URLがmcp.vercel.comであることを必ず見てください。
Claude Code・Cursor・Codex CLIでのMCP登録と認可手順
まとめて入れるならnpx add-mcp https://mcp.vercel.comで、導入済みのクライアントを検出してそれぞれに設定を書き込めます。ここでは、どこに何が書かれたかを把握できるよう、クライアントごとの登録方法を示します。
claude mcp addでの登録と/mcpによるOAuth認可のコマンド
Claude Codeでは、HTTPトランスポートを指定して登録し、起動後の/mcpで認可を済ませます。
# プロジェクトのディレクトリで、Vercel MCPをHTTPトランスポートで登録する
cd your-project
claude mcp add --transport http vercel https://mcp.vercel.com
# Claude Codeを起動し、/mcp でvercelを選んでブラウザで認可する
claude
/mcp
登録しただけでは認可は終わりません。ツールのドキュメントにあるとおり、ブラウザで対象のアカウントにサインインし、使わせたいチームへのアクセスを許可して初めてプロジェクトが見えます。登録先のスコープ(ローカル・プロジェクト・ユーザー)の違いはClaude CodeのMCP設定|claude mcp addの書き方とスコープ・.mcp.json例で整理しました。
vercel mcp –projectで1つのプロジェクトに接続範囲を絞るコマンド
Vercel CLIのvercel mcpは、クライアント側の設定を書き換えるコマンドです。--projectを付けると、接続先が共通のURLではなくhttps://mcp.vercel.com/<チーム>/<プロジェクト>の形式になります(vercel mcpのドキュメント)。
# リポジトリをVercelのプロジェクトに紐づけてから、そのプロジェクト専用の接続を作る
vercel link
vercel mcp --project
# CIなど対話できない環境では、対象のクライアントを明示する(省略するとmissing_clientsで失敗)
vercel mcp --project --clients "Claude Code"
--clientsに指定できるのは「Claude Code」「Claude.ai and Claude for desktop」「Cursor」「VS Code with Copilot」の4つです。2026年11月15日時点のVercel CLIのnpm最新版は65.16.0でした。
Cursorの設定ファイルとCodex CLIへのMCP登録コマンドの書き方
Cursorは設定ファイルにURLを1つ書くだけです。プロジェクト直下か、ユーザー全体の.cursor/mcp.jsonに置きます。
{
"mcpServers": {
"vercel": {
"url": "https://mcp.vercel.com"
}
}
}
保存するとCursorが接続を試み、Needs loginの表示が出ます。この表示を押すとブラウザが開き、認可へ進む流れです。Codex CLIではcodex mcp add vercel --url https://mcp.vercel.comを実行すると、OAuth対応を検出してブラウザでの認可に移ります。
「最新デプロイの実行時エラーを調べて」の依頼で動くツールの連鎖
依頼の文面にチーム名とプロジェクト名を入れると、エージェントは対象を探す手間を省けます。たとえば「チームacmeのshopプロジェクトで、最新の本番デプロイの実行時エラーを調べて」と頼むと、list_projectsで対象を特定し、list_deploymentsで最新の本番デプロイを選び、get_runtime_errorsでエラーの多いルートを返す、という流れになります。
ビルドの失敗ならget_deployment_build_logsのerrorsOnlyで失敗行だけを取れます。ログの全文をそのまま会話に流し込まないので、長いビルドでも読み込む量を抑えられます。
Vercel MCPの書き込み系ツールを渡す前に決める権限と承認の設定
公式ドキュメントのセキュリティの項は、Vercel MCPへの接続によって、使っているAIが自分のVercelアカウントと同じアクセス権を持つと明記しています。チームの権限はそのまま効くので、オーナー権限のアカウントでつなげば、AIもオーナーと同じ範囲を操作できます。
get_project_envが返す復号済みの値とSecret型の書き込み専用化
環境変数のツールには、get_project_env(値を復号して返す)、filter_project_envs(decrypt指定あり)、get_shared_env_var、create_project_env、edit_project_envがあります。つまり、読める設定値はAIの文脈にも入ります。
対策はVercel側の型の選び方です。ConfigとSecretの説明によると、Secret型の値は保存後に書き込み専用となり、APIキーやパスワードはこちらに入れるよう案内されています。Config型は権限のあるメンバーなら保存後も読めるため、鍵をConfig型で残しているプロジェクトでは、MCPをつなぐ前にSecret型へ入れ直してください。型の変更手順はVercelの環境変数の設定手順:Production・Previewの分け方とvercel env pull・Secret型にまとめています。
deploy_to_vercelと保護解除ツールが本番に及ぼす影響
2026年7月23日の変更履歴で、Vercel MCPからコードを直接デプロイできるようになりました。デプロイのツールによると、deploy_to_vercelはtargetにproductionを指定すれば本番へ出せます。上限は300ファイル、1ファイル3MiB、合計4MiBです。
影響が大きいのはプロジェクト系です。プロジェクトのツールのupdate_project_deployment_protectionはパスワード保護やVercel Authenticationを外せ、pause_projectはプロジェクトを止めます。削除だけは別扱いで、get_project_deletion_linkはダッシュボードへのリンクを返すのみで削除はしません。
見落としやすい仕様があります。プロジェクト単位の接続ではdeploy_to_vercelが登録されません。本番を持つチームでは、全体の接続ではなく--projectの接続を基本にするだけで、新規プロジェクトの作成やインラインのデプロイを入口から外せます。
Claude Codeのpermissionsで書き込み系MCPツールを止める設定
Claude Codeでは、MCPのツールをmcp__<サーバー名>__<ツール名>の形で許可・確認・拒否のルールに書けます(権限設定のドキュメント)。サーバー名をvercelで登録した場合の.claude/settings.jsonの例です。
{
"permissions": {
"allow": [
"mcp__vercel__list_projects",
"mcp__vercel__list_deployments",
"mcp__vercel__get_deployment",
"mcp__vercel__get_runtime_errors"
],
"ask": [
"mcp__vercel__create_deployment",
"mcp__vercel__cancel_deployment",
"mcp__vercel__create_project_env",
"mcp__vercel__edit_project_env"
],
"deny": [
"mcp__vercel__get_project_env",
"mcp__vercel__get_shared_env_var",
"mcp__vercel__deploy_to_vercel",
"mcp__vercel__update_project_deployment_protection",
"mcp__vercel__pause_project"
]
}
}
読み取りの定番だけを確認なしにし、状態を変えるものは確認待ち、鍵の読み出しと保護の解除は拒否、という3段に分けています。このファイルをリポジトリに含めれば、チームの全員が同じ線引きで使えます。
mcp-handlerで自作MCPをVercel Functionsに載せる手順
ここからは2つ目の意図、自分のMCPサーバーをVercelに置く方法です。Vercelのデプロイ手順は、Next.jsのApp Routerにmcp-handlerでルートを1つ足す構成を案内しています。Node.js 20以上が前提です。
mcp-handler 2系とMCP SDK v2を入れてroute.tsを置く最小構成
公式ドキュメントの例は[email protected]を固定していますが、2026年11月15日時点のnpm最新は2.4.0でした。2系はMCPのSDKを@modelcontextprotocol/serverに切り替え、旧HTTP+SSEのトランスポートとRedisの設定を外しています。SDK側の変更点はMCP TypeScript SDK v2とは?パッケージ分割とステートレス化の移行要点を参照してください。
# 依存を入れる(公式手順の固定版。最新に上げる場合は動作確認のうえで)
npm i [email protected] @modelcontextprotocol/server@2 zod@4
// app/api/mcp/route.ts
import { createMcpHandler } from 'mcp-handler';
import { z } from 'zod';
const handler = createMcpHandler((server) => {
server.registerTool(
'get_order_status',
{
description: '注文番号から出荷状況を返す',
inputSchema: z.object({ orderId: z.string().min(1) }),
},
async ({ orderId }) => {
// 実際には社内APIやDBを呼ぶ。ここでは固定値を返す
return { content: [{ type: 'text', text: `注文 ${orderId} は出荷済みです` }] };
},
);
});
export { handler as GET, handler as POST };
クライアントは/api/mcpにStreamable HTTPで接続します。パスはフレームワークのルートで決まるため、mcp-handler側でベースパスを設定する必要はありません。
MCP InspectorでローカルのMCPツール一覧を確かめる手順
デプロイ前に、手元で開発サーバーを起動し、localhost:3000/api/mcpのツール一覧を確認します。
npm run devでhttp://localhost:3000を起動する- 別の端末で
npx @modelcontextprotocol/inspector@latestを実行する http://127.0.0.1:6274を開き、Streamable HTTPを選ぶ- URLに
http://localhost:3000/api/mcpを入れ、端末に出たProxy Session Tokenを貼って接続する - List Toolsで
get_order_statusが見えたら、引数を入れて実行する
デプロイするとhttps://my-mcp-server.vercel.app/api/mcpのようなURLになり、これをCursorなどのurlに書けば利用できます。
withMcpAuthでBearerトークンを検証して401・403を返す組み込み
公開URLのまま置くと、誰でもツールを呼べます。mcp-handlerはトークンの検証と保護リソースのメタデータ公開を手伝う関数を持ちますが、トークンの発行や認可サーバーは含みません。
// app/api/mcp/route.ts(先のhandlerを包む部分)
import type { AuthInfo } from '@modelcontextprotocol/server';
import { withMcpAuth } from 'mcp-handler';
const verifyToken = async (_req: Request, bearerToken?: string): Promise<AuthInfo | undefined> => {
// 本番では認可サーバーの発行者・audience・有効期限・スコープを検証する
if (!bearerToken || bearerToken !== process.env.MCP_DEMO_TOKEN) return undefined;
return { token: bearerToken, scopes: ['read:orders'], clientId: 'demo-client' };
};
const authHandler = withMcpAuth(handler, verifyToken, {
required: true,
requiredScopes: ['read:orders'],
resourceMetadataPath: '/.well-known/oauth-protected-resource',
});
export { authHandler as GET, authHandler as POST };
トークンが無ければ401、スコープが足りなければ403が返ります。MCPの仕様に沿うには、app/.well-known/oauth-protected-resource/route.tsにprotectedResourceHandlerでメタデータのルートも置きます。プレビュー環境にはDeployment Protectionを残し、MCPのパスにはWAFのレート制限を掛けるのが公式の推奨です。
Fluid computeの実行上限300秒と待ち時間に課金されない仕組み
ツール呼び出し1回はVercel Functionsの1リクエストなので、ツールにも関数と同じ実行上限が適用される仕組みです。公式FAQでは、Fluid computeの既定値は全プランで300秒、ProとEnterpriseは800秒まで延ばせ、ベータの延長で1,800秒まで設定できます。それより長い処理は、ツールでVercel Workflowを起動して実行IDを返し、状況を確かめる別のツールを用意する設計が案内されています。
課金は通常のFunctionsと同じです。モデルの応答やDBを待つ間はActive CPUの課金が止まるため、待ち時間が長いMCPのツールとは相性がよい構造です。ホスティングの単価はVercel料金|Hobby無料枠とPro($20)の中身・超過単価で確認できます。
Vercel MCPを業務で使う条件と、他の基盤やローカル接続を選ぶ場面
公式サーバーへの接続と、自作MCPの置き場としてのVercelは、別々に判断します。どちらも「使ってよい条件」がはっきりしています。
公式サーバーとVercelでのホストを採用してよいチームの条件
公式サーバーは、次の条件がそろえば採用して構いません。
- 接続に使うVercelアカウントの権限を、メンバー以下に絞れる
- 鍵となる環境変数がすべてSecret型になっている
- 接続を
--projectのプロジェクト単位にできる - 書き込み系ツールをクライアント側で確認待ちか拒否にできる
自作MCPの置き場としては、アプリ本体がすでにVercelのNext.jsで動いており、ツールの処理が300秒以内に収まるならVercelが手早い選択です。プレビュー環境で新しいツールを試し、問題があればInstant Rollbackで戻せる点も、MCPサーバーの更新と相性がよい部分です。
見送るべき権限の状況と、Cloudflare Workersや自社基盤を選ぶ要件
逆に、オーナー権限のアカウントでしか接続できない、本番の鍵がConfig型のまま残っている、という状況なら公式サーバーはまだつなぎません。調査だけが目的なら、Vercel CLIの読み取りコマンドをエージェントに使わせるほうが範囲を管理しやすいでしょう。
自作MCPの置き場では、処理が数十分を超える、社内ネットワークの中のDBに閉域でつなぐ必要がある、といった要件があればVercel以外を選びます。エッジで動かしたい場合の構成はCloudflare MCPとは?WorkersでリモートMCPサーバーを作る手順とMCPサーバーポータル、Pythonで書く場合はMCPサーバーの作り方とAIエージェントへの接続手順|Python SDK 2.3でツール定義・認可を実装で構成や実装手順を比較できる内容です。社内システムをMCPでエージェントにつなぐ際の権限設計や実装は、AIエージェント開発でご相談いただけます。
Vercel MCPの接続と自作MCPのデプロイでよく挙がる質問と公式の回答
導入前に確認されることの多い5点を、2026年11月時点の公式ドキュメントに沿って答えます。
Vercel MCPは無料プランでも使えますか?
使えます。公式ドキュメントは、Vercel MCPが全プランで利用でき、VercelのAI製品の利用規約が適用されると明記しています。接続そのものに追加料金の記載はありません。ただし、MCP経由で作成したデプロイやFunctionsの実行は通常どおりプランの使用量に数えられます。Hobbyプランは商用利用の条件があるため、業務のプロジェクトをつなぐならPro以上が前提です。
Vercel MCPから本番環境へデプロイされる可能性はありますか?
あります。deploy_to_vercelはtargetにproductionを指定でき、create_deploymentも本番の指定が可能です。防ぐには、接続をvercel mcp --projectのプロジェクト単位にしてdeploy_to_vercelを登録させないこと、クライアント側の権限設定でデプロイ系のツールを確認待ちか拒否にすることの2つを組み合わせます。
環境変数の値をAIに読まれないようにするにはどうすればよいですか?
鍵やパスワードはSecret型で保存します。Secret型の値は保存後に書き込み専用となり、ダッシュボードでも表示されません。あわせて、Claude Codeならmcp__vercel__get_project_envとmcp__vercel__get_shared_env_varをdenyに入れておくと、Config型の値の読み出しも止められます。
mcp-handlerはNext.js以外のフレームワークでも使えますか?
使えます。createMcpHandlerはWeb標準のRequestを受けてResponseを返すハンドラを作るため、Next.jsにもVercelにも依存しません。公式FAQは、NuxtやNitroではh3のfromWebHandler、SvelteKitはサーバールート、Honoはc.req.rawを渡す方法を挙げています。ExpressのようにIncomingMessageを使う環境では変換の層が要ります。
自作のMCPサーバーでMCPのSDKの脆弱性が見つかったらどうしますか?
mcp-handlerは@modelcontextprotocol/serverに依存しているため、SDKの修正版が出たら依存を更新して再デプロイします。2026年10月に公表された7件の対象版と更新後の設定変更はMCP TypeScript SDKの脆弱性:2026年10月の7件の対象版と更新後に要る設定変更にまとめました。問題が出た場合はInstant Rollbackで直前のデプロイへ戻せます。
関連記事
- Vercel(ヴァーセル)とは?サーバー不要の仕組みとできること・料金:Vercelの全体像とホスティングの仕組み
- MCP(Model Context Protocol)とは?仕組み・APIとの違い・MCPサーバーの作り方:MCPという規格の基本
- Claude CodeのMCP設定|claude mcp addの書き方とスコープ・.mcp.json例:Vercel MCPを登録する側の設定
- Vercel AI Gatewayとは:複数LLMを1つのAPIで切り替える設定手順と料金・LiteLLMとの選び方:自作MCPのツールからモデルを呼ぶときの接続先
- Cloudflare MCPとは?WorkersでリモートMCPサーバーを作る手順とMCPサーバーポータル:自作MCPをVercel以外に置く場合の構成