News

【Model Context Protocol (MCP) 徹底解説】次世代AIの基盤を支える新標準とは?

目次

✅ この記事でわかること

  • MCP(Model Context Protocol)とは何か?なぜ話題なのか?
  • 従来のプロンプトAPIやチャットAPIとの違い
  • MCPが可能にするAIモデル連携の革新
  • 実装例:MCP対応のコードサンプル
  • 応用シナリオ:AIワークフロー、LLMエージェント、マルチモーダル統合
  • 開発者・企業が今後とるべき戦略

第1章:MCPとは何か?

🔍 背景

OpenAIが2024年に提唱した Model Context Protocol(MCP) は、AIモデルをより柔軟かつ一貫性のある形で統合・拡張できる新しい通信プロトコルです。

かつて、AIとのやり取りは主に「チャットAPI(OpenAI APIなど)」や「REST型のプロンプト送信」に限定されていました。これに対しMCPは、以下のような進化を提供します:

  • モデルとのコンテキスト共有が可能(ストリーミング型)
  • JSONベースで状態管理・履歴管理が標準化
  • 複数のモデルを動的に切り替えて統合処理が可能

🧠 MCPの役割

MCPは、AIとの「セッション」をより自然な形で表現できる設計になっており、

  • 一度のプロンプト送信で完結しない
  • 状態・履歴をまたいだ会話や指示
  • 複数のモジュール(例:音声→画像→コード)をつなぐ

といった複雑なAI連携処理に最適化されています。


🧩 具体的な構成

MCPのデータ構造はJSON形式で、以下のような「やりとりの単位=メッセージ単位」が明示されます:

{
  "id": "abc123",
  "role": "user",
  "content": "次の命令で表を作って",
  "context": {
    "type": "session",
    "thread_id": "xyz789",
    "references": ["前の応答のid"]
  },
  "metadata": {
    "timestamp": 1710000000
  }
}

また、モデル応答も以下のような形で返されます:

{
  "role": "assistant",
  "content": {
    "type": "table",
    "data": [["日付", "売上"], ["4/1", "1200円"]]
  },
  "function_call": null,
  "completion": {
    "confidence": 0.93
  }
}

第2章:従来のチャットAPIとの違いと進化点

従来のチャットAPI(例:OpenAI APIのchat/completionsエンドポイント)は、プロンプトと履歴を毎回まとめて送信し、レスポンスを受け取るという「ステートレス」なモデルでした。

MCPでは、これを「ステートフル」なセッションとして扱えるように進化しています。


✅ 従来のAPI(chat/completions)

{
  "model": "gpt-4",
  "messages": [
    { "role": "user", "content": "東京の天気は?" },
    { "role": "assistant", "content": "晴れです。" },
    { "role": "user", "content": "じゃあ週末の予定も教えて" }
  ]
}

このように、すべての履歴を都度送信する必要があります。

  • 🌐 毎回のリクエストサイズが増大
  • 📦 状態を保持するのはクライアント側
  • 🔁 同じ履歴を何度も送る無駄が発生

✅ MCPのAPIスタイル

MCPでは以下のように、状態(thread_id)とコンテキストIDを用いてモデルと連続した対話を行う設計です:

{
  "role": "user",
  "content": "週末の予定は?",
  "context": {
    "type": "session",
    "thread_id": "xyz789"
  }
}

このthread_idに紐づく過去の履歴は、MCPプロトコル内で自動的に管理されます。


📊 機能比較表

機能従来のチャットAPIMCP
履歴送信毎回全履歴初回のみ thread_id 登録
状態管理クライアント任せプロトコルで明示的に管理
応答構造textベース構造化(表/関数呼び出しなど)対応
マルチモーダル限定対応(画像など)拡張設計あり(画像・音声・コード)
ストリーミング応答限定サポート標準対応(partial response)

🧠 なぜ重要か?

  • 大規模エージェントやLLMアプリで状態を維持したまま連携できる
  • 複数モデル(画像認識 → テキスト → API呼び出し)を一貫したセッションで連携できる
  • **会話履歴の構造化・分岐処理(ワークフロー的)**な管理が可能に

第3章:MCPの実装例(Node.jsによる送信コードと応答解析)

この章では、実際にMCP形式のJSONデータをNode.jsからPOST送信し、AIモデルから構造化されたレスポンスを受け取るまでの流れを紹介します。


✅ 前提

  • Node.js 18以上
  • fetchが使用可能(またはnode-fetchを導入)
  • OpenAI MCP互換APIエンドポイントがある想定(例: https://api.example.com/mcp/chat

📦 必要なパッケージ

npm init -y
npm install node-fetch uuid

🧪 サンプルコード(mcp-client.js)

import fetch from 'node-fetch';
import { v4 as uuidv4 } from 'uuid';

const THREAD_ID = 'thread-xyz789';

const message = {
  id: uuidv4(),
  role: 'user',
  content: '2024年度の売上推移を教えて',
  context: {
    type: 'session',
    thread_id: THREAD_ID,
    references: []
  },
  metadata: {
    timestamp: Date.now()
  }
};

fetch('https://api.example.com/mcp/chat', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: JSON.stringify(message)
})
  .then(res => res.json())
  .then(data => {
    console.log('MCP応答内容:', JSON.stringify(data, null, 2));
  })
  .catch(err => {
    console.error('送信エラー:', err);
  });

🧾 期待される応答(例)

{
  "role": "assistant",
  "content": {
    "type": "table",
    "data": [
      ["月", "売上"],
      ["1月", "¥1,000,000"],
      ["2月", "¥1,200,000"]
    ]
  },
  "function_call": null,
  "completion": {
    "confidence": 0.95
  }
}

このように、通常のtext出力ではなく**構造化された出力(table型、JSON型など)**をそのまま受け取れるのがMCPの最大の魅力です。

第4章:構造化レスポンスのフロントエンド活用法

MCPが返す構造化レスポンスは、従来のような単なるテキストではなく、JSON形式の「意味を持つデータ」として取り扱うことができます。

この章では、MCPの応答データを使って実際のWebアプリケーションに組み込む方法と、応答のタイプごとのUI活用方法を紹介します。


✅ テーブル型レスポンスの描画(React例)

// テーブル型MCP応答のサンプル表示
export default function TableRenderer({ content }) {
  if (content?.type !== 'table') return null;

  return (
    <table className="border w-full mt-4">
      <tbody>
        {content.data.map((row, i) => (
          <tr key={i}>
            {row.map((cell, j) => (
              <td key={j} className="border p-2 text-sm">{cell}</td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  );
}

このように、構造化されたデータが「どう表示されるべきか」をコードで制御できるため、

  • テーブル
  • チャート
  • カードレイアウト など、視覚的に優れたUI展開が可能になります。

✅ function_call や type: “action” の応答をハンドリング

if (response.function_call) {
  const { name, arguments: args } = response.function_call;
  if (name === 'get_sales') {
    // 売上取得APIの引数としてargsを利用
    fetch(`/api/sales?year=${args.year}`)
      .then(res => res.json())
      .then(displayData);
  }
}

これはMCPのfunction_call構文を使って、AI側が「この処理をしてください」と指示してくるパターンです。

  • ユーザー → 「今年の売上は?」
  • モデル → function_call: { name: "get_sales", arguments: { year: 2024 } }
  • アプリ側 → APIを実行してレスポンスを処理

という形で、自然言語と処理の橋渡しが自動化されます。


🧠 応答タイプ別UIレンダリング戦略

typeUIの表示方法
textテキスト表示要約文
table表形式売上表、比較一覧
imageタグなどプレビューや生成画像
action / function_call処理実行 or ボタン表示「PDF出力」など

第5章:MCPの実務応用事例|AIエージェント・業務アプリ・マルチモーダル統合

MCPがもたらす構造化応答・状態管理・関数呼び出しの仕組みは、実際のビジネスユースやエージェント設計において非常に有効です。 この章では、MCPを用いた3つの応用事例を紹介します。


1. 📊 ダッシュボード生成エージェント

✨ シナリオ

営業担当が「今週の売上レポートを見せて」とチャットするだけで、MCP対応モデルがAPI呼び出し用function_callを生成。

⚙️ MCPフロー

  • user: “今週の売上レポートを見せて”
  • model (function_call): { name: “get_weekly_sales”, arguments: { week: “2024-W17” } }
  • クライアントでAPI実行 → table型レスポンスを構築し表示

✅ メリット

  • ノーコードでのデータ抽出と可視化
  • クエリ構築の自動化

2. 🧠 LLMエージェントにおけるセッション制御

✨ シナリオ

複数ステップを必要とする指示(例:「このPDFを要約して、その要約から質問を作って、PowerPoint資料を生成して」)を実行。

⚙️ MCPの活用

  • thread_idで状態を保ちつつ処理を分割
  • context.referencesにて各応答の参照関係を明示
  • 各function_callで適切なタスクに分配(OCR → NLP → GPT-vision)

✅ メリット

  • 分岐・多段階処理を安全にハンドリング
  • LLMアーキテクチャの構成を標準化

3. 🖼️ マルチモーダルアプリへの統合

✨ シナリオ

ユーザーが「この写真を要約して、そこに映ってる人の服装を分析して」と指示。

⚙️ MCPの応答

{
  "role": "assistant",
  "content": { "type": "image_caption", "data": "写真には3人の人物が写っており..." },
  "function_call": {
    "name": "analyze_clothing",
    "arguments": { "image_id": "img_3929" }
  }
}

✅ メリット

  • image type + function_call でマルチモーダル分析が一括実行可能
  • UIに適したレスポンス形式で返る

第6章:まとめと展望|MCPが描くAIインフラの未来

MCP(Model Context Protocol)は、AIとアプリケーションの関係性に構造と持続性をもたらす革新的な仕組みです。

従来のチャットAPIのように「1つのプロンプト → 単一の応答」というモデルではなく、複数のステップや役割を持つやりとりを自然に繋げるための共通言語として活躍するのがMCPです。


✅ MCPの重要ポイント 再整理

特徴価値
セッション単位の状態管理会話の文脈を保ち続けられる
構造化応答表・関数・画像などを分かりやすく処理可能
関数呼び出し統合エージェント的処理の自動化・連携
マルチモーダル拡張性音声/画像/コードなどの連携も将来的に可能

🚀 今後の展開予測

1. LLMエージェントフレームワークとの統合

LangChain、AutoGen、CrewAIなどとMCPの思想は親和性が高く、今後MCPベースでのエージェントが主流になる可能性も。

2. OpenAI+MCPの標準化普及

ChatGPTやAPIがMCP準拠になることで、アプリ開発者が「プロンプトを送る」から「セッションに指示を加える」スタイルに変化。

3. 企業内LLMの“状態管理プロトコル”として採用拡大

社内チャットボットやFAQ、問い合わせ自動化システムにおいて、MCPは業務ごとの履歴/状態トラッキングのインフラとなりうる。


🧠 開発者が今からできること

  • MCPを想定した設計パターンでアプリを構築(スレッド・メッセージ・構造化応答)
  • OpenAIやAnthropicの更新に合わせてレスポンス構造の扱いを柔軟に設計
  • フロントエンドでは「応答の型をUIに即座にマッピングする工夫」が重要に

🔚 最後に

MCPは、単なるAPIの新仕様ではなく、

「AIモデルとの関係をどう継続的かつ再利用可能にするか」

を問い直す、次世代の標準となる可能性を秘めています。

未来のAIサービスを設計するうえで、MCP的な考え方は必須になるでしょう。

📣 ぜひ、この記事をきっかけに自分のアプリでMCP的な構造設計を取り入れてみてください!

おまけ:MCPとExcelを連携させた次世代業務アプリケーション構築

MCPは構造化応答・状態維持・関数呼び出しといった強力な機能を持っており、Excelと連携することで、これまでにない業務アプリの可能性を広げることができます。


✅ Excelとの連携アイデア

1. Excelへのデータ出力(MCP → Office Script)

  • ユーザー:「今月の売上レポートをExcelに出力して」
  • MCP応答:
{
  "function_call": {
    "name": "generate_excel_report",
    "arguments": {
      "month": "2024-04",
      "data": [["日付", "売上"], ["4/1", "¥120,000"]]
    }
  }
}
  • バックエンド:Office Script APIを呼び出し、指定テンプレートにデータを書き込む

2. Excelマクロ(Office Script)からのMCP呼び出し

// Office ScriptからMCPエンドポイントへPOST
async function main(workbook: ExcelScript.Workbook) {
  const sheet = workbook.getActiveWorksheet();
  const prompt = sheet.getRange("A1").getValue();
  const response = await fetch("https://yourserver.com/mcp", {
    method: "POST",
    headers: {"Content-Type": "application/json"},
    body: JSON.stringify({
      role: "user",
      content: prompt,
      context: { type: "session", thread_id: "excel-01" }
    })
  });
  const json = await response.json();
  sheet.getRange("B1").setValue(JSON.stringify(json));
}

Excelマクロ(VBA)からのMCP呼び出し

VBAからAPIを呼び出してMCPと対話する場合、WinHttpとJSON解析ライブラリ(VBA-JSONなど)を使用します。

Sub CallMCP()
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    Dim jsonRequest As String
    jsonRequest = "{" & _
        """role"": """user""", " & _
        """content"": """今月の売上は?""", " & _
        """context"": {"""type"": """session""", """thread_id"": """excel-01"""}" & _
        "}"

    http.Open "POST", "https://yourserver.com/mcp", False
    http.setRequestHeader "Content-Type", "application/json"
    http.setRequestHeader "Authorization", "Bearer your_api_key"
    http.Send jsonRequest

    Dim jsonResponse As String
    jsonResponse = http.ResponseText

    ' JSON解析(VBA-JSONが必要)
    Dim parsed As Object
    Set parsed = JsonConverter.ParseJson(jsonResponse)

    ThisWorkbook.Sheets(1).Range("B1").Value = parsed("content")("data")(1)(2) ' 例: 売上金額を表示
End Sub

⚠️ 補足:VBAでJSONを扱うには「VBA-JSON」ライブラリ(https://github.com/VBA-tools/VBA-JSON)の導入が必要です。

📊 応用事例:MCP × Excelの業務活用

用途処理内容
財務レポート生成会話ベースで月次の収支表を作成し、Excelへ出力
マーケ分析支援KPIを自然言語で指示し、チャート付き報告書を生成
顧客データ要約CRMデータをMCPで分類・要約し、Excel形式で保存
業務自動化RPAExcelのセルに応じてMCPが処理→返信→Excelに結果反映

💡 技術構成例

  • MCP APIサーバー(Node.js/Expressなど)
  • Office Script/Graph APIを呼び出すミドルウェア
  • Excel Web/デスクトップで動くトリガー(ボタン or 時間指定)
  • Power AutomateやLogic Appsとの併用も効果的

🚀 展望:MCP × Excelが生む「言語駆動型オフィス」

今後、Excelはただの表計算ツールではなく、MCPのような高度なAIプロトコルと連携することで、

  • 「話しかけるだけでExcelが動く」
  • 「業務を指示すれば、レポート・分析・計画書まで出てくる」

という未来が現実になっていくでしょう。

特にMicrosoft 365のCopilot連携やOffice Script強化の流れと組み合わせることで、

Excel × MCP = 業務自動化の最前線

になることが期待されます。