Time Series Quant Finance MCP Server
by AHNEMER
README.md
# Time Series Quant Finance MCP Server
An MCP (Model Context Protocol) server built using [FastMCP](https://github.com/jcarter-dev/fastmcp) that calculates technical analysis indicators for financial stock tickers using `yfinance` and `pandas-ta`.
This server provides LLMs with access to real-time financial market data and quantitative analysis tools, enabling them to analyze stock trends, momentum, volatility, and key moving averages.
## Features
- **Automatic Baseline Trends**: Always includes 50-day Simple Moving Average (SMA) and 200-day SMA to establish baseline trends.
- **Multiple Technical Indicators**: Support for:
- **RSI** (Relative Strength Index)
- **MACD** (Moving Average Convergence Divergence)
- **BBANDS** (Bollinger Bands)
- **ATR** (Average True Range)
- **SMA** (Simple Moving Average with custom lengths)
- **EMA** (Exponential Moving Average with custom lengths)
- **Robust Multi-index Handling**: Programmatically flattens `yfinance` multi-level indices to prevent Pandas crashes.
- **JSON Output**: Returns the last 5 trading days of historical and calculated data, cleaned and formatted for easy consumption by an LLM.
---
## Installation & Setup
### Prerequisites
- Python >= 3.12
- [uv](https://github.com/astral-sh/uv) (recommended package manager) or standard `pip`
### 1. Clone & Install Dependencies
Using `uv` (recommended):
```bash
# Install dependencies using uv
uv sync
```
Or using standard `pip` and virtual environments:
```bash
# Create and activate a virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install dependencies
pip install -r requirements.txt
```
---
## Running and Debugging
### Running via FastMCP Dev Inspector
FastMCP includes a built-in development inspector that lets you interact with and test the server in a web UI.
```bash
# Using uv
uv run fastmcp dev server.py
# Or using standard python
python server.py dev
```
Alternatively, you can use the official MCP Inspector:
```bash
npx -y @modelcontextprotocol/inspector uv run server.py
```
---
## MCP Configuration
To integrate this server with client applications like **Claude Desktop**, add the configuration to your MCP settings file (typically `~/Library/Application Support/Claude/claude_desktop_config.json` on macOS or `%APPDATA%\Claude\claude_desktop_config.json` on Windows).
### Configuration using `uv` (Recommended)
```json
{
"mcpServers": {
"finance-server": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/mcp-finance-server",
"server.py"
]
}
}
}
```
### Configuration using Virtual Environment Python
```json
{
"mcpServers": {
"finance-server": {
"command": "/absolute/path/to/mcp-finance-server/.venv/bin/python",
"args": [
"/absolute/path/to/mcp-finance-server/server.py"
]
}
}
}
```
Make sure to replace `/absolute/path/to/mcp-finance-server` with the actual path to the repository on your system.
---
## Tools Reference
### `calculate_technical_indicators`
Fetches daily historical stock data for the last year and calculates requested technical indicators.
#### Parameters
| Parameter | Type | Required | Default | Description |
| :--- | :--- | :--- | :--- | :--- |
| `ticker` | `string` | **Yes** | - | Stock ticker symbol (e.g. `"AAPL"`, `"MSFT"`, `"TSLA"`). |
| `requested_indicators` | `array[string]` | **Yes** | - | List of indicators to calculate. Supported values: `"RSI"`, `"MACD"`, `"BBANDS"`, `"ATR"`, `"SMA"`, `"EMA"`. |
| `rsi_length` | `integer` | No | `14` | Period length for RSI calculation. |
| `macd_fast` | `integer` | No | `12` | Fast period for MACD. |
| `macd_slow` | `integer` | No | `26` | Slow period for MACD. |
| `macd_signal` | `integer` | No | `9` | Signal period for MACD. |
| `bbands_length` | `integer` | No | `20` | Period length for Bollinger Bands. |
| `bbands_std` | `float` | No | `2.0` | Standard deviation multiplier for Bollinger Bands. |
| `atr_length` | `integer` | No | `14` | Period length for ATR. |
| `custom_sma_lengths` | `array[integer]` | No | `[]` | List of custom SMA lengths to calculate (excluding baseline 50 and 200). |
| `custom_ema_lengths` | `array[integer]` | No | `[]` | List of custom EMA lengths to calculate. |
#### Return Value
Returns a JSON-formatted string mapping date strings to indicator values for the last 5 trading days.
Example return structure (shortened for readability):
```json
{
"2026-07-07": {
"Open": 182.5,
"High": 184.2,
"Low": 181.8,
"Close": 183.9,
"Volume": 54200000,
"Baseline_SMA_50": 178.4,
"Primary_Trend_SMA_200": 170.2,
"RSI_14": 62.4
},
"2026-07-08": { ... },
"2026-07-09": { ... },
"2026-07-10": { ... },
"2026-07-11": { ... }
}
```
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues