Open26

Model Context Protocol を理解する

TKTK

今更ながら Anthropic の Model Context Protocol を理解したい。
https://www.anthropic.com/news/model-context-protocol

TKTK

Model Context Protocol (MCP)は、Anthropicが提案するAIツールとデータソース(例:Google DriveやSlack)を安全かつ効率的に接続するためのオープン標準です。単一のプロトコルで統合を簡素化し、AIの応答を改善します。SDKやコネクタが提供されており、ローカルやリモートでの展開も可能です。

TKTK

主要なコンポーネントは下記。

  • モデルコンテキストプロトコル仕様とSDK
  • Claude デスクトップ アプリでのローカル MCP サーバーのサポート
  • MCP サーバーのオープンソースリポジトリ
TKTK
TKTK

アーキテクチャは下記。クライアントとサーバとデータがある

TKTK

サーバが間に入って、プロトコルを通じて共通言語でやり取りできるということかな

TKTK

現状ローカルのデータソースがメインで、サブとして Web API になるのかも

TKTK
  • MCP ホスト: Claude Desktop、IDE、または MCP を介してデータにアクセスする AI ツールなどのプログラム
  • MCP クライアント: サーバーとの 1:1 接続を維持するプロトコル クライアント
  • MCP サーバー: 標準化されたモデル コンテキスト プロトコルを通じて特定の機能を公開する軽量プログラム
  • ローカル データ ソース: MCP サーバーが安全にアクセスできるコンピューターのファイル、データベース、サービス
  • リモートサービス: MCP サーバーが接続できるインターネット経由 (API 経由など) で利用可能な外部システム
TKTK

ホストとクライアントの違いがよくわからんがとりあえず読み進める

TKTK

クイックスタートがあるが、よく作るのはサーバな気がするのでサーバを作ってみる

TKTK

サーバー開発者向けクイックスタート
https://modelcontextprotocol.io/quickstart/server

TKTK

このチュートリアルでは、シンプルな MCP 天気予報サーバーを構築し、ホストである Claude for Desktop に接続します。まずは基本的なセットアップから始めて、より複雑なユースケースに進みます。

Function Calling とは何が違うんだろ

TKTK

get-alertsと の2 つのツールを公開するサーバーを構築しますget-forecast。次に、サーバーを MCP ホスト (この場合は Claude for Desktop) に接続します。

ツールを公開するイメージなのか

TKTK

サーバーはどのクライアントにも接続できます。ここではシンプルさのために Claude for Desktop を選択しましたが、独自のクライアントを構築するためのガイドや、他のクライアントのリストもこちらにあります。

クライアントは作れるっぽい

TKTK

サーバーはローカルで実行されるため、MCP は現在デスクトップ ホストのみをサポートしています。リモート ホストは現在開発中です。

なるほど

TKTK

MCP サーバーは、主に次の 3 種類の機能を提供できます。

  • リソース: クライアントが読み取ることができるファイルのようなデータ (API レスポンスやファイルの内容など)
  • ツール: LLM から呼び出せる関数 (ユーザーの承認が必要)
  • プロンプト: ユーザーが特定のタスクを達成するのに役立つ、事前に作成されたテンプレート

このチュートリアルではツールに焦点を当てる。Function Calling はツールを LLM の API に与えて使うかを判断してもらう形だが、ツールの情報をサーバ側に持たせるイメージかも

TKTK

システムの要件

  • Python 3.10 or higher installed.
  • You must use the Python MCP SDK 1.2.0 or higher.

TypeScript はないのか

TKTK

GitHub の MCP サーバがあるので試す
https://github.com/modelcontextprotocol/servers/tree/main/src/github

TKTK

~/Library/Application Support/Claude/claude_desktop_config.json を書きに設定して Claude デスクトップアプリを再起動。GITHUB_PERSONAL_ACCESS_TOKEN は別途取得する

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "mcp/github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}
TKTK

認識された。特にコンテナを起動したりしてないので、クライアントが起動している・・?

TKTK

ツールを実行するときにはセーフガードとして許可するっぽい