Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Access CoinGecko crypto market data: spot prices, OHLC, trending coins, exchange listings, NFTs, and global stats.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
tools/global_data.py
1#!/usr/bin/env python32"""3CoinGecko Global Data Tools45Tools for fetching global crypto market statistics and DeFi data.6"""78import os9from dotenv import load_dotenv10import json11import argparse12from typing import Dict, Any1314from core.http_client import proxied_get1516# Load environment variables17load_dotenv()181920# MCP Tool Schemas21MCP_GLOBAL_SCHEMA = {22"name": "cg_global",23"title": "CoinGecko Global Market Stats",24"description": "Get global cryptocurrency market statistics including total market cap, volume, BTC dominance.",25"inputSchema": {26"type": "object",27"properties": {},28"additionalProperties": False29}30}3132MCP_GLOBAL_DEFI_SCHEMA = {33"name": "cg_global_defi",34"title": "CoinGecko Global DeFi Stats",35"description": "Get global DeFi market statistics including TVL and DeFi dominance.",36"inputSchema": {37"type": "object",38"properties": {},39"additionalProperties": False40}41}424344def get_api_key() -> str:45"""Get CoinGecko API key from environment."""46api_key = os.getenv("COINGECKO_API_KEY")47if not api_key:48raise ValueError("COINGECKO_API_KEY environment variable is required")49return api_key505152def get_global() -> Dict[str, Any]:53"""54Get global cryptocurrency market statistics.5556Returns:57Dictionary with market cap, volume, BTC dominance, etc.58"""59api_key = get_api_key()6061url = "https://pro-api.coingecko.com/api/v3/global"62headers = {"x-cg-pro-api-key": api_key}6364response = proxied_get(url, headers=headers, timeout=15)65response.raise_for_status()66data = response.json().get("data", {})6768return {69"active_cryptocurrencies": data.get("active_cryptocurrencies"),70"upcoming_icos": data.get("upcoming_icos"),71"ongoing_icos": data.get("ongoing_icos"),72"ended_icos": data.get("ended_icos"),73"markets": data.get("markets"),74"total_market_cap": data.get("total_market_cap", {}),75"total_volume": data.get("total_volume", {}),76"market_cap_percentage": data.get("market_cap_percentage", {}),77"market_cap_change_percentage_24h_usd": data.get("market_cap_change_percentage_24h_usd"),78"updated_at": data.get("updated_at")79}808182def get_global_defi() -> Dict[str, Any]:83"""84Get global DeFi market statistics.8586Returns:87Dictionary with DeFi market cap, TVL, dominance88"""89api_key = get_api_key()9091url = "https://pro-api.coingecko.com/api/v3/global/decentralized_finance_defi"92headers = {"x-cg-pro-api-key": api_key}9394response = proxied_get(url, headers=headers, timeout=15)95response.raise_for_status()96data = response.json().get("data", {})9798return {99"defi_market_cap": data.get("defi_market_cap"),100"eth_market_cap": data.get("eth_market_cap"),101"defi_to_eth_ratio": data.get("defi_to_eth_ratio"),102"trading_volume_24h": data.get("trading_volume_24h"),103"defi_dominance": data.get("defi_dominance"),104"top_coin_name": data.get("top_coin_name"),105"top_coin_defi_dominance": data.get("top_coin_defi_dominance")106}107108109def main():110"""CLI interface for global data tools."""111parser = argparse.ArgumentParser(112description="CoinGecko Global Data Tools",113formatter_class=argparse.RawDescriptionHelpFormatter114)115116subparsers = parser.add_subparsers(dest="command")117118# Global command119subparsers.add_parser("global", help="Get global market stats")120121# DeFi command122subparsers.add_parser("defi", help="Get DeFi market stats")123124parser.add_argument("--schema", action="store_true", help="Output MCP schema")125126args = parser.parse_args()127128if args.schema:129schemas = {130"global": MCP_GLOBAL_SCHEMA,131"global_defi": MCP_GLOBAL_DEFI_SCHEMA132}133print(json.dumps(schemas, indent=2))134return 0135136try:137if args.command == "global":138result = get_global()139elif args.command == "defi":140result = get_global_defi()141else:142parser.print_help()143return 0144145print(json.dumps(result, indent=2, ensure_ascii=False))146return 0147148except Exception as e:149print(json.dumps({"error": str(e)}, indent=2))150return 1151152153if __name__ == "__main__":154exit(main())155