MCP Go SDK について
MCP Go SDKは、サーバー構築とクライアント・サーバー間の双方向通信に使えるGo実装のMCP SDKです。トランスポートやセッションに加え、ツール、リソース、プロンプトを扱えます。
主な機能
- 01stdio、SSE、WebSocketのトランスポート
- 02双方向通信とセッション管理
- 03ツールの登録と実行
- 04リソースのパターン照合とアクセス
- 05プロンプトテンプレートの描画
活用シーン
- 01GoでのMCPサーバー構築
- 02複数のトランスポートによるクライアント接続
- 03クライアントへのツール、リソース、プロンプト提供
MCP 対応
MCPクライアントとサーバー間の双方向通信を実装します。サーバーからツール、リソース、プロンプトを公開できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Go SDK
この SDK は Model Context Protocol(MCP)の Go 実装を提供し、ツールの実行、リソースへのアクセス、プロンプトの処理において、クライアントとサーバー間の双方向通信を可能にします。
特徴
-
トランスポート層
- 複数のトランスポートオプション(stdio、SSE、WebSocket)
- 双方向通信
- エンドポイントと設定を構成可能
-
サーバーの実装
- ツールの登録と実行
- リソースのパターンマッチングとアクセス
- プロンプトテンプレートのレンダリング
- セッション管理
- リフレクションベースのハンドラー呼び出し
-
コアプロトコルの型
- JSON-RPC メッセージの処理
- MCP 固有の型(ツール、リソース、プロンプト)
- ケイパビリティと初期化
インストール
go get github.com/SetiabudiResearch/mcp-go-sdk
クイックスタート
MCP サーバーを作成する簡単な例を紹介します。
package main
import (
"context"
"log"
"github.com/SetiabudiResearch/mcp-go-sdk/pkg/mcp/server"
"github.com/SetiabudiResearch/mcp-go-sdk/pkg/mcp/transport"
)
func main() {
// Create a new server
srv := server.NewServer("Example Server")
// Add a tool
srv.AddTool("greet", func(name string) string {
return "Hello, " + name + "!"
}, "Greet a person")
// Create a session
session := server.NewSession(context.Background(), srv)
// Create and start a transport
t := transport.NewStdioTransport(session)
if err := t.Start(); err != nil {
log.Fatal(err)
}
}
使い方ガイド
サーバーの作成
// Create a new server with a name
srv := server.NewServer("My Server")
// Optionally configure server capabilities
srv.WithCapabilities(protocol.ServerCapabilities{
SupportsAsync: true,
})
ツールの追加
// Add a synchronous tool
srv.AddTool("myTool", func(arg1 string, arg2 int) (string, error) {
return fmt.Sprintf("Processed %s with %d", arg1, arg2), nil
}, "Tool description")
// Add an asynchronous tool
srv.AddAsyncTool("longRunningTool", func(params string) error {
// Long-running operation
return nil
}, "Async tool description")
リソースの追加
// Add a resource with pattern matching
srv.AddResource("files/{path}", func(path string) ([]byte, error) {
return ioutil.ReadFile(path)
}, "Access files")
// Resource patterns support multiple parameters
srv.AddResource("api/{version}/{endpoint}", func(version, endpoint string) (interface{}, error) {
return callAPI(version, endpoint)
}, "API access")
プロンプトの追加
// Add a simple text prompt
srv.AddPrompt("confirm", func(action string) string {
return fmt.Sprintf("Are you sure you want to %s?", action)
}, "Confirmation prompt")
// Add a multi-message prompt
srv.AddPrompt("chat", func(context string) []protocol.PromptMessage {
return []protocol.PromptMessage{
{
Role: protocol.RoleAssistant,
Content: protocol.TextContent{
Type: "text",
Text: "How can I help you with " + context + "?",
},
},
}
}, "Chat prompt")
トランスポートの設定
// Create a session
session := server.NewSession(context.Background(), srv)
// Stdio transport (for CLI applications)
t := transport.NewStdioTransport(session)
// WebSocket transport (for web applications)
t := transport.NewWebSocketTransport(session, transport.WithAddress(":8080"))
// Server-Sent Events transport (for web browsers)
t := transport.NewSSETransport(session, transport.WithAddress(":8080"))
// Start the transport
if err := t.Start(); err != nil {
log.Fatal(err)
}
アプリケーション例
完全なアプリケーション例については、examples ディレクトリをご覧ください。
コントリビューション
コントリビューションを歓迎します。お気軽に Pull Request を送信してください。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細については LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。