mcpField
M
mcpcost

mcpcost

リモート
mcpcost.ulehla.dev開発ツール2今日更新
リポジトリ公式サイト

mcpcost について

mcpcostは、リモートMCPサーバーの稼働状況とツール定義のトークンコストを測定し、検索可能なレジストリボード、コマンドラインツール、CIチェックを提供します。エージェントやスクリプト向けの検索・照会・ライブチェック機能も備えています。

主な機能

  1. 01リモートサーバーの状態と遅延を検査
  2. 02ツール定義のトークンコストを測定
  3. 03レジストリサーバーの検索と絞り込み
  4. 04サーバー状態とコスト履歴の追跡
  5. 05CIで設定済みサーバーを検査

活用シーン

  1. 01MCPサーバー追加前のコンテキストコスト比較
  2. 02名前や状態によるレジストリ検索
  3. 03ツールコストが予算を超えた場合のCI失敗
  4. 04エージェントからのサーバー照会や検査

MCP 対応

mcpcost.ulehla.dev/mcpでStreamable HTTPのMCPサーバーを提供し、サーバー照会、検索、ライブチェック、レジストリ概要のツールを公開します。コマンドラインツールもstdio経由で測定機能をMCPサーバーとして提供できます。

設定

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

エンドポイントhttps://mcpcost.ulehla.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 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

4
パラメーター型必須説明
nameOrUrlstringはいサーバーのレジストリ名または HTTPS URL

詳細

mcpcost

CI npm mcpcost license Glama

その MCP サーバーは稼働していますか?コンテキストウィンドウをどれだけ消費しますか?

ライブボード:mcpcost.ulehla.dev

mcpcost は公式 MCP レジストリ内のすべてのリモートサーバーを調査し、それぞれについて次の情報を記録します。

  • initialize と tools/list に応答するかどうかと、その速度
  • ネゴシエートされたプロトコルのバージョン
  • 認証が必要かどうか、使用する方式(WWW-Authenticate から取得)、およびクライアントがアクセスする方法:動的クライアント登録を使う OAuth、発行元から取得したクライアント ID を使う OAuth、またはサーバーの公開 OAuth メタデータから読み取ったキー
  • 支払いを要求するかどうか(HTTP 402)
  • ツールの数と、その定義に必要なトークン数

mcpcost:自分のサーバーにはどれだけのコストがかかりますか?

npx mcpcost                     # reads Claude Code, Claude Desktop, Cursor, VS Code, Windsurf and Gemini CLI configs
npx mcpcost --config .mcp.json  # one file
npx mcpcost --budget 30000      # exit 1 when the total is above the budget, for CI
npx mcpcost --claude            # exact counts from the Anthropic count_tokens endpoint (free, needs ANTHROPIC_API_KEY)
npx mcpcost mcp                 # the same measurements as an MCP server over stdio, for your agent

クライアントと同じ方法ですべての設定済みサーバーを起動し、ツールを一覧表示して、サーバーごとのトークンコストと合計コストを出力します。packages/mcpcostを参照してください。

認証が必要なサーバー

401 を返すサーバーには接続できますが、認証情報を取得するまでは測定されません。認証情報は一度保存すれば、その URL の以降のすべての測定で使用されます。

npx mcpcost auth https://mcp.linear.app/mcp                                   # OAuth: register, consent in the browser, store the tokens
npx mcpcost auth https://api.githubcopilot.com/mcp/ --header "Authorization: Bearer ghp_…"   # an API key instead
npx mcpcost auth --list                                                       # what is stored, without the secrets

OAuth フローは MCP 認可仕様に従います。ディスカバリー、動的クライアント登録、PKCE、127.0.0.1 でのコールバックを行います。人が関与する必要があるのは、同意画面の操作だけです。その後、トークンは ~/.mcpcost/credentials.json(モード 0600、または $MCPCOST_CREDENTIALS)に保存され、npx mcpcost はその URL にトークンを送信し、更新されたトークンはファイルに書き戻されます。

ボードも同じ処理を行います。npm run credentials:push がファイルを D1 テーブル credentials にコピーします。毎日の実行では、プローブ前に認証情報を読み込み、プローブ後に更新済みトークンを書き戻し、サーバーに「認証情報を使って測定済み」の印を付けます。サービスがリフレッシュトークンを無効にするか、期限切れにした場合は、再度同意画面の操作が必要です。

認証情報がなくても、ボードでは多くの認証が必要なサーバーのツールセットを確認できます。ツールの定義はトークンに依存しないため、発行元のリポジトリが npm または PyPI にパッケージを登録していれば、probe/derive-packages.ts がそれを見つけ、毎週のコンテナー実行でプレースホルダー値を使って測定します。その場合、サーバーページには「発行元のパッケージから」と表示されます。probe/derived-aliases.json は、レジストリエントリにリポジトリ名がない一部のサーバーを対応付けます。

CI で GitHub Action として使用する

GitHub Marketplace

- uses: ondraulehla/mcpcost@v1
  with:
    config: .mcp.json   # one or more config files, one per line
    budget: 30000       # fail when the tool definitions cost more than this

ジョブのサマリーには、すべてのサーバーとその結果およびコストを記載した表に加え、最も高コストなツールが表示されます。40 000 トークンのサーバーを追加するプルリクエストはチェックに失敗します。正確なトークン数を無料の count_tokens エンドポイントから取得するには、claude: true を設定し、ANTHROPIC_API_KEY を env に追加してください。デフォルトでは o200k_base による推定値が使われます。出力は tokens、servers、over-budget です。

プルリクエストでは、アクションがベースブランチ上の同じ設定ファイルも測定し、差分を 1 件のコメントとして投稿します。コメントには、追加、削除、変更されたサーバー、サーバーごとのトークン差分、新しい合計、予算の判定が含まれます。コメントはプッシュのたびに更新され、重複して投稿されることはありません。この機能にはジョブに pull-requests: write が必要です。権限がない場合、ステップは警告を出しますが、チェックは引き続き実行されます。無効にするには comment: false を設定します。完全なワークフローは .github/examples/mcp-budget.yml にあります。

Claude Code では、プラグインとして

Claude Code のセッションで:

/plugin install mcpcost --marketplace ondraulehla/mcpcost

またはシェルから:claude plugin marketplace add ondraulehla/mcpcost を実行し、続けて claude plugin install mcpcost@mcpcost を実行します。

このプラグインは、設定を対象に npx mcpcost を実行して結果を読み取る /mcpcost:measure というスキルを1つ追加します。また、ボードの MCP サーバーも追加するため、Claude はサーバーを設定に追加する前に検索したり、プローブしたりできます。プラグイン自体にかかるコストは、コンテキスト内のスキルの説明1つと、Claude Code がツール検索で呼び出しを遅延する4つのツールです。

ボード

mcpcost.ulehla.dev は、D1 データベースからエッジ上でレンダリングされ、毎晩更新されます。読み込むスクリプトは、テーマ切り替え機能と、Cookie を使わずにページビューを数える Cloudflare Web Analytics のビーコンだけです。

  • 概要:応答するサーバーの割合、トークンコストのパーセンタイル、および任意のサーバーをチェックするフォーム
  • チェック:毎日の実行と同じ手順で1つの URL をリアルタイムにプローブします。正確なトークン数はブラウザーで計算されます
  • 統計:原因別の結果、トークンコストとツール数のパーセンタイル、最も重いツールセット、プロトコルのバージョン、認証方式、トランスポート、最大規模の公開元
  • サーバー:名前、タイトル、説明、ホストを対象とした全文検索(単語の先頭部分で検索するため、git copilot で GitHub Copilot サーバーが見つかります)、結果・プロトコル・トランスポートによるフィルター、7種類の並べ替え、および共有可能なプレーン URL 形式のすべてのフィルター
  • サーバーページ:ステータス、レイテンシー、プロトコル、機能、最も高コストなツール、同じツールセットを持つサーバー、履歴、バッジ、メールアラート。サーバーが応答しなくなった場合、応答を再開した場合、またはツールセットやトークンコストが変化した場合にメールが届きます
  • 追跡:レジストリにないサーバーもチェックページから追跡できます。毎日のプローブでは、url/<host>/<path> という名前で測定されます
  • ホスト:実際に提供している固有のツールセット数を添えた、公開元の上位500件

エージェントとスクリプト向け

  • JSON:/api/s/<name>.json、/api/servers.json?q=…&status=ok&sort=tokens、/api/check.json?url=…、/api/summary.json。リスト API は、1つのアドレスから10秒間に最大6件のリクエストを受け付けます。応答は3時間キャッシュされます。
  • Streamable HTTP 経由の MCP サーバー(認証不要):https://mcpcost.ulehla.dev/mcp。ツールは lookup_server、search_servers、check_server、registry_summary です。レジストリのマニフェストは site/server.json です。
  • /llms.txt にすべての情報があります。/tokens では、「MCP サーバーはコンテキストトークンをどれくらい消費するか」という一般的な質問に答えます。

ボード上の各サーバーには、ページとバッジがあります:

[![mcpcost](https://mcpcost.ulehla.dev/badge/io.github.you/your-server.svg)](https://mcpcost.ulehla.dev/s/io.github.you/your-server)

初回の全件実行、2026-10-03

レジストリには、最新のエントリーが38 942件ありました。そのうち24 294件はリモートエンドポイントを持ち、プローブは40分ですべてに接続しました。

結果サーバー数割合
稼働中:initialize と tools/list が成功12 97553 %
認証が必要(401、403)5 83624 %
MCP ではない:HTTP 200 だが有効な MCP 応答なし1 8007 %
見つからない(404、405、410)8814 %
DNS なし7283 %
レート制限(429)5002 %
支払いが必要(402)4342 %
サーバーエラー(5xx)3491 %
その他3071 %
TLS エラー2591 %
タイムアウト2041 %
接続拒否210 %

応答した12 975台のサーバーについて:

  • ツールセットのコストは中央値で1 727トークン、90パーセンタイルで7 429トークン、99パーセンタイルで28 200トークンです
  • 208台のサーバーは20 000トークンを超え、46台は50 000トークンを超え、3台は200kのコンテキストウィンドウ全体を超えます
  • 最も負荷が大きいのはcom.replynodes/mcpで、66個のツールがあり、431 925トークンです
  • サーバーのツール数は中央値で8個、最大で1 385個です
  • initializeのレイテンシは中央値で455 ms、90パーセンタイルで1.5 sです
  • 60 %がプロトコル2025-11-25をネゴシエートし、24 %はまだ2025-03-26、4 %は2024-11-05です
  • 122台のサーバーはプロトコル2026-07-28で応答しますが、現在のTypeScript SDKはこれを拒否します

レジストリには偏りがあります。16 534個のホストのうち16 161個は、1つのサーバーのみを公開しています。5つのホストが合計6 000件を超えるエントリーを公開しています。Workersのサブドメイン1つにほぼ同一のエントリーが2 365件、ゲートウェイ1つに1 716件(そのうち1 321件はinitializeでJSON-RPCエラーを返します)、そして402を返すエントリーが276件あるホスト1つです。

動作の仕組み

registry ──▶ probe/run.ts ──▶ data/raw/probe-run.json
                                   │
                        probe/build-data.ts
                                   │
               data/latest/{servers,summary,hosts}.json
                                   │
                           probe/to-sql.ts ──▶ import.sql ──▶ D1
                                                                │
                              site/ (Astro on Workers) ◀────────┘
  • packages/mcpcost/ ライブラリとCLIのmcpcostです。レジストリクライアント、リモートおよびstdioプローブ、設定の検出、トークンのカウントを行います
  • probe/ バッチランナーとデータパイプラインです
  • site/ ボードです。Cloudflareアダプターを使用するWorkers上のAstro 7で、FTS5検索、SVGバッジを備え、D1からレンダリングします。クライアントJavaScriptはテーマ切り替えと分析ビーコン以外には使用しません
  • .github/workflows/probe.yml は毎日、プローブ、カウント、build-data、to-sql、D1へのインポートを含むパイプライン全体を実行します。実行時のsummary.json、servers.json、hosts.jsonはワークフローのアーティファクトとして保存されます。次回の実行ではこれらとの差分を取り、変更された行のみを、無料枠の1日あたり100 000行の書き込み上限内でインポートします
  • .github/workflows/deploy.yml はsite/に変更があった場合にサイトをデプロイします

方法論

  • トランスポート。 プローブは、クライアントとして公式の TypeScript SDK を使用します。まず Streamable HTTP を試し、リモート接続がそれしか利用できない場合は SSE を使用します。
  • GET ストリームなし。 プローブは SDK の単独 GET に 405 を返すため、サーバーからクライアントへのストリームを開きません。プローブにはサーバー起点のメッセージは不要で、ストリームが開いている間 tools/list が停止するサーバーもあります(DeepWiki は 15 s 保持したまま、その間 POST に応答しませんでした)。
  • 正確なトークン数。 毎日の実行では、生存しているすべてのサーバーについて Anthropic の count_tokens エンドポイントに問い合わせ、GEMINI_API_KEY が設定されている場合は Gemini の countTokens エンドポイントにも問い合わせます(CLI:--gemini)。まず Anthropic で、サーバーのツールとマーカーツールを含むリクエストと、マーカーツールのみのリクエストをそれぞれ 1 回ずつ行い、その差を claude-opus-5-5 におけるツールのコストとします。2 回目のカウントでは、各ツール名に Claude Code の mcp__<server>__ プレフィックスを付けます。エンドポイントは無料で、モデルは呼び出しません。ツール定義が変更された場合に限り、サーバーを再度カウントします。約 5 % のサーバーはエンドポイントが受け付けないスキーマを公開しているため、推定値とその理由が表示されます。
  • 推定値。 各ツールを name、description、input_schema を含むコンパクトな JSON としてシリアライズし、o200k_base トークナイザーでカウントします。中央値では、正確なカウントは推定値の約 1.9 倍です。推定値にはキーが不要で、すべてのサーバーで同じ方法を使用します。
  • 同じツールセット。 ソートしたツール名とスキーマサイズのハッシュにより、異なる名前で同一のツールを提供しているサーバーを特定します。
  • タイムアウト。 リクエストごとに 15 秒です。同一ホストに対して同時に実行されるプローブは 1 つまでです。
  • アクセスの取得。 401 または 403 を返すサーバーについて、プローブは OAuth 保護リソースのメタデータ(RFC 9728)と最初の認可サーバーのメタデータ(RFC 8414、次に OpenID ディスカバリー)を読み取ります。対象は、認可サーバー、スコープ、公開元のガイド、動的クライアント登録(RFC 7591)、PKCE、グラントタイプです。サーバーページでは「アクセスを取得中」と表示され、JSON API では authKind と authMetadata として表示されます。トークンも同意も不要な、2〜4 回の小規模なリクエストです。プローブの結果は変わりません。
  • 識別。 すべてのリクエストには、User-Agent mcpcost/<version> (+https://github.com/ondraulehla/mcpcost) が含まれます。サーバーを除外するには、そのレジストリ名を添えて issue を作成してください。

実行方法

npm install
npm run probe -- --sample 200 --per-host 2        # a sample, results in data/samples/
npm run probe -- --all --out data/raw/probe-run.json
node --import tsx probe/build-data.ts --in data/raw/probe-run.json --out data/latest
node --import tsx probe/to-sql.ts --in data/latest --out data/latest/import.sql
npm test --workspaces --if-present

ローカルで、ローカルの D1 に対してサイトを実行します。

cd site
npm run db:schema:local && npm run db:import:local
npm run dev

アラートメールの送信には、送信ドメインが必要です。Cloudflare Email Sending(Workers Paid プランと、site/wrangler.jsonc の send_email バインディング)を使用するか、Resend を使用します(そこでドメインを検証し、npx wrangler secret put RESEND_API_KEY を実行します)。いずれも設定されていない場合、監視フォームには確認メールを送信できなかったと表示されます。

デプロイには、mcpcost という名前の D1 データベースを持つ Cloudflare アカウントが必要です(wrangler d1 create mcpcost を実行し、ID を site/wrangler.jsonc に設定します)。ワークフローでは、リポジトリシークレット CLOUDFLARE_API_TOKEN(Workers Scripts:Edit、D1:Edit)と CLOUDFLARE_ACCOUNT_ID が必要です。どちらのワークフローも、実行のたびに site/schema.sql と site/migrations/ 内の未適用ファイルを適用します。表示されるトークン数に関する 2 つのインデックス(マイグレーション 007 と 008)は例外です。各ビルドではサーバーごとに 1 行を書き込むため、プローブのワークフローがインポートの 1 日前に一方を適用し、インポートには残りの書き込み予算を割り当てます。新しいデータベースでは、最初に一度、手動で適用する必要があります。

エッジルール

Workers Free プランでは、Worker が応答するすべてのリクエストがカウントされます。403 もページと同様にカウントされます。2026-10-22 と 23 日には、ホスティング事業者のアドレス(Meta のクラウド、Alibaba Cloud、RapidSeedbox)から Chrome のユーザーエージェントを使ったスクレイパーが、1 時間に 4 000 件のリストのバリエーションを要求し、Worker が拒否したにもかかわらず、アカウントの 1 日あたり 100 000 件のリクエストを使い切りました。それらを止める処理は Worker の前に実行する必要があります。site/edge/rules.mjs が API 経由でゾーンの WAF ルールを書き込みます。この処理は冪等です。

  • ホスト全体で該当するネットワークをブロックするカスタムルール。ただし、検証済みボットは除外します
  • リストの各バリエーション(/servers?…)に対して、検証済みボット以外にはマネージドチャレンジを課すカスタムルール。ブラウザーは一度クリアすれば通過できますが、スクリプトは通過できません。リスト API(/api/servers.json)は対象外です。スクリプトやエージェントはチャレンジを通過できないため、API はレート制限ルールのもとで引き続き利用できます
  • リストの各バリエーションで検証済みボットをブロックするカスタムルール。robots.txt では全員に対してアクセスを禁止しており、検索エンジンはアクセスしません。また、2026-10-23 には Chrome のエージェント文字列を使う Meta のクローラー(meta-externalagent)が、1 時間に 3 000 件を巡回しました
  • Free プランで利用できる唯一のレート制限ルール。同じアドレスから 10 秒間に 6 件を超えるリストのバリエーションが要求された場合、10 秒間ブロックします
CLOUDFLARE_API_TOKEN=… node site/edge/rules.mjs --dry-run   # shows what it would write
CLOUDFLARE_API_TOKEN=… node site/edge/rules.mjs

Edge rules ワークフロー(.github/workflows/edge.yml)は、main でファイルが変更されたとき、または手動で、CLOUDFLARE_ZONE_TOKEN シークレットを使ってスクリプトを実行します。このトークンにはゾーンに対する Zone: Zone WAF: Edit と Zone: Zone: Read の権限が必要です。probe のトークンにはどちらの権限もありません。site/src/middleware.ts のミドルウェアも、ゾーンルールでは検出できない workers.dev ホストに対して、同じ拒否処理を第 2 層として維持します。

監視

site/edge/watch.mjs は、一定の時間内に誰がボードを読み込んだか、またどれだけのコストがかかったかを示します。アカウントの分析データから Worker の 1 時間あたりのリクエスト数と D1 の行数を、Worker のログからその背後にあるネットワーク、エージェント、URL の形式を取得します。Watch the edge ワークフロー(.github/workflows/watch.yml)は、直前の 1 時間分を毎時実行します。しきい値(Worker のリクエストが 1 時間に 5 000 件、クローラーを名乗らないエージェントによる同一ネットワークからのリクエストが 1 時間に 800 件、名乗るものに関係なく同一ネットワークからのリストのバリエーションが 1 時間に 300 件、D1 の行数が 1 時間に 100 万件。変数は WATCH_*)を超えると、実行結果が赤になり、edge-watch ラベルの付いた issue を作成するか、すでに開いている issue に該当する時間を追加します。表にはネットワークが記載されます。その ASN を site/edge/rules.mjs の SCRAPER_ASNS に追加すると、Edge rules ワークフローが Worker の前にそのネットワークをブロックします。レポートには、その時間帯に最も多くの行を読み込んだ D1 クエリも記載されます。ゾーントークンに Zone: Analytics: Read の権限があれば、ゾーンが Worker の前にブロックした内容も表示されます。

CLOUDFLARE_API_TOKEN=… CLOUDFLARE_ACCOUNT_ID=… node site/edge/watch.mjs                                   # the last hour
CLOUDFLARE_API_TOKEN=… CLOUDFLARE_ACCOUNT_ID=… node site/edge/watch.mjs 2026-10-22T22:00:00Z 2026-10-23T06:00:00Z   # one night
旧ホスト

このサイトは、2026-10-15 まで mcp-pulse.ulehla.dev でした。旧ホストは引き続き Worker のルートとして残り、site/src/middleware.ts のミドルウェアが、そのホストへのすべてのリクエストに対して mcpcost.ulehla.dev への 301 を返します。

静的アセットは Worker の前に配信され、Astro アダプターもプリレンダリングされたページをミドルウェアより前に配信するため、site/public/ 内のファイルやプリレンダリングされたページは旧ホストで 200 を返します。wrangler.jsonc の run_worker_first では、この動作は変わりません。そのため、robots.txt、llms.txt、methodology ページはルートとして扱われ、クローラーが読み込むすべてのページはミドルウェアを通ります。静的なまま残るのは、favicon、/_astro/ 以下のフォント、検索エンジンの確認ファイルだけです。

それらも Worker の呼び出しなしでリダイレクトするには、Cloudflare ダッシュボードの ulehla.dev ゾーンに Redirect Rule を追加します(Rules、Redirect Rules、Create rule)。

  • When incoming requests match: Hostname equals mcp-pulse.ulehla.dev
  • Then: Dynamic redirect、式 concat("https://mcpcost.ulehla.dev", http.request.uri.path)、ステータスコード 301、クエリ文字列を保持する設定をオン

Redirect Rules は Worker と静的アセットより前に実行されるため、このルールはすべてのパスを対象にします。ミドルウェアは、ゾーンルールでは検出できない workers.dev ホスト用のフォールバックとして引き続き残ります。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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