ブログに戻る

フォロー&ご登録

Fastly Compute を使用して、実際に安全な MCP サーバーを構築する

Kay Sawada

シニア・エンタープライズ・サーバーレス・アーキテクト, Fastly

私たちは皆、LLM が素晴らしいことを知っていますが、実際に LLM をデプロイすると、現実的な問題に直面することがあります。たとえば、MCP (モデルコンテキストプロトコル) は、非常にクリエイティブなシナリオを実現できるため、当然ながら今大きな注目を集めています。しかし、MCP が露呈する可能性のあるセキュリティ上の脆弱性は、あらゆる組織にとって真の悪夢であり、MCP エンドポイントのスケーリングや管理といった他の大きな懸念事項もあります。しかし、ご安心ください : セキュリティ、スケーリング、回復力、管理性に私たちが対処します!では、Fastly Compute を使用して、現実世界で通用する、安全でスケーラブルで信頼性の高い MCP サーバーを構築する方法をお見せします。

MCP とは何か

モデルコンテキストプロトコル (MCP) は、アプリケーションが大規模言語モデル (LLM) に必要なコンテキストを提供する方法を標準化するために設計されたオープンプロトコルです。MCP はユニバーサルインターフェイスとして機能し、AI アプリケーションがさまざまなデータソースにシームレスに接続できるようにします。

MCP は、LLM プロバイダー間を切り替える柔軟性も提供し、アプリケーション (MCP ホスト) が軽量の MCP サーバーおよびクライアントを介してデータソース (ローカルデータソースおよびリモートサービス) に接続するクライアント・サーバー・アーキテクチャを採用することで、ユーザーのインフラストラクチャ内のデータセキュリティを優先します。この統合されたアプローチが、事前にビルドされた統合を提供し、開発者がさまざまなデータソースを迅速に活用できるようにします。

今回は、Fastly Compute を使用して MCP サーバーをビルドする方法について説明しますが、MCP を介して Fastly のプラットフォーム API にアクセスすることに関心がある場合は、fastly-mcp-server パッケージが役立ちます。これについては、今後さらに詳しく説明する予定です。

なぜ Fastly のプラットフォームが MCP の動作を改善するのか

私はエンタープライズ・サーバーレス・アーキテクトとして、顧客のワークロードに最適なアプローチ、特にエッジコンピューティングのメリットを享受できるかどうかについてアドバイスすることがよくあります。考慮すべき要素はいくつかあります。たとえば、予想される同時実行レベルやワークロードの急上昇の可能性、ユーザー向けアプリケーションでの低レイテンシの必要性などです。ご想像のとおり、この記事でさらに詳しく説明する MCP は、Fastly のプラットフォームと Fastly Compute の独自設計から大きなメリットを受けるワークロードの好例です。以下は、MCP クライアントの動作デモです。

LLM エージェントが「GetHistoricalStats」や「GetServiceDetail」などの MCP ツールに対して複数の同時呼び出しを実行していることにお気づきでしょう。もしあなたがこの MCP サーバーの運用を担当するとしたら、どの程度の負荷を見積もり、サーバーインフラストラクチャをどのようにプロビジョニングしますか?MCP のような比較的新しい環境では、大規模で複雑なインフラストラクチャを持つことは理想的ではありません。サーバーレスは小規模から始めるのに便利ですが、コールドスタートのような一般的な問題を避ける必要があります (もちろん、それほど面倒ではありません)。複数のユーザーが同時に MCP ツールを呼び出してスパイクが発生する可能性を考慮すると、スケーラブルな環境を選択することが重要です。さらに、コミュニケーションはチャットで行われることが多いため、レスポンスのレイテンシをできるだけ低く抑えることが重要です。

このようなケースで Fastly Compute を使用する際の注目すべきメリットは、WebAssembly ベースのランタイムが分離サンドボックス技術を活用することにより、ローカルでもリモートでもコードが安全に実行できるようになることです。これは、MCP サーバーを Fastly 上で実行するとより安全であることを意味します。これまで見てきたように、Fastly Compute の設計は、MCP 固有のアーキテクチャ上の弱点の多くに対処しています。以降のセクションでは、このプラットフォームを使用してリモート MCP サーバーをデプロイする具体的なプロセスについてご説明します。

Fastly Compute を使用してリモート MCP サーバーを構築する方法

まずは、レガシー SSE エンドポイントを含まない Streamable HTTP のエンドポイントをデプロイします。これは、次の手順を使用して簡単に実現できます。公開する前に、main.go ファイル内の2か所で API トークンを置き換える必要があることにご注意ください。(API トークンの取得方法については、こちらのガイド文書を参照してください。)

$ git clone https://gist.github.com/d829a6a58ce359b1aa99ecae12ba79f1.git fastly-compute-mcp-server
$ cd fastly-compute-mcp-server
$ vi main.go # Replace __PUT_YOUR_FASTLY_API_TOKEN__ with your own TOKEN
$ fastly compute publish 
...
✓ Activating service (version 1)

Manage this service at:
	https://manage.fastly.com/configure/services/mMnYw4qeGq81xga89Mq8O0

View this service at:
	https://highly-proper-orange.edgecompute.app

公開プロセス中には、いくつかの質問を受けます。y/n プロンプトにはすべて「yes」と答え、その他の項目では、単に「Enter」キーを押してデフォルト (空) 値を受け入れることができます。しばらくすると、上記のような、サービスが利用可能になったことを示すメッセージが表示されます。

次に、npx コマンドを使用して MCP インスペクター検証ツールを起動し、デプロイされたサーバーが正しく機能しているかどうかを確認しましょう。npx @modelcontextprotocol/inspector コマンドが正常に完了したら、http://127.0.0.1:6274にアクセスして公式テスターインターフェイスを開いてください。左側のサイドバーから、「streamable http」を接続タイプとして選択し、publish コマンドの結果として表示されるサービスアドレス (https://*.edgecompute.app) を入力します。

左側のサイドバーの Connect ボタンの下に「Connected」と表示された場合、接続が成功したことを意味します。右側のコントロールペインで、Tools タブをクリックし、リストツールなどの操作を試して機能をテストしてください。これは、非 SSE Streamable HTTP を使用して通信するリモート MCP サーバーを正常に操作したことを意味します。

SSE を使用したレガシークライアントのサポート追加

この記事の執筆時点 (2025年5月) では、多くの MCP クライアントがまだ Streamable HTTP をサポートしておらず、一部のリモートサーバーは SSE トランスポートしか提供していません。これらのクライアントとの下位互換性を確保するために、作成した MCP サーバーに SSE サポートを追加します。(このサンプルでは、SSE 接続の確立のために Fanout を使用します。これは、Fastly のプッシュメッセージングサービスで、独自のサインアップが必要です。)

まず、以前と同じ手順で新しいサービスを作成します。ただし、今回は公開時に、画面の次の段階でバックエンドを2つ作成してください。最初のバックエンドでは、Domain フィールドに *.edgecompute.app のアドレスを指定し、「self」という名前を付けます。2 番目のバックエンドでは、以下に示すように、api.fastly.com を「fastly」という名前で登録します。

✓ Creating service

Domain: [put-your-favorite-name-here.edgecompute.app] 

Backend (hostname or IP address, or leave blank to stop adding backends): put-your-favorite-name-here.edgecompute.app
Backend port number: [443] 
Backend name: [backend_1] self

Backend (hostname or IP address, or leave blank to stop adding backends): api.fastly.com
Backend port number: [443] 
Backend name: [backend_2] fastly

正常に公開したら、Fanout を有効にするための追加手順として、以下のコマンドを実行してください。SUCCESS の通知が表示されたら、セットアップ完了です。

$ fastly products --enable=fanout
SUCCESS: Successfully enabled product 'fanout'

最後に、MCP クライアント (Claude DesktopCursorなど) を設定して、機能を確認してください。SSE をネイティブにサポートするクライアントなら、それほど難しくありません。アプリの設定手順に従うだけです。この場合、例として、STDIO のみをサポートする MCP クライアントである LibreChat を設定します。(以下は LibreChat の YAML 設定例ですが、npx コマンドの実行方法はどのクライアントでも一貫しています。「mcp-remote」コマンドを設定する際には、edgecompute.app のサービス URL を忘れずに使用してください。

mcpServers:
  fastly-mcp-server:
    command: npx
    args:
      - -y
      - "mcp-remote"
      - https://highly-adequate-adder.edgecompute.app/sse
      - --transport
      - sse-only

2025年5月現在、--transport sse-only オプションを使用しない限り、mcp-remote パッケージはデフォルトで Streamable HTTP 接続になります。SSE 経由で接続するには、このオプションを含める必要があります。

この設定で LibreChat を起動すると、以下のような画面が表示されます。これでセットアップが完了しました。

このサンプルは、Fastly VCL Service から VCL をダウンロードする MCP ツールを示していますが、追加機能を簡単に追加できます。Fanout の仕様ではメッセージサイズが約64KBに制限されていることにご注意ください。したがって、レガシーSSEをサポートする際には、MCP ツールの呼び出しからの結果メッセージが大きくなりすぎないように注意してください。

結論 : 今後の予定

この記事では、Fastly Compute の柔軟で効率的な開発環境が、高性能な MCP サーバーを迅速にセットアップするプロセスをどのように簡素化するかを紹介しました。次のステップとして、OAuth 仕様に基づくより高度なサーバーの構築について掘り下げる予定です。ご期待ください !

貴社が LLM と AI をどのように活用しているのか、関連する課題にどのように取り組んでいるのかも、ぜひお聞かせください。ご意見を共有し、コミュニティのディスカッションにご参加ください。どのような種類のフィードバックも歓迎いたします。