Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Stock Data MCP Serverget the current price and fundamentals for Apple stock"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Stock Data MCP Server
Production-ready aggregated MCP server for stock market data combining Finnhub (fundamentals), Yahoo Finance (quotes/history), Tushare (China A-shares), and Futu OpenAPI (HK/US/CN Real-time).
Perfect for building value investing agents, financial analysis tools, and portfolio management systems.
π― Features
π 9 Powerful Tools
search_symbol - Search stocks across all markets
resolve_symbol - normalize symbols between Yahoo (0700.HK) and Futu (HK.00700) formats
get_quote - Real-time quotes (Futu Snapshot / Yahoo Delay)
get_history - Historical OHLCV data (Futu K-line / Yahoo History)
get_fundamentals - ROE, margins, ratios, valuations
get_financial_statements - Income/Balance/Cashflow statements
subscribe_quote - Subscribe to real-time pushes (Futu)
get_order_book - Real-time market depth (Futu)
get_ticker - Real-time trade ticks (Futu)
Intelligent Data Routing
Market | Primary | Fallback |
ππ° ζΈ―θ‘ | Futu OpenAPI | Yahoo Finance |
π¨π³ Aθ‘ | Tushare Pro | Yahoo Finance |
πΊπΈ ηΎθ‘ | Yahoo Finance | - |
Fundamentals/Financials:
China (A-shares): Tushare Pro.
Global: Finnhub.
Smart Caching: 5s for quotes, 1h for fundamentals, 24h for statements.
Multi-Market Support
Market | Symbol Format (Yahoo) | Futu Format | Examples |
πΊπΈ US Stocks |
|
| AAPL, MSFT |
ππ° Hong Kong |
|
| 0700.HK (HK.00700) |
π¨π³ Shanghai |
|
| 600519.SS (SH.600519) |
π¨π³ Shenzhen |
|
| 000001.SZ (SZ.000001) |
π¦ Installation
Prerequisites
Python 3.10+
Finnhub API Key (Free tier ok) - Register
Tushare Token (Optional, for A-share fundamentals) - Register
FutuOpenD (Optional, for Real-time HK/US/CN data)
Download and install FutuOpenD.
Login with your Futu account.
Keep it running (default port 11111).
Quick Start
# Clone or navigate to the project
cd stock-data-mcp
# Install with valid tools (uv recommended)
uv sync
# Set up environment
cp .env.example .env
# Edit .env and add your API keysEnvironment Variables
Create a .env file:
# Data Provider Keys
FINNHUB_API_KEY=your_key_here
TUSHARE_TOKEN=your_token_here
# Futu Configuration (Optional)
FUTU_OPEND_HOST=127.0.0.1
FUTU_OPEND_PORT=11111
# Cache Settings
STOCK_MCP_TIMEOUT_SECONDS=10
STOCK_MCP_CACHE_TTL_QUOTE=5
STOCK_MCP_CACHE_TTL_FUNDAMENTALS=3600
STOCK_MCP_CACHE_TTL_STATEMENTS=86400π Usage
Running the Server
# Start the MCP server (stdio mode)
python -m stock_data_mcpClaude Desktop Integration
macOS Configuration:
Edit: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"stock-data": {
"command": "/absolute/path/to/venv/bin/python",
"args": ["-m", "stock_data_mcp"],
"cwd": "/absolute/path/to/stock-data-mcp",
"env": {
"FINNHUB_API_KEY": "...",
"TUSHARE_TOKEN": "...",
"FUTU_OPEND_HOST": "127.0.0.1",
"FUTU_OPEND_PORT": "11111"
}
}
}
}π API Reference Examples
Real-time Quotes (Futu/Yahoo)
// get_quote
{
"symbol": "0700.HK",
"prefer": "auto" // tries Futu -> Yahoo
}Order Book (Futu Only)
// get_order_book
{
"symbol": "0700.HK",
"num": 10
}Historical Data
// get_history
{
"symbol": "600519.SS",
"start_date": "2024-01-01",
"end_date": "2024-01-31",
"interval": "1d",
"adjust": "qfq" // Forward adjusted
}π§ Error Handling
Errors return structured JSON with specific codes:
PROVIDER_CONNECT_FAILED: FutuOpenD not reachable.HISTORY_NOT_AVAILABLE: Permission denied or no data.SUBSCRIPTION_LIMIT: Futu subscription quota exceeded.
π€ Contributing
To add a new provider:
Create
providers/new_provider.pyImplement provider interface
Add routing logic in
server.pyUpdate tests and README
π License
MIT
Production-ready aggregated MCP server for stock market data combining Finnhub (fundamentals) and Yahoo Finance (quotes/history).
Perfect for building value investing agents, financial analysis tools, and portfolio management systems.
π― Features
5 Powerful Tools
search_symbol - Search stocks across all markets
get_quote - Real-time quotes with 5s caching
get_history - Historical OHLCV data
get_fundamentals - ROE, margins, ratios, valuations
get_financial_statements - Income/Balance/Cashflow statements
Intelligent Data Routing
Quotes/History: Yahoo Finance (free, fast, no limits)
Fundamentals/Financials: Finnhub (professional-grade data)
Automatic Fallback: If primary source fails, tries backup
Smart Caching: 5s for quotes, 1h for fundamentals, 24h for statements
Multi-Market Support
Market | Symbol Format | Examples |
πΊπΈ US Stocks |
| AAPL, MSFT, GOOGL |
ππ° Hong Kong |
| 0700.HK (Tencent), 9988.HK (Alibaba) |
π¨π³ Shanghai |
| 600519.SS (Moutai), 600036.SS (CMB) |
π¨π³ Shenzhen |
| 000001.SZ (Pingan), 300750.SZ (CATL) |
π¦ Installation
Prerequisites
Python 3.10+
Finnhub API Key (free tier is fine)
Get yours at: https://finnhub.io/register
Free tier: 60 API calls/minute
Quick Start
# Clone or navigate to the project
cd stock-data-mcp
# Install with pip
pip install -e .
# Or with uv (faster)
uv pip install -e .
# Set up environment
cp .env.example .env
# Edit .env and add your FINNHUB_API_KEYEnvironment Variables
Create a .env file:
# Required
FINNHUB_API_KEY=your_actual_api_key_here
# Optional (with defaults)
STOCK_MCP_TIMEOUT_SECONDS=10
STOCK_MCP_CACHE_TTL_QUOTE=5
STOCK_MCP_CACHE_TTL_FUNDAMENTALS=3600
STOCK_MCP_CACHE_TTL_STATEMENTS=86400π Usage
Running the Server
# Start the MCP server (stdio mode)
python -m stock_data_mcpTesting Locally
# Run comprehensive tests
python quick_test.py
# Expected output:
# β PASS: Yahoo Quote
# β PASS: Yahoo History
# β PASS: Finnhub Fundamentals
# β PASS: Finnhub StatementsClaude Desktop Integration
macOS Configuration:
Edit: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"stock-data": {
"command": "/absolute/path/to/venv/bin/python",
"args": ["-m", "stock_data_mcp"],
"cwd": "/absolute/path/to/stock-data-mcp",
"env": {
"FINNHUB_API_KEY": "your_api_key_here"
}
}
}
}Windows Configuration:
Edit: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"stock-data": {
"command": "C:\\path\\to\\venv\\Scripts\\python.exe",
"args": ["-m", "stock_data_mcp"],
"cwd": "C:\\path\\to\\stock-data-mcp",
"env": {
"FINNHUB_API_KEY": "your_api_key_here"
}
}
}
}After configuration:
Completely quit Claude Desktop
Restart Claude Desktop
The tools will appear in your conversations
π API Reference
1. search_symbol
Search for stock symbols across markets.
Input:
{
"query": "tencent",
"limit": 10,
"market_hint": "HK"
}Output:
{
"results": [
{
"symbol": "0700.HK",
"name": "Tencent Holdings Ltd",
"market": "HK",
"exchange": "HKG",
"source": "finnhub"
}
]
}Data Source: Finnhub β Yahoo (fallback)
2. get_quote
Get real-time market data.
Input:
{
"symbol": "0700.HK",
"prefer": "yahoo"
}Output:
{
"symbol": "0700.HK",
"name": "Tencent Holdings Ltd",
"market": "HK",
"exchange": "HKG",
"currency": "HKD",
"price": 385.60,
"change": 4.20,
"change_pct": 1.10,
"open": 382.00,
"high": 387.20,
"low": 380.50,
"prev_close": 381.40,
"volume": 15234000,
"timestamp": "2025-12-12T14:30:00Z",
"source": "yahoo"
}Data Source: Yahoo (default) β Finnhub (fallback) Cache: 5 seconds
3. get_history
Get historical OHLCV data.
Input:
{
"symbol": "600519.SS",
"start_date": "2024-01-01",
"end_date": "2024-12-31",
"interval": "1d"
}Intervals: 1d (daily), 1wk (weekly), 1mo (monthly)
Output:
{
"symbol": "600519.SS",
"records": [
{
"date": "2024-01-02",
"open": 1650.00,
"high": 1680.50,
"low": 1645.00,
"close": 1672.30,
"volume": 8234500
}
]
}Data Source: Yahoo Finance Cache: 5 minutes
4. get_fundamentals
Get fundamental metrics (ROE, margins, ratios).
Input:
{
"symbol": "AAPL",
"period": "ttm"
}Output:
{
"symbol": "AAPL",
"currency": "USD",
"market_cap": 2890000000000,
"pe": 29.45,
"pb": 45.32,
"ps": 7.58,
"dividend_yield": 0.52,
"roe": 147.25,
"roa": 22.58,
"gross_margin": 44.13,
"operating_margin": 30.74,
"net_margin": 25.31,
"debt_to_equity": 1.96,
"current_ratio": 0.98,
"quick_ratio": 0.82,
"revenue_ttm": 385603000000,
"net_income_ttm": 97606000000,
"free_cash_flow_ttm": 99584000000,
"updated_at": "2025-12-12T14:30:00Z",
"source": "finnhub"
}Data Source: Finnhub (requires API key) Cache: 1 hour
5. get_financial_statements
Get income statement, balance sheet, or cashflow.
Input:
{
"symbol": "AAPL",
"statement": "income",
"period": "annual"
}Statement Types: income, balance, cashflow
Periods: annual, quarterly
Output:
{
"symbol": "AAPL",
"statement": "income",
"period": "annual",
"currency": "USD",
"items": [
{
"period_end": "2023-09-30",
"revenue": 383285000000,
"gross_profit": 169148000000,
"operating_income": 114301000000,
"net_income": 96995000000,
"eps": 6.16
}
],
"source": "finnhub"
}Data Source: Finnhub (requires API key) Cache: 24 hours
ποΈ Architecture
stock-data-mcp/
βββ stock_data_mcp/
β βββ server.py # MCP server + routing logic
β βββ schemas.py # Unified Pydantic models
β βββ cache.py # TTL caching system
β βββ util.py # Helper functions
β βββ providers/
β βββ finnhub_provider.py # Finnhub integration
β βββ yahoo_provider.py # Yahoo Finance integration
β βββ symbols.py # Symbol normalization
βββ pyproject.toml
βββ .env.example
βββ quick_test.pyData Flow
User Request
β
MCP Server (routing + caching)
β
βββββββββββββββ¬ββββββββββββββ
β Yahoo β Finnhub β
β Provider β Provider β
βββββββββββββββ΄ββββββββββββββ
β β
Unified Schema Responseπ§ Error Handling
All errors return structured JSON:
{
"error": {
"code": "PROVIDER_RATE_LIMIT",
"message": "Finnhub API rate limit exceeded",
"details": {
"provider": "finnhub",
"symbol": "AAPL"
}
}
}Error Codes:
PROVIDER_TIMEOUT- Request timed outSYMBOL_NOT_FOUND- Invalid or unknown symbolINVALID_ARGUMENT- Bad input parametersPROVIDER_RATE_LIMIT- API rate limit hitPROVIDER_ERROR- Provider-specific errorMISSING_API_KEY- Finnhub key not configuredNO_DATA- No data available for request
π‘ Usage Examples with Claude
Once integrated, you can ask Claude:
"Compare the fundamentals of Tencent (0700.HK) and Alibaba (9988.HK).
Show me ROE, profit margins, and debt ratios.""Get the last 5 years of annual financial statements for AAPL.
Calculate revenue growth rate and profit margin trends.""Find Chinese tech stocks with ROE > 15% and PE < 20.
Show me their recent price performance."π― Use Cases
Value Investing Analysis
Screen stocks by ROE, margins, debt ratios
Compare fundamentals across markets
Track historical performance metrics
Portfolio Management
Monitor real-time quotes for watchlist
Analyze sector allocations
Track dividend yields
Financial Research
Pull complete financial statements
Calculate custom metrics
Build valuation models
βοΈ Configuration
Cache TTL Settings
Adjust in .env:
STOCK_MCP_CACHE_TTL_QUOTE=5 # Quote cache (seconds)
STOCK_MCP_CACHE_TTL_FUNDAMENTALS=3600 # Fundamentals (1 hour)
STOCK_MCP_CACHE_TTL_STATEMENTS=86400 # Statements (24 hours)Rate Limits
Finnhub Free Tier:
60 API calls/minute
30 calls/second
Best Practices:
Enable caching (default)
Batch similar requests
Use Yahoo for high-frequency quote checks
π Troubleshooting
"MISSING_API_KEY" error
# Check if env var is set
echo $FINNHUB_API_KEY
# If using .env file, verify it's loaded
cat .env | grep FINNHUB
# Restart server after settingServer not appearing in Claude Desktop
Check JSON syntax in config file
Use absolute paths (not
~or relative paths)Verify Python path with
which pythonin your venvCheck logs:
# macOS tail -f ~/Library/Logs/Claude/mcp*.log # Windows Get-Content $env:APPDATA\Claude\logs\mcp*.log -Wait
Symbol not found
Verify symbol format (e.g.,
0700.HKnot700.HK)Try searching first:
search_symbol("tencent")Check if market is supported
Rate limit exceeded
Increase cache TTL
Reduce request frequency
Consider Finnhub paid tier for higher limits
π Performance
Typical Response Times:
Quote (cached): <10ms
Quote (fresh): 200-500ms
History (1 year): 500-1000ms
Fundamentals (cached): <10ms
Fundamentals (fresh): 1-2s
Statements: 1-3s
Cache Hit Rates:
Quotes: ~80% (5s TTL)
Fundamentals: ~95% (1h TTL)
Statements: ~99% (24h TTL)
π Roadmap
v0.2 (Planned)
Symbol mapping table (watchlist.csv)
Company profile tool
News & sentiment data
Insider trading data
v0.3 (Future)
Alternative data sources (Alpha Vantage, IEX)
Crypto support
Options data
Technical indicators
π€ Contributing
This is a production-ready MVP. Extensions welcome!
To add a new provider:
Create
providers/new_provider.pyImplement provider interface
Add routing logic in
server.pyUpdate tests and README
π License
MIT
π Acknowledgments
Finnhub - Professional-grade financial data API
Yahoo Finance (yfinance) - Free historical data
MCP - Model Context Protocol by Anthropic
Built for value investors who code. ππ