ELW株式会社 テックブログ

リアルなログをそのままお届けします。

MCPを理解する

エンジニアの井立田です。 本記事では、最近注目されているMCPの基本的な概念について、簡潔にわかりやすく解説します。

MCPとは

ツールとは

  • LLMが外部の関数やAPIを呼び出すための機能
    • 例:
      • 天気を取得するAPIを呼ぶ
      • 社内のドキュメント検索を行う
  • LLMは閉じた世界の中で働くため、外部の世界について知ることができず、また外部に対してなんらかの変化を及ぼす能力も持っていない。この弱点を克服する機能がツール。

Function Callingとは

  • ツールは関数のような形式で表現され、関数名・引数・その説明などを含む。 会話のプロセスで、モデルがツールの使用が必要だと判断した場合、適切な引数を指定して構造化された呼び出しリクエストを生成する。 この仕組みを Function Calling と呼ぶ。
  • 実際にツールを実行し、その結果をモデルに返す処理は、LLMアプリケーション(ホスト側)の責任です。
  • Function Callingの流れ
    1. アプリケーションがツールの一覧をLLMに渡す
    2. 会話の中でモデルがツールの呼び出しが必要と判断した場合、Function Callingで構造化されたリクエスト(JSON)を生成する
    3. LLMアプリケーション(ホスト)がそのリクエストを受け取り、実行
    4. レスポンスをモデルに戻し、最終的な回答を生成してユーザーに返す

MCPとは

  • MCP (Model Context Protocol) はLLMと外部サービスを繋ぐためのプロトコル(規格)のこと

    MCPはAIアプリケーション用のUSB-Cポートのようなものだと考えてください。USB-Cがデバイスを様々な周辺機器やアクセサリに接続するための標準化された方法を提供するのと同様に、MCPはAIモデルを様々なデータソースやツールに接続するための標準化された方法を提供します。

    https://modelcontextprotocol.io/introduction

  • Anthropic社が2024年11月に発表、2025年にはOpenAIをはじめ競合他社でも採用され、デファクトスタンダードとなっている

  • Function callingとMCPの違い
    • Function callingは各社が独自の実装を持っている
    • MCPはFunction Callingの仕組みを標準化し、ベンダーに依存しない形でやり取りできるようにしたプロトコル

なぜMCPが必要なのか

  • LLMが直接プラグインできる事前構築済み統合のリストが増えている
  • LLMプロバイダーとベンダーを柔軟に切り替えられる
  • インフラストラクチャ内でデータを保護するためのベストプラクティス

https://modelcontextprotocol.io/introduction#why-mcp%3F

関連技術

  • RAG
    • 検索拡張生成(Retrieval-Augmented Generation)
    • モデルのトレーニング時には含まれていない情報源から取得したコンテキストを、プロンプトに追加することで、モデルに一時的な知識を与える手法
  • RAGとMCPの違い
    • RAGもMCPも、どちらもLLMが外部から情報を得るために使われる仕組み
    • RAGはプロンプト生成の直前に、外部から情報を検索し、その内容をLLMの入力(プロンプト)に直接追加する
    • MCPのツール実行は、会話の流れの中でLLMがツールの呼び出しが必要だと判断したときに、外部処理を実行する
    • また、RAGでは外部情報の検索にベクトル検索を用いることが一般的

仕組み

MCPの基本構成

  • MCPホスト
    • LLMアプリケーション本体(例:Claude, Cursor)
    • MCPクライアントを内部に持ち、ツール呼び出しなどを管理
  • MCPクライアント
    • MCPサーバーと1:1で接続されるクライアント
    • LLMとのやり取りやルート制御を担う中継役
  • MCPサーバー
    • LLMに提供したい機能(ツール・リソース・プロンプトなど)を定義・公開するプログラム

https://modelcontextprotocol.io/docs/learn/architecture#participants

MCPサーバーの種類

  • Stadio(標準入出力)
    • ローカルのServerとの通信
  • Remote
    • リモートサーバーとの通信
      • HTTP + SSE
      • Streamable HTTP(2025年3月26日の仕様改定で追加)

MCPのプリミティブ(基本機能)

  • サーバー側が提供する機能
    • リソース
      • クライアントに対して公開する読み取り専用の情報(例:ドキュメント、設定データ)
    • プロンプト
      • 事前にテンプレート化されたプロンプト
    • ツール
      • LLMから呼び出せる関数やAPI(Function Callingに対応)
  • クライアント側が提供する機能
    • サンプリング
      • MCPサーバー側からMCPクライアントを介し、LLMにテキスト生成を依頼することができる
    • ルート制御
      • MCPサーバーがアクセスできるファイルやAPIを限定し、意図しないアクセスを防ぐ