Files
tradingview-screener-mcp/README.md
T

147 lines
3.7 KiB
Markdown

# TradingView Screener MCP Server
MCP server that wraps the [tradingview-screener](https://github.com/shner-elmo/TradingView-Screener) library as granular MCP tools for stock screening, technical analysis, and market data retrieval.
## Tools
### Quotes & Screening
| Tool | Description |
|------|-------------|
| `get_stock_quotes` | Get quote data for specific tickers |
| `screen_market` | General-purpose screener with filters, sorting, pagination |
| `find_top_gainers` | Top gainers by percent change |
| `find_top_losers` | Top losers by percent change |
| `find_most_active` | Most active by volume |
| `technical_scan` | Screen by technical indicator conditions |
| `fundamental_scan` | Screen by fundamental metrics |
### Utilities
| Tool | Description |
|------|-------------|
| `list_markets` | List available market types and stock countries |
| `list_fields` | List screener fields by category |
| `set_session` | Store TradingView session ID in memory |
| `clear_session` | Clear stored session ID |
## Filter Conditions
Simple condition:
```json
{"field": "RSI", "operator": ">", "value": 70}
```
Nested group:
```json
{"operator": "or", "filters": [
{"field": "RSI", "operator": ">", "value": 70},
{"field": "RSI", "operator": "<", "value": 30}
]}
```
### Supported Operators
| Operator | Aliases | Description |
|----------|---------|-------------|
| `>` | `greater` | Greater than |
| `>=` | `egreater` | Greater or equal |
| `<` | `less` | Less than |
| `<=` | `eless` | Less or equal |
| `==` | `equal` | Equal |
| `!=` | `nequal` | Not equal |
| `between` | | Value between [lo, hi] |
| `not_between` | | Value not between [lo, hi] |
| `isin` | | Value in list |
| `not_in` | | Value not in list |
| `has` | | String contains |
| `has_none_of` | | String contains none of |
| `like` | | Pattern match |
| `not_like` | | Pattern not match |
| `empty` | | Field is empty |
| `not_empty` | | Field is not empty |
| `crosses` | | Crosses another field |
| `crosses_above` | | Crosses above another field |
| `crosses_below` | | Crosses below another field |
| `above_pct` | | Above field by % multiplier |
| `below_pct` | | Below field by % multiplier |
| `between_pct` | | Between % of field |
| `in_day_range` | | In 1-day range [lo, hi] |
| `in_week_range` | | In 1-week range [lo, hi] |
| `in_month_range` | | In 1-month range [lo, hi] |
### Market Types
- `stocks` (default) — use `market_country` for country (e.g. `"america"`, `"india"`)
- `crypto`, `crypto_dex`, `coin` — cryptocurrency markets
- `forex` — currency pairs
- `futures`, `bond`, `cfd` — derivative markets
- `options` — use `market_country` for underlying symbol
## Session ID
TradingView session cookies enable real-time data. Priority:
1. Per-call `sessionid` parameter
2. `set_session` tool (in-memory)
3. `TV_SESSION_ID` environment variable (loaded from `.env` via `python-dotenv`)
## NanoClaw Integration
Add to your NanoClaw group's `.mcp.json`:
```json
{
"mcpServers": {
"tradingview-screener": {
"command": "/path/to/.venv/bin/python3",
"args": ["/path/to/server.py"],
"env": {
"TV_SESSION_ID": "${TV_SESSION_ID}"
}
}
}
}
```
For streamable HTTP (server runs externally):
```json
{
"mcpServers": {
"tradingview-screener": {
"url": "http://host.docker.internal:8000/mcp"
}
}
}
```
## Setup
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install .
cp .env.example .env
# Edit .env with your TV_SESSION_ID
```
## Run
```bash
# STDIO transport (default — for Claude Desktop, NanoClaw, etc.)
python server.py
# Streamable HTTP transport
python server.py --transport streamable-http --host 0.0.0.0 --port 8000
# SSE transport
python server.py --transport sse --host 127.0.0.1 --port 8000
```
## Tests
```bash
pytest tests/
```