MCP導入の拡大:よりシンプルで安全、低コストな企業向けMCP展開のためのリファレンスアーキテクチャ
2026-04-14
Cloudflareでは、Model Context Protocol(MCP)をAI戦略の中核として積極的に採用してきました。この変化はエンジニアリング組織の枠を超え、プロダクト、セールス、マーケティング、ファイナンスなどのチームが、日常業務の効率化のためにエージェント的ワークフローを活用するまでに広がっています。しかし、MCPを使ったエージェントワークフローの導入にはセキュリティ上のリスクも伴います。これらは認可スプロール(authorization sprawl)、プロンプトインジェクション(prompt injection)、サプライチェーンリスクなど多岐にわたります。
このような全社的な導入を安全に進めるため、我々はCloudflare One (SASE)とCloudflare Developer platformの双方からセキュリティコントロール群を統合し、従業員の生産性を落とすことなくMCPの利用をガバナンスできる体制を整えました。本記事では、MCPワークフローを保護するために当社が採用したベストプラクティスを紹介し、プラットフォームの各部分を組み合わせて自律型AI時代に対応した統一的なセキュリティアーキテクチャをどのように構築したかを解説します。
また、企業でのMCP導入を支える2つの新しいコンセプトも共有します:
- MCP server portalsを備えたCode Modeを提供し、MCP利用に伴うトークンコストを大幅に削減すること。
- Cloudflare Gatewayを用いたShadow MCP検出により、無許可のリモートMCPサーバーの利用を発見する方法。
さらに、当社がMCPをどのように展開したか、remote MCP servers、Cloudflare Access、MCP server portals、AI GatewayなどのCloudflareプロダクトを用いてMCPセキュリティアーキテクチャをどのように構築したかも説明します。
リモートMCPサーバーは可視性と制御を提供する
MCPは、AIアプリケーションとそれがアクセスする必要があるデータソース間の双方向接続を構築するためのオープン標準です。このアーキテクチャでは、MCPクライアントがLLMや他のAIエージェントとの統合点となり、MCPサーバーはMCPクライアントと企業リソースの間に配置されます。MCPクライアントとMCPサーバーの分離により、エージェントは目標を自律的に追求・実行できますが、AI(MCPクライアント側に統合)と企業リソースの認証情報やAPI(MCPサーバー側に統合)との明確な境界が維持されます。
Cloudflareの従業員は、プロジェクト管理プラットフォーム、社内Wiki、ドキュメントやコード管理プラットフォームなど、さまざまな内部リソースにアクセスするためにMCPサーバーを頻繁に利用しています。初期の段階で、ローカルホストされたMCPサーバーはセキュリティ上の負債になると判断しました。ローカル展開のMCPサーバーは、検証されていないソフトウェアソースやバージョンに依存する可能性があり、サプライチェーン攻撃やツールインジェクション攻撃のリスクが高まります。また、ITやセキュリティ管理者がこれらのサーバーを管理できず、従業員や開発者個々人の裁量でどのMCPサーバーを動かすか、どのようにアップデートするかが決まってしまうため管理不能になります。
そこでCloudflareでは、企業全体のMCPサーバー展開を管理する中央チームを設置しました。このチームはmonorepo内に共有MCPプラットフォームを構築し、ガバナンスされたインフラをすぐに利用できる形で提供しています。従業員が内部リソースをMCP経由で公開したい場合、最初にAIガバナンスチームの承認を得てからテンプレートをコピーし、ツール定義を書き、デプロイします。デフォルトで書き込みに対するdeny制御と監査ログ、CI/CDパイプラインの自動生成、シークレット管理が付与されるため、数分のスキャフォールディングで新しいガバナンスされたMCPサーバーを立ち上げられます。ガバナンスがプラットフォーム自体に組み込まれていることが、導入が急速に広がった理由です。
我々のCI/CDパイプラインはこれらをCloudflareのdeveloper platform上のカスタムドメインでremote MCP serversとしてデプロイします。これにより、どのMCPサーバーが従業員に利用されているかの可視化が可能になり、ソフトウェアソースを制御できます。付随する利点として、Cloudflare developer platform上のremote MCPサーバーは当社のグローバルなデータセンターネットワークに自動的に配備されるため、従業員は世界中どこにいても低レイテンシでMCPサーバーにアクセスできます。
Cloudflare Accessによる認証
一部のMCPサーバーはCloudflareのドキュメントMCPサーバーやCloudflare Radar MCPサーバーのように公開リソースの前に配置され、誰でもアクセスできる必要があります。一方で、従業員が利用する多くのMCPサーバーは社内のプライベートリソースの前にあり、認可された従業員以外にはアクセスを許可してはいけません。
このため我々のmonorepoテンプレートでは、MCPサーバーのOAuthプロバイダとしてCloudflare Accessを統合しています。Cloudflare Accessはログインフローを保護し、リソースへのアクセストークンを発行します。また、エンドユーザーのSSO(single-sign on)、MFA(multifactor authentication)、IPアドレスやロケーション、デバイス証明書等のコンテキスト属性を検証するアイデンティティアグリゲータとして機能します。
MCP server portalsによる発見性とガバナンスの集中化
MCP server portalsは、すべてのAIアクティビティに対するガバナンスと制御を一元化します。remote MCPサーバーの数が増えるにつれて、我々は新たな課題に直面しました:発見(discovery)です。特にMCPに不慣れな従業員が、自分に利用可能なMCPサーバーを簡単に見つけて利用できるようにしたいと考えました。この問題に対する解はMCP server portalsでした。
従業員は自分のMCPクライアントをMCP server portalに接続するだけで、そのポータルが認可されたすべての内部およびサードパーティのMCPサーバーを即座に示します。さらに、MCP server portalsは集中ログ、ポリシーの一貫した適用、DLP(データ損失防止)ガードレールを提供します。管理者は誰がどのポータルにログインしたかを確認し、個人を特定できる情報(PII)など特定のデータが特定のMCPサーバーと共有されるのを防ぐDLPルールを作成できます。
また、ポータル自体へのアクセス権や、各MCPサーバーからどのツールを露出するかを制御するポリシーも作成できます。例えば、社内コードリポジトリのMCPサーバーに対しては、財務グループに属する従業員だけがアクセスできるポータルを作り、読み取り専用ツールのみを露出する、といった制御が可能です。一方で、エンジニアリングチームのコーポレートラップトップからのみアクセス可能な別のポータルでは、より強力な読み書きツールを露出することができます。
ポータルはCloudflare上でホストされるremote MCP serversと、他所でホストされたサードパーティのMCPサーバーの双方をサポートします。このアーキテクチャのパフォーマンス面での強みは、これらすべてのセキュリティおよびネットワーキングコンポーネントが当社のグローバルネットワーク内の同一物理マシン上で動作する点にあります。従業員のリクエストがMCP server portal、Cloudflareホストのremote MCP server、Cloudflare Accessを通過するとき、そのトラフィックは同じ物理マシンを離れる必要がありません。
MCP server portalsと連携するCode Modeでコストを削減
高ボリュームのMCP展開を数ヶ月運用した結果、トークンコストがかなりの額になりました。さらに、標準的なMCPの使い方は多くの人にとって最適ではないと考えるようになりました。一般的なアプローチでは、MCPサーバーで公開するAPI操作ごとに個別のツール定義を作る必要があります。しかしこの静的で網羅的な方法は、数千のエンドポイントを持つ大規模プラットフォームになると、すぐにエージェントのコンテキストウィンドウを枯渇させます。
以前に我々は、サーバーサイドのCode ModeをCloudflareのMCPサーバーで活用し、Cloudflare APIの数千のエンドポイントを公開しつつトークン使用量を99.9%削減したことを報告しました。CloudflareのMCPサーバーはわずか2つのツールだけを公開します:モデルが利用可能なものを探索するためにJavaScriptを書けるsearchツール、見つけたツールを呼び出すためにJavaScriptを書けるexecuteツールです。モデルは必要なものをオンデマンドで発見し、事前にすべてを受け取る必要がなくなります。
我々はこのパターンを非常に気に入ったため、皆が使えるようにしました。現在、MCP server portalsでも「Code Mode」パターンを利用できるようにしています。これにより、すべてのMCPサーバーを中央ポータルでフロントし、監査コントロールと段階的なツール公開(progressive tool disclosure)を行うことでトークンコストを削減できます。
動作の概要は次の通りです。クライアントにすべてのツール定義を公開する代わりに、基盤となる全てのMCPサーバーは2つのMCPポータルツールに集約されます:portal_codemode_search と portal_codemode_execute。searchツールはモデルに codemode.tools() 関数へのアクセスを与え、接続されている上流MCPサーバーからすべてのツール定義を返します。モデルはこれらの定義をフィルタして探索するJavaScriptを記述し、スキーマ全文をコンテキストに読み込むことなく必要なツールを特定します。executeツールは各上流ツールが呼び出し可能な関数として利用できる codemode プロキシオブジェクトを提供します。モデルはそれらを直接呼ぶJavaScriptを書き、複数操作の連鎖、結果のフィルタ、エラー処理をコード内で行います。これらはすべてDynamic Workersにより駆動されるMCP server portal上のサンドボックス環境で実行されます。
例:Jiraのチケットを見つけ、Google Driveの情報で更新するエージェント。
// portal_codemode_search
async () => {
const tools = await codemode.tools()
return tools
.filter(t => t.name.includes("jira") || t.name.includes("drive"))
.map(t => ({ name: t.name, params: Object.keys(t.inputSchema.properties || {}) }))
}
モデルは、すべてのツールのフルスキーマを受け取ることなく、必要なツール名とパラメータを把握します。続いて、操作を連鎖させる単一のexecute呼び出しを書きます:
// portal_codemode_execute
async () => {
const tickets = await codemode.jira_search_jira_with_jql({ jql: 'project = BLOG AND status = "In Progress"', fields: ["summary", "description"] })
const doc = await codemode.google_workspace_drive_get_content({ fileId: "1aBcDeFgHiJk" })
await codemode.jira_update_jira_ticket({ issueKey: tickets[0].key, fields: { description: tickets[0].description + "\n\n" + doc.content } })
return { updated: tickets[0].key }
}
これでツール呼び出しはたった2回です。1回目で何が利用可能かを発見し、2回目で実作業を行います。Code Modeがない場合、同じワークフローは両方のMCPサーバーからのすべてのツールスキーマをモデルに事前に与え、さらに3回の個別ツール呼び出しを行う必要がありました。
節約効果を数字で見ると、内部のMCP server portalが当社の4つの内部MCPサーバーに接続されているとき、合計で52のツールを露出しており、それらの定義だけで約9,400トークン分のコンテキストが必要になります。Code Modeを有効にすると、これら52のツールは2つのポータルツールに圧縮され、約600トークンしか消費しません。94%の削減です。重要なのは、このコストが固定される点です。MCPサーバーを追加で接続しても、Code Modeのトークンコストは増加しません。
Code ModeはMCP server portalのURLにクエリパラメータを追加することで有効化できます。通常のURL(例: https://myportal.example.com/mcp )にアクセスする代わりに、?codemode=search_and_execute を付けます(例: https://myportal.example.com/mcp?codemode=search_and_execute)。
AI Gatewayによる拡張性とコスト制御
我々はここで手を止めません。AI GatewayをMCPクライアントとLLMの接続の間に挿入することで、迅速に各種LLMプロバイダを切り替えられるようにし(ベンダーロックインを防ぐ)、各従業員が消費できるトークン数を制限するなどのコスト制御を強制できるようにしています。
Cloudflare GatewayによるShadow MCPの検出とブロック
認可されたMCPサーバーへのガバナンスされたアクセスを提供した上で、次に対処すべきは無許可のMCPサーバー(shadow MCP)の利用です。Cloudflare Gatewayを活用して、組織外のリモートMCPサーバーへの接続を検出し、ブロックすることで、シャドウ環境から発生するリスクを軽減しています。
以上が、当社がMCPを大規模に採用する際に構築したリファレンスアーキテクチャの概要です。リモートMCPサーバーによる可視化と制御、Cloudflare Accessによる認証、MCP server portalsによる発見性とガバナンスの集中化、Code Modeによるコスト最適化、AI GatewayとCloudflare Gatewayによる拡張性とShadow検出の組み合わせが、よりシンプルで安全かつ低コストな企業向けMCP展開を可能にしました。