MCP4Go について
MCP4Goは、MCPを使ったAIアプリケーションを開発するGo開発者向けの純粋なGo SDKです。プロトコルの詳細を抽象化し、リソース、プロンプト、ツールの高水準な機能を提供します。
主な機能
- 01純粋なGoによるMCP実装
- 02リソースのライフサイクル管理
- 03ツールの定義と呼び出し
- 04プロンプトとサンプリングパラメーター
- 05プラグイン可能な拡張アーキテクチャ
- 06ログ、診断、エラー処理
活用シーン
- 01GoアプリケーションへのMCP機能の組み込み
- 02MCPリソースのライフサイクル管理
- 03MCPクライアントへのツール呼び出しの提供
- 04独自のMCP機能の拡張
MCP 対応
SDKはJSON-RPC通信を含むMCPプロトコルを実装し、サーバー構築に使えるリソース、プロンプト、ツールなどの機能を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP4Go
MCP4Go は、Model Context Protocol(MCP) の Go 実装です。プロトコルの複雑さを抽象化し、AI アプリケーションの開発を簡素化することを目的としています。
特徴
- 純粋な Go による MCP プロトコルの完全な実装
- 一般的な MCP リソースのための高水準な抽象化
- カスタム拡張に対応するプラグイン可能なアーキテクチャ
- 包括的なドキュメントとサンプル
- 堅牢なエラー処理を備えた本番環境対応
インストール
MCP4Go には Go 1.18 以降が必要です。Go modules を使用してインストールします。
go get github.com/mcp4go/mcp4go
はじめに
MCP4Go を使い始めるには、Go アプリケーションにパッケージをインポートします。
package main
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/mcp4go/mcp4go/pkg/logger"
"github.com/mcp4go/mcp4go/protocol"
"github.com/mcp4go/mcp4go/server"
"github.com/mcp4go/mcp4go/server/iface"
"github.com/mcp4go/mcp4go/server/transport"
_ "time/tzdata" // Load all time zones
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
_logger := logger.DefaultLog
// Listen for interrupt signals for graceful exit
signalCh := make(chan os.Signal, 1)
signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)
go func() {
<-signalCh
_logger.Logf(ctx, logger.LevelWarn, "Received shutdown signal")
cancel()
}()
type timeRequest struct {
TimeZone string `json:"time_zone,omitempty" description:"time zone default is Asia/Shanghai"`
}
// Create standard input/output transport layer
stdioTransport := transport.NewStdioTransport()
// Create MCP server and configure options
srv, cleanup, err := server.NewServer(
stdioTransport,
server.WithServerInfo(protocol.Implementation{
Name: "time-mcp",
Version: "0.1.0",
}),
server.WithInstructions("Welcome to Time MCP! This server provides Time tools."),
server.WithToolBuilder(iface.NewFunctionalToolsBuilder(
iface.NewFunctionalToolWrapper(
"time",
"get current time",
func(ctx context.Context, args timeRequest) ([]protocol.Content, error) {
if args.TimeZone == "" {
args.TimeZone = "Asia/Shanghai"
}
getTimezoneTime := func(_ context.Context, timeZone string) time.Time {
if timeZone == "" {
timeZone = "Asia/Shanghai"
}
loc, err := time.LoadLocation(timeZone)
if err != nil {
return time.Now()
}
return time.Now().In(loc)
}
currentTime := getTimezoneTime(ctx, args.TimeZone)
return []protocol.Content{
protocol.NewTextContent(fmt.Sprintf("current time is %s", currentTime), nil),
}, nil
}),
)),
)
if err != nil {
log.Printf("Failed to create server: %v\n", err)
return
}
defer cleanup()
// Start the server
_logger.Logf(ctx, logger.LevelWarn, "Starting Time MCP server")
if err := srv.Run(ctx); err != nil {
_logger.Logf(ctx, logger.LevelError, "Server error: %v", err)
return
}
_logger.Logf(ctx, logger.LevelWarn, "Server shutdown complete")
}
プロトコルの実装
MCP4Go は、次の機能に対応した Model Context Protocol の完全な実装を提供します。
- JSON-RPC 通信
- リソースのライフサイクル管理
- プロンプトエンジニアリング
- ツールの定義と呼び出し
- サンプリングパラメーター
- ロギングと診断
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。
コントリビューション
コントリビューションを歓迎します!詳細については、コントリビューションガイドをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。