https://modelcontextprotocol.io/docs/getting-started/intro

↑ こちらのドキュメントとチュートリアルを読んだ際の理解したことと躓いた部分をまとめる。

MCPの全体像

MCPホスト、MCPクライアント、MCPサーバーの概念を理解する。

  • MCPホスト

    • VS Code、Cursor、Claude for Desktopなどの実際にユーザーが使用するツールのことを指している。
    • LLM自体ではないことに注意!
  • MCPクライアント

    • MCPホスト内に存在するMCPサーバーとやり取りするコンポーネントを指す。
    • MCPのルールに則って通信を行う。
    • MCPサーバー1つに対し、MCPクライアントは1つ
  • MCPサーバー

    • MCPホストの外にあるサービス等(Googleカレンダー, GitHub, ローカルPCのファイルシステム)をいろいろ操作できる機能が備わったサーバー
    • MCPのルールに則って通信を行う。
    • ローカルMCPサーバーとリモートMCPサーバーがある。

全体像

MCPサーバーとクライアントのやりとり

MCPサーバーとクライアントのやりとり

MCPサーバー側の提供機能

  • Tools
    • LLMが実行できるアクションをクライアントに返す。
  • Resources
    • LLMが参照するデータをクライアントに返す。
    • Direct ResourcesとResource Templatesがある。
  • Prompts
    • 再利用可能なプロンプトテンプレートをクライアントに返す。
    • サーバー側があらかじめ使えそうなプロンプトを用意しておく。

MCPクライアント側の提供機能

  • Elicitation
    • サーバーがユーザーから特定の情報を要求できるようにするための機能
  • Roots
    • サーバーがアクセスできる範囲の境界を定義し、サーバーがどのディレクトリに重点を置くべきかを示す。
    • セキュリティ制限を強制するものではない点に注意!実際のセキュリティはオペレーティングシステムレベルで強制している
  • Sampling
    • MCPサーバーがクライアントのLLMを使って推論させる機能
    • 具体例を見たほうが分かりやすそう

チュートリアルで実際に躓いた部分(※ miseでuvを管理している人向け)

https://modelcontextprotocol.io/docs/develop/build-server

↑天気を調べるMCPサーバーを実装するチュートリアルで躓いたので記録しておく。

Claude Desktopに以下の記述を追加したが動かなかった。

"weather": {
      "command": "uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",
        "run",
        "weather.py"
      ]
    }

調べてみると、どうやらuvのフルパスを指定しないといけないとのことで以下のように修正した。

参考:【Could not connect to MCP server】ClaudeのMCPサーバ接続エラーを解決する

"weather": {
      "command": "/Users/username/.local/share/mise/shims/uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",
        "run",
        "weather.py"
      ]
    }

ただこれでも動かなかった。どうやらmiseを使ってuvを管理していると普通のwhichコマンドではuvのフルパスが得られないとのことだった。

以下のようにmise whichを使う必要がある。

❯ mise which uv
/Users/username/.local/share/mise/installs/uv/バージョン/uv-aarch64-apple-darwin/uv

得られたフルパスを記述するとClaude Desktopから天気を調べるMCPサーバーを使うことができた。

"weather": {
      "command": "/Users/username/.local/share/mise/installs/uv/バージョン/uv-aarch64-apple-darwin/uv",
      "args": [
        "--directory",
        "/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",
        "run",
        "weather.py"
      ]
    }

感想

いつかちゃんと調べようと思いつつ数ヶ月経過してしまった、、、。

まずはこの技術を利用して自分の作業効率を上げたいな。 もっと理解するためにも手が空いてるときにMCPサーバー実装したい。

参考