tradingview-mcp 1.1.0__tar.gz → 26.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/LICENSE +0 -2
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/PKG-INFO +38 -13
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/README.md +32 -7
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/pyproject.toml +6 -6
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/constants.py +6 -4
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/scanner.py +2 -1
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/server.py +371 -53
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/.gitignore +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/__init__.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/column.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/__init__.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/column_display_names.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/extracted/__init__.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/extracted/ai_quick_reference.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/extracted/common_fields.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/extracted/fields_by_market.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/extracted/screener_code_examples.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/markets.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/bond.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/bonds.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/cfd.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/coin.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/crypto.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/economics2.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/forex.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/futures.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/ireland.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/options.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/stocks.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/screeners/main_screeners.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/screeners/markets.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/screeners/stocks.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/screeners/stocks_failed.json +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/docs_data.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/models.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/query.py +0 -0
- {tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/utils.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tradingview-mcp
|
|
3
|
-
Version:
|
|
3
|
+
Version: 26.0.0
|
|
4
4
|
Summary: A comprehensive MCP server for TradingView market screening with integrated screener functionality
|
|
5
|
-
Project-URL: Homepage, https://github.com/
|
|
6
|
-
Project-URL: Documentation, https://github.com/
|
|
7
|
-
Project-URL: Repository, https://github.com/
|
|
8
|
-
Project-URL: Issues, https://github.com/
|
|
9
|
-
Project-URL: Changelog, https://github.com/
|
|
5
|
+
Project-URL: Homepage, https://github.com/k73a/tradingview-mcp
|
|
6
|
+
Project-URL: Documentation, https://github.com/k73a/tradingview-mcp#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/k73a/tradingview-mcp
|
|
8
|
+
Project-URL: Issues, https://github.com/k73a/tradingview-mcp/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/k73a/tradingview-mcp/blob/main/CHANGELOG.md
|
|
10
10
|
Author: TradingView MCP Team
|
|
11
11
|
License: MIT
|
|
12
12
|
License-File: LICENSE
|
|
@@ -39,7 +39,6 @@ Description-Content-Type: text/markdown
|
|
|
39
39
|
[](https://badge.fury.io/py/tradingview-mcp)
|
|
40
40
|
[](https://pypi.org/project/tradingview-mcp/)
|
|
41
41
|
[](https://opensource.org/licenses/MIT)
|
|
42
|
-
[](https://github.com/yourusername/tradingview-mcp/actions)
|
|
43
42
|
|
|
44
43
|
A comprehensive Model Context Protocol (MCP) server for TradingView market screening with fully integrated screener functionality. This server provides powerful tools for cryptocurrency and stock market analysis directly through the MCP interface.
|
|
45
44
|
|
|
@@ -58,6 +57,26 @@ Use `uvx` to run directly without installing:
|
|
|
58
57
|
}
|
|
59
58
|
```
|
|
60
59
|
|
|
60
|
+
## 🤖 For AI Agents
|
|
61
|
+
|
|
62
|
+
**📖 Read [AI.md](AI.md) for the complete guide!** You can copy the entire AI.md file to understand all capabilities.
|
|
63
|
+
|
|
64
|
+
**Quick Start:**
|
|
65
|
+
1. Call `get_help()` to understand how to use this MCP
|
|
66
|
+
2. Call `ai_get_reference()` for markets, columns, and filter references
|
|
67
|
+
|
|
68
|
+
Key points:
|
|
69
|
+
- All results include `description` field with full names (e.g., "Apple Inc." not just "AAPL")
|
|
70
|
+
- Use `limit` parameter to control result count (default: 25)
|
|
71
|
+
- Use `search_symbols("apple", "america")` to search by company name
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
# Quick examples:
|
|
75
|
+
get_top_gainers("america", 10) # Top 10 US stock gainers
|
|
76
|
+
search_symbols("tesla", "america") # Search for Tesla
|
|
77
|
+
get_symbol_info("NASDAQ:AAPL") # Apple Inc. details
|
|
78
|
+
```
|
|
79
|
+
|
|
61
80
|
## Features
|
|
62
81
|
|
|
63
82
|
### Core Screener Functionality
|
|
@@ -65,14 +84,21 @@ Use `uvx` to run directly without installing:
|
|
|
65
84
|
- **Multi-Market Support**: 76+ markets including crypto, stocks, forex, futures, and bonds
|
|
66
85
|
- **SQL-like Query Interface**: Build complex queries with filtering, sorting, and pagination
|
|
67
86
|
- **250+ Technical Indicators**: Access a comprehensive set of technical analysis columns
|
|
68
|
-
- **AI-Friendly Design**:
|
|
87
|
+
- **AI-Friendly Design**: Includes `description` (full name), token-saving limits, and help tools
|
|
69
88
|
|
|
70
89
|
### MCP Tools
|
|
71
90
|
|
|
91
|
+
#### 🔍 Discovery & Help Tools (AI Start Here!)
|
|
92
|
+
- `get_help(topic)`: **📖 Required reading!** Get usage guide and examples
|
|
93
|
+
- `search_symbols(query, market)`: 🔍 Search by company name (e.g., "Apple", "Tesla")
|
|
94
|
+
- `get_symbol_info(symbol)`: Get detailed symbol information
|
|
95
|
+
- `ai_get_reference()`: AI quick reference guide
|
|
96
|
+
|
|
72
97
|
#### Screening Tools
|
|
73
98
|
- `screen_market`: Execute custom market screening queries
|
|
74
|
-
- `get_top_gainers`: Find top gaining assets
|
|
75
|
-
- `get_top_losers`: Find top losing assets
|
|
99
|
+
- `get_top_gainers`: Find top gaining assets (includes full company names)
|
|
100
|
+
- `get_top_losers`: Find top losing assets (includes full company names)
|
|
101
|
+
- `get_most_active`: Most traded by volume
|
|
76
102
|
- `get_premarket_movers`: Pre-market gainers, losers, and most active
|
|
77
103
|
- `get_postmarket_movers`: Post-market activity analysis
|
|
78
104
|
- `get_technical_analysis`: Detailed technical analysis for specific symbols
|
|
@@ -84,7 +110,6 @@ Use `uvx` to run directly without installing:
|
|
|
84
110
|
- `advanced_query`: Execute advanced queries with AND/OR logic
|
|
85
111
|
|
|
86
112
|
#### AI-Friendly Reference Tools
|
|
87
|
-
- `ai_get_reference`: **Start here!** Get quick reference guide with markets, columns, filters
|
|
88
113
|
- `search_available_fields`: Search for fields/columns by name or description
|
|
89
114
|
- `get_field_info`: Get display name and type for a specific field
|
|
90
115
|
- `get_code_example`: Get Python code examples for screener types
|
|
@@ -131,7 +156,7 @@ pip install tradingview-mcp
|
|
|
131
156
|
|
|
132
157
|
### From Source
|
|
133
158
|
```bash
|
|
134
|
-
git clone https://github.com/
|
|
159
|
+
git clone https://github.com/k73a/tradingview-mcp.git
|
|
135
160
|
cd tradingview-mcp
|
|
136
161
|
uv sync
|
|
137
162
|
```
|
|
@@ -239,7 +264,7 @@ See `columns://list` resource for the complete list.
|
|
|
239
264
|
|
|
240
265
|
### Setup Development Environment
|
|
241
266
|
```bash
|
|
242
|
-
git clone https://github.com/
|
|
267
|
+
git clone https://github.com/k73a/tradingview-mcp.git
|
|
243
268
|
cd tradingview-mcp
|
|
244
269
|
uv sync --all-extras
|
|
245
270
|
```
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
[](https://badge.fury.io/py/tradingview-mcp)
|
|
4
4
|
[](https://pypi.org/project/tradingview-mcp/)
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
|
-
[](https://github.com/yourusername/tradingview-mcp/actions)
|
|
7
6
|
|
|
8
7
|
A comprehensive Model Context Protocol (MCP) server for TradingView market screening with fully integrated screener functionality. This server provides powerful tools for cryptocurrency and stock market analysis directly through the MCP interface.
|
|
9
8
|
|
|
@@ -22,6 +21,26 @@ Use `uvx` to run directly without installing:
|
|
|
22
21
|
}
|
|
23
22
|
```
|
|
24
23
|
|
|
24
|
+
## 🤖 For AI Agents
|
|
25
|
+
|
|
26
|
+
**📖 Read [AI.md](AI.md) for the complete guide!** You can copy the entire AI.md file to understand all capabilities.
|
|
27
|
+
|
|
28
|
+
**Quick Start:**
|
|
29
|
+
1. Call `get_help()` to understand how to use this MCP
|
|
30
|
+
2. Call `ai_get_reference()` for markets, columns, and filter references
|
|
31
|
+
|
|
32
|
+
Key points:
|
|
33
|
+
- All results include `description` field with full names (e.g., "Apple Inc." not just "AAPL")
|
|
34
|
+
- Use `limit` parameter to control result count (default: 25)
|
|
35
|
+
- Use `search_symbols("apple", "america")` to search by company name
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
# Quick examples:
|
|
39
|
+
get_top_gainers("america", 10) # Top 10 US stock gainers
|
|
40
|
+
search_symbols("tesla", "america") # Search for Tesla
|
|
41
|
+
get_symbol_info("NASDAQ:AAPL") # Apple Inc. details
|
|
42
|
+
```
|
|
43
|
+
|
|
25
44
|
## Features
|
|
26
45
|
|
|
27
46
|
### Core Screener Functionality
|
|
@@ -29,14 +48,21 @@ Use `uvx` to run directly without installing:
|
|
|
29
48
|
- **Multi-Market Support**: 76+ markets including crypto, stocks, forex, futures, and bonds
|
|
30
49
|
- **SQL-like Query Interface**: Build complex queries with filtering, sorting, and pagination
|
|
31
50
|
- **250+ Technical Indicators**: Access a comprehensive set of technical analysis columns
|
|
32
|
-
- **AI-Friendly Design**:
|
|
51
|
+
- **AI-Friendly Design**: Includes `description` (full name), token-saving limits, and help tools
|
|
33
52
|
|
|
34
53
|
### MCP Tools
|
|
35
54
|
|
|
55
|
+
#### 🔍 Discovery & Help Tools (AI Start Here!)
|
|
56
|
+
- `get_help(topic)`: **📖 Required reading!** Get usage guide and examples
|
|
57
|
+
- `search_symbols(query, market)`: 🔍 Search by company name (e.g., "Apple", "Tesla")
|
|
58
|
+
- `get_symbol_info(symbol)`: Get detailed symbol information
|
|
59
|
+
- `ai_get_reference()`: AI quick reference guide
|
|
60
|
+
|
|
36
61
|
#### Screening Tools
|
|
37
62
|
- `screen_market`: Execute custom market screening queries
|
|
38
|
-
- `get_top_gainers`: Find top gaining assets
|
|
39
|
-
- `get_top_losers`: Find top losing assets
|
|
63
|
+
- `get_top_gainers`: Find top gaining assets (includes full company names)
|
|
64
|
+
- `get_top_losers`: Find top losing assets (includes full company names)
|
|
65
|
+
- `get_most_active`: Most traded by volume
|
|
40
66
|
- `get_premarket_movers`: Pre-market gainers, losers, and most active
|
|
41
67
|
- `get_postmarket_movers`: Post-market activity analysis
|
|
42
68
|
- `get_technical_analysis`: Detailed technical analysis for specific symbols
|
|
@@ -48,7 +74,6 @@ Use `uvx` to run directly without installing:
|
|
|
48
74
|
- `advanced_query`: Execute advanced queries with AND/OR logic
|
|
49
75
|
|
|
50
76
|
#### AI-Friendly Reference Tools
|
|
51
|
-
- `ai_get_reference`: **Start here!** Get quick reference guide with markets, columns, filters
|
|
52
77
|
- `search_available_fields`: Search for fields/columns by name or description
|
|
53
78
|
- `get_field_info`: Get display name and type for a specific field
|
|
54
79
|
- `get_code_example`: Get Python code examples for screener types
|
|
@@ -95,7 +120,7 @@ pip install tradingview-mcp
|
|
|
95
120
|
|
|
96
121
|
### From Source
|
|
97
122
|
```bash
|
|
98
|
-
git clone https://github.com/
|
|
123
|
+
git clone https://github.com/k73a/tradingview-mcp.git
|
|
99
124
|
cd tradingview-mcp
|
|
100
125
|
uv sync
|
|
101
126
|
```
|
|
@@ -203,7 +228,7 @@ See `columns://list` resource for the complete list.
|
|
|
203
228
|
|
|
204
229
|
### Setup Development Environment
|
|
205
230
|
```bash
|
|
206
|
-
git clone https://github.com/
|
|
231
|
+
git clone https://github.com/k73a/tradingview-mcp.git
|
|
207
232
|
cd tradingview-mcp
|
|
208
233
|
uv sync --all-extras
|
|
209
234
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "tradingview-mcp"
|
|
3
|
-
version = "
|
|
3
|
+
version = "26.0.0"
|
|
4
4
|
description = "A comprehensive MCP server for TradingView market screening with integrated screener functionality"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -28,11 +28,11 @@ dependencies = [
|
|
|
28
28
|
]
|
|
29
29
|
|
|
30
30
|
[project.urls]
|
|
31
|
-
Homepage = "https://github.com/
|
|
32
|
-
Documentation = "https://github.com/
|
|
33
|
-
Repository = "https://github.com/
|
|
34
|
-
Issues = "https://github.com/
|
|
35
|
-
Changelog = "https://github.com/
|
|
31
|
+
Homepage = "https://github.com/k73a/tradingview-mcp"
|
|
32
|
+
Documentation = "https://github.com/k73a/tradingview-mcp#readme"
|
|
33
|
+
Repository = "https://github.com/k73a/tradingview-mcp"
|
|
34
|
+
Issues = "https://github.com/k73a/tradingview-mcp/issues"
|
|
35
|
+
Changelog = "https://github.com/k73a/tradingview-mcp/blob/main/CHANGELOG.md"
|
|
36
36
|
|
|
37
37
|
[project.optional-dependencies]
|
|
38
38
|
dev = [
|
|
@@ -393,16 +393,18 @@ COLUMNS = {
|
|
|
393
393
|
}
|
|
394
394
|
|
|
395
395
|
# Default columns for different query types
|
|
396
|
-
|
|
396
|
+
# Always include 'description' for full name (e.g., "Apple Inc." instead of just "AAPL")
|
|
397
|
+
DEFAULT_COLUMNS = ["name", "description", "close", "change", "volume", "market_cap_basic"]
|
|
397
398
|
|
|
398
|
-
PREMARKET_COLUMNS = ["name", "close", "volume", "premarket_change", "premarket_change_abs", "premarket_volume"]
|
|
399
|
+
PREMARKET_COLUMNS = ["name", "description", "close", "volume", "premarket_change", "premarket_change_abs", "premarket_volume"]
|
|
399
400
|
|
|
400
|
-
POSTMARKET_COLUMNS = ["name", "close", "volume", "postmarket_change", "postmarket_change_abs", "postmarket_volume"]
|
|
401
|
+
POSTMARKET_COLUMNS = ["name", "description", "close", "volume", "postmarket_change", "postmarket_change_abs", "postmarket_volume"]
|
|
401
402
|
|
|
402
|
-
CRYPTO_COLUMNS = ["name", "
|
|
403
|
+
CRYPTO_COLUMNS = ["name", "description", "close", "change", "volume", "market_cap_basic", "24h_vol|5"]
|
|
403
404
|
|
|
404
405
|
TECHNICAL_COLUMNS = [
|
|
405
406
|
"name",
|
|
407
|
+
"description",
|
|
406
408
|
"close",
|
|
407
409
|
"volume",
|
|
408
410
|
"change",
|
|
@@ -10,7 +10,8 @@ from tradingview_mcp.column import Column
|
|
|
10
10
|
from tradingview_mcp.query import Query
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
# Always include 'description' for full name (e.g., "Apple Inc." instead of just "AAPL")
|
|
14
|
+
DEFAULT_COLUMNS = ["name", "description", "close", "change", "volume", "market_cap_basic"]
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class Scanner:
|
|
@@ -63,13 +63,29 @@ from tradingview_mcp.docs_data import (
|
|
|
63
63
|
# Initialize MCP Server
|
|
64
64
|
mcp = FastMCP(
|
|
65
65
|
name="TradingView Screener MCP",
|
|
66
|
-
instructions=
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
instructions="""TradingView Market Screener MCP - Stocks/Crypto screening tools
|
|
67
|
+
|
|
68
|
+
🚀 Quick start:
|
|
69
|
+
1. Call `get_help()` for the full usage guide
|
|
70
|
+
2. Call `ai_get_reference()` for markets, fields, and filter references
|
|
71
|
+
|
|
72
|
+
📊 Common tools:
|
|
73
|
+
- `screen_market(market, limit)` - Market screening (stocks, crypto, etc.)
|
|
74
|
+
- `get_top_gainers(market, limit)` - Top gainers
|
|
75
|
+
- `get_top_losers(market, limit)` - Top losers
|
|
76
|
+
- `search_symbols(query, market)` - 🔍 Search by name (e.g., "Apple", "Tesla")
|
|
77
|
+
- `get_symbol_info(symbol)` - Get detailed symbol info
|
|
78
|
+
|
|
79
|
+
⚠️ Important notes:
|
|
80
|
+
- `limit` controls result count (default 25, max 500)
|
|
81
|
+
- Results include the `description` field with full names (e.g., "Apple Inc.")
|
|
82
|
+
- `market` examples: america (US stocks), crypto, uk, etc.
|
|
83
|
+
|
|
84
|
+
📖 Resources (read-only):
|
|
85
|
+
- docs://ai-reference - AI quick reference
|
|
86
|
+
- markets://list - All markets
|
|
87
|
+
- columns://list - Available fields
|
|
88
|
+
""",
|
|
73
89
|
)
|
|
74
90
|
|
|
75
91
|
DEBUG_MODE = os.getenv("TRADINGVIEW_MCP_DEBUG", "0").lower() in {"1", "true", "yes"}
|
|
@@ -712,6 +728,265 @@ def get_common_fields_summary(
|
|
|
712
728
|
}
|
|
713
729
|
|
|
714
730
|
|
|
731
|
+
# =============================================================================
|
|
732
|
+
# Help and Discovery Tools - Help AI understand usage
|
|
733
|
+
# =============================================================================
|
|
734
|
+
|
|
735
|
+
|
|
736
|
+
@mcp.tool()
|
|
737
|
+
def get_help(topic: str | None = None) -> dict[str, Any]:
|
|
738
|
+
"""📖 Usage guide - required reading for AI!
|
|
739
|
+
|
|
740
|
+
Args:
|
|
741
|
+
topic: Optional topic: 'markets', 'columns', 'filters', 'examples', 'tools'
|
|
742
|
+
If omitted, returns the full guide
|
|
743
|
+
|
|
744
|
+
Returns:
|
|
745
|
+
Usage guide and examples
|
|
746
|
+
"""
|
|
747
|
+
guide = {
|
|
748
|
+
"overview": {
|
|
749
|
+
"description": "TradingView MCP is a market screener for stocks and crypto",
|
|
750
|
+
"key_points": [
|
|
751
|
+
"All results include the 'description' field (full name like 'Apple Inc.')",
|
|
752
|
+
"Use the limit parameter to control output size (default 25, max 500)",
|
|
753
|
+
"Symbols are returned in ticker format: 'EXCHANGE:SYMBOL' (e.g., 'NASDAQ:AAPL')",
|
|
754
|
+
],
|
|
755
|
+
},
|
|
756
|
+
"quick_start": {
|
|
757
|
+
"step_1": "Call get_top_gainers('america', 10) for top 10 US stock gainers",
|
|
758
|
+
"step_2": "Call search_symbols('apple', 'america') to find symbols by name",
|
|
759
|
+
"step_3": "Call get_symbol_info('NASDAQ:AAPL') for Apple details",
|
|
760
|
+
},
|
|
761
|
+
"markets": {
|
|
762
|
+
"stocks": ["america (US)", "uk (UK)", "germany (DE)", "japan (JP)", "china (CN)", "hongkong (HK)", "taiwan (TW)"],
|
|
763
|
+
"crypto": ["crypto (pairs)", "coin (coins)",],
|
|
764
|
+
"others": ["forex", "futures", "bonds"],
|
|
765
|
+
},
|
|
766
|
+
"common_tools": {
|
|
767
|
+
"screen_market": "Custom screening - screen_market(market='america', limit=50, sort_by='volume')",
|
|
768
|
+
"get_top_gainers": "Top gainers - get_top_gainers(market='crypto', limit=25)",
|
|
769
|
+
"get_top_losers": "Top losers - get_top_losers(market='america', limit=25)",
|
|
770
|
+
"search_symbols": "🔍 Name search - search_symbols(query='tesla', market='america')",
|
|
771
|
+
"get_symbol_info": "Symbol info - get_symbol_info(symbol='NASDAQ:AAPL')",
|
|
772
|
+
"get_technical_analysis": "Technical analysis - get_technical_analysis(symbol='NASDAQ:AAPL')",
|
|
773
|
+
},
|
|
774
|
+
"important_columns": {
|
|
775
|
+
"name": "Ticker (e.g., 'NASDAQ:AAPL')",
|
|
776
|
+
"description": "Full name (e.g., 'Apple Inc.')",
|
|
777
|
+
"close": "Close/last price",
|
|
778
|
+
"change": "Change (%)",
|
|
779
|
+
"volume": "Volume",
|
|
780
|
+
"market_cap_basic": "Market cap",
|
|
781
|
+
},
|
|
782
|
+
"filters_example": {
|
|
783
|
+
"description": "Use filters to apply conditions",
|
|
784
|
+
"example": [
|
|
785
|
+
{"column": "change", "operation": "gt", "value": 5},
|
|
786
|
+
{"column": "volume", "operation": "gt", "value": 1000000},
|
|
787
|
+
],
|
|
788
|
+
"operations": ["gt (>)", "gte (>=)", "lt (<)", "lte (<=)", "eq (=)", "neq (!=)", "between", "isin"],
|
|
789
|
+
},
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
if topic:
|
|
793
|
+
topic_lower = topic.lower()
|
|
794
|
+
if topic_lower in guide:
|
|
795
|
+
return {"topic": topic, "content": guide[topic_lower]}
|
|
796
|
+
if topic_lower == "tools":
|
|
797
|
+
return {"topic": "tools", "content": guide["common_tools"]}
|
|
798
|
+
if topic_lower == "examples":
|
|
799
|
+
return {"topic": "examples", "content": guide["quick_start"]}
|
|
800
|
+
return {
|
|
801
|
+
"error": f"Topic '{topic}' not found",
|
|
802
|
+
"available_topics": list(guide.keys()) + ["tools", "examples"],
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
return guide
|
|
806
|
+
|
|
807
|
+
|
|
808
|
+
@mcp.tool()
|
|
809
|
+
def search_symbols(
|
|
810
|
+
query: str,
|
|
811
|
+
market: str = "america",
|
|
812
|
+
limit: int = 25,
|
|
813
|
+
) -> dict[str, Any]:
|
|
814
|
+
"""🔍 Search symbols by name (fuzzy search)
|
|
815
|
+
|
|
816
|
+
Supports company names or tickers, e.g., "Apple", "Tesla", "Microsoft".
|
|
817
|
+
|
|
818
|
+
Args:
|
|
819
|
+
query: Search keyword (company name or ticker)
|
|
820
|
+
market: Market (america, crypto, uk, etc.)
|
|
821
|
+
limit: Max results (default 25, max 100)
|
|
822
|
+
|
|
823
|
+
Returns:
|
|
824
|
+
Matching symbols with full names
|
|
825
|
+
|
|
826
|
+
Examples:
|
|
827
|
+
search_symbols("apple", "america") -> Apple Inc., Applebee's, etc.
|
|
828
|
+
search_symbols("BTC", "crypto") -> BTC pairs
|
|
829
|
+
"""
|
|
830
|
+
market = sanitize_market(market)
|
|
831
|
+
limit = max(1, min(limit, 100))
|
|
832
|
+
|
|
833
|
+
# Search fields: name (ticker) and description (full name)
|
|
834
|
+
cols = ["name", "description", "close", "change", "volume", "market_cap_basic", "type", "exchange"]
|
|
835
|
+
|
|
836
|
+
try:
|
|
837
|
+
# Use TradingView text search
|
|
838
|
+
# Search description (company name)
|
|
839
|
+
query_obj = (
|
|
840
|
+
Query()
|
|
841
|
+
.set_markets(market)
|
|
842
|
+
.select(*cols)
|
|
843
|
+
.where(Column("description").like(query))
|
|
844
|
+
.order_by("market_cap_basic", ascending=False)
|
|
845
|
+
.limit(limit)
|
|
846
|
+
)
|
|
847
|
+
|
|
848
|
+
total, df = query_obj.get_scanner_data()
|
|
849
|
+
results = df.to_dict("records")
|
|
850
|
+
|
|
851
|
+
# If nothing found, try searching the name (ticker) field
|
|
852
|
+
if not results:
|
|
853
|
+
query_obj2 = (
|
|
854
|
+
Query()
|
|
855
|
+
.set_markets(market)
|
|
856
|
+
.select(*cols)
|
|
857
|
+
.where(Column("name").like(query))
|
|
858
|
+
.order_by("market_cap_basic", ascending=False)
|
|
859
|
+
.limit(limit)
|
|
860
|
+
)
|
|
861
|
+
total, df = query_obj2.get_scanner_data()
|
|
862
|
+
results = df.to_dict("records")
|
|
863
|
+
|
|
864
|
+
return {
|
|
865
|
+
"query": query,
|
|
866
|
+
"market": market,
|
|
867
|
+
"total_found": total,
|
|
868
|
+
"returned": len(results),
|
|
869
|
+
"results": results,
|
|
870
|
+
"hint": "Use 'name' field as symbol for other tools (e.g., get_symbol_info)" if results else "No matches found. Try different keywords.",
|
|
871
|
+
}
|
|
872
|
+
except Exception as e:
|
|
873
|
+
# If LIKE isn't supported, use fallback
|
|
874
|
+
return _search_symbols_fallback(query, market, limit, cols, str(e))
|
|
875
|
+
|
|
876
|
+
|
|
877
|
+
def _search_symbols_fallback(
|
|
878
|
+
query: str, market: str, limit: int, cols: list[str], original_error: str
|
|
879
|
+
) -> dict[str, Any]:
|
|
880
|
+
"""Fallback search when LIKE is not supported."""
|
|
881
|
+
try:
|
|
882
|
+
# Fetch more data and filter locally
|
|
883
|
+
query_obj = (
|
|
884
|
+
Query()
|
|
885
|
+
.set_markets(market)
|
|
886
|
+
.select(*cols)
|
|
887
|
+
.order_by("market_cap_basic", ascending=False)
|
|
888
|
+
.limit(500) # Fetch top 500
|
|
889
|
+
)
|
|
890
|
+
|
|
891
|
+
total, df = query_obj.get_scanner_data()
|
|
892
|
+
|
|
893
|
+
# Local filter
|
|
894
|
+
query_lower = query.lower()
|
|
895
|
+
filtered = df[
|
|
896
|
+
df["name"].str.lower().str.contains(query_lower, na=False) |
|
|
897
|
+
df["description"].str.lower().str.contains(query_lower, na=False)
|
|
898
|
+
].head(limit)
|
|
899
|
+
|
|
900
|
+
results = filtered.to_dict("records")
|
|
901
|
+
|
|
902
|
+
return {
|
|
903
|
+
"query": query,
|
|
904
|
+
"market": market,
|
|
905
|
+
"total_found": len(results),
|
|
906
|
+
"returned": len(results),
|
|
907
|
+
"results": results,
|
|
908
|
+
"note": "Results from local filtering of top 500 by market cap",
|
|
909
|
+
"hint": "Use 'name' field as symbol for other tools" if results else "No matches found",
|
|
910
|
+
}
|
|
911
|
+
except Exception as e:
|
|
912
|
+
return {
|
|
913
|
+
"error": f"Search failed: {str(e)}",
|
|
914
|
+
"original_error": original_error,
|
|
915
|
+
"hint": "Try using screen_market with specific filters instead",
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
|
|
919
|
+
@mcp.tool()
|
|
920
|
+
def get_symbol_info(
|
|
921
|
+
symbol: str,
|
|
922
|
+
include_technical: bool = False,
|
|
923
|
+
) -> dict[str, Any]:
|
|
924
|
+
"""Get detailed information for a symbol.
|
|
925
|
+
|
|
926
|
+
Args:
|
|
927
|
+
symbol: Ticker in 'EXCHANGE:SYMBOL' format (e.g., 'NASDAQ:AAPL')
|
|
928
|
+
or just a ticker (e.g., 'AAPL', auto-search)
|
|
929
|
+
include_technical: Whether to include technical indicators
|
|
930
|
+
|
|
931
|
+
Returns:
|
|
932
|
+
Detailed symbol info including name, price, market cap, etc.
|
|
933
|
+
|
|
934
|
+
Examples:
|
|
935
|
+
get_symbol_info("NASDAQ:AAPL") -> Apple Inc. details
|
|
936
|
+
get_symbol_info("AAPL") -> auto-search
|
|
937
|
+
"""
|
|
938
|
+
cols = [
|
|
939
|
+
"name", "description", "close", "open", "high", "low",
|
|
940
|
+
"change", "change_abs", "volume", "market_cap_basic",
|
|
941
|
+
"price_earnings_ttm", "earnings_per_share_basic_ttm",
|
|
942
|
+
"dividend_yield_recent", "sector", "industry", "exchange", "type",
|
|
943
|
+
]
|
|
944
|
+
|
|
945
|
+
if include_technical:
|
|
946
|
+
cols.extend([
|
|
947
|
+
"RSI", "RSI7", "MACD.macd", "MACD.signal",
|
|
948
|
+
"SMA20", "SMA50", "SMA200", "EMA20", "EMA50", "EMA200",
|
|
949
|
+
"BB.upper", "BB.lower", "ATR", "ADX",
|
|
950
|
+
"Recommend.All", "Recommend.MA", "Recommend.Other",
|
|
951
|
+
])
|
|
952
|
+
|
|
953
|
+
try:
|
|
954
|
+
# Determine market
|
|
955
|
+
if ":" in symbol:
|
|
956
|
+
exchange, ticker = symbol.split(":", 1)
|
|
957
|
+
market = EXCHANGE_SCREENER.get(exchange.lower(), "america")
|
|
958
|
+
else:
|
|
959
|
+
ticker = symbol
|
|
960
|
+
market = "america"
|
|
961
|
+
|
|
962
|
+
query = (
|
|
963
|
+
Query()
|
|
964
|
+
.set_markets(market)
|
|
965
|
+
.select(*cols)
|
|
966
|
+
.where(Column("name").isin([symbol, ticker, symbol.upper(), ticker.upper()]))
|
|
967
|
+
.limit(5)
|
|
968
|
+
)
|
|
969
|
+
|
|
970
|
+
total, df = query.get_scanner_data()
|
|
971
|
+
|
|
972
|
+
if df.empty:
|
|
973
|
+
# Fallback to search
|
|
974
|
+
return search_symbols(ticker, market, 5)
|
|
975
|
+
|
|
976
|
+
results = df.to_dict("records")
|
|
977
|
+
|
|
978
|
+
if len(results) == 1:
|
|
979
|
+
return {"symbol": symbol, "found": True, "data": results[0]}
|
|
980
|
+
else:
|
|
981
|
+
return {"symbol": symbol, "found": True, "matches": results}
|
|
982
|
+
|
|
983
|
+
except Exception as e:
|
|
984
|
+
return {
|
|
985
|
+
"error": f"Failed to get symbol info: {str(e)}",
|
|
986
|
+
"hint": "Try using search_symbols to find the correct symbol format",
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
|
|
715
990
|
# =============================================================================
|
|
716
991
|
# MCP Tools - Basic Screening
|
|
717
992
|
# =============================================================================
|
|
@@ -723,27 +998,33 @@ def screen_market(
|
|
|
723
998
|
columns: Optional[list[str]] = None,
|
|
724
999
|
sort_by: str = "volume",
|
|
725
1000
|
ascending: bool = False,
|
|
726
|
-
limit: int =
|
|
1001
|
+
limit: int = 25,
|
|
727
1002
|
filters: Optional[list[dict[str, Any]]] = None,
|
|
728
|
-
) ->
|
|
729
|
-
"""
|
|
730
|
-
|
|
1003
|
+
) -> dict[str, Any]:
|
|
1004
|
+
"""Run a custom market screening query.
|
|
1005
|
+
|
|
1006
|
+
⚠️ Note: Default returns 25 rows. Increase `limit` for more.
|
|
731
1007
|
|
|
732
1008
|
Args:
|
|
733
|
-
market: Market
|
|
734
|
-
columns: Columns to return (default
|
|
735
|
-
sort_by:
|
|
736
|
-
ascending: Sort order (True=
|
|
737
|
-
limit:
|
|
738
|
-
filters:
|
|
739
|
-
|
|
1009
|
+
market: Market (america=US stocks, crypto, uk, etc.)
|
|
1010
|
+
columns: Columns to return (default includes name, description, close, change, volume, market_cap)
|
|
1011
|
+
sort_by: Sort column
|
|
1012
|
+
ascending: Sort order (True=asc, False=desc)
|
|
1013
|
+
limit: Max results (1-500, default 25)
|
|
1014
|
+
filters: Filter list, e.g. [{"column": "change", "operation": "gt", "value": 5}]
|
|
1015
|
+
Supported ops: gt, gte, lt, lte, eq, neq, between, isin
|
|
740
1016
|
|
|
741
1017
|
Returns:
|
|
742
|
-
|
|
1018
|
+
Dict with total_count, returned, data.
|
|
1019
|
+
Each row includes description (full name like "Apple Inc.").
|
|
743
1020
|
"""
|
|
744
1021
|
market = sanitize_market(market)
|
|
745
1022
|
limit = max(1, min(limit, 500))
|
|
1023
|
+
|
|
1024
|
+
# Ensure description is always included
|
|
746
1025
|
cols = columns or DEFAULT_COLUMNS
|
|
1026
|
+
if "description" not in cols:
|
|
1027
|
+
cols = ["description"] + list(cols)
|
|
747
1028
|
|
|
748
1029
|
query = Query().set_markets(market).select(*cols).order_by(sort_by, ascending=ascending).limit(limit)
|
|
749
1030
|
|
|
@@ -779,27 +1060,38 @@ def screen_market(
|
|
|
779
1060
|
total_count, df = query.get_scanner_data()
|
|
780
1061
|
results = df.to_dict("records")
|
|
781
1062
|
|
|
782
|
-
return
|
|
1063
|
+
return {
|
|
1064
|
+
"total_count": total_count,
|
|
1065
|
+
"returned": len(results),
|
|
1066
|
+
"market": market,
|
|
1067
|
+
"data": results,
|
|
1068
|
+
}
|
|
783
1069
|
except Exception as e:
|
|
784
|
-
return
|
|
1070
|
+
return {"error": str(e), "market": market}
|
|
785
1071
|
|
|
786
1072
|
|
|
787
1073
|
@mcp.tool()
|
|
788
|
-
def get_top_gainers(market: str = "america", limit: int = 25) ->
|
|
789
|
-
"""
|
|
790
|
-
|
|
1074
|
+
def get_top_gainers(market: str = "america", limit: int = 25) -> dict[str, Any]:
|
|
1075
|
+
"""Get top gainers for a market.
|
|
1076
|
+
|
|
1077
|
+
⚠️ Note: Default returns 25 rows. Increase `limit` for more.
|
|
791
1078
|
|
|
792
1079
|
Args:
|
|
793
|
-
market: Market
|
|
794
|
-
limit:
|
|
1080
|
+
market: Market (america=US stocks, crypto, uk, etc.)
|
|
1081
|
+
limit: Result count (1-100, default 25)
|
|
795
1082
|
|
|
796
1083
|
Returns:
|
|
797
|
-
|
|
1084
|
+
Top gainers with description (full name).
|
|
1085
|
+
|
|
1086
|
+
Example:
|
|
1087
|
+
get_top_gainers("america", 10) -> Top 10 US gainers
|
|
1088
|
+
get_top_gainers("crypto", 25) -> Top 25 crypto gainers
|
|
798
1089
|
"""
|
|
799
1090
|
market = sanitize_market(market)
|
|
800
1091
|
limit = max(1, min(limit, 100))
|
|
801
1092
|
|
|
802
|
-
|
|
1093
|
+
# Ensure description is included
|
|
1094
|
+
cols = ["name", "description", "close", "change", "change_abs", "volume", "market_cap_basic"]
|
|
803
1095
|
|
|
804
1096
|
query = (
|
|
805
1097
|
Query()
|
|
@@ -812,27 +1104,39 @@ def get_top_gainers(market: str = "america", limit: int = 25) -> list[dict[str,
|
|
|
812
1104
|
|
|
813
1105
|
try:
|
|
814
1106
|
total, df = query.get_scanner_data()
|
|
815
|
-
|
|
1107
|
+
results = df.to_dict("records")
|
|
1108
|
+
return {
|
|
1109
|
+
"market": market,
|
|
1110
|
+
"type": "top_gainers",
|
|
1111
|
+
"total_found": total,
|
|
1112
|
+
"returned": len(results),
|
|
1113
|
+
"data": results,
|
|
1114
|
+
}
|
|
816
1115
|
except Exception as e:
|
|
817
|
-
return
|
|
1116
|
+
return {"error": str(e), "market": market}
|
|
818
1117
|
|
|
819
1118
|
|
|
820
1119
|
@mcp.tool()
|
|
821
|
-
def get_top_losers(market: str = "america", limit: int = 25) ->
|
|
822
|
-
"""
|
|
823
|
-
|
|
1120
|
+
def get_top_losers(market: str = "america", limit: int = 25) -> dict[str, Any]:
|
|
1121
|
+
"""Get top losers for a market.
|
|
1122
|
+
|
|
1123
|
+
⚠️ Note: Default returns 25 rows. Increase `limit` for more.
|
|
824
1124
|
|
|
825
1125
|
Args:
|
|
826
|
-
market: Market
|
|
827
|
-
limit:
|
|
1126
|
+
market: Market (america=US stocks, crypto, uk, etc.)
|
|
1127
|
+
limit: Result count (1-100, default 25)
|
|
828
1128
|
|
|
829
1129
|
Returns:
|
|
830
|
-
|
|
1130
|
+
Top losers with description (full name).
|
|
1131
|
+
|
|
1132
|
+
Example:
|
|
1133
|
+
get_top_losers("america", 10) -> Top 10 US losers
|
|
831
1134
|
"""
|
|
832
1135
|
market = sanitize_market(market)
|
|
833
1136
|
limit = max(1, min(limit, 100))
|
|
834
1137
|
|
|
835
|
-
|
|
1138
|
+
# Ensure description is included
|
|
1139
|
+
cols = ["name", "description", "close", "change", "change_abs", "volume", "market_cap_basic"]
|
|
836
1140
|
|
|
837
1141
|
query = (
|
|
838
1142
|
Query()
|
|
@@ -845,47 +1149,61 @@ def get_top_losers(market: str = "america", limit: int = 25) -> list[dict[str, A
|
|
|
845
1149
|
|
|
846
1150
|
try:
|
|
847
1151
|
total, df = query.get_scanner_data()
|
|
848
|
-
|
|
1152
|
+
results = df.to_dict("records")
|
|
1153
|
+
return {
|
|
1154
|
+
"market": market,
|
|
1155
|
+
"type": "top_losers",
|
|
1156
|
+
"total_found": total,
|
|
1157
|
+
"returned": len(results),
|
|
1158
|
+
"data": results,
|
|
1159
|
+
}
|
|
849
1160
|
except Exception as e:
|
|
850
|
-
return
|
|
1161
|
+
return {"error": str(e), "market": market}
|
|
851
1162
|
|
|
852
1163
|
|
|
853
1164
|
@mcp.tool()
|
|
854
|
-
def get_most_active(market: str = "america", limit: int = 25) ->
|
|
855
|
-
"""
|
|
856
|
-
|
|
1165
|
+
def get_most_active(market: str = "america", limit: int = 25) -> dict[str, Any]:
|
|
1166
|
+
"""Get most active by volume.
|
|
1167
|
+
|
|
1168
|
+
⚠️ Note: Default returns 25 rows.
|
|
857
1169
|
|
|
858
1170
|
Args:
|
|
859
|
-
market: Market
|
|
860
|
-
limit:
|
|
1171
|
+
market: Market
|
|
1172
|
+
limit: Result count (1-100)
|
|
861
1173
|
|
|
862
1174
|
Returns:
|
|
863
|
-
|
|
1175
|
+
Most active list with description (full name)
|
|
864
1176
|
"""
|
|
865
1177
|
market = sanitize_market(market)
|
|
866
1178
|
limit = max(1, min(limit, 100))
|
|
867
1179
|
|
|
868
|
-
cols = ["name", "
|
|
1180
|
+
cols = ["name", "description", "close", "change", "volume", "relative_volume_10d_calc", "market_cap_basic"]
|
|
869
1181
|
|
|
870
1182
|
query = Query().set_markets(market).select(*cols).order_by("volume", ascending=False).limit(limit)
|
|
871
1183
|
|
|
872
1184
|
try:
|
|
873
1185
|
total, df = query.get_scanner_data()
|
|
874
|
-
|
|
1186
|
+
results = df.to_dict("records")
|
|
1187
|
+
return {
|
|
1188
|
+
"market": market,
|
|
1189
|
+
"type": "most_active",
|
|
1190
|
+
"total_found": total,
|
|
1191
|
+
"returned": len(results),
|
|
1192
|
+
"data": results,
|
|
1193
|
+
}
|
|
875
1194
|
except Exception as e:
|
|
876
|
-
return
|
|
1195
|
+
return {"error": str(e), "market": market}
|
|
877
1196
|
|
|
878
1197
|
|
|
879
1198
|
@mcp.tool()
|
|
880
1199
|
def get_premarket_movers(
|
|
881
1200
|
scan_type: str = "gainers", limit: int = 25
|
|
882
|
-
) ->
|
|
883
|
-
"""
|
|
884
|
-
Get pre-market movers (US market only).
|
|
1201
|
+
) -> dict[str, Any]:
|
|
1202
|
+
"""Get pre-market movers (US only).
|
|
885
1203
|
|
|
886
1204
|
Args:
|
|
887
|
-
scan_type:
|
|
888
|
-
limit:
|
|
1205
|
+
scan_type: 'gainers', 'losers', 'most_active', 'gappers'
|
|
1206
|
+
limit: Result count (1-100)
|
|
889
1207
|
|
|
890
1208
|
Returns:
|
|
891
1209
|
List of pre-market movers
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/column_display_names.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/extracted/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/bond.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/bonds.json
RENAMED
|
File without changes
|
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/coin.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/crypto.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/economics2.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/forex.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/futures.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/ireland.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/options.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/metainfo/stocks.json
RENAMED
|
File without changes
|
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/screeners/markets.json
RENAMED
|
File without changes
|
{tradingview_mcp-1.1.0 → tradingview_mcp-26.0.0}/src/tradingview_mcp/data/screeners/stocks.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|