TL;DR
Go で MCP サーバを実装するためのサードパーティ製のライブラリ。
なぜ必要か
公式の GitHub アカウントを見る限り、公式が提供している SDK は Kotlin、Java、Swift、C#、TypeScript、Python だけで、Go の SDK はない。Go のライブラリには mcp-golang や go-mcp もあるが、mcp-go が一番 Star 数が多い。
高レベルな API を提供しているので、コード量が少なくなり、開発が速くなる。最小限のボイラープレートで MCP サーバを作れる。MCP の仕様を完全に実装することを目指している。
仕組み
コアとなる要素は次の 4 つである。
- Server: MCP サーバ
- Resources: LLM に公開するデータ
- Tools: LLM がサーバを介して処理を実行するときに使うツール
- Prompts: LLM がサーバと効率的にやり取りするためのプロンプト
例
Examples を実際に動かした。まずモジュールを作り、mcp-go を追加する。
go mod init mcp-go-example
go get github.com/mark3labs/mcp-gomain.go を書いている途中で import の部分にエラーが出たので、go mod tidy を実行した。uuid と uritemplate が追加された。go build でビルドして実行ファイルを用意する。
Cursor に MCP サーバを登録するには、.cursor/mcp.json に次のように書く。
{
"mcpServers": {
"calculate": {
// go build で作った実行ファイルを絶対パスで指定する
"command": "/path/to/mcp-go-example/mcp-go-example",
"args": [],
"env": {},
},
},
}設定がうまくいくと、Cursor Settings > MCP で MCP サーバが Enabled になる。Agent モードにして実行すると、ツールが呼び出される。
注意点
Cursor でモデルを Auto に設定すると、invalid type for parameter 'x' in tool calculate というエラーが出た。本来は数値で渡すべき値を、文字列として渡しているのかもしれない。モデルを claude-3.7-sonnet に切り替えると動いた。