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-go

main.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 に切り替えると動いた。

関連

出典