第65回:Model Context Protocol(MCP)入門と深掘り ― 現状・対応状況・技術・実装まで

公開日:2026-02-27|キーワード:MCP / Tools / Resources / Prompts / JSON-RPC / Streamable HTTP / Tasks / Authorization
MCP(Model Context Protocol)の全体像(概念図)
要点だけ先に:
MCPは、LLM(大規模言語モデル)を組み込んだアプリが 外部ツール外部データ再利用可能プロンプトへ、 安全かつ一貫した方法で接続するためのオープンなプロトコルです。
これまで “作り込み” になりがちだったツール連携を、共通の線材(wire format)・スキーマ・ライフサイクル・転送方式・認証で標準化し、 N×Mの接続問題を N+M へ近づけることを狙います。

インデックス

  1. まずMCPを一言で
  2. MCPの登場人物(Host / Client / Server)
  3. MCPでつながる3つの単位(Tools / Resources / Prompts)
  4. 主要LLMベンダーの対応状況(俯瞰)
  5. MCPの歴史:関連プロトコルと年表
  6. 技術をやさしく分解(JSON-RPC / JSON Schema / ストリーミング / Tasks)
  7. 最小実装:Python / TypeScript
  8. APIからリモートMCP:OpenAI / Google
  9. 設計・移行の実務アドバイス(コスト/安全性/互換性)
  10. つまずきポイントとトラブルシューティング
  11. 一次資料(読む順)

1. まずMCPを一言で

MCP(Model Context Protocol)は、LLMアプリが外部の“現実”(ツール・データ・テンプレ)と対話するための標準化です。 重要なのは、「モデルがMCPをネイティブ対応する」ことではなく、
(1)MCPサーバ(提供側)(2)MCPクライアント(接続層) が揃って初めて成立する、という点です。

初心者向け補足:
「ChatGPTに社内DBを検索させる」「AIにメール送信させる」などは、モデル単体では実行できません。
そこで “ツール呼び出し” が必要になりますが、各社・各製品がバラバラに実装すると運用が破綻します。
MCPは、ここを 標準の接続規格 として揃えるイメージです。

2. MCPの登場人物(Host / Client / Server)

MCPの典型構成は次の3層です。

MCPの典型シーケンス(概念図)
初心者向け補足:
「クライアント」は“あなたのアプリ側の接続部品”です。APIがクライアントを内蔵する場合もあれば、IDE(VS Codeやデスクトップアプリ)が担う場合もあります。
「サーバ」は“ツールやデータを提供する側”です。社内ツールでも、公開APIでもOKです。

3. MCPでつながる3つの単位(Tools / Resources / Prompts)

3-1. Tools(ツール)

モデルが呼び出して実行結果を得る「関数/API」的なものです。入力・出力は JSON Schema で定義でき、結果は複数コンテンツを返せます。

3-2. Resources(リソース)

ファイル/ドキュメント/データなどの参照対象です。URI、mimeType、annotations などのメタデータが中心になります。

3-3. Prompts(プロンプト)

再利用可能なプロンプト(テンプレート)をサーバ側が公開し、クライアントが利用できる仕組みです。

MCP設計の重要点は、モデル選択や権限、そして“人間の承認(Human-in-the-loop)”のUXをクライアント側が握ることです。
「ツールを勝手に実行する」ではなく、「拒否できる」設計が前提に置かれています。

4. 主要LLMベンダーの対応状況(俯瞰)

ここでは「誰がMCPクライアントを持つか」と「どのtransport/認証に通せるか」で整理します。

ベンダー 対応レベル(俯瞰) どこでMCPを扱えるか(例) 注意点(例)
OpenAI 高い Responses API の tools で type:"mcp" リモートMCPは Streamable HTTP / HTTP(SSE) 前提。allowed_tools / require_approval が鍵。
Anthropic 高い Claude Desktop でローカルMCP(stdio)設定 設定変更後の再起動が必要。拡張配布/許可(Team/Enterprise)など運用面の制約。
Google 高い Gemini Interactions API で Remote MCP を tool として指定 URL・認証方式・提供ツールはサーバ実装に依存。
Microsoft 高い VS Code / Foundry / Semantic Kernel などで統合ガイド 信頼できるサーバのみ追加、allow-list推奨、承認必須などを強調。
Mistral 中〜高 Python SDKでMCPクライアント統合例 依存ライブラリ整合と非同期前提の設計が必要。
Meta 限定的(要一次資料確認) 開発者ツール側に“専用MCPサーバ”を組み込む説明が中心 モデルAPIがMCPクライアント内蔵かは一次資料で断言しづらい。ブリッジ設計が現実的。

5. MCPの歴史:関連プロトコルと年表

MCPは突然現れたというより、JSON-RPCやLSPなど「クライアント/サーバ標準化」の流れを継ぐ“エージェント時代の接続規格”として読むと理解しやすいです。

時期出来事MCPとの関係
2010年前後JSON-RPC 2.0が確立MCPメッセージの符号化の土台
2016年前後LSPがJSON-RPCベースで標準化“クライアント/サーバ分離”がMCPと類似
2023-03-23ChatGPT plugins発表LLMと外部サービス接続が一般化
2023-06OpenAI function calling発表自然言語→構造化引数→関数実行が普及
2024-11-05MCP初版公開stdio と HTTP+SSE が主要transport
2025-03-26Streamable HTTP導入リモートMCP運用を現実的に
2025-11-25Tasks(実験的)導入長時間/非同期処理を語彙として取り込み
2025-12-09Linux Foundation傘下へ寄贈中立運営(vendor-neutral)を制度面で補強

6. 技術をやさしく分解(JSON-RPC / JSON Schema / ストリーミング / Tasks)

6-1. MCPメッセージはJSON-RPC 2.0

MCPのメッセージは JSON-RPC 2.0 形式でやり取りされます。ざっくり言うと、「JSONでRPC(遠隔呼び出し)をする約束事」です。

初心者向け補足:
「HTTPのURLを叩く」だけがAPIではありません。JSON-RPCは「method名」と「params」で呼び出しを表現し、応答にも「id」を付けて対応させます。
MCPはこの形式を厳密に使うので、クライアント/サーバ実装が揃いやすい、という利点があります。

6-2. ツール入出力はJSON Schema(方言:2020-12)

ツールの引数や戻り値を JSON Schema で定義し、曖昧な文字列より 確実な構造化結果(structuredContent) を増やす設計が推奨されています。

6-3. Streamable HTTP と stdio の違い

項目stdio(ローカル)Streamable HTTP(リモート)
用途IDE/デスクトップがサブプロセス起動複数端末・API共有
通信標準入出力(改行区切り)HTTP + SSE(text/event-stream)など
壊れやすさstdoutログ混入で破綻しやすい運用は楽だがセキュリティ要件が重い
重要な要件メッセージ自体に改行を含めない等Origin検証(DNS rebinding対策)必須級

6-4. Tasks(実験的):長時間処理を扱う語彙

2025-11-25 で導入された Tasks は、長時間処理・並列処理・結果の後追い取得(polling)を扱う方向性を示します。

Tasks(長時間処理)の概念図

7. 最小実装:Python / TypeScript

7-1. Python:FastMCPでローカルMCPサーバ(stdio)

# demo_server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("demo")

@mcp.tool()
async def add(a: int, b: int) -> str:
    """2つの整数を足して結果を返します。"""
    return str(a + b)

def main():
    # stdioで起動(クライアントがサブプロセスとして起動する想定)
    mcp.run(transport="stdio")

if __name__ == "__main__":
    main()
初心者向け補足:
stdioモードは「このPythonを直接実行して使う」より、クライアント(IDE等)がサブプロセスとして起動して会話するのが基本です。
そのため、printやログを stdout に出すとプロトコルが壊れます(後述)。

7-2. TypeScript:公式SDKでツール登録(stdio)

// demo_server.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "demo", version: "1.0.0" });

server.registerTool(
  "add",
  {
    description: "Add two integers",
    inputSchema: {
      a: z.number().int(),
      b: z.number().int(),
    },
  },
  async ({ a, b }) => {
    return {
      content: [{ type: "text", text: String(a + b) }],
    };
  },
);

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("demo MCP server running (stdio)");
}

main().catch((e) => {
  console.error(e);
  process.exit(1);
});

8. APIからリモートMCP:OpenAI / Google

8-1. OpenAI:Responses APIからリモートMCPサーバを呼ぶ

import OpenAI from "openai";

const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

const resp = await client.responses.create({
  model: "gpt-5",
  input: "Roll 2d4+1",
  tools: [
    {
      type: "mcp",
      server_label: "dmcp",
      server_url: "https://dmcp-server.deno.dev/sse",
      require_approval: "never",
    },
  ],
});

console.log(resp.output_text);
注意: ツール数が多いとコスト/レイテンシが増え得るため、allow-list(allowed_tools)等で絞り込む設計が重要です。

8-2. Google:Gemini Interactions APIでリモートMCPサーバをツール指定

from google import genai

client = genai.Client()

mcp_server = {
  "type": "mcp_server",
  "name": "weather_service",
  "url": "https://gemini-api-demos.uc.r.appspot.com/mcp",
}

interaction = client.interactions.create(
  model="gemini-2.5-flash",
  input="What is the weather like in New York today?",
  tools=[mcp_server],
)

print(interaction.outputs[-1].text)

9. 設計・移行の実務アドバイス(コスト/安全性/互換性)

9-1. ツール設計:長期互換を前提にする

9-2. コンテキストとコスト:ツール定義もトークンを食う

9-3. 安全性(最重要):Origin検証と承認UX

10. つまずきポイントとトラブルシューティング

10-1. stdioで壊れやすいポイント:stdoutにログを書かない

stdioでは stdout が JSON-RPC メッセージの通り道です。
console.log / print が混じると破綻します。ログは stderr へ出すのが安全です。

10-2. Claude Desktopで設定変更が反映されない

設定ファイル編集後、完全終了して再起動が必要なケースがあります。

10-3. パス指定ミス(特にWindows)

絶対パスやエスケープに注意してください。

11. 一次資料(読む順)

まとめ:
MCPは、「AIが文章を書く世界」から「AIが業務を実行する世界」へ進むための接続標準です。

これまでのAI活用は、RAGを中心とした“読むAI”が主流でした。 しかしこれからは、既存の業務システムをMCPでラップし、 AIが直接“実行できる”環境を整備することが競争力になります。

現実の企業システムは、単一の最新技術で作られているわけではありません。 Java、.NET、PHP、Python、C/C++、レガシーなオンプレミス基盤、独自仕様のAPI── 長年の積み重ねによって構成されています。

だからこそ重要なのは、「最新のAI技術に詳しい会社」ではなく、 さまざまな技術スタックを理解し、既存資産を分析し、 安全性・権限制御・スキーマ設計まで含めて再構成できる経験値のある開発会社を選ぶことです。

ビットオンは、レガシーから最新クラウド基盤まで幅広い技術領域で培った実装経験をもとに、 既存システムを活かしたままAIと接続するMCPラッピング基盤を設計・提供しています。

システムを作り直すのではなく、進化させる。 AIを“外付け機能”にしない設計こそが、これからの企業競争力になります。
← ブログ一覧へ戻る