TA-Lib MCP Server
Technical analysis indicators MCP server and HTTP API for the Model Context Protocol.
Quick Start
# Install dependencies
uv sync --dev
# Copy logging configuration
cp logging.conf.example logging.conf
# Run MCP server with STDIO transport (default)
uv run python -m mcp_talib.cli --mode mcp --transport stdio
# Run MCP server with HTTP transport
uv run python -m mcp_talib.cli --mode mcp --transport http --port 8000
# Run HTTP API server only
uv run python -m mcp_talib.cli --mode api --port 8001
# Run CLI tools directly
uv run python -m mcp_talib.cli_tools list
uv run python -m mcp_talib.cli_tools call sma --close '[1,2,3,4,5]' --timeperiod 3
Architecture
This project provides three independent access methods:
1. MCP Server (--mode mcp)
- Pure MCP protocol implementation exposing all TA-Lib indicators as MCP tools
- Supports both STDIO and HTTP transports
- For use with MCP clients (Claude Desktop, MCP Inspector, MCP.js, etc.)
- No REST endpoints
Run with STDIO (for Claude Desktop):
uv run python -m mcp_talib.cli --mode mcp --transport stdio
Run with HTTP (for MCP Inspector or web clients):
uv run python -m mcp_talib.cli --mode mcp --transport http --port 8000
# Then connect MCP Inspector to http://localhost:8000/mcp
2. HTTP API Server (--mode api)
- Pure REST API with
/api/tools/*JSON endpoints - For programmatic HTTP access to indicators
- No MCP protocol, just clean REST
Run HTTP API:
uv run python -m mcp_talib.cli --mode api --port 8001
Example request:
curl -X POST http://localhost:8001/api/tools/sma \
-H 'Content-Type: application/json' \
-d '{"close": [1,2,3,4,5], "timeperiod": 3}'
3. CLI Tools
Direct command-line access to all indicators via Typer:
uv run python -m mcp_talib.cli_tools list
uv run python -m mcp_talib.cli_tools call sma --close '[1,2,3,4,5]' --timeperiod 3
Features
- All TA-Lib Overlap Studies: BBANDS, DEMA, EMA, HT_TRENDLINE, KAMA, MA, MAMA, MAVP, MIDPOINT, MIDPRICE, SAR, SAREXT, SMA, T3, TEMA, TRIMA, WMA
- Three Access Methods: MCP, HTTP REST, CLI
- Dual Transport: STDIO and HTTP for MCP
- Cross-platform: Works on Linux, macOS, Windows
- Comprehensive Testing: 26+ unit and integration tests
- Error Handling: Detailed error messages and validation
Logging Configuration
The server requires a logging.conf file for configuration. Copy the example:
cp logging.conf.example logging.conf
Customize logging levels, format, and output file in logging.conf. The server logs to console.log to maintain MCP protocol compliance.
Client Configuration
Claude Desktop Integration
-
Create a configuration file at
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or appropriate location for your OS. -
Add the MCP server configuration:
{
"mcpServers": {
"talib": {
"command": "uv",
"args": [
"run",
"python",
"-m",
"mcp_talib.cli",
"--mode",
"mcp",
"--transport",
"stdio"
],
"cwd": "/path/to/mcp-talib"
}
}
}
-
Restart Claude Desktop to load the TA-Lib server.
-
Verify installation by asking Claude: "What technical analysis tools do you have?"
MCP Inspector (HTTP)
For HTTP transport, configure MCP Inspector to connect to:
http://localhost:8000/mcp
Run the MCP server with HTTP:
uv run python -m mcp_talib.cli --mode mcp --transport http --port 8000
Important: The HTTP transport includes CORS middleware to support browser-based MCP clients like MCP Inspector. If you're behind a reverse proxy or need to restrict access, update the allow_origins setting in transport/http.py.
MCP.js Client Example
import { MCPServerClient } from '@modelcontextprotocol/client';
const client = new MCPServerClient({
name: 'talib',
command: 'uv',
args: ['run', 'python', '-m', 'mcp_talib.cli', '--mode', 'mcp', '--transport', 'stdio'],
cwd: process.cwd()
});
// List available tools
const tools = await client.listTools();
console.log('Available tools:', tools.map(t => t.name));
// Calculate SMA
const smaResult = await client.callTool('calculate_sma', {
close_prices: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
timeperiod: 5
});
console.log('SMA result:', smaResult);
HTTP API Client (Python)
import requests
# List available tools
response = requests.get('http://localhost:8001/api/tools')
tools = response.json()['tools']
print('Available tools:', tools)
# Calculate SMA
payload = {
'close': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'timeperiod': 5
}
response = requests.post('http://localhost:8001/api/tools/sma', json=payload)
result = response.json()
print('SMA result:', result['values'])
Available Tools
The server provides MCP tools and HTTP endpoints for all TA-Lib overlap studies:
calculate_sma- Simple Moving Averagecalculate_ema- Exponential Moving Averagecalculate_rsi- Relative Strength Indexcalculate_bbands- Bollinger Bandscalculate_dema- Double Exponential Moving Averagecalculate_ht_trendline- Hilbert Transform Trendlinecalculate_kama- Kaufman Adaptive Moving Averagecalculate_ma- Moving Average (with matype)calculate_mama- MESA Adaptive Moving Averagecalculate_mavp- Moving Average Variable Periodcalculate_midpoint- Midpointcalculate_midprice- Midpoint Pricecalculate_sar- Parabolic SARcalculate_sarext- Parabolic SAR Extendedcalculate_t3- T3 Moving Averagecalculate_tema- Triple Exponential Moving Averagecalculate_trima- Triangular Moving Averagecalculate_wma- Weighted Moving Average
Development
# Run all tests
uv run pytest
# Run specific test file
uv run pytest tests/unit/test_sma.py -v
# Run with coverage
uv run pytest --cov=src/mcp_talib
# Format code
uv run black src/ tests/
uv run isort src/ tests/
# Lint code
uv run ruff check src/ tests/
TA-Lib Platform Requirements
This project uses the ta-lib Python bindings which require the native TA-Lib C library. On CI or developer machines, you must install the system TA-Lib library before installing Python dependencies.
Links and notes:
- TA-Lib (C library): https://ta-lib.org/ (download and build instructions)
- ta-lib-python (Python bindings): https://github.com/TA-Lib/ta-lib-python
Example (Ubuntu) CI steps:
# Install build dependencies
sudo apt-get update && sudo apt-get install -y build-essential wget
# Download and build TA-Lib C library
wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
tar -xzf ta-lib-0.4.0-src.tar.gz
cd ta-lib
./configure --prefix=/usr
make
sudo make install
# Then install Python package
pip install TA-Lib
If you prefer not to build the C library, use pre-built wheels where available or run tests in an environment that provides TA-Lib (e.g., manylinux CI images).
HTTP API & CLI
This project exposes the same MCP tools as both HTTP JSON endpoints and a Typed CLI (Typer).
HTTP Endpoint
POST /api/tools/{tool_name}
Request JSON: { "close": [..], ...params } (e.g., timeperiod)
Response JSON: { "success": true, "values": [...], "metadata": {...} }
Example:
curl -X POST http://localhost:8000/api/tools/sma \
-H 'Content-Type: application/json' \
-d '{"close": [1,2,3,4,5], "timeperiod": 3}'
MCP Endpoint
The MCP endpoint remains at /mcp for MCP clients (MCP Inspector, MCP.js, etc.). The HTTP API mounts the MCP app so both APIs coexist.
CLI (Typer)
Access tools from the command line via src/mcp_talib/cli_tools.py:
List available tools:
uv run python -m mcp_talib.cli_tools list
Call a tool:
uv run python -m mcp_talib.cli_tools call sma --close '[1,2,3,4,5]' --timeperiod 3
Implementation Notes
- Requests are validated using Pydantic
- The underlying indicator implementations are the single source of truth (registered in the MCP registry)
- HTTP API and CLI call the same code so results match exactly
- For browser clients, CORS is enabled and
mcp-session-idis exposed in responses
License
MIT
