CoinMarketCap MCP
by shinzo-labs
Verified
#!/usr/bin/env node
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
import { z } from "zod"
const server = new McpServer({
name: "CoinMarketCap-MCP",
version: "1.2.3",
description: "A complete MCP for the CoinMarketCap API"
})
// Subscription plan levels in order of increasing access
const SUBSCRIPTION_LEVELS = {
"Basic": 0,
"Hobbyist": 1,
"Startup": 2,
"Standard": 3,
"Professional": 4,
"Enterprise": 5
}
// Enhanced response formatter with status code support
function formatErrorResponse(message, status = 403) {
return {
content: [{
type: "text",
text: JSON.stringify({ error: message, status })
}]
}
}
// Helper function to format successful API responses
function formatResponse(data) {
return {
content: [{
type: "text",
text: JSON.stringify(data)
}]
}
}
// Enhanced API request wrapper with error handling
async function makeApiRequestWithErrorHandling(endpoint, params = {}) {
try {
const data = await makeApiRequest(endpoint, params)
return formatResponse(data)
} catch (error) {
return formatErrorResponse(`Error fetching data from CoinMarketCap: ${error.message}`, 500)
}
}
// Helper function for making API requests to CoinMarketCap
async function makeApiRequest(endpoint, params = {}) {
const apiKey = process.env.COINMARKETCAP_API_KEY
if (!apiKey) {
throw new Error("COINMARKETCAP_API_KEY environment variable is not set")
}
// Build query parameters
const queryParams = new URLSearchParams()
Object.entries(params).forEach(([key, value]) => {
if (value !== undefined) {
queryParams.append(key, value.toString())
}
})
const url = `https://pro-api.coinmarketcap.com${endpoint}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`
const response = await fetch(url, {
method: 'GET',
headers: {
'Accept': 'application/json',
'X-CMC_PRO_API_KEY': apiKey,
}
})
if (!response.ok) {
throw new Error(`Error fetching data from CoinMarketCap: ${response.statusText}`)
}
return await response.json()
}
// Helper function to check subscription level at runtime
function checkSubscriptionLevel(requiredLevel) {
const currentLevel = SUBSCRIPTION_LEVELS[process.env.SUBSCRIPTION_LEVEL || 'Basic']
return currentLevel >= requiredLevel
}
// Wrapper function to handle common endpoint patterns
async function handleEndpoint(apiCall) {
try {
return await apiCall()
} catch (error) {
return formatErrorResponse(error.message, error.status || 403)
}
}
/*
* BASIC SUBSCRIPTION ENDPOINTS
*/
if (checkSubscriptionLevel(SUBSCRIPTION_LEVELS.Basic)) {
// /cryptocurrency/categories
server.tool("cryptoCategories",
"Returns information about all coin categories available on CoinMarketCap.",
{
start: z.number().optional(),
limit: z.number().optional(),
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/categories', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/category
server.tool("cryptoCategory",
"Returns information about a single coin category on CoinMarketCap.",
{
id: z.string(),
start: z.number().optional(),
limit: z.number().optional(),
convert: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/category', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/map
server.tool("cryptoCurrencyMap",
"Returns a mapping of all cryptocurrencies to unique CoinMarketCap IDs.",
{
listing_status: z.string().optional(),
start: z.number().optional(),
limit: z.number().optional(),
sort: z.string().optional(),
symbol: z.string().optional(),
aux: z.string().optional()
},
async ({ listing_status = 'active', start = 1, limit = 100, sort = 'id', symbol, aux }) => {
return handleEndpoint(async () => {
return await makeApiRequestWithErrorHandling('/v1/cryptocurrency/map', {
listing_status,
start,
limit,
sort,
symbol,
aux
})
})
}
)
// /cryptocurrency/info
server.tool("getCryptoMetadata",
"Returns all static metadata for one or more cryptocurrencies including logo, description, and website URLs.",
{
symbol: z.string().optional(),
id: z.string().optional(),
slug: z.string().optional(),
address: z.string().optional(),
aux: z.string().optional(),
skip_invalid: z.boolean().optional()
},
async ({ symbol, id, slug, address, aux, skip_invalid }) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/info', {
symbol,
id,
slug,
address,
aux,
skip_invalid
})
return formatResponse(data)
})
}
)
// /cryptocurrency/listings/latest
server.tool("allCryptocurrencyListings",
"Returns a paginated list of all active cryptocurrencies with latest market data.",
{
start: z.number().optional(),
limit: z.number().min(1).max(5000).optional(),
price_min: z.number().optional(),
price_max: z.number().optional(),
market_cap_min: z.number().optional(),
market_cap_max: z.number().optional(),
volume_24h_min: z.number().optional(),
volume_24h_max: z.number().optional(),
circulating_supply_min: z.number().optional(),
circulating_supply_max: z.number().optional(),
percent_change_24h_min: z.number().optional(),
percent_change_24h_max: z.number().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
sort: z.enum(['market_cap', 'name', 'symbol', 'date_added', 'price', 'circulating_supply', 'total_supply', 'max_supply', 'num_market_pairs', 'volume_24h', 'percent_change_1h', 'percent_change_24h', 'percent_change_7d']).optional(),
sort_dir: z.enum(['asc', 'desc']).optional(),
cryptocurrency_type: z.string().optional(),
tag: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/listings/latest', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/quotes/latest
server.tool("cryptoQuotesLatest",
"Returns the latest market quote for one or more cryptocurrencies.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional(),
skip_invalid: z.boolean().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/quotes/latest', params)
return formatResponse(data)
})
}
)
// /v4/dex/listings/info
server.tool("dexInfo",
"Returns all static metadata for one or more decentralised exchanges.",
{
id: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/listings/info', params)
return formatResponse(data)
})
}
)
// /v4/dex/listings/quotes
server.tool("dexListingsLatest",
"Returns a paginated list of all decentralised cryptocurrency exchanges including the latest aggregate market data.",
{
start: z.string().optional(),
limit: z.string().optional(),
sort: z.enum(['name', 'volume_24h', 'market_share', 'num_markets']).optional(),
sort_dir: z.enum(['desc', 'asc']).optional(),
type: z.enum(['all', 'orderbook', 'swap', 'aggregator']).optional(),
aux: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/listings/quotes', params)
return formatResponse(data)
})
}
)
// /v4/dex/networks/list
server.tool("dexNetworksList",
"Returns a list of all networks to unique CoinMarketCap ids.",
{
start: z.string().optional(),
limit: z.string().optional(),
sort: z.enum(['id', 'name']).optional(),
sort_dir: z.enum(['desc', 'asc']).optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/networks/list', params)
return formatResponse(data)
})
}
)
// /v4/dex/spot-pairs/latest
server.tool("dexSpotPairsLatest",
"Returns a paginated list of all active dex spot pairs with latest market data.",
{
network_id: z.string().optional(),
network_slug: z.string().optional(),
dex_id: z.string().optional(),
dex_slug: z.string().optional(),
base_asset_id: z.string().optional(),
base_asset_symbol: z.string().optional(),
base_asset_contract_address: z.string().optional(),
base_asset_ucid: z.string().optional(),
quote_asset_id: z.string().optional(),
quote_asset_symbol: z.string().optional(),
quote_asset_contract_address: z.string().optional(),
quote_asset_ucid: z.string().optional(),
scroll_id: z.string().optional(),
limit: z.string().optional(),
liquidity_min: z.string().optional(),
liquidity_max: z.string().optional(),
volume_24h_min: z.string().optional(),
volume_24h_max: z.string().optional(),
no_of_transactions_24h_min: z.string().optional(),
no_of_transactions_24h_max: z.string().optional(),
percent_change_24h_min: z.string().optional(),
percent_change_24h_max: z.string().optional(),
sort: z.enum(['name', 'date_added', 'price', 'volume_24h', 'percent_change_1h', 'percent_change_24h', 'liquidity', 'fully_diluted_value', 'no_of_transactions_24h']).optional(),
sort_dir: z.enum(['desc', 'asc']).optional(),
aux: z.string().optional(),
reverse_order: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/spot-pairs/latest', params)
return formatResponse(data)
})
}
)
// /v4/dex/pairs/quotes/latest
server.tool("dexPairsQuotesLatest",
"Returns the latest market quote for 1 or more spot pairs.",
{
contract_address: z.string().optional(),
network_id: z.string().optional(),
network_slug: z.string().optional(),
aux: z.string().optional(),
convert_id: z.string().optional(),
skip_invalid: z.string().optional(),
reverse_order: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/pairs/quotes/latest', params)
return formatResponse(data)
})
}
)
// /v4/dex/pairs/ohlcv/latest
server.tool("dexPairsOhlcvLatest",
"Returns the latest OHLCV market values for one or more spot pairs for the current UTC day.",
{
contract_address: z.string().optional(),
network_id: z.string().optional(),
network_slug: z.string().optional(),
aux: z.string().optional(),
convert_id: z.string().optional(),
skip_invalid: z.string().optional(),
reverse_order: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/pairs/ohlcv/latest', params)
return formatResponse(data)
})
}
)
// /v4/dex/pairs/ohlcv/historical
server.tool("dexPairsOhlcvHistorical",
"Returns historical OHLCV data along with market cap for any spot pairs using time interval parameters.",
{
contract_address: z.string().optional(),
network_id: z.string().optional(),
network_slug: z.string().optional(),
time_period: z.enum(['daily', 'hourly', '1m', '5m', '15m', '30m', '4h', '8h', '12h', 'weekly', 'monthly']).optional(),
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.string().optional(),
interval: z.enum(['1m', '5m', '15m', '30m', '1h', '4h', '8h', '12h', 'daily', 'weekly', 'monthly']).optional(),
aux: z.string().optional(),
convert_id: z.string().optional(),
skip_invalid: z.string().optional(),
reverse_order: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/pairs/ohlcv/historical', params)
return formatResponse(data)
})
}
)
// /v4/dex/pairs/trade/latest
server.tool("dexPairsTradeLatest",
"Returns up to the latest 100 trades for 1 spot pair.",
{
contract_address: z.string().optional(),
network_id: z.string().optional(),
network_slug: z.string().optional(),
aux: z.string().optional(),
convert_id: z.string().optional(),
skip_invalid: z.string().optional(),
reverse_order: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v4/dex/pairs/trade/latest', params)
return formatResponse(data)
})
}
)
// /exchange/assets
server.tool("exchangeAssets",
"Returns the assets/token holdings of an exchange.",
{
id: z.string().optional(),
slug: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/assets', params)
return formatResponse(data)
})
}
)
// /exchange/info
server.tool("exchangeInfo",
"Returns metadata for one or more exchanges.",
{
id: z.string().optional(),
slug: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/info', params)
return formatResponse(data)
})
}
)
// /exchange/map
server.tool("exchangeMap",
"Returns a mapping of all exchanges to unique CoinMarketCap IDs.",
{
listing_status: z.string().optional(),
slug: z.string().optional(),
start: z.number().optional(),
limit: z.number().optional(),
sort: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/map', params)
return formatResponse(data)
})
}
)
// /global-metrics/quotes/latest
server.tool("globalMetricsLatest",
"Returns the latest global cryptocurrency market metrics.",
{
convert: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/global-metrics/quotes/latest', params)
return formatResponse(data)
})
}
)
// /index/quotes/historical
server.tool("cmc100IndexHistorical",
"Returns an interval of historic CoinMarketCap 100 Index values based on the interval parameter.",
{
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.string().optional(),
interval: z.enum(['5m', '15m', 'daily']).optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v3/index/cmc100-historical', params)
return formatResponse(data)
})
}
)
// /index/quotes/latest
server.tool("cmc100IndexLatest",
"Returns the lastest CoinMarketCap 100 Index value, constituents, and constituent weights.",
{},
async () => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v3/index/cmc100-latest')
return formatResponse(data)
})
}
)
// /fear-and-greed/latest
server.tool("fearAndGreedLatest",
"Returns the latest CMC Crypto Fear and Greed Index value.",
{},
async () => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v3/fear-and-greed/latest')
return formatResponse(data)
})
}
)
// /fear-and-greed/historical
server.tool("fearAndGreedHistorical",
"Returns historical CMC Crypto Fear and Greed Index values.",
{
start: z.number().min(1).optional(),
limit: z.number().min(1).max(500).optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v3/fear-and-greed/historical', params)
return formatResponse(data)
})
}
)
// /fiat/map
server.tool("fiatMap",
"Returns a mapping of all supported fiat currencies to unique CoinMarketCap IDs.",
{
start: z.number().optional(),
limit: z.number().optional(),
sort: z.string().optional(),
include_metals: z.boolean().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/fiat/map', params)
return formatResponse(data)
})
}
)
// /tools/postman
server.tool("getPostmanCollection",
"Returns a Postman collection for the CoinMarketCap API.",
{},
async () => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/tools/postman')
return formatResponse(data)
})
}
)
// /tools/price-conversion
server.tool("priceConversion",
"Convert an amount of one cryptocurrency or fiat currency into one or more different currencies.",
{
amount: z.number(),
id: z.string().optional(),
symbol: z.string().optional(),
time: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/tools/price-conversion', params)
return formatResponse(data)
})
}
)
// /key/info
server.tool("keyInfo",
"Returns API key details and usage stats.",
{},
async () => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/key/info')
return formatResponse(data)
})
}
)
}
/*
* HOBBYIST SUBSCRIPTION ENDPOINTS
*/
if (checkSubscriptionLevel(SUBSCRIPTION_LEVELS.Hobbyist)) {
// /cryptocurrency/airdrop
server.tool("cryptoAirdrop",
"Returns information about a single airdrop on CoinMarketCap.",
{
id: z.string()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/airdrop', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/airdrops
server.tool("cryptoAirdrops",
"Returns a list of past, present, or future airdrops on CoinMarketCap.",
{
start: z.number().optional(),
limit: z.number().optional(),
status: z.string().optional(),
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/airdrops', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/listings/historical
server.tool("historicalCryptocurrencyListings",
"Returns a ranked and sorted list of all cryptocurrencies for a historical point in time.",
{
timestamp: z.string().or(z.number()).optional(),
start: z.number().optional(),
limit: z.number().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
sort: z.string().optional(),
sort_dir: z.string().optional(),
cryptocurrency_type: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/listings/historical', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/quotes/historical
server.tool("cryptoQuotesHistorical",
"Returns an interval of historical market quotes for any cryptocurrency.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.number().optional(),
interval: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional(),
skip_invalid: z.boolean().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/quotes/historical', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/quotes/historical/v3
server.tool("cryptoQuotesHistoricalV3",
"Returns an interval of historic market quotes for any cryptocurrency based on time and interval parameters.",
{
id: z.string().optional(),
symbol: z.string().optional(),
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.number().min(1).max(10000).optional(),
interval: z.enum([
'5m', '10m', '15m', '30m', '45m',
'1h', '2h', '3h', '4h', '6h', '12h', '24h',
'1d', '2d', '3d', '7d', '14d', '15d', '30d', '60d', '90d', '365d',
'hourly', 'daily', 'weekly', 'monthly', 'yearly'
]).optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional(),
skip_invalid: z.boolean().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v3/cryptocurrency/quotes/historical', params)
return formatResponse(data)
})
}
)
// /exchange/quotes/historical
server.tool("exchangeQuotesHistorical",
"Returns an interval of historic quotes for any exchange based on time and interval parameters.",
{
id: z.string().optional(),
slug: z.string().optional(),
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.number().min(1).max(10000).optional(),
interval: z.enum([
'5m', '10m', '15m', '30m', '45m',
'1h', '2h', '3h', '4h', '6h', '12h', '24h',
'1d', '2d', '3d', '7d', '14d', '15d', '30d', '60d', '90d', '365d',
'hourly', 'daily', 'weekly', 'monthly', 'yearly'
]).optional(),
convert: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/quotes/historical', params)
return formatResponse(data)
})
}
)
// /global-metrics/quotes/historical
server.tool("globalMetricsHistorical",
"Returns historical global cryptocurrency market metrics.",
{
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.number().optional(),
interval: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/global-metrics/quotes/historical', params)
return formatResponse(data)
})
}
)
}
/*
* STARTUP SUBSCRIPTION ENDPOINTS
*/
if (checkSubscriptionLevel(SUBSCRIPTION_LEVELS.Startup)) {
// /cryptocurrency/listings/new
server.tool("newCryptocurrencyListings",
"Returns a paginated list of most recently added cryptocurrencies.",
{
start: z.number().min(1).optional(),
limit: z.number().min(1).max(5000).optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
sort_dir: z.enum(['asc', 'desc']).optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/listings/new', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/trending/gainers-losers
server.tool("cryptoTrendingGainersLosers",
"Returns the biggest gainers and losers in a given time period.",
{
time_period: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/trending/gainers-losers', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/trending/latest
server.tool("cryptoTrendingLatest",
"Returns the top cryptocurrencies by search volume in a given time period.",
{
time_period: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/trending/latest', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/trending/most-visited
server.tool("cryptoTrendingMostVisited",
"Returns the most visited cryptocurrencies on CoinMarketCap in a given time period.",
{
time_period: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/cryptocurrency/trending/most-visited', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/ohlcv/historical
server.tool("cryptoOhlcvHistorical",
"Returns historical OHLCV market values for one or more cryptocurrencies.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
time_period: z.string().optional(),
time_start: z.string().optional(),
time_end: z.string().optional(),
count: z.number().optional(),
interval: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
skip_invalid: z.boolean().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/ohlcv/historical', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/ohlcv/latest
server.tool("cryptoOhlcvLatest",
"Returns the latest OHLCV (Open, High, Low, Close, Volume) market values for one or more cryptocurrencies.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
skip_invalid: z.boolean().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/ohlcv/latest', params)
return formatResponse(data)
})
}
)
// /cryptocurrency/price-performance-stats/latest
server.tool("cryptoPricePerformanceStatsLatest",
"Returns price performance statistics for one or more cryptocurrencies including ROI and ATH stats.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
time_period: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/price-performance-stats/latest', params)
return formatResponse(data)
})
}
)
}
/*
* STANDARD SUBSCRIPTION ENDPOINTS
*/
if (checkSubscriptionLevel(SUBSCRIPTION_LEVELS.Standard)) {
// /cryptocurrency/market-pairs/latest
server.tool("cryptoMarketPairsLatest",
"Returns all market pairs for the specified cryptocurrency with associated stats.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
start: z.number().optional(),
limit: z.number().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
matched_id: z.string().optional(),
matched_symbol: z.string().optional(),
category: z.string().optional(),
fee_type: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v2/cryptocurrency/market-pairs/latest', params)
return formatResponse(data)
})
}
)
// /exchange/listings/latest
server.tool("exchangeListingsLatest",
"Returns a paginated list of all exchanges with latest market data.",
{
start: z.number().optional(),
limit: z.number().optional(),
sort: z.string().optional(),
sort_dir: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/listings/latest', params)
return formatResponse(data)
})
}
)
// /exchange/market-pairs/latest
server.tool("exchangeMarketPairsLatest",
"Returns all market pairs for the specified exchange with associated stats.",
{
id: z.string().optional(),
slug: z.string().optional(),
start: z.number().optional(),
limit: z.number().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/market-pairs/latest', params)
return formatResponse(data)
})
}
)
// /exchange/quotes/latest
server.tool("exchangeQuotesLatest",
"Returns the latest market quotes for one or more exchanges.",
{
id: z.string().optional(),
slug: z.string().optional(),
convert: z.string().optional(),
convert_id: z.string().optional(),
aux: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/exchange/quotes/latest', params)
return formatResponse(data)
})
}
)
// /content/latest
server.tool("contentLatest",
"Returns latest cryptocurrency news and Alexandria articles.",
{
start: z.number().optional(),
limit: z.number().optional(),
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional(),
news_type: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/content/latest', params)
return formatResponse(data)
})
}
)
// /content/posts/top
server.tool("contentPostsTop",
"Returns top cryptocurrency posts.",
{
start: z.number().optional(),
limit: z.number().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/content/posts/top', params)
return formatResponse(data)
})
}
)
// /content/posts/latest
server.tool("contentPostsLatest",
"Returns latest cryptocurrency posts.",
{
start: z.number().optional(),
limit: z.number().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/content/posts/latest', params)
return formatResponse(data)
})
}
)
// /content/posts/comments
server.tool("contentPostsComments",
"Returns comments for a specific post.",
{
id: z.string(),
start: z.number().optional(),
limit: z.number().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/content/posts/comments', params)
return formatResponse(data)
})
}
)
// /community/trending/topic
server.tool("communityTrendingTopic",
"Returns community trending topics.",
{
start: z.number().optional(),
limit: z.number().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/community/trending/topic', params)
return formatResponse(data)
})
}
)
// /community/trending/token
server.tool("communityTrendingToken",
"Returns community trending tokens.",
{
start: z.number().optional(),
limit: z.number().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/community/trending/token', params)
return formatResponse(data)
})
}
)
}
/*
* ENTERPRISE SUBSCRIPTION ENDPOINTS
*/
if (checkSubscriptionLevel(SUBSCRIPTION_LEVELS.Enterprise)) {
// /blockchain/statistics/latest
server.tool("blockchainStatisticsLatest",
"Returns the latest statistics for one or more blockchains.",
{
id: z.string().optional(),
slug: z.string().optional(),
symbol: z.string().optional()
},
async (params) => {
return handleEndpoint(async () => {
const data = await makeApiRequest('/v1/blockchain/statistics/latest', params)
return formatResponse(data)
})
}
)
}
const transport = new StdioServerTransport()
await server.connect(transport)