🐼
Goでmcpホストとmcpクライアントを書いてMCPサーバーのtoolsを呼び出せるようにしてみた
時間があるときにMCP周りのキャッチアップを進めているが、記事などを調べて出てくるものは基本MCPサーバーで、ホストとクライアントについてあまり知る機会がなかったので自分で書いてみた。実装したのはMCPサーバーの初期化部分とMCPサーバーのtoolsを呼び出す部分ぐらいしかない。STDIOしかサポートしておらず、capabilitiesの処理とかもサボってるので正直まだまだではあるが、いったん動いたので仕様把握的にはいいかなと気でいます。
処理の流れはだいたい以下
- 実行時に指定したmcp.jsonを読み込んで、MCPサーバー一つに対してクライアントを一つ生成。生成時にサーバーに対して
initialize
とnotifications/initialized
を送る - それぞれのmcpサーバーに対して、
tools/list
を送って、使えるツールを取得 - ホスト側で入力を処理し、読み込んでいるmcpサーバーのtoolsと合わせて、claudeのapiを叩く
-
tool_use
が返ってきた場合に、mcpサーバーに対してtools/call
を引数と合わせて送る - mcpサーバーから返ってきた内容と合わせてclaudeのapiを叩く。返ってきたテキストを出力
基本はMCPのSpecification を見てもらったらよいと思う。フォーマットもわかるので、似たような感じで実装すればよさそう
実装してわからなくなった部分は以下の方の記事とソースを参考にしつつ実装してました。
感想
私の書いたものがあってるかどうかはわからないが、少なくともホストとクライアントの役割は認識できたような気がする。仕様を追っかけるには手を動かした方が早いので、実装できてない残りの部分も実装してみる予定
Discussion