😇

MCP ServerをPostmanでサクッとテストする(CloudRun x Pulumi x FastMCP)

に公開

はじめに

主要なAPI開発プラットフォームであるPostmanMCP (Model Context Protocol) サーバーをテストする機能が追加されました。これにより、自作のMCPサーバーの動作確認が格段に手軽になっています。

この記事では、Zennの記事を取得する簡単なMCPサーバーをFastMCPで作成し、Google Cloud Runにデプロイ、そしてPostmanでテストするまでの一連の流れをハンズオン形式で解説します。インフラの構築にはPulumiを使用し、IaC (Infrastructure as Code) を実践していきます。

今回作成したリポジトリは以下の通りです。
https://github.com/takemo101/mcp-on-cloudrun

技術スタック

  • クラウド環境: Google Cloud Run, API Gateway, Artifact Registry
  • IaC: Pulumi (TypeScript)
  • MCPサーバー: FastMCP (Python)
  • テストツール: Postman

MCPサーバー作成

今回は、FastMCPを使い、指定したZennユーザーやトピックの記事一覧を取得するMCPサーバーを開発します。

セットアップ

まず、MCPサーバーのプロジェクトディレクトリmcp-serverを作成し、uvを使用してPythonの仮想環境を構築します。

mkdir mcp-server
cd mcp-server
uv init

次に、以下のコマンドで必要なパッケージをインストールします。

uv add fastmcp ruff ty

MCPツールの作成

Zennの公開APIを利用して、以下の2つのMCPツールを作成します。

  • get_zenn_posts_by_username:ユーザー名から投稿記事を取得する
  • get_zenn_posts_by_topic:トピックから投稿記事を取得する

https://github.com/takemo101/mcp-on-cloudrun/blob/38949497f0618be6f03f10b7870dcfca63aebef0/mcp-server/server/server.py#L13-L93

動作確認

サーバーをローカルで起動し、動作を確認します。

uv run server/server.py

以下のような起動ログが表示されれば成功です。

Dockerfile作成

Cloud Runにデプロイするため、サーバーをコンテナ化します。プロジェクトルートにDockerfileを作成してください。

https://github.com/takemo101/mcp-on-cloudrun/blob/c8229e5bac813fcb0869bcce3c2c0ae193ec40b1/mcp-server/Dockerfile#L1-L24


環境作成

Pulumiを使い、GCP上にCloud RunやAPI Gatewayなどのリソースを構築します。
今回はAPIキーを作成してMCPサーバーを保護します。

Pulumiのセットアップ

Pulumiを初めて使用する場合は、公式サイトの手順に従ってインストールとセットアップを完了してください。

次に、IaCを管理するディレクトリ (packages/ops) を作成し、Pulumiプロジェクトを初期化します。

# IaC用のディレクトリを作成
mkdir -p packages/ops
cd packages/ops

# GCPのTypeScriptプロジェクトとして初期化
pulumi new gcp-typescript

# 必要パッケージの追加インストール
pnpm add @pulumi/command @pulumi/docker @pulumi/random zod

ウィザードに従って、プロジェクト名、スタック名、GCPプロジェクトID、リージョンを設定します。

IaC作成

コードの可読性と再利用性を高めるため、各リソースをPulumiのComponentResourceとして分割して定義します。

1. ProjectServices

GCPプロジェクトで必要なAPIを有効化します。
https://github.com/takemo101/mcp-on-cloudrun/blob/38949497f0618be6f03f10b7870dcfca63aebef0/packages/ops/components/project-services.ts#L9-L46

2. ContainerImage

Dockerfileをビルドし、Artifact Registryにコンテナイメージをプッシュします。
https://github.com/takemo101/mcp-on-cloudrun/blob/38949497f0618be6f03f10b7870dcfca63aebef0/packages/ops/components/container-image.ts#L13-L63

3. BackendService

プッシュしたコンテナイメージを使用してCloud Runサービスを作成します。
https://github.com/takemo101/mcp-on-cloudrun/blob/38949497f0618be6f03f10b7870dcfca63aebef0/packages/ops/components/backend-service.ts#L12-L56

4. ApiGatewayForCloudRun

Cloud Runサービスを公開するためのAPI Gatewayと関連リソースを作成します。
https://github.com/takemo101/mcp-on-cloudrun/blob/38949497f0618be6f03f10b7870dcfca63aebef0/packages/ops/components/api-gateway-for-cloud-run.ts#L13-L108

API Configに設定するopenapi.yamlは、FastMCPで作成したパスに合わせて作成ます。

https://github.com/takemo101/mcp-on-cloudrun/blob/4469b17345abb4b7be79d882525f432904bc2b34/packages/ops/openapi.yaml#L1-L35

5. ApiKey

API Gatewayを保護するためのAPIキーを作成します。
https://github.com/takemo101/mcp-on-cloudrun/blob/38949497f0618be6f03f10b7870dcfca63aebef0/packages/ops/components/api-key.ts#L12-L59

6. packages/ops/index.ts メインファイル

これがPulumiプログラムのエントリポイントです。各コンポーネントを呼び出し、リソース間の依存関係を定義します。

https://github.com/takemo101/mcp-on-cloudrun/blob/c8229e5bac813fcb0869bcce3c2c0ae193ec40b1/packages/ops/index.ts#L13-L113

各コンポーネントの詳細は、GitHubリポジトリを参照してください。

デプロイ

すべてのコードを準備したら、pulumi upコマンドでインフラをデプロイします。

# IaCディレクトリに移動
cd packages/ops

# Pulumiのパッケージをインストール
pnpm install

# デプロイを実行
pulumi up

プレビューが表示され、yesを選択するとデプロイが開始されます。完了すると、API GatewayのURLやAPIキーが出力されます。

Postmanでテスト

デプロイが完了したら、Postmanを使ってMCPサーバーをテストします。

APIキーの取得

GCPコンソールの「APIとサービス > 認証情報」から、デプロイされたAPIキーを取得してください。

動作テスト

1. Postmanで新しいHTTPリクエストを作成してMCPを選択

最新のPostmanのクライアントではMCPという選択肢が増えているので、MCPを選択します。

2. APIエンドポイントとAPIキーを入力して接続

まず、エンドポイントURLとヘッダーに必要なAPIキーを入力します。
ConnectボタンをクリックしてMCPサーバーと接続してください。

3. MCPツールの設定を入力して送信

まず、対象のMCPツールを選択して、設定値を入力します。
Runボタンをクリックしてリクエストを送信します。

MCPツールのorder引数に設定した選択肢も反映されてます

4. テスト結果

レスポンスにZennの記事一覧がJSON形式で返ってくれば、テストは成功です。

Claude Desktopで使ってみる

(2025年7月現在)Claude DesktopではリモートMCPサーバーを直接呼び出すことができないため、mcp-remote経由で呼び出す必要があります。

https://github.com/geelen/mcp-remote

1. MCPサーバーの設定

Claude Desktopの設定ファイルに、ローカルで起動したmcp-remoteのアドレスを設定します。これにより、Claudeから自作のMCPサーバーを呼び出すことが可能になります。

{
  "mcpServers": {
    // ...
    "mcp-zenn-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://xxxxxxxxxxxxxxx.an.gateway.dev/mcp/",
        "--header",
        "X-Api-Key: ${MCP_API_KEY}"
      ],
      "env": {
        "MCP_API_KEY": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

2. 投稿記事取得

まず、自分の投稿記事の取得を試してみました。

次に、PHP関連の投稿記事の取得を試してみました。

問題なくMCPサーバーとして機能していることが確認できました。

まとめ

この記事では、FastMCPで簡単なMCPサーバーを作成し、Pulumi (IaC) を使ってCloud RunとAPI Gatewayにデプロイ、最後にPostmanのMCP機能でテストするまでの一連の流れを解説しました。

MCPはまだ発展途上のプロトコルですが、Postmanのような主要なツールがサポートを始めたことで、今後の普及が期待されます。Cloud Runと組み合わせることで、スケーラブルかつ手軽に独自のツールサーバーを構築できるため、ぜひ皆さんも試してみてください。

株式会社ソニックムーブ

Discussion