📚

MCP入門ガイド:Transport方式とデータフロー

に公開

最近、MCPのカスタム開発についてちゃんと勉強したいなーと思っていたので、書籍なんかを見つつ、AIエージェントと相談しながら「MCPの基礎、データがどういう流れで処理されのか」というふわっとしていた部分の疑問点を整理してみました。

公式サイトなどを参照させながらAIエージェントと相談してファクトチェックもしたので基本的にあっていると思いますが、もし「そこちょっと違うよ」ってところがあった場合、コメントいただけると幸いです。

なお、本記事の内容を解説した動画もM365-Copilotで自動生成しましたので、以下もご覧ください。
※最近、Copilotの機能進化もかなりすごいんですよね。

https://youtu.be/rOlQ3K0eTVs

はじめに

Model Context Protocol(MCP)は、AI エージェントツールと外部データソースを連携させる強力な仕組みです。しかし、MCPを使う上で絶対に理解しておくべき重要なポイントがあります。

「stdio方式ならローカル処理だから安全」という誤解が広まっていますが、これは正しくありません。本記事では、MCPのTransport方式とデータフローの詳細を詳しく解説します。

MCPの基本構成

MCPシステムは3つのコンポーネントで構成されています。

① MCPホスト(AIエージェントツール)

Claude Code、Cline、Cursor等のツールがこれにあたります。LLMと連携してMCPサーバーを呼び出す役割を担います。

② MCPサーバー

ファイル変換、DB検索、外部サービス連携など、特定の機能を提供するコンポーネントです。

③ LLMプロバイダー

Anthropic(Claude)、OpenAI(GPT)、Google(Gemini)等のLLMサービスです。

主要なAIエージェントツール

ツール 選択可能なLLM 説明
Claude Code Anthropic Claude専用 Anthropic公式CLI
Cline OpenAI, Anthropic, Google, AWS等 VS Code拡張機能
Cursor OpenAI, Anthropic, Google等 AIコーディングエディタ
Gemini CLI Google Gemini専用 Google公式CLI

2つのTransport方式

MCPには2つのTransport方式があります。それぞれの特徴を理解することが重要です。

比較表

項目 stdio HTTP
通信方法 標準入出力 HTTPプロトコル
実行場所 ローカル(子プロセス) ローカル or リモート
設定の難易度 簡単 やや複雑
複数クライアント 不可(1対1) 可能(1対多)
主な用途 ローカルツール リモートサービス連携

stdio方式:1台のPC内で完結

あなたのPC
├── MCPホスト
│   ↕ stdin/stdout
└── MCPサーバー(子プロセス)

✅ メリット

  • シンプルな設定
  • ローカル処理で高速
  • セキュアな通信

❌ 制限

  • 1対1通信のみ
  • 同一PC内限定

HTTP方式:リモート接続が可能

PC 1          PC 2
MCPホスト     MCPホスト
   ↓   HTTP    ↓
      ↓
  MCPサーバー
(localhost/remote)

✅ メリット

  • 複数クライアント対応
  • リモート接続可能
  • スケーラブル

⚠️ 注意点

  • 設定がやや複雑
  • 認証・セキュリティ必要

どちらの方式を選ぶ?

stdio方式が適した用途:

  • ローカルファイル処理
  • PDF変換
  • DB検索
  • プライベートデータ処理

HTTP方式が適した用途:

  • 外部サービス連携(Notion、GitHub、Slack)

基本的には、ローカル処理ならstdio、外部サービス連携ならHTTPと覚えておけば大丈夫です。

npxとuvxの違い

MCPサーバーを実行する際に、npxまたはuvxというコマンドを使います。

比較表

項目 npx uvx
対応言語 JavaScript/TypeScript Python
配布元 npm registry PyPI
役割 パッケージを一時実行 パッケージを一時実行
速度 標準 10倍高速

動作の流れ

初回実行時

  1. コードをダウンロード

    • npm/PyPI からパッケージ取得
    • ⚠️ コードのみ(データは送信されない)
  2. ローカルにキャッシュ

    • npx: ~/.npm/_npx/
    • uvx: ~/.cache/uv/
  3. 実行

2回目以降

キャッシュから即座に実行

  • ダウンロード不要
  • オフライン動作可能

使い分け

MCPサーバーの実装言語で決まります。

  • npx: JavaScript/TypeScript製(例:@modelcontextprotocol/server-filesystem
  • uvx: Python製(例:markitdown-mcp)⚡ 10倍高速

データフローの真実

ここからが本記事の核心部分です。

stdio方式の真実

完全なデータフロー(stdio方式)

ステップ1〜4:LLMがMCPサーバーの使用を判断

STEP 1: あなたの入力
「このPDFをMarkdownに変換して」
    ↓
STEP 2: MCPホスト(Claude Code等)
- ローカルで動作
    ↓ LLM API(インターネット経由)
STEP 3: ⚠️ LLMプロバイダー(Anthropic等)
- 入力を解析し「MCPサーバーを使え」と判断
    ↓ 指示を返す
STEP 4: MCPホスト
- MCPサーバーを起動

この時点で、すでにあなたの入力はLLMプロバイダーに送信されています

ステップ5〜8:処理結果がLLMに送信される

STEP 5: ✅ MCPサーバー(ローカル)
- PDFを読み取り、Markdownに変換
- ※この段階では外部送信なし
    ↓ 処理結果を返す
STEP 6: MCPホスト
- 結果を受け取る
    ↓ LLM API(処理結果を含む)
STEP 7: ⚠️ LLMプロバイダー
- 変換されたMarkdownテキストを受信
- 解析して応答を生成
    ↓
STEP 8: あなたに結果表示

📊 データ送信先

  • ✅ MCPサーバー(ローカルのみ)
  • ⚠️ LLMプロバイダー(入力 + 処理結果)

HTTP方式(リモート)の真実

リモートサービスを使う場合は、さらに注意が必要です。

STEP 1: あなたの入力
「Notionにページを作成して」
    ↓
STEP 2-3: ⚠️ LLMプロバイダー
- 「Notion MCPを使え」と判断
    ↓ HTTPS(インターネット経由)
STEP 4-5: ⚠️ Notion社のMCPサーバー
- リクエストを受信、Notionデータベースに保存
    ↓ 結果を返す
STEP 6-7: ⚠️ LLMプロバイダー
- Notionの処理結果を受信

📊 データ送信先

⚠️ Notion社 + LLMプロバイダー = 2社に送信

具体例で理解する

例1:PDFをMarkdownに変換(stdio + uvx方式)

コマンド

$ claude mcp add --transport stdio markitdown --scope user uvx markitdown-mcp

何が送信されるか?

データ MCPサーバー LLMプロバイダー
元PDFファイル(バイナリ) ✅ 読み取り ❌ 送信されない
変換後のMarkdownテキスト ✅ 生成 ⚠️ 送信される

データの流れ

あなたのPC:
  secret.pdf(機密文書)
      ↓
  MCPサーバー(markitdown)
  - ローカルでPDFを読み取り
  - Markdownに変換
  - 結果:「# 機密情報\n詳細な内容...」
      ↓
  Claude Code
      ↓ Anthropic API
Anthropic社:
  ⚠️ 「# 機密情報\n詳細な内容...」を受信

📊 送信先

1社(Anthropic社など、使用するLLMプロバイダー)

例2:NotionにTODOを作成(HTTP + リモート方式)

コマンド

$ claude mcp add --transport http notion --scope user https://mcp.notion.com/mcp

何が送信されるか?

データ Notion社 LLMプロバイダー
TODO内容 ⚠️ 送信 ⚠️ 送信
作成されたページ情報 ⚠️ 保存 ⚠️ 送信

データの流れ

あなたの入力:
  「明日の会議準備をTODOに追加」
      ↓
  Claude Code
      ├→ Notion API
      │  ⚠️ 「明日の会議準備」を送信
      │  ⚠️ Notionデータベースに保存
      │
      └→ Anthropic API
         ⚠️ 「明日の会議準備」を送信
         ⚠️ Notion処理結果を送信

📊 送信先

2社(Notion社 + Anthropic社など、使用するLLMプロバイダー)

データ送信先まとめ

Transport方式別の送信先

方式 MCPサーバー LLMプロバイダー 合計
stdio なし(ローカル) 送信される ⚠️ 1社
HTTP (localhost) なし(ローカル) 送信される ⚠️ 1社
HTTP (remote) 送信される ⚠️ 送信される ⚠️ 2社

🔑 重要: stdio/HTTP localhostは1社、HTTP remoteは2社にデータが送信されます

AIエージェントツール別の送信先

ツール 選択可能なLLM データ送信先
Claude Code Anthropic Claude専用 Anthropic社 ⚠️
Cline OpenAI, Anthropic, Google等 選択したプロバイダー ⚠️
Cursor OpenAI, Anthropic, Google等 選択したプロバイダー ⚠️
Gemini CLI Google Gemini専用 Google社 ⚠️

⚠️ すべてのツールで、選択したLLMプロバイダーにデータが送信されます

LLMプロバイダーが受信するデータ

実際にLLMプロバイダーに送信されるデータの形式を見てみましょう。

{
  "messages": [
    {
      "role": "user",
      "content": "このPDFをMarkdownに変換して"
    },
    {
      "role": "tool_result",
      "content": "# 変換されたMarkdownの全文\n..."
    }
  ]
}

⚠️ MCP処理結果がすべて含まれます

あなたの入力だけでなく、MCPサーバーが生成したすべての結果データがLLMに送信されることを理解しておく必要があります。

重要ポイントまとめ

1. MCPサーバー自体はローカル処理

stdio方式でもHTTP(localhost)方式でも、MCPサーバー自体はローカルで動作します。

2. 処理結果は必ずLLMプロバイダーへ

AIエージェントツールを使う限り、MCPの処理結果はLLMプロバイダーに送信されます。

3. HTTP(リモート)方式は2社に送信

Notion、GitHub、Slackなどのリモートサービスを使う場合、そのサービス提供者とLLMプロバイダーの両方にデータが送信されます。

まとめ

MCPは非常に便利な技術ですが、データの流れを正しく理解し、適切に使用することが重要です。

機密情報を扱う際の推奨対応

  1. ローカルLLMの使用

    • Ollama等を使用してローカルでLLMを実行
  2. 従来のツールの利用

    • MCPを経由せず、直接コマンドラインツールを使用
  3. データの事前確認

    • LLMに送信される内容を意識的に確認

MCPの仕組みを正しく理解し、安全に活用していきましょう!

参考資料

Accenture Japan (有志)

Discussion