mcpField
M
mcp-golang

mcp-golang

ローカル
mcpgolang.com開発ツール1.2k60 週間前に更新

mcp-golang について

mcp-golang は Model Context Protocol の非公式な Go 実装で、少ないコードで MCP サーバーとクライアントを作成できます。ツールの引数を Go の構造体として定義すると、スキーマ生成、デシリアライズ、エラー処理をライブラリが担います。

主な機能

  1. 01Go 構造体によるツール引数定義
  2. 02スキーマの自動生成とデシリアライズ
  3. 03stdio と HTTP の組み込みトランスポート
  4. 04カスタムトランスポートの対応
  5. 05ツール、プロンプト、リソースの対応
  6. 06ツール、プロンプト、リソースを呼び出すクライアント機能

活用シーン

  1. 01Go で MCP ツールサーバーを作成する
  2. 02MCP サーバーを呼び出す Go クライアントを構築する
  3. 03Claude Desktop 向けにローカルの Go サーバーを動かす

MCP 対応

Go による MCP の実装です。サーバーとしてはツール、プロンプト、リソースを MCP クライアントに公開し、クライアントとしては MCP サーバーの機能を一覧取得・呼び出しします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Statusphereのロゴ

GitHub stars GitHub forks GitHub issues GitHub pull requests GitHub license GitHub contributors GitHub last commit GoDoc Go Report Card Tests

mcp-golang

mcp-golangは、Goで実装されたModel Context Protocolの非公式実装です。

数行のコードで、Goを使ってMCPサーバーとクライアントを作成できます。

ドキュメントはhttps://mcpgolang.comをご覧ください。

主な特徴

  • 🛡️型安全性 - ツールの引数をGoのネイティブな構造体として定義すれば、あとはmcp-golangが処理します。スキーマの自動生成、デシリアライズ、エラー処理などに対応しています。
  • 🚛 カスタムトランスポート - 組み込みのトランスポート(すべての機能に対応するstdio、ステートレス通信向けのHTTP)を使うか、独自のものを作成できます。
  • ⚡ ボイラープレートの削減 - mcp-golangは、ツール、プロンプト、リソース以外のすべてのMCPエンドポイントを生成します。
  • 🧩 モジュール式 - ライブラリはトランスポート、プロトコル、サーバー/クライアントの3つのコンポーネントに分かれています。すべてを使うことも、必要なものだけを使うこともできます。
  • 🔄 双方向通信 - stdioトランスポートを通じて、サーバーとクライアントの両方の実装を完全にサポートします。

使用例

go get github.com/metoro-io/mcp-golangでインストールします。

サーバーの例
package main

import (
	"fmt"
	"github.com/metoro-io/mcp-golang"
	"github.com/metoro-io/mcp-golang/transport/stdio"
)

// Tool arguments are just structs, annotated with jsonschema tags
// More at https://mcpgolang.com/tools#schema-generation
type Content struct {
	Title       string  `json:"title" jsonschema:"required,description=The title to submit"`
	Description *string `json:"description" jsonschema:"description=The description to submit"`
}
type MyFunctionsArguments struct {
	Submitter string  `json:"submitter" jsonschema:"required,description=The name of the thing calling this tool (openai, google, claude, etc)"`
	Content   Content `json:"content" jsonschema:"required,description=The content of the message"`
}

func main() {
	done := make(chan struct{})

	server := mcp_golang.NewServer(stdio.NewStdioServerTransport())
	err := server.RegisterTool("hello", "Say hello to a person", func(arguments MyFunctionsArguments) (*mcp_golang.ToolResponse, error) {
		return mcp_golang.NewToolResponse(mcp_golang.NewTextContent(fmt.Sprintf("Hello, %server!", arguments.Submitter))), nil
	})
	if err != nil {
		panic(err)
	}

	err = server.RegisterPrompt("promt_test", "This is a test prompt", func(arguments Content) (*mcp_golang.PromptResponse, error) {
		return mcp_golang.NewPromptResponse("description", mcp_golang.NewPromptMessage(mcp_golang.NewTextContent(fmt.Sprintf("Hello, %server!", arguments.Title)), mcp_golang.RoleUser)), nil
	})
	if err != nil {
		panic(err)
	}

	err = server.RegisterResource("test://resource", "resource_test", "This is a test resource", "application/json", func() (*mcp_golang.ResourceResponse, error) {
		return mcp_golang.NewResourceResponse(mcp_golang.NewTextEmbeddedResource("test://resource", "This is a test resource", "application/json")), nil
	})

	err = server.Serve()
	if err != nil {
		panic(err)
	}

	<-done
}
HTTPサーバーの例

標準のHTTPトランスポートまたはGinフレームワークを使って、HTTPベースのサーバーを作成することもできます。

// Standard HTTP
transport := http.NewHTTPTransport("/mcp")
transport.WithAddr(":8080")
server := mcp_golang.NewServer(transport)

// Or with Gin framework
transport := http.NewGinTransport()
router := gin.Default()
router.POST("/mcp", transport.Handler())
server := mcp_golang.NewServer(transport)

注:HTTPトランスポートはステートレスであり、通知などの双方向機能には対応していません。これらの機能が必要な場合は、stdioトランスポートを使用してください。

クライアントの例

より詳しい例については、examples/clientディレクトリをご覧ください。

package main

import (
    "context"
    "log"
    mcp "github.com/metoro-io/mcp-golang"
    "github.com/metoro-io/mcp-golang/transport/stdio"
)

// Define type-safe arguments
type CalculateArgs struct {
    Operation string `json:"operation"`
    A         int    `json:"a"`
    B         int    `json:"b"`
}

func main() {
   cmd := exec.Command("go", "run", "./server/main.go")
   stdin, err := cmd.StdinPipe()
   if err != nil {
    log.Fatalf("Failed to get stdin pipe: %v", err)
   }
   stdout, err := cmd.StdoutPipe()
   if err != nil {
    log.Fatalf("Failed to get stdout pipe: %v", err)
   }

   if err := cmd.Start(); err != nil {
    log.Fatalf("Failed to start server: %v", err)
   }
   defer cmd.Process.Kill()
    // Create and initialize client
    transport := stdio.NewStdioServerTransportWithIO(stdout, stdin)
    client := mcp.NewClient(transport)
    
    if _, err := client.Initialize(context.Background()); err != nil {
        log.Fatalf("Failed to initialize: %v", err)
    }

    // Call a tool with typed arguments
    args := CalculateArgs{
        Operation: "add",
        A:         10,
        B:         5,
    }
    
    response, err := client.CallTool(context.Background(), "calculate", args)
    if err != nil {
        log.Fatalf("Failed to call tool: %v", err)
    }
    
    if response != nil && len(response.Content) > 0 {
        log.Printf("Result: %s", response.Content[0].TextContent.Text)
    }
}
Claude Desktopでの使用

~/Library/Application Support/Claude/claude_desktop_config.jsonに、次の内容のファイルを作成してください。

{
"mcpServers": {
  "golang-mcp-server": {
      "command": "<your path to golang MCP server go executable>",
      "args": [],
      "env": {}
    }
  }
}

貢献

貢献を歓迎します!貢献ガイドラインをご確認ください。

Discord

提案や、APIや使い方についての質問はありますか?Discordサーバーでお尋ねください。 メンテナーが喜んでサポートします。

使用例

このライブラリを使った、より詳細な例を以下に紹介します。

  • README の画像 Metoro - Metoroで監視されているKubernetes環境にクエリを実行し、操作します。

独自のプロジェクトを追加するPRをお送りください!

サーバー機能の実装状況

ツール
  • ツール呼び出し
  • 引数としてGoのネイティブ構造体を使用
  • ツール一覧エンドポイントのプログラムによる生成
  • 変更通知
  • ページネーション
プロンプト
  • プロンプト呼び出し
  • プロンプト一覧エンドポイントのプログラムによる生成
  • 変更通知
  • ページネーション
リソース
  • リソース呼び出し
  • リソース一覧エンドポイントのプログラムによる生成
  • 変更通知
  • ページネーション
トランスポート
  • Stdio - 双方向通信を含む、すべての機能を完全にサポート
  • HTTP - シンプルなリクエスト/レスポンスのシナリオ向けのステートレスなトランスポート(通知はサポートしていません)
  • Gin - Gin フレームワークと統合された HTTP トランスポート(ステートレス、通知はサポートしていません)
  • SSE
  • カスタムトランスポートのサポート
  • カスタム認証をサポートする HTTPS - 開発中です。現在は仕様の一部ではありませんが、実験的なサポートを追加する予定です。
クライアント
  • ツールの呼び出し
  • プロンプトの呼び出し
  • リソースの呼び出し
  • ツールの一覧表示
  • プロンプトの一覧表示
  • リソースの一覧表示

コメント

MCP は初めてですか?

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

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