MCP-Go について
MCP-Goは、MCPクライアントやサーバーを開発するためのGoライブラリです。型安全でモジュール化されたAPI、複数のトランスポート、Goの並行処理を使ったセッション管理を提供します。
主な機能
- 01MCPクライアントとサーバーの実装
- 02stdio、WebSockets、HTTPに対応
- 03goroutineとchannelによる並行処理
- 04型安全なAPI
- 05モジュール化されたハンドラー設計
- 06セッションのライフサイクル管理
活用シーン
- 01GoでMCPサーバーを構築
- 02GoでMCPクライアントを構築
- 03複数のトランスポートでMCPセッションを確立
MCP 対応
MCP仕様v2025-03-26を実装し、クライアントとサーバーの両方のコンポーネントを備えています。stdio、WebSockets、HTTP、またはカスタムトランスポートでセッションを確立できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP-Go
MCP とは?
MCP(Model Context Protocol)は、AI モデルとアプリケーション間の効率的な通信を目的に設計された、軽量で柔軟なプロトコルです。高いパフォーマンスと信頼性を維持しながら、サービスがメッセージ、ツール、リソースを交換するための標準化された方法を提供します。
このパッケージについて
MCP-Go は、AI 通信のための堅牢なフレームワークを提供する Model Context Protocol の Go 実装です。
- クライアント/サーバーアーキテクチャ:クライアントとサーバーの両方のコンポーネントを完全に実装しています
- 柔軟なトランスポート:標準入出力、WebSockets、HTTP を介してシームレスに通信できます
- 並行処理を考慮した設計:Go のゴルーチンとチャネルを活用して一から構築されています
- 型安全な API:ランタイムエラーを防ぐため、コードベース全体で強い型付けを採用しています
- モジュール式コンポーネント:拡張性と保守性を高める、ハンドラーベースの設計パターンを採用しています
- セッション管理:ライフサイクルを適切に処理する永続的な接続を提供します
使用方法
一般的なパターン
MCP-Go のすべての実装は、同様のパターンに従います。
package main
import (
"github.com/OkutaniDaichi0106/mcp-go/mcp"
)
func main() {
server := mcp.NewServer()
// Tool registration
mcp.HandleToolFunc(&mcp.ToolDefinition{
Name: "tool_name",
Description: "Tool description",
InputSchema: mcp.InputSchema(`{ "type": "object", ... }`),
}, func(w mcp.ContentsWriter, name string, args map[string]any) {
// Tool implementation
// ...
w.WriteContents(contents)
})
// Resource registration
mcp.HandleResourceFunc(&mcp.ResourceDefinition{
URI: "resource_uri",
MimeType: "resource_mime_type",
Name: "resource_name",
Description: "Resource description",
}, func(w mcp.ContentsWriter, uri string) {
// Resource implementation
// ...
w.WriteContents(contents)
})
// Prompt registration
mcp.HandlePromptFunc(&mcp.PromptDefinition{
Name: "prompt_name",
Description: "Prompt description",
InputSchema: mcp.InputSchema(`{ "type": "object", ... }`),
}, func(w mcp.PromptWriter, name string, args map[string]any) {
// Prompt implementation
// ...
w.WriteContents(contents)
})
transport, err := ... // Create transport
// Configure transport and accept -> get session
session, err := server.Accept(transport)
defer session.Close()
// ...
}
package main
import (
"github.com/OkutaniDaichi0106/mcp-go/mcp"
)
func main() {
// Sample registration
mcp.HandleSampleFunc(&mcp.SampleDefinition{
Name: "sample_name",
Description: "Sample description",
}, func(w mcp.ContentsWriter, name string, args map[string]any) {
// Sample implementation
// ...
w.WriteContents(contents)
})
// Root registration
mcp.HandleRoot(&mcp.RootDefinition{
URI: "root_uri",
Name: "Root name",
})
// Create client
client := mcp.NewClient()
transport, err := ... // Create transport
// Configure transport and dial -> get session
session, err := client.Dial(transport)
defer session.Close()
// ...
}
トランスポートの選択肢
MCP-Go は、コードをほとんど変更せずに複数のトランスポート方式をサポートします。
カスタムトランスポート
カスタムトランスポートでは、適切なトランスポートオブジェクトとともに Accept メソッドおよび Dial メソッドを使用します。
// Server
sess, err := server.Accept(t)
// Client
sess, err := client.Dial(t)
標準入出力
標準入出力では、AcceptStdio メソッドおよび DialStdio メソッドを使用します。
// Server
sess, err := server.AcceptStdio()
// Client
sess, err := client.DialStdio("command", "arg1", "arg2")
HTTP
HTTP では、AcceptHTTP メソッドおよび DialHTTP メソッドを使用できます。
// Server
http.HandleFunc("/mcp", func(w http.ResponseWriter, r *http.Request) {
sess, err := server.AcceptHTTP(w, r)
})
// Client
sess, err := client.DialHTTP("http://localhost:8080/mcp", nil)
仕様への準拠
MCP-Go は、Model Context Protocol specification v2025-03-26 を実装しています。このリリース時点で、これはプロトコルの最新バージョンです。
インストール
go get github.com/OkutaniDaichi0106/mcp-go
ドキュメント
API の詳細なドキュメントと高度な使用例については、GoDoc を参照してください。
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細については LICENSE ファイルを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。