MCP-Go SDK について
MCP-Go SDKは、MCPツールやサーバーを構築するためのGo開発キットです。ツールのインターフェースと応答形式を定め、stdio対応のトランスポート層も備えています。
主な機能
- 01MCPツールとサーバーの構築
- 02ツールのスキーマと実行の定義
- 03MCPツール応答形式への対応
- 04トランスポートインターフェースの利用
- 05stdioトランスポートを内蔵
活用シーン
- 01GoでのMCPツール実装
- 02最小構成のサーバー例の作成
- 03JSON Schemaによるツールパラメーターの定義
- 04stdio経由でのコマンドラインツール接続
MCP 対応
MCP準拠のツールやサーバーを実装するための構成要素を提供します。トランスポート層には、コマンドラインツール向けのstdio対応が含まれます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP-Go SDK
Model Communication Protocol(MCP)のツールとサーバーを構築するための Go SDK です。この SDK は、Cursor IDE などの AI アプリケーションで使用できる、MCP に準拠したツールを実装するための基本要素を提供します。
クイックスタート
メッセージをエコーで返す MCP ツールの最小限の実装については、servers/example にあるサンプルサーバーをご覧ください。
package main
import (
"encoding/json"
"mcp-go/server"
"mcp-go/transport"
)
// EchoTool implements a simple echo tool
type EchoTool struct{}
func (t *EchoTool) Name() string {
return "echo"
}
func (t *EchoTool) Description() string {
return "A simple echo tool that returns the input message"
}
func (t *EchoTool) Schema() json.RawMessage {
return json.RawMessage(`{
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "The message to echo back"
}
},
"required": ["message"]
}`)
}
func (t *EchoTool) Execute(params json.RawMessage) (interface{}, error) {
var input struct {
Message string `json:"message"`
}
if err := json.Unmarshal(params, &input); err != nil {
return nil, err
}
return map[string]interface{}{
"content": []map[string]interface{}{
{
"type": "text",
"text": input.Message,
},
},
"metadata": map[string]interface{}{
"length": len(input.Message),
},
}, nil
}
func main() {
// Create a new server with stdin/stdout transport
srv := server.NewServer(transport.NewStdioTransport())
// Register your tool
if err := srv.RegisterTool(&EchoTool{}); err != nil {
panic(err)
}
// Start the server
if err := srv.Start(); err != nil {
panic(err)
}
}
## Core Concepts
### 1. Tools
A Tool in MCP is a service that can be called by AI applications. Each tool must implement the `mcp.Tool` interface:
```go
type Tool interface {
// Name returns the unique identifier for this tool
Name() string
// Description returns a human-readable description
Description() string
// Schema returns the JSON schema for the tool's parameters
Schema() json.RawMessage
// Execute runs the tool with the given parameters
Execute(params json.RawMessage) (interface{}, error)
}
2. レスポンス形式
ツールは MCP 形式でレスポンスを返す必要があります。
{
"content": [
{
"type": "text",
"text": "Your response text"
}
],
"metadata": {
// Optional metadata about the response
}
}
3. トランスポート層
SDK は Transport インターフェースを通じて、柔軟なトランスポート層を提供します。
type Transport interface {
Send(data interface{}) error
Receive() ([]byte, error)
Close() error
}
デフォルトでは、SDK にはコマンドラインツール向けの stdio トランスポート(transport.NewStdioTransport())が含まれています。
4. 設定
Cursor IDE で MCP ツールを使用するには、プロジェクトのルートに .cursor/mcp.json を作成します。
{
"mcpServers": {
"mytool": {
"command": "mytool",
"args": [],
"env": {}
}
}
}
コントリビュート
- リポジトリをフォークします
- 機能ブランチを作成します
- 新しい機能のテストを追加します
- プルリクエストを送信します
コードでは、以下を満たすようにしてください。
- Go のベストプラクティスに従っていること
- 適切なドキュメントが含まれていること
- テストでカバーされていること
- エラーが適切に処理されること
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。