Heroku MCPサーバーでClaude Codeからアプリをデプロイ・スケーリングする
Heroku公式MCPサーバーの導入手順と全ツールを、Dynoスケーリング・パイプライン昇格・Postgres操作の権限範囲に絞ってまとめます。
Heroku公式のMCPサーバーは、既存のHeroku CLIログインをそのまま使って接続できます。アプリの作成・Dynoのスケーリング・パイプラインの昇格・Postgresデータベースの操作まで、CLIで手動実行していた作業のほぼすべてを自然言語から呼び出せます。Renderの同種サーバーと違い、Herokuは削除以外のほぼ全操作をツール化しているため、渡す権限の範囲をどこで絞るかは利用者側の判断に委ねられています。
Heroku MCPサーバーでできること
ツールはアプリ管理・プロセス/Dyno管理・アドオン・メンテナンス/ログ・パイプライン管理・チーム/スペース管理・PostgreSQLの7カテゴリに分かれます。アプリの作成やリネーム、app.jsonによるデプロイに対応します。Dynoのスケーリングや再起動、アドオンのプロビジョニング、パイプラインのステージ昇格、PostgreSQLのクエリ実行やバックアップ管理まで、Herokuダッシュボードで行う操作の大部分がツールとして揃っています。
Renderの記事(Render MCPサーバーでClaudeからWebサービス・DBを管理する)で見たような「更新系ツールが存在せずダッシュボードへのリンクを返す」設計とは対照的です。Heroku側はrename_appやtransfer_appのように、アプリの状態を直接書き換えるツールを普通に用意しています。
アプリ管理・アドオン・チーム管理のツール
アプリ管理系では、list_appsとget_app_infoが読み取り専用です。create_appはリージョン・チーム・スペースを指定して新規アプリを作成し、rename_appは既存アプリ名を変更します。deploy_to_herokuはapp.jsonベースのデプロイに対応し、チームデプロイやプライベートスペース、環境変数の一括設定まで一度に扱えます。
アドオン管理はlist_addons・get_addon_info・create_addonの3ツールです。既存アドオンの削除や設定変更に対応するツールはなく、プロビジョニングと参照に限定されています。チーム・スペース管理もlist_teams・list_private_spacesと読み取り専用で、所属チームやスペースの一覧・詳細確認にとどまります。
パイプラインとログのツール
パイプライン管理はpipelines_create・pipelines_list・pipelines_info・pipelines_promoteの4ツールです。作成と一覧・詳細取得に加えて、前述のpipelines_promoteだけがステージ間の昇格という書き込み操作を担います。ログ確認はget_app_logsで、アプリケーションログをそのまま取得できます。メンテナンスモードはmaintenance_onとmaintenance_offが対になっており、切り戻しの手段も同じツール体系の中にあります。
前提条件
Heroku CLIのバージョン10.8.1以上がグローバルにインストールされている必要があります。対応ランタイムはCommon Runtime、Cedar Private Spaces・Shield Spaces、Fir Private Spacesです。バージョンはheroku --versionで確認できます。
Private SpacesとShield Spacesは、Common Runtime(標準の共有環境)より高い分離性を求めるチーム向けの実行環境です。金融・医療系など規制対応が必要なワークロードをHerokuで動かしている場合でも、同じMCPサーバーがそのまま使えます。逆に言えば、隔離された環境に置いているアプリへも、AIエージェントから同じ経路でアクセスできてしまう点は意識しておく必要があります。
Claude CodeにHeroku MCPサーバーを追加する
推奨はheroku mcp:startを使う方法です。既存のHeroku CLI認証セッションをそのまま利用するため、HEROKU_API_KEYを別途管理する必要がありません。
claude mcp add --transport stdio heroku -- heroku mcp:startCI環境などHeroku CLIのログインセッションを共有できない場合は、npx -y @heroku/mcp-serverとAPIキーの組み合わせを使います。APIキーはheroku authorizations:createで新規発行するか、heroku auth:tokenで既存のトークンを取得します。
claude mcp add --env HEROKU_API_KEY=<YOUR_HEROKU_AUTH_TOKEN> \
--transport stdio heroku -- npx -y @heroku/mcp-serverheroku mcp:start方式には、APIキーをエディタの設定ファイルに残さずに済むという利点があります。CLIログインが切れた場合はツール呼び出しがエラーになるため、その場でheroku loginをやり直せば復旧します。
本番操作に関わるツールと権限の境界
Herokuのツール一覧に、アプリやアドオンを削除する専用ツールはありません。ただし削除に匹敵する影響を持つツールは複数あります。
| ツール | 影響 |
|---|---|
transfer_app | 影響アプリの所有権を他ユーザー・チームへ移す。実行後は元の所有者の操作権限が失われる |
pipelines_promote | 影響パイプラインの次ステージへアプリを昇格させる。ステージング→本番の昇格に使われることが多い |
maintenance_on | 影響アプリをメンテナンスモードにし、通常アクセスを止める |
ps_scale | 影響Dyno数を0にスケールダウンできる。事実上の停止操作になる |
deploy_one_off_dyno | 影響サンドボックス化されたDyno上で任意のコードやコマンドを実行する |
deploy_one_off_dynoはファイル作成・ネットワークアクセス・環境変数の指定に対応し、実行後は自動でクリーンアップされます。スクリプトの動作確認には便利な一方、実行内容そのものはAIが組み立てるコードです。ネットワークアクセスを許可した状態で使う場合、渡すコマンドの中身を確認してから実行する運用が安全です。
DynoまわりはProcess & Dyno管理という別カテゴリで、ps_list・ps_scale・ps_restartの3ツールがあります。ps_scaleはDyno数の増減だけでなく、Dynoのサイズ変更(リサイズ)も一つのツールで担います。ps_restartは特定のプロセスタイプ・特定のDyno・全Dynoのいずれを対象にするかを選べるため、対象範囲の指定を誤ると想定より広い範囲を再起動してしまいます。
公式READMEは、このMCPサーバーが早期開発段階であると明記しています。利用可能な機能やツールの構成は今後変わる可能性があり、バージョンアップのたびにツール一覧を確認する前提で使う必要があります。
Postgresツール群の権限範囲
PostgreSQL関連のツールは10種類あり、Renderのquery_render_postgresとは性格が異なります。Renderが読み取り専用のSQL実行に限定しているのに対し、Herokuのpg_psqlは任意のSQLを実行します。読み取りだけでなく更新・削除も通ります。
pg_psql: 任意のSQLクエリを実行(読み書き両方)pg_kill: 特定のデータベースプロセスを強制終了pg_upgrade: PostgreSQLのバージョンをアップグレードpg_backups: バックアップの作成・スケジュール管理pg_credentials: DB認証情報の管理
残るpg_info(DB詳細情報の表示)・pg_ps(実行中クエリの確認)・pg_locks(ロックとブロッキングトランザクションの確認)・pg_outliers(リソース消費の大きいクエリの特定)・pg_maintenance(メンテナンス情報の表示)は、いずれも参照系です。10ツールのうち書き込み・状態変更を伴うのはpg_psql・pg_kill・pg_backups(バックアップ作成)・pg_credentials(認証情報のローテーション)・pg_upgradeの5つで、残り5つが読み取り専用という内訳になります。
集計クエリを投げるだけの用途でも、pg_psqlは書き込み権限を持ったまま実行されます。読み取りだけに絞りたい場合、Claude Code側の権限ルールでpg_psqlを含む書き込み系ツールに個別承認を挟む設定が現実的な対策です。server:tool単位の書き方はClaude Code MCP権限ルールにまとめています。
タイムアウトの調整
コマンド実行のタイムアウトは既定で15秒(15000ミリ秒)です。MCP_SERVER_REQUEST_TIMEOUT環境変数で変更できます。pg_upgradeのような時間のかかる操作を使う場合、既定値のままだとタイムアウトでエラーになることがあります。
claude mcp add --env HEROKU_API_KEY=<TOKEN> \
--env MCP_SERVER_REQUEST_TIMEOUT=30000 \
--transport stdio heroku -- npx -y @heroku/mcp-server読み取り系と書き込み系、実際のプロンプトの違い
障害調査や状態確認で使う典型的なプロンプトは読み取り系のツールに閉じます。
- 「本番アプリのDyno一覧とステータスを教えて」→
ps_list(読み取り専用) - 「直近のアプリケーションログを見せて」→
get_app_logs(読み取り専用) - 「重いクエリを実行しているプロセスを教えて」→
pg_outliers・pg_ps(読み取り専用)
一方、次のようなプロンプトは書き込み系のツールを呼びます。
- 「stagingアプリをproductionパイプラインに昇格して」→
pipelines_promote(本番に直結) - 「Webのdynoを3台にスケールして」→
ps_scale(コストと可用性に影響) - 「このアプリをteam-Bに移管して」→
transfer_app(所有権の移動)
同じ会話の中で読み取り系と書き込み系が連続して呼ばれることも多いため、書き込み系ツールの名前を事前に把握しておくと、承認プロンプトで立ち止まる判断がしやすくなります。
よくあるつまずき
heroku mcp:start方式でツールが呼び出しに失敗する場合、まずCLIのログイン状態を疑います。heroku auth:whoamiでログイン中のアカウントを確認し、切れていればheroku loginをやり直します。
チームやスペースをまたいでアプリを管理している場合、list_appsのpersonal・collaborator・team・spaceによるフィルタを使わないと、対象外のアプリまで一覧に出てきて操作対象を誤りやすくなります。
pg_upgradeや大きめのバックアップ操作でタイムアウトする場合は、前述のMCP_SERVER_REQUEST_TIMEOUTを伸ばすところから確認します。
ツール名や挙動が想定と違う場合は、MCP Inspectorで実際に呼べるツール一覧を確認すると切り分けが早くなります。前述の「早期開発段階」という位置付けどおり、手元の環境で実際に使えるツールがドキュメントの記載と食い違うことがあるため、迷ったときはInspectorで一次情報を取り直します。
npx @modelcontextprotocol/inspector heroku-mcp-serverまとめ
Heroku MCPサーバーは、Renderと比べて書き込み系ツールの数が多く、pipelines_promoteやpg_psqlのように本番へ直接影響するツールも普通に含まれます。CLIログインをそのまま使える手軽さと引き換えに、権限の絞り込みはツール側の設計ではなく、Claude Code側の設定に委ねられています。承認プロンプトを個別に挟むか、pg_psqlのように書き込みも読み取りも同じツールで扱うものをどう扱うかは、導入時に決めておく価値があります。他のPaaS向けMCPサーバーとの権限設計の違いは、PaaS系MCPの本番デプロイ権限を各社でどう絞るかで比較しています。