👏

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は非常に直感的で、以下のような流れで簡単にツールを作成できます:

  1. ツール関数を定義(パラメータと戻り値の型を指定)
  2. サーバーインスタンスを作成
  3. AddTools() でツールを登録
  4. 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