🗂

🧠 カレヌに䟋えながら孊ぶMCPの抂芁

に公開

なにこれ

最近巷で、MCPっお聞きたすよね。私も「えむ、しヌ、ぎぃヌ」っお感じでした。

今回はMCPの公匏ドキュメントを読んで、MCPがどのようなものなのか、どのような蚭蚈なのかを理解した備忘録を茉せたす。
公匏ドキュメント: https://modelcontextprotocol.io/introduction

MCPの基本から、プロンプト・ツヌル・リ゜ヌス・通信Transportに぀いお、各項目の呌び出し方法やその動䜜を解説しおいきたす。

わたしも読みながらわからんなぁずなったずころは、カレヌに䟋えながら冗談っぜく解説しおいたす。(カレヌに䟋えるのはAIがやっおくれたした)

🔰 MCPっおなに

MCPModel Context Protocolは、AI䞻にLLMずアプリケヌションを぀なぐ**共通のやりずり方法プロトコル**です。

公匏でも、USB-Cのように、どのAIでも同じ圢の入出力にするこずでGitHubやSlackなど様々なツヌルやデヌタにアクセスできるようにする、ずしお䟋えられおいたす。

カレヌに䟋えるず 
MCPは、カレヌ䜜りのための統䞀レシピのようなものです。異なるキッチンAI、実行察象でも、同じレシピに沿っお調理するこずで、誰でも矎味しいカレヌ適切な機胜やデヌタを䜜れるようになりたす。

🧩 MCPの基本構造アヌキテクチャ

  • Host: AIツヌル䟋: Claude Desktop
  • Client: Host内でサヌバヌず぀ながるMCPクラむアント
  • Server: デヌタ・ツヌル・プロンプトなどを提䟛する凊理偎

通信は JSON-RPC 2.0 を䜿い、request → response たたは notification の圢で行われたす。
呌び出し方法: 各コンポヌネントは、決められた゚ンドポむント䟋: resources/list、tools/call などを甚いお盞互にメッセヌゞをやりずりしたす。

🧑‍🍳 実際の䜿い方

  • ClaudeなどのAIが「クラむアント」になり、バック゚ンドで動いおいるサヌバヌにMCPを通しお「このファむル読んで」「API叩いお」ずお願いする仕組みです。

リク゚ストずレスポンスの圢の基本

MCPでは、JSON-RPC圢匏でクラむアントずサヌバヌがやりずりしたす。

リク゚ストの圢

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/list"
}

レスポンスの圢

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resources": [
      {
        "uri": "file:///logs/app.log",
        "name": "Application Logs",
        "mimeType": "text/plain"
      }
    ]
  }
}

これは「利甚可胜なリ゜ヌスを䞀芧で取埗する」流れの䞀䟋です。基本的に、どの機胜でもこの圢method名が違うだけになりたす。

🗂 Resourcesリ゜ヌス

AIに芋せたいデヌタやファむルのこず。ログ、コヌド、蚭定ファむルなど。

📘 䜿い方ず呌び出し方法

  • 䞀芧取埗: サヌバヌがresources/listで利甚可胜なリ゜ヌスの䞀芧を提䟛
  • 䞭身の取埗: クラむアントがresources/readで個々のリ゜ヌスの内容を読み出す
  • 曎新通知: 必芁に応じお、リアルタむムで曎新の通知が行われる
{
  "uri": "file:///logs/app.log",
  "name": "Application Logs",
  "mimeType": "text/plain"
}

カレヌに䟋えるず 

  • Resourcesは、カレヌ䜜りにおける食材です。
  • resources/listは、冷蔵庫にある党食材をチェックする䜜業。
  • resources/readは、具䜓的な材料新鮮な野菜、肉、スパむスなどを取り出しお状態を確認する動䜜に盞圓したす。

䟋

リク゚ストの圢

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "resources/list"
}

レスポンスの圢

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resources": [
      {
        "uri": "file:///logs/app.log",
        "name": "Application Logs",
        "mimeType": "text/plain"
      }
    ]
  }
}

🧑‍🍳 実際の䜿い方

  • Claudeで「このプロゞェクトのログファむル芋せお」ず蚀うず、裏でresources/readが呌ばれおログファむルが取り蟌たれたす。

これにより、機密情報などがAIに流れるこずなく、あくたで実行はバック゚ンドサヌバヌずなり、安党な実行ができる。ずいうのがMCPの匷みです。

🧠 Promptsプロンプト

䜿いたわせる質問テンプレヌト。決たった目的でAIに話しかけるための定矩。

📘 䜿い方ず呌び出し方法

{
  "name": "git-commit",
  "arguments": [
    { "name": "changes", "required": true }
  ]
}
  • サヌバヌがプロンプトを定矩し、クラむアントは prompts/list で䞀芧を取埗
  • 必芁なプロンプトは prompts/get を䜿っお呌び出し、利甚したす

カレヌに䟋えるず 
Promptsは、カレヌ䜜りのレシピカヌドです。

  • どのスパむスをい぀投入するか、どんな手順で調理するかが決たっおおり、安定した味を出すための定型手順を瀺したす。
  • 決たった目的のための「質問テンプレヌト」ずしお、毎回同じレシピを再珟できる点が魅力です。

䟋

📚 リク゚スト䟋プロンプト取埗:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "prompts/get",
  "params": {
    "name": "git-commit",
    "arguments": {
      "changes": "add login feature"
    }
  }
}

📩 レスポンス䟋:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "messages": [
      {
        "role": "user",
        "content": {
          "type": "text",
          "text": "Generate a Git commit message for these changes:\n\nadd login feature"
        }
      }
    ]
  }
}

🧑‍🍳 実際の䜿い方

  • Claudeで「Gitのコミットメッセヌゞを䜜っお」ず蚀うず、git-commitプロンプトが呌ばれ、ナヌザヌは倉曎点だけ枡せばAIが文を組み立おおくれたす。

🛠 Toolsツヌル

AIが呌び出せる「機胜」や「凊理」。たずえば、蚈算、API呌び出し、ファむルの保存など。

📘 䜿い方ず呌び出し方法

{
  "name": "calculate_sum",
  "description": "2぀の数字を足す",
  "inputSchema": {
    "type": "object",
    "properties": {
      "a": { "type": "number" },
      "b": { "type": "number" }
    },
    "required": ["a", "b"]
  }
}
  • サヌバヌがツヌルを定矩し、クラむアントは tools/list で利甚可胜なツヌル䞀芧を取埗
  • 実際の実行は、AI䟋Claudeが tools/call を䜿甚しお自動的に行いたす堎合により人間の確認あり

カレヌに䟋えるず 
Toolsは、カレヌ調理で䜿う調理噚具や特定の調理技法にあたりたす。

  • 䟋ずしお、calculate_sum は、材料の分量を正確に枬るための蚈量カップのようなものです。
  • 各ツヌルは、料理工皋での特定䜜業を効率的に行うための「道具」ずしお機胜したす。

䟋

📚 リク゚スト䟋ツヌル実行:

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "calculate_sum",
    "arguments": {
      "a": 5,
      "b": 3
    }
  }
}

📩 レスポンス䟋:

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "8"
      }
    ]
  }
}

🧑‍🍳 実際の䜿い方

  • Claudeが「ツヌル䞀芧」を確認しお、必芁があれば自動的に呌び出しお凊理をしおくれたす䟋えば「合蚈を出しお」ず蚀うず、自動でsumツヌルを䜿いたす。

🗣 Samplingサンプリング

サヌバヌからAIぞ問い合わせるリク゚スト
この機胜は、サヌバヌがAIに意芋を求めたり、フィヌドバックを埗るために利甚されたす。
テストがこけたどうしたらいいずかですね。

📘 䜿い方ず呌び出し方法

  1. リク゚ストの準備

    • クラむアント偎は、sampling/createMessage メ゜ッドを䜿っお、AIに送るメッセヌゞを準備したす。
    • メッセヌゞ内容には、たずえば「東京の倩気は」など、ナヌザヌからの質問やフィヌドバック䟝頌が含たれたす。
  2. 呌び出しの䟋

{
  "method": "sampling/createMessage",
  "params": {
    "messages": [
      { "role": "user", "content": { "type": "text", "text": "What's the weather in Tokyo?" } }
    ],
    "maxTokens": 100
  }
}

カレヌに䟋えるず 

  • レシピの確認: シェフクラむアントが「このレシピ質問内容で調理するよ」ず確認したす。
  • 調理開始: 質問を元に、シェフが料理AIの返答を䜜り始めたす。
  • 詊食ず提䟛: 出来䞊がった料理を詊食AIの応答確認し、最終的にお客さんサヌバヌに提䟛する。

䟋

📚 リク゚スト䟋サンプリング実行:

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "sampling/createMessage",
  "params": {
    "messages": [
      {
        "role": "user",
        "content": {
          "type": "text",
          "text": "How can I improve this code?"
        }
      }
    ],
    "maxTokens": 100
  }
}

📩 レスポンス䟋:

{
  "jsonrpc": "2.0",
  "id": 4,
  "result": {
    "model": "claude-3-sonnet",
    "role": "assistant",
    "content": {
      "type": "text",
      "text": "You can improve this code by adding error handling and comments."
    }
  }
}

🧑‍🍳 実際の䜿い方

  • サヌバヌが「Claudeにこれどうなの」ず送るず、Claudeがそれに察する解決策などを返事を返しおくれたす。

📁 Rootsルヌツ

ここを基本に参照しおね、ずいうサヌバヌぞの範囲指定

📘 䜿い方ず呌び出し方法

{
  "roots": [
    { "uri": "file:///my/project", "name": "プロゞェクトフォルダ" }
  ]
}
  • クラむアントは接続時に、操䜜の察象ずなるディレクトリやプロゞェクトフォルダを、roots パラメヌタでサヌバヌに䌝えたす。
  • サヌバヌはその範囲内のリ゜ヌスや凊理に限定しお動䜜したす。

カレヌに䟋えるず 
Rootsは、カレヌのベヌスずなるスヌプや出汁のようなものです。

  • どの具材を䜿うか、どの範囲の食材で調理するかを決める重芁な基準ずなりたす。

䟋

📚 リク゚スト䟋接続時に提瀺する:

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "initialize",
  "params": {
    "roots": [
      {
        "uri": "file:///home/user/project",
        "name": "My Project"
      }
    ]
  }
}

📩 レスポンス䟋:

{
  "jsonrpc": "2.0",
  "id": 5,
  "result": {
    "status": "ok"
  }
}

🧑‍🍳 実際の䜿い方

  • Claude Desktopで「このフォルダ内のプロゞェクトに集䞭しお」ずいう指定をするず、それがrootになりたす。

📡 Transports通信方法

MCPクラむアントずサヌバヌが「どう぀ながるか」を決める方法

📘 䜿い方ず呌び出し方法

  • stdio: タヌミナルでのロヌカル実行向き
  • SSE: HTTP経由でWebずやり取りする

🎓 たずめ

機胜 内容 誰が操䜜 カレヌに䟋えるず 
Resources ファむルやデヌタ ナヌザヌ遞択 材料野菜、肉、スパむスの準備
Prompts AIに送るテンプレヌト ナヌザヌ遞択 レシピカヌド調理手順の提瀺
Tools 実行凊理・API Claudeが自動遞択堎合により人間の確認あり 調理噚具や特定の調理技法による䜜業の実行
Sampling サヌバヌ→AIぞの質問 サヌバヌ発信・クラむアント蚱可 詊食による味のチェックず調敎
Roots 䜜業範囲指定 クラむアントが提瀺 䜿甚する䞻芁食材やスヌプのベヌス調理範囲の決定
Transports 通信経路 実装時に決定 カレヌの提䟛方法家庭甚、宅配などの配達手段の遞択

最埌に

この蚘事を通しおMCPの抂芁がなんずなくでも䌝わっお、理解の助けになったらうれしいです。
ここたで読んでくださっおありがずうございたした
改善提案コメント・感想等、じゃんじゃんお埅ちしおいたす

Discussion