Closed7

Model Context Protocolを調査する

Masa CentoMasa Cento
  • AIモデルがローカルのデータやツールにアクセスできるようにする規格、仕様
  • サーバーとして定義して提供するツールやリソースなどをクライアント(Claudeやエディタなど)が利用できるようになる
  • 今まではツールをAPIとしてOpenAPI定義を渡していたが、双方向でやり取りしてエージェントが使いやすくする感じか

AIアシスタントが主流になるにつれ、業界はモデル機能に多額の投資を行い、推論と品質において急速な進歩を遂げてきた。 しかし、最も洗練されたモデルでさえ、情報サイロやレガシーシステムの背後にあるデータからの分離によって制約を受けている。 新しいデータソースはすべて、独自のカスタム実装を必要とし、真に接続されたシステムの拡張を困難にしています。
MCPはこの課題に対処します。 AIシステムとデータソースを接続するための普遍的でオープンな標準を提供し、断片的な統合を単一のプロトコルに置き換える。 その結果、AIシステムが必要なデータにアクセスするための、よりシンプルで信頼性の高い方法が実現する。

発表
https://www.anthropic.com/news/model-context-protocol

サーバー実装
https://github.com/modelcontextprotocol/servers

仕様
https://spec.modelcontextprotocol.io/

Masa CentoMasa Cento
  • 現状ではClaude Desktopのみ対応していて、~/Library/Application\ Support/Claude/claude_desktop_configなどに実行パスを設定ことでClaude Desktopがそれを起動して通信する
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": ["mcp-server-sqlite", "--db-path", "/Users/YOUR_USERNAME/test.db"]
    }
  }
}

https://modelcontextprotocol.io/quickstart

  • quickstartのsqliteサーバーを立ち上げて設定して渡すとMCPの🔌アイコンがつく

  • 🔌を押すとサーバーの情報表示とリソースがある

  • リソースを選ぶとコンテキストとしてサーバーにある情報をファイルみたいに渡せる

  • チャット欄の右下には利用できるツールの一覧が表示できるボタン🔨がある
Masa CentoMasa Cento
  • QuickStartにあるSQLiteのツールをClaude Desktopから参照して結果を出力する
  • SQLiteに接続して製品の価格一覧を出してと質問する
  • 最初にテーブルの確認をする処理があり、その許可を求められる
  • その後もテーブルの構造、表示ごとに許可を求められ、結果が表示される
  • ツール実行の入力と出力は見ることができる
Masa CentoMasa Cento
  • 仕組みを理解するためにデバッグ用のinspectorクライアントで調査する

https://modelcontextprotocol.io/docs/tools/inspector

  • sqliteサーバーを立ち上げて調査する
  • npx @modelcontextprotocol/inspector uvx mcp-server-sqlite --db-path /Users/YOUR_USERNAME/test.db
  • http://localhost:5173 にアクセスする
  • stdioでconnectすると接続できる

  • ResourcesにはBusiness Insights Memoというのがあり、textが入出力できる模様
  • Promptsにはデモ用のプロンプトが一つある
  • Toolsには🔨で表示されたSQL操作用のAPIの説明がある
  • 下部にはhistoryがあり、通信の内容(JSONRPC)の中身が表示される

Masa CentoMasa Cento

アーキテクチャーを整理

  • プロンプトはユーザーが設定したり選択する、ツールはモデルが判断して使う、リソースはアプリケーションがコントロールする、とある
  • リソースはモデルに渡すファイルやソース、URLのようなもので、アプリケーションというのはモデルを除くクライアント+サーバーのことではないかと思う
    • どのファイルを使うはモデルが決めるのではなく、クライアントが決め、それをサーバーが送る
    • モデルが直接リソースを使いたい場合はツールを介して行う?

https://spec.modelcontextprotocol.io/specification/server/

Primitive Control Description Example
Prompts User-controlled Interactive templates invoked by user choice Slash commands, menu options
Resources Application-controlled Contextual data attached and managed by the client File contents, git history
Tools Model-controlled Functions exposed to the LLM to take actions API POST requests, file writing
  • またサンプリングというLLM実行の仕組みがあり、サーバーが要求することでクライアントがモデル実行した結果を返せるらしい
    • Claude Desktopでも未実装

https://spec.modelcontextprotocol.io/specification/client/sampling/

  • ユーザーの入力主体のチャットボットに渡すツールやリソースの拡張ではなく、UIやサーバーからモデルの実行できることを含む多様なAIアプリケーションを実装するためのものだという感じがする
  • 実際、ClientにはZedやSourcegraph Codyが紹介されており、AI=チャットボットではないAIの利用をするための仕組みだろう
  • 今までモデル=チャットボットという主体からAIアプリケーションというUI層を追加する思想を感じる

https://modelcontextprotocol.io/clients

Masa CentoMasa Cento

サーバー仕様を整理

https://spec.modelcontextprotocol.io/specification/basic/lifecycle/

  • サーバーはJSONRPCを入出力を定義されていて実装はstdioとhttp/sseがあり、拡張も可能だという
  • リファレンスの実装はstdioが多く、どちらかというと個人がインストールするアプリケーションにMCPサーバーを実装する想定か
  • stdioはstdinをサーバーの入力、stdoutをクライアントへの出力という流れ、http/sseはhttp postを入力、sseが出力となる

https://spec.modelcontextprotocol.io/specification/basic/transports/

  • ping, cancel, progressなどの通知仕様もある
Masa CentoMasa Cento

雑感

  • コンテキストやツールの情報を双方向で渡せる、更新する仕組みとしてはよくできている
  • 昨今話題のAIエディタなどを実装するのに十分な仕組みがあり、ファイルの更新もできる
  • AIエージェントが利用する仕組みとしても、許認可がしっかりすれば広く情報やツールを渡すことができるだろう
  • 実装としてはやや複雑で、複数のサーバーを無事起動させてローカルで使うというのは難易度が高そう
  • stdioの実装が多いことなどから、誰かが提供するサーバーを利用するとかではなく、ローカルの情報にアクセスするAIエディタのようなアプリケーションの利用を想定しているのではないか
  • もし課金したClaude Proがチャットだけではなく、Cursorのようなアプリケーションに広く使える形になるのであれば、OpenAIのGPTs/ChatGPTよりも優位性がある
    • ChatGPTのアプリもVSCode Extensionなどを通して同様な連携を目指しているがOpenではない
  • このプロトコルをAPI経由で使うだけ、というのであれば複雑すぎて流行らないだろうが、2025年に主流になるであろうAIアプリケーション、AIエージェントシステムにおける布石だと思う
  • 少なくとも単純にチャットボットで質問する、またはAPIを使ってシステムを作り上げる、という間のUIの仕組みを実装する開発競争が始まっている
このスクラップは20日前にクローズされました