Skip to main content
Glama
artemoalin28-afk

Crypto MCP Server

README.md
# πŸš€ Crypto MCP Server
## πŸ“Œ Overview


Crypto MCP Server is a Model Context Protocol (MCP) compatible server that provides real-time and historical cryptocurrency market data using ccxt.
It exposes three fully tested tools:

get_ticker β†’ Live price & market summary

get_ohclv β†’ Historical candlestick data

stream_ticker β†’ Real-time price streaming (async generator)

The project includes:

Custom error handling

In-memory caching

A lightweight MCP server architecture

Complete test suite (pytest)

Local client for manual testing

## ✨ Features
πŸ”Ή get_ticker

Fetches:

last price

high & low

base volume

price_change_percent

πŸ”Ή get_ohclv

Fetches OHLCV candles with:

timestamp

open

high

low

close

volume

πŸ”Ή stream_ticker

Real-time streaming ticker with async generator that yields updates every N seconds.

## 🧩 Project Structure
crypto-mcp-server/
β”‚
β”œβ”€β”€ server/
β”‚   β”œβ”€β”€ main.py
β”‚   β”œβ”€β”€ mcp_server.py
β”‚   β”œβ”€β”€ cache.py
β”‚   β”œβ”€β”€ errors.py
β”‚   β”œβ”€β”€ exchanges.py
β”‚   └── tools/
β”‚       β”œβ”€β”€ get_ticker.py
β”‚       β”œβ”€β”€ get_ohclv.py
β”‚       └── stream_ticker.py
β”‚
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ test_get_ticker.py
β”‚   β”œβ”€β”€ test_ohclv.py
β”‚   └── test_stream_ticker.py
β”‚
β”œβ”€β”€ client_test.py
β”œβ”€β”€ README.md
β”œβ”€β”€ requirements.txt
└── .gitignore

## πŸ› οΈ Tech Stack

Python 3.10+

ccxt for exchange APIs

pytest for testing

asyncio for streaming

MCP server protocol style

## πŸ“¦ Installation
git clone https://github.com/yourusername/crypto-mcp-server
cd crypto-mcp-server
pip install -r requirements.txt

## ▢️ Running the MCP Server

From the server/ directory:

python -m server.main


You should see:

Crypto MCP Server running…
Registered tools: get_ticker, get_ohclv, stream_ticker

## πŸ§ͺ Running Tests

All tests are under tests/ and cover:

Valid/invalid symbols

Unsupported exchanges

API errors

Streaming behavior

Run:

pytest -vv

## πŸ“ Tools Implemented
### πŸ”Ή get_ticker

Handles:

Invalid symbols

Unsupported exchanges

ccxt API exceptions

Caching responses for 20 seconds

### πŸ”Ή get_ohclv

Returns OHCLV historical candles

Validates timeframe & limit

Raises custom errors

### πŸ”Ή stream_ticker

Async generator

Streams live ticker updates

Internal delay using asyncio.sleep()

Full validation & error handling

### Caching Layer

cache.py implements simple in-memory TTL cache:

save(key, value, ttl)

get(key)

Prevents extra API calls

## πŸ§ͺ Testing Strategy
### Unit Tests (pytest)

Each tool has:

success test

invalid symbol test

invalid exchange test

API failure test

### Streaming Tests

Uses asyncio.mark

Simulates multiple ticker updates

Checks generator behavior

## πŸ§ͺ Local Testing Without MCP CLI

Run:

python client_test.py


It prints:

get_ticker result

get_ohclv candles

3 streamed ticker updates

## πŸ” Example Output
--- Testing get_ticker ---
{...}

--- Testing get_ohclv ---
{...}

--- Testing stream_ticker ---
{...}

## πŸ“Œ Key Learning & Highlights

Designed full MCP-style server

Implemented async streaming tool

Wrote complete test suite

Built caching + error handling abstraction

Validated exchange + symbol inputs safely