Crypto MCP Server
Provides real-time and historical cryptocurrency market data from 100+ exchanges including prices, OHLCV data, market statistics, and order books through the CCXT library with intelligent caching.
README
Crypto MCP Server
A Python-based Model Context Protocol (MCP) server that provides real-time and historical cryptocurrency market data from major exchanges using the CCXT library.
๐ Features
- Real-time Price Data: Fetch current prices for any cryptocurrency trading pair
- Historical Data: Retrieve OHLCV (Open, High, Low, Close, Volume) historical data
- Market Statistics: Get comprehensive market summaries including 24h changes
- Order Book Data: Access current bid/ask order books
- Multi-Exchange Support: Works with 100+ cryptocurrency exchanges via CCXT
- Intelligent Caching: Reduces API calls with built-in caching layer
- Error Handling: Robust error handling and validation
- Comprehensive Testing: Full test coverage with pytest
๐ Requirements
- Python 3.10 or higher
- pip (Python package manager)
- Internet connection for API access
๐ง Installation
- Clone the repository:
git clone <your-repo-url>
cd crypto-mcp-server
- Create a virtual environment (recommended):
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- Install dependencies:
pip install -r requirements.txt
๐ Usage
Running the Server
Start the MCP server:
python -m src.crypto_mcp_server.server
Available Tools
The server exposes the following MCP tools:
-
get_crypto_price: Get current price for a cryptocurrency pair
- Parameters:
symbol(e.g., "BTC/USDT"),use_cache(optional)
- Parameters:
-
get_multiple_prices: Get prices for multiple pairs
- Parameters:
symbols(list of trading pairs)
- Parameters:
-
get_historical_data: Get historical OHLCV data
- Parameters:
symbol,timeframe(e.g., "1d"),limit,use_cache
- Parameters:
-
get_market_summary: Get comprehensive market statistics
- Parameters:
symbol,use_cache
- Parameters:
-
get_orderbook: Get current order book
- Parameters:
symbol,limit
- Parameters:
-
search_symbols: Search for available trading pairs
- Parameters:
query(e.g., "BTC")
- Parameters:
-
get_supported_exchanges: List all supported exchanges
- No parameters required
-
clear_cache: Clear all cached data
- No parameters required
-
get_cache_stats: Get cache statistics
- No parameters required
Example Usage with MCP Client
# Example: Get Bitcoin price
{
"tool": "get_crypto_price",
"arguments": {
"symbol": "BTC/USDT"
}
}
# Example: Get historical data
{
"tool": "get_historical_data",
"arguments": {
"symbol": "ETH/USDT",
"timeframe": "1h",
"limit": 24
}
}
๐งช Testing
Run all tests:
pytest
Run tests with coverage:
pytest --cov=src/crypto_mcp_server --cov-report=html
Run specific test file:
pytest tests/test_crypto_api.py -v
Test Coverage
The project includes comprehensive tests for:
- โ API wrapper functionality
- โ Caching layer
- โ MCP server tools
- โ Error handling
- โ Edge cases
๐ Project Structure
crypto-mcp-server/
โโโ src/
โ โโโ crypto_mcp_server/
โ โโโ __init__.py # Package initialization
โ โโโ server.py # Main MCP server
โ โโโ crypto_api.py # CCXT API wrapper
โ โโโ cache.py # Caching layer
โโโ tests/
โ โโโ test_server.py # Server tests
โ โโโ test_crypto_api.py # API tests
โ โโโ test_cache.py # Cache tests
โโโ requirements.txt # Python dependencies
โโโ README.md # This file
โโโ .gitignore # Git ignore rules
๐ Key Design Decisions
1. Exchange Selection
- Default Exchange: Binance
- Rationale: Binance is one of the largest and most reliable exchanges with excellent API support
- Flexibility: Can be configured to use any of 100+ exchanges supported by CCXT
2. Caching Strategy
- TTL Values:
- Real-time prices: 30 seconds
- Historical data: 5 minutes
- Market summaries: 1 minute
- Rationale: Balances data freshness with API rate limit compliance
3. Error Handling
- All API calls wrapped in try-catch blocks
- Graceful degradation for partial failures
- Detailed error messages for debugging
4. Data Validation
- Symbol format validation
- Timeframe validation
- Limit parameter validation
๐ ๏ธ Configuration
Changing the Default Exchange
Edit server.py:
server = CryptoMCPServer(
exchange_id='coinbase', # Change to any supported exchange
cache_ttl=60
)
Adjusting Cache TTL
server = CryptoMCPServer(
exchange_id='binance',
cache_ttl=120 # 2 minutes default cache
)
๐ Assumptions
- Network Connectivity: Assumes stable internet connection
- Exchange Availability: Assumes target exchange APIs are operational
- Rate Limits: Built-in rate limiting through CCXT's enableRateLimit
- Data Format: Assumes standard CCXT data formats
- No Authentication: Uses public endpoints (no API keys required)
๐ Performance Considerations
- Caching: Reduces API calls by up to 90% for repeated queries
- Rate Limiting: Automatically managed by CCXT
- Concurrent Requests: Handles multiple simultaneous requests
- Memory Usage: In-memory cache with automatic cleanup
๐ Known Limitations
- Historical Data: Limited by exchange-specific restrictions
- Real-time Updates: Not true WebSocket streaming (polling-based)
- Authentication: Only public endpoints supported currently
- Cache Persistence: Cache is in-memory only (not persistent)
๐ฎ Future Enhancements
- [ ] WebSocket support for true real-time updates
- [ ] Support for authenticated endpoints
- [ ] Persistent cache (Redis/SQLite)
- [ ] Multi-exchange aggregation
- [ ] CoinMarketCap integration
- [ ] Custom alerts and notifications
- [ ] Portfolio tracking
๐ License
MIT License - Feel free to use this project for your needs.
๐ Acknowledgments
- CCXT - Cryptocurrency exchange API library
- Anthropic MCP - Model Context Protocol
- pytest - Testing framework
๐ง Contact
For questions or issues, please open an issue on GitHub.
Note: This project was developed as part of an internship assignment. It demonstrates proficiency in Python development, API integration, testing, and MCP protocol implementation.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
E2B
Using MCP to run code via e2b.