Go言語でMCPサーバーを実装してみた
Go言語でMCP (Model Context Protocol) サーバーを実装した実装記を2026年版でお届けします。プロトコル仕様、Goでの実装パターン、Pythonとの比較、本番運用での知見まで具体的なコード例付きで解説します。
この記事の目次
結論: Go × MCP は静かに最強の組み合わせ
MCP (Model Context Protocol) はAnthropicが提唱し、2025年から急速に普及したAIエージェント向けの標準プロトコルです。2026年現在、Claude DesktopやCursor、Zedなど主要なAIクライアントが対応し、サードパーティのMCPサーバーも数千個公開されています。本記事ではGo言語でMCPサーバーを実装した実体験を共有します。
この記事でわかること:
- MCPの基本仕様とアーキテクチャ
- Goでの実装方針とライブラリ選定
- Python実装との比較 (速度・運用性)
- 本番公開時に気をつけるポイント
MCPとは何か
MCPはLLMクライアントと外部ツール (DB、API、ファイルシステム) を仲介するJSON-RPC 2.0ベースのプロトコルです。サーバーはtools、resources、promptsの3種類のエンドポイントを提供し、クライアントがLLMの判断に応じて呼び出します。トランスポートはstdioとHTTP/SSEの2種類があり、ローカル拡張ならstdio、リモート公開ならHTTP/SSEが定番です。
なぜGoを選んだのか
- シングルバイナリ配布: 利用者は
go installまたは配布バイナリ1つで使える - 並行処理が標準装備: goroutineでツール呼び出しを並行実行
- 低メモリ: 常駐させても30MB程度
- クロスコンパイル容易: macOS / Linux / Windows 全対応が簡単
PythonでMCPサーバーを書いた場合、依存解決とインタープリタ起動だけで500ms以上かかることがあります。Goなら起動50ms以下で、ユーザー体験が明確に違います。
実装の骨格
2026年現在、Goには公式準拠のmcp-goライブラリがあり、これを使えば実装はシンプルです。社内のJira検索ツールを公開する例で解説します。
package main
import (
"context"
mcp "github.com/modelcontextprotocol/mcp-go"
)
func main() {
s := mcp.NewServer("jira-search", "1.0.0")
s.AddTool("search_issues", searchSpec, searchHandler)
s.ServeStdio()
}
ツール定義 (searchSpec) はJSON Schemaで書き、ハンドラはコンテキストとパラメータを受け取って結果を返す関数として実装します。Goのencoding/jsonと相性が良く、型安全な構造体ベースの実装が可能です。
Python実装との比較
同じJira検索MCPをPython版とGo版で並列に作って計測しました。
- 起動時間: Python 480ms / Go 38ms
- 1ツール呼び出し平均レイテンシ: Python 220ms / Go 95ms
- 常駐メモリ: Python 92MB / Go 28MB
- バイナリサイズ: Python (venv) 180MB / Go 14MB
機能差はほぼ無く、運用観点ではGoが圧倒的に楽です。一方、開発速度はPythonのほうが速く、プロトタイプはPython、本番配布はGoという使い分けもよく見ます。
本番公開時の注意点
1. 認証と認可
HTTP/SSEで公開する場合、Bearer Tokenベースの認証は必須です。ツールごとに権限スコープを定義し、誰がどのツールを使えるかを明確にしましょう。
2. レート制限
LLMが暴走するとツールを連打します。golang.org/x/time/rateでユーザー単位のレートリミットを設けましょう。
3. ツール結果の文字数制限
巨大な検索結果をそのまま返すと、LLMのコンテキストを食い潰します。デフォルトで上位N件・最大M KBに切り詰め、必要ならcontinueパラメータでページング可能にする設計が安全です。
4. 監査ログ
誰がいつどのツールをどんな引数で呼んだか、必ず構造化ログに残しましょう。社内ツールでも漏洩事故の原因究明に必須です。
まとめ
Go言語でのMCPサーバー実装は、配布の簡単さ・起動の速さ・運用の楽さでPython実装を一段上回ります。2026年の今、社内向けにAIエージェントが叩けるツールを増やしたいなら、Goでサクッと書いてシングルバイナリで配布するのが最強の戦略です。プロトコル自体が安定しているため、長期的に陳腐化しにくいのも嬉しいポイントです。