/ ディレクトリ / プレイグラウンド / mcp-go (SDK)
● コミュニティ mark3labs ⚡ 即起動

mcp-go (SDK)

作者 mark3labs · mark3labs/mcp-go

MCPサーバー構築のためのGo SDK — 最小限のボイラープレート・型安全なツール定義。本番環境のGoベースMCPの半数がこれを採用。

mcp-goはModel Context ProtocolのデファクトGo SDKです。トランスポート(stdio + SSE + streamable HTTP)・JSON-RPCフレーミング・ツール/リソース/プロンプトの登録・リクエストバリデーションを処理するため、MCPサーバーのロジックに集中できます。GitHubのmcp-server・dbhub・k8s-mcpなど多数のプロジェクトで採用されています。

なぜ使うのか

主な機能

ライブデモ

実際の動作

mcp-go-mark3labs.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "mcp-go-mark3labs": {
      "command": "go",
      "args": [
        "install",
        "github.com/mark3labs/mcp-go/cmd/example@latest"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "mcp-go-mark3labs": {
      "command": "go",
      "args": [
        "install",
        "github.com/mark3labs/mcp-go/cmd/example@latest"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "mcp-go-mark3labs": {
      "command": "go",
      "args": [
        "install",
        "github.com/mark3labs/mcp-go/cmd/example@latest"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcp-go-mark3labs": {
      "command": "go",
      "args": [
        "install",
        "github.com/mark3labs/mcp-go/cmd/example@latest"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "mcp-go-mark3labs",
      "command": "go",
      "args": [
        "install",
        "github.com/mark3labs/mcp-go/cmd/example@latest"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "mcp-go-mark3labs": {
      "command": {
        "path": "go",
        "args": [
          "install",
          "github.com/mark3labs/mcp-go/cmd/example@latest"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add mcp-go-mark3labs -- go install github.com/mark3labs/mcp-go/cmd/example@latest

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: mcp-go (SDK)

社内API向けの内部MCPサーバーを100行以内で構築する

👤 社内ツールをClaudeに公開したい企業のGo開発者 ⏱ ~45 min intermediate

使うタイミング: GoサービスがあってOpenAPIスキーマを書かずにClaudeからそれを呼び出させたいとき。

前提条件
  • Go 1.21以上 — brewまたはasdfでインストール
フロー
  1. サーバーをスキャフォールドする
    Create a new Go project. Add mcp-go and define one tool: search_orders(customer_id) that calls our internal /v1/orders API.✓ コピーしました
    → main.goが約50行でクリーンにビルドできる
  2. mcp-inspectorでテストする
    Run the server in stdio mode. Open mcp-inspector and verify the tool shows up.✓ コピーしました
    → インスペクターからツールを呼び出せる
  3. Claudeに登録する
    Add the binary to claude_desktop_config.json. Test from Claude with a real customer ID.✓ コピーしました
    → APIからのライブレスポンス

結果: 型安全なMCPツールでClaudeに公開された社内GoAPI。

注意点
  • 長時間実行の呼び出しがstdioをブロックする — 5秒超の呼び出しにはSSEまたはstreamable HTTPトランスポートを使う
組み合わせ: mcp-python-sdk

既存のREST APIをRESTクライアントを壊さずにMCPに移植する

👤 強制的なマイグレーションなしにMCPを採用するバックエンドチーム ⏱ ~60 min intermediate

使うタイミング: RESTとMCPを同じハンドラーで共存させたいとき。

フロー
  1. ハンドラーロジックを抽出する
    Take the existing /api/v1/search handler. Extract the core function so both gin and mcp-go can call it.✓ コピーしました
    → ハンドラーを分割 — HTTPハンドラーが純粋な関数に委譲する形になる
  2. MCPツールでラップする
    Register the pure func as an mcp-go tool. Map URL params to tool inputs.✓ コピーしました
    → 同じロジックが2つのサーフェスで動作する
  3. 単一バイナリで2つのトランスポートを提供する
    Build one binary that runs gin on :8080 and the MCP server over stdio when invoked with --mcp.✓ コピーしました
    → マルチモードバイナリ

結果: 共有コアを持つ1つのGoバイナリでRESTとMCPを提供できる。

SSEを使ってパブリックインターネット上でMCPサーバーをホストする

👤 パブリックMCPを公開する開発者(git-mcp.ioのような) ⏱ ~90 min advanced

使うタイミング: ユーザーにローカルで何もインストールさせずにMCPを追加してほしいとき。

前提条件
  • ドメインとTLS — Caddy/nginxとLet's Encrypt
フロー
  1. SSEトランスポートに切り替える
    Convert the stdio server to SSE. Add CORS for the relevant origins.✓ コピーしました
    → サーバーが/sse接続を受け付ける
  2. ユーザーごとの認証を追加する
    Validate Bearer token on each connection; reject unknown.✓ コピーしました
    → 不正なtokenには401、有効なtokenには200が返る
  3. デプロイしてテストする
    Deploy to fly.io. Add the URL to Claude via mcp-remote.✓ コピーしました
    → リモートURLを指すClaudeからツールが呼び出せる

結果: 認証付きのパブリックインターネット向けMCPサーバー、ユーザー受け入れ準備完了。

注意点
  • ロードバランサーの背後のSSEが長時間接続を切断する — LBのアイドルタイムアウトを5分超に設定する

組み合わせ

他のMCPと組み合わせて10倍の力を

mcp-go-mark3labs + mcp-python-sdk

同一プロジェクトで2つのSDKを異なるサーフェスに使う

Use mcp-go for the perf-critical core; mcp-python-sdk for the data-science adjacency.✓ コピーしました
mcp-go-mark3labs + mcp-registry

構築したMCPを公式レジストリに公開する

Once your mcp-go server works, submit it to the modelcontextprotocol/registry.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
AddTool name, description, handler サーバー起動時に各ツールの登録に使用 0
AddResource uri, name, handler 読み取り可能なリソースを公開する場合に使用 0
AddPrompt name, description, handler 再利用可能なpromptを公開する場合に使用 0
ServeStdio () ローカルstdioモード(最も一般的) 0
ServeSSE addr, opts ネットワーク/リモートモード 0

コストと制限

運用コスト

APIクォータ
N/A — ライブラリ
呼び出しあたりのトークン
N/A
金額
無料 (MIT)
ヒント
特定のマイナーバージョンに固定する。APIは2025年に安定したがマイナーな差異が発生することがある

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: ツールハンドラーが必要とするものに依存
データ送信先: ハンドラーによって制御される

トラブルシューティング

よくあるエラーと対処法

ツールがClaudeに表示されない

capabilityがネゴシエートされているか確認する。ツールはServeStdio呼び出し前に登録する必要がある

確認: Use mcp-inspector to confirm tool listing
stdioメッセージが不正な形式になる

ハンドラーでstdoutに出力しないこと — それはJSON-RPCチャンネル。ログにはstderrを使う

アイドル時にSSEが切断される

定期的なキープアライブを追加し、プロキシのタイムアウトを設定する

代替案

mcp-go (SDK) 他との比較

代替案代わりに使う場面トレードオフ
mcp-python-sdk (official)Pythonで構築しているとき言語が異なるが、どちらもファーストクラスのサポート
TypeScript SDK (official)Node/Bunのエコシステムが合うときJS優先。Goよりパフォーマンスの余裕が少ない

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る