mcp coingecko server
Enables interaction with the CoinGecko Pro API to access cryptocurrency data including price history and market metrics through both MCP and OpenAI function calling.
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.
npm install coingecko-server
Create a .env
file in your project root:
COINGECKO_API_KEY=your_api_key_here
Claude Desktop provides full support for MCP features. To use this server:
Install Claude Desktop
Add to your Claude Desktop configuration:
~/Library/Application Support/Claude/claude_desktop_config.json
%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"
}
}
}
}
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
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
);
}
interface OHLCData {
timestamp: number;
open: number;
high: number;
low: number;
close: number;
}
interface HistoricalData {
prices: [number, number][];
market_caps: [number, number][];
total_volumes: [number, number][];
}
interface CoinInfo {
id: string;
symbol: string;
name: string;
platforms?: Record<string, string>;
}
Please refer to the CoinGecko Pro API documentation for current rate limits and usage guidelines.
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"
}
]