mcpField
M
MCP-Go

MCP-Go

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

MCP-Go について

MCP-Goは、MCPクライアントやサーバーを開発するためのGoライブラリです。型安全でモジュール化されたAPI、複数のトランスポート、Goの並行処理を使ったセッション管理を提供します。

主な機能

  1. 01MCPクライアントとサーバーの実装
  2. 02stdio、WebSockets、HTTPに対応
  3. 03goroutineとchannelによる並行処理
  4. 04型安全なAPI
  5. 05モジュール化されたハンドラー設計
  6. 06セッションのライフサイクル管理

活用シーン

  1. 01GoでMCPサーバーを構築
  2. 02GoでMCPクライアントを構築
  3. 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 ファイルを参照してください。

コメント

MCP は初めてですか?

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

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