A simplified Model Context Protocol (MCP) server for stock and cryptocurrency analysis. This version is optimized for learning with minimal configuration and clear code structure.
The server provides the following tools for market analysis:
-
analyze-stock: Performs technical analysis on a given stock symbol
- Required argument:
symbol
(string, e.g. "NVDA") - Returns comprehensive technical analysis including:
- Moving average trends (20, 50, 200 SMA)
- Momentum indicators (RSI, MACD)
- Volatility metrics (ATR, ADRP)
- Volume analysis
- Required argument:
-
analyze-crypto: Performs technical analysis on cryptocurrency assets
- Required argument:
symbol
(string, e.g. "BTC", "ETH", "BTCUSDT" for Binance) - Optional arguments:
provider
(string, default: "tiingo", options: "tiingo", "binance")lookback_days
(integer, default: 365)quote_currency
(string, default: "usd" for Tiingo, "USDT" for Binance)
- Returns comprehensive technical analysis including all stock indicators plus crypto-specific metrics
- Required argument:
-
relative-strength: Calculates a stock's relative strength compared to a benchmark
- Required argument:
symbol
(string, e.g. "AAPL") - Optional argument:
benchmark
(string, default: "SPY") - Returns relative strength metrics across multiple timeframes (21, 63, 126, 252 days)
- Required argument:
-
volume-profile: Analyzes volume distribution by price
- Required argument:
symbol
(string, e.g. "MSFT") - Optional argument:
lookback_days
(integer, default: 60) - Returns volume profile analysis including Point of Control (POC) and Value Area
- Required argument:
-
detect-patterns: Identifies chart patterns in price data
- Required argument:
symbol
(string, e.g. "AMZN") - Returns detected chart patterns with confidence levels and price targets
- Required argument:
-
position-size: Calculates optimal position size based on risk parameters
- Required arguments:
symbol
(string, e.g. "TSLA")stop_price
(number)risk_amount
(number)account_size
(number)
- Optional argument:
price
(number, default: current price) - Returns recommended position size and R-multiple profit targets
- Required arguments:
-
suggest-stops: Suggests stop loss levels based on technical analysis
- Required argument:
symbol
(string, e.g. "META") - Returns multiple stop loss suggestions based on ATR, percentages, and technical levels
- Required argument:
The server now supports FastMCP resources for direct market data access:
stock://{symbol}
- Get current stock price and statisticsstock://{symbol}/history
- Get historical price data
crypto://{symbol}
- Get current crypto price (supports Tiingo & Binance)crypto://{symbol}/history
- Get historical crypto data
market://cache/clear
- Clear the data cachemarket://cache/status
- View cache statistics
- Stocks: Tiingo API for historical daily OHLCV data
- Crypto:
- Tiingo API for major pairs (BTC, ETH, etc. paired with USD)
- Binance API for extended pairs and USDT quotes
- Python 3.11+
- uv package manager
- Tiingo API Key
- Optional: ta-lib for enhanced performance (see INSTALL.md)
Create a .env
file in your project root:
# MCP Trader
# Copy this file to .env for API access
# Tiingo API Key (free tier works great)
# Get yours at: https://www.tiingo.com/
TIINGO_API_KEY=your_tiingo_api_key_here
# Optional: For higher rate limits
BINANCE_API_KEY=your_binance_api_key_here
BINANCE_API_SECRET=your_binance_api_secret_here
# Clone the repository
git clone https://github.com/wshobson/mcp-trader.git
cd mcp-trader
# Create virtual environment and install dependencies
uv venv --python 3.11
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv sync
# Copy the example environment file
cp .env.example .env
# Edit .env and add your Tiingo API key
The configuration file location varies by platform:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"stock-analyzer": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/mcp-trader",
"run",
"mcp-trader"
],
"env": {
"TIINGO_API_KEY": "your_api_key_here"
}
}
}
}
To enable FastMCP resources alongside the standard tools:
{
"mcpServers": {
"stock-analyzer": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/mcp-trader",
"run",
"python",
"-m",
"mcp_trader.fastmcp_server"
],
"env": {
"TIINGO_API_KEY": "your_api_key_here"
}
}
}
}
The project includes a comprehensive test suite with 80% code coverage:
# Run all tests
pytest
# Run with coverage report
pytest --cov=src/mcp_trader --cov-report=term-missing
# Run specific test file
pytest src/mcp_trader/tests/test_indicators.py
# Run with verbose output
pytest -v
Runs the MCP server with all tools:
uv run mcp-trader
For development and debugging:
# Run with Python directly
uv run python -m mcp_trader.server
# Run with MCP Inspector for debugging
npx @modelcontextprotocol/inspector uv --directory . run mcp-trader
# Build the Docker image
docker build -t mcp-trader .
# Run the container
docker run -e TIINGO_API_KEY=your_api_key_here -p 8000:8000 mcp-trader
# Run in HTTP server mode
docker run -e TIINGO_API_KEY=your_api_key_here -p 8000:8000 mcp-trader uv run mcp-trader --http
In Claude Desktop, simply ask:
Analyze the technical setup for NVDA
The server will return a comprehensive technical analysis including trend status, momentum indicators, and key metrics.
For crypto analysis:
Analyze BTC using Binance data
mcp-trader/
├── src/mcp_trader/
│ ├── __init__.py # Package initialization
│ ├── server.py # Main MCP server (simplified)
│ ├── config.py # Simple configuration dataclass
│ ├── models.py # Pydantic models for type safety
│ ├── data.py # Market data providers
│ ├── indicators.py # Technical analysis calculations
│ └── tests/ # Comprehensive test suite
├── .env.example # Example environment configuration
├── pyproject.toml # Project dependencies
└── README.md # This file
-
"TIINGO_API_KEY not set" error
- Copy
.env.example
to.env
- Add your Tiingo API key to the
.env
file
- Copy
-
Test failures
- Ensure all dependencies are installed:
uv sync
- Run tests with verbose output:
pytest -v
- Ensure all dependencies are installed:
-
Import errors
- Make sure you're in the virtual environment:
source .venv/bin/activate
- Reinstall dependencies:
uv sync --force-reinstall
- Make sure you're in the virtual environment:
Core dependencies:
- aiohttp >=3.11.11
- fastmcp >=0.4.2
- numpy >=1.26.4,<2.0
- pandas >=2.2.3
- pandas-ta >=0.3.14b0
- python-dotenv >=1.0.1
- setuptools >=75.8.0
Optional:
- ta-lib >=0.6.0 (for enhanced performance)
See pyproject.toml for the complete list.
- Start with
server.py
: The main entry point showing how MCP tools are defined - Study
models.py
: Learn about type-safe request/response handling with Pydantic - Explore
indicators.py
: See how technical analysis calculations are implemented - Review tests: The test suite demonstrates proper usage of each component
- MCP Tools: Functions exposed to AI assistants via the Model Context Protocol
- Technical Indicators: Mathematical calculations on price/volume data
- Type Safety: Using Pydantic models for validation and documentation
- Async Programming: All tools use async/await for concurrent operations
Contributions that improve clarity and learning are especially welcome:
- Fork the repository
- Create a feature branch
- Write clear, well-tested code
- Ensure tests pass with good coverage
- Submit a pull request
- Portfolio Analysis: Tools for analyzing and optimizing portfolios
- Backtesting: Test trading strategies on historical data
- Sentiment Analysis: Integration with news and social media data
- Options Analysis: Tools for options strategies and pricing
- Real-time Data: Support for real-time market feeds
- Custom Strategies: Framework for custom trading strategies
- Alerts: Price and technical indicator notifications
Learn more about this project:
- Building a Stock Analysis Server with MCP, Part 1 - Initial setup and core features
- Building a Stock Analysis Server with MCP, Part 2 - Advanced analysis tools
This project is licensed under the MIT License - see the LICENSE file for details.