mcp coingecko server

Local 2025-08-31 23:15:35 0

Enables interaction with the CoinGecko Pro API to access cryptocurrency data including price history and market metrics through both MCP and OpenAI function calling.


A Model Context Protocol (MCP) server and OpenAI function calling service for interacting with the CoinGecko Pro API.

Features

  • Paginated list of supported cryptocurrencies
  • Coin ID lookup by name or symbol
  • Historical price, market cap, and volume data
  • OHLC (Open, High, Low, Close) candlestick data
  • Local coin cache with refresh capability

Installation

npm install coingecko-server

Environment Setup

Create a .env file in your project root:

COINGECKO_API_KEY=your_api_key_here

Usage with Claude Desktop

Claude Desktop provides full support for MCP features. To use this server:

  1. Install Claude Desktop

  2. Add to your Claude Desktop configuration:

  3. On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  4. On Windows: %APPDATA%Claudeclaude_desktop_config.json
{
  "mcpServers": {
    "coingecko": {
      "command": "node",
      "args": ["/path/to/coingecko-server/build/index.js"],
      "env": {
        "COINGECKO_API_KEY": "your-api-key-here"
      }
    }
  }
}
  1. Restart Claude Desktop

The server provides the following tools: - get-coins: Get a paginated list of supported coins - find-coin-ids: Look up CoinGecko IDs for coin names/symbols - get-historical-data: Get historical price, market cap, and volume data - get-ohlc-data: Get OHLC candlestick data - refresh-cache: Refresh the local coin list cache

Usage with OpenAI Function Calling

import { CoinGeckoService } from 'coingecko-server';
import OpenAI from 'openai';

const openai = new OpenAI();
const coinGeckoService = new CoinGeckoService(process.env.COINGECKO_API_KEY);

// Get function definitions
const functions = CoinGeckoService.getOpenAIFunctionDefinitions();

// Example: Get historical data
const response = await openai.chat.completions.create({
  model: "gpt-4-turbo-preview",
  messages: [{ role: "user", content: "Get Bitcoin's price history for the last week" }],
  functions: [functions[2]], // get_historical_data function
  function_call: "auto",
});

if (response.choices[0].message.function_call) {
  const args = JSON.parse(response.choices[0].message.function_call.arguments);
  const history = await coinGeckoService.getHistoricalData(
    args.id,
    args.vs_currency,
    args.from,
    args.to,
    args.interval
  );
}

Data Types

OHLCData

interface OHLCData {
  timestamp: number;
  open: number;
  high: number;
  low: number;
  close: number;
}

HistoricalData

interface HistoricalData {
  prices: [number, number][];
  market_caps: [number, number][];
  total_volumes: [number, number][];
}

CoinInfo

interface CoinInfo {
  id: string;
  symbol: string;
  name: string;
  platforms?: Record<string, string>;
}

Rate Limits

Please refer to the CoinGecko Pro API documentation for current rate limits and usage guidelines.

License

MIT

[
  {
    "description": "Get a paginated list of all supported coins on CoinGecko. Data up to March 9, 2025",
    "inputSchema": {
      "properties": {
        "page": {
          "description": "Page number (starts from 1, default: 1)",
          "minimum": 1,
          "type": "number"
        },
        "pageSize": {
          "description": "Results per page (default: 100, max: 1000)",
          "maximum": 1000,
          "minimum": 1,
          "type": "number"
        }
      },
      "type": "object"
    },
    "name": "get-coins"
  },
  {
    "description": "Find CoinGecko IDs for a list of coin names or symbols (case-insensitive). Data up to March 9, 2025",
    "inputSchema": {
      "properties": {
        "coins": {
          "description": "Array of coin names or symbols to search for (e.g., ['BTC', 'ethereum', 'DOT'])",
          "items": {
            "type": "string"
          },
          "maxItems": 100,
          "type": "array"
        }
      },
      "required": [
        "coins"
      ],
      "type": "object"
    },
    "name": "find-coin-ids"
  },
  {
    "description": "Get historical price, market cap, and volume data for a specific coin. Data up to March 9, 2025",
    "inputSchema": {
      "properties": {
        "from_date": {
          "description": "Start date in YYYY-MM-DD format (e.g., '2024-01-01')",
          "pattern": "^\d{4}-\d{2}-\d{2}$",
          "type": "string"
        },
        "id": {
          "description": "CoinGecko coin ID (use find-coin-ids to lookup)",
          "type": "string"
        },
        "interval": {
          "description": "Data interval - affects maximum time range: 5m (up to 1 day), hourly (up to 90 days), daily (up to 365 days)",
          "enum": [
            "5m",
            "hourly",
            "daily"
          ],
          "type": "string"
        },
        "to_date": {
          "description": "End date in YYYY-MM-DD format (e.g., '2024-12-30')",
          "pattern": "^\d{4}-\d{2}-\d{2}$",
          "type": "string"
        },
        "vs_currency": {
          "description": "Target currency (e.g., 'usd', 'eur')",
          "type": "string"
        }
      },
      "required": [
        "id",
        "vs_currency",
        "from_date",
        "to_date"
      ],
      "type": "object"
    },
    "name": "get-historical-data"
  },
  {
    "description": "Manually update the local cache of CoinGecko coin data (automatically refreshed periodically, only needed if seeing stale data)",
    "inputSchema": {
      "properties": {},
      "type": "object"
    },
    "name": "refresh-cache"
  },
  {
    "description": "Get OHLC (Open, High, Low, Close) data for a specific coin within a time range. Data up to March 9, 2025",
    "inputSchema": {
      "properties": {
        "from_date": {
          "description": "Start date in YYYY-MM-DD format (e.g., '2024-01-01')",
          "pattern": "^\d{4}-\d{2}-\d{2}$",
          "type": "string"
        },
        "id": {
          "description": "CoinGecko coin ID (use find-coin-ids to lookup)",
          "type": "string"
        },
        "interval": {
          "description": "Data interval - daily (up to 180 days) or hourly (up to 31 days)",
          "enum": [
            "daily",
            "hourly"
          ],
          "type": "string"
        },
        "to_date": {
          "description": "End date in YYYY-MM-DD format (e.g., '2024-12-30')",
          "pattern": "^\d{4}-\d{2}-\d{2}$",
          "type": "string"
        },
        "vs_currency": {
          "description": "Target currency (e.g., 'usd', 'eur')",
          "type": "string"
        }
      },
      "required": [
        "id",
        "vs_currency",
        "from_date",
        "to_date",
        "interval"
      ],
      "type": "object"
    },
    "name": "get-ohlc-data"
  }
]