Professional-grade Model Context Protocol server for QuantConnect's algorithmic trading platform
Seamlessly integrate QuantConnect's research environment, statistical analysis, and portfolio optimization into your AI workflows
π― Quick Start β’ π Documentation β’ ποΈ Architecture β’ π€ Contributing
Transform your algorithmic trading research with a production-ready MCP server that provides:
- π§ͺ Research Environment: Full QuantBook integration for interactive financial analysis
- π Advanced Analytics: PCA, cointegration testing, mean reversion analysis, and correlation studies
- π― Portfolio Optimization: Sophisticated sparse optimization with Huber Downward Risk minimization
- π Universe Selection: ETF constituent analysis and multi-criteria asset screening
- π Enterprise Security: SHA-256 authenticated API integration with QuantConnect
- β‘ High Performance: Async-first design with concurrent data processing
- π― Quick Start
- π οΈ Installation
- π Authentication
- π Usage Examples
- π Comprehensive API Reference
- ποΈ Architecture
- π§ Advanced Configuration
- π§ͺ Testing
- π€ Contributing
- π License
Get up and running in under 3 minutes:
# Clone the repository
git clone https://github.com/your-org/quantconnect-mcp
cd quantconnect-mcp
# Install with uv (recommended)
uv sync
# Or with pip
pip install -e .
export QUANTCONNECT_USER_ID="your_user_id"
export QUANTCONNECT_API_TOKEN="your_api_token"
export QUANTCONNECT_ORGANIZATION_ID="your_org_id" # Optional
# STDIO transport (default)
python main.py
# HTTP transport
MCP_TRANSPORT=streamable-http MCP_PORT=8000 python main.py
# Initialize research environment
await initialize_quantbook(instance_name="research")
# Add securities for analysis
await add_multiple_equities(["AAPL", "MSFT", "GOOGL", "AMZN"], resolution="Daily")
# Perform sophisticated analysis
await perform_pca_analysis(
symbols=["AAPL", "MSFT", "GOOGL", "AMZN"],
start_date="2023-01-01",
end_date="2024-01-01"
)
- Python 3.12+ (Type-annotated for maximum reliability)
- QuantConnect LEAN (Installation Guide)
- Active QuantConnect Account with API access
# Using uv (fastest)
uv sync
# Using pip
pip install -e .
# Development installation with testing tools
uv sync --dev
# Check server health
python -c "from src.server import mcp; print('β
Installation successful')"
# Run test suite
pytest tests/ -v
Credential | Where to Find | Required |
---|---|---|
User ID | Email received when signing up | β Yes |
API Token | QuantConnect Settings | β Yes |
Organization ID | Organization URL: /organization/{ID} |
βͺ Optional |
# Add to your .bashrc, .zshrc, or .env file
export QUANTCONNECT_USER_ID="123456"
export QUANTCONNECT_API_TOKEN="your_secure_token_here"
export QUANTCONNECT_ORGANIZATION_ID="your_org_id" # Optional
# Configure programmatically
await configure_quantconnect_auth(
user_id="123456",
api_token="your_secure_token_here",
organization_id="your_org_id" # Optional
)
# Validate configuration
result = await validate_quantconnect_auth()
print(f"Auth Status: {result['authenticated']}")
# Check current status
status = await get_auth_status()
# Test API connectivity
test_result = await test_quantconnect_api()
# 1. Initialize research environment
await initialize_quantbook(instance_name="research_2024")
# 2. Build universe from ETF constituents
await add_etf_universe_securities(
etf_ticker="QQQ",
date="2024-01-01",
resolution="Daily"
)
# 3. Perform correlation analysis
correlation_matrix = await calculate_correlation_matrix(
symbols=["AAPL", "MSFT", "GOOGL", "AMZN", "TSLA"],
start_date="2023-01-01",
end_date="2024-01-01"
)
# 4. Find uncorrelated assets for diversification
uncorrelated = await select_uncorrelated_assets(
symbols=correlation_matrix["symbols"],
num_assets=5,
method="lowest_correlation",
start_date="2023-01-01",
end_date="2024-01-01"
)
# 5. Optimize portfolio with advanced algorithm
optimized_portfolio = await sparse_optimization(
portfolio_symbols=uncorrelated["selected_assets"]["symbols"],
benchmark_symbol="SPY",
start_date="2023-01-01",
end_date="2024-01-01",
max_weight=0.15,
lambda_param=0.01
)
# Cointegration analysis for pairs trading
cointegration_result = await test_cointegration(
symbol1="KO",
symbol2="PEP",
start_date="2023-01-01",
end_date="2024-01-01",
trend="c"
)
if cointegration_result["is_cointegrated"]:
print(f"β
Cointegration detected (p-value: {cointegration_result['cointegration_pvalue']:.4f})")
# Analyze mean reversion opportunities
mean_reversion = await analyze_mean_reversion(
symbols=["KO", "PEP"],
start_date="2023-01-01",
end_date="2024-01-01",
lookback_period=20
)
# Create new algorithmic trading project
project = await create_project(
name="Mean_Reversion_Strategy_v2",
language="Py"
)
# Upload algorithm code
await create_file(
project_id=project["project"]["projectId"],
name="main.py",
content=algorithm_code
)
# Run backtest
backtest = await create_backtest(
project_id=project["project"]["projectId"],
compile_id="latest",
backtest_name="Mean_Reversion_Test_Run",
parameters={"lookback_period": 20, "threshold": 2.0}
)
# Analyze results
results = await read_backtest(
project_id=project["project"]["projectId"],
backtest_id=backtest["backtest"]["backtestId"]
)
Tool | Description | Key Parameters |
---|---|---|
configure_quantconnect_auth |
Set up API credentials | user_id , api_token , organization_id |
validate_quantconnect_auth |
Test credential validity | - |
get_auth_status |
Check authentication status | - |
test_quantconnect_api |
Test API connectivity | endpoint , method |
clear_quantconnect_auth |
Clear stored credentials | - |
Tool | Description | Key Parameters |
---|---|---|
create_project |
Create new QuantConnect project | name , language , organization_id |
read_project |
Get project details or list all | project_id (optional) |
update_project |
Update project name/description | project_id , name , description |
Tool | Description | Key Parameters |
---|---|---|
create_file |
Create file in project | project_id , name , content |
read_file |
Read file(s) from project | project_id , name (optional) |
update_file_content |
Update file content | project_id , name , content |
update_file_name |
Rename file in project | project_id , old_file_name , new_name |
Tool | Description | Key Parameters |
---|---|---|
initialize_quantbook |
Create new research instance | instance_name , organization_id , token |
list_quantbook_instances |
View all active instances | - |
get_quantbook_info |
Get instance details | instance_name |
remove_quantbook_instance |
Clean up instance | instance_name |
Tool | Description | Key Parameters |
---|---|---|
add_equity |
Add single equity security | ticker , resolution , instance_name |
add_multiple_equities |
Add multiple securities | tickers , resolution , instance_name |
get_history |
Get historical price data | symbols , start_date , end_date , resolution |
add_alternative_data |
Subscribe to alt data | data_type , symbol , instance_name |
get_alternative_data_history |
Get alt data history | data_type , symbols , start_date , end_date |
Tool | Description | Key Parameters |
---|---|---|
perform_pca_analysis |
Principal Component Analysis | symbols , start_date , end_date , n_components |
test_cointegration |
Engle-Granger cointegration test | symbol1 , symbol2 , start_date , end_date |
analyze_mean_reversion |
Mean reversion analysis | symbols , start_date , end_date , lookback_period |
calculate_correlation_matrix |
Asset correlation analysis | symbols , start_date , end_date |
Tool | Description | Key Parameters |
---|---|---|
sparse_optimization |
Advanced sparse optimization | portfolio_symbols , benchmark_symbol , optimization params |
calculate_portfolio_performance |
Performance metrics | symbols , weights , start_date , end_date |
optimize_equal_weight_portfolio |
Equal-weight optimization | symbols , start_date , end_date , rebalance_frequency |
Tool | Description | Key Parameters |
---|---|---|
get_etf_constituents |
Get ETF holdings | etf_ticker , date , instance_name |
add_etf_universe_securities |
Add all ETF constituents | etf_ticker , date , resolution |
select_uncorrelated_assets |
Find uncorrelated assets | symbols , num_assets , method |
screen_assets_by_criteria |
Multi-criteria screening | symbols , min_return , max_volatility , etc. |
Tool | Description | Key Parameters |
---|---|---|
create_backtest |
Create new backtest | project_id , compile_id , backtest_name |
read_backtest |
Get backtest results | project_id , backtest_id , chart |
read_backtest_chart |
Get chart data | project_id , backtest_id , name |
read_backtest_orders |
Get order history | project_id , backtest_id , start , end |
read_backtest_insights |
Get insights data | project_id , backtest_id , start , end |
quantconnect-mcp/
βββ ποΈ main.py # Server entry point & configuration
βββ π src/
β βββ π₯οΈ server.py # FastMCP server core
β βββ π§ tools/ # Tool implementations
β β βββ π auth_tools.py # Authentication management
β β βββ π project_tools.py # Project CRUD operations
β β βββ π file_tools.py # File management
β β βββ π§ͺ quantbook_tools.py # Research environment
β β βββ π data_tools.py # Data retrieval
β β βββ π¬ analysis_tools.py # Statistical analysis
β β βββ π° portfolio_tools.py # Portfolio optimization
β β βββ π universe_tools.py # Universe selection
β β βββ π backtest_tools.py # Backtest management
β βββ π auth/ # Authentication system
β β βββ __init__.py
β β βββ quantconnect_auth.py # Secure API authentication
β βββ π resources/ # System resources
β βββ __init__.py
β βββ system_resources.py # Server monitoring
βββ π§ͺ tests/ # Comprehensive test suite
β βββ test_auth.py
β βββ test_server.py
β βββ __init__.py
βββ π pyproject.toml # Project configuration
βββ π README.md # This file
- ποΈ Modular Architecture: Each tool category is cleanly separated for maintainability
- π Security First: SHA-256 authenticated API with secure credential management
- β‘ Async Performance: Non-blocking operations for maximum throughput
- π§ͺ Type Safety: Full type annotations with mypy verification
- π§ Extensible: Plugin-based architecture for easy feature additions
# STDIO (default) - Best for MCP clients
python main.py
# HTTP Server - Best for web integrations
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=8000 python main.py
# Custom path for HTTP
MCP_PATH=/api/v1/mcp python main.py
Variable | Description | Default | Example |
---|---|---|---|
MCP_TRANSPORT |
Transport method | stdio |
streamable-http |
MCP_HOST |
Server host | 127.0.0.1 |
0.0.0.0 |
MCP_PORT |
Server port | 8000 |
3000 |
MCP_PATH |
HTTP endpoint path | /mcp |
/api/v1/mcp |
LOG_LEVEL |
Logging verbosity | INFO |
DEBUG |
Monitor server performance and status:
# System information
system_info = await get_resource("resource://system/info")
# Server status and active instances
server_status = await get_resource("resource://quantconnect/server/status")
# Available tools summary
tools_summary = await get_resource("resource://quantconnect/tools/summary")
# Performance metrics
performance = await get_resource("resource://quantconnect/performance/metrics")
# Top processes by CPU usage
top_processes = await get_resource("resource://system/processes/10")
# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=src --cov-report=html
# Run specific test category
pytest tests/test_auth.py -v
# Run tests in parallel
pytest tests/ -n auto
# Test authentication
python -c "
import asyncio
from src.auth import validate_authentication
print(asyncio.run(validate_authentication()))
"
# Test server startup
python main.py --help
We welcome contributions! This project follows the highest Python development standards:
# Fork and clone the repository
git clone https://github.com/your-username/quantconnect-mcp
cd quantconnect-mcp
# Install development dependencies
uv sync --dev
# Install pre-commit hooks
pre-commit install
- β Type Hints: All functions must have complete type annotations
- β Documentation: Comprehensive docstrings for all public functions
- β Testing: Minimum 90% test coverage required
- β Formatting: Black code formatting enforced
- β Linting: Ruff linting with zero warnings
- β Type Checking: mypy verification required
# Create feature branch
git checkout -b feature/amazing-new-feature
# Make changes and run quality checks
ruff check src/
black src/ tests/
mypy src/
# Run tests
pytest tests/ --cov=src
# Commit with conventional commits
git commit -m "feat: add amazing new feature"
# Push and create pull request
git push origin feature/amazing-new-feature
- π Clear Description: Explain what and why, not just how
- π§ͺ Test Coverage: Include tests for all new functionality
- π Documentation: Update README and docstrings as needed
- π Code Review: Address all review feedback
- β CI Passing: All automated checks must pass
This project is licensed under the MIT License - see the LICENSE file for details.
Built with β€οΈ for the algorithmic trading community
β Star this repo β’ π Report issues β’ π‘ Request features