MCPサーバーアーキテクチャと動作原理:プロトコルから実行フローまで

AIシステムが進化するにつれて、ますます複雑になっています。従来のAPI呼び出しパラダイム(独立したHTTPリクエストやプロバイダー固有のSDKなど)は、高度なAIエージェントシステムを構築する際に、開発効率の低さ、高いセキュリティリスク、メンテナンス性の悪さといった課題に直面します。例えば、独立したAPI定義には統一された標準がなく、モデルごとに異なる関数呼び出し仕様が提供され、効率的な機能発見と動的な統合メカニズムが欠如しています。
これらの問題を解決するために、Model Context Protocol (MCP)が登場しました。プロトコルレベルでの標準化を通じて、拡張可能でクロスサービスなツールおよびリソース呼び出しメカニズムを導入し、AIエージェントが外部システムと堅牢に連携できるようにします。MCPの核となる設計思想は、プロトコルの抽象化と関心の分離にあります。特定の実装を規定するのではなく、AIアプリケーションと外部機能間の対話のための普遍的な言語を定義します。
本記事では、MCPサーバーのアーキテクチャ、プロトコル原理、実行フローについて権威ある解説を提供し、なぜSDKよりもプロトコル層が好まれるのか、そしてMCPが現代のインテリジェントシステムに求められるスケーラブルなツール呼び出しをどのようにサポートするのかを強調します。
対象読者:
- テクノロジー愛好家および初心者
- 効率改善を求める専門家および管理者
- 企業の意思決定者および事業部門長
- AIの将来動向に関心のある一般ユーザー
目次:
- 1. MCPプロトコルの核となる設計思想
- 2. MCPの核となるコンポーネント
- 3. MCPと従来のAPI統合:アーキテクチャのパラダイム
- 4. MCPサーバーがAIエージェントとどのように連携するか
- 5. MCPの3つの核となる機能プリミティブ
- 6. 通信関係:MCP Client、Server、およびLLM
- 7. 完全なMCPサーバー呼び出しプロセス
- 8. MCP vs. 従来のAPI / 関数呼び出し:モデルインターフェース層の違い
- 9. MCPの限界と課題
- 結論
- MCP よくある質問(FAQ)
1. MCPプロトコルの核となる設計思想
MCPは、統一されたSDKを提供するのではなく、プロトコル層の抽象化を選択し、標準化、言語非依存性、高い汎用性といった核となる利点を提供します。これにより、使用されるプログラミング言語やフレームワークに関わらず、MCPプロトコル仕様を実装する任意のプログラムが相互に通信できます。この設計は、エコシステムの開放性と相互運用性を最大化します。通信は、軽量なリモートプロシージャコールプロトコルであり、構造化されたリクエストとレスポンス形式が自動化された機械間インタラクションに理想的なJSON-RPC 2.0に基づいています。
通信メッセージ形式
MCPは、その基盤となるメッセージ形式および通信標準としてJSON-RPC 2.0を利用しています。
JSON-RPCは、ステートレスで軽量なリモートプロシージャコール(RPC)プロトコルです。JSONをデータ形式として使用し、STDIOやHTTPなど様々なトランスポート層で伝送できます。
MCPにおいて、JSON-RPCは以下の役割を担います:
- リクエスト/レスポンスメッセージ構造の定義;
- メソッド呼び出し(例:
initialize、tools/list、tools/call)の標準化; - 拡張可能なエラーおよびバッチ処理メカニズムの提供。
3層アーキテクチャモデル
MCPは、MCP Client、MCP Server、およびResource/Toolからなる3層アーキテクチャモデルを採用しています。
| MCPホスト |
|---|
| MCPクライアント |
| MCPサーバー |
- MCPホスト: リクエストを開始するLLMアプリケーション(例:Claude Desktop、IDE、またはAIツール)。
- MCPクライアント: ホストプログラム内に配置され、MCPサーバーと1対1の接続を維持します。
- MCPサーバー: MCPクライアントにコンテキスト、ツール、およびプロンプト情報を提供します。
この階層化された設計により、モジュール間の結合が大幅に軽減され、MCPサーバーのスケーラビリティが向上します。
2. MCPの核となるコンポーネント
トランスポート層 MCPの標準トランスポートにはSTDIOとHTTP + Server-Sent Events (SSE)が含まれ、SSEはサーバーからクライアントへのストリーミングメッセージ機能を提供します。 MCPは現在、クライアント-サーバー通信のための2つの標準的なトランスポートメカニズムを定義しています:
- STDIO: セキュリティとパフォーマンスを優先。MCPサーバーは子プロセスとして起動し、AIアプリケーションとローカルで実行されます。ローカルのプロセス間通信(IPC)を使用し、低遅延と簡単なデプロイメントを提供します。すべての通信がローカルに留まるため、資格情報やデータに対するネットワークリスクを回避します。これは、Claude Desktopのような個人生産性ツールにローカル機能を統合する際の推奨される方法です。
- HTTP with Server-Sent Events (SSE): アクセシビリティとスケーラビリティを優先。MCPサーバーは、複数のリモートクライアントからアクセス可能なネットワークサービスとしてデプロイされます。メッセージ伝送にはHTTP/POSTとJSON-RPCを組み合わせて使用します。これは、企業内の共有機能ハブやSaaSサービスに適しています。HTTPSと標準HTTP認証がセキュリティ基盤を提供します。
このメカニズムにより、MCPはシンプルなツール呼び出しと大規模な分散サーバーの両方をサポートできます。選択はシナリオによって異なります:STDIOはローカルプロセス通信により効率的であり、HTTPはリモートクラスター展開においてより優れたスケーラビリティを提供します。
プロトコル層
プロトコル層では、MCPはJSON-RPC 2.0仕様を使用して、次のような標準メソッドを定義します:
- 接続の初期化(
initialize); - 機能発見(
tools/list); - ツール実行(
tools/call)。
このバリアント設計は、JSON-RPCの核となるプロトコル構造を維持しつつ、MCP固有の通信セマンティクスを導入します。JSON-RPC Tools
セキュリティと認証
MCPは直接的なセキュリティメカニズムを提供しません。セキュリティ設計は、以下のような確立されたソリューションを使用する特定のMCPサーバー実装に依存します:
- HTTPS/TLS暗号化通信;
- OAuth2、API Keys、またはmTLSによる認証;
- 最小権限の認可制御。
これは、MCPプロトコル自体にはセキュリティ仕様が含まれていないことを意味します。その代わりに、サーバーの実装者がサードパーティのセキュリティシステムを設計し、統合する責任があります。例えば、エンタープライズプラットフォームでは、MCPをID管理システムと統合して、セキュアなアクセス制御、ガバナンス、監査を実現する場合があります。
拡張性とプラグインアーキテクチャ
MCPの拡張性は、そのプロトコル設計から自然に生まれます。「カスタムツール」の開発には、MCPプロトコルを実装するサーバープログラムの作成が含まれます。このサーバーが起動し、AIアプリケーション(MCP Client)に接続すると、標準のtools/listメソッドを通じてそのツールを動的に登録します。AIアプリケーションは、事前設定や再コンパイルなしにこれらの新しい機能を発見して使用でき、真のプラグアンドプレイ機能を実現します。
MCPサーバーは通常、以下のメカニズムを含みます:
- カスタムツール開発;
- ツールおよび機能の動的登録/発見;
- プロトコルの中核を変更せずに動作を拡張するプラグインサポート。
ツールライフサイクルとセッション管理
MCP接続のライフサイクルは、initializeハンドシェイクで始まり、接続が閉じられるときに終了します。この期間中、すべてのツール呼び出しとリソース読み取りは論理的なセッションを共有します。複数の独立したユーザーまたはセッション(特にHTTPモードの場合)にサービスを提供する必要があるMCPサーバーの場合、実装は異なるクライアントまたはリクエスト間の状態分離を管理する必要があります。
MCPサーバーは以下を管理します:
- セッションコンテキスト: 複数の呼び出し間で状態を保存;
- 分離メカニズム: 異なるクライアント間のセッションが隔離され、データ漏洩や状態汚染を防ぐことを保証。
この管理は、長期セッションや多段階操作のような高度なユースケースをサポートします。
システムパフォーマンスと信頼性設計
軽量プロトコルとして、MCPのパフォーマンスはサーバー実装の効率とネットワーク遅延に大きく依存します。高可用性の要件のために、複数のMCPサーバーインスタンスをロードバランサーの背後にデプロイできます。プロトコルはloggingインターフェースを定義しており、サーバーが実行ログをクライアントに送信することを可能にし、これが監査の基盤となります。
MCPサーバーの設計には、しばしば以下が含まれます:
- マルチレプリカデプロイメントのためのロードバランシング;
- 高可用性を確保するための障害回復;
- 呼び出し履歴の追跡と診断のためのロギングと監査。
これらのメカニズムは、エンタープライズグレードのユースケースにおける安定性を向上させます。
現代のエコシステムとの統合
クラウドネイティブ環境に適応するため、MCPサーバーは自動スケーリングと弾力的なデプロイメントのためにKubernetesやクラウドロードバランサーと連携することがよくあります。MCPサーバーはコンテナ化され、Kubernetesのようなプラットフォームにデプロイできるため、現代のエンタープライズインフラスタック内でヘルスチェックと集中管理が可能です。
3. MCPと従来のAPI統合:アーキテクチャのパラダイム
独立したAPI統合と比較して、MCPはプロトコル抽象化を利用して、セキュリティ、メンテナンス性、およびクロスプラットフォーム機能を向上させます。
| 特徴 | MCPサーバー | 従来のAPI統合 | プラグインシステム | SDKモード |
|---|---|---|---|---|
| 標準化 | 業界標準 | APIごとに異なる | プラットフォーム固有 | プロバイダー固有 |
| 開発コスト | 低い(一度実装) | 高い | 中程度 | 高い |
| メンテナンスの複雑さ | 低い | 非常に高い | 中程度 | 高い |
| クロスプラットフォーム機能 | 非常に優れている | 劣る | 劣る | 劣る |
| セキュリティモデル | 統一制御 | 断片化 | プラットフォーム制御 | 断片化 |
| リアルタイムサポート | ネイティブサポート | ポーリング/Webhooks | 制限あり | カスタム |
| コミュニティエコシステム | 急速に成長中 | 断片化 | クローズド | ベンダーロックイン |
4. MCPサーバーがAIエージェントとどのように連携するか
一般的な計画ベースのAIエージェントアーキテクチャでは、コンポーネントとしてプランナー、エグゼキューター、メモリが含まれます。MCPサーバーは、このアーキテクチャにおける標準化された実行バックエンドとして機能します。
- プランナー: (通常はLLM) 入力に基づいて戦略を策定します。MCP Clientから利用可能な
Toolsとその説明の現在のリストを取得します。その後、プランナーは一連のステップを概説します(例:「ツールAを使用してデータをクエリし、次にツールBで結果を処理する」)。 - エグゼキューター: (通常はMCP Client) 計画に基づいて、対応するMCP Serverに
tools/callリクエストを発行します。 - メモリ: 状態とコンテキストを保存します。実行結果はエージェントに返され、メモリに保存され、その後の計画に利用されます。さらに、
Resourcesはタスクに関連する背景知識を積極的に提供できます。
MCPサーバーはエグゼキューターの機能プロバイダーとして機能し、プランナーが標準プロトコルを介してツールとリソースにアクセスできるようにします。
AIエージェントアーキテクチャにおけるMCPの位置付けは、外部サービスに対するオペレーティングシステムのインターフェースに似ており、機能実行を統一し、標準化します。
MCPは、LangChainやAutoGenのようなフレームワークと補完的な関係にあります。これらのフレームワークはAIエージェントワークフローに高レベルの抽象化とオーケストレーションを提供しますが、MCPは標準化されたツール実行層として機能します。これにより、これらのフレームワークが特定のツールを統合する際に直面する「グルーコード」や断片化の問題を解決します。
5. MCPの3つの核となる機能プリミティブ
これらのプリミティブは、MCPプロトコルのデータモデルとAIアプリケーションがサーバーとどのように対話するかを定義します。
- Tools: 検索やデータベース操作のような呼び出し可能な関数。各ツールには明確な名前、説明、および入力パラメータのJSON Schemaがあります。AIモデルは必要に応じてこれらをトリガーします(例:
send_emailツール)。 - Resources: ファイルシステムやオブジェクトストレージのようなアクセス可能なデータソース。各リソースにはURIとMIMEタイプがあります。AIアプリケーションはこれらの内容を読み取り、プロンプトにコンテキストを注入します(例:
file:///reports/weekly.mdリソース)。 - Prompts: LLMの意思決定を支援するために使用される事前定義されたテンプレートまたはコンテキスト。これらは、ユーザーが特定のタスクを開始するための構造化された方法を提供します(例:モデルに関連ツールを使用するように誘導する「週末旅行計画」プロンプト)。
この3層設計により、MCPサーバーは実行可能な機能を明確に表現しながら、動的な発見をサポートできます。さらに、プロトコルはサーバーがクライアントからモデル生成(LLMサンプリング)をリクエストすることを可能にします。これにより、サーバーは自身の実行ロジック中にクライアントのLLMを推論に利用できます。クライアントは、これをサポートするために初期化中にこの機能を宣言する必要があります。
6. 通信関係:MCP Client、Server、およびLLM
これら3つの関係を理解することが、MCPワークフローを理解する鍵となります:
- 誰が接続を開始するのか? MCP Client(AIアプリに統合されている)がMCP Serverへの接続を積極的に開始します。
- 誰がツールを呼び出すことを決定するのか? LLM(AIアプリ内)が内部ロジックに基づいて意思決定を行います。MCP Clientは利用可能なツールのリストをコンテキストとして提供し、LLMはどのツールをどのようなパラメータで呼び出すかを決定します。
- 誰が操作を実行するのか? MCP Serverが実際のサービスまたはリソースを呼び出します。クライアントから標準化された
tools/callリクエストを受信し、それを基盤システム(データベース、API、ファイル)のアクションに変換し、標準化された結果を返します。
7. 完全なMCPサーバー呼び出しプロセス
典型的なワークフローには以下が含まれます:
- 初期化: クライアントとサーバーが接続を確立し、プロトコルバージョンと機能を交換します。
- 機能発見: クライアントは
tools/listを介してサーバーからToolsとResourcesのリストを取得します。 - ツール呼び出し: LLMが決定した後、クライアントは
tools/callリクエストを発行します。サーバーが実際の操作を実行します。 - 結果注入: サーバーは構造化された結果を返し、クライアントはそれをLLMに提供して最終的な応答生成またはさらなる計画に利用します。
呼び出しプロトコルの典型的なタイミング図:
以下は、会議室予約のケースにおける簡略化されたタイミング図で、初期化から実行までの核となるプロトコルインタラクションを示しています:
8. MCP vs. 従来のAPI / 関数呼び出し:モデルインターフェース層の違い
従来のAPI統合は、ベンダー定義の仕様とSDKに依存します。MCPは呼び出し動作をJSON-RPCメソッドに抽象化し、特定のSDKに依存しない標準インターフェースを維持します。
- 従来の関数呼び出し これは特定のモデルベンダーによって提供される機能です。開発者はベンダーの形式で関数を定義し、モデルはその形式でリクエストを出力することを学習します。これはベンダー独自のインターフェースにロックされます。
- MCPアーキテクチャ MCPはモデルに依存しないオープンプロトコルです。機能記述と呼び出しのための普遍的で標準化された形式を定義します。MCPをサポートする任意のAIアプリ(基盤となるモデルに関わらず)は、任意のMCPサーバーと対話できます。これにより、ツール統合がモデルベンダーロックインから解放されます。
MCPは、大規模なマルチモデル環境における長期的なメンテナンスとエコシステム構築により適しています。
ユースケースの境界: 単一のモデルでシンプルかつ固定されたツール要件がある場合、関数呼び出しで十分かもしれません。しかし、長期的なスケーラビリティを必要とする複数のモデルとツールが関わる複雑なエージェントシステムを構築している場合、MCPが提供する標準化と疎結合は不可欠です。
9. MCPの限界と課題
MCPサーバーはAIエージェントがツールと対話するための標準化された方法を提供しますが、それは「万能薬」ではありません。MCPが解決しないことと、実際のエンジニアリング環境における課題を理解することが重要です。
1. 複数のMCPサーバーにおける機能の競合とガバナンス
複雑なシステムでは、複数のMCPサーバーが接続されることがよくあります。異なるサーバーが類似のセマンティクスを持つツールや重複する機能を公開する可能性があります。
MCPプロトコルは宣言と呼び出しの仕様を扱いますが、以下は含みません:
- ツールの優先順位付け
- 競合検出または解決
- コンテキストに基づいた最適なツール選択戦略
これは、意思決定の責任が完全にMCPクライアントまたはAIエージェント層にあることを意味します。プランナーまたは戦略モジュールは、独自のツール選択ロジックを実装する必要があります。したがって、MCPは「機能公開と通信層」であり、「インテリジェントなスケジューリングシステム」ではありません。
2. 長期および複数ラウンドの呼び出しによるコンテキストプレッシャー
エージェントのシナリオでは、タスクには複数のステップが含まれます:
- 計画
- 複数のツール呼び出し(
tools/call) - 結果注入
- 再推論と意思決定
このプロセスは、LLMのコンテキストウィンドウに情報を継続的に追加します。重要な注意点として:
- MCPはコンテキストの剪定、圧縮、または要約の責任を負いません。
- 組み込みのメモリ管理やコンテキスト最適化機能はありません。
長いタスクでは、これが原因で以下が発生する可能性があります:
- 急速なトークンコストの上昇
- モデルコンテキストの限界に近づく
- 重要な情報が「埋もれてしまう」
コンテキスト管理は、MCPプロトコルではなく、エージェントアーキテクチャ層が解決すべき課題として残ります。
3. 言語実装間の成熟度の違い
プロトコルは言語に依存しませんが、実際には成熟度が異なります:
- JavaScript/Node.jsおよびPythonのエコシステムが最も成熟しています。
- Rust、Go、Javaの実装はまだ進化中です。
- 最新の仕様に対するサポートは、実装間で異なる場合があります。
エンジニアリングチームは以下の必要があります:
- 実装と仕様間の一貫性を確保する。
- 本番環境におけるMCPサーバー実装の安定性とメンテナンスを評価する。
これは、初期段階にあるあらゆる新興プロトコルに共通する特徴です。
4. セキュリティと権限は外部システムに依存
MCPは「プロトコルニュートラル」に設計されており、組み込みのセキュリティシステムを含みません。
具体的には:
- MCPは機能の境界(Tools / Resources)を定義します。
- 特定の認証、認可、または監査メカニズムを義務付けません。
現実世界でのデプロイメントでは、セキュリティは以下のような外部システムを介して実装される必要があります:
- OAuth / OIDC
- APIゲートウェイ
- ゼロトラストアーキテクチャ
- エンタープライズIAMシステム
MCPサーバーは次のように見なされるべきです:
セキュリティ制御センター自体ではなく、セキュリティシステムでラップされた機能サービス。
これは、MCPが異なる企業やクラウド環境に柔軟に適応できる主要な理由ですが、システム設計の複雑さも増大させます。
5. プロトコルとエコシステムの急速な進化
AIエージェント向けの新プロトコルとして、MCPは急速に進化しています:
- プロトコルの詳細とプリミティブは洗練されつつあります。
- 新機能のサポートには、異なる実装間で時間差があります。
- 高度なユースケースに対するベストプラクティスはまだ確立途中です。
MCPは、完成された静的な標準というよりも、長期的なインフラストラクチャプロトコルとして見なされるべきです。
MCPサーバーは、ツールの発見、呼び出し、組み合わせのための標準化された方法を提供することに焦点を当てています。これらの限界を理解することは、開発者が以下のことを助けます:
- 明確な責任の境界を定義する。
- プロトコル自体への過度な依存を避ける。
- 適切なアーキテクチャ層で複雑さを解決する。
結論
実際のエンジニアリングでは、MCPは「機能プロトコル基盤」として機能し、その価値はシステムが複雑になるにつれてより明らかになります。MCPサーバーは従来のAPIや関数呼び出しを置き換えるものではありません。その代わりに、AIエージェントのための標準化され、拡張可能で、セキュアなプロトコル層を提供します。この層を導入することで、AIエージェントのスケーリングにおける核となるエンジニアリング課題、すなわち統合の複雑さをN×MからN+Mに削減し、動的な発見とセキュアな実行のためのフレームワークを提供し、ツールエコシステムをAIモデルから分離するといった課題に対処します。これにより、インテリジェントエージェントは以下のことが可能になります:
- 体系的に機能にアクセスする;
- ツール/リソースを動的に発見し、呼び出す;
- モデルやプラットフォーム間で相互運用する。
MCPは、豊かで構成可能なAIツールエコシステムの基盤を築きます。これは「手動統合」から「標準化されたインフラストラクチャ」への移行を示し、相互運用可能でスケーラブルかつセキュアなエンタープライズAIシステムを構築するための基盤を提供します。
MCP よくある質問(FAQ)
1. MCPは従来のAPIや関数呼び出しに取って代わるのか?
いいえ。MCPは代替ではなく、より高いレベルで機能し、MCPクライアントがlistメソッドを介してMCPサーバーから機能を動的に発見できるようにします。
- シンプルで固定された単一モデルのシナリオでは、関数呼び出しが効率的です。
- マルチモデル、マルチツール、進化するエージェントシステムでは、MCPはより優れた疎結合とメンテナンス性を提供します。
現実世界のシステムでは、これら2つはしばしば補完的な関係にあります。
2. MCPは特定のLLMを必要とするか?
いいえ。MCPはモデルに依存しません。クライアントとサーバー間の通信を規定し、基盤となるモデルがOpenAI、Anthropic、Googleのいずれであるか、またはローカルのオープンソースモデルであるかを問いません。AIアプリケーションがツールコンテキストを公開し、MCPプロトコルに従って呼び出しを開始できる限り、MCPサーバーを使用できます。
3. MCPには組み込みのセキュリティがあるか?
いいえ。それはプロトコルニュートラルです。セキュリティ(HTTPS、OAuth2、IAM)は、デプロイメント環境および外部システムによって提供される必要があります。
4. 複数のMCPサーバーにおけるツール競合はどのように処理されるか?
MCPは競合を解決しません。複数のサーバーが類似のツールを提供する場合、ツール選択と優先順位の責任はクライアントまたはエージェントのプランナー層にあります。
5. MCPはコンテキストウィンドウの肥大化を引き起こすか?
起こり得ますが、これはLLMエージェント固有の課題です。MCPはコンテキストを管理しません。要約とメモリ管理はエージェントアーキテクチャの責任です。
6. MCPは高並行性のエンタープライズ利用に適しているか?
はい、実装が堅牢である限り。高並行性は、サーバーの品質、マルチインスタンス展開、およびKubernetesのようなクラウドネイティブアーキテクチャに依存します。
7. MCP導入のコストは高いか?
コーディングは比較的シンプルですが、エージェントシステムとツールガバナンスのアーキテクチャ的理解が必要です。中〜大規模なAIアプリケーションを構築するチームに最適です。
8. MCPは「安定」しているか?
核となる設計は安定していますが、エコシステムはまだ進化中です。それは「一度きりの」解決策ではなく、先進的なインフラストラクチャプロトコルです。
9. MCPは個人開発者向けか?
はい、スケーラビリティの必要があれば。非常にシンプルなプロジェクトでは「過剰」かもしれませんが、システムが成長するにつれて高くなるリファクタリングコストを防ぎます。
10. MCPが最もよく解決する問題は何か?
それは複数のツール/サービスへのアクセスを標準化すること、機能発見を実行から分離すること、そして異なるモデルやチーム間での機能再利用を可能にすることに優れています。
MCP記事シリーズ:
- MCPサーバーの包括的分析:AIエージェント時代のコンテキストとツール通信ハブ
- MCPサーバーはどのような課題を解決するのか? AIエージェントに不可欠な理由
- MCPサーバーアーキテクチャと動作原理:プロトコルから実行フローまで
- MCPサーバー実践ガイド:ゼロからの構築、テスト、デプロイ
- MCPサーバーのアプリケーションシナリオ評価と技術選定ガイド
著者について
このコンテンツは、NavGoodコンテンツ編集チームによってまとめられ、公開されています。 NavGoodは、AIツールとアプリケーションエコシステムに焦点を当て、AIエージェント、自動化されたワークフロー、生成AIの開発と実装を追跡するプラットフォームです。
免責事項: 本記事は著者の個人的な理解と経験を表明するものです。いかなるフレームワークや企業の公式見解を代表するものではなく、商業的または投資助言を構成するものではありません。
参考文献: [1]: https://json-rpc.dev/learn/mcp-basics "Understanding JSON-RPC for AI Integration" [2]: https://modelcontextprotocol.io/docs/learn/architecture "Architecture overview - Model Context Protocol" [3]: https://json-rpc.org/specification "JSON-RPC 2.0 Specification" [4]: https://modelcontextprotocol.io/docs/learn/architecture "About MCP: Architecture overview"