mcpField
L
LLM Pricing

LLM Pricing

リモート
github.com/skakumanuAI・エージェント01 日前に更新
リポジトリ

LLM Pricing について

LLM Pricingは、LLMモデルの比較やルーティングを行うチーム向けのMCPサーバー兼価格サービスです。価格をリアルタイムのレジストリと照合し、コストと品質に基づくモデル推薦や実利用額の記録を提供します。

主な機能

  1. 0131プロバイダーのリアルタイム価格
  2. 02価格変動とデータ品質の確認
  3. 03コストと品質を考慮したモデル推薦
  4. 04実利用量と支出の記録
  5. 05価格履歴とトレンドデータ

活用シーン

  1. 01モデルのコスト見積もりと比較
  2. 02タスクに適したモデルの選択
  3. 03掲載価格の変動確認
  4. 04コーディングエージェントのセッション費用分析

MCP 対応

STDIOとHTTP経由で、価格情報、モデル推薦、価格検証、利用記録など29のMCPツールを公開します。クライアントはホスト済みHTTPエンドポイントに接続するか、STDIOでサーバーを実行できます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://llm-pricing-api.fly.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npmllm-pricing-mcp1.0.2

ツール

詳細

LLM Pricing MCP サーバー

CI/CD Pipeline License: MIT

ほとんどのLLM価格ツールは、静的な参照表です。このツールは、独立して管理される最新の価格レジストリと自らの価格データを照合し、相違があれば通知します。価格を提示するだけでなく、コスト と 品質に基づいてモデルを選択し、実際に使った金額を追跡します。これらすべてを、RESTful API(FastAPI)、STDIOとHTTPに対応した 29個のMCPツール、対話型エージェント+RAGパイプライン、ブラウザベースのUI、セルフサービスの請求ダッシュボードで実現し、主要なLLMプロバイダー31社の価格データを提供します。

公開先:https://llm-pricing-api.fly.dev


このツールの特長

  • 信頼するだけでなく、検証できる価格 — check_price_drift と get_data_quality は、管理されているすべての価格を最新の外部レジストリと照合します。5%を超える乖離がある価格は保留し(通知なしに提供することはありません)、カタログ全体の信頼度を示す単一の confirmed_pct スコアを提供します。
  • 価格を提示するだけでなく、選択します — recommend_model と optimize_workload は、実際のタスクに合わせてコスト と 品質からモデルを選びます。より安価な選択肢が品質を損なう場合はその旨を示し、黙って推奨することはありません。
  • 実際に使った金額を追跡 — record_usage、analyze_session_usage、import_session_usage は実際の支出を記録・分析します。使用状況のリアルタイム追跡が設定されていないコーディングエージェントのセッションも、後から取り込めます。
  • MCP サーバーだけではありません — 同じ価格エンジンが、REST API、ブラウザUI(計算機、横並び比較、履歴/トレンド)、セルフサービスの請求ダッシュボードも支えています。

機能

MCP インターフェース(STDIO+HTTP)
  • 29個のMCPツール:get_all_pricing、estimate_cost、compare_costs、predict_cost、optimize_workload、recommend_model、check_price_drift、get_data_quality、get_performance_metrics、get_use_cases、get_ide_pricing、get_telemetry、get_pricing_history、get_pricing_trends、register_price_alert、list_price_alerts、delete_price_alert、get_pricing_export_url、list_conversations、delete_conversation、ask_agent、record_usage、get_usage_summary、register_budget_alert、list_budget_alerts、delete_budget_alert、get_cache_stats、analyze_session_usage、import_session_usage
  • get_all_pricing、estimate_cost、compare_costs、get_use_cases、recommend_model は、オプションの currency/country 引数を受け取ります(v1.76.0)。指定すると、換算後の local_* 数値と currency_conversion ブロックが追加されます。どちらも省略した場合、出力は変わりません。
  • STDIO トランスポート — ローカルのClaude Desktop連携向けに、STDIO経由でJSON-RPC 2.0を使用します。
  • HTTP トランスポート — リモートMCPクライアント向けに、HTTP経由でJSON-RPC 2.0を使用する POST /mcp を提供します。ローカルへのインストールは不要です。
  • MCPプロトコルのバージョン:2024-11-05
RESTful API
  • 31 のプロバイダー(600 以上のモデル)のリアルタイム料金を、スマートキャッシュを利用した非同期取得で提供します。各料金の出典も示されます。price_source_kind は、プロバイダーの料金表で確認された場合は provider、参照料金レジストリから取得した場合は registry(registry_key と日付も表示)です。レジストリ由来のモデルは見積もりや比較に利用できますが、プロバイダー確認済みとして数えられることはありません。また、週次の取り込み PR により、対象プロバイダーの新しいレジストリモデルが自動的に追加されます
  • コスト見積もり:単一モデル(POST /cost-estimate)と一括比較(POST /cost-estimate/batch)
  • 使用通貨での料金(v1.76.0):GET /pricing、POST /cost-estimate、POST /cost-estimate/batch、GET /use-cases、POST /router/recommend、GET /pricing/public は、currency / country(クエリまたは X-Currency / X-Country ヘッダー)を受け付けます。USD の値はそのままに、換算額を追加の local_* フィールドとして返します。ブラウザーの計算ツールと比較ページでは、訪問者の国に基づいて通貨が初期設定され、切り替えもできます。詳しくは通貨とロケールをご覧ください
  • パフォーマンス指標、ユースケースの推奨、料金履歴、トレンド
  • フィードバックループを備えたルーター推奨(POST /router/recommend)。GET /cache-stats では、約 5 分間の推奨キャッシュにおける、プロセス起動後からのヒット/ミス統計を確認できます
  • 実際の使用量/支出の追跡(POST /usage、GET /usage/summary)。/cost-estimate に対する実コスト版です。イベントに session_id を付けると、必要に応じて 1 つのセッションを分析し(GET /usage/session/{session_id})、根拠に基づく推奨と推定節約額を取得できます
  • OpenAI 互換プロキシ(POST /v1/chat/completions)により、SDK をそのまま統合できます
  • ディスパッチゲートウェイ(v1.77.0):同じエンドポイントに dispatch ポリシーと独自のプロバイダーキーを追加すると、条件を満たす最適なモデルが実際に実行されます。品質の下限を決して下回らないフェイルオーバー、選択されたモデル・理由・実際のコスト・節約額を含むレシート、予算の強制停止、シャドー A/B テスト、組織スコープの監査エクスポートを利用できます。詳しくはディスパッチゲートウェイをご覧ください
  • 料金変更と予算支出のしきい値を通知する Webhook(POST /usage/alerts、HMAC-SHA256 署名付き。hard_stop: true の場合、しきい値到達後は組織のディスパッチもブロックされます)
  • インタラクティブなドキュメント:/docs(Swagger)と /redoc
リポジトリコスト監査ツール(scripts/audit_repo.py)
  • Python コードベースを静的にスキャンし、LLM SDK の呼び出し箇所(OpenAI、Anthropic、Google、LangChain)を検出します。認証情報や、対象コードへのネットワーク呼び出しは必要ありません
  • predict_cost と同じ料金データとトークン計算を使って、呼び出し箇所ごとのコストを見積もります
  • より安価なモデル、プロンプトキャッシュ、Batch API(ループ内の呼び出しやオフライン処理と見られる経路向け)、タスクに応じた適正化(単純なタスクに最上位モデルを使用している場合)を提案します。また、複数の呼び出し箇所で同じプロンプトが重複している場合も検出します。詳しくは python scripts/audit_repo.py --help をご覧ください
  • 静的な見積もりのみを行います(設定可能な月間呼び出し回数を想定)。実際の数値を得るには、デプロイ後に POST /usage で記録した実支出と組み合わせてください
AI ネイティブ SDLC パイプライン(Claude Code を使用するコントリビューター向けの /release-feature)
  • 1 つのエージェントがすべてを一度に処理するのではなく、専用のフェーズエージェントを使って機能リクエストを進めます:仕様 → 設計 → コード → レビュー → テストとリリース
  • 仕様では、実装の詳細には一切触れずに機能の 内容(要件、受け入れ基準、対象外事項)を定めます。設計では、確定した仕様に基づいて実装の 方法(アプローチ、バージョンの更新、ブランチ名)を定めます。どちらのフェーズも、もう一方の判断を再導出しません
  • レビューでは、差分を対象に、正確性、セキュリティ、簡素化を担当する 3 つのエージェントを並行して実行します。テストとリリースでは、仕様の受け入れ基準に照らして結果を確認し、レビューでの指摘をトリアージし、このリポジトリのリリースチェックリストをすべて実行します。また、コミット、プッシュ、PR の作成を行うのはこのフェーズのみです
  • .claude/agents/phase-*.md(5 つのフェーズエージェント)と .claude/workflows/release-feature.js(コード → レビュー → テストのオーケストレーター)で定義されています。CLAUDE.md の「AI-Native SDLC Pipeline」セクションを参照してください
  • develop を対象とするオープン PR の状態で終了します。マージするかどうかは引き続き人間が判断します
エージェントと RAG パイプライン
  • 設定可能な LLM バックエンド:OpenAI GPT-4o-mini(デフォルト)、または環境変数で指定する Anthropic Claude
  • ReAct ループエージェント:29 個ある MCP ツールのうち 26 個を利用できます(ask_agent、get_telemetry、get_cache_stats は除外)
  • TF-IDF RAG:価格ドキュメントを対象とする top-k 検索
  • 会話メモリ:セッションごとの SQLite 永続化、ターン数の上限を設定可能
  • チャット UI:/chat — ReAct の進行状況をリアルタイムでストリーミング表示します
  • POST /agent/chat — 同期型の JSON レスポンス
  • POST /agent/chat/stream — SSE ストリーム(thinking / tool_call / tool_result / answer / done)
ブラウザー UI
パス説明
/マーケティング用ランディングページ
/chat対話型 AI エージェント
/calculatorインタラクティブなコスト計算ツール
/compareモデルの並列比較
/history価格履歴チャート(Chart.js)
/trends価格変動ランキング
/widget埋め込み可能な価格表
/billingセルフサービスのサインアップとアップグレード用ダッシュボード
/conversations会話履歴ビューアー
/adminサーバー統計、レート制限、顧客
/mcp-setupMCP 統合ハブ
/api-docsAPI リファレンス(Swagger/ReDoc)
/whats-newリリースノートのタイムライン

すべての UI は、一貫したダークデザインシステム(CSS 変数、'Segoe UI' フォント、#0f1117 の背景、#7c6af7 のアクセント)を共有し、モバイルに完全対応しています。画面上部に固定されるハンバーガーナビゲーションバーも備えています。

SaaS 請求(Stripe)
  • 無料プランのサインアップ:POST /billing/signup(メールアドレス → API キー。Stripe は不要)
  • 有料プラン(Pro/Enterprise)は Stripe Checkout 経由で登録し、レート制限を自動更新します
  • セルフサービスポータル:GET /billing/portal
  • 使用状況ダッシュボード:GET /billing/me(ルーター呼び出し数、節約額、受け入れ率)
  • Stripe Webhook ハンドラー:POST /billing/webhook
API キーのプランとレート制限
  • Free:30 req/min · Pro:120 req/min · Enterprise:600 req/min
  • プランは請求 DB(顧客の API キー)から取得されます。または、有効なグローバル MCP_API_KEY もリクエストに含まれている場合に限り、X-Api-Key-Tier ヘッダーから取得されます。匿名リクエストには常にデフォルトのバケットが適用されるため、このヘッダーを使って自分で上位の制限を選ぶことはできません
  • GET /rate-limits/tiers — プランの詳細を一覧表示する公開エンドポイント
セキュリティと品質
  • ほとんどのエンドポイントは公開されています(読み取り専用の価格データ、UI、MCP ツール)。
  • 保護されたエンドポイント(/billing/me、/router/recommend、/router/feedback、/billing/portal)には、課金 API キーまたはグローバルな MCP_API_KEY が必要です。
  • /v1/chat/completions のディスパッチモードには、無料枠の顧客キーが必要です(ディスパッチでは組織ごとの台帳に書き込むため、グローバルな MCP_API_KEY は拒否されます)。プロバイダーキーはリクエストごとに持ち込む方式(X-Provider-Key-* ヘッダー)で、一時的に使用され、保存、記録、エコーされることはありません。プロンプトや応答も同様です。
  • クライアント IP とティア別のバケット単位でレート制限を適用します。匿名の /agent/chat と /agent/chat/stream エンドポイントも対象です(API キーは不要ですが、各呼び出しで運営者のキーを使って LLM を実行するため、スロットリングされます)。
  • リクエストサイズの上限(デフォルトは 1MB)。
  • テスト 1870 件が合格。すべての PR で CI/CD を実行(test → lint → bandit → OSV → gitleaks → deploy)。
デプロイ
  • プライマリ:Fly.io — shared-cpu-1x、512MB、約 $3.40/月。
  • CI/CD:GitHub Actions — master への push 時に test → deploy を実行。
  • ブルーグリーンデプロイに対応し、正常なシャットダウン(SIGTERM/SIGINT)をサポートします。
  • ヘルスプローブ:/health、/health/live、/health/ready、/health/detailed

目次


クイックスタート(Claude Desktop)

Cursor に追加 VS Code に追加

上記のワンクリックリンクを開くと、Cursor/VS Code が直接起動します(ベストエフォート対応です。ディープリンクのサポート状況はクライアントのバージョンによって異なります)。それ以外のクライアントでは、以下のコピー&ペースト用設定を使います。こちらは常に動作します。

オプション A — リモート(インストール不要)

claude_desktop_config.json に追加します。

{
  "mcpServers": {
    "llm-pricing": {
      "url": "https://llm-pricing-api.fly.dev/mcp"
    }
  }
}

Claude Desktop を再起動します。29 個すべての価格ツールをすぐに利用できます。

オプション B — npx 経由の STDIO(クローンも Python も不要)

command ベースの STDIO サーバーのみをサポートするクライアント向けです(リモート/HTTP の直接設定には非対応)。これは、標準入力/標準出力を上記のホスト型サーバーに中継する、依存関係ゼロの npm パッケージを実行します。クローンは不要で、Python や pip install も必要ありません。

{
  "mcpServers": {
    "llm-pricing": {
      "command": "npx",
      "args": ["-y", "llm-pricing-mcp"]
    }
  }
}

Claude Desktop を再起動します。設定オプション(セルフホスト、タイムアウト)については、npm/llm-pricing-mcp/README.md を参照してください。

オプション C — ローカル STDIO、完全オフライン
  1. クローンしてインストールします。
git clone https://github.com/skakumanu/llm-pricing-mcp-server.git
cd llm-pricing-mcp-server
python -m venv .venv && source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt
  1. claude_desktop_config.json に追加します。
{
  "mcpServers": {
    "llm-pricing": {
      "command": "python",
      "args": ["/absolute/path/to/mcp/server.py"],
      "cwd": "/absolute/path/to/llm-pricing-mcp-server",
      "env": { "PYTHONUNBUFFERED": "1" }
    }
  }
}

詳しいセットアップ、Windows のパス、トラブルシューティングについては、docs/CLAUDE_INTEGRATION.md を参照してください。


クイックスタート(API)

サーバーの実行
python src/main.py
# or
uvicorn src.main:app --reload --host 0.0.0.0 --port 8000
公開エンドポイント(認証不要)
# Get all pricing
curl http://localhost:8000/pricing

# Estimate cost
curl -X POST http://localhost:8000/cost-estimate \
  -H "Content-Type: application/json" \
  -d '{"model_name": "gpt-4o", "input_tokens": 1000, "output_tokens": 500}'

# Chat with the agent
curl -X POST http://localhost:8000/agent/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "What is the cheapest model for RAG pipelines?"}'

# OpenAI-compatible routing proxy
curl -X POST http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "gpt-4o", "messages": [{"role": "user", "content": "hi"}]}'
保護されたエンドポイント(課金 API キーまたは MCP_API_KEY が必要)
# Get your API key via free signup
curl -X POST http://localhost:8000/billing/signup \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]"}'

# Use the returned api_key for protected endpoints
curl -H "x-api-key: <your-api-key>" \
  http://localhost:8000/billing/me

curl -X POST http://localhost:8000/router/recommend \
  -H "x-api-key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"max_cost_per_1m_tokens": 5}'
エージェントのストリーミング
curl -X POST http://localhost:8000/agent/chat/stream \
  -H "Content-Type: application/json" \
  -d '{"message": "Compare GPT-4o vs Claude Sonnet pricing"}' \
  --no-buffer

イベント:thinking → tool_call → tool_result → answer → done


HTTP MCP トランスポート

サーバーは、HTTP 経由の MCP プロトコル(プロトコルバージョン 2024-11-05)をサポートする JSON-RPC 2.0 エンドポイントを POST /mcp で公開しています。

サポートされているメソッド
メソッド説明
initializeハンドシェイク — サーバー情報と機能を返します
initialized通知 — 204 を返します
tools/list入力スキーマとともに 29 個すべてのツールを一覧表示します
tools/callツールを実行します
例
# List tools
curl -X POST https://llm-pricing-api.fly.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

# Call a tool
curl -X POST https://llm-pricing-api.fly.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0", "id": 2, "method": "tools/call",
    "params": {
      "name": "estimate_cost",
      "arguments": {"model_name": "gpt-4o", "input_tokens": 1000, "output_tokens": 500}
    }
  }'

GET /mcp はサーバー情報と設定スニペットを返します。完全なインタラクティブドキュメントは /docs(Swagger UI)と /redoc にあります。


API リファレンス

公開エンドポイント
メソッドパス説明
GET/ランディングページ(HTML)
GET/pricingすべてのモデルの価格(?provider= フィルター。?currency=/?country= を指定すると local_prices を追加)
GET/localeこのリクエストで解決された通貨/国(ブラウザーのプリセット。IP は一切返しません)
GET/currency/rates同梱された USD 為替レート表(基準日、7 日間の古さフラグ)
GET/models利用可能なすべてのモデル
GET/performanceスループット、レイテンシ、コンテキストウィンドウ、品質スコア
GET/use-casesモデルのユースケースに関する推奨
GET/telemetryサーバーの使用状況メトリクスと分析
GET/admin/stats集計されたサーバー統計
GET/admin/rate-limits現在のレート制限状態
GET/rate-limits/tiersAPI ティアの定義
GET/pricing/history価格履歴スナップショット
GET/pricing/trends価格変動ランキング
GET/pricing/public公開価格(認証不要、埋め込みに安全)
GET/pricing/history/exportCSV/JSON エクスポート
POST/cost-estimate単一モデルのコスト見積もり
POST/cost-estimate/batch複数モデルのコスト比較
POST/agent/chatブロッキング方式のエージェントチャット
POST/agent/chat/streamストリーミング方式のエージェントチャット(SSE)
GET/agent/conversations会話の一覧
DELETE/agent/conversations/{id}会話の削除
GET/api/versionsAPI バージョン情報
GET/pricing/alerts/signing-infoWebhook 署名キー情報
POST/v1/chat/completionsOpenAI 互換のルーティングプロキシ(推奨のみ。下記のディスパッチモードには顧客キーが必要)
GET/dispatch/providers実行可能なプロバイダー、そのキーのヘッダー、ディスパッチ可能なモデルとその理由
GET/mcpHTTP MCP サーバー情報
POST/mcpHTTP MCP JSON-RPC 2.0
POST/billing/signup無料ティアへの登録 → API キー
GET/billing請求ダッシュボード(HTML)
POST/billing/webhookStripe Webhook
GET/healthヘルスチェック
GET/health/liveKubernetes のライブネスプローブ
GET/health/readyKubernetes のレディネスプローブ
GET/health/detailedサービスの状態を含む詳細なヘルス情報
保護されたエンドポイント(請求用 API キーまたは MCP_API_KEY が必要)
メソッドパス説明
POST/router/recommendスマートなモデルルーティングの推奨
POST/router/recommend/streamストリーミング方式のルーター(SSE)
POST/router/feedbackルーティングに関するフィードバックを送信
GET/telemetry/savingsルーターの節約レポート
POST/usage実際の使用イベントを 1 件記録(コストはサーバー側で計算)
POST/usage/batch複数の使用イベントを一度に記録
GET/usage/summary組織ごとのモデル/プロバイダー別の実際の支出概要
POST/v1/chat/completions + dispatchディスパッチモード(顧客キーのみ):X-Provider-Key-* を使用して条件を満たす最適なモデルを実行し、フェイルオーバーとレシートに対応
GET/dispatch/receipts組織のディスパッチレシートのメタデータのみを含む JSON/CSV エクスポート(顧客キーのみ)
POST/billing/checkoutStripe Checkout セッション
GET/billing/portalStripe 請求ポータル
GET/billing/me使用状況ダッシュボード
POST/pricing/alerts価格変更 Webhook を登録
GET/pricing/alertsアラートの一覧
DELETE/pricing/alerts/{id}アラートを削除
リクエスト/レスポンスの主な例
POST /cost-estimate
// Request
{"model_name": "gpt-4o", "input_tokens": 1000, "output_tokens": 500}

// Response
{
  "model_name": "gpt-4o", "provider": "OpenAI",
  "input_tokens": 1000, "output_tokens": 500,
  "input_cost": 0.0000025, "output_cost": 0.000005,
  "total_cost": 0.0000075, "currency": "USD"
}
POST /billing/signup
// Request
{"email": "[email protected]"}

// Response
{
  "api_key": "abc123...", "org_id": "org-xyz...",
  "tier": "free", "message": "Welcome! Your free API key is ready."
}
POST /router/recommend
// Request (x-api-key header required)
{"max_cost_per_1m_tokens": 5, "task_type": "code"}

// Response
{
  "recommended": {"model_name": "gpt-4o-mini", "provider": "OpenAI", ...},
  "alternatives": [...],
  "reason": "Best quality/cost ratio for code tasks under $5/1M tokens",
  "routing_id": "uuid4..."
}

通貨と言語・地域設定

API が提供するすべての価格は、米ドル建ての希望小売価格です。v1.76.0 以降、価格一覧、単一およびバッチのコスト見積もり、ユースケース、ルーターの推奨結果、公開価格エンドポイントでは、換算元の米ドルと併せて、13 種類の通貨(USD、EUR、GBP、INR、JPY、CAD、AUD、BRL、CNY、SGD、CHF、KRW、MXN)で各金額を表示できます。

curl "http://localhost:8000/pricing?currency=EUR"            # every model gains local_prices
curl -H "X-Country: IN" "http://localhost:8000/pricing/public" # INR via the country
curl -X POST "http://localhost:8000/cost-estimate?country=JP" \
  -H "Content-Type: application/json" \
  -d '{"model_name": "gpt-4o", "input_tokens": 1000, "output_tokens": 500}'
  • 入力と優先順位:currency クエリ > X-Currency ヘッダー > country クエリ > X-Country ヘッダー > プラットフォームの位置情報ヘッダー(CF-IPCountry、X-Vercel-IP-Country、CloudFront-Viewer-Country、X-Country-Code)> IP による可能な範囲での検索 > USD。通貨が明示されている場合は、国が明示されていても通貨が優先されます(国はレスポンスのラベルとしてのみ使用されます)。
  • 形式:換算値は追加フィールドとして提供されます。モデルごとの local_prices、local_cost、local_cost_range と、1 つの currency_conversion ブロック(currency、rate、rate_as_of、rate_age_days、rate_is_stale、rate_source、country、country_source、currency_source、fallback_to_usd、fallback_reason、note)です。USD のフィールド名や通貨単位が変更されることはありません。また、何も指定または検出されない場合、新しいフィールドは一切表示されません。
  • 拒否とフォールバック:明示的に指定されたコードが 13 種類の対応通貨に含まれない場合、対応通貨の一覧を本文に含む 400 が返されます(暗黙に USD に切り替わることはありません)。通貨が対応していない国の場合は、fallback_to_usd: true、fallback_reason: "country_not_mapped" として USD が使用されます。
  • レート:リポジトリ内のテーブル data/exchange_rates.json は、Frankfurter(利用できない場合は ECB の参照レート)を通じて scripts/refresh_exchange_rates.py で毎週更新され、人手でマージされる PR を経て反映されます。リクエスト時にデータを取得することはありません。レートが7 日より古くても引き続き使用されますが、rate_is_stale: true として示されます。GET /currency/rates では、テーブルと as_of 日付、および作成時のプレースホルダーのままかどうかを確認できます。換算額は参考値です。プロバイダーへの支払いは USD 建てです。
  • ブラウザー:/calculator と /compare には通貨セレクターがあり、検出された国の通貨が初期設定されます(検出できない場合は USD)。変更するとすべての金額が再表示され、選択内容はページ間の移動や再読み込み後も保持されます(localStorage の llmp.currency)。ランディングページにはセレクターと注記のみが表示されます。
  • プライバシー:クライアントの IP は国の特定に一時的に使用されるだけで、それ以外の用途には使われません。この機能によって保存・記録されることはなく、レスポンスに含まれることもありません。レスポンスに含まれる場合があるのは、特定された ISO 国コードのみです。同じモデルが全員に同じ順序で表示され、コストの価格帯は USD 建てのままです。
  • MCP:get_all_pricing、estimate_cost、compare_costs、get_use_cases、recommend_model は、任意の currency と country を受け付けます。MCP では位置情報を検出しません。
ディスパッチゲートウェイ

v1.77.0 以降、OpenAI 互換エンドポイントでは、推奨モデルを実際に実行できます。dispatch ポリシー、無料枠サービスキー、および自身のプロバイダーキーを送信すると、条件を満たす最適なモデルが実際に実行され、実際の usage と dispatch_receipt を含む通常の chat.completion が返されます。dispatch を指定しない場合、エンドポイントは従来どおり推奨のみを行うプロキシです。

import os
from openai import OpenAI

SERVICE_KEY = os.environ["LLM_PRICING_SERVICE_KEY"]   # your free-tier key from POST /billing/signup

client = OpenAI(
    base_url="https://llm-pricing-api.fly.dev/v1",
    api_key=SERVICE_KEY,
    default_headers={                      # bring your own provider keys — used transiently, never stored
        "X-Provider-Key-OpenAI": "...",
        "X-Provider-Key-Anthropic": "...",
        "X-Provider-Key-Google": "...",
    },
)
resp = client.chat.completions.create(
    model="gpt-4o",                        # what you would have used — the receipt reports savings against it
    messages=[{"role": "user", "content": "Summarise this ticket..."}],
    max_tokens=300,
    extra_body={"dispatch": {"objective": "cheapest", "min_quality_score": 70,
                             "max_request_cost_usd": 0.01, "request_id": "ticket-4812"}},
)
print(resp.choices[0].message.content)
receipt = resp.model_extra["dispatch_receipt"]
print(receipt["chosen"]["model"], receipt["cost"]["actual_usd"],
      receipt["savings"]["vs_requested_model"]["savings_usd"])
  • プリセット(dispatch.objective):

    目的選択内容
    balanced(デフォルト)ルーターの品質あたりのコスト順
    cheapestすべての制約を満たすモデルのうち、加重平均の 100 万トークンあたりのコストが最も低いモデル
    best_quality品質スコアが最も高いモデル(同点の場合は安価なモデル)
    lowest_latency既知のレイテンシが最も低いモデル(不明なモデルは最後)
    pinnedpinned_model をそのまま選択。レシートには、下限を満たす最安モデルを選んだ場合に節約できた金額が記載されます
    厳格な制約ではルーターと同じ語彙を使用します — min_quality_score、max_cost_per_1m_tokens、
    min_context_window、task_type、preferred_provider、exclude_reasoning_models — さらに allow /
    deny リスト(モデル名または provider:<name>)と max_request_cost_usd(プロンプトトークン数 × 入力価格 +
    max_tokens × 出力価格。上限を設定すると、その max_tokens(指定した値、またはサーバーのデフォルトである 1024)も
    プロバイダーに送信されるため、上限が実際に呼び出しを制限します)。すべてのフィールドは省略可能です。空の
    dispatch: {} はフェイルオーバーが有効なバランス重視の設定を意味します。
  • 適格性:プロバイダーが価格を確認済みのモデル(価格の不整合により保留中のモデル、価格設定されたことのないモデル、 廃止済みモデルはディスパッチされません)のうち、実行可能なプロバイダー — OpenAI、Anthropic、Google(Gemini API)、 Groq、Together AI、Fireworks AI、DeepSeek、Mistral AI、xAI。その他はすべて推奨専用です — に属し、 プロバイダーキーが指定されているモデルのみが対象です。GET /dispatch/providers にはこれらすべてがあらかじめ表示されます。 レシートには除外理由がすべて記載され、適格なモデルがない場合は、プロバイダーを呼び出す前に、エラーで 対象を絞り込んだ制約が示されます。

  • フェイルオーバー(dispatch.failover、デフォルトで有効、max_attempts は 3、timeout_ms は 30000):タイムアウト、5xx、 429、コンテキスト長超過、モデルが見つからない場合は、すべての制約を引き続き満たす次の候補に移ります(コンテキスト長超過の場合は、 より大きなコンテキストウィンドウを持つモデルに限ります)。フェイルオーバーによって品質の下限を下回る場合は、ディスパッチは失敗し、 all_attempts_failed に下限が示されます。お客様のプロバイダーキーで 401/403 が発生した場合は、そこで終了します(provider_auth_failed に プロバイダー名が示されます)。固定指定したモデルからはフェイルオーバーしません。

  • レシート:chosen(モデル、プロバイダー、品質、ブレンド価格、データの出所)、reason、candidates (ランキング順)、excluded + excluded_summary、usage、cost(actual_usd = プロバイダーのトークン数 × カタログ価格)、savings(vs_most_expensive_eligible、vs_requested_model、固定指定時の forgone_vs_cheapest_meeting_floor)、latency(合計/プロバイダー/オーバーヘッド)、attempts、 shadow、dispatch_id、request_id。ポリシーに currency / country を追加するか、X-Currency / X-Country を指定すると、通貨建ての local ブロックが表示されます。明示的な指定のみが対象であり、このエンドポイントが 場所を推定することはありません。

  • 台帳:ディスパッチが成功するたびに、正確な使用イベントを 1 件(リトライ時は request_id で重複を排除します — プロバイダー呼び出し自体は重複排除されません)と、使用済みとしてマークされたルーティング判断を 1 件記録します。そのため、 GET /usage/summary、GET /telemetry/savings、受け入れ率、予算アラートには、実際にディスパッチされた費用が反映されます。

  • 予算の強制停止:顧客 API キーを使用して POST /usage/alerts に hard_stop: true を指定すると、記録された支出が アラート期間のしきい値に達した時点で、お客様の組織へのディスパッチを 402 budget_hard_stop で拒否します。アラートはキーに紐づく 組織に限定されます(別の組織のアラートを停止、一覧表示、削除することはできません)。Webhook はこれまでどおり実行され、 組織に紐づかないアラートは通知専用です。

  • シャドウ A/B:shadow: {"model": "..."} または shadow: {"objective": "best_quality"} を指定すると、 お客様自身のキーを使って 2 つ目のモデルを並行実行します。返されるのはプライマリの完了結果のみです。レシートには両方のモデルの 費用、レイテンシ、結果と差分が含まれます。シャドウの失敗によってリクエストが失敗することはありません。費用上限は プライマリとシャドウの合計に適用されます(上限を超える場合、シャドウはスキップされ、その旨が報告されます)。シャドウの費用も 記録されます — 実際に費用が発生します。

  • 監査エクスポート:GET /dispatch/receipts?format=csv|json&since=&until=&outcome=&limit= は、 お客様の組織のレシートをメタデータ行として返します(保持期間は 90 日)。行にプロンプト、完了結果、キーが含まれることはありません。

  • このリリースの対象範囲:非ストリーミング、テキストのみ、単一選択のチャット補完です。stream: true、tools / functions / tool_choice、n > 1、テキスト以外の response_format、画像コンテンツパーツは、該当する機能名を 示して事前に拒否されます(何かが黙って破棄されることはありません。user は受け付けますが、転送されません)。新しい MCP ツールはありません。 プール型のサービス負担キーと、アカウントごとに保存されたキーは明示的に対象外です。

  • プライバシー:プロバイダーキーはリクエストヘッダーと送信先のプロバイダー呼び出しにのみ存在します。プロンプトと完了結果は リクエスト、プロバイダー呼び出し、choices にのみ存在します。いずれもどのレベルでも永続化またはログ記録されず、プロバイダーの エラーボディは結果に分類されるだけで、コピーされることはありません。請求はプロバイダーからお客様に直接行われます。

設定

環境変数
# LLM Backend (Agent)
AGENT_LLM_PROVIDER=openai           # "openai" (default) or "anthropic"
AGENT_MODEL=gpt-4o-mini             # Model name
OPENAI_API_KEY=sk-...               # Required when AGENT_LLM_PROVIDER=openai
ANTHROPIC_API_KEY=sk-ant-...        # Required when AGENT_LLM_PROVIDER=anthropic

# Server
SERVER_HOST=0.0.0.0
SERVER_PORT=8000
DEBUG=false

# Security
MCP_API_KEY=your-strong-random-key  # Global admin key (optional — billing keys work too)
RATE_LIMIT_PER_MINUTE=60            # Default rate limit (overridden by tier)

# Local currency (v1.76.0)
CURRENCY_DETECTION_ENABLED=true     # false = never infer a country from the client IP
GEO_LOOKUP_TIMEOUT_SECONDS=1.0      # request-path cap on the IP -> country lookup
EXCHANGE_RATES_PATH=                # override for data/exchange_rates.json (Fly sets /app/vendored/exchange_rates.json)

# Dispatch gateway (v1.77.0) — provider keys are never configured here; callers bring their own per request
DISPATCH_ENABLED=true               # false = dispatch mode of /v1/chat/completions returns 503
DISPATCH_DEFAULT_MAX_TOKENS=1024    # used when the caller omits max_tokens (Anthropic requires one)
DISPATCH_ATTEMPT_TIMEOUT_MS=30000   # per-attempt provider timeout
DISPATCH_MAX_ATTEMPTS=3             # failover attempts (1 when failover is off or the model is pinned)
DISPATCH_RECEIPT_RETENTION_DAYS=90  # metadata-only receipt rows are purged past this age

# Billing (Stripe)
STRIPE_SECRET_KEY=sk_live_...       # Optional — free signup works without this
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PRICE_ID_PRO=price_...
STRIPE_PRICE_ID_ENTERPRISE=price_...
BILLING_DB_PATH=/app/data/billing.db
BILLING_BASE_URL=https://llm-pricing-api.fly.dev

LLM プロバイダーの切り替えに必要なのは環境変数の変更だけです。コードを変更する必要はありません。

プロバイダーAGENT_LLM_PROVIDERAGENT_MODEL推定コスト
OpenAI(デフォルト)openaigpt-4o-mini約 $0.73/月
OpenAI(高性能)openaigpt-4o約 $8/月
Anthropicanthropicclaude-sonnet-4-6約 $15/月
Anthropic(高速)anthropicclaude-haiku-4-5-20251001約 $2/月

開発

プロジェクト構成
llm-pricing-mcp-server/
├── src/
│   ├── __init__.py                  # Version (1.48.0)
│   ├── main.py                      # FastAPI app + all endpoints
│   ├── config/settings.py           # Pydantic settings
│   ├── models/                      # Pydantic models (pricing, billing, router, …)
│   └── services/                    # Business logic
│       ├── pricing_aggregator.py    # Multi-provider pricing aggregator
│       ├── billing_service.py       # SQLite billing / customer DB
│       ├── router.py                # Model routing engine
│       ├── savings_tracker.py       # Router savings analytics
│       ├── benchmark_service.py     # Quality scores + HF API
│       ├── pricing_history.py       # Historical snapshot DB
│       └── …
├── mcp/
│   ├── server.py                    # STDIO JSON-RPC 2.0 server
│   └── tools/                       # 29 MCP tool implementations
│       ├── tool_manager.py
│       ├── get_all_pricing.py
│       ├── estimate_cost.py
│       └── …
├── agent/
│   ├── pricing_agent.py             # ReAct loop agent
│   ├── llm_backend.py               # OpenAI + Anthropic backends
│   └── tools.py                     # Agent tool wrappers
├── static/                          # Browser UIs (one dir per page)
│   ├── landing/                     # / (marketing page)
│   ├── chat/                        # /chat (agent UI)
│   ├── calculator/                  # /calculator
│   ├── compare/                     # /compare
│   ├── history/                     # /history
│   ├── trends/                      # /trends
│   ├── widget/                      # /widget
│   ├── billing/                     # /billing
│   └── admin/                       # /admin
├── tests/                           # 667 tests
├── docs/                            # Extended documentation
├── .github/workflows/ci-cd.yml      # CI/CD pipeline
├── Dockerfile
├── fly.toml                         # Fly.io deployment config
└── requirements.txt
新しいプロバイダーの追加
  1. BasePricingProvider を実装する src/services/<provider>_pricing.py を作成します
  2. src/services/pricing_aggregator.py に登録します
  3. オプションの API キー用の環境変数を src/config/settings.py に追加します
  4. tests/ にテストを追加します

テスト

# Run all 667 tests
pytest

# With coverage
pytest --cov=src --cov-report=term-missing

# Specific suites
pytest tests/test_api.py -v
pytest tests/test_billing_endpoints.py -v
pytest tests/test_mcp_http.py -v     # HTTP MCP transport
pytest tests/test_router.py -v
テストファイル
ファイル対象
test_api.pyコア API エンドポイント
test_agent_endpoint.pyエージェントのチャットとストリーミング
test_billing_endpoints.py登録、チェックアウト、Webhook、ユーザー情報
test_billing_service.pyBillingService のユニットテスト
test_mcp_http.pyHTTP MCP トランスポート
test_router.pyルーターの推奨とフィードバック
test_security.py認証ミドルウェア
test_admin_dashboard.py管理者向けエンドポイント
test_history_tools.py価格の履歴と傾向
test_rag.pyTF-IDF RAG パイプライン
test_agent.pyReAct エージェントのユニットテスト
test_currency.py通貨サービス:マッピング、優先順位、古さ、丸め処理、為替レートテーブル
test_currency_api.py6つのエンドポイントでの REST ロケール解決、/locale、/currency/rates、プライバシー
test_currency_mcp.py5つの MCP ツールでの currency/country
test_currency_ui.py共通のブラウザー通貨コントロール
test_refresh_exchange_rates.py週次の為替レートテーブル更新スクリプトとワークフロージョブ
test_dispatch_executors.pyhttpx.MockTransport を使ったプロバイダー実行器:ワイヤー変換、使用状況/終了のマッピング、エラー分類
test_dispatch_service.pyディスパッチポリシー、適格性、ランキング、フェイルオーバー、上限、強制停止、シャドー A/B、レシート(フェイク実行器)
test_dispatch_api.pyHTTP 経由のディスパッチモード:認証、非対応機能、台帳、予算アラート、エクスポート、キー/プロンプト漏えいのセンチネル

デプロイ

Fly.io(プライマリ)

アプリは Fly.io にデプロイされており、master へのプッシュごとに自動デプロイされます。

# Install flyctl
# https://fly.io/docs/getting-started/installing-flyctl/

# Deploy manually
flyctl deploy

# Set secrets
flyctl secrets set \
  MCP_API_KEY=... \
  OPENAI_API_KEY=... \
  AGENT_LLM_PROVIDER=openai \
  AGENT_MODEL=gpt-4o-mini

# Set Stripe secrets (optional — free tier works without)
flyctl secrets set \
  STRIPE_SECRET_KEY=sk_live_... \
  STRIPE_WEBHOOK_SECRET=whsec_... \
  STRIPE_PRICE_ID_PRO=price_... \
  STRIPE_PRICE_ID_ENTERPRISE=price_... \
  BILLING_BASE_URL=https://llm-pricing-api.fly.dev

設定は fly.toml にあります。/app/data/ の永続ボリュームには、すべての SQLite データベースが保存されます。

GitHub Actions CI/CD

.github/workflows/ci-cd.yml パイプラインでは、次の処理を行います。

  1. すべての PR で 667 件のテストを実行します
  2. master へのプッシュ時に Fly.io へデプロイします(FLY_API_TOKEN シークレットを使用)
  3. デプロイ後にヘルスチェックを実行します
ヘルスチェックエンドポイント
GET /health        → {"status":"healthy","version":"1.39.0"}
GET /health/live   → {"alive":true}
GET /health/ready  → {"ready":true,"checks":{...}}
GET /health/detailed → detailed environment + service statuses
ブルーグリーンデプロイ

リクエストのドレインを伴うグレースフルシャットダウンに対応しています。docs/BLUE_GREEN_DEPLOYMENT.md を参照してください。


ライブデータ

サーバーは、スマートキャッシュを備えたウェブスクレイピングを使用して、公式の公開価格ページから価格データを取得します。価格データの取得にプロバイダーの API キーは必要ありません。

  • キャッシュ TTL:価格は 2 時間、パフォーマンス指標は 5 分
  • フォールバック:ライブソースが利用できない場合は、静的なハードコード済みデータを使用します
  • プロバイダー:OpenAI、Anthropic、Google、Cohere、Mistral AI、Groq、Together AI、Fireworks AI、Perplexity AI、AI21 Labs、Anyscale、Amazon Bedrock

オプションのプロバイダー API キー(OPENAI_API_KEY、ANTHROPIC_API_KEY など)を設定すると、モデルリストの鮮度が向上しますが、必須ではありません。


コントリビューション

docs/CONTRIBUTING.md を参照してください。このリポジトリではGit Flowを使用しています。

feature/<name>  →  develop (PR)  →  master (PR)  →  Fly.io auto-deploy
  • develop または master に直接コミットしないでください
  • ブランチ名:feature/<topic>-v<version>(例:feature/stripe-billing-v1.37.0)
  • develop を対象に PR を作成してください。リリース時にはメンテナーが develop から master へ昇格させます

ライセンス

MIT — LICENSE を参照してください。


ロードマップ

完了
  • v1.39.0 — OpenAPI タグとグループ化された Swagger UI、15 番目の MCP ツール(ask_agent)
  • v1.38.6 — MCP サーバーの修正:すべてのサービスを初期化し、ask_agent ツールを登録、PricingAlertService を初期化
  • v1.38.5 — ランディングページに MCP 統合ガイドを追加(Claude Desktop、VS Code、Cursor)
  • v1.38.4 — 課金ベータ版の UX:近日公開の文言、有料ボタンの無効化、503 エラーの適切な処理
  • v1.38.3 — チャットページと会話ページにダークテーマと共通ナビゲーションを導入
  • v1.38.2 — 9 つすべての UI でデザインシステムを標準化(管理画面を基準として採用)
  • v1.38.1 — UI テーマの一貫性を改善
  • v1.38.0 — リモートクライアント向け HTTP MCP トランスポート(POST /mcp、GET /mcp)
  • v1.37.3 — モバイル対応 UI、全ページで一貫したナビゲーション
  • v1.37.2 — Fly.io ボリュームのマウント時に SQLite ディレクトリを自動作成
  • v1.37.1 — / にマーケティング用ランディングページを追加
  • v1.37.0 — Stripe SaaS 課金:無料登録、Pro/Enterprise プラン、セルフサービスのポータル
  • v1.36.0 — API キーのプラン(free/pro/enterprise)、ルーターのフィードバックループ、ストリーミングルーター、Fly.io への移行
  • v1.35.0 — 品質価値指数、ベンチマークサービス、モデルルーター、節約額トラッカー
  • v1.33.0 — デフォルトの LLM バックエンドを GPT-4o-mini に変更(約 20 倍低コスト)
  • v1.27.0–v1.32.0 — 管理ダッシュボード、ウィジェット、比較 UI、計算ツール、価格アラート、履歴エクスポート
  • v1.10.0–v1.26.0 — エージェントと RAG パイプライン、ストリーミング、会話メモリ、価格履歴
  • v1.5.1 — 12 のプロバイダー、87 以上のモデル、ライブデータの取得
  • v1.6.0 — MCP プロトコル全機能(STDIO JSON-RPC 2.0)、Claude Desktop との統合
今後の予定
  • Stripe の本番環境向けセットアップ(商品を設定し、Fly.io のシークレットを設定)
  • Azure App Service を停止(現在は並行稼働中で、月額約 27 ドル)
  • カスタムドメイン
  • 追加の LLM バックエンド(Groq への直接接続、ローカルの Ollama)
  • ライブ価格購読向けの WebSocket サポート

コメント

MCP は初めてですか?

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

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