modelcontextprotocolのgo-sdkのexamplesを使ってローカルでMCPを動かしてみた
はじめに - MCPって何?なぜ試してみたのか
AIアプリケーションの開発で、「AIエージェントに外部ツールを使わせたい」という場面が増えています。そんな中、Model Context Protocol (MCP)という新しい標準が登場しました。
MCPの詳しい解説は有識者の解説がネットに多々あるので、そちらを参照してくださいm(_ _)m
今回は、GitHub上で公開されている公式のGo SDKを使って、実際にローカル環境でMCPサーバーを立ち上げて動かしてみました。
前提条件とコンテキスト
開発環境
- Go 1.23以上
- macOS
- Cursor エディタ
注意点 - まだ不安定な実装です
公式のREADMEに明記されていますが、この Go SDK はまだ不安定で、2025年8月のリリースを目指している段階です。
WARNING: The SDK should be considered unreleased, and is currently unstable and subject to breaking changes.
実際のプロダクションで使用するのは控えて、あくまで学習・検証目的で使用することをお勧めします。
実際にやってみた - Hello Worldから始める
1. サンプルコードを取得
まず、公式のGo SDKリポジトリから、helloサンプルを使用します。
git clone https://github.com/modelcontextprotocol/go-sdk.git
cd go-sdk/examples/hello
2. Hello Worldサーバーの内容を確認
サンプルコードを見ると、シンプルなMCPサーバーが実装されています:
package main
import (
"context"
"log"
"github.com/modelcontextprotocol/go-sdk/mcp"
)
type HiParams struct {
Name string `json:"name"`
}
func SayHi(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParamsFor[HiParams]) (*mcp.CallToolResultFor[any], error) {
return &mcp.CallToolResultFor[any]{
Content: []mcp.Content{&mcp.TextContent{Text: "Hi " + params.Arguments.Name}},
}, nil
}
func main() {
// Create a server with a single tool.
server := mcp.NewServer("greeter", "v1.0.0", nil)
server.AddTools(
mcp.NewServerTool("greet", "say hi", SayHi, mcp.Input(
mcp.Property("name", mcp.Description("the name of the person to greet")),
)),
)
// Run the server over stdin/stdout
if err := server.Run(context.Background(), mcp.NewStdioTransport()); err != nil {
log.Fatal(err)
}
}
このサーバーは:
-
greet
という名前のツールを1つ提供 -
name
パラメータを受け取り、挨拶を返す - stdin/stdout を使ってMCPクライアントと通信
3. サーバーをビルドして実行
go build -o mcp-go-sdk-sample
これで mcp-go-sdk-sample
という実行可能ファイルが作成されます。
4. MCPクライアント (Cursor) から接続
CursorエディタはMCPクライアント機能を持っています。設定ファイルに以下のように記述することで、作成したMCPサーバーに接続できます:
{
"mcpServers": {
"mcp-go-sdk-sample": {
"command": "/path/to/your/mcp-go-sdk-sample"
}
}
}
重要なポイント: command
には、先ほどビルドした mcp-go-sdk-sample
バイナリの絶対パスを指定する必要があります。
成功すると、Cursor上で以下のように表示されます。
5. 実際にツールを呼び出してみる
CursorでMCPサーバーに接続すると、greet
ツールが利用可能になります。AI との会話の中で、「こんにちは」と言ってもらうように頼むと、MCPサーバーの greet
ツールが呼び出されます。
すると、サーバーから「Hi あなたの名前」という応答が返ってきます。
発見と学び - 実際に動かしてみて分かったこと
1. Go SDKの設計が直感的
Go SDKのAPIは非常に直感的で、以下のような流れで簡単にツールを作成できます:
- ツール関数を定義(パラメータと戻り値の型を指定)
- サーバーインスタンスを作成
-
AddTools()
でツールを登録 -
Run()
で実行
2. 型安全性が保たれている
Go の型システムを活用して、パラメータや戻り値の型安全性が保たれています。CallToolParamsFor[T]
や CallToolResultFor[T]
のような型により、コンパイル時に型チェックが行われます。
3. 実際のAIアプリケーションとの連携が簡単
CursorのようなMCPクライアントと連携することで、AI エージェントが自然にツールを呼び出すことができます。これにより、AIアプリケーションの機能を大幅に拡張できる可能性を感じました。
次のステップ - さらなる探求のために
公式リソース
2025年8月の正式リリースに向けて
現在のSDKは不安定版ですが、正式リリースされれば、AIアプリケーションの開発における重要な選択肢の一つになりそうです。特にGo言語でバックエンドを開発している場合、MCPサーバーの実装が非常に簡単になるでしょう。
現在、私が観測している限りでは複数のMCP Go SDKが公開されているのですが、今回公開された https://github.com/modelcontextprotocol/go-sdk が今後普及していくかは、今後の動向を見ていきたいと思います。
おわりに
Model Context Protocol の Go SDK を使って、実際にローカルでMCPサーバーを動かしてみました。まだ不安定な実装ではありますが、AIアプリケーションとツール連携の標準化への取り組みとして、とても興味深い技術だと感じました。
皆さんも、ぜひ試してみてください!
Discussion