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

golf

作者 golf-mcp · golf-mcp/golf

本番グレードのMCPサーバーを構築するためのPythonフレームワーク — ツールファイルの自動検出、組み込み認証(JWT/OAuth/APIキー)、OpenTelemetryをすぐに利用できます。

Golf(golf-mcp)は、MCPツールを規約に基づいたディレクトリ内のプレーンなPythonファイルとして定義できます。フレームワークがそれらを認証、テレメトリ、ログ処理を備えた本番サーバーにコンパイルします。単発スクリプトではなく、社内MCPプラットフォームを必要とするチーム向けです。

なぜ使うのか

主な機能

ライブデモ

実際の動作

golf.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "golf": {
      "command": "uvx",
      "args": [
        "golf"
      ],
      "_inferred": true
    }
  }
}

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

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "golf": {
      "command": "uvx",
      "args": [
        "golf"
      ],
      "_inferred": true
    }
  }
}

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

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "golf": {
      "command": "uvx",
      "args": [
        "golf"
      ],
      "_inferred": true
    }
  }
}

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

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "golf": {
      "command": "uvx",
      "args": [
        "golf"
      ],
      "_inferred": true
    }
  }
}

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

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "golf",
      "command": "uvx",
      "args": [
        "golf"
      ]
    }
  ]
}

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

~/.config/zed/settings.json
{
  "context_servers": {
    "golf": {
      "command": {
        "path": "uvx",
        "args": [
          "golf"
        ]
      }
    }
  }
}

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

claude mcp add golf -- uvx golf

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

ユースケース

実用的な使い方: golf

Golfで社内MCPプラットフォームを構築する

👤 プラットフォームエンジニア ⏱ ~60 min advanced

使うタイミング: Jira、Grafana、チケットシステムなど20以上の社内ツールを、認証付きの単一MCPとしてClaudeを通じて社員に公開したい場合。

前提条件
  • Python 3.11+, uv — astral.sh/uv
フロー
  1. スキャフォールド
    uvx golf new acme-mcpを実行してディレクトリに移動します。✓ コピーしました
    → tools/、prompts/、resources/ディレクトリを含むプロジェクト
  2. ツールファイルを配置
    async関数をエクスポートするtools/list_tickets.pyを作成します。Golfがスキーマを自動的に設定します。✓ コピーしました
    /toolsリストにツールが表示される
  3. IdPと連携したJWT認証を有効化
    golf.yamlのauth: jwtにIdPのJWKS URLを設定し、mcp:useスコープを要求します。✓ コピーしました
    → 未認証の呼び出しが拒否される

結果: 認可された社員のみが呼び出せ、トレースがAPMに送信されるデプロイ可能なMCP。

注意点
  • ツールのインポート失敗がサーバー起動全体を停止させる — Golfはツールを即時ロードします。インポートエラーを修正するか、重い依存関係を関数内に移動してください

初日からOpenTelemetry対応のMCPを構築する

👤 SRE、オブザーバビリティエンジニア ⏱ ~30 min advanced

使うタイミング: 既にOTelコレクターを運用しており、エージェントのツール呼び出しをトレースに表示したい場合。

フロー
  1. テレメトリを有効化
    golf.yamlでtelemetry.otlpにコレクターのエンドポイントを設定して有効化します。✓ コピーしました
    → ツール呼び出しがOTelバックエンドにスパンとして表示される
  2. 認証情報からユーザーIDをトレースにタグ付け
    JWTのsubからスパンにuser.idを設定するミドルウェアを追加します。✓ コピーしました
    → ユーザーごとの呼び出しグラフ

結果: MCPの利用状況が既存のオブザーバビリティ基盤のファーストクラスの一部になります。

組み合わせ: prometheus

Golfでプロンプトをコードと一緒にバージョン管理する

👤 プロンプトエンジニア ⏱ ~25 min intermediate

使うタイミング: プロンプトがNotionに置かれていて、実際にデプロイされている内容と乖離している場合。

フロー
  1. プロンプトをprompts/ディレクトリに移動
    プロンプトテンプレートと変数を含むprompts/triage.pyを作成します。✓ コピーしました
    → MCPの/prompts/listにプロンプトが表示される
  2. コミットごとにCIで検証
    各プロンプトをサンプル入力でレンダリングするテストを追加し、破壊的変更を検出します。✓ コピーしました
    → プロンプト編集に対するリグレッション安全性

結果: プロンプトがコードと同じPRプロセスを通じてリリースされます。

組み合わせ

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

golf + hyper

PythonベースのGolfサーバーとWASMベースのhyper-mcpプラグインモデルを比較する

同じツールをGolfとhyper-mcpで用意しました。それぞれ100回呼び出してレイテンシとメモリを比較してください。✓ コピーしました
golf + prometheus

Golfのメトリクスエンドポイントをprometheusでスクレイピングする

Prometheusをgolfの/metricsに向けて、prometheus-mcpでp99ツールレイテンシをクエリしてください。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
golf new <name> project_name: str 新しいサーバーを開始する 0
golf build ツールディレクトリをサーバーバイナリ/イメージにコンパイルする 0
golf run --transport stdio|http ローカル開発または本番環境での起動 0

コストと制限

運用コスト

APIクォータ
なし — フレームワークは任意のホスト環境で実行可能
呼び出しあたりのトークン
ツールに依存
金額
無料、オープンソース
ヒント
本番環境ではテレメトリサンプリングを有効にして(例: ツール呼び出しの10%)、OTelインジェストコストを管理してください

セキュリティ

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

認証情報の保管: JWT/OAuthシークレットは環境変数経由で管理。Golfはデフォルトでそれらをログに記録しません
データ送信先: ツールの呼び出し先に依存

トラブルシューティング

よくあるエラーと対処法

Tool not showing in tools list — ツールがツールリストに表示されない

Golfが期待する正確な名前でasync関数がエクスポートされているか確認してください(フレームワークのドキュメントを参照)。__tool__メタデータの欠落が最も一般的な原因です

確認: golf run --debug shows discovery log
JWT validation fails with valid token — 有効なトークンでJWT検証が失敗する

JWKS URLに到達できないか、issuerが間違っています。curlで確認し、ホストのクロックスキューをチェックしてください

Traces not appearing in OTel backend — トレースがOTelバックエンドに表示されない

GolfはOTLP/HTTPを使用します。コレクターでgRPCだけでなくHTTPレシーバーが有効になっていることを確認してください

確認: curl -v $OTLP_ENDPOINT/v1/traces

代替案

golf 他との比較

代替案代わりに使う場面トレードオフ
FastMCP認証やテレメトリ機能なしでよりシンプルなものが必要な場合本番環境の課題は自前で対応が必要
MCP-Nest (NestJS)チームがNestJSを主力にしている場合TypeScriptのみ対応
Arcade構築だけでなく配布・共有にも重点を置きたい場合ターゲット層がやや異なる

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

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