Pub/SubのリモートMCPサーバーをClaude Codeにつなぐ手順
Pub/SubのリモートMCPサーバーをClaude Codeに追加し、トピックとサブスクリプションを操作するまでの手順と、IAMロール・OAuth・安全設定の要点をまとめます。
Pub/SubのリモートMCPサーバーは、Google Cloudがホストするエンドポイントhttps://pubsub.googleapis.com/mcpに、Streamable HTTPで接続します。トピック・サブスクリプション・スナップショットの作成、取得、更新、削除と、トピックへのメッセージ発行をAIアプリケーションから呼べるようになります。Pub/Subのページには接続先のAIアプリケーションの例としてClaude Codeが挙がっています。
この記事では、Claude Codeに追加するまでに整えるものと、実際のコマンド、そのあとに効く安全設定を順に書きます。
Pub/Sub MCPサーバーとは — 使える操作と提供形態
Pub/Sub MCPサーバーは、Pub/Sub APIを有効にしたプロジェクトで使えるリモート型のMCPサーバーです。別途インストールするプロセスはありません。
リモート型は、サービス側のインフラで動き、HTTPエンドポイントでAIクライアントとやり取りします。ローカル型が手元のマシンで標準入出力(stdio)を使うのとは別物です。操作の中身は次のとおりです。
| 対象 | できること |
|---|---|
| トピック | できること作成・一覧・取得・更新・削除 |
| サブスクリプション | できること作成・一覧・取得・更新・削除 |
| スナップショット | できること作成・一覧・取得・更新・削除 |
| メッセージ | できることトピックへの発行 |
エンドポイントにはグローバル、ロケーショナル、リージョナルの3種類があります。グローバルとロケーショナルは一般提供(GA)で、リージョナルはPreviewです。Previewは「現状有姿」で提供され、サポートが限られる場合があります。まず試すだけならグローバルのエンドポイントで足ります。
接続前に整える3つ — API・ロール・認証
Claude Code側のコマンドを打つ前に、Google Cloud側で次の3点を確認します。ここが抜けていると、サーバーを追加できても呼び出しが通りません。
Google Cloud側の準備
- 1
プロジェクトでPub/Sub APIを有効にする
Pub/Sub MCPサーバーは、Pub/Sub APIを有効にすると使えます。有効化には
serviceusage.services.enableが必要で、プロジェクトの作成者はOwnerロール経由で持っているのが通常です。それ以外はService Usage Admin(roles/serviceusage.serviceUsageAdmin)で得られます。 - 2
IAMロールを2つ付ける
プロジェクトに対して、MCP Tool User(
roles/mcp.toolUser)とPub/Sub Editor(roles/pubsub.editor)を付けます。前者がMCPのツール呼び出し(mcp.tools.call)、後者がPub/Subリソースの作成・更新・削除を担います。 - 3
認証方法を決める
Pub/SubのMCPサーバーはOAuth 2.0とIAMで認証します。APIキーは使えません。Google Cloudのあらゆるアイデンティティで認証できます。
必要な権限は「MCPを呼ぶ権限」と「Pub/Subのリソースを操作する権限」の2階建てです。Pub/Sub側で必要になる権限は操作ごとに違い、詳細はPub/Subのロールと権限のページに委ねられています。
Google Cloud全体のMCP権限の考え方はGoogle CloudのMCPサーバーをIAMで権限制御するにまとめています。
Claude Codeに追加するコマンド
エンドポイントはURLなので、HTTPトランスポートで追加します。サーバー名は自由で、ここではpubsubにします。
claude mcp add --transport http pubsub \
https://pubsub.googleapis.com/mcp追加したあとにClaude Codeを起動し、/mcpでpubsubを選ぶと認証の画面に進みます。シェルから先に認証したいときは次のコマンドです。
claude mcp login pubsubPub/Subのページは、サーバー名をPub/Sub MCP server、トランスポートをStreamable HTTP、OAuthスコープをhttps://www.googleapis.com/auth/pubsubと案内しています。このスコープは「Pub/Subリソースの閲覧と管理」にあたる1種類だけです。
Claude Codeは、ブラウザを使えない環境ではログイン用のURLを表示します。SSH越しの場合は、別のマシンで開いてリダイレクト先のURLを貼り戻します。
OAuthクライアントを自分で用意する場合
自分で作成したOAuthクライアントIDとシークレットで認証するなら、Claude Code側のフラグで渡します。--client-secretは入力をマスクして尋ねます。
claude mcp add --transport http \
--client-id YOUR_CLIENT_ID --client-secret \
--callback-port 8080 \
pubsub https://pubsub.googleapis.com/mcp--callback-portを使うと、OAuthのコールバックのポートが固定されます。Claude Codeはhttp://localhost:PORT/callbackの形のリダイレクトURIを使うので、クライアント登録側にも同じ形で登録します。
Pub/Subのページには、ウェブ系や一部のデスクトップアプリではリダイレクトURIの許可登録が必要で、カスタムのリダイレクトURIはサポートされないという注記があります。Claude Codeのlocalhost形式のコールバックを、自分のクライアントにそのまま登録できるかは、クライアントの種類によって変わります。登録できず認証が通らないときは、Google Cloudのドキュメントの「Authenticate to MCP servers」を確認します。
落とし穴
スコープを絞ってもAPIキーでは代替できない
「読み取りだけにしたいから」とAPIキーで済ませる方法は使えません。Pub/SubはAPIキーを認証方法としてサポートしていないためです。絞りたいときは、ロールの粒度かIAMのポリシーで調整します。
接続できたか確認する
Claude Codeに追加したら、/mcpの一覧でpubsubが接続済みになっているか見ます。ツール一覧の取得だけなら、認証なしで直接叩けます。公式ページが示す確認方法は、MCP Inspectorを使うか、tools/listをHTTPで送る方法です。
curl -X POST https://pubsub.googleapis.com/TOOLSET_ENDPOINT \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'MCP-Protocol-Version: MCP_PROTOCOL_VERSION' \
-H 'Mcp-Method: tools/list' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'TOOLSET_ENDPOINTは、サービス名より後ろのエンドポイントの残りの部分です。Pub/Subではmcp/toolset-nameのような形になる、と例示されています。MCP_PROTOCOL_VERSIONにはプロトコルのバージョンを入れ、例として2026-07-28が挙がっています。公式の例では、リクエストのparamsに_metaも付けています。上のコマンドは構造をつかむための省略形なので、実際に叩くときは公式ページのリクエスト本文をそのまま使います。
tools/listのメソッド自体は認証を要求しません。接続の不具合が、ツール一覧の取得で起きているのか、認証を通したあとの呼び出しで起きているのかを切り分けるのに使えます。
2026-07-28版のプロトコルで変わる点
Pub/Subのページは、MCPバージョン2026-07-28から、MCPが双方向でステートフルなプロトコルから、ステートレスなプロトコルに変わると説明しています。
initialize/initializedのやり取りとMcp-Session-Idが要らなくなる- 各リクエストが、HTTPヘッダーか
_metaに必要な情報をすべて持つ - プロトコルのバージョンを示すヘッダーなど、一部のヘッダーが必須になる
- サーバーが追加情報を求めるときは、複数往復のリクエスト(MRTR)で行う
上のcurlにMcp-Methodヘッダーが付いているのは、この仕組みの一部です。クライアント側(Claude Code)がどのバージョンで話すかは、Pub/Subのページには書かれていません。実害が出るのは、curlや自作クライアントでサーバーを直接叩くときです。ヘッダーを付け忘れると、リクエストが通らないことがあります。
Claude Codeに任せる操作とプロンプト例
公式ページが示すユースケースは3つです。
- トピックとサブスクリプションからなるパイプラインを作る
- メッセージフィルタリングなど、Pub/Subの機能を使うサブスクリプションを作る
- 既存のパイプラインにSingle Message Transforms(SMT)を追加する
サンプルプロンプトは次の2つです。
トピックmy-topicからメッセージを受け取り、属性priority=lowの
メッセージを除外して、Cloud Storageバケットmy-bucketに書き込む
パイプラインを作って。トピックmy-topicからBigQueryテーブルmy-tableへのサブスクリプションを作って。
配信に失敗したメッセージはmy-dead-letter-topicに送る。これらは公式ページのプロンプト例を日本語にした例示で、Claudeの実際の応答ではありません。2つ目の例は、デッドレタートピックに送る設定を含みます。
書き込み系の操作は確認を挟む
このMCPサーバーには、削除や発行といった元に戻せない操作が含まれます。Claude Code側では、権限設定でサーバー単位の確認を挟めます。
{
"permissions": {
"ask": ["mcp__pubsub"]
}
}mcp__pubsubはpubsubサーバーの全ツールにかかるルールです。ツール名単位の許可・拒否の書き方はClaude Code MCP権限ルールにあります。ツール名はPub/Sub MCPのリファレンスで確認します。
安全設定 — Model ArmorとIAMポリシー
Pub/Subのページは、MCPには新しいセキュリティ上のリスクがあるとして、2つの追加設定を案内しています。
Pub/Sub MCPに重ねられる2つの防御
Model Armor
プロンプトとレスポンスを検査して、悪意のある入力や機密データの流出を抑えるGoogle Cloudのサービスです。フロア設定でMCPのサニタイズを有効にすると、プロジェクト内のMCPツール呼び出しとレスポンスに一括でフィルターがかかります。
IAMのdenyポリシーとallowポリシー
プリンシパル、読み取り専用かどうかといったツールの属性、サービス名かツール名、アプリケーションのOAuthクライアントIDを組み合わせて、MCP利用を制御します。
Model Armorには、読む前に知っておく注意が3つあります。
- ログを有効にすると、ペイロード全体がログに残る。機密情報が含まれ得る
- Model Armorが対応していないリージョンでMCPを使うと、呼び出しのルーティングがサーバーごとに変わり得る。データレジデンシーの要件を壊す可能性がある
- フロア設定の変更は、Vertex AIなどMCP以外の連携サービスにも及ぶ
自然言語を運ばないMCPトラフィックでは、プロンプトインジェクションとジェイルブレイクのフィルターを有効にしないよう、公式ページはヒントを出しています。
フロア設定のコマンドは、公式ページの例をプロジェクトに合わせて変えます。
gcloud model-armor floorsettings update \
--full-uri='projects/PROJECT_ID/locations/global/floorSetting' \
--enable-floor-setting-enforcement=TRUE \
--add-integrated-services=GOOGLE_MCP_SERVER \
--google-mcp-server-enforcement-type=INSPECT_AND_BLOCK \
--enable-google-mcp-server-cloud-loggingINSPECT_AND_BLOCKは、フィルターに一致するプロンプトとレスポンスを検査してブロックする設定です。公式の完全な例には、--malicious-uri-filter-settings-enforcement=ENABLEDと--add-rai-settings-filtersも含まれます。止めたいときは、同じfloorsettings updateに--remove-integrated-services=GOOGLE_MCP_SERVERを渡します。
つまずきやすい点
詰まりやすい箇所は、次の順で確かめると絞れます。
つないだのに動かないときの切り分け
- QPub/Sub APIはプロジェクトで有効になっているか答えがいいえのとき答えがはい
APIを有効にします。MCPサーバーはAPIの有効化に連動して使えるようになります。
- QMCP Tool UserとPub/Subのロールの両方を持っているか答えがいいえのとき答えがはい
MCPのツール呼び出しの権限とPub/Subリソースの権限は別です。片方だけでは通りません。
- QAPIキーで認証しようとしていないか答えがはいのとき答えがはい
APIキーは使えません。OAuth 2.0でログインし直します。
それでも通らないとき
/mcpでサーバーの状態を確認し、claude mcp login pubsubでログインをやり直します。リダイレクトURIの不一致が疑われるなら、クライアントの登録内容を見直します。
なお、API呼び出しの制御は、権限を絞るのが基本です。操作の幅が広いロールをエージェントに持たせたくない場合、公式ページは、MCPツールを使うエージェント専用のアイデンティティを作り、アクセスを制御・監視できるようにすることを勧めています。
まとめ
Pub/SubのMCPサーバーは、Claude Codeからは1行のclaude mcp addで追加でき、難所は手前のGoogle Cloud側にあります。APIの有効化、roles/mcp.toolUserとPub/Subのロール、APIキーを使えない認証の3点がそろえば、つながります。そのうえで、削除や発行を含むサーバーなので、確認を挟む設定と専用アイデンティティで権限を小さく保つ構成が現実的です。同じくPub/Subを扱うMCPサーバーには、RedisのMCPサーバーの使い方やNATSのMCPサーバーもあります。