MCP公式Go SDKのGo紹介

583 Views

July 27, 25

スライド概要

2025年7月27日(日)に石川県金沢市で開催された「【祝1周年】Kanazawa.go オフライン集Go会 #5」での私の登壇資料「MCP公式Go SDKのGo紹介」です。

profile-image

主にICTイベントでの発表資料を公開しています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

MCP公式Go SDKのGo紹介 【祝1周年】Kanazawa.go オフライン集Go会 #5 27 July 2025 Ryuji Iwata Okayama, Japan

2.

Ryuji Iwata X (Twitter) : @qt_luigi Portfolio : sites.google.com/view/ryuji-iwata-portfolio 2

3.

Model Context Protocol (MCP) 2 3

4.

Model Context Protocol (MCP) 2024年11月26日 Anthropic社がオープンソースでの公開を発表。 www.anthropic.com/news/model-context-protocol • AIアプリが大規模言語モデル(LLM)にコンテキストを提供するための標準規約。 • AIアプリとデータソースの安全な双方向接続を構築する公開標準。 3 4

5.

アーキテクチャ図 Your Computer MCP Protocol MCP Server A Local Data Source A Host with MCP Client (Claude, IDEs, Tools) MCP Protocol MCP Server B Web APIs MCP Protocol Internet Remote Service B MCP Server C Web APIs Remote Service C modelcontextprotocol.io/introduction#general-architecture 4 5

6.

構成要素 クライアント • サーバーに問い合わせて結果を得る。 • 1つのサーバーに対して1つのクライアントを用意する。 サーバー • クライアントからの問い合わせに結果を返す。 • 処理を実行したり、データを返したり、時にはクライアントに問い合わせたり。 ホスト • ユーザーが使用するAIアプリケーション(対話型、システム、など) • ユーザーの問い合わせに複数のクライアントとLLMとやりとりして回答を返す。 5 6

7.

トランスポート 通信プロトコルはJSON-RPC 2.0を採用。 ローカルMCPサーバーとの通信 • 標準入出力 (stdio) リモートMCPサーバーとの通信 • HTTP+SSE (Server Sent Events) (サーバーからクライアントへの片方向) • Streamable HTTP (サーバーとクライアントとの双方向) 6 7

8.

サーバーが提供する機能 リソース • クライアントで利用されるデータ • ファイル(テキスト、画像、音声、動画)からDBスキーマまでと幅広く実装可能。 プロンプト • 定義済みのプロンプトテンプレート • 引数を定義しておいてクライアントから受け取った値を埋め込むことも可能。 ツール • 実行可能な機能。 • ローカルや外部のシステムとのやりとり、外部APIのラップ、データ処理、など。 [参考]クライアントが提供する機能:ルーツ、サンプリング、エリシテーション 7 8

9.

modelcontextprotocol/go-sdk 8 9

10.

modelcontextprotocol/go-sdk モデルコンテキストプロトコルのサーバーとクライアントの公式Go SDK。 Google社のGoチームと共同で開発されている。2025年8月に正式リリース予定。 github.com/modelcontextprotocol/go-sdk 9 10

11.

歴史 2025年3月23日 公式版Go SDKの必要性が提案される。 github.com/orgs/modelcontextprotocol/discussions/224 2025年4月22日 Goリポジトリーにてinternalでプロトタイプ実装が始まる(継続中) • golang.org/x/tools/internal/mcp 2025年5月16日 Go SDKのデザインの議論が始まる。 github.com/orgs/modelcontextprotocol/discussions/364 mark3labs/mcp-goをお手本とする形で実装が開始される。 • 2025年6月24日 初版公開 • 2025年7月2日 v0.1.0公開 • 2025年7月11日 v0.2.0公開 10 11

12.
[beta]
サーバー (server.go)
type HiParams struct {
Name string `json:"name" jsonschema:"the name of the person to greet"`
}
func SayHi(ctx context.Context, cc *mcp.ServerSession, params *mcp.CallToolParams[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(&mcp.Implementation{Name: "greeter", Version: "v1.0.0"}, nil)
mcp.AddTool(server, &mcp.Tool{Name: "greet", Description: "say hi"}, SayHi)
// Run the server over stdin/stdout, until the client disconnects
if err := server.Run(context.Background(), mcp.NewStdioTransport()); err != nil {
log.Fatal(err)
}
}
11 12
13.
[beta]
クライアント (client.go)
ctx := context.Background()
// Create a new client, with no features.
client := mcp.NewClient(&mcp.Implementation{Name: "mcp-client", Version: "v1.0.0"}, nil)
// Connect to a server over stdin/stdout
transport := mcp.NewCommandTransport(exec.Command("myserver"))
session, err := client.Connect(ctx, transport)
if err != nil {
log.Fatal(err)
}
defer session.Close()
// Call a tool on the server.
params := &mcp.CallToolParams{
Name: "greet",
Arguments: map[string]any{"name": "you"},
}
res, err := session.CallTool(ctx, params)
if err != nil { log.Fatal("CallTool failed: %v", err) }
if res.IsError { log.Fatal("tool failed") }
for _, c := range res.Content {
log.Print(c.(*mcp.TextContent).Text)
}
12 13
14.

実行結果 (macOSの場合) 準備 % ls client.go go.mod go.sum server.go % go build -o myserver server.go % ls client.go go.mod go.sum myserver server.go % export PATH=$PATH:$PWD 実行 % go run client.go 2025/07/21 15:13:49 Hi you 今回紹介したGoコード: github.com/modelcontextprotocol/go-sdk/blob/main/README.md 13 14

15.

Thank you Ryuji Iwata Okayama, Japan @qt_luigi 14