Claude Media
PaaS系MCPの本番デプロイ権限を各社でどう絞るか

PaaS系MCPの本番デプロイ権限を各社でどう絞るか

7社のPaaS向け公式MCPサーバーの認証方式と絞り込み手段を比較し、本番デプロイ権限をどこまで渡すかの判断材料を、ツール定義とIssueの実例から示します。

PaaS向けの公式MCPサーバーをClaude Codeに繋ぐと、渡る権限は「ログを読む」程度では済みません。本番デプロイ、環境変数の書き換え、スケーリング、課金を伴う購入まで、サービスによっては一通り呼べます。

絞り込みの手段は7社でばらばらです。ツールの範囲で絞る会社、トークンの発行時に絞る会社、アカウント権限をそのまま渡す会社に分かれます。ツール定義を読むと、意外な点も見えてきます。Vercelでは、本番か検証かの違いがツール名ではなく引数に入っています。Renderには削除ツールがありませんが、環境変数の更新は呼べます。

比較の対象と評価軸

Vercel・Netlify・Cloudflare・Railway・Fly.io・Render・Herokuの公式MCPサーバーを対象にします。

RenderとHerokuの導入手順や全ツールは個別記事にあります。Render MCPサーバーでClaudeからWebサービス・DBを管理するとHeroku MCPサーバーでClaude Codeからアプリをデプロイ・スケーリングするです。本記事は権限の絞り方に集中します。

比較には4つの軸を使います。

  1. 認証方式: OAuth、APIキー、既存CLIセッションの再利用のどれか
  2. 絞り込みの手段: ワークスペースやプロジェクトを選べるか、トークンに権限を埋め込めるか
  3. 破壊的操作のツール化: 削除や所有権移転に相当するツールがあるか
  4. 本番に直結する操作: 一撃で本番を変えるツールは何か

7社の権限設計を比較する

サービス認証方式絞り込みの手段本番に直結する操作破壊的操作
Vercel認証方式OAuth(承認済みクライアントのみ)絞り込みの手段公式ページに記載なし(接続したユーザーアカウントと同じアクセス権)本番に直結する操作create_deployment(target: "production")破壊的操作デプロイ・プロジェクト・環境変数・ストレージのツール一覧に削除ツールはない(上記4カテゴリ以外のツールはDomains and DNSなど別ページ)
Netlify認証方式導入ページとllms.txtに記載なし絞り込みの手段導入ページとllms.txtに記載なし本番に直結する操作プロジェクト作成・デプロイ・環境変数管理破壊的操作導入ページとllms.txtに記載なし
Cloudflare認証方式OAuth、またはAPIトークン絞り込みの手段OAuthの権限選択、トークン権限、16種の製品別サーバー本番に直結する操作execute()経由のAPI呼び出し破壊的操作権限があれば削除系APIもexecute()で届く
Railway認証方式OAuth、またはrailway loginの再利用絞り込みの手段OAuthでワークスペースとプロジェクトを選ぶ本番に直結する操作redeploy・accept-deploy破壊的操作ホスト版はdelete-feature-flag。ローカル版にremove_serviceなど
Fly.io認証方式アクセストークン絞り込みの手段app単位・org単位・org読み取り専用の3種を発行本番に直結する操作fly mcp serverが公開するflyctl系の操作破壊的操作発行したトークンの権限次第
Render認証方式OAuth、またはAPIキー絞り込みの手段作業するワークスペースを選ぶ本番に直結する操作trigger_deploy破壊的操作削除ツールなし。環境変数の更新はある
Heroku認証方式CLIセッションの再利用、またはAPIキー絞り込みの手段READMEに記載なし本番に直結する操作pipelines_promote破壊的操作transfer_appで所有権が移る

絞る場所は3か所に分かれる

3系統

権限を絞れる場所

  • ツールの範囲

    Renderが該当します。サービスの削除に当たるツールを持たないので、認証情報が強くても上限が決まっています。

  • 認証情報の発行時

    Fly.io、Cloudflare、Railwayです。トークンの種類やOAuthで選ぶ範囲が、そのまま上限になります。

  • アカウント権限のまま

    VercelとHerokuです。接続した時点で、本人が持つ権限がAIに渡ります。

トークンで上限を決める: Fly.io

Fly.ioのアクセストークンはmacaroon形式で、発行時に粒度を選べます。

# 単一アプリだけに使えるデプロイトークン(48時間で失効)
fly tokens create deploy --name "claude-code" --expiry 48h
 
# 組織全体を読み取り専用で見られるトークン
fly tokens create readonly --name "claude-code-readonly" --expiry 168h

fly mcp serverは「experimental」と表示されるコマンドです。-t / --access-tokenのグローバルオプションがあるので、読み取り専用トークンを渡して起動できます。読み取り専用トークンは、組織とそのリソースの読み取りに限られます。ツールの数を絞るのではなく、渡すトークンの側で上限を決める発想です。

アプリ単位のトークンにも注意点があります。WireGuardトンネルの管理のように、デプロイに欠かせない組織単位の機能は、deployトークンからも使えます。「1アプリだけ」の中身は、アプリのリソースと、デプロイに必要な最小限の組織機能です。

総合APIと製品別サーバー: Cloudflare

Cloudflareには性格の違う2種類のサーバーがあります。

くらべる

Cloudflareの2系統

mcp.cloudflare.com

総合API

search()とexecute()の2ツールで、2,500以上のエンドポイントに届きます。接続時にOAuthで権限を選ぶか、権限を絞ったAPIトークンをBearerで渡します。ユーザートークンとアカウントトークンのどちらも使えます。

16種

製品別サーバー

Documentation、Workers Builds、Observability、Browser Runなど、用途ごとに分かれています。ログの調査だけなら、Observability用のサーバーだけに繋ぐ構成が取れます。

総合APIの絞り込みは、OAuthの権限選択かトークンのスコープに集約されます。ここにClaude Code側の落とし穴があります。書き込みも読み取りもexecute()1本で行うので、ツール名に対する承認ルールでは読み書きを分けられません。executeに承認を付けると、読み取りの呼び出しまで毎回止まります。

Vercelの本番デプロイはツール名で分けられない

Vercelのツール一覧では、デプロイを作るcreate_deploymentが本番と検証の両方を担います。requestBody.target: "production"を指定すると本番、省略するとプレビューです。

Claude Codeの設定ファイルは、mcp__で始まるルールに括弧で引数を書くと、そのルールを読み飛ばします。引数で絞りたいときは、起動時の--disallowedToolsでdenyルールを渡す形になります。常用の設定では、create_deploymentごと確認を挟むのが現実的です。

{
  "permissions": {
    "ask": [
      "mcp__vercel__create_deployment",
      "mcp__vercel__request_rollback",
      "mcp__vercel__request_promote"
    ]
  }
}

この例は、MCPサーバーをvercelという名前で追加した場合のルールです。ロールバックや昇格に当たるrequest_rollback・request_promoteのほか、ローリングリリースを始めるstart_rolling_release、環境変数を変えるedit_project_envもツール一覧にあります。本番に効くツールは、名前を洗い出して個別に確認を付ける作業が要ります。

購入系ツールは別枠のリスク

Vercelには、課金が発生するツールがあります。buy_pro、buy_credits、buy_domain、buy_addonです。

実行は2段階です。先にget_purchase_quoteで見積もりを取り、返ってきたidempotencyKeyを付けて、confirm: trueで確定します。同じキーでの二重実行を防ぐ作りです。

それでも、支払い方法が登録済みのチームでは、AIが実際の請求を発生させる立場になります。buy_addonは現在siemのみで、Flexプランのチームが対象です。

接続元の制限と同意

VercelのMCPは、Vercelがレビューして承認したAIクライアントだけを受け付けます。接続のたびにクライアントごとの明示的な同意も求め、同意用クッキーを悪用するconfused deputy攻撃(正規の同意を横取りして不正な認可要求を通す手口)に備えています。

一方で、セキュリティ指針には「接続したAIシステムに、Vercelユーザーアカウントと同じアクセス権が渡る」とあります。承認済みクライアントの制限は接続元を絞るもので、権限そのものを減らす仕組みではありません。ツールの手前で確認を挟む運用が、そのまま防御になります。Vercelのドキュメントも、変更を防ぐため常に人間の確認を有効にするよう書いています。

Renderは削除ツールが無くても環境変数を書き換えられる

Renderの導入ページは、サーバーが「環境変数の変更やデプロイの実行を含む、破壊的になりうる操作」を扱うと断っています。サポート対象の操作には「サービスの環境変数をすべて更新する」があり、デプロイの実行も含まれます。

つまりRenderの「ツールで絞る」設計は、サービスやデータベースを消せないという意味の絞り込みです。稼働中のサービスの設定を書き換える力は残ります。環境変数の誤更新は、再デプロイを経て本番の挙動を変えます。

ツール単位でオフにする手段は、導入ページに載っていません。GitHubのIssue #5には、読み取り専用のツールセットだけを使えるようにしてほしいという機能要望が出ています。GitHubのMCPサーバーにある読み取り専用の設定と同じものを求める内容です。

Claude Codeで使うときの報告もあります。Issue #25はClaude CodeからのOAuth接続が失敗するという報告で、Issue #10にも認証失敗の報告があります。導入ページは、対話のない環境ではAPIキーを選ぶよう案内しています。

作業先のワークスペースは、プロンプトで「Render workspaceを〜に設定して」と伝えて決めます。各操作は選択中のワークスペースに限られます。再接続のたびに選び直しが要るという指摘がIssue #18にあります。接続が切れた後の最初の操作は、どのワークスペースに向くかを確かめてから進める形になります。

Railway・Heroku・Netlifyで見るべき点

Railway

Railwayの接続は、OAuthとrailway loginの再利用の2通りです。OAuthではワークスペースとプロジェクトを選べます。トークンは短命で、アカウント設定から取り消せます。プロジェクトトークンは受け付けません。サーバーが請求と監査のために、ユーザー本人の身元を必要とするためです。

ツールは接続先で変わります。mcp.railway.comのホスト版には、whoami、プロジェクトとサービスの一覧、create-project、フィーチャーフラグの操作、redeploy、accept-deploy、railway-agentがあります。delete-feature-flagは管理者向けで、破壊的な操作としてプロトコルに明示されています。

railway mcp localのローカル版は別のツール群です。remove_serviceやremove_volumeなどの削除系を持ち、実行前にプレビューを返してconfirm: trueを要求する作りです。ドメイン削除のdelete_domain、remove_tcp_proxy、remove_bucketも同じ側にあります。

Railwayのドキュメントは、可能なら重要でない環境での利用に限って本番のリスクを避けるよう書いています。確認を勧めるツールとしてredeploy・accept-deploy・railway-agentを挙げ、accept-deployは破壊的で、クライアントが確認を求めるとあります。

Heroku

Herokuは、heroku mcp:startでCLIの認証をそのまま使うか、HEROKU_API_KEYを渡す形です。READMEには、権限を絞る設定は載っていません。

READMEのツール一覧には、削除を名乗るツールがありません。ただし、アプリを移すtransfer_app、ダイノを増減するps_scale、メンテナンスモードを切り替えるmaintenance_onがあります。さらにpg_psqlでSQLを実行でき、pg_killやpg_upgradeといったデータベース運用のツールも並びます。「削除ツールが無い」ことは、安全を意味しません。

Netlify

Netlifyの導入ページは、リモートのMCPサーバーを案内しています。Netlifyのllms.txtには、Claude Code向けにclaude mcp add --transport http netlify https://netlify-mcp.netlify.app/mcpで追加するとあります。ローカル版の@netlify/mcpも用意されていますが、ページはリモート版を勧めています。

できる操作は、llms.txtでプロジェクトの作成、サイトのデプロイ、環境変数の管理と説明されています。認証方式やスコープの絞り方は、導入ページとllms.txtに書かれていません。権限の上限を決める前に、接続後に使えるツールの一覧をClaude Codeの/mcpで見ておくのが手がかりになります。

Claude Code側でさらに絞る

各社のMCPページには、全リクエストに承認を強制する設定は載っていません。確認を挟むのはClaude Code側です。

MCPサーバーの開発者は、ツールのtools/list応答にanthropic/requiresUserInteractionを付けると、そのツールの呼び出しごとに承認を求められます。この承認はbypassPermissionsのような権限モードでも省かれず、「今後は確認しない」の選択肢も出ません。許可ルールを書いても飛ばされません。

自動化では、この承認が人に届かないことがあります。--permission-prompt-toolを使う非対話モードでは、承認ツールが許可を返しても、requiresUserInteraction付きのツールは拒否に変わります。Agent SDKのcanUseToolコールバックは呼び出しを受け取れるので、SDKを使うアプリ側で人に見せる設計が前提になります。各社のMCPページにrequiresUserInteractionの記載はありません。

もう一つの落とし穴は、プロジェクトスコープの.mcp.jsonです。対話セッションでは承認を求めますが、claude -p・Agent SDK・クラウドセッションでは確認を出せず、確認なしで読み込まれます。リポジトリに入ったPaaS系MCPの設定が、自動化の中では素通りで有効になります。

OAuthで繋ぐサービスには、oauth.scopesで要求するスコープを固定できます。認可サーバーが広いスコープ集合を提示してくる場合に、チームで承認した範囲だけに絞る手段です。v2.1.196以降は、oauth.scopesを省くと、サーバーが示したスコープだけを要求します。

使えるはずの操作がinsufficient_scopeで失敗したら、必要なスコープをoauth.scopesに足して/mcpで認証し直します。足さずに再認証しても、トークンには同じスコープが付きません。

設定の保存先は、claude mcp addの--scope(local / project / user)で分けられます。APIキーやOAuthトークンをリポジトリ共有の設定に残さない運用に使えます。本番に直結するツールだけに承認を付ける書き方は、Claude Code MCP権限ルールにあります。読み取り専用のPostgres接続から始める考え方は、Claude CodeでMCPからデータベースに接続する方法が参考になります。

接続前に決めること

手順

渡す権限を決める手順

  1. 1

    認証情報の上限を先に決める

    Fly.ioなら読み取り専用トークン、Cloudflareなら権限を絞ったトークン、RailwayならOAuthで選ぶワークスペースが上限になります。上限を決められないサービスは、検証環境の専用アカウントで繋ぐ選択肢があります。

  2. 2

    本番に効くツールの名前を洗い出す

    接続後に/mcpでツール一覧を見て、デプロイ・昇格・環境変数の更新・スケーリング・購入に当たる名前を拾います。askルールに入れる対象です。引数で本番と検証が分かれるVercelのcreate_deploymentのような例は、ツールごと対象にします。

  3. 3

    自動化では確認プロンプトを当てにしない

    claude -pやクラウドセッションでは、確認が出ない場面があります。CIやバッチに組み込むなら、有効期限付きのトークンを使い、上限をトークン側に持たせます。

用途ごとの目安は次のとおりです。

用途向く条件該当する構成の例
個人の検証環境向く条件誤操作の被害が小さい該当する構成の例各社のOAuth接続をそのまま使う
チーム共有の本番向く条件範囲を選んで接続できる該当する構成の例Railwayのワークスペース選択、Cloudflareの権限付きOAuth
監査対象のワークロード向く条件読み取り専用の認証情報を作れる該当する構成の例Fly.ioの読み取り専用orgトークン
CI/CDへの組み込み向く条件有効期限と用途を限れる該当する構成の例Fly.ioの--expiry付きトークン、Cloudflareの権限付きAPIトークン

MCPを介さずwranglerで直接デプロイする場合の権限は、Claude CodeでCloudflare Workersを開発するにあります。

まとめ

「削除ツールが無い」と「本番を壊せない」は別の話です。Renderは環境変数を書き換えられ、Herokuは所有権を移せ、Vercelの本番デプロイは引数1つで決まります。権限は、ツール一覧と引数の両方を見て決めるものです。

上限は可能なら認証情報の側に置き、Claude Codeの確認はその内側の二重の備えとして使います。この形なら、確認プロンプトが出ない自動化でも通用します。

この記事を共有:XはてブLinkedIn
MCP をもっと見る →