coingecko-mcp-server について
coingecko-mcp-serverは、暗号資産の調査向けにCoinGeckoの価格、履歴データ、トレンド、コイン情報を提供します。名称やティッカーをCoinGecko IDに変換し、価格、マーケット、チャートの検索につなげられます。
主な機能
- 01コインを検索してCoinGecko IDを特定
- 02価格とマーケットデータを一括取得
- 03時価総額や取引量順のマーケット一覧
- 04コイン情報と過去のチャートを確認
- 05トレンドコインと世界市場の概況を取得
活用シーン
- 01複数コインの現在価格と市場指標を比較
- 02コインの過去価格、取引量、時価総額を確認
- 0324時間のトレンドコインと市場全体の変化を追跡
MCP 対応
STDIOとStreamable HTTPに対応し、MCP経由で8つのツール、2つのリソース、1つのプロンプトを提供します。クライアントはCoinGeckoの市場データを照会でき、調査プロンプトでコイン検索、情報、チャート、世界市場データを連携できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @cyanheads/coingecko-mcp-serverCOINGECKO_API_KEYシークレットOptional CoinGecko Demo API key. Present → sent as the x-cg-demo-api-key header for the dedicated Demo tier (10k/mo, 100 rpm). Absent → keyless public tier.MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
8掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 解決するコイン名またはティッカーシンボル(例:"bitcoin"、"ETH"、"solana")。 |
詳細
@cyanheads/coingecko-mcp-server
15,000 種以上の暗号資産の市場データ — CoinGecko 経由で価格、履歴、トレンド、詳細なコインのメタデータを取得できます。
概要
CoinGecko の暗号資産市場データ — 15,000 種以上のコインの価格、ランキング、過去のチャート、詳細なプロフィールを取得できます。名前またはティッカーを CoinGecko のスラッグ形式の ID に解決し、価格の照会、ランキング付き市場データ、トレンドチャートへと続けてアクセスできます。
ツール
| ツール | 説明 |
|---|---|
coingecko_search_coins | コイン名またはティッカーシンボルを CoinGecko ID(スラッグ)に解決します。ID を指定するすべてのツールで、最初に実行する必要があります。 |
coingecko_get_prices | 複数のコイン/通貨をまとめて、現在の価格と主要な市場統計を取得します。 |
coingecko_list_markets | 時価総額、取引量、または ID 順の市場ランキング表です。カテゴリまたは指定した ID に絞り込むこともできます。 |
coingecko_get_coin | 単一コインの詳細なプロフィール — 説明、リンク、市場データ、開発者の活動、コミュニティ、センチメントを取得します。sections を指定すると、大きなレコードの内容を絞り込めます。 |
coingecko_get_market_chart | 過去の価格、時価総額、取引量の系列データを取得します。recent(直近 N 日、自動粒度)または range(Unix 秒で期間を明示)のモードを使用できます。 |
coingecko_get_trending | 過去 24 時間の CoinGecko での検索ボリュームに基づく、トレンド上位のコインを取得します。 |
coingecko_get_global | 暗号資産市場全体のスナップショット — 時価総額と取引量の合計、BTC/ETH のドミナンス、アクティブ数、進行中の ICO、24 時間の変動率を取得します。 |
coingecko_list_categories | コインカテゴリ(category_id と表示名)を取得します。coingecko_list_markets の category フィルターで使用できる有効なスラッグを確認できます。 |
リソース
| リソース | 説明 |
|---|---|
coingecko://coin/{id} | スラッグによる詳細なコイン情報です。coingecko_get_coin と同じデータ(完全なレコード、USD建ての市場データ)を返します。 |
coingecko://global | 暗号資産市場全体のスナップショットです。coingecko_get_global と同じデータを返します。 |
すべてのリソースデータはツールからも取得できます。リソースは coingecko_get_coin と coingecko_get_global をそのまま反映しているため、ツールのみを使うクライアントでもデータが欠けることはありません。大規模なコレクション(市場、カテゴリー)はリソースとして公開されていません。代わりに coingecko_list_markets と coingecko_list_categories を使用してください。
プロンプト
| プロンプト | 説明 |
|---|---|
coingecko_coin_research | 検索 → get_coin → get_market_chart → get_global の流れで、単一コインの調査を一通り進める手順を案内します。 |
機能リファレンス
coingecko_search_coins ツール
- ティッカーは一意ではありません(
ETH/USDCを共有するコインが多数あります)。id、symbol、name、marketCapRankを含む、順位付けされた候補を返して区別できるようにします - 関連度順に上位25件を返します。リストが上限に達した場合は、
enrichment.truncatedとshown/capでその旨を示します - 結果が空でも正常な結果であり、エラーではありません。
enrichment.noticeでクエリの範囲を広げるよう提案します
coingecko_get_prices ツール
- 最大500件の生IDを受け付け(前後の空白を除去し、小文字化して重複を排除)、先頭から最大250件の一意なスラッグを処理します。残りは
skippedIdsに、解決できなかったIDはmissingに記載します。不明なスラッグに対して上流はエラーではなく空の応答を返すためです - 価格が返された
(id, currency)の組み合わせごとに1行を返します。時価総額、24時間の取引高、24時間の変動率は行ごとに省略可能です。価格情報のない通貨はenrichment.noticeに記載されます lastUpdatedAtUnixSecはUnix秒です。coingecko_get_market_chartの各データポイントのタイムスタンプはミリ秒です- リクエストしたIDが1つも解決されない場合は
all_missingを、IDは解決されたものの、リクエストした通貨のいずれにも数値の価格がない場合はno_price_dataをスローします
coingecko_list_markets ツール
orderで時価総額、取引高、IDの昇順または降順に並べ替えます。pageとper_pageでページネーションを行います(デフォルトは50行、最大250行)ids(価格バッチと同じく、生IDは最大500件、一意なIDは最大250件。選択内容はappliedIdsとskippedIdsで確認できます)またはcategory(coingecko_list_categoriesが返すcategoryId)で絞り込みます。両方は指定できません。併用するとconflicting_filtersを返します- コインごとのフィールドには、価格、時価総額、取引高、1時間/24時間/7日の変動率、供給量、ATH/ATLが含まれます。全ページに達した場合は
enrichment.truncatedで示します - カテゴリーで絞り込んだリクエストに対してCoinGeckoがHTTP 404を返した場合は
unknown_categoryをスローします
coingecko_get_coin ツール
- 6つのセクション(
profile、market、links、developer、community、sentiment)があります。sectionsを指定すると必要な部分だけに絞って応答を返します(完全なレコードは大容量です) - 価格と変動率の期間は
vs_currencyを使用します(デフォルトはusd)。上流に存在しないフィールドは捏造せず、省略されます profile.categoriesは表示名(例:"Layer 1 (L1)")であり、coingecko_list_categoriesが返すcategoryIdのスラッグとは異なります- 上流がスラッグを認識しない場合は
coin_not_foundを、指定された市場通貨がサポート対象外の場合はunsupported_currencyをスローします
coingecko_get_market_chart ツール
recentモードでは 1~365 日を指定します("max"は 365 日の期間を表し、通知が出力されます)。rangeモードではfrom/toに Unix 秒を指定しますintervalではauto(上流のデフォルト)、daily、hourlyを選択します。利用できる値は上流のプランと期間によって異なりますpoint_offset(デフォルトは 0)とpoint_limit(デフォルトは 100、上限は 250)でページを指定します。系列ごとの合計とnextPointOffsetにより続きを取得でき、各ページで上流データを再取得しますgranularityは系列の間隔を5-minute、hourly、daily、irregular、unknownのいずれかで示します。ポイントのタイムスタンプは Unix ミリ秒ですが、coingecko_get_pricesのlastUpdatedAtUnixSecは秒です- モードとパラメーターが一致しない場合は
invalid_range、スラッグが認識されない場合はcoin_not_foundをスローします
coingecko_get_trending ツール
- パラメーターはありません。検索ボリュームに基づく 24 時間のトレンドコインを返します。利用可能な場合、各コインには
marketCapRank、priceUsd、priceBtc、priceChangePercentage24hUsdが含まれます - 上流では時価総額と出来高が数値ではなく、書式設定済みの表示文字列として返されるため、これらのフィールドは数値データとして提示せず、省略します
nftCountは、上流からあわせて返されるトレンド NFT の数を示します。NFT の詳細は公開されません
coingecko_get_global ツール
- コイン ID は不要です。マクロのスナップショットを 1 回の呼び出しで取得できます
vs_currency(デフォルトはusd)は時価総額と出来高の合計にのみ適用されます。ドミナンスと 24 時間の変動率は、上流では常に USD 建てです- 指定した通貨が上流の通貨別マップに存在しない場合は
unsupported_currencyをスローします。/globalでは上流による通貨検証が行われないため、不明なコードを指定すると合計値が返されません - アクティブな暗号通貨数と市場数、進行中の ICO 数、Unix 秒単位のスナップショットのタイムスタンプを返します
coingecko_list_categories ツール
- 任意の
name_containsでは、空白区切りのトークンで絞り込みます。大文字と小文字、句読点は区別されず、すべてのトークンが名前に含まれている必要があります enrichment.totalCountは、絞り込み前のカテゴリ総数を示します。一致するカテゴリがない場合はenrichment.noticeを返します- 返される
categoryIdの値は、coingecko_list_marketsのcategoryパラメーターで使用します
coingecko://coin/{id} リソース
coingecko_get_coinの完全なレコードと同じデータを返します。通貨単位は常に USD です{id}は CoinGecko のスラッグ(例:"bitcoin")です。ティッカーはcoingecko_search_coinsで解決してください- 上流でスラッグが認識されない場合は
coin_not_foundをスローします
coingecko://global リソース
coingecko_get_globalと同じデータを返します。通貨単位は常に USD です- パラメーターはありません
coingecko_coin_research プロンプト
- 引数:
coinは必須です。名前、ティッカー、または CoinGecko のスラッグを指定します - アシスタントの導入メッセージと、search → get_coin → get_market_chart → get_global の流れを案内するユーザーメッセージを返します
主な機能
@cyanheads/mcp-ts-core を基盤とし、stdio および Streamable HTTP トランスポート、差し替え可能な認証(none/jwt/oauth)、交換可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレースに対応した構造化ロギングを備えています。
CoinGecko 固有の機能:
- CoinGecko v3 REST API 用の型安全なクライアントを備え、各エンドポイントにサービスメソッドを用意しています
- パブリックティアでは API キーなしで動作します。オプションの Demo API キー(
x-cg-demo-api-key)を設定すると、ほかの構成を変更せずにレート上限を引き上げられます - レート制限、一時的な上流障害、タイムアウトに対する再試行とバックオフに対応します。
Retry-Afterを尊重し、恒久的な拒否は直ちに失敗します - 復旧のヒントを含む、ステータス固有のエラー理由を返します。過去の期間に関する制限では、対象期間を狭める方法も案内します
エージェントに使いやすい出力:
- 説明文によって検索してからクエリするよう徹底します。ID を使うすべてのツールで、ティッカーではなくスラッグを指定することを明記し、
coingecko_search_coinsを案内します - 部分的な読み取りに対応します。価格の結果では価格情報がない未解決の ID と通貨を明示し、エンリッチメントでは時価総額と適用したフィルターを開示します
- 単位を明確にします。タイムスタンプのフィールドでは、秒とミリ秒のどちらかを説明します
- 必須の CoinGecko 表記をすべてのツールおよびリソースの出力に含めています。リサーチ用プロンプトでは、エージェントに同じ方法で調査結果を表記するよう指示します
はじめに
次の内容を MCP クライアントの構成ファイルに追加してください。API キーは不要です。CoinGecko Demo の上位ティアを利用する場合に限り、COINGECKO_API_KEY を設定してください(構成を参照)。
{
"mcpServers": {
"coingecko-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/coingecko-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または npx を使用する場合(Bun は不要です):
{
"mcpServers": {
"coingecko-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/coingecko-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または Docker を使用する場合:
{
"mcpServers": {
"coingecko-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/coingecko-mcp-server:latest"
]
}
}
}
CoinGecko Demo キーを設定するには、env ブロックに "COINGECKO_API_KEY": "your-demo-key" を追加してください(Docker の場合は -e COINGECKO_API_KEY=your-demo-key を指定します)。
Streamable HTTP を使用するには、トランスポートを設定してサーバーを起動してください。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以上(または Node.js v24+)。
- 実行にアカウントや API キーは不要です。共有の API キー不要なパブリックプールより高いレート上限(毎月 10k 回、毎分 100 リクエスト)を利用する場合は、無料の CoinGecko Demo API キーを任意で使用できます。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/coingecko-mcp-server.git
- ディレクトリに移動します:
cd coingecko-mcp-server
- 依存関係をインストールします:
bun install
- 環境を構成します(任意):
cp .env.example .env
# the server runs with no .env at all; edit only to set COINGECKO_API_KEY
構成
サーバーは構成なしで実行できます。サーバー固有の環境変数は次の1つだけで、設定は任意です。
| 変数 | 説明 | デフォルト |
|---|---|---|
COINGECKO_API_KEY | CoinGecko のオプションの Demo API キーです。x-cg-demo-api-key ヘッダーとして送信されます(毎月 10k 回、毎分 100 リクエスト)。未設定の場合は API キー不要のパブリックティアを使用します。 | — |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP エンドポイントのパス。 | /mcp |
MCP_SESSION_MODE | HTTP セッションモード:stateless、stateful、または auto。 | stateless |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_LOG_LEVEL | ログレベル(RFC 5424)。 | info |
LOGS_DIR | ログファイルのディレクトリ(Node.js のみ)。 | <project-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンド。 | in-memory |
OTEL_ENABLED | OpenTelemetry instrumentation(スパン、メトリクス、完了ログ)を有効にします。 | false |
任意のオーバーライド設定の全一覧は .env.example を参照してください。
レート制限とデータの鮮度。 API キー不要のパブリックティアは、IP アドレスごとに制限されるプールを共有しているため、軽い負荷でも複数のツールを使う頻度の高いワークフローでは 429 が発生することがあります。サーバーはバックオフして再試行しますが、上限を引き上げることはできません。無料の Demo キーを使うと上限が引き上げられます。CoinGecko のデータはおよそ 60 秒ごとに更新され、ティック単位のデータではありません。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t coingecko-mcp-server .
docker run --rm -e MCP_TRANSPORT_TYPE=http -p 3010:3010 coingecko-mcp-server
Dockerfile は、HTTP トランスポート、ステートレスセッションモード、および /var/log/coingecko-mcp-server へのログ出力をデフォルトで設定します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツール、リソース、プロンプトを登録し、CoinGecko サービスを初期化します。 |
src/config | サーバー固有の環境変数を Zod で解析・検証します。 |
src/mcp-server/tools | ツールの定義(*.tool.ts)。 |
src/mcp-server/resources | リソースの定義(*.resource.ts)。 |
src/mcp-server/prompts | プロンプトの定義(*.prompt.ts)。 |
src/services/coingecko | CoinGecko v3 REST API サービスです。HTTP クライアント、再試行とエラーマッピング、レスポンスの正規化、ドメイン型を含みます。 |
tests/ | src/ に対応する単体テストと統合テスト。 |
開発ガイド
開発ガイドラインとアーキテクチャルールについては、CLAUDE.md/AGENTS.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックでは
try/catchを使用しないでください。 - リクエスト単位のログには
ctx.log、テナント単位のストレージにはctx.stateを使用してください。 - 新しいツールとリソースは、
src/index.tsのcreateApp()配列を通じて登録してください。 - 外部 API 呼び出しはラップしてください。生データを検証し、ドメイン型に正規化してから、出力スキーマを返してください。不足しているフィールドを捏造してはいけません。
貢献
Issue を歓迎します。提出する前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0。詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。