CoinGecko Server
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:
- Install Claude Desktop 
- Add to your Claude Desktop configuration: 
* On macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
* On Windows: `%APPDATA%\Claude\claude_desktop_config.json`
{
  "mcpServers": {
    "coingecko": {
      "command": "node",
      "args": ["/path/to/coingecko-server/build/index.js"],
      "env": {
        "COINGECKO_API_KEY": "your-api-key-here"
      }
    }
  }
}
- 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