Skip to main content
Glama
akshaygp18

crypto-mcp-server

by akshaygp18

crypto-mcp-server

An MCP server exposing live cryptocurrency market data from the CoinGecko v3 API as 12 typed tools.

Built on the MCP Python SDK 2.x (MCPServer), fully asynchronous, with a shared connection pool, client-side rate limiting, response caching, bounded retries, and structured logging.

Tools

Tool

Purpose

check_api_status

Upstream health plus this server's config and cache stats

list_supported_currencies

Every accepted vs_currency code

search_coins

Resolve a name or symbol to a CoinGecko coin id

get_coin_price

Spot prices for many coins in many currencies at once

convert_crypto_amount

Convert a quantity of a coin into another currency

get_coin_details

Full profile: supply, ATH, 24h/7d/30d changes

list_top_coins

Ranked market table by market cap, volume, or id

get_market_chart

Historical price / market cap / volume series

get_ohlc_candles

Candlestick data

get_historical_price

Market state on one past date (needs a paid plan)

get_trending_coins

Most-searched coins of the last 24 hours

get_global_market_overview

Total market cap, volume, BTC/ETH dominance

Every tool is read-only, returns a typed model (so clients get an outputSchema), and pairs raw numerics with preformatted *_display strings — models quote the display string and compute on the raw value.

Related MCP server: coingecko-mcp-server

Install

uv sync

Run

# stdio (default) — how MCP clients launch it
uv run crypto-mcp-server

# HTTP, for remote clients or debugging
uv run crypto-mcp-server --transport streamable-http --port 8000

# verbose, machine-readable logs
uv run crypto-mcp-server --log-level DEBUG --log-format json

python -m crypto_mcp_server works identically.

Client configuration

{
  "mcpServers": {
    "crypto": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/crypto_mcp_server", "crypto-mcp-server"],
      "env": { "CRYPTO_MCP_API_KEY": "CG-xxxxxxxxxxxx" }
    }
  }
}

Configuration

All settings come from CRYPTO_MCP_* environment variables and are resolved once at startup by Settings.from_env(). Everything is optional — the server runs anonymously against CoinGecko's public tier out of the box.

Variable

Default

Meaning

CRYPTO_MCP_API_KEY

(unset)

CoinGecko Demo or Pro key

CRYPTO_MCP_API_TIER

inferred

public, demo, or pro

CRYPTO_MCP_BASE_URL

follows tier

API root; override for a proxy or mock

CRYPTO_MCP_TIMEOUT_SECONDS

15.0

Total request timeout

CRYPTO_MCP_CONNECT_TIMEOUT_SECONDS

5.0

Connect timeout

CRYPTO_MCP_MAX_RETRIES

3

Retries after the first attempt

CRYPTO_MCP_BACKOFF_BASE_SECONDS

0.5

First-retry backoff factor

CRYPTO_MCP_BACKOFF_MAX_SECONDS

8.0

Ceiling on any single sleep

CRYPTO_MCP_MAX_CONNECTIONS

10

Connection pool size

CRYPTO_MCP_RATE_LIMIT_PER_MINUTE

tier default

Client-side outbound ceiling

CRYPTO_MCP_CACHE_TTL_SECONDS

30.0

Response cache TTL; 0 disables

CRYPTO_MCP_CACHE_MAX_ENTRIES

512

Cache size before LRU eviction

CRYPTO_MCP_LOG_LEVEL

INFO

DEBUGCRITICAL

CRYPTO_MCP_LOG_FORMAT

text

text or json

The tier is inferred from the key's presence, and the base URL follows the tier, so a Pro user only sets CRYPTO_MCP_API_KEY and CRYPTO_MCP_API_TIER=pro.

A note on rate limits

The anonymous tier is throttled per source IP and shared with every other unauthenticated caller behind it. The default client-side budgets (5/min public, 25/min demo, 450/min pro) sit deliberately below CoinGecko's published ceilings — measured against the live API, even 10/min drew constant 429s without a key. For anything beyond casual use, set an API key.

Architecture

server.py     MCP tools: argument validation, error translation, lifespan
  ↓
mappers.py    raw CoinGecko JSON → typed models
  ↓
client.py     the only module that knows HTTP
  ↓
utils.py      retry, rate limiting, TTL cache, formatting, input hygiene

config.py, exceptions.py, logging_config.py, and models.py are shared by every layer. A single request flows through:

get_json()
  └─ TTLCache.get_or_load     de-duplicates concurrent identical calls
       └─ retry_async         exponential backoff with full jitter
            └─ AsyncRateLimiter
                 └─ httpx2    one attempt

Caching sits outside retries so a retried call is stored once; the limiter sits inside them so every physical attempt is metered.

Error handling

Failures are expressed as a shallow hierarchy under CryptoMCPError (ToolInputError, RateLimitError, AuthenticationError, ResourceNotFoundError, UpstreamTimeoutError, …). Each tool is wrapped by @tool_handler, which guarantees three things:

  • Argument mistakes fail before any network call, with a message naming a valid value (order must be one of market_cap_desc, …).

  • Known failures surface as ToolError with their message intact.

  • Anything unexpected is logged with a full traceback and returned as a generic message — no traceback ever reaches the client.

Retries cover timeouts, connection errors, and 5xx/429 responses. When CoinGecko supplies a Retry-After longer than BACKOFF_MAX_SECONDS, the server stops rather than retrying: sleeping less than the server demanded only earns another rejection, and honouring a 60-second window inside a tool call would stall the session.

Logging

Logs go to stderr, never stdout — under the stdio transport, stdout is the JSON-RPC channel, and a stray write there corrupts the frame the client is parsing and drops the session. configure_logging also detaches any stdout handler it finds on the root logger.

Tests

uv run pytest

109 tests, no network access: upstream behaviour is simulated with httpx2.MockTransport injected into the real client, and the tool layer is driven through a genuine in-process MCP client session, so retries, caching, rate limiting, error mapping, and the wire protocol all run as they do in production.

Available Tools

12 tools
check_api_statusCheck CoinGecko API statusA
Read-only

Verify that the CoinGecko API is reachable and report this server's configuration and cache statistics. Use this first when other tools are failing, to tell an upstream outage from a configuration problem.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYesStatus text returned by CoinGecko, or the failure reason.
api_tierYesConfigured CoinGecko plan: public, demo, or pro.
base_urlYesAPI root this server is talking to.
reachableYesTrue when CoinGecko answered the ping successfully.
checked_atYesUTC timestamp of the health check.
latency_msYesRound-trip time of the health check, in milliseconds.
cache_entriesYesNumber of live entries in the response cache.
cache_hit_rateYesCache hits divided by total lookups, 0.0-1.0.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful context about what the tool reports (configuration and cache statistics) and its diagnostic purpose, but does not delve into any potential limitations or edge cases. Still, for a read-only diagnostic tool, this is sufficient and adds value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences that immediately state the tool's primary function and follow with a crisp usage recommendation. No redundant words or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description is complete. It explains when to use the tool, what it does, and what it reports. The presence of an output schema means return values need not be described here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to elaborate on parameter semantics, and there is nothing further to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool verifies CoinGecko API reachability and reports server configuration and cache statistics. This is a specific verb-resource pairing that distinguishes it from the sibling coin-data tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs to use this tool first when other tools fail, and explains it helps differentiate upstream outages from configuration problems. This is strong situational guidance that goes beyond merely describing the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_crypto_amountConvert a crypto amountA
Read-only

Convert a quantity of one cryptocurrency into another currency at the current rate, e.g. 2.5 ETH in USD.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesQuantity of the source coin to convert.
coin_idYesSource CoinGecko coin id, e.g. 'ethereum'.
vs_currencyNoTarget currency code, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
amountYesQuantity of the source asset converted.
from_coinYesSource CoinGecko coin id.
unit_priceYesPrice of one source unit in the target currency.
to_currencyYesTarget currency code.
retrieved_atYesUTC timestamp of the underlying quote.
converted_valueYesamount x unit_price.
converted_displayYesFormatted converted value.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds 'at the current rate' to indicate real-time data, but doesn't cover error behavior or fallback rates. This matches the baseline for annotation-covered read tools.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence plus an example, no fluff. It is front-loaded and every word contributes to understanding the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple conversion tool with three well-described params and an output schema (not shown but present), the description is nearly complete. The only minor gap is not explicitly contrasting with get_coin_price, but the example indirectly does this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with per-parameter descriptions. The example '2.5 ETH in USD' adds a concrete mapping to amount, coin_id, and vs_currency, slightly enriching the schema baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool converts a crypto amount to another currency at the current rate, with a concrete example ('2.5 ETH in USD'). This distinguishes it from siblings like get_coin_price (which probably returns price only) and historical tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The example and wording imply this is for live conversion of a specific amount, which is enough contextual guidance. It doesn't explicitly exclude alternatives but the use case is clear relative to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_coin_detailsGet coin detailsA
Read-only

Get a full profile for one coin: description, homepage, categories, supply figures, all-time high, and current market data including 24h, 7d, and 30d price changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
coin_idYesCoinGecko coin id, e.g. 'bitcoin'.
vs_currencyNoCurrency for the market figures, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYesDisplay name.
symbolYesTicker symbol, upper-cased.
coin_idYesCoinGecko coin id.
low_24hNoLowest price in the last 24 hours.
high_24hNoHighest price in the last 24 hours.
homepageNoPrimary project website.
categoriesNoCoinGecko category tags.
market_capNoMarket capitalisation.
max_supplyNoHard cap on supply, if any.
descriptionNoEnglish project description, truncated.
vs_currencyYesCurrency the market figures below are denominated in.
last_updatedNoWhen CoinGecko last refreshed this record.
total_supplyNoCoins created, including locked.
total_volumeNo24-hour trading volume.
all_time_highNoAll-time high price.
current_priceNoLatest price.
market_cap_rankNoRank by market cap; lower is larger.
all_time_high_dateNoWhen the all-time high was set.
circulating_supplyNoCoins currently in circulation.
market_cap_displayNoFormatted market capitalisation.
current_price_displayNoFormatted latest price.
price_change_7d_percentNo7-day percentage change.
price_change_24h_percentNo24-hour percentage change.
price_change_30d_percentNo30-day percentage change.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral context by detailing what data the 'full profile' includes (e.g., supply figures, all-time high, 24h/7d/30d price changes), which goes beyond the structured annotations. It does not contradict annotations and enriches the agent's understanding of the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly-packed sentence that front-loads the main purpose ('full profile for one coin') and immediately lists the included data. Every element contributes directly to understanding the tool's output. There is no redundancy or filler, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, both documented), the presence of an output schema, and annotations covering safety, the description provides sufficient context. It clearly sets expectations for the breadth of data returned without needing to explain return formats (handled by output schema). The description is complete for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for both parameters (coin_id and vs_currency). The description does not add significant new parameter semantics; it mentions market data and price changes, which aligns with vs_currency but is already implied by the schema. Baseline 3 is appropriate since the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get a full profile for one coin' and enumerates specific data categories (description, homepage, categories, supply figures, all-time high, and price changes). This distinguishes it from sibling tools like get_coin_price (which only returns price) and get_market_chart (which returns chart data). The verb 'get' plus the resource 'coin' and the detailed scope make the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a comprehensive profile is needed, but it does not explicitly state when to use this tool versus alternatives. It lacks explicit 'when not to use' guidance or references to siblings such as get_coin_price for simple price queries. The context is clear but implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_coin_priceGet current coin pricesA
Read-only

Get current prices for one or more coins in one or more currencies, optionally with market cap, 24-hour volume, and 24-hour change. Batch coins into a single call rather than calling once per coin.

ParametersJSON Schema
NameRequiredDescriptionDefault
coin_idsYesComma-separated CoinGecko coin ids, e.g. 'bitcoin,ethereum'.
vs_currenciesNoComma-separated quote currency codes, e.g. 'usd,eur'.usd
include_24h_changeNoInclude 24-hour percentage price change for each pair.
include_24h_volumeNoInclude 24-hour trading volume for each pair.
include_market_capNoInclude market capitalisation for each pair.

Output Schema

ParametersJSON Schema
NameRequiredDescription
quotesYesOne entry per (coin, currency) pair that resolved.
retrieved_atYesUTC timestamp of this lookup.
requested_coinsYesCoin ids as requested, after normalisation.
unresolved_coinsNoRequested ids CoinGecko returned no data for — usually a wrong id; resolve the correct one with search_coins.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, non-destructive operation, and the description adds the batching efficiency hint. However, it does not disclose potential rate limits, response size limits, or error behavior for invalid coin IDs. With annotations covering safety, the description contributes moderate context beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The first sentence states the core purpose, and the second gives a key usage hint. It is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations provide safety, the description sufficiently covers the tool's purpose and the key batching behavior. For a simple read-only price look-up with all parameters documented, it is complete enough for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has meaningful descriptions (e.g., comma-separated CoinGecko ids). The description's mention of optional market cap, volume, and change mirrors the boolean parameters but does not add syntax or format details beyond what the schema provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get') and resource ('current prices for one or more coins in one or more currencies'), and lists optional data dimensions (market cap, 24h volume, 24h change). This distinguishes it from sibling tools like get_market_chart (historical) and get_coin_details (static info).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance to batch multiple coins into a single call rather than making one call per coin, which is a clear when-to-use directive. It doesn't explicitly name alternatives or exclusions, but the purpose and batching instruction make the intended usage context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_global_market_overviewGet global market overviewA
Read-only

Get aggregate statistics for the whole crypto market: total market cap, total 24-hour volume, BTC and ETH dominance, and the number of tracked coins and markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
vs_currencyNoCurrency for the aggregate figures, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
marketsNoExchanges/markets tracked.
updated_atNoWhen CoinGecko computed these aggregates.
vs_currencyYesCurrency the aggregate figures are denominated in.
total_market_capNoTotal market cap in the quote currency.
total_volume_24hNoTotal 24-hour volume in the quote currency.
btc_dominance_percentNoBitcoin's share of total market cap.
eth_dominance_percentNoEthereum's share of total market cap.
active_cryptocurrenciesNoCoins tracked by CoinGecko.
total_market_cap_displayNoFormatted total market cap.
total_volume_24h_displayNoFormatted total 24-hour volume.
market_cap_change_24h_percentNo24-hour percentage change in total market cap.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds valuable context by specifying the exact metrics returned (market cap, volume, BTC/ETH dominance, counts). This goes beyond the basic safety profile, though it does not disclose potential limitations or rate limits. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise, information-dense, and front-loaded with the core purpose. It lists all key outputs without unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one optional parameter, output schema provided, annotations present), the description is complete enough. It clearly states what the tool does and the specific data it returns, meeting all needs for agent selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully describes the only parameter (vs_currency) with a clear description and default value, so the description does not need to add parameter details. The baseline of 3 applies given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('aggregate statistics for the whole crypto market'), and enumerates the specific metrics returned. This distinguishes it from sibling tools that focus on individual coins or lists, such as get_coin_details or list_top_coins.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for market-wide aggregate statistics but does not explicitly state when to use this tool instead of alternatives like list_top_coins or get_coin_price. There are no explicit exclusions or alternative recommendations, so the guidance remains implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_historical_priceGet price on a past dateA
Read-only

Get a coin's price, market cap, and volume as of 00:00 UTC on a past calendar date. For a range of dates use get_market_chart instead. Note: CoinGecko restricts this endpoint to Demo and Pro plans — without an API key it fails. get_market_chart covers history on the public tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD form, e.g. '2024-03-15'.
coin_idYesCoinGecko coin id, e.g. 'bitcoin'.
vs_currencyNoQuote currency, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
dateYesSnapshot date, ISO YYYY-MM-DD.
nameYesDisplay name.
priceNoPrice at 00:00 UTC on that date.
symbolYesTicker symbol, upper-cased.
coin_idYesCoinGecko coin id.
market_capNoMarket capitalisation on that date.
vs_currencyYesCurrency the figures are denominated in.
total_volumeNoTrading volume on that date.
price_displayNoFormatted price.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses important behavioral traits: the exact time (00:00 UTC), the data fields (price, market cap, volume), and the plan/API key requirement and failure mode. This adds substantial context for the agent, especially the authentication limitation and the exact point-in-time semantics, which are not captured in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences and front-loads the core purpose first, then provides the alternative and caveat. Every sentence earns its place: the first states the primary action, the second gives usage guidance and a warning. There is no wasted wording or redundant repetition of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of a rich output schema (not described here but inferred from structured context) and complete annotations, the description covers all essential operational context. It explains what data is returned, the exact temporal scope, the access restrictions, and the alternative for broader ranges. No significant gaps remain for an agent to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with descriptions for all parameters, so the baseline is 3. The description adds meaningful semantic detail for the 'date' parameter ('00:00 UTC' and 'past calendar date') and clarifies the output fields, which aligns with the schema's parameter meanings. While most parameter documentation comes from the schema, the description enriches the date's temporal interpretation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: 'Get a coin's price, market cap, and volume as of 00:00 UTC on a past calendar date.' It distinguishes from the sibling get_market_chart by explicitly noting the difference between a single date and a range of dates. The verb 'get' and the resource (coin's price, market cap, volume) are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to use this tool ('For a range of dates use get_market_chart instead') and provides a critical prerequisite: 'CoinGecko restricts this endpoint to Demo and Pro plans — without an API key it fails.' It also notes that get_market_chart covers history on the public tier, offering a clear alternative for public-tier users.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_chartGet historical market chartA
Read-only

Get historical price, market cap, and volume series for a coin over a look-back window. Long windows are down-sampled to max_points evenly spaced observations; the reported change_percent is always computed from the full series.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days ('1', '7', '30', '365') or 'max'.30
coin_idYesCoinGecko coin id, e.g. 'bitcoin'.
intervalNoSampling granularity: 'auto', 'daily', or 'hourly'. Some values need a paid plan.auto
max_pointsNoMaximum points returned per series (10-1000).
vs_currencyNoQuote currency, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYesLook-back window requested, in days, or 'max'.
pricesYesPrice series, oldest first.
coin_idYesCoinGecko coin id.
intervalYesSampling granularity CoinGecko applied: auto, daily, or hourly.
last_priceNoMost recent price in the window.
downsampledYesTrue when points were dropped to fit max_points.
first_priceNoEarliest price in the window.
market_capsYesMarket-cap series, oldest first.
point_countYesPoints per series after down-sampling.
vs_currencyYesCurrency the series are denominated in.
total_volumesYesVolume series, oldest first.
change_displayNoFormatted change across the window.
change_percentNoPercentage change across the window.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and non-destructive. The description adds valuable behavioral details: long windows are down-sampled to max_points evenly spaced observations, and change_percent is always computed from the full series. This goes beyond the annotation safety profile, explaining the data processing behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two well-structured sentences that are front-loaded with the primary purpose and immediately add important caveats about down-sampling. No redundant information or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (5 parameters) and the presence of an output schema, the description is complete enough. It covers the core behavior, down-sampling, and the change_percent calculation. It does not explicitly mention the paid-plan limitation for some intervals, but that is already in the schema parameter description, so no major gap exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaning by clarifying the interplay between 'days' and 'max_points' via the down-sampling note, and explains that change_percent is computed from the full series, which affects understanding of the output. This is extra value beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and names the exact resource: 'historical price, market cap, and volume series for a coin over a look-back window.' This clearly distinguishes the tool from siblings like get_historical_price or get_ohlc_candles by emphasizing the multi-series market chart output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the intended use case: obtaining historical market chart data for a coin. It does not explicitly mention alternatives or exclusions, but the phrase 'market chart' and the mention of down-sampling provide clear context for when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ohlc_candlesGet OHLC candlestick dataA
Read-only

Get open/high/low/close candles for a coin. CoinGecko picks the candle width from the window: 30 minutes up to 2 days, 4 hours up to 30 days, 4 days beyond that. The chosen width is reported in the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days: 1, 7, 14, 30, 90, 180, 365, or 'max'.7
coin_idYesCoinGecko coin id, e.g. 'bitcoin'.
vs_currencyNoQuote currency, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYesLook-back window requested, in days.
candlesYesCandles, oldest first.
coin_idYesCoinGecko coin id.
vs_currencyYesCurrency the candles are denominated in.
candle_countYesNumber of candles returned.
candle_intervalYesCandle width CoinGecko chose for this window.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations (readOnlyHint=true, destructiveHint=false) by explaining CoinGecko's candle width selection logic and noting that the chosen width is reported in the result. This is valuable non-obvious behavior that helps the agent interpret the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, followed by the necessary candle width behavior. There is no wasted text or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (three parameters, one required) and the presence of annotations and an output schema, the description is sufficiently complete. It covers the core purpose and the critical candle width nuance, while the schema handles parameter details and the output schema handles return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters, so the description does not need to elaborate on parameter semantics. The tool description adds context about how 'days' relates to candle width, but this is behavioral rather than parameter-specific meaning. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get open/high/low/close candles for a coin', using a specific verb and resource. It distinguishes itself from sibling tools like get_coin_price (single price) and get_market_chart (market chart data) by focusing specifically on OHLC candlestick data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for obtaining OHLC candlestick data, but does not explicitly state when to use this tool versus alternatives. There is no mention of exclusions or alternative tools, so the usage guidance is only implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_supported_currenciesList supported quote currenciesA
Read-only

List every currency code accepted as a vs_currency by the other tools, including fiat ('usd', 'eur') and crypto ('btc', 'eth').

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYesTotal number of supported currencies.
currenciesYesSupported quote-currency codes, alphabetically sorted.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe read-only operation, so the description's main contribution is specifying that the list is exhaustive ('every currency code') and includes both fiat and crypto categories. This adds behavioral context beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and includes concrete examples for currency types. Every word contributes necessary information; no filler. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with a full output schema and safety annotations, the description covers the essential purpose and scope. It doesn't need to explain return values because the output schema exists. It is fully self-contained for an agent to decide when to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, and the schema has 100% coverage of that (an empty object). The description doesn't need to explain parameter semantics, and it doesn't provide any misleading information. Baseline for zero params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List every currency code') and scope ('accepted as a vs_currency by the other tools'), clearly distinguishing it from price or coin-list tools. Examples of fiat and crypto add concrete meaning. It fully addresses what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'accepted as a vs_currency by the other tools' provides clear context that this is the reference list for currency validation in sibling tools. While it doesn't explicitly name alternatives or say 'use this before other tools', the intent is unambiguous given no sibling tool covers this function.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_top_coinsList top coins by market capA
Read-only

List coins ranked by market cap, volume, or id, with price and 24-hour change for each. Use this for market overviews and 'top N' questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo1-based page number.
limitNoNumber of coins to return (1-250).
orderNoSort order: market_cap_desc, market_cap_asc, volume_desc, volume_asc, id_asc, id_desc.market_cap_desc
vs_currencyNoCurrency for all figures, e.g. 'usd'.usd

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes1-based page number returned.
orderYesSort applied upstream, e.g. 'market_cap_desc'.
listingsYesRows in the requested sort order.
per_pageYesRows requested per page.
vs_currencyYesCurrency all figures are denominated in.
retrieved_atYesUTC timestamp of this listing.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds that each coin includes price and 24-hour change, which is a mild behavioral detail, but it doesn't disclose potential caveats like rate limits or pagination behavior. Since annotations carry the safety profile, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and purpose, no fluff. Every sentence contributes meaning, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the moderate complexity (4 optional params), rich annotations, and an output schema, the description is sufficiently complete. It conveys the core function and use case without needing to repeat return details that the output schema already covers. The only minor gap is not explicitly distinguishing from similar list tools, but the context is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are fully described in the schema. The description reinforces that ranking can be by market cap, volume, or id, which aligns with the order parameter but doesn't add new meaning beyond the schema's own description. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists coins ranked by market cap, volume, or id, with price and 24-hour change. It differentiates from siblings by framing it for market overviews and 'top N' questions, which is distinct from get_trending_coins or get_global_market_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: 'Use this for market overviews and top N questions.' It doesn't name alternatives or state when not to use it, but this clear context implies appropriate scenarios without needing exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_coinsSearch for coinsA
Read-only

Find coins by name or ticker symbol and return their CoinGecko ids. Call this whenever you are unsure of a coin id — every other tool expects the id slug ('bitcoin'), not the symbol ('BTC').

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of matches to return (1-50).
queryYesName or ticker to search for, e.g. 'solana' or 'SOL'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
coinsYesMatching coins, ordered by CoinGecko's relevance ranking.
queryYesThe search string that produced these hits.
total_matchesYesNumber of hits returned after the result limit was applied.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, non-destructive behavior. The description adds useful behavioral context: it returns CoinGecko ids and clarifies that other tools expect slug format, which is important for correct downstream use. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, each earning its place. The first states the action and output; the second provides essential usage guidance about when to call and the slug/symbol distinction. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich schema, output schema present, and helpful annotations, the description fills the remaining need: explaining the tool's role in the broader workflow (id lookup). It is complete for a simple search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for both 'query' (name or ticker, with examples) and 'limit' (max matches, range). The description itself doesn't add parameter detail, but the schema already does the heavy lifting, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb ('Find'), names the resource (coins), and states the output (CoinGecko ids). It sets this tool apart from siblings by explaining its role as an id-lookup helper, noting that every other tool expects the slug rather than the symbol.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit trigger: 'Call this whenever you are unsure of a coin id'. Clearly distinguishes from other tools by referencing the slug-vs-symbol convention, but does not explicitly state when not to use it or name an alternative tool for the same purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedcheck_api_status
    • First observedconvert_crypto_amount
    • First observedget_coin_details
    • First observedget_coin_price
    • First observedget_global_market_overview
    • First observedget_historical_price
    • First observedget_market_chart
    • First observedget_ohlc_candles
    • First observedget_trending_coins
    • First observedlist_supported_currencies
    • First observedlist_top_coins
    • First observedsearch_coins

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct resource and action: price, details, history, market overview, search, conversion, health check, etc. Even similar tools like get_historical_price and get_market_chart differ by single-date vs series, and get_trending_coins vs list_top_coins differ by metric. No two tools could be easily confused.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (list_, get_, search_, convert_, check_). There is no mixing of camelCase or inconsistent verb styles, making the API predictable and easy to navigate.

Tool Count5/5

12 tools is well within the ideal 3-15 range. The server is scoped to cryptocurrency market data, and each tool serves a clear purpose without unnecessary bloat or missing essential operations.

Completeness5/5

The tool surface comprehensively covers the domain: real-time prices, historical data, OHLC, conversion, market rankings, global stats, coin discovery, and API diagnostics. There are no obvious gaps or dead ends; the historical price limitation is an external API restriction, not a missing tool.

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    An MCP server for CoinGecko that connects any MCP-compatible client to free crypto market data, providing tools for prices, market caps, trending coins, historical data, and global stats.
    8
    50
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server providing market data for 15,000+ cryptocurrencies including prices, history, trends, and deep coin metadata via CoinGecko.
    101
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    A Model Context Protocol server for real-time cryptocurrency price data, market data, trending coins, historical charts, and currency conversion using the free CoinGecko API.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/akshaygp18/crypto-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server