✅ この記事でわかること
- 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プロトコル内で自動的に管理されます。
📊 機能比較表
機能 | 従来のチャットAPI | MCP |
---|---|---|
履歴送信 | 毎回全履歴 | 初回のみ 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レンダリング戦略
type | UIの表示方法 | 例 |
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形式で保存 |
業務自動化RPA | Excelのセルに応じて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 = 業務自動化の最前線
になることが期待されます。