mcpField
M
MCP Go SDK

MCP Go SDK

ローカル
riza.io開発ツール3674 週間前に更新

MCP Go SDK について

MCP Go SDK は Go で実装された Model Context Protocol のライブラリで、クライアントとサーバーの両方の機能を提供します。Go で MCP サーバーやクライアントを開発したい開発者に向けたプロジェクトです。MIT ライセンスで公開されています。

主な機能

  1. 01MCP 基本プロトコルの実装
  2. 02クライアントとサーバーの開発に対応
  3. 03リソース、プロンプト、ツールの公開
  4. 04stdio トランスポートへの対応

活用シーン

  1. 01ローカルファイルをリソースとして公開する Go 製 MCP サーバーの作成
  2. 02任意の MCP サーバーに接続する Go 製クライアントの開発

MCP 対応

この SDK は MCP プロトコルそのものを実装します。構築したサーバーはリソース、プロンプト、ツールを MCP クライアントに公開し、クライアントは任意の MCP サーバーに接続できます。

設定

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

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

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

リポジトリ

ツール

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

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

詳細

MCP Go SDK

Build Go Report Card GoDoc

LLM サーフェスと連携するためのクライアント機能とサーバー機能を備えた、Model Context Protocol(MCP)の Go 実装です。

概要

Model Context Protocol を使うと、アプリケーションは LLM との実際のやり取りとコンテキストの提供を切り分け、標準化された方法で LLM にコンテキストを提供できます。この Go SDK は MCP 仕様全体を実装しており、次のことを簡単に行えます。

  • 任意の MCP サーバーに接続できる MCP クライアントを構築する
  • リソース、プロンプト、ツールを公開する MCP サーバーを作成する
  • stdio や SSE などの標準トランスポートを使用する(近日対応予定)
  • MCP プロトコルのすべてのメッセージとライフサイクルイベントを処理する

小さな例

実際にどのようなものか気になりませんか?以下は、io.FS の内容をリソースとして公開するサーバーの例です。

package main

import (
	"context"
	"flag"
	"io/fs"
	"log"
	"mime"
	"os"
	"path/filepath"
	"strings"

	"github.com/riza-io/mcp-go"
)

type FSServer struct {
	fs fs.FS

	mcp.UnimplementedServer
}

func (s *FSServer) Initialize(ctx context.Context, req *mcp.Request[mcp.InitializeRequest]) (*mcp.Response[mcp.InitializeResponse], error) {
	return mcp.NewResponse(&mcp.InitializeResponse{
		ProtocolVersion: req.Params.ProtocolVersion,
		Capabilities: mcp.ServerCapabilities{
			Resources: &mcp.Resources{},
		},
	}), nil
}

func (s *FSServer) ListResources(ctx context.Context, req *mcp.Request[mcp.ListResourcesRequest]) (*mcp.Response[mcp.ListResourcesResponse], error) {
	var resources []mcp.Resource
	fs.WalkDir(s.fs, ".", func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}
		if d.IsDir() {
			return nil
		}
		resources = append(resources, mcp.Resource{
			URI:      "file://" + path,
			Name:     path,
			MimeType: mime.TypeByExtension(filepath.Ext(path)),
		})
		return nil
	})
	return mcp.NewResponse(&mcp.ListResourcesResponse{
		Resources: resources,
	}), nil
}

func (s *FSServer) ReadResource(ctx context.Context, req *mcp.Request[mcp.ReadResourceRequest]) (*mcp.Response[mcp.ReadResourceResponse], error) {
	contents, err := fs.ReadFile(s.fs, strings.TrimPrefix(req.Params.URI, "file://"))
	if err != nil {
		return nil, err
	}
	return mcp.NewResponse(&mcp.ReadResourceResponse{
		Contents: []mcp.ResourceContent{
			{
				URI:      req.Params.URI,
				MimeType: mime.TypeByExtension(filepath.Ext(req.Params.URI)),
				Text:     string(contents), // TODO: base64 encode
			},
		},
	}), nil
}

func main() {
	flag.Parse()

	root := flag.Arg(0)
	if root == "" {
		root = "/"
	}

	server := mcp.NewStdioServer(&FSServer{
		fs: os.DirFS(root),
	})

	if err := server.Listen(context.Background(), os.Stdin, os.Stdout); err != nil {
		log.Fatal(err)
	}
}

この例をコンパイルして、Claude Desktop(またはほかの MCP クライアント)に接続できます。

{
	"mcpServers": {
		"fs": {
			"command": "/path/to/mcp-go-fs",
			"args": [
				"/path/to/root/directory"
			]
		}
	}
}

ドキュメント

ロードマップ

基本プロトコルの大部分は実装済みです。以下の機能をロードマップに掲載しています。

  • 通知
  • サンプリング
  • ルート

法的事項

MIT ライセンスのもとで提供されています。

コメント

MCP は初めてですか?

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

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