🐡

MCP プロトコルを自前ライブラリに適合のメモ

に公開

背景

猫も杓子も MCP.

自前アプリやサービスで MCP(Model Context Protocol) インターフェイス提供したい
tinyusdz での例を取り上げます.

とりま

メッセージは POST only の JSON-RPC でやりとりします. REST API 知ってれば余裕カモ.

Schema

https://github.com/modelcontextprotocol/modelcontextprotocol/tree/main/schema/2025-03-26

バイナリは base64 or base122 にしてやり取りするか, サイズ大きければ uri 経由にする.

initialize

初期化 request

Accept はここ最近の MCP server(2025/07 時点)では application/json,text/event-stream 両方指定する必要がある.

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json,text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {
        "tools": {},
        "resources": {}
      },
      "clientInfo": {
        "name": "curl-client",
        "version": "1.0.0"
      }
    },
    "id": 1
  }' \
  http://localhost:8085/mcp

initialize の response では mcp-session-id(UUID) が HTTP ヘッダについているので, 以後はこの id をリクエストヘッダに付ける(リクエストの時は Mcp-Session-Idだが大文字小文字は区別するんじゃろか)

notifications/initialized を aknowledge する.
サーバからの response は 202 Accept になる

  curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json,text/event-stream" \
    -H "Mcp-Session-Id: 0000000000000000" \
    -d '{
      "jsonrpc": "2.0",
      "method": "notifications/initialized"
    }' \
    http://localhost:8085/mcp

Protocols

とりあえず toolsresources を提供すればよいでしょう.

Tools

処理コマンドとか.

tools/list で利用可能なツールを列挙し,
tools/call でツール呼び出し.

Resources

リソースの情報を提供. ファイルとか.
ただし Claude for Desktop などでは対応していないのと, セキュリティ関係もあり, あまり使われないかも(Tools で代用できるし)

resources/read ではリソース自体を読んで返す(text or binary)

https://modelcontextprotocol.io/specification/2025-03-26/server/resources#resource-contents

バイナリの場合は base64 にする.

データサイズ大きい場合は 'resouces/read' ではなく 'tools/call' で uri 返す(+ websocket でバイナリ渡し)などの方がいいかも

resources/write はセキュリティの関係上無い. リソースを追加したい場合は,
tools/call で読んで resources に追加(サーバ側で)となるだろうか.
サーバ側に DB 機能つけるといいかも.

response の構成

text か image(base64 string) しかない. したがって JSON 文字列として返すのが基本となる.

Protocol version 2025-06-18 から structual output に対応して JSON Object で response 結果を返すことができるようになった. outputSchema で定義する.
ただし MCP client 側などでの対応に時間がかかると思われるので普及するのは 2025 秋くらいからだろうか.

LLM との連携

たぶん tools/list での description とかシッカリ記述してあげれば, LLM がよろしく解釈してくれると予想!

Claude for Desktop との連携

Claude for Desktop の MCP では現状(2025/07) Resources は対応していない. ファイル読み書きみたいなことは tools 経由で行う必要がある.

さらなる高みへ

メッセージやコマンドの確認などは Inspector で

https://github.com/modelcontextprotocol/inspector

Discussion