mcpcost について
mcpcostは、リモートMCPサーバーの稼働状況とツール定義のトークンコストを測定し、検索可能なレジストリボード、コマンドラインツール、CIチェックを提供します。エージェントやスクリプト向けの検索・照会・ライブチェック機能も備えています。
主な機能
- 01リモートサーバーの状態と遅延を検査
- 02ツール定義のトークンコストを測定
- 03レジストリサーバーの検索と絞り込み
- 04サーバー状態とコスト履歴の追跡
- 05CIで設定済みサーバーを検査
活用シーン
- 01MCPサーバー追加前のコンテキストコスト比較
- 02名前や状態によるレジストリ検索
- 03ツールコストが予算を超えた場合のCI失敗
- 04エージェントからのサーバー照会や検査
MCP 対応
mcpcost.ulehla.dev/mcpでStreamable HTTPのMCPサーバーを提供し、サーバー照会、検索、ライブチェック、レジストリ概要のツールを公開します。コマンドラインツールもstdio経由で測定機能をMCPサーバーとして提供できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcpcost.ulehla.dev/mcpclaude mcp add --transport http ondraulehla-mcpcost https://mcpcost.ulehla.dev/mcp{"mcpServers":{"ondraulehla-mcpcost":{"type":"http","url":"https://mcpcost.ulehla.dev/mcp"}}}Cursor で開く{"servers":{"ondraulehla-mcpcost":{"type":"http","url":"https://mcpcost.ulehla.dev/mcp"}}}VS Code で開く{"mcpServers":{"ondraulehla-mcpcost":{"type":"http","url":"https://mcpcost.ulehla.dev/mcp"}}}{"mcpServers":{"ondraulehla-mcpcost":{"serverUrl":"https://mcpcost.ulehla.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
4| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| nameOrUrl | string | はい | サーバーのレジストリ名または HTTPS URL |
詳細
mcpcost
その 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 として使用する
- 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 サーバーはコンテキストトークンをどれくらい消費するか」という一般的な質問に答えます。
ボード上の各サーバーには、ページとバッジがあります:
[](https://mcpcost.ulehla.dev/s/io.github.you/your-server)
初回の全件実行、2026-10-03
レジストリには、最新のエントリーが38 942件ありました。そのうち24 294件はリモートエンドポイントを持ち、プローブは40分ですべてに接続しました。
| 結果 | サーバー数 | 割合 |
|---|---|---|
稼働中:initialize と tools/list が成功 | 12 975 | 53 % |
| 認証が必要(401、403) | 5 836 | 24 % |
| MCP ではない:HTTP 200 だが有効な MCP 応答なし | 1 800 | 7 % |
| 見つからない(404、405、410) | 881 | 4 % |
| DNS なし | 728 | 3 % |
| レート制限(429) | 500 | 2 % |
| 支払いが必要(402) | 434 | 2 % |
| サーバーエラー(5xx) | 349 | 1 % |
| その他 | 307 | 1 % |
| TLS エラー | 259 | 1 % |
| タイムアウト | 204 | 1 % |
| 接続拒否 | 21 | 0 % |
応答した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
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。