# Crypto Market Search

> Search and analyze cryptocurrency market data using CoinPaprika. Activates when users search for coins, ask about prices, request market overviews, or look up tokens by contract address.

- Skill: `coinpaprika/crypto-market-search` (Agent Skill)
- Install (CLI): `npx skillmds@latest add coinpaprika/crypto-market-search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/coinpaprika/crypto-market-search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: coinpaprika (https://skillmd.com/u/coinpaprika)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/coinpaprika/crypto-market-search

---


## Purpose

Search, discover, and analyze cryptocurrency market data across 12,000+ cryptocurrencies and 350+ exchanges using CoinPaprika MCP tools.

## Available Tools

| Tool | Use case |
|------|----------|
| `search(q, categories, limit, rationale)` | Find coins by name, symbol, or keyword |
| `resolveId(type, query, rationale)` | Resolve fuzzy names to canonical coin IDs |
| `getTickersById(coinId, quotes, rationale)` | Price, market cap, volume for one coin |
| `getTickers(limit, quotes, rationale)` | Top coins by market cap |
| `getGlobal(rationale)` | Total market cap, BTC dominance, 24h volume |
| `getCoinById(coinId, rationale)` | Coin description, links, team, tags |
| `getCoinExchanges(coinId, rationale)` | Which exchanges list this coin |
| `getCoinMarkets(coinId, quotes, rationale)` | Trading pairs for a coin |
| `getCoinOHLCVHistorical(coinId, start, rationale)` | Historical candlestick data (Starter+, paid) |
| `getCoinOHLCVLatest(coinId, rationale)` | Last full day OHLCV |
| `getCoinOHLCVToday(coinId, rationale)` | Today's partial OHLCV |
| `getExchanges(limit, quotes, rationale)` | List exchanges |
| `getExchangeByID(exchangeId, rationale)` | Exchange details |
| `getPlatforms(rationale)` | List contract platforms |
| `getTickerByContract(platformId, contractAddress, rationale)` | Price lookup by contract address |
| `getTagById(tagId, additionalFields, rationale)` | Get coins by category (use `additionalFields: "coins"`) |
| `getTags(rationale)` | List all categories/tags |
| `priceConverter(baseCurrencyId, quoteCurrencyId, amount, rationale)` | Convert between currencies |
| `status(rationale)` | API health check |

**Every tool requires a `rationale` argument.** It is a 20 to 500 character string saying what triggered the call and what you will do with the result, for example "User asked for the BTC price; fetching the ticker to report the current USD value." Omitting it fails the call with `-32602 Input validation error`.

## Coin ID Format

Pattern: `{symbol}-{name}` (lowercase, hyphens). Examples: `btc-bitcoin`, `eth-ethereum`, `sol-solana`.

If unsure of the ID, call `search(q: "user query", rationale)` or `resolveId(type: "coin", query: "user query", rationale)` first.

## Workflows

**Search for a coin:**
1. `search(q: "pepe", categories: "currencies", limit: 5, rationale)`
2. Pick the correct result, use its `id` field for further queries

**Get coin price and details:**
1. `getTickersById(coinId: "btc-bitcoin", quotes: "USD,BTC", rationale)`
2. Key fields: `quotes.USD.price`, `quotes.USD.market_cap`, `quotes.USD.volume_24h`, `quotes.USD.percent_change_24h`

**Top coins by market cap:**
1. `getTickers(limit: 10, quotes: "USD", rationale)`
2. Results are sorted by rank

**Market overview:**
1. `getGlobal(rationale)` for total market cap, BTC dominance, volume
2. `getTickers(limit: 10, rationale)` for top movers

**Look up token by contract address:**
1. `getTickerByContract(platformId: "eth-ethereum", contractAddress: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", rationale)`
2. Platform IDs: `eth-ethereum`, `bnb-binance-coin`, `matic-polygon`, `sol-solana`, `arb-arbitrum`, `avax-avalanche`, `op-optimism`, `base-base`

**Find coins by category:**
1. `getTagById(tagId: "stablecoin", additionalFields: "coins", rationale)` returns array of coin IDs
2. Common tags: `stablecoin`, `defi`, `nft`, `layer-1`, `layer-2`, `meme-token`

**Recent OHLCV, free tier:**
1. `getCoinOHLCVLatest(coinId: "btc-bitcoin", rationale)` for the last full day
2. `getCoinOHLCVToday(coinId: "btc-bitcoin", rationale)` for today's partial candle
3. For percent changes over 1h, 24h, 7d and 30d use `getTickersById` instead of candles

**Historical OHLCV, paid:**
1. `getCoinOHLCVHistorical(coinId: "btc-bitcoin", start: "2025-01-01", interval: "24h", limit: 30, rationale)`
2. Intervals: `5m`, `15m`, `30m`, `1h`, `6h`, `12h`, `24h`
3. This one needs a Starter+ CoinPaprika key. The hosted server at `mcp.coinpaprika.com`
   answers it with `{"error":"paid_endpoint","required_plan":"Starter+"}`, so tell the user
   what is missing rather than retrying. The same applies to `getTickersHistoricalById` and
   `getHistoricalTickerByContract`.

## Output Guidelines

- Use compact numbers: 1.2B, 450M, 12.3K
- Show multiple timeframes: 1h, 24h, 7d, 30d changes
- Include market cap rank for context
- Note distance from ATH when significant
- Distinguish circulating vs total vs max supply
- Never provide investment advice
- Always cite which MCP tools provided the data

## Error Handling

- Coin not found → use `search` to find similar names
- Invalid coin ID → must be `symbol-name` format (lowercase, hyphens)
- Rate limited → wait briefly, suggest caching results

## Rate Limits

- Free tier: 20,000 calls/month (no API key needed)
- Pro tier: higher limits via api-pro.coinpaprika.com
- Global: 10 requests/second

