Model Context Protocol (MCP) Implementation in Go について
MCPのGo実装で、MCPサーバーと通信するアプリ向けにスキーマ定義とクライアントを提供します。サンプルクライアントと一般的な操作を支援する機能も含まれています。
主な機能
- 01型安全なGo用MCPスキーマ
- 02JSON-RPCメッセージ構造
- 03クライアントの初期化とリクエスト
- 04一般的なMCP操作のヘルパー
- 05サンプルクライアント
活用シーン
- 01MCPを利用するGoアプリの構築
- 02GoクライアントからMCPサーバーへの接続
MCP 対応
MCPスキーマ型とGoクライアントを実装し、MCPサーバーへの接続初期化、リクエスト送信、レスポンス処理を行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Go による Model Context Protocol(MCP)の実装
このリポジトリには、LLM を活用するアプリケーションでクライアントとサーバーがやり取りするための JSON-RPC ベースのプロトコルである Model Context Protocol(MCP) の Go 実装が含まれています。
目次
mcp/schema.go:TypeScript のスキーマを変換した、MCP スキーマ用の Go 構造体定義mcp/client.go:MCP サーバーとやり取りするためのクライアント実装examples/mcp_client_example.go:クライアントの使用方法を示す簡単な例
MCP の概要
Model Context Protocol(MCP)を使うと、モデルの「ホスト」(LLM クライアントや、LLM と連携するシステムなど)と、「サーバー」(LLM の機能を強化するためにコンテキスト情報、ツール、プロンプト、リソースを提供するシステム)が通信できます。
MCP の主な機能は次のとおりです。
- リソース:ホストが読み取れるファイル、ドキュメント、その他のデータ
- ツール:モデルに代わってホストが呼び出せる関数
- プロンプト:ホストが使用できるテンプレートや事前定義済みのメッセージシーケンス
- ルート:サーバーが操作できるファイルシステムまたはデータのルート
はじめに
前提条件
- Go 1.18 以降
サンプルの実行
# Set the MCP server URL (optional, defaults to http://localhost:3000/jsonrpc)
export MCP_SERVER_URL=http://your-mcp-server/jsonrpc
# Run the example
go run examples/mcp_client_example.go
MCP クライアントの使用
import (
"fmt"
"path/to/mcp"
)
func main() {
// Create a new client
client := mcp.NewClient("http://your-mcp-server/jsonrpc")
// Initialize the client
clientInfo := mcp.Implementation{
Name: "My MCP Client",
Version: "1.0.0",
}
capabilities := mcp.ClientCapabilities{
// Specify the capabilities your client supports
}
err := client.Initialize(clientInfo, capabilities)
if err != nil {
// Handle error
}
// Now you can use various client methods:
// List resources
resources, err := client.ListResources("")
// Read a resource
resource, err := client.ReadResource("resource-uri")
// Call a tool
result, err := client.CallTool("tool-name", map[string]interface{}{
"argument1": "value1",
"argument2": 123,
})
// Get a prompt
prompt, err := client.GetPrompt("prompt-name", map[string]string{
"argName": "argValue",
})
}
実装の詳細
スキーマ
mcp/schema.go の Go スキーマ定義では、MCP メッセージの型安全な構造を定義しています。以下が含まれます。
- JSON-RPC プロトコルの構造体
- リソース、プロンプト、ツールの定義
- テキスト、画像、埋め込みリソース用のコンテンツ構造体
json.RawMessageを使って多相型を処理するヘルパー関数
クライアント
mcp/client.go のクライアント実装には、次のメソッドが用意されています。
- MCP サーバーへの接続を初期化する
- リクエストを送信し、レスポンスを処理する
- Go 構造体を JSON-RPC メッセージに変換する
- 一般的な MCP 操作用のヘルパーメソッド
コントリビュート
コントリビュートを歓迎します。次のような方法で貢献できます。
- サーバーを実装する
- クライアントに WebSocket 対応を追加する
- エラー処理を改善する
- テストを追加する
- 追加のユースケースを文書化する
ライセンス
このプロジェクトは MIT ライセンスの下で公開されています。詳細は LICENSE ファイルをご覧ください。
参考資料
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。