mcpField
M
MCP-Go SDK

MCP-Go SDK

ローカル
github.com/dentaku7開発ツール382 週間前に更新

MCP-Go SDK について

MCP-Go SDKは、MCPツールやサーバーを構築するためのGo開発キットです。ツールのインターフェースと応答形式を定め、stdio対応のトランスポート層も備えています。

主な機能

  1. 01MCPツールとサーバーの構築
  2. 02ツールのスキーマと実行の定義
  3. 03MCPツール応答形式への対応
  4. 04トランスポートインターフェースの利用
  5. 05stdioトランスポートを内蔵

活用シーン

  1. 01GoでのMCPツール実装
  2. 02最小構成のサーバー例の作成
  3. 03JSON Schemaによるツールパラメーターの定義
  4. 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": {}
        }
    }
}

コントリビュート

  1. リポジトリをフォークします
  2. 機能ブランチを作成します
  3. 新しい機能のテストを追加します
  4. プルリクエストを送信します

コードでは、以下を満たすようにしてください。

  • Go のベストプラクティスに従っていること
  • 適切なドキュメントが含まれていること
  • テストでカバーされていること
  • エラーが適切に処理されること

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。