Skip to main content
Glama
Spoofkapoof

Crypto Portfolio MCP Server

by Spoofkapoof
README.md
# Crypto Portfolio MCP Server

A comprehensive read-only cryptocurrency portfolio management server built on the Model Context Protocol (MCP). Supports Binance, Coinbase, and Kraken exchanges with 18+ analytics tools for portfolio tracking, risk assessment, and market intelligence.

## Overview

This MCP server provides real-time cryptocurrency portfolio analytics through Claude Desktop or any MCP-compatible client. It offers read-only access to your exchange accounts, ensuring your funds remain secure while providing deep insights into your holdings.

### Key Features

- Multi-exchange portfolio aggregation (Binance, Coinbase, Kraken)
- Real-time price tracking and alerts
- Risk and diversification analysis
- Market intelligence and sentiment indicators
- Arbitrage opportunity detection
- Portfolio performance metrics

## Quick Start

### Prerequisites

- Python 3.10 or higher
- API keys from supported exchanges (read-only permissions only)
- Claude Desktop (optional, for AI-powered queries)

### Installation

1. Clone the repository:
```bash
git clone https://github.com/lev-corrupted/CryptoPortfolioMCPServer.git
cd CryptoPortfolioMCPServer
```

2. Run the setup script:
```bash
chmod +x setup.sh
./setup.sh
```

3. Configure API credentials:
```bash
cp .env.example .env
# Edit .env with your exchange API keys
```

4. Test the configuration:
```bash
source venv/bin/activate
python test_config.py
```

### Claude Desktop Configuration

Add to your Claude Desktop configuration file:

**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`

**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "crypto-portfolio": {
      "command": "/absolute/path/to/CryptoPortfolioMCPServer/venv/bin/python",
      "args": ["-m", "src.server"],
      "cwd": "/absolute/path/to/CryptoPortfolioMCPServer"
    }
  }
}
```

Replace `/absolute/path/to/` with your actual installation path.

## API Key Setup

### IMPORTANT: Read-Only Permissions Only

Create API keys with read/view permissions only. Never enable trading or withdrawal permissions.

### Binance

1. Log in to Binance and navigate to API Management
2. Create a new API key with only "Read" permissions
3. Copy the API Key and Secret to your `.env` file

### Coinbase

1. Log in to Coinbase and go to Settings > API
2. Create a new API key with only "wallet:accounts:read" and "wallet:transactions:read"
3. Copy credentials to `.env`

### Kraken

1. Log in to Kraken and go to Settings > API
2. Generate a new key with only "Query Funds" and "Query Open Orders & Trades"
3. Copy credentials to `.env`

## Available Tools

The server provides 18 MCP tools across 7 categories:

### Portfolio Management (5 tools)

- `get_total_portfolio_value` - Aggregate portfolio value across all exchanges
- `get_all_balances` - Detailed balance breakdown with USD values
- `get_portfolio_allocation` - Asset allocation percentages
- `get_current_prices` - Real-time cryptocurrency prices
- `calculate_portfolio_pnl` - Profit/loss calculations

### Analytics (2 tools)

- `get_biggest_movers` - Top gaining and losing assets
- `get_portfolio_performance` - Historical performance metrics

### Price Alerts (2 tools)

- `check_price_alert` - Single price condition monitoring
- `check_multiple_alerts` - Batch alert checking

### Risk Management (3 tools)

- `get_diversification_score` - Portfolio diversification rating (1-10)
- `get_volatility_risk` - Risk assessment based on asset volatility
- `get_stablecoin_ratio` - Percentage in stablecoins

### Market Intelligence (3 tools)

- `check_arbitrage_opportunities` - Cross-exchange price differences
- `check_liquidity` - Trading volume and liquidity analysis
- `get_fear_greed_index` - Crypto market sentiment indicator

### Portfolio Insights (2 tools)

- `detect_dust` - Identify small-value holdings
- `get_exchange_distribution` - Portfolio distribution across exchanges

### Practical Tools (1 tool)

- `calculate_withdrawal_fees` - Estimate transfer costs

## Usage Examples

### With Claude Desktop

After configuration, ask Claude natural language questions:

```
"What is my total portfolio value?"
"Show me my portfolio allocation"
"What are the biggest movers in my portfolio today?"
"Is Bitcoin above $50,000?"
"What is my diversification score?"
"Are there any arbitrage opportunities?"
"What is the current crypto fear and greed index?"
```

## Architecture

```
CryptoPortfolioMCPServer/
├── src/
│   ├── server.py              # Main MCP server
│   ├── exchanges/             # Exchange client implementations
│   │   ├── base_exchange.py
│   │   ├── binance_client.py
│   │   ├── coinbase_client.py
│   │   └── kraken_client.py
│   ├── analytics/             # Analytics engines
│   │   ├── portfolio.py
│   │   ├── risk.py
│   │   └── market.py
│   └── utils/                 # Utilities
│       ├── config.py
│       └── helpers.py
├── .github/                   # GitHub templates
├── requirements.txt
├── setup.sh
├── test_config.py
└── .env.example
```

## Technical Details

- **Exchange API Integration:** CCXT library for unified exchange access
- **Caching:** In-memory with configurable TTL (30s prices, 60s balances)
- **Rate Limiting:** Per-exchange limits (Binance: 15/s, Coinbase: 8/s, Kraken: 1/s)
- **Error Handling:** Automatic retry with exponential backoff (3 attempts)
- **Security:** Read-only operations, no trading or withdrawal capabilities

## Configuration

Environment variables in `.env`:

```bash
# Exchange API credentials
BINANCE_API_KEY=your_binance_api_key
BINANCE_API_SECRET=your_binance_secret

COINBASE_API_KEY=your_coinbase_api_key
COINBASE_API_SECRET=your_coinbase_secret

KRAKEN_API_KEY=your_kraken_api_key
KRAKEN_API_SECRET=your_kraken_secret

# Optional settings
MOCK_MODE=false
PRICE_CACHE_DURATION=30
BALANCE_CACHE_DURATION=60
```

## Troubleshooting

### "No exchanges initialized"
Check that API keys are correctly set in `.env` file.

### "Failed to initialize [Exchange]"
Verify API key permissions are set to read-only and credentials are correct.

### Rate Limiting Errors
The server implements automatic rate limiting and retry logic.

## Security

**Important Security Practices:**

1. Use read-only API keys exclusively
2. Never commit `.env` file to version control
3. Enable IP whitelisting on exchange API keys (recommended)
4. Rotate API keys periodically
5. Keep dependencies updated

This server cannot execute trades or withdrawals - it only reads portfolio data.

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

Contributions must:
- Follow existing code patterns
- Include documentation
- Maintain security best practices
- Never add trading/withdrawal functionality

## License

MIT License - See [LICENSE](LICENSE) file for details.

## Disclaimer

This software is for informational purposes only and does not constitute financial advice. Users are solely responsible for their investment decisions. The server operates in read-only mode and cannot execute trades or transfers.

## Support

For issues or questions:
1. Check the troubleshooting section above
2. Review [CONTRIBUTING.md](CONTRIBUTING.md)
3. Check server logs in `logs/crypto_mcp.log`
4. Open an issue on GitHub

## Built With

- [CCXT](https://github.com/ccxt/ccxt) - Cryptocurrency exchange trading library
- [MCP Python SDK](https://github.com/modelcontextprotocol/python-sdk) - Model Context Protocol
- Python 3.10+