vn6295337 Claude Opus 4.5 commited on
Commit
26c5c2f
·
1 Parent(s): 210e257

Add schema normalizers for MCP output consistency

Browse files

- Add _normalize_fundamentals(), _normalize_valuation(), _normalize_volatility(), _normalize_macro()
- Flatten sources wrapper to top-level keys (sec_edgar, yahoo_finance, etc.)
- Rename financials to fundamentals for consistency across codebase
- Add docs: metrics_schema_emitted.md, schema_normalization.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitignore +8 -0
  2. .obsidian/app.json +3 -0
  3. .obsidian/appearance.json +3 -0
  4. .obsidian/core-plugins.json +33 -0
  5. .obsidian/workspace.json +224 -0
  6. AAPL_data.txt +168 -0
  7. configs/__init__.py +2 -0
  8. configs/company_name_filters.py +65 -0
  9. configs/output_schemas.py +48 -0
  10. docs/SEC_EDGAR_data_schema.md +64 -0
  11. docs/alphavantage_data_schema.md +77 -0
  12. docs/bea_data_schema.md +73 -0
  13. docs/bls_data_schema.md +98 -0
  14. docs/data_flow.md +141 -0
  15. docs/finnhub_data_schema.md +37 -0
  16. docs/fred_data_schema.md +110 -0
  17. docs/fundamentals_data_schema.md +42 -0
  18. docs/macro_data_schema.md +22 -0
  19. docs/mcp_data_sources.md +172 -0
  20. docs/mcp_normalized_schemas.md +30 -0
  21. docs/mcp_output_sample.md +246 -0
  22. docs/mcp_output_visa.md +91 -0
  23. docs/mcp_raw_visa.json +939 -0
  24. docs/mcp_raw_visa.md +962 -0
  25. docs/mcp_raw_visa_test.json +1368 -0
  26. docs/mcp_test_report_BAC.md +69 -0
  27. docs/mcp_test_report_KO.md +69 -0
  28. docs/metrics_schema_emitted.md +236 -0
  29. docs/metrics_schema_human_readable.md +180 -0
  30. docs/newsapi_data_schema.md +41 -0
  31. docs/nyt_data_schema.md +40 -0
  32. docs/reddit_data_schema.md +39 -0
  33. docs/schema_normalization.md +54 -0
  34. docs/tavily_data_schema.md +40 -0
  35. docs/vader_data_schema.md +39 -0
  36. docs/valuation_data_schema.md +31 -0
  37. docs/volatility_data_schema.md +15 -0
  38. docs/yahoo_data_schema.md +87 -0
  39. docs/yahoo_options_data_schema.md +96 -0
  40. mcp-servers/{financials-basket → fundamentals-basket}/README.md +4 -4
  41. mcp-servers/fundamentals-basket/config.py +143 -0
  42. mcp-servers/{financials-basket → fundamentals-basket}/fetchers.py +9 -8
  43. mcp-servers/fundamentals-basket/http_server.py +249 -0
  44. mcp-servers/{financials-basket → fundamentals-basket}/mcp_sec_edgar.md +0 -0
  45. mcp-servers/fundamentals-basket/models/__init__.py +41 -0
  46. mcp-servers/fundamentals-basket/models/errors.py +150 -0
  47. mcp-servers/fundamentals-basket/models/schemas.py +248 -0
  48. mcp-servers/fundamentals-basket/nginx.conf +140 -0
  49. mcp-servers/{financials-basket → fundamentals-basket}/requirements.txt +0 -0
  50. mcp-servers/fundamentals-basket/server.py +570 -0
.gitignore CHANGED
@@ -25,3 +25,11 @@ deploy.sh
25
  # Cache
26
  .cache/
27
  *.cache
 
 
 
 
 
 
 
 
 
25
  # Cache
26
  .cache/
27
  *.cache
28
+ .venv*
29
+ .obsidian/
30
+ *.pyc
31
+ __pycache__/
32
+ .env
33
+ reports/
34
+ AAP*_data.txt
35
+ .venv-sentiment/
.obsidian/app.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "promptDelete": false
3
+ }
.obsidian/appearance.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "theme": "obsidian"
3
+ }
.obsidian/core-plugins.json ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "file-explorer": true,
3
+ "global-search": true,
4
+ "switcher": true,
5
+ "graph": true,
6
+ "backlink": true,
7
+ "canvas": true,
8
+ "outgoing-link": true,
9
+ "tag-pane": true,
10
+ "footnotes": false,
11
+ "properties": true,
12
+ "page-preview": true,
13
+ "daily-notes": true,
14
+ "templates": true,
15
+ "note-composer": true,
16
+ "command-palette": true,
17
+ "slash-command": false,
18
+ "editor-status": true,
19
+ "bookmarks": true,
20
+ "markdown-importer": false,
21
+ "zk-prefixer": false,
22
+ "random-note": false,
23
+ "outline": true,
24
+ "word-count": true,
25
+ "slides": false,
26
+ "audio-recorder": false,
27
+ "workspaces": false,
28
+ "file-recovery": true,
29
+ "publish": false,
30
+ "sync": true,
31
+ "bases": true,
32
+ "webviewer": false
33
+ }
.obsidian/workspace.json ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "main": {
3
+ "id": "5ba76909b4eb5568",
4
+ "type": "split",
5
+ "children": [
6
+ {
7
+ "id": "3ae386f0468a33a2",
8
+ "type": "tabs",
9
+ "children": [
10
+ {
11
+ "id": "369b0d31e1527f56",
12
+ "type": "leaf",
13
+ "state": {
14
+ "type": "markdown",
15
+ "state": {
16
+ "file": "docs/mcp_raw_visa.md",
17
+ "mode": "source",
18
+ "source": false
19
+ },
20
+ "icon": "lucide-file",
21
+ "title": "mcp_raw_visa"
22
+ }
23
+ }
24
+ ]
25
+ }
26
+ ],
27
+ "direction": "vertical"
28
+ },
29
+ "left": {
30
+ "id": "b2599d2c6c63c05b",
31
+ "type": "split",
32
+ "children": [
33
+ {
34
+ "id": "546864a95c63f5d3",
35
+ "type": "tabs",
36
+ "children": [
37
+ {
38
+ "id": "84981946f0bd4dc4",
39
+ "type": "leaf",
40
+ "state": {
41
+ "type": "file-explorer",
42
+ "state": {
43
+ "sortOrder": "byModifiedTime",
44
+ "autoReveal": false
45
+ },
46
+ "icon": "lucide-folder-closed",
47
+ "title": "Files"
48
+ }
49
+ },
50
+ {
51
+ "id": "713d96cfe76a5528",
52
+ "type": "leaf",
53
+ "state": {
54
+ "type": "search",
55
+ "state": {
56
+ "query": "",
57
+ "matchingCase": false,
58
+ "explainSearch": false,
59
+ "collapseAll": false,
60
+ "extraContext": false,
61
+ "sortOrder": "alphabetical"
62
+ },
63
+ "icon": "lucide-search",
64
+ "title": "Search"
65
+ }
66
+ },
67
+ {
68
+ "id": "aa54f7dbd5c02255",
69
+ "type": "leaf",
70
+ "state": {
71
+ "type": "bookmarks",
72
+ "state": {},
73
+ "icon": "lucide-bookmark",
74
+ "title": "Bookmarks"
75
+ }
76
+ }
77
+ ]
78
+ }
79
+ ],
80
+ "direction": "horizontal",
81
+ "width": 249.5
82
+ },
83
+ "right": {
84
+ "id": "9564af0c9ac372a6",
85
+ "type": "split",
86
+ "children": [
87
+ {
88
+ "id": "5a247df6660da061",
89
+ "type": "tabs",
90
+ "children": [
91
+ {
92
+ "id": "9203f35f45682bb1",
93
+ "type": "leaf",
94
+ "state": {
95
+ "type": "backlink",
96
+ "state": {
97
+ "file": "docs/mcp_data_sources.md",
98
+ "collapseAll": false,
99
+ "extraContext": false,
100
+ "sortOrder": "alphabetical",
101
+ "showSearch": false,
102
+ "searchQuery": "",
103
+ "backlinkCollapsed": false,
104
+ "unlinkedCollapsed": true
105
+ },
106
+ "icon": "links-coming-in",
107
+ "title": "Backlinks for mcp_data_sources"
108
+ }
109
+ },
110
+ {
111
+ "id": "0da6d740aca962b3",
112
+ "type": "leaf",
113
+ "state": {
114
+ "type": "outgoing-link",
115
+ "state": {
116
+ "file": "docs/mcp_data_sources.md",
117
+ "linksCollapsed": false,
118
+ "unlinkedCollapsed": true
119
+ },
120
+ "icon": "links-going-out",
121
+ "title": "Outgoing links from mcp_data_sources"
122
+ }
123
+ },
124
+ {
125
+ "id": "028acb36fb7ac837",
126
+ "type": "leaf",
127
+ "state": {
128
+ "type": "tag",
129
+ "state": {
130
+ "sortOrder": "frequency",
131
+ "useHierarchy": true,
132
+ "showSearch": false,
133
+ "searchQuery": ""
134
+ },
135
+ "icon": "lucide-tags",
136
+ "title": "Tags"
137
+ }
138
+ },
139
+ {
140
+ "id": "e2d887d8aa7fda47",
141
+ "type": "leaf",
142
+ "state": {
143
+ "type": "all-properties",
144
+ "state": {
145
+ "sortOrder": "frequency",
146
+ "showSearch": false,
147
+ "searchQuery": ""
148
+ },
149
+ "icon": "lucide-archive",
150
+ "title": "All properties"
151
+ }
152
+ },
153
+ {
154
+ "id": "3270af983d2799b6",
155
+ "type": "leaf",
156
+ "state": {
157
+ "type": "outline",
158
+ "state": {
159
+ "file": "docs/mcp_data_sources.md",
160
+ "followCursor": false,
161
+ "showSearch": false,
162
+ "searchQuery": ""
163
+ },
164
+ "icon": "lucide-list",
165
+ "title": "Outline of mcp_data_sources"
166
+ }
167
+ }
168
+ ]
169
+ }
170
+ ],
171
+ "direction": "horizontal",
172
+ "width": 300,
173
+ "collapsed": true
174
+ },
175
+ "left-ribbon": {
176
+ "hiddenItems": {
177
+ "switcher:Open quick switcher": false,
178
+ "graph:Open graph view": false,
179
+ "canvas:Create new canvas": false,
180
+ "daily-notes:Open today's daily note": false,
181
+ "templates:Insert template": false,
182
+ "command-palette:Open command palette": false,
183
+ "bases:Create new base": false
184
+ }
185
+ },
186
+ "active": "369b0d31e1527f56",
187
+ "lastOpenFiles": [
188
+ "docs/mcp_test_report_KO.md",
189
+ "docs/metrics_schema_human_readable.md",
190
+ "docs/metrics_schema_emitted.md",
191
+ "docs/schema_normalization.md",
192
+ "mcp_client.py.tmp.1610.1768140230378",
193
+ "mcp_client.py.tmp.1610.1768140224277",
194
+ "mcp_client.py.tmp.1610.1768140212665",
195
+ "mcp_client.py.tmp.1610.1768140199252",
196
+ "mcp_client.py.tmp.1610.1768140165633",
197
+ "mcp_client.py.tmp.1610.1768140149514",
198
+ "mcp_client.py.tmp.1610.1768140127411",
199
+ "mcp_client.py.tmp.1610.1768140120176",
200
+ "mcp_client.py.tmp.1610.1768140113269",
201
+ "mcp_client.py.tmp.1610.1768139353083",
202
+ "docs/mcp_raw_visa.md",
203
+ "docs/alphavantage_data_schema.md",
204
+ "docs/mcp_data_sources.md",
205
+ "docs/mcp_normalized_schemas.md",
206
+ "docs/universal_metrics_schema.md",
207
+ "docs/mcp_test_report_BAC.md",
208
+ "docs/mcp_output_visa.md",
209
+ "docs/mcp_output_citigroup.md",
210
+ "docs/data_flow.md",
211
+ "docs/volatility_data_schema.md",
212
+ "docs/SEC_EDGAR_data_schema.md",
213
+ "docs/tavily_data_schema.md",
214
+ "docs/vader_data_schema.md",
215
+ "docs/reddit_data_schema.md",
216
+ "docs/finnhub_data_schema.md",
217
+ "docs/yahoo_options_data_schema.md",
218
+ "docs/yahoo_data_schema.md",
219
+ "docs/mcp_output_sample.md",
220
+ "docs/fundamentals_data_schema.md",
221
+ "docs/valuation_data_schema.md",
222
+ "mcp-servers/fundamentals-basket/mcp_sec_edgar.md"
223
+ ]
224
+ }
AAPL_data.txt ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ==========================================================================================
2
+ FINANCIALS - SEC EDGAR + Yahoo Finance
3
+ ==========================================================================================
4
+ +----------------------+--------------+--------------+------+
5
+ | Metric | Value | Source | Form |
6
+ +----------------------+--------------+--------------+------+
7
+ | revenue | 265595000000 | SEC (FY2018) | 10-K |
8
+ | net_income | 112010000000 | SEC (FY2025) | 10-K |
9
+ | gross_profit | 195201000000 | SEC (FY2025) | 10-K |
10
+ | operating_income | 133050000000 | SEC (FY2025) | 10-K |
11
+ | gross_margin_pct | 73.5000 | SEC (FY2018) | 10-K |
12
+ | operating_margin_pct | 50.1000 | SEC (FY2018) | 10-K |
13
+ | net_margin_pct | 42.1700 | SEC (FY2018) | 10-K |
14
+ | total_assets | 359241000000 | SEC (FY2025) | 10-K |
15
+ | total_liabilities | 285508000000 | SEC (FY2025) | 10-K |
16
+ | stockholders_equity | 73733000000 | SEC (FY2025) | 10-K |
17
+ | long_term_debt | 90678000000 | SEC (FY2025) | 10-K |
18
+ | total_debt | 90678000000 | SEC (FY2025) | 10-K |
19
+ | cash | 35934000000 | SEC (FY2025) | 10-K |
20
+ | net_debt | 54744000000 | SEC (FY2025) | 10-K |
21
+ | debt_to_equity | 1.2300 | SEC (FY2025) | 10-K |
22
+ | operating_cash_flow | 111482000000 | SEC (FY2025) | 10-K |
23
+ | capital_expenditure | 12715000000 | SEC (FY2025) | 10-K |
24
+ | free_cash_flow | 98767000000 | SEC (FY2025) | 10-K |
25
+ | rd_expense | 34550000000 | SEC (FY2025) | 10-K |
26
+ +----------------------+--------------+--------------+------+
27
+
28
+ Fetching valuation...
29
+
30
+ ==========================================================================================
31
+ VALUATION - Yahoo Finance + Alpha Vantage
32
+ ==========================================================================================
33
+ +------------------+----------+--------------+
34
+ | Metric | Value | Source |
35
+ +------------------+----------+--------------+
36
+ | current_price | 259.3700 | Yahoo |
37
+ | market_cap | 3832.54B | Yahoo |
38
+ | enterprise_value | 3889.34B | Yahoo |
39
+ | trailing_pe | 34.7216 | Yahoo |
40
+ | forward_pe | 28.3417 | Yahoo |
41
+ | ps_ratio | 9.2093 | Yahoo |
42
+ | pb_ratio | 51.9675 | Yahoo |
43
+ | ev_ebitda | 26.8700 | Yahoo |
44
+ | trailing_peg | 2.6214 | Yahoo |
45
+ | forward_peg | 0.3108 | Yahoo |
46
+ | earnings_growth | 0.9120 | Yahoo |
47
+ | revenue_growth | 0.0790 | Yahoo |
48
+ | current_price | 273.0100 | AlphaVantage |
49
+ | market_cap | 3844.25B | AlphaVantage |
50
+ | trailing_pe | 34.7200 | AlphaVantage |
51
+ | forward_pe | 31.4500 | AlphaVantage |
52
+ | ps_ratio | 9.2400 | AlphaVantage |
53
+ | pb_ratio | 52.1700 | AlphaVantage |
54
+ | ev_ebitda | 26.8800 | AlphaVantage |
55
+ | trailing_peg | 2.6350 | AlphaVantage |
56
+ | earnings_growth | 0.9120 | AlphaVantage |
57
+ | revenue_growth | 0.0790 | AlphaVantage |
58
+ +------------------+----------+--------------+
59
+
60
+ Fetching volatility...
61
+
62
+ ==========================================================================================
63
+ VOLATILITY - Yahoo Finance + CBOE
64
+ ==========================================================================================
65
+ +-----------------------+---------+--------+
66
+ | Metric | Value | Source |
67
+ +-----------------------+---------+--------+
68
+ | beta | 1.2930 | Yahoo |
69
+ | historical_volatility | 12.3300 | Yahoo |
70
+ | implied_volatility | 30.0000 | Yahoo |
71
+ +-----------------------+---------+--------+
72
+
73
+ Fetching macro...
74
+
75
+ ==========================================================================================
76
+ MACRO - FRED Economic Data
77
+ ==========================================================================================
78
+ +---------------+--------+--------+------------+
79
+ | Indicator | Value | Source | Date |
80
+ +---------------+--------+--------+------------+
81
+ | gdp_growth | 4.3000 | FRED | 2025-07-01 |
82
+ | cpi_inflation | 2.7100 | FRED | 2025-11-01 |
83
+ | unemployment | 4.4000 | FRED | 2025-12-01 |
84
+ | interest_rate | 3.7200 | FRED | 2025-12-01 |
85
+ +---------------+--------+--------+------------+
86
+
87
+ Fetching news...
88
+
89
+ ==========================================================================================
90
+ NEWS - Tavily+NYT+NewsAPI (Raw:10 Deduped:10)
91
+ ==========================================================================================
92
+ +----------------------------------------------------+--------------+------------+
93
+ | Title | Source | Date |
94
+ +----------------------------------------------------+--------------+------------+
95
+ | Google parent hits $3.88 trillion m-cap, edges pas | The Times of | 2026-01-08 |
96
+ | Apple (NASDAQ: AAPL) Stock Price Prediction and Fo | Biztoc.com | 2026-01-07 |
97
+ | With Warren Buffett Done as CEO, Just 3 Stocks Mak | 24/7 Wall St | 2026-01-06 |
98
+ | Read the Ruling | New York Tim | 2025-04-17 |
99
+ | Read the Lawsuit Against Apple | New York Tim | 2024-03-21 |
100
+ | The Numbers Behind Walmart’s Pay Raise: DealBook B | New York Tim | 2018-01-11 |
101
+ | APPLE INC. (AAPL) Stock, Price, News, Quotes, Fore | - | None |
102
+ | Apple Inc. Stock Quote (U.S.: Nasdaq) - AAPL | - | None |
103
+ | Apple Inc. (AAPL) Stock Price, News, Quote & Histo | - | None |
104
+ | Apple Inc. (AAPL) Stock Price Today - WSJ | - | None |
105
+ +----------------------------------------------------+--------------+------------+
106
+
107
+ Fetching sentiment...
108
+
109
+ ==========================================================================================
110
+ SENTIMENT SUMMARY
111
+ ==========================================================================================
112
+ +------------------+---------------------------+------------+
113
+ | Metric | Value | Source |
114
+ +------------------+---------------------------+------------+
115
+ | Composite Score | 65.09 | weighted |
116
+ | Interpretation | Overall Bullish Sentiment | - |
117
+ | SWOT Category | STRENGTH | - |
118
+ | VADER Score | 49 | news_vader |
119
+ | VADER Articles | 20 | news_vader |
120
+ | Finnhub Score | 70.18 | finnhub |
121
+ | Finnhub Articles | 50 | finnhub |
122
+ | Reddit Score | 81.44 | reddit |
123
+ | Reddit Posts | 12 | reddit |
124
+ | Reddit Upvotes | 6165 | reddit |
125
+ +------------------+---------------------------+------------+
126
+
127
+ ==========================================================================================
128
+ SENTIMENT - Finnhub Articles (Top 15)
129
+ ==========================================================================================
130
+ +--------------------------------------------------+--------+--------+
131
+ | Headline | Score | Source |
132
+ +--------------------------------------------------+--------+--------+
133
+ | Jamie Dimon's Grip On US Credit Card Dominance G | 0.929 | Yahoo |
134
+ | Stifel Canada Hikes Aritzia Price Target to $150 | 0.296 | Yahoo |
135
+ | CIO survey ranks Microsoft and OpenAI as AI lead | 0.778 | Yahoo |
136
+ | 3 No-Brainer Tech Stocks to Buy Right Now | 0.421 | Yahoo |
137
+ | Apple CEO Pay Dips as Board Opposes China Audit | -0.103 | Yahoo |
138
+ | XAI Limits Grok Images After Uproar Over Sexuali | 0.0 | Yahoo |
139
+ | TSMC's December Dip Isn't the Real Story | 0.44 | Yahoo |
140
+ | Intel Rises After Trump Meeting as Markets Await | 0.421 | Yahoo |
141
+ | Goldman Projects 46-Cent EPS Gain in Q4 From App | 0.727 | Yahoo |
142
+ | Jim Cramer Says Insider Buying in Nike Signals “ | 0.908 | Yahoo |
143
+ | Apple (AAPL)’s “the Winner With Gemini,” Says Ji | 0.718 | Yahoo |
144
+ | Jim Cramer Says “Apple Deserves a Premium Multip | -0.25 | Yahoo |
145
+ | Alphabet (GOOGL) Has a Special Relationship With | 0.844 | Yahoo |
146
+ | Corning (GLW)’s a “Potential Winner,” Says Jim C | 0.511 | Yahoo |
147
+ | Apple Stock Continues Its Brutal Losing Streak. | -0.691 | Yahoo |
148
+ +--------------------------------------------------+--------+--------+
149
+
150
+ ==========================================================================================
151
+ SENTIMENT - Reddit Posts
152
+ ==========================================================================================
153
+ +--------------------------------------------------+--------+---------+
154
+ | Title | Score | Upvotes |
155
+ +--------------------------------------------------+--------+---------+
156
+ | AAPL will revisit $275 in the next 2 weeks | 0.0 | 76 |
157
+ | Apple admits defeat. Puts on Tim Cook, Calls on | 0.807 | 1630 |
158
+ | 🐻 in the town | 0.361 | 1777 |
159
+ | Tech YOLO | 0.161 | 47 |
160
+ | Apple 300 after er | 0.34 | 24 |
161
+ | Could Apple's stock price really drop to $200? I | 0.762 | 0 |
162
+ | AAPL price debate: still a “safe premium” or qui | 0.813 | 17 |
163
+ | Google has overtaken Apple's market cap, becomin | 0.7 | 2189 |
164
+ | r/Stocks Daily Discussion &amp; Fundamentals Fri | 0.214 | 17 |
165
+ | JPMorgan Chase Reaches a Deal to Take Over the A | 0.942 | 378 |
166
+ | Back to Investing after years off the markets. | -0.296 | 10 |
167
+ | What happened to Mondelez International in last | -0.895 | 0 |
168
+ +--------------------------------------------------+--------+---------+
configs/__init__.py ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ from .company_name_filters import clean_company_name, COMPANY_SUFFIXES, COMPANY_PREFIXES
2
+ from .output_schemas import OUTPUT_SCHEMAS, get_schema_string, get_all_schema_strings
configs/company_name_filters.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Company name normalization filters.
3
+ Add suffixes/prefixes here as new edge cases are discovered.
4
+ """
5
+
6
+ # Suffixes to strip from company names (order matters - longer first)
7
+ COMPANY_SUFFIXES = [
8
+ " Corporation",
9
+ " Incorporated",
10
+ " Technologies",
11
+ " Technology",
12
+ " International",
13
+ " Platforms",
14
+ " Holdings",
15
+ " Company",
16
+ " Limited",
17
+ " Group",
18
+ " Inc.",
19
+ " Inc",
20
+ " Ltd.",
21
+ " Ltd",
22
+ " LLC",
23
+ " L.P.",
24
+ " Co.",
25
+ " Corp.",
26
+ " Corp",
27
+ " PLC",
28
+ " N.V.",
29
+ " S.A.",
30
+ " AG",
31
+ ]
32
+
33
+ # Prefixes to strip (if any)
34
+ COMPANY_PREFIXES = [
35
+ "The ",
36
+ ]
37
+
38
+
39
+ def clean_company_name(name: str) -> str:
40
+ """
41
+ Remove common corporate suffixes/prefixes for better search matching.
42
+ e.g., "NVIDIA Corporation" -> "NVIDIA"
43
+ "Meta Platforms, Inc." -> "Meta"
44
+ """
45
+ result = name
46
+
47
+ # Strip prefixes
48
+ for prefix in COMPANY_PREFIXES:
49
+ if result.startswith(prefix):
50
+ result = result[len(prefix):]
51
+
52
+ # Clean punctuation first (commas interfere with suffix matching)
53
+ result = result.replace(",", "").strip()
54
+
55
+ # Strip suffixes iteratively (handles "Meta Platforms Inc" -> "Meta")
56
+ changed = True
57
+ while changed:
58
+ changed = False
59
+ for suffix in COMPANY_SUFFIXES:
60
+ if result.endswith(suffix):
61
+ result = result[: -len(suffix)].strip()
62
+ changed = True
63
+ break
64
+
65
+ return result
configs/output_schemas.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Output schemas for MCP data presentation in markdown files.
3
+ These define the field structure for each section in mcp_output_xxx.md files.
4
+ """
5
+
6
+ OUTPUT_SCHEMAS = {
7
+ "company_details": {
8
+ "fields": ["longName", "address1", "city", "state", "zip", "country", "sector", "industry"],
9
+ "description": "Company profile and classification"
10
+ },
11
+ "fundamentals": {
12
+ "fields": ["value", "data_type", "end_date", "filed", "fiscal_year", "form"],
13
+ "description": "Financial statement metrics from SEC EDGAR and Yahoo Finance"
14
+ },
15
+ "valuation": {
16
+ "fields": ["value", "data_type", "as_of"],
17
+ "description": "Valuation ratios and multiples"
18
+ },
19
+ "volatility": {
20
+ "fields": ["value", "data_type", "as_of", "source", "fallback"],
21
+ "description": "Market volatility and risk metrics"
22
+ },
23
+ "macro": {
24
+ "fields": ["value", "data_type", "as_of", "source"],
25
+ "description": "Macroeconomic indicators"
26
+ },
27
+ "news": {
28
+ "fields": ["title", "content", "date", "url", "source"],
29
+ "description": "News articles from financial sources"
30
+ },
31
+ "sentiment": {
32
+ "fields": ["title", "content", "date", "url", "source", "subreddit"],
33
+ "description": "Sentiment data from Finnhub and Reddit"
34
+ },
35
+ }
36
+
37
+
38
+ def get_schema_string(section: str) -> str:
39
+ """Get schema as formatted string for markdown display."""
40
+ schema = OUTPUT_SCHEMAS.get(section)
41
+ if not schema:
42
+ return ""
43
+ return "{ " + ", ".join(schema["fields"]) + " }"
44
+
45
+
46
+ def get_all_schema_strings() -> dict:
47
+ """Get all schemas as formatted strings."""
48
+ return {key: get_schema_string(key) for key in OUTPUT_SCHEMAS}
docs/SEC_EDGAR_data_schema.md ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ SEC EDGAR Data Schema
2
+ =====================
3
+
4
+ Example: AAPL (Apple Inc) - CIK 0000320193
5
+
6
+ Raw field meanings:
7
+
8
+ | Field | Description |
9
+ |-------|-----------------------------------|
10
+ | val | Raw value (in USD) |
11
+ | end | Period end date |
12
+ | fy | Fiscal year |
13
+ | fp | Fiscal period (FY, Q1, Q2, Q3) |
14
+ | form | Filing type (10-K, 10-Q) |
15
+ | filed | Filing date |
16
+ | accn | SEC accession number |
17
+ | frame | Calendar frame (CY2025, CY2025Q2) |
18
+
19
+ Common fields (same across all metrics):
20
+
21
+ | Field | Value |
22
+ |-------|----------------------|
23
+ | end | 2025-09-27 |
24
+ | fy | 2025 |
25
+ | fp | FY |
26
+ | form | 10-K |
27
+ | filed | 2025-10-31 |
28
+ | accn | 0000320193-25-000079 |
29
+
30
+
31
+ Metrics
32
+ -------
33
+
34
+ Income Statement
35
+
36
+ | name | val | frame |
37
+ |------------------|--------------|--------|
38
+ | revenue | 416161000000 | CY2025 |
39
+ | gross_profit | 195201000000 | CY2025 |
40
+ | operating_income | 133050000000 | CY2025 |
41
+ | net_income | 112010000000 | CY2025 |
42
+
43
+ Balance Sheet
44
+
45
+ | name | val | frame |
46
+ |---------------------|--------------|-----------|
47
+ | total_assets | 359241000000 | CY2025Q3I |
48
+ | cash | 35934000000 | CY2025Q3I |
49
+ | total_liabilities | 285508000000 | CY2025Q3I |
50
+ | long_term_debt | 90678000000 | CY2025Q3I |
51
+ | stockholders_equity | 73733000000 | CY2025Q3I |
52
+
53
+ Cash Flow
54
+
55
+ | name | val | frame |
56
+ |---------------------|--------------|--------|
57
+ | operating_cash_flow | 111482000000 | CY2025 |
58
+ | capital_expenditure | 12715000000 | CY2025 |
59
+
60
+ Expenses
61
+
62
+ | name | val | frame |
63
+ |------------|-------------|--------|
64
+ | rd_expense | 34550000000 | CY2025 |
docs/alphavantage_data_schema.md ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Alpha Vantage Data Schema
2
+ =========================
3
+
4
+ Example: AAPL (Apple Inc)
5
+
6
+ Endpoint: https://www.alphavantage.co/query?function=OVERVIEW
7
+
8
+
9
+ Company Info
10
+
11
+ | field | value |
12
+ |----------|----------------------|
13
+ | Symbol | AAPL |
14
+ | Name | Apple Inc |
15
+ | Exchange | NASDAQ |
16
+ | Currency | USD |
17
+ | Country | USA |
18
+ | Sector | TECHNOLOGY |
19
+ | Industry | CONSUMER ELECTRONICS |
20
+
21
+
22
+ Valuation Metrics
23
+
24
+ | field | value |
25
+ |----------------------|---------------|
26
+ | MarketCapitalization | 3844254728000 |
27
+ | TrailingPE | 34.72 |
28
+ | ForwardPE | 31.45 |
29
+ | PEGRatio | 2.635 |
30
+ | PriceToBookRatio | 52.17 |
31
+ | PriceToSalesRatioTTM | 9.24 |
32
+ | EVToEBITDA | 26.88 |
33
+ | EVToRevenue | 9.35 |
34
+
35
+
36
+ Growth Metrics
37
+
38
+ | field | value |
39
+ |----------------------------|--------|
40
+ | QuarterlyEarningsGrowthYOY | 0.912 |
41
+ | QuarterlyRevenueGrowthYOY | 0.079 |
42
+ | AnalystTargetPrice | 287.71 |
43
+
44
+
45
+ Financial Metrics
46
+
47
+ | field | value |
48
+ |--------------------|--------------|
49
+ | EBITDA | 144748003000 |
50
+ | RevenueTTM | 416161006000 |
51
+ | GrossProfitTTM | 195201008000 |
52
+ | DilutedEPSTTM | 7.46 |
53
+ | ProfitMargin | 0.269 |
54
+ | OperatingMarginTTM | 0.317 |
55
+ | ReturnOnAssetsTTM | 0.23 |
56
+ | ReturnOnEquityTTM | 1.714 |
57
+
58
+
59
+ Dividend & Book Value
60
+
61
+ | field | value |
62
+ |------------------|------------|
63
+ | DividendPerShare | 1.02 |
64
+ | DividendYield | 0.0039 |
65
+ | ExDividendDate | 2025-11-10 |
66
+ | BookValue | 4.991 |
67
+
68
+
69
+ Moving Averages & Risk
70
+
71
+ | field | value |
72
+ |---------------------|--------|
73
+ | 50DayMovingAverage | 273.01 |
74
+ | 200DayMovingAverage | 232.75 |
75
+ | 52WeekHigh | 288.62 |
76
+ | 52WeekLow | 168.63 |
77
+ | Beta | 1.093 |
docs/bea_data_schema.md ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BEA Data Schema
2
+ ===============
3
+
4
+ Bureau of Economic Analysis - NIPA (National Income and Product Accounts)
5
+
6
+ Endpoint: https://apps.bea.gov/api/data
7
+ Dataset: NIPA
8
+ Table: T10101 (Percent Change From Preceding Period in Real GDP)
9
+
10
+
11
+ Request Parameters
12
+
13
+ | field | description |
14
+ |--------------|-------------------------------------|
15
+ | UserID | API key (required) |
16
+ | method | GetData |
17
+ | datasetname | NIPA |
18
+ | TableName | T10101 (GDP percent change) |
19
+ | Frequency | Q (Quarterly) or A (Annual) |
20
+ | Year | X (all years) or specific year |
21
+ | ResultFormat | JSON |
22
+
23
+
24
+ Response Structure
25
+
26
+ | field | description |
27
+ |---------------------------|-----------------------------|
28
+ | BEAAPI | Root container |
29
+ | BEAAPI.Request | Echo of request parameters |
30
+ | BEAAPI.Results | Results container |
31
+ | Results.Statistic | Data type (NIPA Table) |
32
+ | Results.UTCProductionTime | Timestamp of data generation|
33
+ | Results.Notes[] | Array of data notes |
34
+ | Results.Data[] | Array of data observations |
35
+
36
+
37
+ Data Row Fields
38
+
39
+ | field | description |
40
+ |-----------------|---------------------------------------------------|
41
+ | TableName | NIPA table identifier (T10101) |
42
+ | SeriesCode | BEA series code for the metric |
43
+ | LineNumber | Row number in the table (1 = Real GDP) |
44
+ | LineDescription | Human-readable metric name |
45
+ | TimePeriod | Time period (YYYYQN format, e.g., 2025Q3) |
46
+ | METRIC_NAME | Metric type (e.g., Fisher Quantity Index) |
47
+ | CL_UNIT | Unit description (Percent change, annual rate) |
48
+ | UNIT_MULT | Unit multiplier |
49
+ | DataValue | The actual data value |
50
+ | NoteRef | Reference to notes array |
51
+
52
+
53
+ GDP Data (LineNumber = 1)
54
+
55
+ | TimePeriod | DataValue | LineDescription |
56
+ |------------|-----------|------------------------|
57
+ | 2025Q3 | 4.3 | Gross domestic product |
58
+ | 2025Q2 | 3.8 | Gross domestic product |
59
+ | 2025Q1 | -0.6 | Gross domestic product |
60
+ | 2024Q4 | 1.9 | Gross domestic product |
61
+ | 2024Q3 | 3.3 | Gross domestic product |
62
+ | 2024Q2 | 3.6 | Gross domestic product |
63
+
64
+
65
+ Line Numbers Reference
66
+
67
+ | LineNumber | Description |
68
+ |------------|---------------------------------------|
69
+ | 1 | Gross domestic product |
70
+ | 2 | Personal consumption expenditures |
71
+ | 7 | Gross private domestic investment |
72
+ | 11 | Net exports of goods and services |
73
+ | 22 | Government consumption expenditures |
docs/bls_data_schema.md ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ BLS Data Schema
2
+ ===============
3
+
4
+ Bureau of Labor Statistics API
5
+
6
+ Endpoint: https://api.bls.gov/publicAPI/v2/timeseries/data/
7
+ Method: POST with JSON payload
8
+
9
+
10
+ Series IDs
11
+
12
+ | series_id | description |
13
+ |--------------|---------------------------------------|
14
+ | CUUR0000SA0 | CPI-U All Items (Consumer Price Index)|
15
+ | LNS14000000 | Unemployment Rate |
16
+
17
+
18
+ Request Payload
19
+
20
+ | field | description |
21
+ |-----------------|------------------------------------|
22
+ | seriesid[] | Array of BLS series IDs to fetch |
23
+ | startyear | Start year for data range |
24
+ | endyear | End year for data range |
25
+ | registrationkey | Optional API key for higher limits |
26
+
27
+
28
+ Response Structure
29
+
30
+ | field | description |
31
+ |-----------------|-----------------------------------|
32
+ | status | REQUEST_SUCCEEDED or error code |
33
+ | responseTime | Response time in milliseconds |
34
+ | message[] | Array of status messages |
35
+ | Results | Results container |
36
+ | Results.series[]| Array of series data |
37
+
38
+
39
+ Series Structure
40
+
41
+ | field | description |
42
+ |----------|-----------------------------|
43
+ | seriesID | BLS series identifier |
44
+ | data[] | Array of observations |
45
+
46
+
47
+ Observation Fields
48
+
49
+ | field | description |
50
+ |------------|-----------------------------------------------------|
51
+ | year | 4-digit year (e.g., 2025) |
52
+ | period | Period code (M01-M12 for monthly, A01 for annual) |
53
+ | periodName | Human-readable period (January, February, etc.) |
54
+ | value | Data value as string |
55
+ | footnotes | Array of footnote objects |
56
+
57
+
58
+ CPI-U All Items (CUUR0000SA0)
59
+
60
+ | field | value |
61
+ |-----------|----------------------------------|
62
+ | series_id | CUUR0000SA0 |
63
+ | title | Consumer Price Index - All Items |
64
+ | units | Index 1982-1984=100 |
65
+ | frequency | Monthly |
66
+ | period | 2025-November |
67
+ | value | 324.122 |
68
+
69
+
70
+ Unemployment Rate (LNS14000000)
71
+
72
+ | field | value |
73
+ |-----------|-------------------|
74
+ | series_id | LNS14000000 |
75
+ | title | Unemployment Rate |
76
+ | units | Percent |
77
+ | frequency | Monthly |
78
+ | period | 2025-December |
79
+ | value | 4.4 |
80
+
81
+
82
+ Period Codes
83
+
84
+ | code | description |
85
+ |------|-------------|
86
+ | M01 | January |
87
+ | M02 | February |
88
+ | M03 | March |
89
+ | M04 | April |
90
+ | M05 | May |
91
+ | M06 | June |
92
+ | M07 | July |
93
+ | M08 | August |
94
+ | M09 | September |
95
+ | M10 | October |
96
+ | M11 | November |
97
+ | M12 | December |
98
+ | A01 | Annual |
docs/data_flow.md ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Researcher-Agent Data Flow
2
+
3
+ ## Request Flow
4
+
5
+ ```
6
+ Frontend/Caller
7
+
8
+ │ POST / (JSON-RPC: message/send)
9
+
10
+ │ Example Request:
11
+ │ {
12
+ │ "jsonrpc": "2.0",
13
+ │ "method": "message/send",
14
+ │ "params": {"message": {"content": "Research AAPL"}},
15
+ │ "id": 1
16
+ │ }
17
+
18
+ ┌──────────────────┐
19
+ │ app.py │ A2A Server (port 7860)
20
+ └────────┬─────────┘
21
+
22
+ │ Extracts: ticker="AAPL", company_name="Apple Inc"
23
+ │ Spawns background task, returns task_id
24
+
25
+ │ Example Response:
26
+ │ {"jsonrpc": "2.0", "result": {"task": {"id": "task-123", "status": "working"}}, "id": 1}
27
+
28
+ ┌──────────────────┐
29
+ │ mcp_client.py │ Orchestrator
30
+ └────────┬─────────┘
31
+
32
+ │ Spawns each MCP server as subprocess
33
+ │ Sends JSON-RPC over stdio
34
+
35
+ │ Example MCP Request:
36
+ │ {"jsonrpc": "2.0", "method": "tools/call", "params": {"name": "get_all_sources_fundamentals", "arguments": {"ticker": "AAPL"}}, "id": 2}
37
+
38
+ ┌──────────────────────────────────────────────────────────────────────────────────────────┐
39
+ │ MCP SERVERS │
40
+ │ │
41
+ │ 1. fundamentals-basket/server.py │
42
+ │ └─► SEC EDGAR ──► {"revenue": {"value": 416161000000, "fiscal_year": 2025}} │
43
+ │ └─► Yahoo Finance (fallback) │
44
+ │ │
45
+ │ 2. valuation-basket/server.py │
46
+ │ └─► Yahoo Finance ──► {"trailing_pe": 34.72, "pb_ratio": 52.17} │
47
+ │ └─► Alpha Vantage (fallback) │
48
+ │ │
49
+ │ 3. volatility-basket/server.py │
50
+ │ └─► FRED ──► {"vix": {"value": 15.45}, "vxn": {"value": 20.15}} │
51
+ │ └─► Yahoo Finance ──► {"beta": 1.29, "historical_volatility": 0.12} │
52
+ │ │
53
+ │ 4. macro-basket/server.py │
54
+ │ └─► BEA ──► {"gdp_growth": {"value": 4.3, "date": "Q3 2025"}} │
55
+ │ └─► BLS ──► {"cpi": 2.74, "unemployment": 4.4} │
56
+ │ └─► FRED ──► {"interest_rate": 3.72} │
57
+ │ │
58
+ │ 5. news-basket/server.py │
59
+ │ └─► Tavily + NYT + NewsAPI ──► {"items": [{"title": "...", "url": "..."}]} │
60
+ │ │
61
+ │ 6. sentiment-basket/server.py │
62
+ │ └─► Finnhub ──► {"items": [{"title": "...", "url": "..."}]} │
63
+ │ └─► Reddit ──► {"items": [{"title": "...", "url": "..."}]} │
64
+ └──────────────────────────────────────────────────────────────────────────────────────────┘
65
+
66
+ │ Example MCP Response:
67
+ │ {"jsonrpc": "2.0", "result": {"content": [{"type": "text", "text": "{...}"}]}, "id": 2}
68
+
69
+ ┌──────────────────┐
70
+ │ mcp_client.py │ Aggregates all sources
71
+ └────────┬─────────┘
72
+
73
+ │ Merges 6 responses into single payload
74
+
75
+ │ Completeness: checks required vs missing
76
+ │ required = {
77
+ │ "financials": ["revenue", "net_income", "eps", "debt_to_equity"],
78
+ │ "valuation": ["trailing_pe", "pb_ratio", "ps_ratio"],
79
+ │ "volatility": ["beta", "vix"],
80
+ │ "macro": ["gdp_growth", "interest_rate", "cpi_inflation"],
81
+ │ "news": ["items"],
82
+ │ "sentiment": ["items"]
83
+ │ }
84
+ │ missing = {"volatility": ["implied_volatility"]}
85
+ │ found: 19, total: 20
86
+
87
+ │ Conflict Resolution: compares primary vs secondary source values
88
+ │ financials: SEC EDGAR (primary) vs Yahoo Finance (secondary)
89
+ │ valuation: Yahoo Finance (primary) vs Alpha Vantage (secondary)
90
+ │ → if values differ, marks conflict and uses primary
91
+ │ → example: {"metric": "revenue", "primary_value": 416B, "secondary_value": 415B, "used": "primary"}
92
+
93
+ │ Example Aggregated:
94
+ │ {"ticker": "AAPL", "metrics": {...}, "multi_source": {...}, "completeness": {"pct": 95}}
95
+
96
+ ┌──────────────────┐
97
+ │ app.py │ Stores as task artifact
98
+ └────────┬─────────┘
99
+
100
+ │ Updates task status: "working" → "completed"
101
+ │ Stores result in artifacts[]
102
+
103
+ │ Example Final Response (tasks/get):
104
+ │ {"jsonrpc": "2.0", "result": {"task": {"id": "task-123", "status": "completed", "artifacts": [{...}]}}, "id": 3}
105
+
106
+ Frontend/Caller
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Output Structure
112
+
113
+ ```python
114
+ {
115
+ "ticker": "AAPL",
116
+ "company_name": "Apple Inc",
117
+ "sources_available": ["financials", "valuation", ...],
118
+ "sources_failed": [],
119
+ "metrics": {
120
+ "fundamentals": {...},
121
+ "valuation": {...},
122
+ "volatility": {...},
123
+ "macro": {...},
124
+ "news": {...},
125
+ "sentiment": {...}
126
+ },
127
+ "multi_source": {
128
+ "fundamentals_all": {...},
129
+ "valuation_all": {...},
130
+ "volatility_all": {...},
131
+ "macro_all": {...}
132
+ },
133
+ "completeness": {
134
+ "completeness_pct": 95.0,
135
+ "metrics_found": 19,
136
+ "metrics_total": 20,
137
+ "missing": ["implied_volatility"]
138
+ },
139
+ "generated_at": "2026-01-10T..."
140
+ }
141
+ ```
docs/finnhub_data_schema.md ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Finnhub Data Schema
2
+ ===================
3
+
4
+ Endpoint: https://finnhub.io/api/v1/company-news
5
+ Method: GET
6
+
7
+
8
+ Request Parameters
9
+
10
+ | field | type | description |
11
+ |--------|--------|-------------------------|
12
+ | symbol | string | Stock ticker |
13
+ | from | string | Start date (YYYY-MM-DD) |
14
+ | to | string | End date (YYYY-MM-DD) |
15
+ | token | string | API key |
16
+
17
+
18
+ Response (array of articles)
19
+
20
+ | field | type | description |
21
+ |----------|--------|------------------|
22
+ | headline | string | Article headline |
23
+ | summary | string | Article summary |
24
+ | url | string | Article URL |
25
+ | source | string | Publisher name |
26
+ | datetime | int | Unix timestamp |
27
+
28
+
29
+ Example Result
30
+
31
+ | field | value |
32
+ |----------|--------------------------------------|
33
+ | headline | "Apple Reports Strong Q4 Earnings" |
34
+ | summary | "Apple Inc reported quarterly..." |
35
+ | url | "https://bloomberg.com/apple-q4..." |
36
+ | source | "Bloomberg" |
37
+ | datetime | 1736416200 |
docs/fred_data_schema.md ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FRED Data Schema
2
+ ================
3
+
4
+ Endpoint: https://api.stlouisfed.org/fred/series/observations
5
+
6
+
7
+ Raw API Response Structure
8
+ --------------------------
9
+
10
+ Series Info (seriess[0])
11
+
12
+ | field | description |
13
+ |---------------------|----------------------------------------|
14
+ | id | Series identifier |
15
+ | title | Series title |
16
+ | units | Data units |
17
+ | frequency | Update frequency (Daily, Monthly, etc) |
18
+ | seasonal_adjustment | Adjustment type (SA, NSA) |
19
+ | last_updated | Last update timestamp |
20
+
21
+ Observation (observations[])
22
+
23
+ | field | description |
24
+ |----------------|-------------------------|
25
+ | realtime_start | Real-time period start |
26
+ | realtime_end | Real-time period end |
27
+ | date | Observation date |
28
+ | value | Data value (string) |
29
+
30
+
31
+ Series Data
32
+ -----------
33
+
34
+ GDP Growth (A191RL1Q225SBEA)
35
+
36
+ | field | value |
37
+ |--------------|--------------------------------------|
38
+ | series_id | A191RL1Q225SBEA |
39
+ | title | Real Gross Domestic Product |
40
+ | units | Percent Change from Preceding Period |
41
+ | frequency | Quarterly |
42
+ | date | 2025-07-01 |
43
+ | value | 4.3 |
44
+ | last_updated | 2025-12-23 07:54:34 |
45
+
46
+ Interest Rate (FEDFUNDS)
47
+
48
+ | field | value |
49
+ |--------------|------------------------------|
50
+ | series_id | FEDFUNDS |
51
+ | title | Federal Funds Effective Rate |
52
+ | units | Percent |
53
+ | frequency | Monthly |
54
+ | date | 2025-12-01 |
55
+ | value | 3.72 |
56
+ | last_updated | 2026-01-02 15:18:33 |
57
+
58
+ CPI (CPIAUCSL)
59
+
60
+ | field | value |
61
+ |--------------|-----------------------------------------------|
62
+ | series_id | CPIAUCSL |
63
+ | title | Consumer Price Index for All Urban Consumers |
64
+ | units | Index 1982-1984=100 |
65
+ | frequency | Monthly |
66
+ | date | 2025-11-01 |
67
+ | value | 325.031 |
68
+ | last_updated | 2025-12-18 08:03:48 |
69
+
70
+ Unemployment (UNRATE)
71
+
72
+ | field | value |
73
+ |--------------|---------------------|
74
+ | series_id | UNRATE |
75
+ | title | Unemployment Rate |
76
+ | units | Percent |
77
+ | frequency | Monthly |
78
+ | date | 2025-12-01 |
79
+ | value | 4.4 |
80
+ | last_updated | 2026-01-09 08:10:37 |
81
+
82
+ VIX (VIXCLS)
83
+
84
+ | field | value |
85
+ |--------------|----------------------------|
86
+ | series_id | VIXCLS |
87
+ | title | CBOE Volatility Index: VIX |
88
+ | units | Index |
89
+ | frequency | Daily, Close |
90
+ | date | 2026-01-08 |
91
+ | value | 15.45 |
92
+ | last_updated | 2026-01-09 08:37:39 |
93
+
94
+ VXN (VXNCLS)
95
+
96
+ | field | value |
97
+ |--------------|----------------------------------|
98
+ | series_id | VXNCLS |
99
+ | title | CBOE NASDAQ 100 Volatility Index |
100
+ | units | Index |
101
+ | frequency | Daily, Close |
102
+ | date | 2026-01-08 |
103
+ | value | 20.15 |
104
+ | last_updated | 2026-01-09 08:37:34 |
105
+
106
+
107
+ Time Categories
108
+ ---------------
109
+ - Macro indicators (GDP, Interest Rate, CPI, Unemployment): date field is observation date
110
+ - Volatility indices (VIX, VXN): date field is market close date
docs/fundamentals_data_schema.md ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Fundamentals Data Schema
2
+ ========================
3
+
4
+ Single source of truth for fundamentals-basket MCP server output.
5
+ Example: AAPL (Apple Inc)
6
+
7
+ | S/N | metric | value | temporal info | source |
8
+ | --- | ------------------------- | ------- | ------------- | ------------- |
9
+ | | **Income Statement** | | | |
10
+ | 1 | Revenue | $416.2B | FY 2025 | SEC EDGAR |
11
+ | 2 | Gross Profit | $195.2B | FY 2025 | SEC EDGAR |
12
+ | 3 | Operating Income | $133.1B | FY 2025 | SEC EDGAR |
13
+ | 4 | Net Income | $112.0B | FY 2025 | SEC EDGAR |
14
+ | | **Balance Sheet** | | | |
15
+ | 5 | Total Assets | $359.2B | Q3 2025 | SEC EDGAR |
16
+ | 6 | Total Liabilities | $285.5B | Q3 2025 | SEC EDGAR |
17
+ | 7 | Stockholders Equity | $73.7B | Q3 2025 | SEC EDGAR |
18
+ | 8 | Cash | $35.9B | Q3 2025 | SEC EDGAR |
19
+ | 9 | Long Term Debt | $90.7B | Q3 2025 | SEC EDGAR |
20
+ | 10 | Total Debt | $112.4B | Q3 2025 | SEC EDGAR |
21
+ | | **Cash Flow** | | | |
22
+ | 11 | Operating Cash Flow | $111.5B | FY 2025 | SEC EDGAR |
23
+ | 12 | Capital Expenditure | $12.7B | FY 2025 | SEC EDGAR |
24
+ | 13 | Free Cash Flow | $98.8B | FY 2025 | SEC EDGAR |
25
+ | 14 | R&D Expense | $34.6B | FY 2025 | SEC EDGAR |
26
+ | | **Margins & Ratios** | | | |
27
+ | 15 | Gross Margin | 46.9% | FY 2025 | SEC EDGAR |
28
+ | 16 | Operating Margin | 32.0% | FY 2025 | SEC EDGAR |
29
+ | 17 | Net Margin | 26.9% | FY 2025 | SEC EDGAR |
30
+ | 18 | Debt to Equity | 1.53x | Q3 2025 | SEC EDGAR |
31
+ | 19 | Revenue Growth (3yr CAGR) | 7.9% | FY 2025 | SEC EDGAR |
32
+ | | **Yahoo-Only Metrics** | | | |
33
+ | 20 | Return on Equity (ROE) | 171.4% | Q3 2025 | Yahoo Finance |
34
+ | 21 | Return on Assets (ROA) | 23.0% | Q3 2025 | Yahoo Finance |
35
+ | 22 | EBITDA Margin | 34.8% | Q3 2025 | Yahoo Finance |
36
+ | 23 | Current Ratio | 0.89 | Q3 2025 | Yahoo Finance |
37
+ | 24 | Quick Ratio | 0.77 | Q3 2025 | Yahoo Finance |
38
+ | 25 | Trailing EPS | $7.47 | FY 2025 | Yahoo Finance |
39
+ | 26 | Forward EPS | $9.15 | FY 2026E | Yahoo Finance |
40
+ | 27 | Payout Ratio | 13.7% | Q3 2025 | Yahoo Finance |
41
+ | 28 | Revenue Growth (QoQ) | 7.9% | Q3 2025 | Yahoo Finance |
42
+ | 29 | Earnings Growth (QoQ) | 86.4% | Q3 2025 | Yahoo Finance |
docs/macro_data_schema.md ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Macro Economic Data Schema
2
+ ==========================
3
+
4
+ Single source of truth for macro-basket MCP server output.
5
+
6
+ | S/N | metric | value | temporal info | source |
7
+ |-----|-------------------|-------|---------------|--------|
8
+ | 1 | GDP Growth | 4.3% | Q3 2025 | BEA |
9
+ | 2 | CPI / Inflation | 2.74% | Nov 2025 | BLS |
10
+ | 3 | Unemployment Rate | 4.4% | Dec 2025 | BLS |
11
+ | 4 | Federal Funds Rate| 3.72% | Dec 2025 | FRED |
12
+
13
+
14
+ Source Hierarchy
15
+ ----------------
16
+
17
+ | metric | primary | fallback |
18
+ |-------------------|---------|----------|
19
+ | GDP Growth | BEA | FRED |
20
+ | CPI / Inflation | BLS | FRED |
21
+ | Unemployment Rate | BLS | FRED |
22
+ | Federal Funds Rate| FRED | - |
docs/mcp_data_sources.md ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ ### fundamentals-basket (29 metrics)
4
+
5
+ | S/N | metric | temporal info | primary | secondary |
6
+ | --- | ------------------------- | ------------- | ------------- | ------------- |
7
+ | | **Income Statement** | | | |
8
+ | 1 | Revenue | FY | SEC EDGAR | Yahoo Finance |
9
+ | 2 | Gross Profit | FY | SEC EDGAR | Yahoo Finance |
10
+ | 3 | Operating Income | FY | SEC EDGAR | Yahoo Finance |
11
+ | 4 | Net Income | FY | SEC EDGAR | Yahoo Finance |
12
+ | | **Balance Sheet** | | | |
13
+ | 5 | Total Assets | Q | SEC EDGAR | Yahoo Finance |
14
+ | 6 | Total Liabilities | Q | SEC EDGAR | Yahoo Finance |
15
+ | 7 | Stockholders Equity | Q | SEC EDGAR | Yahoo Finance |
16
+ | 8 | Cash | Q | SEC EDGAR | Yahoo Finance |
17
+ | 9 | Long Term Debt | Q | SEC EDGAR | Yahoo Finance |
18
+ | 10 | Total Debt | Q | SEC EDGAR | Yahoo Finance |
19
+ | | **Cash Flow** | | | |
20
+ | 11 | Operating Cash Flow | FY | SEC EDGAR | Yahoo Finance |
21
+ | 12 | Capital Expenditure | FY | SEC EDGAR | Yahoo Finance |
22
+ | 13 | Free Cash Flow | FY | SEC EDGAR | Yahoo Finance |
23
+ | 14 | R&D Expense | FY | SEC EDGAR | Yahoo Finance |
24
+ | | **Margins & Ratios** | | | |
25
+ | 15 | Gross Margin | FY | SEC EDGAR | Yahoo Finance |
26
+ | 16 | Operating Margin | FY | SEC EDGAR | Yahoo Finance |
27
+ | 17 | Net Margin | FY | SEC EDGAR | Yahoo Finance |
28
+ | 18 | Debt to Equity | Q | SEC EDGAR | Yahoo Finance |
29
+ | 19 | Revenue Growth (3yr CAGR) | FY | SEC EDGAR | Yahoo Finance |
30
+ | | **Yahoo-Only Metrics** | | | |
31
+ | 20 | Return on Equity (ROE) | Q | Yahoo Finance | - |
32
+ | 21 | Return on Assets (ROA) | Q | Yahoo Finance | - |
33
+ | 22 | EBITDA Margin | Q | Yahoo Finance | - |
34
+ | 23 | Current Ratio | Q | Yahoo Finance | - |
35
+ | 24 | Quick Ratio | Q | Yahoo Finance | - |
36
+ | 25 | Trailing EPS | FY | Yahoo Finance | - |
37
+ | 26 | Forward EPS | FY+1E | Yahoo Finance | - |
38
+ | 27 | Payout Ratio | Q | Yahoo Finance | - |
39
+ | 28 | Revenue Growth (QoQ) | Q | Yahoo Finance | - |
40
+ | 29 | Earnings Growth (QoQ) | Q | Yahoo Finance | - |
41
+
42
+ ### valuation-basket (17 metrics)
43
+
44
+ | S/N | metric | temporal info | primary | secondary |
45
+ |-----|-----------------------|---------------|---------------|---------------|
46
+ | | **Price & Size** | | | |
47
+ | 1 | Current Price | Market Time | Yahoo Finance | Alpha Vantage |
48
+ | 2 | Market Cap | Market Time | Yahoo Finance | Alpha Vantage |
49
+ | 3 | Enterprise Value | Market Time | Yahoo Finance | Alpha Vantage |
50
+ | | **Earnings Multiples**| | | |
51
+ | 4 | Trailing P/E | Market Time | Yahoo Finance | Alpha Vantage |
52
+ | 5 | Forward P/E | Market Time | Yahoo Finance | Alpha Vantage |
53
+ | 6 | Trailing PEG | Market Time | Yahoo Finance | Alpha Vantage |
54
+ | 7 | Forward PEG | Market Time | Yahoo Finance | Alpha Vantage |
55
+ | | **Revenue Multiples** | | | |
56
+ | 8 | P/S Ratio | Market Time | Yahoo Finance | Alpha Vantage |
57
+ | 9 | EV/Revenue | Market Time | Yahoo Finance | Alpha Vantage |
58
+ | 10 | EV/EBITDA | Market Time | Yahoo Finance | Alpha Vantage |
59
+ | | **Asset Multiples** | | | |
60
+ | 11 | P/B Ratio | Market Time | Yahoo Finance | Alpha Vantage |
61
+ | | **Risk** | | | |
62
+ | 12 | Beta | Market Time | Yahoo Finance | Alpha Vantage |
63
+ | | **Alpha Vantage Only**| | | |
64
+ | 13 | 50 Day Moving Avg | Market Time | Alpha Vantage | - |
65
+ | 14 | 200 Day Moving Avg | Market Time | Alpha Vantage | - |
66
+ | 15 | 52 Week High | Market Time | Alpha Vantage | - |
67
+ | 16 | 52 Week Low | Market Time | Alpha Vantage | - |
68
+ | 17 | Analyst Target Price | Market Time | Alpha Vantage | - |
69
+
70
+ ### volatility-basket (5 metrics)
71
+
72
+ | S/N | metric | temporal info | primary | secondary |
73
+ |-----|-----------------------|---------------|---------------------|---------------|
74
+ | | **Market Indices** | | | |
75
+ | 1 | VIX | Daily | FRED | Yahoo Finance |
76
+ | 2 | VXN | Daily | FRED | - |
77
+ | | **Stock-Specific** | | | |
78
+ | 3 | Beta | 1yr rolling | Yahoo Finance | Alpha Vantage |
79
+ | 4 | Historical Volatility | 30-day | Yahoo Finance | Alpha Vantage |
80
+ | 5 | Implied Volatility | ATM option | Yahoo Finance Options| - |
81
+
82
+ ### macro-basket (4 metrics)
83
+
84
+ | S/N | metric | temporal info | primary | secondary |
85
+ |-----|--------------------|---------------|---------|-----------|
86
+ | 1 | GDP Growth | Quarterly | BEA | FRED |
87
+ | 2 | CPI / Inflation | Monthly | BLS | FRED |
88
+ | 3 | Unemployment Rate | Monthly | BLS | FRED |
89
+ | 4 | Federal Funds Rate | Monthly | FRED | - |
90
+
91
+ ### news-basket (3 sources)
92
+
93
+ | S/N | metric | temporal info | sources (collated) |
94
+ |-----|---------------|---------------|-------------------------------|
95
+ | 1 | News Articles | Real-time | Tavily + NYT + NewsAPI |
96
+
97
+ ### sentiment-basket (2 content sources)
98
+
99
+ | S/N | content | temporal info | source | note |
100
+ |-----|--------------|---------------|---------|-----------------------------------|
101
+ | 1 | Finnhub News | Real-time | Finnhub | Raw articles, VADER applied downstream |
102
+ | 2 | Reddit Posts | Real-time | Reddit | Raw posts, VADER applied downstream |
103
+
104
+ ---
105
+
106
+ ## Content Analysis: Source Cutoffs & Roles
107
+
108
+ ### News Sources (news-basket)
109
+
110
+ | Source | Window | Delay | Role | Content Type | SWOT Value | Rate Limit |
111
+ |--------|--------|-------|------|--------------|------------|------------|
112
+ | Tavily | 7 days | Real-time | Breaking news, immediate coverage | Headlines, snippets | Identifies emerging threats/opportunities | API key required |
113
+ | NYT | 6 days | Real-time | Quality journalism, verified reporting | Full articles | Credible source for major events | Free tier available |
114
+ | NewsAPI | 7 days | 24hr | Analysis, opinion pieces, deep dives | Aggregated articles | Provides context after breaking news settles | 100 req/day (free) |
115
+
116
+ ### Sentiment Sources (sentiment-basket)
117
+
118
+ | Source | Window | Delay | Role | Content Type | SWOT Value | Rate Limit |
119
+ |--------|--------|-------|------|--------------|------------|------------|
120
+ | Finnhub | 7 days | Real-time | Financial news, earnings coverage | Company news articles | Professional/institutional sentiment | Free tier available |
121
+ | Reddit | 7 days | Real-time | Consumer sentiment, retail investor views | Posts, discussions | Grassroots perception, emerging concerns | Public JSON endpoints |
122
+
123
+ ### Temporal Strategy
124
+
125
+ The staggered timing creates complementary coverage:
126
+
127
+ ```
128
+ T+0 hours → Tavily, NYT, Finnhub (Breaking news)
129
+ T+24 hours → NewsAPI (Analysis/opinion pieces)
130
+ T+1 to T+7 → Reddit (Consumer discussion develops)
131
+ ```
132
+
133
+ **Rationale:**
134
+ - Breaking news captures immediate market-moving events
135
+ - Delayed analysis provides deeper context and expert opinions
136
+ - Consumer sentiment lags announcements as discussions develop organically
137
+ - 7-day window balances recency with sufficient volume
138
+
139
+ ---
140
+
141
+ ## API Endpoints
142
+
143
+ | S/N | Source | Base URL | API Key Required |
144
+ |-----|---------------|-----------------------------------------------------|------------------|
145
+ | 1 | SEC EDGAR | `https://data.sec.gov/api/xbrl/` | No |
146
+ | 2 | Yahoo Finance | `https://query1.finance.yahoo.com/` | No |
147
+ | 3 | FRED | `https://api.stlouisfed.org/fred/` | Yes (free) |
148
+ | 4 | BEA | `https://apps.bea.gov/api/data/` | Yes (free) |
149
+ | 5 | BLS | `https://api.bls.gov/publicAPI/v2/timeseries/data/` | Optional (free) |
150
+ | 6 | Alpha Vantage | `https://www.alphavantage.co/query` | Yes (free tier) |
151
+ | 7 | Tavily | `https://api.tavily.com/` | Yes |
152
+ | 8 | NYT | `https://api.nytimes.com/` | Yes (free) |
153
+ | 9 | NewsAPI | `https://newsapi.org/v2/` | Yes (free tier) |
154
+ | 10 | Finnhub | `https://finnhub.io/api/v1/` | Yes (free tier) |
155
+ | 11 | Reddit | `https://oauth.reddit.com/` | Yes (OAuth) |
156
+
157
+ ---
158
+
159
+ ## API Key Environment Variables
160
+
161
+ ```bash
162
+ FRED_API_KEY=your_key
163
+ BEA_API_KEY=your_key
164
+ BLS_API_KEY=your_key
165
+ ALPHA_VANTAGE_API_KEY=your_key
166
+ TAVILY_API_KEY=your_key
167
+ NYT_API_KEY=your_key
168
+ NEWS_API_KEY=your_key
169
+ FINNHUB_API_KEY=your_key
170
+ REDDIT_CLIENT_ID=your_id
171
+ REDDIT_CLIENT_SECRET=your_key
172
+ ```
docs/mcp_normalized_schemas.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP Normalized Output Schemas
2
+
3
+ All 6 MCPs normalized to 3 schema groups for consistent downstream processing.
4
+
5
+ ---
6
+
7
+ ## Group 1: raw_metrics
8
+
9
+ | MCP | Function | Schema |
10
+ |-----|----------|--------|
11
+ | volatility-basket | `get_all_sources_volatility` | `{group, ticker, metrics: {name: {value, source, fallback}}}` |
12
+ | macro-basket | `get_all_sources_macro` | `{group, ticker, metrics: {name: {value, source, fallback}}}` |
13
+
14
+ ---
15
+
16
+ ## Group 2: source_comparison
17
+
18
+ | MCP | Function | Schema |
19
+ | ------------------- | ---------------------------- | --------------------------------------------------------- |
20
+ | fundamentals-basket | `get_all_sources_fundamentals` | `{group, ticker, sources: {source_name: {source, data}}}` |
21
+ | valuation-basket | `get_all_sources_valuation` | `{group, ticker, sources: {source_name: {source, data}}}` |
22
+
23
+ ---
24
+
25
+ ## Group 3: content_analysis
26
+
27
+ | MCP | Function | Schema |
28
+ | ---------------- | --------------------------- | ------------------------------------------------------------------- |
29
+ | news-basket | `get_all_sources_news` | `{group, ticker, items: [{title, content, url, datetime, source}]}` |
30
+ | sentiment-basket | `get_all_sources_sentiment` | `{group, ticker, items: [{title, content, url, datetime, source}]}` |
docs/mcp_output_sample.md ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP Output Sample: NVIDIA (NVDA)
2
+
3
+ Generated: 2026-01-11
4
+
5
+ ## Summary
6
+
7
+ | Field | Value |
8
+ |-------|-------|
9
+ | Ticker | NVDA |
10
+ | Company | NVIDIA Corporation |
11
+ | Sources Available | financials, valuation, volatility, macro, news, sentiment |
12
+ | Sources Failed | None |
13
+
14
+ ---
15
+
16
+ ## Schema Groups
17
+
18
+ ### Group 1: Source Comparison (fundamentals-basket, valuation-basket)
19
+
20
+ Multi-source data with primary/secondary comparison.
21
+
22
+ ```json
23
+ {
24
+ "group": "source_comparison",
25
+ "ticker": "NVDA",
26
+ "sources": {
27
+ "sec_edgar": {
28
+ "source": "SEC EDGAR XBRL",
29
+ "data": { ... }
30
+ },
31
+ "yahoo_finance": {
32
+ "source": "Yahoo Finance",
33
+ "data": { ... }
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ ### Group 2: Raw Metrics (volatility-basket, macro-basket)
40
+
41
+ Single-value metrics without interpretation.
42
+
43
+ ```json
44
+ {
45
+ "group": "raw_metrics",
46
+ "ticker": "NVDA",
47
+ "metrics": {
48
+ "vix": {
49
+ "value": 15.45,
50
+ "source": "FRED (Federal Reserve)",
51
+ "fallback": false
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ ### Group 3: Content Analysis (news-basket, sentiment-basket)
58
+
59
+ Raw content items without scoring.
60
+
61
+ ```json
62
+ {
63
+ "group": "content_analysis",
64
+ "ticker": "NVDA",
65
+ "items": [
66
+ {
67
+ "title": "...",
68
+ "content": "...",
69
+ "url": "...",
70
+ "datetime": "2026-01-09T20:05:00Z",
71
+ "source": "Yahoo Entertainment"
72
+ }
73
+ ]
74
+ }
75
+ ```
76
+
77
+ ---
78
+
79
+ ## Fundamentals (source_comparison)
80
+
81
+ ### SEC EDGAR Data
82
+
83
+ | Metric | Value | Fiscal Year | Form |
84
+ |--------|-------|-------------|------|
85
+ | Revenue | $26.9B | 2022 | 10-K |
86
+ | Net Income | $72.9B | 2025 | 10-K |
87
+ | Gross Profit | $97.9B | 2025 | 10-K |
88
+ | Operating Income | $81.5B | 2025 | 10-K |
89
+ | Total Assets | $111.6B | 2025 | 10-K |
90
+ | Total Liabilities | $32.3B | 2025 | 10-K |
91
+ | Stockholders Equity | $79.3B | 2025 | 10-K |
92
+ | Long Term Debt | $8.5B | 2025 | 10-K |
93
+ | Cash | $8.6B | 2025 | 10-K |
94
+ | Debt to Equity | 0.11 | 2025 | 10-K |
95
+ | Operating Cash Flow | $64.1B | 2025 | 10-K |
96
+ | Free Cash Flow | $64.0B | 2025 | 10-K |
97
+ | R&D Expense | $12.9B | 2025 | 10-K |
98
+
99
+ ### Yahoo Finance Data
100
+
101
+ | Metric | Value |
102
+ |--------|-------|
103
+ | Revenue | $187.1B |
104
+ | Net Income | $99.2B |
105
+ | Gross Profit | $131.1B |
106
+ | Gross Margin | 70.05% |
107
+ | Net Margin | 53.01% |
108
+ | Total Debt | $10.8B |
109
+ | Cash | $60.6B |
110
+ | Net Debt | -$49.8B |
111
+ | Operating Cash Flow | $83.2B |
112
+ | Free Cash Flow | $53.3B |
113
+
114
+ ---
115
+
116
+ ## Valuation (source_comparison)
117
+
118
+ ### Yahoo Finance vs Alpha Vantage
119
+
120
+ | Metric | Yahoo Finance | Alpha Vantage |
121
+ |--------|---------------|---------------|
122
+ | Current Price | $184.86 | $186.70 |
123
+ | Market Cap | $4.50T | $4.50T |
124
+ | Enterprise Value | $4.44T | - |
125
+ | Trailing P/E | 45.64 | 45.64 |
126
+ | Forward P/E | 24.37 | 24.21 |
127
+ | P/S Ratio | 24.05 | 24.05 |
128
+ | P/B Ratio | 37.79 | 37.83 |
129
+ | EV/EBITDA | 39.42 | 37.34 |
130
+ | Trailing PEG | 0.70 | 0.70 |
131
+ | Forward PEG | 0.37 | - |
132
+ | Earnings Growth | 66.7% | 66.7% |
133
+ | Revenue Growth | 62.5% | 62.5% |
134
+
135
+ ---
136
+
137
+ ## Volatility (raw_metrics)
138
+
139
+ | Metric | Value | Source | Fallback |
140
+ |--------|-------|--------|----------|
141
+ | VIX | 15.45 | FRED (Federal Reserve) | No |
142
+ | VXN | 20.15 | FRED (Federal Reserve) | No |
143
+ | Beta | 1.929 | Calculated from Yahoo Finance | No |
144
+ | Historical Volatility | 27.72% | Calculated from Yahoo Finance | No |
145
+ | Implied Volatility | 30.0% | Market Average (estimated) | Yes |
146
+
147
+ ---
148
+
149
+ ## Macro (raw_metrics)
150
+
151
+ | Metric | Value | Source | Fallback |
152
+ | ------------- | ----- | --------------------------------- | -------- |
153
+ | GDP Growth | 4.3% | BEA (Bureau of Economic Analysis) | No |
154
+ | Interest Rate | 3.72% | FRED (Federal Reserve) | No |
155
+ | CPI Inflation | 2.74% | BLS (Bureau of Labor Statistics) | No |
156
+ | Unemployment | 4.4% | BLS (Bureau of Labor Statistics) | No |
157
+
158
+ ---
159
+
160
+ ## News (content_analysis)
161
+
162
+ **Sources Configured:** Tavily, NYT, NewsAPI
163
+ **Sources Used:** Tavily, NewsAPI
164
+ **Item Count:** 7
165
+ **Time Window:** 7 days
166
+
167
+ ### Tavily (4 items)
168
+
169
+ | Title | Date |
170
+ |-------|------|
171
+ | NVIDIA: NVDA Stock Price Quote & News | - |
172
+ | NVDA - NVIDIA Corporation Stock Price | - |
173
+ | NVIDIA CORPORATION (NVDA) Stock, Price, News | - |
174
+ | NVDA Stock Quote Price and Forecast | - |
175
+
176
+ ### NYT (5 items)
177
+
178
+ | Title | Date |
179
+ |-------|------|
180
+ | Google Guys Say Bye to California | 2026-01-09 |
181
+ | China Is Investigating Meta's Latest A.I. Acquisition | 2026-01-08 |
182
+ | Elon Musk's xAI Raises $20 Billion | 2026-01-06 |
183
+ | The Rush to Profit From Maduro's Capture | 2026-01-06 |
184
+ | Nvidia Details New A.I. Chips and Autonomous Car Project With Mercedes | 2026-01-05 |
185
+
186
+ ### NewsAPI (3 items)
187
+
188
+ | Title | Date |
189
+ |-------|------|
190
+ | Micron vs. NVIDIA: One AI Chip Stock is Poised to Win Big in 2026 | 2026-01-09 |
191
+ | NVIDIA (NVDA)'s Gonna Have a Great Q1, Says Jim Cramer | 2026-01-09 |
192
+ | Jim Cramer on NVIDIA: "It's Insanely Cheap" | 2026-01-09 |
193
+
194
+ ---
195
+
196
+ ## Sentiment (content_analysis)
197
+
198
+ **Sources Configured:** Finnhub, Reddit
199
+ **Sources Used:** Finnhub, Reddit
200
+ **Item Count:** 66
201
+ **Time Window:** 7 days
202
+
203
+ ### Finnhub (50 items)
204
+
205
+ | Title | Date |
206
+ |-------|------|
207
+ | AI Reset Is Complete; Tech's Next Leg Starts Here | 2026-01-10 |
208
+ | How BlackRock is fine-tuning market portfolios for 2026 | 2026-01-10 |
209
+ | Super Micro Computer: Commoditization Continues | 2026-01-10 |
210
+ | NVIDIA Discusses Rubin and Blackwell Performance Advancements | 2026-01-10 |
211
+ | Wall Street's start to 2026 is going exactly according to plan | 2026-01-10 |
212
+ | Behind Anthropic's stunning growth is a sibling team | 2026-01-10 |
213
+ | Are we in an AI bubble? What 40 tech leaders are saying | 2026-01-10 |
214
+ | What Moved Markets This Week | 2026-01-10 |
215
+ | AI memory is sold out, causing an unprecedented surge in prices | 2026-01-10 |
216
+ | Prediction: 2 Ways To Capitalize on AI Stocks in 2026 | 2026-01-10 |
217
+
218
+ ### Reddit (16 items)
219
+
220
+ | Title | Subreddit | Date |
221
+ |-------|-----------|------|
222
+ | What's the most unexpected stock tip you got? | r/stocks | 2026-01-09 |
223
+ | tough year 2025 | r/wallstreetbets | 2026-01-09 |
224
+ | r/Stocks Daily Discussion & Options Trading Thursday | r/stocks | 2026-01-08 |
225
+ | China to Approve Nvidia H200 Purchases | r/wallstreetbets | 2026-01-08 |
226
+ | Reddit's Top Stocks 2026 ETF Experiment | r/stocks | 2026-01-08 |
227
+ | NVDA 125k margin | r/wallstreetbets | 2026-01-07 |
228
+ | Going balls deep on GOOG thanks to insiders on Polymarket | r/wallstreetbets | 2026-01-07 |
229
+ | What are your top stock picks for 2026? | r/stocks | 2026-01-06 |
230
+ | Uber, Lyft Surge Following Nvidia's Self-Driving Tech Announcement | r/stocks | 2026-01-06 |
231
+ | Nvidia launches Vera Rubin AI platform at CES 2026 | r/wallstreetbets | 2026-01-06 |
232
+
233
+ ---
234
+
235
+ ## Conflict Resolution
236
+
237
+ | Source Type | Primary | Secondary | Conflicts |
238
+ |-------------|---------|-----------|-----------|
239
+ | Financials | SEC EDGAR XBRL | Yahoo Finance | None |
240
+ | Valuation | Yahoo Finance | Alpha Vantage | None |
241
+
242
+ ---
243
+
244
+ ## Raw JSON Output
245
+
246
+ Full output available at: `/home/vn6295337/.claude/projects/-home-vn6295337-Instant-SWOT-Agent/e881431f-b90d-45c5-88a2-e0b36ca052f8/tool-results/toolu_01PUcLHKRRs9HwWYvdhQWrmb.txt`
docs/mcp_output_visa.md ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP Output: Visa (V)
2
+
3
+ Generated: 2026-01-11
4
+
5
+ > Schemas defined in `configs/output_schemas.py`
6
+
7
+ ---
8
+
9
+ ## Quantitative Data
10
+
11
+ | Metric | Value | Data Type | As Of | Filed | Source | Category |
12
+ | --------------------- | -------- | ------------- | ------------- | ---------- | -------------- | ------------ |
13
+ | Revenue | $40.00B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
14
+ | Net Income | $20.06B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
15
+ | Operating Income | $23.99B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
16
+ | Operating Margin | 59.98% | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
17
+ | Net Margin | 50.14% | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
18
+ | Total Assets | $99.63B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
19
+ | Total Liabilities | $61.72B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
20
+ | Stockholders Equity | $26.44B | FY | 2011-09-30 | 2011-11-18 | SEC EDGAR | Fundamentals |
21
+ | Long Term Debt | $20.98B | FY | 2021-09-30 | 2021-11-18 | SEC EDGAR | Fundamentals |
22
+ | Total Debt | $25.17B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
23
+ | Debt to Equity | 0.95 | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
24
+ | Operating Cash Flow | $23.06B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
25
+ | Free Cash Flow | $23.00B | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
26
+ | Revenue Growth (3yr) | 14.34% | FY | 2025-09-30 | 2025-11-06 | SEC EDGAR | Fundamentals |
27
+ | Revenue | $40.00B | TTM | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
28
+ | Net Income | $19.85B | TTM | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
29
+ | Gross Profit | $39.11B | TTM | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
30
+ | Gross Margin | 97.76% | TTM | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
31
+ | Net Margin | 49.63% | TTM | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
32
+ | Total Debt | $26.08B | Point-in-time | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
33
+ | Cash | $19.00B | Point-in-time | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
34
+ | Net Debt | $7.09B | Point-in-time | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
35
+ | Operating Cash Flow | $23.06B | TTM | 2025-09-30 | 2026-01-09 | Yahoo Finance | Fundamentals |
36
+ | Current Price | $349.77 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
37
+ | Market Cap | $675.02B | - | 2026-01-09 | - | Yahoo Finance | Valuation |
38
+ | Enterprise Value | $677.39B | - | 2026-01-09 | - | Yahoo Finance | Valuation |
39
+ | Trailing P/E | 34.26 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
40
+ | Forward P/E | 24.25 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
41
+ | P/S Ratio | 16.88 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
42
+ | P/B Ratio | 18.05 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
43
+ | EV/EBITDA | 24.17 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
44
+ | Trailing PEG | 1.92 | - | 2026-01-09 | - | Yahoo Finance | Valuation |
45
+ | Earnings Growth | -1.4% | - | 2026-01-09 | - | Yahoo Finance | Valuation |
46
+ | Revenue Growth | 11.5% | - | 2026-01-09 | - | Yahoo Finance | Valuation |
47
+ | Current Price (50DMA) | $339.81 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
48
+ | Market Cap | $675.02B | - | 2026-01-09 | - | Alpha Vantage | Valuation |
49
+ | Trailing P/E | 34.26 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
50
+ | Forward P/E | 27.32 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
51
+ | P/S Ratio | 16.88 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
52
+ | P/B Ratio | 18.15 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
53
+ | EV/EBITDA | 26.20 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
54
+ | Trailing PEG | 1.92 | - | 2026-01-09 | - | Alpha Vantage | Valuation |
55
+ | VIX | 15.45 | Daily | 2026-01-08 | - | FRED | Volatility |
56
+ | VXN | 20.15 | Daily | 2026-01-08 | - | FRED | Volatility |
57
+ | Beta | 0.79 | 1Y | 2026-01-09 | - | Yahoo Finance | Volatility |
58
+ | Historical Volatility | 22.16% | 30D | 2026-01-09 | - | Yahoo Finance | Volatility |
59
+ | Implied Volatility | 30.00% | Forward | 2026-01-11 | - | Market Average | Volatility |
60
+ | GDP Growth | 4.30% | Quarterly | 2025Q3 | - | BEA | Macro |
61
+ | Interest Rate | 3.72% | Monthly | 2025-12-01 | - | FRED | Macro |
62
+ | CPI Inflation | 2.74% | Monthly | 2025-November | - | BLS | Macro |
63
+ | Unemployment | 4.40% | Monthly | 2025-December | - | BLS | Macro |
64
+
65
+ ---
66
+
67
+ ## Qualitative Data
68
+
69
+ **News Sources:** Tavily, NewsAPI (filtered to business/finance/tech domains)
70
+ **Sentiment Sources:** Finnhub, Reddit
71
+ **Item Count:** 64 (News: 6, Sentiment: 58)
72
+ **Time Window:** 7 days
73
+
74
+ | Title | Date | Source | Subreddit | URL | Category |
75
+ | ---------------------------------------------------------------------------------------- | ---------- | ------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- |
76
+ | Big Tech stocks are getting cheaper, and that could mean gains of up to 60% | 2025-12-16 | MarketWatch | - | [Link](https://www.marketwatch.com/story/big-tech-stocks-are-getting-cheaper-and-that-could-mean-gains-of-up-to-60-fdf1b70c) | News |
77
+ | Dow, S&P 500 end at records because investors feel good about the economy | 2025-12-11 | MarketWatch | - | [Link](https://www.marketwatch.com/story/dow-s-p-500-end-at-records-because-investors-feel-good-about-the-economy-beyond-the-ai-boom-0dcad0b9) | News |
78
+ | V: Visa Inc - Stock Price, Quote and News | - | CNBC | - | [Link](https://www.cnbc.com/quotes/V) | News |
79
+ | V Stock Price - Visa Inc. Cl A Stock Quote (U.S.: NYSE) | - | MarketWatch | - | [Link](https://www.marketwatch.com/investing/stock/v) | News |
80
+ | Why Visa Stock Could Be A Strong Portfolio Add | - | Forbes | - | [Link](https://www.forbes.com/sites/greatspeculations/2026/01/09/why-visa-stock-could-be-a-strong-portfolio-add/) | News |
81
+ | Visa Inc. (V) Interactive Stock Chart | - | Yahoo Finance | - | [Link](https://ca.finance.yahoo.com/quote/V/chart/) | News |
82
+ | Googl gains | 2026-01-11 | Reddit | r/wallstreetbets | [Link](https://reddit.com/r/wallstreetbets/comments/1q9r6es/googl_gains/) | Sentiment |
83
+ | Oklo ride to 1000$ | 2026-01-10 | Reddit | r/wallstreetbets | [Link](https://reddit.com/r/wallstreetbets/comments/1q9b1qx/oklo_ride_to_1000/) | Sentiment |
84
+ | 5 Things That Won't Happen In 2026 (The Alpha Of Inertia) | 2026-01-10 | Finnhub | - | [Link](https://finnhub.io/api/news?id=dc02cc7e318de2d458d5b92b23ef870ba3ca8e58c355af40624245a0a5104aac) | Sentiment |
85
+ | Rain Raises $250 Million at $1.95 Billion Valuation for Stablecoin Payments Expansion | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=5b4865a899c398090c883407215234a2257358b44e7887e6273245102ea078e3) | Sentiment |
86
+ | Visa's Tokenization Push Is Becoming More Than a Security Play | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=6a13ef2d88f1a76f3e9aa488ff8145e902e35a956e8d738a011cb308c46e00bc) | Sentiment |
87
+ | Circle's Non-Interest Revenues Accelerate: Can the Momentum Continue? | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=1289ce4bcc1cdc2007ebf983c1432f188ec44e19f416675d57c7840935a79e3a) | Sentiment |
88
+ | Mastercard Up 7.6% in a Month: Are Investors Looking Beyond AI Hype? | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=1f8cda21dfecdb07398c4a91e6db2482c248150caeb8f6e60fa8c75a5dba1866) | Sentiment |
89
+ | The Influencer Marketing Factory Unveils Season 6 of "The Influence Factor" Podcast | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=2d14c9529412c1c8e935a931fc5a332c7d5348f12652408c956d87fd2f6d3c10) | Sentiment |
90
+ | Fiserv: Potentially In A Bottoming Process | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=a1e7f5530265f365630da945e31e0b63dd4badff90a7accd50a181ce8ead81b7) | Sentiment |
91
+ | Why is Mastercard Incorporated (MA) One of the Best Major Stocks to Invest in Right Now? | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=8bd58b88bae91ac0c493840cb9b9f851b4fdf1b61c6ec880020ad51e4ebc2a04) | Sentiment |
docs/mcp_raw_visa.json ADDED
@@ -0,0 +1,939 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "ticker": "V",
3
+ "company_name": "Visa Inc.",
4
+ "sources_available": [
5
+ "financials",
6
+ "valuation",
7
+ "volatility",
8
+ "macro",
9
+ "news",
10
+ "sentiment"
11
+ ],
12
+ "sources_failed": [],
13
+ "metrics": {
14
+ "financials": {
15
+ "group": "source_comparison",
16
+ "ticker": "V",
17
+ "sources": {
18
+ "sec_edgar": {
19
+ "source": "SEC EDGAR XBRL",
20
+ "data": {
21
+ "financials": {
22
+ "ticker": "V",
23
+ "source": "SEC EDGAR XBRL",
24
+ "as_of": "2026-01-11",
25
+ "revenue": {
26
+ "value": 40000000000,
27
+ "data_type": "FY",
28
+ "end_date": "2025-09-30",
29
+ "filed": "2025-11-06",
30
+ "fiscal_year": 2025,
31
+ "form": "10-K"
32
+ },
33
+ "net_income": {
34
+ "value": 20058000000,
35
+ "data_type": "FY",
36
+ "end_date": "2025-09-30",
37
+ "filed": "2025-11-06",
38
+ "fiscal_year": 2025,
39
+ "form": "10-K"
40
+ },
41
+ "operating_income": {
42
+ "value": 23994000000,
43
+ "data_type": "FY",
44
+ "end_date": "2025-09-30",
45
+ "filed": "2025-11-06",
46
+ "fiscal_year": 2025,
47
+ "form": "10-K"
48
+ },
49
+ "operating_margin_pct": {
50
+ "value": 59.98,
51
+ "data_type": "FY",
52
+ "end_date": "2025-09-30",
53
+ "filed": "2025-11-06",
54
+ "fiscal_year": 2025,
55
+ "form": "10-K"
56
+ },
57
+ "net_margin_pct": {
58
+ "value": 50.14,
59
+ "data_type": "FY",
60
+ "end_date": "2025-09-30",
61
+ "filed": "2025-11-06",
62
+ "fiscal_year": 2025,
63
+ "form": "10-K"
64
+ },
65
+ "revenue_growth_3yr": {
66
+ "value": 14.34,
67
+ "data_type": "FY",
68
+ "end_date": "2025-09-30",
69
+ "filed": "2025-11-06",
70
+ "fiscal_year": 2025,
71
+ "form": "10-K"
72
+ },
73
+ "total_assets": {
74
+ "value": 99627000000,
75
+ "data_type": "FY",
76
+ "end_date": "2025-09-30",
77
+ "filed": "2025-11-06",
78
+ "fiscal_year": 2025,
79
+ "form": "10-K"
80
+ },
81
+ "total_liabilities": {
82
+ "value": 61718000000,
83
+ "data_type": "FY",
84
+ "end_date": "2025-09-30",
85
+ "filed": "2025-11-06",
86
+ "fiscal_year": 2025,
87
+ "form": "10-K"
88
+ },
89
+ "stockholders_equity": {
90
+ "value": 26437000000,
91
+ "data_type": "FY",
92
+ "end_date": "2011-09-30",
93
+ "filed": "2011-11-18",
94
+ "fiscal_year": 2011,
95
+ "form": "10-K"
96
+ }
97
+ },
98
+ "debt": {
99
+ "ticker": "V",
100
+ "source": "SEC EDGAR XBRL",
101
+ "as_of": "2026-01-11",
102
+ "long_term_debt": {
103
+ "value": 20977000000,
104
+ "data_type": "FY",
105
+ "end_date": "2021-09-30",
106
+ "filed": "2021-11-18",
107
+ "fiscal_year": 2021,
108
+ "form": "10-K"
109
+ },
110
+ "total_debt": {
111
+ "value": 25171000000,
112
+ "data_type": "FY",
113
+ "end_date": "2025-09-30",
114
+ "filed": "2025-11-06",
115
+ "fiscal_year": 2025,
116
+ "form": "10-K"
117
+ },
118
+ "cash": {
119
+ "value": 17164000000,
120
+ "data_type": "FY",
121
+ "end_date": "2025-09-30",
122
+ "filed": "2025-11-06",
123
+ "fiscal_year": 2025,
124
+ "form": "10-K"
125
+ },
126
+ "net_debt": {
127
+ "value": 8007000000,
128
+ "data_type": "FY",
129
+ "end_date": "2025-09-30",
130
+ "filed": "2025-11-06",
131
+ "fiscal_year": 2025,
132
+ "form": "10-K"
133
+ },
134
+ "debt_to_equity": {
135
+ "value": 0.95,
136
+ "data_type": "FY",
137
+ "end_date": "2025-09-30",
138
+ "filed": "2025-11-06",
139
+ "fiscal_year": 2025,
140
+ "form": "10-K"
141
+ }
142
+ },
143
+ "cash_flow": {
144
+ "ticker": "V",
145
+ "source": "SEC EDGAR XBRL",
146
+ "as_of": "2026-01-11",
147
+ "operating_cash_flow": {
148
+ "value": 23059000000,
149
+ "data_type": "FY",
150
+ "end_date": "2025-09-30",
151
+ "filed": "2025-11-06",
152
+ "fiscal_year": 2025,
153
+ "form": "10-K"
154
+ },
155
+ "capital_expenditure": {
156
+ "value": 59000000,
157
+ "data_type": "FY",
158
+ "end_date": "2025-09-30",
159
+ "filed": "2025-11-06",
160
+ "fiscal_year": 2025,
161
+ "form": "10-K"
162
+ },
163
+ "free_cash_flow": {
164
+ "value": 23000000000,
165
+ "data_type": "FY",
166
+ "end_date": "2025-09-30",
167
+ "filed": "2025-11-06",
168
+ "fiscal_year": 2025,
169
+ "form": "10-K"
170
+ }
171
+ }
172
+ }
173
+ },
174
+ "yahoo_finance": {
175
+ "source": "Yahoo Finance",
176
+ "data": {
177
+ "financials": {
178
+ "ticker": "V",
179
+ "source": "Yahoo Finance",
180
+ "as_of": "2026-01-11",
181
+ "revenue": {
182
+ "value": 40000000000,
183
+ "data_type": "TTM",
184
+ "end_date": "2025-09-30",
185
+ "filed": "2026-01-09"
186
+ },
187
+ "net_income": {
188
+ "value": 19853000704,
189
+ "data_type": "TTM",
190
+ "end_date": "2025-09-30",
191
+ "filed": "2026-01-09"
192
+ },
193
+ "gross_profit": {
194
+ "value": 39105998848,
195
+ "data_type": "TTM",
196
+ "end_date": "2025-09-30",
197
+ "filed": "2026-01-09"
198
+ },
199
+ "gross_margin_pct": {
200
+ "value": 97.76,
201
+ "data_type": "TTM",
202
+ "end_date": "2025-09-30",
203
+ "filed": "2026-01-09"
204
+ },
205
+ "net_margin_pct": {
206
+ "value": 49.63,
207
+ "data_type": "TTM",
208
+ "end_date": "2025-09-30",
209
+ "filed": "2026-01-09"
210
+ }
211
+ },
212
+ "debt": {
213
+ "ticker": "V",
214
+ "source": "Yahoo Finance",
215
+ "as_of": "2026-01-11",
216
+ "total_debt": {
217
+ "value": 26083999744,
218
+ "data_type": "Point-in-time",
219
+ "end_date": "2025-09-30",
220
+ "filed": "2026-01-09"
221
+ },
222
+ "cash": {
223
+ "value": 18997000192,
224
+ "data_type": "Point-in-time",
225
+ "end_date": "2025-09-30",
226
+ "filed": "2026-01-09"
227
+ },
228
+ "net_debt": {
229
+ "value": 7086999552,
230
+ "data_type": "Point-in-time",
231
+ "end_date": "2025-09-30",
232
+ "filed": "2026-01-09"
233
+ }
234
+ },
235
+ "cash_flow": {
236
+ "ticker": "V",
237
+ "source": "Yahoo Finance",
238
+ "as_of": "2026-01-11",
239
+ "operating_cash_flow": {
240
+ "value": 23058999296,
241
+ "data_type": "TTM",
242
+ "end_date": "2025-09-30",
243
+ "filed": "2026-01-09"
244
+ },
245
+ "free_cash_flow": {
246
+ "value": 20072873984,
247
+ "data_type": "TTM",
248
+ "end_date": "2025-09-30",
249
+ "filed": "2026-01-09"
250
+ }
251
+ }
252
+ }
253
+ }
254
+ },
255
+ "source": "fundamentals-basket",
256
+ "as_of": "2026-01-11"
257
+ },
258
+ "valuation": {
259
+ "group": "source_comparison",
260
+ "ticker": "V",
261
+ "sources": {
262
+ "yahoo_finance": {
263
+ "source": "Yahoo Finance",
264
+ "regular_market_time": "2026-01-09",
265
+ "data": {
266
+ "current_price": 349.77,
267
+ "market_cap": 675020144640.0,
268
+ "enterprise_value": 677386649600.0,
269
+ "trailing_pe": 34.25759,
270
+ "forward_pe": 24.254278,
271
+ "ps_ratio": 16.875504,
272
+ "pb_ratio": 18.046125,
273
+ "ev_ebitda": 24.168,
274
+ "trailing_peg": 1.9228,
275
+ "forward_peg": null,
276
+ "earnings_growth": -0.014,
277
+ "revenue_growth": 0.115
278
+ }
279
+ },
280
+ "alpha_vantage": {
281
+ "source": "Alpha Vantage",
282
+ "latest_quarter": "2025-09-30",
283
+ "fetched_at": "2026-01-09",
284
+ "data": {
285
+ "current_price": 339.81,
286
+ "market_cap": 675020145000.0,
287
+ "trailing_pe": 34.26,
288
+ "forward_pe": 27.32,
289
+ "ps_ratio": 16.88,
290
+ "pb_ratio": 18.15,
291
+ "ev_ebitda": 26.2,
292
+ "trailing_peg": 1.923,
293
+ "earnings_growth": -0.014,
294
+ "revenue_growth": 0.115
295
+ }
296
+ }
297
+ },
298
+ "source": "valuation-basket",
299
+ "as_of": "2026-01-11"
300
+ },
301
+ "volatility": {
302
+ "group": "raw_metrics",
303
+ "ticker": "V",
304
+ "metrics": {
305
+ "vix": {
306
+ "value": 15.45,
307
+ "data_type": "Daily",
308
+ "as_of": "2026-01-08",
309
+ "source": "FRED (Federal Reserve)",
310
+ "fallback": false
311
+ },
312
+ "vxn": {
313
+ "value": 20.15,
314
+ "data_type": "Daily",
315
+ "as_of": "2026-01-08",
316
+ "source": "FRED (Federal Reserve)",
317
+ "fallback": false
318
+ },
319
+ "beta": {
320
+ "value": 0.785,
321
+ "data_type": "1Y",
322
+ "as_of": "2026-01-09",
323
+ "source": "Calculated from Yahoo Finance data",
324
+ "fallback": false
325
+ },
326
+ "historical_volatility": {
327
+ "value": 22.16,
328
+ "data_type": "30D",
329
+ "as_of": "2026-01-09",
330
+ "source": "Calculated from Yahoo Finance data",
331
+ "fallback": false
332
+ },
333
+ "implied_volatility": {
334
+ "value": 30.0,
335
+ "data_type": "Forward",
336
+ "as_of": "2026-01-11",
337
+ "source": "Market Average (estimated)",
338
+ "fallback": true
339
+ }
340
+ },
341
+ "source": "volatility-basket",
342
+ "as_of": "2026-01-11"
343
+ },
344
+ "macro": {
345
+ "group": "raw_metrics",
346
+ "ticker": "MACRO",
347
+ "metrics": {
348
+ "gdp_growth": {
349
+ "value": 4.3,
350
+ "data_type": "Quarterly",
351
+ "as_of": "2025Q3",
352
+ "source": "BEA (Bureau of Economic Analysis)",
353
+ "fallback": false
354
+ },
355
+ "interest_rate": {
356
+ "value": 3.72,
357
+ "data_type": "Monthly",
358
+ "as_of": "2025-12-01",
359
+ "source": "FRED (Federal Reserve)",
360
+ "fallback": false
361
+ },
362
+ "cpi_inflation": {
363
+ "value": 2.74,
364
+ "data_type": "Monthly",
365
+ "as_of": "2025-November",
366
+ "source": "BLS (Bureau of Labor Statistics)",
367
+ "fallback": false
368
+ },
369
+ "unemployment": {
370
+ "value": 4.4,
371
+ "data_type": "Monthly",
372
+ "as_of": "2025-December",
373
+ "source": "BLS (Bureau of Labor Statistics)",
374
+ "fallback": false
375
+ }
376
+ },
377
+ "source": "macro-basket",
378
+ "as_of": "2026-01-11"
379
+ },
380
+ "news": {
381
+ "group": "content_analysis",
382
+ "ticker": "V",
383
+ "query": "Visa Inc. (V) stock news",
384
+ "items": [
385
+ {
386
+ "title": "Big Tech stocks are getting cheaper, and that could mean gains of up to 60%",
387
+ "content": "S 500 stocks may be expensive relative to their historical averages, but many are cheaper than they were at the start of the quarter.",
388
+ "url": "https://www.marketwatch.com/story/big-tech-stocks-are-getting-cheaper-and-that-could-mean-gains-of-up-to-60-fdf1b70c",
389
+ "datetime": "2025-12-16",
390
+ "source": "MarketWatch"
391
+ },
392
+ {
393
+ "title": "Dow, S&P 500 end at records because investors feel good about the economy \u2014 beyond the AI boom",
394
+ "content": "Investors were moving away from tech stocks, and using that money to push other parts of the market to new records",
395
+ "url": "https://www.marketwatch.com/story/dow-s-p-500-end-at-records-because-investors-feel-good-about-the-economy-beyond-the-ai-boom-0dcad0b9",
396
+ "datetime": "2025-12-11",
397
+ "source": "MarketWatch"
398
+ },
399
+ {
400
+ "title": "V: Visa Inc - Stock Price, Quote and News",
401
+ "content": "# Visa Inc V:NYSE. * 52 Week High Date06/11/25. * 52 Week Low Date04/07/25. ## Latest On Visa Inc. * CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and VisaCNBC.com. And payment giants are preparingCNBC.com. * Economy grows, chip tariff delay, new S&P 500 record and more in Morning SquawkCNBC.com. ## Latest On Visa Inc. * CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and VisaCNBC.com. And payment giants are preparingCNBC.com. * 52 Week High Date06/11/25. * 52 Week Low Date04/07/25. * P/E (TTM)34.66. * Earnings Date01/28/2026(est). * When Stock Recovery Defeats Securities Fraud Claims: The Visa DecisionTipRanks. * Monness Keeps Their Hold Rating on Visa (V)\")TipRanks. * Visa Stock Stumbles While Its Crypto Card Network Sees 525% Volume ExplosionTipRanks. * Visa Updates Class B Conversion Rates After Escrow DepositTipRanks. CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and Visa. Visa Inc. is a global payments technology company. Vice Chairman, Chief People and Corporate Affairs Officer and Corporate Secretary. Independent Chairman of the Board.",
402
+ "url": "https://www.cnbc.com/quotes/V",
403
+ "datetime": null,
404
+ "source": null
405
+ },
406
+ {
407
+ "title": "V Stock Price | Visa Inc. Cl A Stock Quote (U.S.: NYSE)",
408
+ "content": "Key Data. Open $352.16; Day Range 349.16 - 354.70; 52 Week Range 299.00 - 375.51; Market Cap $668.84B; Shares Outstanding 1.69B; Public Float 1.68B",
409
+ "url": "https://www.marketwatch.com/investing/stock/v",
410
+ "datetime": null,
411
+ "source": null
412
+ },
413
+ {
414
+ "title": "Why Visa Stock Could Be A Strong Portfolio Add",
415
+ "content": "Image 1: Is UPS Stock A Buy After The Recent Rally? Image 3: Nvidia Vs Broadcom: Which AI Stock To Bet On? Jan 09, 2026, 08:57am ESTNvidia Vs Broadcom: Which AI Stock To Bet On? Image 5: How T-Mobile Stock Becomes A Cash Machine. Jan 09, 2026, 07:00am ESTHow T-Mobile Stock Becomes A Cash Machine. Image 6: Apple Stock\u2019s Make-Or-Break AI Bet. Jan 09, 2026, 06:30am ESTApple Stock\u2019s Make-Or-Break AI Bet. Image 7: Up 20% Will Cardano (ADA) Keep Rising? Why Visa Stock Could Be A Strong Portfolio Add. Forbes contributors publish independent expert analyses and insights. Visa (V) stock could be an appealing purchase at this time. Stocks can decline even when markets are performing well \u2013 consider events such as earnings reports, business updates, and outlook modifications. Forbes Daily: Join over 1 million Forbes Daily subscribers and get our best stories, exclusive reporting and essential analysis of the day\u2019s news in your inbox every weekday.",
416
+ "url": "https://www.forbes.com/sites/greatspeculations/2026/01/09/why-visa-stock-could-be-a-strong-portfolio-add/",
417
+ "datetime": null,
418
+ "source": null
419
+ },
420
+ {
421
+ "title": "Visa Inc. (V) Interactive Stock Chart",
422
+ "content": "Recent News: V \u00b7 Rain Raises $250 Million at $1.95 Billion Valuation for Stablecoin Payments Expansion \u00b7 Visa's Tokenization Push Is Becoming More Than a Security",
423
+ "url": "https://ca.finance.yahoo.com/quote/V/chart/",
424
+ "datetime": null,
425
+ "source": null
426
+ }
427
+ ],
428
+ "item_count": 6,
429
+ "sources_used": [
430
+ "Tavily",
431
+ "NewsAPI"
432
+ ],
433
+ "source": "news-basket",
434
+ "as_of": "2026-01-11",
435
+ "total_items": 6,
436
+ "showing": 6
437
+ },
438
+ "sentiment": {
439
+ "group": "content_analysis",
440
+ "ticker": "V",
441
+ "items": [
442
+ {
443
+ "title": "Googl gains",
444
+ "content": "Bought after 2025 February earnings, doubled down in April dip, some more in May dip. Started with 60k. \n\nSold lots of weeklies to you regards against my long calls; just closed my position. \n\nWill dip my legs into goog again for the next run to $400. \n\nMicro contributors - aapl in Jan, Msft in May; avgo after earnings and MU. ",
445
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q9r6es/googl_gains/",
446
+ "datetime": "2026-01-11",
447
+ "source": "Reddit",
448
+ "subreddit": "r/wallstreetbets"
449
+ },
450
+ {
451
+ "title": "5 Things That Won't Happen In 2026 (The Alpha Of Inertia)",
452
+ "content": "This article lays out five slow-moving certainties for 2026 that investors can lean on. Click here to read more.",
453
+ "url": "https://finnhub.io/api/news?id=dc02cc7e318de2d458d5b92b23ef870ba3ca8e58c355af40624245a0a5104aac",
454
+ "datetime": "2026-01-10",
455
+ "source": "Finnhub",
456
+ "subreddit": null
457
+ },
458
+ {
459
+ "title": "Oklo ride to 1000$",
460
+ "content": "Call me skeptical boys but after losing a 160k I am going to let this ride to the moon. Not going to take profits until expiration. Diamond hands \ud83d\udc8e\ud83d\ude4c Let\u2019s see how much this can make me..",
461
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q9b1qx/oklo_ride_to_1000/",
462
+ "datetime": "2026-01-10",
463
+ "source": "Reddit",
464
+ "subreddit": "r/wallstreetbets"
465
+ },
466
+ {
467
+ "title": "Rain Raises $250 Million at $1.95 Billion Valuation for Stablecoin Payments Expansion",
468
+ "content": "ICONIQ led the round as Rain targets growth across the Americas, Europe, Asia and Africa.",
469
+ "url": "https://finnhub.io/api/news?id=5b4865a899c398090c883407215234a2257358b44e7887e6273245102ea078e3",
470
+ "datetime": "2026-01-09",
471
+ "source": "Finnhub",
472
+ "subreddit": null
473
+ },
474
+ {
475
+ "title": "Visa's Tokenization Push Is Becoming More Than a Security Play",
476
+ "content": "V's tokenization push is evolving beyond security, boosting transaction efficiency, AI-driven insights and seamless payments across devices.",
477
+ "url": "https://finnhub.io/api/news?id=6a13ef2d88f1a76f3e9aa488ff8145e902e35a956e8d738a011cb308c46e00bc",
478
+ "datetime": "2026-01-09",
479
+ "source": "Finnhub",
480
+ "subreddit": null
481
+ },
482
+ {
483
+ "title": "Circle's Non-Interest Revenues Accelerate: Can the Momentum Continue?",
484
+ "content": "CRCL shows rapid growth in non-interest revenues, lifting 2025 guidance as subscriptions, services and transaction fees scale across its platform.",
485
+ "url": "https://finnhub.io/api/news?id=1289ce4bcc1cdc2007ebf983c1432f188ec44e19f416675d57c7840935a79e3a",
486
+ "datetime": "2026-01-09",
487
+ "source": "Finnhub",
488
+ "subreddit": null
489
+ },
490
+ {
491
+ "title": "Mastercard Up 7.6% in a Month: Are Investors Looking Beyond AI Hype?",
492
+ "content": "MA shares jump 7.6% in a month as investors rotate from AI trades toward durable payment networks with steady growth drivers.",
493
+ "url": "https://finnhub.io/api/news?id=1f8cda21dfecdb07398c4a91e6db2482c248150caeb8f6e60fa8c75a5dba1866",
494
+ "datetime": "2026-01-09",
495
+ "source": "Finnhub",
496
+ "subreddit": null
497
+ },
498
+ {
499
+ "title": "The Influencer Marketing Factory Unveils Season 6 of \"The Influence Factor\" Podcast with Cutting-Edge Industry Leaders",
500
+ "content": "NEW YORK CITY, NEW YORK / ACCESS Newswire / January 9, 2026 / Global influencer marketing leader The Influencer Marketing Factory today announced Season 6 of its acclaimed podcast,The Influence Factor . Bi-weekly episodes will feature conversations ...",
501
+ "url": "https://finnhub.io/api/news?id=2d14c9529412c1c8e935a931fc5a332c7d5348f12652408c956d87fd2f6d3c10",
502
+ "datetime": "2026-01-09",
503
+ "source": "Finnhub",
504
+ "subreddit": null
505
+ },
506
+ {
507
+ "title": "Fiserv: Potentially In A Bottoming Process",
508
+ "content": "Fiserv (FISV) stock plunged 70% and FY25 guidance reset.",
509
+ "url": "https://finnhub.io/api/news?id=a1e7f5530265f365630da945e31e0b63dd4badff90a7accd50a181ce8ead81b7",
510
+ "datetime": "2026-01-09",
511
+ "source": "Finnhub",
512
+ "subreddit": null
513
+ },
514
+ {
515
+ "title": "Why is Mastercard Incorporated (MA) One of the Best Major Stocks to Invest in Right Now?",
516
+ "content": "Mastercard Incorporated (NYSE:MA) is one of the best major stocks to invest in right now. Monness Crespi Hardt & Co., Inc. reiterated a Hold rating on Mastercard Incorporated (NYSE:MA) on January 5 and set a price target of $525.00. In addition, Keefe, Bruyette & Woods maintained a Buy rating on the company on January 2 [\u2026]",
517
+ "url": "https://finnhub.io/api/news?id=8bd58b88bae91ac0c493840cb9b9f851b4fdf1b61c6ec880020ad51e4ebc2a04",
518
+ "datetime": "2026-01-09",
519
+ "source": "Finnhub",
520
+ "subreddit": null
521
+ }
522
+ ],
523
+ "item_count": 58,
524
+ "sources_used": [
525
+ "Finnhub",
526
+ "Reddit"
527
+ ],
528
+ "source": "sentiment-basket",
529
+ "as_of": "2026-01-11",
530
+ "total_items": 58,
531
+ "showing": 10
532
+ }
533
+ },
534
+ "multi_source": {
535
+ "financials_all": {
536
+ "group": "source_comparison",
537
+ "ticker": "V",
538
+ "sources": {
539
+ "sec_edgar": {
540
+ "source": "SEC EDGAR XBRL",
541
+ "data": {
542
+ "financials": {
543
+ "ticker": "V",
544
+ "source": "SEC EDGAR XBRL",
545
+ "as_of": "2026-01-11",
546
+ "revenue": {
547
+ "value": 40000000000,
548
+ "data_type": "FY",
549
+ "end_date": "2025-09-30",
550
+ "filed": "2025-11-06",
551
+ "fiscal_year": 2025,
552
+ "form": "10-K"
553
+ },
554
+ "net_income": {
555
+ "value": 20058000000,
556
+ "data_type": "FY",
557
+ "end_date": "2025-09-30",
558
+ "filed": "2025-11-06",
559
+ "fiscal_year": 2025,
560
+ "form": "10-K"
561
+ },
562
+ "operating_income": {
563
+ "value": 23994000000,
564
+ "data_type": "FY",
565
+ "end_date": "2025-09-30",
566
+ "filed": "2025-11-06",
567
+ "fiscal_year": 2025,
568
+ "form": "10-K"
569
+ },
570
+ "operating_margin_pct": {
571
+ "value": 59.98,
572
+ "data_type": "FY",
573
+ "end_date": "2025-09-30",
574
+ "filed": "2025-11-06",
575
+ "fiscal_year": 2025,
576
+ "form": "10-K"
577
+ },
578
+ "net_margin_pct": {
579
+ "value": 50.14,
580
+ "data_type": "FY",
581
+ "end_date": "2025-09-30",
582
+ "filed": "2025-11-06",
583
+ "fiscal_year": 2025,
584
+ "form": "10-K"
585
+ },
586
+ "revenue_growth_3yr": {
587
+ "value": 14.34,
588
+ "data_type": "FY",
589
+ "end_date": "2025-09-30",
590
+ "filed": "2025-11-06",
591
+ "fiscal_year": 2025,
592
+ "form": "10-K"
593
+ },
594
+ "total_assets": {
595
+ "value": 99627000000,
596
+ "data_type": "FY",
597
+ "end_date": "2025-09-30",
598
+ "filed": "2025-11-06",
599
+ "fiscal_year": 2025,
600
+ "form": "10-K"
601
+ },
602
+ "total_liabilities": {
603
+ "value": 61718000000,
604
+ "data_type": "FY",
605
+ "end_date": "2025-09-30",
606
+ "filed": "2025-11-06",
607
+ "fiscal_year": 2025,
608
+ "form": "10-K"
609
+ },
610
+ "stockholders_equity": {
611
+ "value": 26437000000,
612
+ "data_type": "FY",
613
+ "end_date": "2011-09-30",
614
+ "filed": "2011-11-18",
615
+ "fiscal_year": 2011,
616
+ "form": "10-K"
617
+ }
618
+ },
619
+ "debt": {
620
+ "ticker": "V",
621
+ "source": "SEC EDGAR XBRL",
622
+ "as_of": "2026-01-11",
623
+ "long_term_debt": {
624
+ "value": 20977000000,
625
+ "data_type": "FY",
626
+ "end_date": "2021-09-30",
627
+ "filed": "2021-11-18",
628
+ "fiscal_year": 2021,
629
+ "form": "10-K"
630
+ },
631
+ "total_debt": {
632
+ "value": 25171000000,
633
+ "data_type": "FY",
634
+ "end_date": "2025-09-30",
635
+ "filed": "2025-11-06",
636
+ "fiscal_year": 2025,
637
+ "form": "10-K"
638
+ },
639
+ "cash": {
640
+ "value": 17164000000,
641
+ "data_type": "FY",
642
+ "end_date": "2025-09-30",
643
+ "filed": "2025-11-06",
644
+ "fiscal_year": 2025,
645
+ "form": "10-K"
646
+ },
647
+ "net_debt": {
648
+ "value": 8007000000,
649
+ "data_type": "FY",
650
+ "end_date": "2025-09-30",
651
+ "filed": "2025-11-06",
652
+ "fiscal_year": 2025,
653
+ "form": "10-K"
654
+ },
655
+ "debt_to_equity": {
656
+ "value": 0.95,
657
+ "data_type": "FY",
658
+ "end_date": "2025-09-30",
659
+ "filed": "2025-11-06",
660
+ "fiscal_year": 2025,
661
+ "form": "10-K"
662
+ }
663
+ },
664
+ "cash_flow": {
665
+ "ticker": "V",
666
+ "source": "SEC EDGAR XBRL",
667
+ "as_of": "2026-01-11",
668
+ "operating_cash_flow": {
669
+ "value": 23059000000,
670
+ "data_type": "FY",
671
+ "end_date": "2025-09-30",
672
+ "filed": "2025-11-06",
673
+ "fiscal_year": 2025,
674
+ "form": "10-K"
675
+ },
676
+ "capital_expenditure": {
677
+ "value": 59000000,
678
+ "data_type": "FY",
679
+ "end_date": "2025-09-30",
680
+ "filed": "2025-11-06",
681
+ "fiscal_year": 2025,
682
+ "form": "10-K"
683
+ },
684
+ "free_cash_flow": {
685
+ "value": 23000000000,
686
+ "data_type": "FY",
687
+ "end_date": "2025-09-30",
688
+ "filed": "2025-11-06",
689
+ "fiscal_year": 2025,
690
+ "form": "10-K"
691
+ }
692
+ }
693
+ }
694
+ },
695
+ "yahoo_finance": {
696
+ "source": "Yahoo Finance",
697
+ "data": {
698
+ "financials": {
699
+ "ticker": "V",
700
+ "source": "Yahoo Finance",
701
+ "as_of": "2026-01-11",
702
+ "revenue": {
703
+ "value": 40000000000,
704
+ "data_type": "TTM",
705
+ "end_date": "2025-09-30",
706
+ "filed": "2026-01-09"
707
+ },
708
+ "net_income": {
709
+ "value": 19853000704,
710
+ "data_type": "TTM",
711
+ "end_date": "2025-09-30",
712
+ "filed": "2026-01-09"
713
+ },
714
+ "gross_profit": {
715
+ "value": 39105998848,
716
+ "data_type": "TTM",
717
+ "end_date": "2025-09-30",
718
+ "filed": "2026-01-09"
719
+ },
720
+ "gross_margin_pct": {
721
+ "value": 97.76,
722
+ "data_type": "TTM",
723
+ "end_date": "2025-09-30",
724
+ "filed": "2026-01-09"
725
+ },
726
+ "net_margin_pct": {
727
+ "value": 49.63,
728
+ "data_type": "TTM",
729
+ "end_date": "2025-09-30",
730
+ "filed": "2026-01-09"
731
+ }
732
+ },
733
+ "debt": {
734
+ "ticker": "V",
735
+ "source": "Yahoo Finance",
736
+ "as_of": "2026-01-11",
737
+ "total_debt": {
738
+ "value": 26083999744,
739
+ "data_type": "Point-in-time",
740
+ "end_date": "2025-09-30",
741
+ "filed": "2026-01-09"
742
+ },
743
+ "cash": {
744
+ "value": 18997000192,
745
+ "data_type": "Point-in-time",
746
+ "end_date": "2025-09-30",
747
+ "filed": "2026-01-09"
748
+ },
749
+ "net_debt": {
750
+ "value": 7086999552,
751
+ "data_type": "Point-in-time",
752
+ "end_date": "2025-09-30",
753
+ "filed": "2026-01-09"
754
+ }
755
+ },
756
+ "cash_flow": {
757
+ "ticker": "V",
758
+ "source": "Yahoo Finance",
759
+ "as_of": "2026-01-11",
760
+ "operating_cash_flow": {
761
+ "value": 23058999296,
762
+ "data_type": "TTM",
763
+ "end_date": "2025-09-30",
764
+ "filed": "2026-01-09"
765
+ },
766
+ "free_cash_flow": {
767
+ "value": 20072873984,
768
+ "data_type": "TTM",
769
+ "end_date": "2025-09-30",
770
+ "filed": "2026-01-09"
771
+ }
772
+ }
773
+ }
774
+ }
775
+ },
776
+ "source": "fundamentals-basket",
777
+ "as_of": "2026-01-11"
778
+ },
779
+ "valuation_all": {
780
+ "group": "source_comparison",
781
+ "ticker": "V",
782
+ "sources": {
783
+ "yahoo_finance": {
784
+ "source": "Yahoo Finance",
785
+ "regular_market_time": "2026-01-09",
786
+ "data": {
787
+ "current_price": 349.77,
788
+ "market_cap": 675020144640.0,
789
+ "enterprise_value": 677386649600.0,
790
+ "trailing_pe": 34.25759,
791
+ "forward_pe": 24.254278,
792
+ "ps_ratio": 16.875504,
793
+ "pb_ratio": 18.046125,
794
+ "ev_ebitda": 24.168,
795
+ "trailing_peg": 1.9228,
796
+ "forward_peg": null,
797
+ "earnings_growth": -0.014,
798
+ "revenue_growth": 0.115
799
+ }
800
+ },
801
+ "alpha_vantage": {
802
+ "source": "Alpha Vantage",
803
+ "latest_quarter": "2025-09-30",
804
+ "fetched_at": "2026-01-09",
805
+ "data": {
806
+ "current_price": 339.81,
807
+ "market_cap": 675020145000.0,
808
+ "trailing_pe": 34.26,
809
+ "forward_pe": 27.32,
810
+ "ps_ratio": 16.88,
811
+ "pb_ratio": 18.15,
812
+ "ev_ebitda": 26.2,
813
+ "trailing_peg": 1.923,
814
+ "earnings_growth": -0.014,
815
+ "revenue_growth": 0.115
816
+ }
817
+ }
818
+ },
819
+ "source": "valuation-basket",
820
+ "as_of": "2026-01-11"
821
+ },
822
+ "macro_all": {
823
+ "group": "raw_metrics",
824
+ "ticker": "MACRO",
825
+ "metrics": {
826
+ "gdp_growth": {
827
+ "value": 4.3,
828
+ "data_type": "Quarterly",
829
+ "as_of": "2025Q3",
830
+ "source": "BEA (Bureau of Economic Analysis)",
831
+ "fallback": false
832
+ },
833
+ "interest_rate": {
834
+ "value": 3.72,
835
+ "data_type": "Monthly",
836
+ "as_of": "2025-12-01",
837
+ "source": "FRED (Federal Reserve)",
838
+ "fallback": false
839
+ },
840
+ "cpi_inflation": {
841
+ "value": 2.74,
842
+ "data_type": "Monthly",
843
+ "as_of": "2025-November",
844
+ "source": "BLS (Bureau of Labor Statistics)",
845
+ "fallback": false
846
+ },
847
+ "unemployment": {
848
+ "value": 4.4,
849
+ "data_type": "Monthly",
850
+ "as_of": "2025-December",
851
+ "source": "BLS (Bureau of Labor Statistics)",
852
+ "fallback": false
853
+ }
854
+ },
855
+ "source": "macro-basket",
856
+ "as_of": "2026-01-11"
857
+ },
858
+ "volatility_all": {
859
+ "group": "raw_metrics",
860
+ "ticker": "V",
861
+ "metrics": {
862
+ "vix": {
863
+ "value": 15.45,
864
+ "data_type": "Daily",
865
+ "as_of": "2026-01-08",
866
+ "source": "FRED (Federal Reserve)",
867
+ "fallback": false
868
+ },
869
+ "vxn": {
870
+ "value": 20.15,
871
+ "data_type": "Daily",
872
+ "as_of": "2026-01-08",
873
+ "source": "FRED (Federal Reserve)",
874
+ "fallback": false
875
+ },
876
+ "beta": {
877
+ "value": 0.785,
878
+ "data_type": "1Y",
879
+ "as_of": "2026-01-09",
880
+ "source": "Calculated from Yahoo Finance data",
881
+ "fallback": false
882
+ },
883
+ "historical_volatility": {
884
+ "value": 22.16,
885
+ "data_type": "30D",
886
+ "as_of": "2026-01-09",
887
+ "source": "Calculated from Yahoo Finance data",
888
+ "fallback": false
889
+ },
890
+ "implied_volatility": {
891
+ "value": 30.0,
892
+ "data_type": "Forward",
893
+ "as_of": "2026-01-11",
894
+ "source": "Market Average (estimated)",
895
+ "fallback": true
896
+ }
897
+ },
898
+ "source": "volatility-basket",
899
+ "as_of": "2026-01-11"
900
+ }
901
+ },
902
+ "conflict_resolution": {
903
+ "financials": {
904
+ "primary_source": "SEC EDGAR XBRL",
905
+ "secondary_source": "Yahoo Finance",
906
+ "conflicts": []
907
+ },
908
+ "valuation": {
909
+ "primary_source": "Yahoo Finance",
910
+ "secondary_source": "Alpha Vantage",
911
+ "conflicts": []
912
+ }
913
+ },
914
+ "aggregated_swot": {
915
+ "strengths": [],
916
+ "weaknesses": [],
917
+ "opportunities": [],
918
+ "threats": []
919
+ },
920
+ "completeness": {
921
+ "completeness_pct": 50.0,
922
+ "metrics_found": 7,
923
+ "metrics_total": 14,
924
+ "missing": {
925
+ "financials": [
926
+ "revenue",
927
+ "net_income",
928
+ "eps",
929
+ "debt_to_equity"
930
+ ],
931
+ "valuation": [
932
+ "trailing_pe",
933
+ "pb_ratio",
934
+ "ps_ratio"
935
+ ]
936
+ }
937
+ },
938
+ "generated_at": "2026-01-11T14:01:14.368474"
939
+ }
docs/mcp_raw_visa.md ADDED
@@ -0,0 +1,962 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP Raw Output: Visa (V)
2
+
3
+ Generated: 2026-01-11 12:32:18
4
+
5
+ ```json
6
+ {
7
+ "ticker": "V",
8
+ "company_details": {
9
+ "longName": "Visa Inc.",
10
+ "address1": "P.O. Box 8999",
11
+ "city": "San Francisco",
12
+ "state": "CA",
13
+ "zip": "94128-8999",
14
+ "country": "United States",
15
+ "sector": "Financial Services",
16
+ "industry": "Credit Services"
17
+ },
18
+ "fundamentals": {
19
+ "group": "source_comparison",
20
+ "ticker": "V",
21
+ "sources": {
22
+ "sec_edgar": {
23
+ "source": "SEC EDGAR XBRL",
24
+ "data": {
25
+ "financials": {
26
+ "ticker": "V",
27
+ "source": "SEC EDGAR XBRL",
28
+ "as_of": "2026-01-11",
29
+ "revenue": {
30
+ "value": 40000000000,
31
+ "data_type": "FY",
32
+ "end_date": "2025-09-30",
33
+ "filed": "2025-11-06",
34
+ "fiscal_year": 2025,
35
+ "form": "10-K"
36
+ },
37
+ "net_income": {
38
+ "value": 20058000000,
39
+ "data_type": "FY",
40
+ "end_date": "2025-09-30",
41
+ "filed": "2025-11-06",
42
+ "fiscal_year": 2025,
43
+ "form": "10-K"
44
+ },
45
+ "operating_income": {
46
+ "value": 23994000000,
47
+ "data_type": "FY",
48
+ "end_date": "2025-09-30",
49
+ "filed": "2025-11-06",
50
+ "fiscal_year": 2025,
51
+ "form": "10-K"
52
+ },
53
+ "operating_margin_pct": {
54
+ "value": 59.98,
55
+ "data_type": "FY",
56
+ "end_date": "2025-09-30",
57
+ "filed": "2025-11-06",
58
+ "fiscal_year": 2025,
59
+ "form": "10-K"
60
+ },
61
+ "net_margin_pct": {
62
+ "value": 50.14,
63
+ "data_type": "FY",
64
+ "end_date": "2025-09-30",
65
+ "filed": "2025-11-06",
66
+ "fiscal_year": 2025,
67
+ "form": "10-K"
68
+ },
69
+ "revenue_growth_3yr": {
70
+ "value": 14.34,
71
+ "data_type": "FY",
72
+ "end_date": "2025-09-30",
73
+ "filed": "2025-11-06",
74
+ "fiscal_year": 2025,
75
+ "form": "10-K"
76
+ },
77
+ "total_assets": {
78
+ "value": 99627000000,
79
+ "data_type": "FY",
80
+ "end_date": "2025-09-30",
81
+ "filed": "2025-11-06",
82
+ "fiscal_year": 2025,
83
+ "form": "10-K"
84
+ },
85
+ "total_liabilities": {
86
+ "value": 61718000000,
87
+ "data_type": "FY",
88
+ "end_date": "2025-09-30",
89
+ "filed": "2025-11-06",
90
+ "fiscal_year": 2025,
91
+ "form": "10-K"
92
+ },
93
+ "stockholders_equity": {
94
+ "value": 26437000000,
95
+ "data_type": "FY",
96
+ "end_date": "2011-09-30",
97
+ "filed": "2011-11-18",
98
+ "fiscal_year": 2011,
99
+ "form": "10-K"
100
+ }
101
+ },
102
+ "debt": {
103
+ "ticker": "V",
104
+ "source": "SEC EDGAR XBRL",
105
+ "as_of": "2026-01-11",
106
+ "long_term_debt": {
107
+ "value": 20977000000,
108
+ "data_type": "FY",
109
+ "end_date": "2021-09-30",
110
+ "filed": "2021-11-18",
111
+ "fiscal_year": 2021,
112
+ "form": "10-K"
113
+ },
114
+ "total_debt": {
115
+ "value": 25171000000,
116
+ "data_type": "FY",
117
+ "end_date": "2025-09-30",
118
+ "filed": "2025-11-06",
119
+ "fiscal_year": 2025,
120
+ "form": "10-K"
121
+ },
122
+ "cash": {
123
+ "value": 17164000000,
124
+ "data_type": "FY",
125
+ "end_date": "2025-09-30",
126
+ "filed": "2025-11-06",
127
+ "fiscal_year": 2025,
128
+ "form": "10-K"
129
+ },
130
+ "net_debt": {
131
+ "value": 8007000000,
132
+ "data_type": "FY",
133
+ "end_date": "2025-09-30",
134
+ "filed": "2025-11-06",
135
+ "fiscal_year": 2025,
136
+ "form": "10-K"
137
+ },
138
+ "debt_to_equity": {
139
+ "value": 0.95,
140
+ "data_type": "FY",
141
+ "end_date": "2025-09-30",
142
+ "filed": "2025-11-06",
143
+ "fiscal_year": 2025,
144
+ "form": "10-K"
145
+ }
146
+ },
147
+ "cash_flow": {
148
+ "ticker": "V",
149
+ "source": "SEC EDGAR XBRL",
150
+ "as_of": "2026-01-11",
151
+ "operating_cash_flow": {
152
+ "value": 23059000000,
153
+ "data_type": "FY",
154
+ "end_date": "2025-09-30",
155
+ "filed": "2025-11-06",
156
+ "fiscal_year": 2025,
157
+ "form": "10-K"
158
+ },
159
+ "capital_expenditure": {
160
+ "value": 59000000,
161
+ "data_type": "FY",
162
+ "end_date": "2025-09-30",
163
+ "filed": "2025-11-06",
164
+ "fiscal_year": 2025,
165
+ "form": "10-K"
166
+ },
167
+ "free_cash_flow": {
168
+ "value": 23000000000,
169
+ "data_type": "FY",
170
+ "end_date": "2025-09-30",
171
+ "filed": "2025-11-06",
172
+ "fiscal_year": 2025,
173
+ "form": "10-K"
174
+ }
175
+ }
176
+ }
177
+ },
178
+ "yahoo_finance": {
179
+ "source": "Yahoo Finance",
180
+ "data": {
181
+ "financials": {
182
+ "ticker": "V",
183
+ "source": "Yahoo Finance",
184
+ "as_of": "2026-01-11",
185
+ "revenue": {
186
+ "value": 40000000000,
187
+ "data_type": "TTM",
188
+ "end_date": "2025-09-30",
189
+ "filed": "2026-01-09"
190
+ },
191
+ "net_income": {
192
+ "value": 19853000704,
193
+ "data_type": "TTM",
194
+ "end_date": "2025-09-30",
195
+ "filed": "2026-01-09"
196
+ },
197
+ "gross_profit": {
198
+ "value": 39105998848,
199
+ "data_type": "TTM",
200
+ "end_date": "2025-09-30",
201
+ "filed": "2026-01-09"
202
+ },
203
+ "gross_margin_pct": {
204
+ "value": 97.76,
205
+ "data_type": "TTM",
206
+ "end_date": "2025-09-30",
207
+ "filed": "2026-01-09"
208
+ },
209
+ "net_margin_pct": {
210
+ "value": 49.63,
211
+ "data_type": "TTM",
212
+ "end_date": "2025-09-30",
213
+ "filed": "2026-01-09"
214
+ }
215
+ },
216
+ "debt": {
217
+ "ticker": "V",
218
+ "source": "Yahoo Finance",
219
+ "as_of": "2026-01-11",
220
+ "total_debt": {
221
+ "value": 26083999744,
222
+ "data_type": "Point-in-time",
223
+ "end_date": "2025-09-30",
224
+ "filed": "2026-01-09"
225
+ },
226
+ "cash": {
227
+ "value": 18997000192,
228
+ "data_type": "Point-in-time",
229
+ "end_date": "2025-09-30",
230
+ "filed": "2026-01-09"
231
+ },
232
+ "net_debt": {
233
+ "value": 7086999552,
234
+ "data_type": "Point-in-time",
235
+ "end_date": "2025-09-30",
236
+ "filed": "2026-01-09"
237
+ }
238
+ },
239
+ "cash_flow": {
240
+ "ticker": "V",
241
+ "source": "Yahoo Finance",
242
+ "as_of": "2026-01-11",
243
+ "operating_cash_flow": {
244
+ "value": 23058999296,
245
+ "data_type": "TTM",
246
+ "end_date": "2025-09-30",
247
+ "filed": "2026-01-09"
248
+ },
249
+ "free_cash_flow": {
250
+ "value": 20072873984,
251
+ "data_type": "TTM",
252
+ "end_date": "2025-09-30",
253
+ "filed": "2026-01-09"
254
+ }
255
+ }
256
+ }
257
+ }
258
+ },
259
+ "source": "fundamentals-basket",
260
+ "as_of": "2026-01-11"
261
+ },
262
+ "valuation": {
263
+ "group": "source_comparison",
264
+ "ticker": "V",
265
+ "sources": {
266
+ "yahoo_finance": {
267
+ "source": "Yahoo Finance",
268
+ "regular_market_time": "2026-01-09",
269
+ "data": {
270
+ "current_price": 349.77,
271
+ "market_cap": 675020144640.0,
272
+ "enterprise_value": 677386649600.0,
273
+ "trailing_pe": 34.25759,
274
+ "forward_pe": 24.254278,
275
+ "ps_ratio": 16.875504,
276
+ "pb_ratio": 18.046125,
277
+ "ev_ebitda": 24.168,
278
+ "trailing_peg": 1.9228,
279
+ "forward_peg": null,
280
+ "earnings_growth": -0.014,
281
+ "revenue_growth": 0.115
282
+ }
283
+ },
284
+ "alpha_vantage": {
285
+ "source": "Alpha Vantage",
286
+ "latest_quarter": "2025-09-30",
287
+ "fetched_at": "2026-01-09",
288
+ "data": {
289
+ "current_price": 339.81,
290
+ "market_cap": 675020145000.0,
291
+ "trailing_pe": 34.26,
292
+ "forward_pe": 27.32,
293
+ "ps_ratio": 16.88,
294
+ "pb_ratio": 18.15,
295
+ "ev_ebitda": 26.2,
296
+ "trailing_peg": 1.923,
297
+ "earnings_growth": -0.014,
298
+ "revenue_growth": 0.115
299
+ }
300
+ }
301
+ },
302
+ "source": "valuation-basket",
303
+ "as_of": "2026-01-11"
304
+ },
305
+ "volatility": {
306
+ "group": "raw_metrics",
307
+ "ticker": "V",
308
+ "metrics": {
309
+ "vix": {
310
+ "value": 15.45,
311
+ "data_type": "Daily",
312
+ "as_of": "2026-01-08",
313
+ "source": "FRED (Federal Reserve)",
314
+ "fallback": false
315
+ },
316
+ "vxn": {
317
+ "value": 20.15,
318
+ "data_type": "Daily",
319
+ "as_of": "2026-01-08",
320
+ "source": "FRED (Federal Reserve)",
321
+ "fallback": false
322
+ },
323
+ "beta": {
324
+ "value": 0.785,
325
+ "data_type": "1Y",
326
+ "as_of": "2026-01-09",
327
+ "source": "Calculated from Yahoo Finance data",
328
+ "fallback": false
329
+ },
330
+ "historical_volatility": {
331
+ "value": 22.16,
332
+ "data_type": "30D",
333
+ "as_of": "2026-01-09",
334
+ "source": "Calculated from Yahoo Finance data",
335
+ "fallback": false
336
+ },
337
+ "implied_volatility": {
338
+ "value": 30.0,
339
+ "data_type": "Forward",
340
+ "as_of": "2026-01-11",
341
+ "source": "Market Average (estimated)",
342
+ "fallback": true
343
+ }
344
+ },
345
+ "source": "volatility-basket",
346
+ "as_of": "2026-01-11"
347
+ },
348
+ "macro": {
349
+ "group": "raw_metrics",
350
+ "ticker": "MACRO",
351
+ "metrics": {
352
+ "gdp_growth": {
353
+ "value": 4.3,
354
+ "data_type": "Quarterly",
355
+ "as_of": "2025Q3",
356
+ "source": "BEA (Bureau of Economic Analysis)",
357
+ "fallback": false
358
+ },
359
+ "interest_rate": {
360
+ "value": 3.72,
361
+ "data_type": "Monthly",
362
+ "as_of": "2025-12-01",
363
+ "source": "FRED (Federal Reserve)",
364
+ "fallback": false
365
+ },
366
+ "cpi_inflation": {
367
+ "value": 2.74,
368
+ "data_type": "Monthly",
369
+ "as_of": "2025-November",
370
+ "source": "BLS (Bureau of Labor Statistics)",
371
+ "fallback": false
372
+ },
373
+ "unemployment": {
374
+ "value": 4.4,
375
+ "data_type": "Monthly",
376
+ "as_of": "2025-December",
377
+ "source": "BLS (Bureau of Labor Statistics)",
378
+ "fallback": false
379
+ }
380
+ },
381
+ "source": "macro-basket",
382
+ "as_of": "2026-01-11"
383
+ },
384
+ "news": {
385
+ "group": "content_analysis",
386
+ "ticker": "V",
387
+ "query": "Visa Inc. (V) stock news",
388
+ "items": [
389
+ {
390
+ "title": "After Three Hot Years, Will Stock Markets Sizzle Again?",
391
+ "content": "Returns have been fabulous but consider the potential for setbacks in this already hazardous year, our columnist says.",
392
+ "url": "https://www.nytimes.com/2026/01/09/business/stock-market-investing-returns.html",
393
+ "datetime": "2026-01-09T14:00:07Z",
394
+ "source": "New York Times"
395
+ },
396
+ {
397
+ "title": "Bill Gates Makes a Multibillion-Dollar Divorce Payout",
398
+ "content": "The billionaire and philanthropist has made a nearly $8 billion payment to the private foundation of his ex-wife, Melinda French Gates, tax filings show.",
399
+ "url": "https://www.nytimes.com/2026/01/09/business/dealbook/gates-divorce-settlement.html",
400
+ "datetime": "2026-01-09T12:43:02Z",
401
+ "source": "New York Times"
402
+ },
403
+ {
404
+ "title": "Is Visa Inc. (V) One of the Best Major Stocks to Invest in Right Now?",
405
+ "content": "Visa Inc. (NYSE:V) is one of the best major stocks to invest in right now. Monness, Crespi, Hardt & Co., Inc. reiterated a Hold rating on Visa Inc. (NYSE:V) ...",
406
+ "url": "https://finance.yahoo.com/news/visa-inc-v-one-best-092151784.html",
407
+ "datetime": "2026-01-09T09:21:51Z",
408
+ "source": "Yahoo Entertainment"
409
+ },
410
+ {
411
+ "title": "All Eyes on the U.S. in 2026",
412
+ "content": "Our reporters in Washington tell us what they\u2019re watching from the Trump administration.",
413
+ "url": "https://www.nytimes.com/2026/01/07/world/us-trump-venezuela-2026.html",
414
+ "datetime": "2026-01-07T21:15:24Z",
415
+ "source": "New York Times"
416
+ },
417
+ {
418
+ "title": "Why Trump\u2019s Greenland Strategy Has the World on Edge",
419
+ "content": "The president is again focused on acquiring the mineral-rich island. But lack of clarity about his goals and tactics is weighing on political and business leaders.",
420
+ "url": "https://www.nytimes.com/2026/01/07/business/dealbook/buy-invade-trump-greenland.html",
421
+ "datetime": "2026-01-07T13:21:34Z",
422
+ "source": "New York Times"
423
+ },
424
+ {
425
+ "title": "Oil Stocks Rally as Investors Bet on Return to Venezuela",
426
+ "content": "The energy sector of the S&P 500 rose 2.7 percent on Monday, lifting the broader market.",
427
+ "url": "https://www.nytimes.com/2026/01/05/business/oil-stocks-venezuela.html",
428
+ "datetime": "2026-01-05T18:20:06Z",
429
+ "source": "New York Times"
430
+ },
431
+ {
432
+ "title": "5 fantastic ASX ETFs for beginners in 2026",
433
+ "content": "These funds are highly rated for a reason. Here's what you need to know about them.\nThe post 5 fantastic ASX ETFs for beginners in 2026 appeared first on The Motley Fool Australia.",
434
+ "url": "https://www.fool.com.au/2026/01/02/5-fantastic-asx-etfs-for-beginners-in-2026/",
435
+ "datetime": "2026-01-02T02:49:20Z",
436
+ "source": "Motley Fool Australia"
437
+ },
438
+ {
439
+ "title": "Visa (NYSE: V) Stock Price Prediction and Forecast 2026-2030 (Jan 2026)",
440
+ "content": "This year, Visa Inc. (NYSE: V) has unveiled a scam disruption initiative, adoption of its \u201cTap to Phone\u201d technology has soared, it unveiled its vision for artificial intelligence (AI) in commerce, and it expanded its capabilities in the digital currency space\u2026",
441
+ "url": "https://biztoc.com/x/c031d63d4b6abfd2",
442
+ "datetime": "2026-01-01T13:51:47Z",
443
+ "source": "Biztoc.com"
444
+ },
445
+ {
446
+ "title": "V: Visa Inc - Stock Price, Quote and News",
447
+ "content": "# Visa Inc V:NYSE. * 52 Week High Date06/11/25. * 52 Week Low Date04/07/25. ## Latest On Visa Inc. * CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and VisaCNBC.com. And payment giants are preparingCNBC.com. * Economy grows, chip tariff delay, new S&P 500 record and more in Morning SquawkCNBC.com. ## Latest On Visa Inc. * CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and VisaCNBC.com. And payment giants are preparingCNBC.com. * 52 Week High Date06/11/25. * 52 Week Low Date04/07/25. * P/E (TTM)34.66. * Earnings Date01/28/2026(est). * When Stock Recovery Defeats Securities Fraud Claims: The Visa DecisionTipRanks. * Monness Keeps Their Hold Rating on Visa (V)\")TipRanks. * Visa Stock Stumbles While Its Crypto Card Network Sees 525% Volume ExplosionTipRanks. * Visa Updates Class B Conversion Rates After Escrow DepositTipRanks. CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and Visa. Visa Inc. is a global payments technology company. Vice Chairman, Chief People and Corporate Affairs Officer and Corporate Secretary. Independent Chairman of the Board.",
448
+ "url": "https://www.cnbc.com/quotes/V",
449
+ "datetime": null,
450
+ "source": null
451
+ },
452
+ {
453
+ "title": "Buy or Sell Visa Stock - V Stock Price Quote & News",
454
+ "content": "On 2026-01-09, Visa(V) stock moved within a range of $349.00 to $354.70. With shares now at $355.54, the stock is trading +1.9% above its intraday low and +0.2%",
455
+ "url": "https://robinhood.com/us/en/stocks/V/",
456
+ "datetime": null,
457
+ "source": null
458
+ },
459
+ {
460
+ "title": "Visa Inc. (V) Latest Stock News & Headlines",
461
+ "content": "Visa Inc. (V) and Mastercard to Pay $167.5m to Settle Lawsuit Over ATM Fees. Insider Monkey \u2022 11d ago. V. -0.70% \u00b7 MA \u00b7 PayPal Stock",
462
+ "url": "https://ca.finance.yahoo.com/quote/V/news/",
463
+ "datetime": null,
464
+ "source": null
465
+ },
466
+ {
467
+ "title": "V Stock Quote Price and Forecast",
468
+ "content": "Here\u2019s Why. by TipRanks Dec 23, 2025 7:15am ET Visa reports Canada holiday spending rises 4.4% by TipRanks Dec 23, 2025 7:05am ET Visa reports holiday retail spending increased 4.2% by TipRanks Dec 23, 2025 3:30am ET Analysts\u2019 Opinions Are Mixed on These Financial Stocks: Visa (V) and Ally Financial (ALLY) by TipRanks Dec 22, 2025 9:15am ET Fiserv collaborates with Visa to accelerate agentic commerce by TipRanks Dec 19, 2025 5:07pm ET 5 Overlooked Stocks With Over 10% Upside for 2026 by TipRanks Dec 19, 2025 1:34pm ET Visa (V), Mastercard Stocks Rise after $168M Settlement Deal for 14-Year-Old Lawsuit by TipRanks Dec 19, 2025 12:52pm ET Credit Card Giants Visa (V) and Mastercard to Pay $167.5 Million in ATM User Fee Legal Case by TipRanks Dec 19, 2025 12:30pm ET Visa, MasterCard to pay $167.5M to settle ATM user fee lawsuit, Reuters says by TipRanks Dec 19, 2025 10:40am ET Crypto Currents: Coinbase starts rollout for stock trading, prediction markets by TipRanks Dec 18, 2025 9:33am ET SoFi Stock Soars after Announcing the Launch of SoFiUSD Dollar-Pegged Stablecoin by TipRanks Dec 17, 2025 5:53pm ET \u2018Risk Geometry\u2019 Identifies Exotic Options Play on Visa Stock (V) by TipRanks Dec 17, 2025 7:12am ET Akamai, Visa announce strategic collaboration for next era of agentic commerce by TipRanks Dec 17, 2025 7:11am ET Akamai, Visa partner on agentic commerce protections by TipRanks Dec 16, 2025 11:35am ET Crypto Currents: Visa launches stablecoin settlement in U.S. by TipRanks Dec 16, 2025 7:46am ET Visa Is Weaponizing USDC to Protect Its $17 Trillion Network from the $50 Trillion Crypto Disruptors by TipRanks Dec 16, 2025 7:05am ET Visa launches USDC settlement in the United States by TipRanks Dec 15, 2025 7:16am ET Visa launches stablecoins advisory practice by TipRanks Dec 15, 2025 1:40am ET Wall Street Analysts Are Bullish on Top Financial Picks by TipRanks Dec 14, 2025 8:17am ET 3 Stocks Bank",
469
+ "url": "https://www.cnn.com/markets/stocks/V",
470
+ "datetime": null,
471
+ "source": null
472
+ }
473
+ ],
474
+ "item_count": 12,
475
+ "sources_used": [
476
+ "Tavily",
477
+ "NYT",
478
+ "NewsAPI"
479
+ ],
480
+ "source": "news-basket",
481
+ "as_of": "2026-01-11"
482
+ },
483
+ "sentiment": {
484
+ "group": "content_analysis",
485
+ "ticker": "V",
486
+ "items": [
487
+ {
488
+ "title": "Googl gains",
489
+ "content": "Bought after 2025 February earnings, doubled down in April dip, some more in May dip. Started with 60k. \n\nSold lots of weeklies to you regards against my long calls; just closed my position. \n\nWill dip my legs into goog again for the next run to $400. \n\nMicro contributors - aapl in Jan, Msft in May; avgo after earnings and MU. ",
490
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q9r6es/googl_gains/",
491
+ "datetime": "2026-01-11T11:07:32",
492
+ "source": "Reddit",
493
+ "subreddit": "r/wallstreetbets"
494
+ },
495
+ {
496
+ "title": "Oklo ride to 1000$",
497
+ "content": "Call me skeptical boys but after losing a 160k I am going to let this ride to the moon. Not going to take profits until expiration. Diamond hands \ud83d\udc8e\ud83d\ude4c Let\u2019s see how much this can make me..",
498
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q9b1qx/oklo_ride_to_1000/",
499
+ "datetime": "2026-01-10T23:39:51",
500
+ "source": "Reddit",
501
+ "subreddit": "r/wallstreetbets"
502
+ },
503
+ {
504
+ "title": "5 Things That Won't Happen In 2026 (The Alpha Of Inertia)",
505
+ "content": "This article lays out five slow-moving certainties for 2026 that investors can lean on. Click here to read more.",
506
+ "url": "https://finnhub.io/api/news?id=dc02cc7e318de2d458d5b92b23ef870ba3ca8e58c355af40624245a0a5104aac",
507
+ "datetime": "2026-01-10T14:00:00",
508
+ "source": "Finnhub",
509
+ "subreddit": null
510
+ },
511
+ {
512
+ "title": "Rain Raises $250 Million at $1.95 Billion Valuation for Stablecoin Payments Expansion",
513
+ "content": "ICONIQ led the round as Rain targets growth across the Americas, Europe, Asia and Africa.",
514
+ "url": "https://finnhub.io/api/news?id=5b4865a899c398090c883407215234a2257358b44e7887e6273245102ea078e3",
515
+ "datetime": "2026-01-09T23:32:31",
516
+ "source": "Finnhub",
517
+ "subreddit": null
518
+ },
519
+ {
520
+ "title": "Visa's Tokenization Push Is Becoming More Than a Security Play",
521
+ "content": "V's tokenization push is evolving beyond security, boosting transaction efficiency, AI-driven insights and seamless payments across devices.",
522
+ "url": "https://finnhub.io/api/news?id=6a13ef2d88f1a76f3e9aa488ff8145e902e35a956e8d738a011cb308c46e00bc",
523
+ "datetime": "2026-01-09T23:19:00",
524
+ "source": "Finnhub",
525
+ "subreddit": null
526
+ },
527
+ {
528
+ "title": "Circle's Non-Interest Revenues Accelerate: Can the Momentum Continue?",
529
+ "content": "CRCL shows rapid growth in non-interest revenues, lifting 2025 guidance as subscriptions, services and transaction fees scale across its platform.",
530
+ "url": "https://finnhub.io/api/news?id=1289ce4bcc1cdc2007ebf983c1432f188ec44e19f416675d57c7840935a79e3a",
531
+ "datetime": "2026-01-09T23:06:00",
532
+ "source": "Finnhub",
533
+ "subreddit": null
534
+ },
535
+ {
536
+ "title": "RDDT 250c 3/20",
537
+ "content": "Let\u2019s go 300 after ER. I can feel it in my plums ",
538
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q8ep76/rddt_250c_320/",
539
+ "datetime": "2026-01-09T23:05:28",
540
+ "source": "Reddit",
541
+ "subreddit": "r/wallstreetbets"
542
+ },
543
+ {
544
+ "title": "Mastercard Up 7.6% in a Month: Are Investors Looking Beyond AI Hype?",
545
+ "content": "MA shares jump 7.6% in a month as investors rotate from AI trades toward durable payment networks with steady growth drivers.",
546
+ "url": "https://finnhub.io/api/news?id=1f8cda21dfecdb07398c4a91e6db2482c248150caeb8f6e60fa8c75a5dba1866",
547
+ "datetime": "2026-01-09T21:57:00",
548
+ "source": "Finnhub",
549
+ "subreddit": null
550
+ },
551
+ {
552
+ "title": "The Influencer Marketing Factory Unveils Season 6 of \"The Influence Factor\" Podcast with Cutting-Edge Industry Leaders",
553
+ "content": "NEW YORK CITY, NEW YORK / ACCESS Newswire / January 9, 2026 / Global influencer marketing leader The Influencer Marketing Factory today announced Season 6 of its acclaimed podcast,The Influence Factor . Bi-weekly episodes will feature conversations ...",
554
+ "url": "https://finnhub.io/api/news?id=2d14c9529412c1c8e935a931fc5a332c7d5348f12652408c956d87fd2f6d3c10",
555
+ "datetime": "2026-01-09T19:30:00",
556
+ "source": "Finnhub",
557
+ "subreddit": null
558
+ },
559
+ {
560
+ "title": "Fiserv: Potentially In A Bottoming Process",
561
+ "content": "Fiserv (FISV) stock plunged 70% and FY25 guidance reset.",
562
+ "url": "https://finnhub.io/api/news?id=a1e7f5530265f365630da945e31e0b63dd4badff90a7accd50a181ce8ead81b7",
563
+ "datetime": "2026-01-09T18:37:01",
564
+ "source": "Finnhub",
565
+ "subreddit": null
566
+ },
567
+ {
568
+ "title": "Why is Mastercard Incorporated (MA) One of the Best Major Stocks to Invest in Right Now?",
569
+ "content": "Mastercard Incorporated (NYSE:MA) is one of the best major stocks to invest in right now. Monness Crespi Hardt & Co., Inc. reiterated a Hold rating on Mastercard Incorporated (NYSE:MA) on January 5 and set a price target of $525.00. In addition, Keefe, Bruyette & Woods maintained a Buy rating on the company on January 2 [\u2026]",
570
+ "url": "https://finnhub.io/api/news?id=8bd58b88bae91ac0c493840cb9b9f851b4fdf1b61c6ec880020ad51e4ebc2a04",
571
+ "datetime": "2026-01-09T14:51:59",
572
+ "source": "Finnhub",
573
+ "subreddit": null
574
+ },
575
+ {
576
+ "title": "Is Visa Inc. (V) One of the Best Major Stocks to Invest in Right Now?",
577
+ "content": "Visa Inc. (NYSE:V) is one of the best major stocks to invest in right now. Monness, Crespi, Hardt & Co., Inc. reiterated a Hold rating on Visa Inc. (NYSE:V) on January 5 and set a price target of $330.00. In a separate development, Visa Inc. (NYSE:V) and Fiserv, Inc. announced on December 22 a strategic [\u2026]",
578
+ "url": "https://finnhub.io/api/news?id=4a7abccded3cd2b373deb1ecf6f665a30923fd414a0e26e1026f228f1885d732",
579
+ "datetime": "2026-01-09T14:51:51",
580
+ "source": "Finnhub",
581
+ "subreddit": null
582
+ },
583
+ {
584
+ "title": "Brown & Brown: A Deep Value Opportunity",
585
+ "content": "Brown & Brown stock looks undervalued given its EPS growth and long dividend streak. Click here to see why I rate BRO stock a Buy.",
586
+ "url": "https://finnhub.io/api/news?id=bcbec1bc767dc8f96c4bca19f5565fcbc69129c77eb386e6a1e7e648e9452f04",
587
+ "datetime": "2026-01-09T13:30:00",
588
+ "source": "Finnhub",
589
+ "subreddit": null
590
+ },
591
+ {
592
+ "title": "Visa and JPMorgan Use Solana Rails But One Risk Still Worries Banks",
593
+ "content": "Major financial institutions, including JPMorgan and Visa, are increasingly turning to .cwp-coin-chart svg path { stroke-width: 0.65 !important; } .cwp-coin-widget-container .cwp-graph-container.positive svg path:nth-of-type(2) { stroke: #008868 !important; } .cwp-coin-widget-container .cwp-coin-trend.positive { color: #008868 !important; background-color: transparent !important; } .cwp-coin-widget-container .cwp-coin-popup-holder .cwp-coin-trend.positive { border: 1px solid #008868; border-radi",
594
+ "url": "https://finnhub.io/api/news?id=d01493ec2df5e6ce762d753f6aa91b2b04a0071e70c227eb13ff0060fb4f0b88",
595
+ "datetime": "2026-01-09T12:14:22",
596
+ "source": "Finnhub",
597
+ "subreddit": null
598
+ },
599
+ {
600
+ "title": "Assessing Visa (V) Valuation After Partnerships And Services Fuel Recent Share Price Momentum",
601
+ "content": "Visa (V) has been in focus after Deluxe adopted Visa Direct to power dlxFastFunds, offering near real-time funding for businesses and reducing typical settlement delays to support cash flow and day-to-day operations. See our latest analysis for Visa. Those product wins sit alongside a steady share price story, with Visa\u2019s 1 month share price return of 7.9% and 1 year total shareholder return of 13.5%. Its 3 year total shareholder return of 61.1% points to momentum that has built over time...",
602
+ "url": "https://finnhub.io/api/news?id=3bca1517d817f4be8e186900396305af36eaa89900335fb6238abe5373ed416f",
603
+ "datetime": "2026-01-09T08:45:24",
604
+ "source": "Finnhub",
605
+ "subreddit": null
606
+ },
607
+ {
608
+ "title": "$8K to $46K in my 0DTE account this week, took out $8K then blew the rest on SPY $588 puts. Wish I took out more, greed &amp; too excited again.",
609
+ "content": "",
610
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q7sy7u/8k_to_46k_in_my_0dte_account_this_week_took_out/",
611
+ "datetime": "2026-01-09T05:47:46",
612
+ "source": "Reddit",
613
+ "subreddit": "r/wallstreetbets"
614
+ },
615
+ {
616
+ "title": "Visa (V) Stock Falls Amid Market Uptick: What Investors Need to Know",
617
+ "content": "Visa (V) closed the most recent trading day at $352.23, moving 1.03% from the previous trading session.",
618
+ "url": "https://finnhub.io/api/news?id=e1852c5ac307a1fb1db7702bebe0f1f73f99059bdac6261abfe19a0b2731d857",
619
+ "datetime": "2026-01-09T04:15:07",
620
+ "source": "Finnhub",
621
+ "subreddit": null
622
+ },
623
+ {
624
+ "title": "Top 50 High-Quality Dividend Growth Stocks For January 2026",
625
+ "content": "2025 dividend growth stock screen: 50 picks, FCF valuation, +10.55% return. 17 stocks appear potentially undervalued, while 7 saw valuation downgrades. See more.",
626
+ "url": "https://finnhub.io/api/news?id=671f8c9315813f7a75e40f073a9858371b2150af06b9af85636d996aba0f4404",
627
+ "datetime": "2026-01-09T03:33:27",
628
+ "source": "Finnhub",
629
+ "subreddit": null
630
+ },
631
+ {
632
+ "title": "Deluxe to Implement Visa Direct to Enable Fast, Seamless Payments with dlxFastFunds",
633
+ "content": "MINNEAPOLIS, January 08, 2026--Deluxe (NYSE: DLX), a trusted Payments and Data company, today announced its collaboration with Visa to implement Visa Direct. This collaboration introduces dlxFastFundsSM, a funding solution that leverages Visa\u2019s trusted payment network to help businesses take control of their cash flow by skipping the typical one- to two-day settlement delay.",
634
+ "url": "https://finnhub.io/api/news?id=39cfb0684de57341da1b77116e273e6971c05fd8c71cf3ab7f58736916546ba5",
635
+ "datetime": "2026-01-09T03:31:00",
636
+ "source": "Finnhub",
637
+ "subreddit": null
638
+ },
639
+ {
640
+ "title": "ONDS--drones, so hot right now...drones.",
641
+ "content": "V cool and v legal company with a lot of room to grow in the coming years. Also, trains are involved...literally an autist's dream. ",
642
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q7jaje/ondsdrones_so_hot_right_nowdrones/",
643
+ "datetime": "2026-01-08T23:44:38",
644
+ "source": "Reddit",
645
+ "subreddit": "r/wallstreetbets"
646
+ },
647
+ {
648
+ "title": "Polygon Labs Launches Open Money Stack to Bridge Fiat and Onchain Settlement",
649
+ "content": "Polygon Labs has unveiled the Open Money Stack, a new set of rails designed to support regulated stablecoin payments and close the infrastructure gap between wallets, fiat access, routing and orchestration, compliance, and on-chain settlement. The next three years will define how money moves over the next thirty years.The Polygon ...",
650
+ "url": "https://finnhub.io/api/news?id=fdda05347f5ac2f705b44111e768cbfa316c11a0bb79c9d19991330d26e65f8d",
651
+ "datetime": "2026-01-08T22:03:06",
652
+ "source": "Finnhub",
653
+ "subreddit": null
654
+ },
655
+ {
656
+ "title": "EA SPORTS\u2122 Presents Madden Bowl to Headline Super Bowl LX Week With Luke Combs, Teddy Swims and More",
657
+ "content": "REDWOOD CITY, Calif., January 08, 2026--EA SPORTS\u2122 today unveiled the music lineup for EA SPORTS\u2122 Presents Madden Bowl in Partnership with Visa, delivering Super Bowl week\u2019s premier night of football and culture to the Bay. On Friday, February 6, Luke Combs, Teddy Swims, Stephen Wilson Jr, Gavin Adcock, and the Bay Area\u2019s own LaRussell will take over San Francisco\u2019s Chase Center for a high-energy celebration bringing fans, music, and football together under one roof.",
658
+ "url": "https://finnhub.io/api/news?id=2a92a99d52190b4eda53a7f562ce880f50cc2c51e624e686fbbf3a5c8a2fb74f",
659
+ "datetime": "2026-01-08T22:00:00",
660
+ "source": "Finnhub",
661
+ "subreddit": null
662
+ },
663
+ {
664
+ "title": "What Recent Analyst Calls Mean For Visa\u2019s (V) Evolving Story And Valuation",
665
+ "content": "Why Visa\u2019s Price Target Just Nudged Higher Visa\u2019s modeled fair value estimate has shifted only slightly to about US$395.85 from US$395.44, a small change that still reflects the company\u2019s central role in global payments and its large, widely used network. This modest move aligns with views that Visa\u2019s brand strength, cross border business and perceived quality versus some peers can support a higher price target, even as more cautious voices point to execution risks and already high...",
666
+ "url": "https://finnhub.io/api/news?id=7bdee8df49015189419a1c3f7dd04cbf86dc080cea8ec9bea3afc4d30a091aa0",
667
+ "datetime": "2026-01-08T10:38:55",
668
+ "source": "Finnhub",
669
+ "subreddit": null
670
+ },
671
+ {
672
+ "title": "Third time is charm for posting",
673
+ "content": "Whatever is the reason, it keeps getting removed so I am posting gain.",
674
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q72kc9/third_time_is_charm_for_posting/",
675
+ "datetime": "2026-01-08T10:17:17",
676
+ "source": "Reddit",
677
+ "subreddit": "r/wallstreetbets"
678
+ },
679
+ {
680
+ "title": "Casino Apps USA 2026: LoneStar's Leading Mobile Casino App",
681
+ "content": "A 2026 Look at LoneStar\u2019s Mobile-First Sweepstakes Casino Platform, Features, and User Experience in the U.S.Atlantic City, New Jersey, Jan. 07, 2026 (GLOBE NEWSWIRE) -- The LoneStar Casino app has quickly emerged as a top choice for American players since its successful launch in early 2025. Noting the impact of mobile gaming, the sweepstakes casino has mainly focused on convenience and flexibility through a mobile-optimized platform. As a newcomer to the sweepstakes community, LoneStar has ent",
682
+ "url": "https://finnhub.io/api/news?id=3cadc758fda0b63f99d52bdd5767671a30c6b458f5faa448dbe318d8954f46c7",
683
+ "datetime": "2026-01-08T06:21:00",
684
+ "source": "Finnhub",
685
+ "subreddit": null
686
+ },
687
+ {
688
+ "title": "SCHD ETF Alternative Strategy Aimed For Higher Total Return",
689
+ "content": "4-factor dividend growth portfolio beats SCHD: 14.74% CAGR vs 7.28%. Portfolio turnover averages 40\u00e2\u0080\u009350% annually, with stable dividend growth. See more here.",
690
+ "url": "https://finnhub.io/api/news?id=dbd59f8f7ee961e57a20dfa24f9f4284f6813c4bfe3ddd2217fbd06f79f32720",
691
+ "datetime": "2026-01-08T04:28:03",
692
+ "source": "Finnhub",
693
+ "subreddit": null
694
+ },
695
+ {
696
+ "title": "Global Card Fraud Losses at $33 Billion",
697
+ "content": "The Nilson Report Marks Decline in Card FraudSANTA BARBARA, Calif., Jan. 07, 2026 (GLOBE NEWSWIRE) -- Payment card fraud losses worldwide dipped 1.2% to $33.41 billion in 2024, according to the Nilson Report, the leading trade publication covering the global payment card industry. This fraud was tied to global card volume of $51.920 trillion. Losses to fraud are incurred by credit, debit and prepaid card issuers, merchants, processors of card payments from merchants and processors of card transa",
698
+ "url": "https://finnhub.io/api/news?id=243d4205b93aae6fa120b268c218a30c7586056da88b5a6dc353084ca0a44f1f",
699
+ "datetime": "2026-01-07T22:38:00",
700
+ "source": "Finnhub",
701
+ "subreddit": null
702
+ },
703
+ {
704
+ "title": "WEX or V: Which Is the Better Value Stock Right Now?",
705
+ "content": "WEX vs. V: Which Stock Is the Better Value Option?",
706
+ "url": "https://finnhub.io/api/news?id=db10552a92d9208e9243100ac6c641d30aa7d824a0385d058880091cad0be3df",
707
+ "datetime": "2026-01-07T22:10:08",
708
+ "source": "Finnhub",
709
+ "subreddit": null
710
+ },
711
+ {
712
+ "title": "Visa Stock's Steady 14.4% Rise in A Year: Can 2026 Add More Firepower?",
713
+ "content": "V's quiet consistency powers growth, stablecoin expansion, and AI-ready rails, steady, not flashy, but hard to ignore.",
714
+ "url": "https://finnhub.io/api/news?id=99ab1a0174780352d537a5fa91fba8ed2d0753082ced1833a627155f34e12ebc",
715
+ "datetime": "2026-01-07T21:30:00",
716
+ "source": "Finnhub",
717
+ "subreddit": null
718
+ },
719
+ {
720
+ "title": "How nonpayments became big business at Visa and Mastercard",
721
+ "content": "With fintechs and legal cases pressuring payment fees, the card companies are leaning more on revenue from other sources.",
722
+ "url": "https://finnhub.io/api/news?id=12860aaa4567cbf6661f2e4326a988edcd3ac22f58674961e4a1ee7236f46bd3",
723
+ "datetime": "2026-01-07T21:30:00",
724
+ "source": "Finnhub",
725
+ "subreddit": null
726
+ },
727
+ {
728
+ "title": "Investors Heavily Search Visa Inc. (V): Here is What You Need to Know",
729
+ "content": "Zacks.com users have recently been watching Visa (V) quite a bit. Thus, it is worth knowing the facts that could determine the stock's prospects.",
730
+ "url": "https://finnhub.io/api/news?id=f163bc032a9a11ef14cb90f78f037851789de56300db553a735c964c297773a6",
731
+ "datetime": "2026-01-07T19:30:02",
732
+ "source": "Finnhub",
733
+ "subreddit": null
734
+ },
735
+ {
736
+ "title": "Diginex Limited Announces Signing of Definitive Agreement to Acquire Plan A, Creating One of Europe\u2019s Leading Integrated ESG, Carbon Accounting and Decarbonization Platforms",
737
+ "content": "The combined business will deliver a single sophisticated platform to expand beyond existing strategic relationships, including HSBC, Coca Cola, Visa, and BMW.LONDON, Jan. 07, 2026 (GLOBE NEWSWIRE) -- Diginex Limited (NASDAQ: DGNX), a leading provider of Sustainability RegTech and data management solutions, today announced the signing of a definitive share purchase and transfer agreement (the \u201cSPTA\u201d), to acquire PlanA.earth GmbH (\"Plan A\"), one of Europe's leading AI-powered carbon accounting an",
738
+ "url": "https://finnhub.io/api/news?id=b8513dc445d50098a89a945f4795b079d4972cd3dc7787af8eda7aee4eebb102",
739
+ "datetime": "2026-01-07T18:30:00",
740
+ "source": "Finnhub",
741
+ "subreddit": null
742
+ },
743
+ {
744
+ "title": "Visa, Mastercard, ACI and Wex: 2026 predictions",
745
+ "content": "Major payments companies see several 2026 trends beyond the much-discussed stablecoin and agentic commerce crazes.",
746
+ "url": "https://finnhub.io/api/news?id=79b17d21b24b5c097282d9ccc00dd1840b91800c69c082c5decd99ee7b54b06a",
747
+ "datetime": "2026-01-07T15:45:00",
748
+ "source": "Finnhub",
749
+ "subreddit": null
750
+ },
751
+ {
752
+ "title": "Visa Crypto Card Spending Jumps 525%: Is Mainstream Adoption Finally Here?",
753
+ "content": "Visa-linked crypto card spending jumped 525% in 2025, rising from $14.6M to $91.3M in net spend, according to a Dune dashboard from @obchakevich research. This shift fits a broader pattern. Stablecoins and payment rails now carry trillions of dollars in monthly volume, turning crypto from speculation into something closer to ...",
754
+ "url": "https://finnhub.io/api/news?id=d0893c2096069a6eafd7fdc5fbe197be07fa1a9b4aec82a1f15ed17941cfeeba",
755
+ "datetime": "2026-01-07T14:43:41",
756
+ "source": "Finnhub",
757
+ "subreddit": null
758
+ },
759
+ {
760
+ "title": "Visa: The Easiest Way To Benefit From Consumers",
761
+ "content": "Visa stock is a \"Buy\" given its tollbooth role in the global economy. Here's what investors need to know.",
762
+ "url": "https://finnhub.io/api/news?id=0c74dc085ccd9cf2e470899b1d89b0d0b1a854e62e63b6bfea0f458623641e8e",
763
+ "datetime": "2026-01-07T13:30:00",
764
+ "source": "Finnhub",
765
+ "subreddit": null
766
+ },
767
+ {
768
+ "title": "Visa (V): 3 Reasons We Love This Stock",
769
+ "content": "Since July 2025, Visa has been in a holding pattern, floating around $357.79. The stock also fell short of the S&P 500\u2019s 10.8% gain during that period.",
770
+ "url": "https://finnhub.io/api/news?id=a708d77d34904a4beb1e1a1e1e746cb8146edc91b6158a3f6d004c7582d0e2f2",
771
+ "datetime": "2026-01-07T09:33:09",
772
+ "source": "Finnhub",
773
+ "subreddit": null
774
+ },
775
+ {
776
+ "title": "Is Visa (V) Still Reasonably Priced After Multi Year Share Price Strength?",
777
+ "content": "If you are wondering whether Visa's current share price still offers value, it helps to step back and look at what the recent numbers are actually telling you. Visa shares last closed at US$357.56, with returns of 1.1% over 7 days, 7.9% over 30 days, 3.2% year to date, 15.5% over 1 year, 65.4% over 3 years and 77.5% over 5 years. This gives you a clear snapshot of how the stock has behaved over different time frames. Recent headlines around Visa have largely focused on its role in global...",
778
+ "url": "https://finnhub.io/api/news?id=3eb7d568e1fd40b842e6a56df369e6dd7de93cd12ae832778e569cafb5017f62",
779
+ "datetime": "2026-01-07T08:49:52",
780
+ "source": "Finnhub",
781
+ "subreddit": null
782
+ },
783
+ {
784
+ "title": "Visa vs. Mastercard: Which Is the Better Growth Stock for 2026?",
785
+ "content": "Both companies have impressive business momentum, but one stock looks like the better buy headed into 2026.",
786
+ "url": "https://finnhub.io/api/news?id=28bdd8a4f1c45d08c86afe55ddf494344df26baff255304b968ea9f9d8027865",
787
+ "datetime": "2026-01-07T03:46:00",
788
+ "source": "Finnhub",
789
+ "subreddit": null
790
+ },
791
+ {
792
+ "title": "Here\u2019s the net worth and income of America\u2019s top 10%. Are you on track to catch up?",
793
+ "content": "Entry into the \"affluent class\" is harder than it used to be.",
794
+ "url": "https://finnhub.io/api/news?id=6eb2042ed3384118ef33e26ac6b10b8c56953db2d71f67857fbc85900ca01cb8",
795
+ "datetime": "2026-01-07T02:30:00",
796
+ "source": "Finnhub",
797
+ "subreddit": null
798
+ },
799
+ {
800
+ "title": "Back again with Moderna calls 400 buys $36 calls",
801
+ "content": "This time I sold before posting to Reddit ",
802
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q5tpzb/back_again_with_moderna_calls_400_buys_36_calls/",
803
+ "datetime": "2026-01-07T01:48:25",
804
+ "source": "Reddit",
805
+ "subreddit": "r/wallstreetbets"
806
+ },
807
+ {
808
+ "title": "How Mastercard Is Diversifying Growth Beyond Card-Based Payments",
809
+ "content": "MA is expanding beyond card payments as value-added services like AI-driven security and data solutions fuel revenue growth.",
810
+ "url": "https://finnhub.io/api/news?id=9a9263d7cd877a1fb516f01e579bd5f3dc9b3559ae7e69203753c9bf99c6fd1a",
811
+ "datetime": "2026-01-06T22:12:00",
812
+ "source": "Finnhub",
813
+ "subreddit": null
814
+ },
815
+ {
816
+ "title": "Why These 3 Mega-Caps Could Still Surprise Investors in 2026",
817
+ "content": "Three durable compounders for 2026: Visa\u2019s payment scale, Walmart\u2019s 52-year dividend streak, and Amazon\u2019s cloud-led rebound after a heavy AI spending cycle.",
818
+ "url": "https://finnhub.io/api/news?id=89558854e0cf2937e14daa88815503902d35d14bb220132d4322827d4ab7f471",
819
+ "datetime": "2026-01-06T22:06:00",
820
+ "source": "Finnhub",
821
+ "subreddit": null
822
+ },
823
+ {
824
+ "title": "Russia\u2019s digital ruble will undercut its own card payment system, says analyst",
825
+ "content": "Digital ruble launch will see bank card market growth fall by up to 12% a year, expert says. MIR is Russia\u2019s answer to Visa and Mastercard. Digital ruble set to roll out in September. Foreign card firms \u201cwill never again dominate the Russian financial system.\u201d",
826
+ "url": "https://finnhub.io/api/news?id=d82bed2d9d6496004aca6f073533eedcac0a0f1292395f71a7c7a649714b526b",
827
+ "datetime": "2026-01-06T21:37:23",
828
+ "source": "Finnhub",
829
+ "subreddit": null
830
+ },
831
+ {
832
+ "title": "Rose's Income Garden Portfolio: 8 December Raises Report",
833
+ "content": "RIG portfolio gained 12.97% in 2025, matching the Dow with a 6.29% forward yield.",
834
+ "url": "https://finnhub.io/api/news?id=8cc766fe43a5294b540bc70630cd3174b8a813bd5c2236ca9bafd8d16e15ff21",
835
+ "datetime": "2026-01-06T21:27:14",
836
+ "source": "Finnhub",
837
+ "subreddit": null
838
+ },
839
+ {
840
+ "title": "Credit Card Processing for Nicotine Pouches is on Tower Payments' Radar for 2026",
841
+ "content": "Tower Payments today announced a focused payment gateway and merchant account service that helps nicotine pouch websites restore stable credit card processing after being declined by Stripe, Square, their bank, or PayPal. Looking toward next year, the service solves the immediate problem of sudden account closures and held deposits by providing an underwritten, nicotine\u2013friendly payment solution with clear pricing and one\u2013on\u2013one support.",
842
+ "url": "https://finnhub.io/api/news?id=7f539e4137ebba7f22056ecb47743b0df70f5f64c249ea021d011ad08d206e9b",
843
+ "datetime": "2026-01-06T19:08:00",
844
+ "source": "Finnhub",
845
+ "subreddit": null
846
+ },
847
+ {
848
+ "title": "Visa, Mastercard track roughly 4% US holiday retail sales growth",
849
+ "content": "The 2025 holiday season saw consumers shopping across channels to land the best deals and maximize convenience, according to new reports.",
850
+ "url": "https://finnhub.io/api/news?id=0d94b758eca0cb33100bfb367ab90de5c2c566b4f52a7f4b95219fb52a772960",
851
+ "datetime": "2026-01-06T16:30:00",
852
+ "source": "Finnhub",
853
+ "subreddit": null
854
+ },
855
+ {
856
+ "title": "Consumer groups attack card settlement",
857
+ "content": "Groups representing consumers and small business joined merchants in faulting a proposed Visa, Mastercard card fee settlement.",
858
+ "url": "https://finnhub.io/api/news?id=77a4e1444b457be52e1e557105ba25b259aa76d4b5c9a0539c2886f146274acb",
859
+ "datetime": "2026-01-06T16:16:00",
860
+ "source": "Finnhub",
861
+ "subreddit": null
862
+ },
863
+ {
864
+ "title": "My Dividend Growth Income: December 2025 Update",
865
+ "content": "Raised forward projected dividend income to $6,289.66 in December. Click here to read my portfolio analysis.",
866
+ "url": "https://finnhub.io/api/news?id=5c160c540ce5c6d099deb64a1fcf413c2fcbed9f7742d7e53f04a16119110529",
867
+ "datetime": "2026-01-06T13:49:06",
868
+ "source": "Finnhub",
869
+ "subreddit": null
870
+ },
871
+ {
872
+ "title": "Freedom Capital Sees Strong Results at Mastercard (MA), Maintains Hold View",
873
+ "content": "Mastercard Incorporated (NYSE:MA) is included among the 13 Best January Dividend Stocks to Invest in. On December 25, Freedom Capital analyst Mikhail Paramonov raised the firm\u2019s price target on Mastercard Incorporated (NYSE:MA) to $655 from $635 and kept a Hold rating on the shares. The change followed what the firm described as \u201cstrong\u201d Q4 results. [\u2026]",
874
+ "url": "https://finnhub.io/api/news?id=4b3e435d2ca911a2998a9d3c7f0eb62b9128c63714bf66681a6856606d3e2928",
875
+ "datetime": "2026-01-06T08:13:43",
876
+ "source": "Finnhub",
877
+ "subreddit": null
878
+ },
879
+ {
880
+ "title": "PayPal Casinos 2026: High 5 Casino Selected as Leading PayPal Casino",
881
+ "content": "CasinoTop10 Highlights High 5 Casino\u2019s PayPal Integration, Fast Transactions, and Player-Focused Gaming Experience for 2026 CHICAGO, IL, Jan. 05, 2026 (GLOBE NEWSWIRE) -- CasinoTop10, a trusted voice in igaming reviews, has officially named High 5 Casino as the best PayPal Casino, ranking the platform as the best for lightning-fast PayPal deposits and instant payouts. The site ensures a seamless online gaming experience for all players, enabling them to top up their accounts and withdraw their h",
882
+ "url": "https://finnhub.io/api/news?id=be6cb4b91f43dc5e99e2f63c101a07e10068099c6783c6a1184a5aabcdb51bb1",
883
+ "datetime": "2026-01-06T07:48:00",
884
+ "source": "Finnhub",
885
+ "subreddit": null
886
+ },
887
+ {
888
+ "title": "Prediction: The S&P 500 $1 Trillion Club Will Double Between 2026 and 2030",
889
+ "content": "Several companies could see massive gains by 2030 to join the vaunted club.",
890
+ "url": "https://finnhub.io/api/news?id=c21b8422372dcd0fd38b21180a0c04914df14d2c1119ec0bda01a12f79987df4",
891
+ "datetime": "2026-01-06T05:50:00",
892
+ "source": "Finnhub",
893
+ "subreddit": null
894
+ },
895
+ {
896
+ "title": "Why Does Visa Continue to Sit at the Center of Digital Payments?",
897
+ "content": "V remains central to digital payments thanks to its massive global network, transaction-based model and expanding value-added services as cash use declines.",
898
+ "url": "https://finnhub.io/api/news?id=b5eddf6787f624c20230022bc875bff0829bfbd65bf821721992595f16931e20",
899
+ "datetime": "2026-01-05T22:38:00",
900
+ "source": "Finnhub",
901
+ "subreddit": null
902
+ },
903
+ {
904
+ "title": "Visa Inc. Cl A stock underperforms Monday when compared to competitors despite daily gains",
905
+ "content": "Visa Inc. Cl A stock underperforms Monday when compared to competitors despite daily gains",
906
+ "url": "https://finnhub.io/api/news?id=d571ceea6eeefe63ee6aaab7ecb7cfbbd580622a0b3d8dc8ed2de3f76a1a5e40",
907
+ "datetime": "2026-01-05T22:01:00",
908
+ "source": "Finnhub",
909
+ "subreddit": null
910
+ },
911
+ {
912
+ "title": "My Dividend Stock Portfolio: New November Dividend Record - 100 Holdings With 12 Buys",
913
+ "content": "Read about the latest moves in my dividend stock portfolio and why I trimmed NVDA/AMD on valuation and rotated into BDCs (ARCC, OBDC, HTGC) for yield.",
914
+ "url": "https://finnhub.io/api/news?id=c7d57cc52fce12c1c1fb6836f77982bdb9233d7d33af4280465110aaef63946d",
915
+ "datetime": "2026-01-05T21:17:28",
916
+ "source": "Finnhub",
917
+ "subreddit": null
918
+ },
919
+ {
920
+ "title": "This Week In Digital Payment - South Africa Embraces Cashless Revolution With Rapid Growth",
921
+ "content": "South Africa's digital payment landscape is experiencing significant growth, as highlighted by a report from EBC Financial Group. The rapid adoption of cashless transactions is fostering greater financial inclusion and economic participation, with card-based transactions projected to surpass ZAR2.9 trillion ($159 billion) by 2025. This growth is driven by increased merchant acceptance, advancements in contactless technology, and the proliferation of mobile-led payments. Moreover, the...",
922
+ "url": "https://finnhub.io/api/news?id=06324755f2f1329987484ca015be14f3b68d50036283538519a382208d4cede4",
923
+ "datetime": "2026-01-05T18:07:30",
924
+ "source": "Finnhub",
925
+ "subreddit": null
926
+ },
927
+ {
928
+ "title": "VIG: Proof That A Higher Yield Isn't Everything",
929
+ "content": "Vanguard Dividend Appreciation ETF (VIG) mixes dividend growth with favorable sectors. Read more about VIG here.",
930
+ "url": "https://finnhub.io/api/news?id=1c161cf429298579cc1f69edda183ab767a637d65062d78afe362969dd6b2950",
931
+ "datetime": "2026-01-05T12:45:00",
932
+ "source": "Finnhub",
933
+ "subreddit": null
934
+ },
935
+ {
936
+ "title": "Visa-Issued Crypto Card Spending Jumps 525% in 2025",
937
+ "content": "Spending through Visa-issued crypto cards surged in 2025, with total net transaction volume rising 525% over the year, signaling growing consumer use of crypto-linked payment products for everyday purchases. Key Takeaways: Visa-issued crypto card spending jumped 525% in 2025, pointing to rising everyday use of crypto-linked payments. EtherFi led all ...",
938
+ "url": "https://finnhub.io/api/news?id=67b60cdfe08396c77986e5ad68bdda901e8afc1b6eba64040de0fa584688c7ec",
939
+ "datetime": "2026-01-05T12:43:11",
940
+ "source": "Finnhub",
941
+ "subreddit": null
942
+ },
943
+ {
944
+ "title": "Why is no one seeing the bigger picture?",
945
+ "content": "&gt;\\*Disclaimer\\*\n\n&gt;The information provided is for educational and informational purposes only and does not constitute financial, investment, legal, or tax advice. Economic conditions, markets, and regulations can change rapidly, and past performance is not indicative of future results. You should conduct your own research and consult with a qualified professional before making any financial decisions.\n\n\n\nOk First of all i'm not good with words im more good with math and numbers... so i'll ",
946
+ "url": "https://reddit.com/r/stocks/comments/1q3e6jr/why_is_no_one_seeing_the_bigger_picture/",
947
+ "datetime": "2026-01-04T08:16:33",
948
+ "source": "Reddit",
949
+ "subreddit": "r/stocks"
950
+ }
951
+ ],
952
+ "item_count": 58,
953
+ "sources_used": [
954
+ "Finnhub",
955
+ "Reddit"
956
+ ],
957
+ "source": "sentiment-basket",
958
+ "as_of": "2026-01-11"
959
+ },
960
+ "generated_at": "2026-01-11T12:32:18.332380"
961
+ }
962
+ ```
docs/mcp_raw_visa_test.json ADDED
@@ -0,0 +1,1368 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "ticker": "V",
3
+ "company_name": "Visa Inc.",
4
+ "sources_available": [
5
+ "financials",
6
+ "valuation",
7
+ "volatility",
8
+ "macro",
9
+ "news",
10
+ "sentiment"
11
+ ],
12
+ "sources_failed": [],
13
+ "metrics": {
14
+ "financials": {
15
+ "group": "source_comparison",
16
+ "ticker": "V",
17
+ "sources": {
18
+ "sec_edgar": {
19
+ "source": "SEC EDGAR XBRL",
20
+ "data": {
21
+ "financials": {
22
+ "ticker": "V",
23
+ "source": "SEC EDGAR XBRL",
24
+ "as_of": "2026-01-11",
25
+ "revenue": {
26
+ "value": 40000000000,
27
+ "data_type": "FY",
28
+ "end_date": "2025-09-30",
29
+ "filed": "2025-11-06",
30
+ "fiscal_year": 2025,
31
+ "form": "10-K"
32
+ },
33
+ "net_income": {
34
+ "value": 20058000000,
35
+ "data_type": "FY",
36
+ "end_date": "2025-09-30",
37
+ "filed": "2025-11-06",
38
+ "fiscal_year": 2025,
39
+ "form": "10-K"
40
+ },
41
+ "operating_income": {
42
+ "value": 23994000000,
43
+ "data_type": "FY",
44
+ "end_date": "2025-09-30",
45
+ "filed": "2025-11-06",
46
+ "fiscal_year": 2025,
47
+ "form": "10-K"
48
+ },
49
+ "operating_margin_pct": {
50
+ "value": 59.98,
51
+ "data_type": "FY",
52
+ "end_date": "2025-09-30",
53
+ "filed": "2025-11-06",
54
+ "fiscal_year": 2025,
55
+ "form": "10-K"
56
+ },
57
+ "net_margin_pct": {
58
+ "value": 50.14,
59
+ "data_type": "FY",
60
+ "end_date": "2025-09-30",
61
+ "filed": "2025-11-06",
62
+ "fiscal_year": 2025,
63
+ "form": "10-K"
64
+ },
65
+ "revenue_growth_3yr": {
66
+ "value": 14.34,
67
+ "data_type": "FY",
68
+ "end_date": "2025-09-30",
69
+ "filed": "2025-11-06",
70
+ "fiscal_year": 2025,
71
+ "form": "10-K"
72
+ },
73
+ "total_assets": {
74
+ "value": 99627000000,
75
+ "data_type": "FY",
76
+ "end_date": "2025-09-30",
77
+ "filed": "2025-11-06",
78
+ "fiscal_year": 2025,
79
+ "form": "10-K"
80
+ },
81
+ "total_liabilities": {
82
+ "value": 61718000000,
83
+ "data_type": "FY",
84
+ "end_date": "2025-09-30",
85
+ "filed": "2025-11-06",
86
+ "fiscal_year": 2025,
87
+ "form": "10-K"
88
+ },
89
+ "stockholders_equity": {
90
+ "value": 26437000000,
91
+ "data_type": "FY",
92
+ "end_date": "2011-09-30",
93
+ "filed": "2011-11-18",
94
+ "fiscal_year": 2011,
95
+ "form": "10-K"
96
+ }
97
+ },
98
+ "debt": {
99
+ "ticker": "V",
100
+ "source": "SEC EDGAR XBRL",
101
+ "as_of": "2026-01-11",
102
+ "long_term_debt": {
103
+ "value": 20977000000,
104
+ "data_type": "FY",
105
+ "end_date": "2021-09-30",
106
+ "filed": "2021-11-18",
107
+ "fiscal_year": 2021,
108
+ "form": "10-K"
109
+ },
110
+ "total_debt": {
111
+ "value": 25171000000,
112
+ "data_type": "FY",
113
+ "end_date": "2025-09-30",
114
+ "filed": "2025-11-06",
115
+ "fiscal_year": 2025,
116
+ "form": "10-K"
117
+ },
118
+ "cash": {
119
+ "value": 17164000000,
120
+ "data_type": "FY",
121
+ "end_date": "2025-09-30",
122
+ "filed": "2025-11-06",
123
+ "fiscal_year": 2025,
124
+ "form": "10-K"
125
+ },
126
+ "net_debt": {
127
+ "value": 8007000000,
128
+ "data_type": "FY",
129
+ "end_date": "2025-09-30",
130
+ "filed": "2025-11-06",
131
+ "fiscal_year": 2025,
132
+ "form": "10-K"
133
+ },
134
+ "debt_to_equity": {
135
+ "value": 0.95,
136
+ "data_type": "FY",
137
+ "end_date": "2025-09-30",
138
+ "filed": "2025-11-06",
139
+ "fiscal_year": 2025,
140
+ "form": "10-K"
141
+ }
142
+ },
143
+ "cash_flow": {
144
+ "ticker": "V",
145
+ "source": "SEC EDGAR XBRL",
146
+ "as_of": "2026-01-11",
147
+ "operating_cash_flow": {
148
+ "value": 23059000000,
149
+ "data_type": "FY",
150
+ "end_date": "2025-09-30",
151
+ "filed": "2025-11-06",
152
+ "fiscal_year": 2025,
153
+ "form": "10-K"
154
+ },
155
+ "capital_expenditure": {
156
+ "value": 59000000,
157
+ "data_type": "FY",
158
+ "end_date": "2025-09-30",
159
+ "filed": "2025-11-06",
160
+ "fiscal_year": 2025,
161
+ "form": "10-K"
162
+ },
163
+ "free_cash_flow": {
164
+ "value": 23000000000,
165
+ "data_type": "FY",
166
+ "end_date": "2025-09-30",
167
+ "filed": "2025-11-06",
168
+ "fiscal_year": 2025,
169
+ "form": "10-K"
170
+ }
171
+ }
172
+ }
173
+ },
174
+ "yahoo_finance": {
175
+ "source": "Yahoo Finance",
176
+ "data": {
177
+ "financials": {
178
+ "ticker": "V",
179
+ "source": "Yahoo Finance",
180
+ "as_of": "2026-01-11",
181
+ "revenue": {
182
+ "value": 40000000000,
183
+ "data_type": "TTM",
184
+ "end_date": "2025-09-30",
185
+ "filed": "2026-01-09"
186
+ },
187
+ "net_income": {
188
+ "value": 19853000704,
189
+ "data_type": "TTM",
190
+ "end_date": "2025-09-30",
191
+ "filed": "2026-01-09"
192
+ },
193
+ "gross_profit": {
194
+ "value": 39105998848,
195
+ "data_type": "TTM",
196
+ "end_date": "2025-09-30",
197
+ "filed": "2026-01-09"
198
+ },
199
+ "gross_margin_pct": {
200
+ "value": 97.76,
201
+ "data_type": "TTM",
202
+ "end_date": "2025-09-30",
203
+ "filed": "2026-01-09"
204
+ },
205
+ "net_margin_pct": {
206
+ "value": 49.63,
207
+ "data_type": "TTM",
208
+ "end_date": "2025-09-30",
209
+ "filed": "2026-01-09"
210
+ }
211
+ },
212
+ "debt": {
213
+ "ticker": "V",
214
+ "source": "Yahoo Finance",
215
+ "as_of": "2026-01-11",
216
+ "total_debt": {
217
+ "value": 26083999744,
218
+ "data_type": "Point-in-time",
219
+ "end_date": "2025-09-30",
220
+ "filed": "2026-01-09"
221
+ },
222
+ "cash": {
223
+ "value": 18997000192,
224
+ "data_type": "Point-in-time",
225
+ "end_date": "2025-09-30",
226
+ "filed": "2026-01-09"
227
+ },
228
+ "net_debt": {
229
+ "value": 7086999552,
230
+ "data_type": "Point-in-time",
231
+ "end_date": "2025-09-30",
232
+ "filed": "2026-01-09"
233
+ }
234
+ },
235
+ "cash_flow": {
236
+ "ticker": "V",
237
+ "source": "Yahoo Finance",
238
+ "as_of": "2026-01-11",
239
+ "operating_cash_flow": {
240
+ "value": 23058999296,
241
+ "data_type": "TTM",
242
+ "end_date": "2025-09-30",
243
+ "filed": "2026-01-09"
244
+ },
245
+ "free_cash_flow": {
246
+ "value": 20072873984,
247
+ "data_type": "TTM",
248
+ "end_date": "2025-09-30",
249
+ "filed": "2026-01-09"
250
+ }
251
+ }
252
+ }
253
+ }
254
+ },
255
+ "source": "fundamentals-basket",
256
+ "as_of": "2026-01-11"
257
+ },
258
+ "valuation": {
259
+ "group": "source_comparison",
260
+ "ticker": "V",
261
+ "sources": {
262
+ "yahoo_finance": {
263
+ "source": "Yahoo Finance",
264
+ "regular_market_time": "2026-01-09",
265
+ "data": {
266
+ "current_price": 349.77,
267
+ "market_cap": 675020144640.0,
268
+ "enterprise_value": 677386649600.0,
269
+ "trailing_pe": 34.25759,
270
+ "forward_pe": 24.254278,
271
+ "ps_ratio": 16.875504,
272
+ "pb_ratio": 18.046125,
273
+ "ev_ebitda": 24.168,
274
+ "trailing_peg": 1.9228,
275
+ "forward_peg": null,
276
+ "earnings_growth": -0.014,
277
+ "revenue_growth": 0.115
278
+ }
279
+ },
280
+ "alpha_vantage": {
281
+ "source": "Alpha Vantage",
282
+ "latest_quarter": "2025-09-30",
283
+ "fetched_at": "2026-01-09",
284
+ "data": {
285
+ "current_price": 339.81,
286
+ "market_cap": 675020145000.0,
287
+ "trailing_pe": 34.26,
288
+ "forward_pe": 27.32,
289
+ "ps_ratio": 16.88,
290
+ "pb_ratio": 18.15,
291
+ "ev_ebitda": 26.2,
292
+ "trailing_peg": 1.923,
293
+ "earnings_growth": -0.014,
294
+ "revenue_growth": 0.115
295
+ }
296
+ }
297
+ },
298
+ "source": "valuation-basket",
299
+ "as_of": "2026-01-11"
300
+ },
301
+ "volatility": {
302
+ "group": "raw_metrics",
303
+ "ticker": "V",
304
+ "metrics": {
305
+ "vix": {
306
+ "value": 15.45,
307
+ "data_type": "Daily",
308
+ "as_of": "2026-01-08",
309
+ "source": "FRED (Federal Reserve)",
310
+ "fallback": false
311
+ },
312
+ "vxn": {
313
+ "value": 20.15,
314
+ "data_type": "Daily",
315
+ "as_of": "2026-01-08",
316
+ "source": "FRED (Federal Reserve)",
317
+ "fallback": false
318
+ },
319
+ "beta": {
320
+ "value": 0.785,
321
+ "data_type": "1Y",
322
+ "as_of": "2026-01-09",
323
+ "source": "Calculated from Yahoo Finance data",
324
+ "fallback": false
325
+ },
326
+ "historical_volatility": {
327
+ "value": 22.16,
328
+ "data_type": "30D",
329
+ "as_of": "2026-01-09",
330
+ "source": "Calculated from Yahoo Finance data",
331
+ "fallback": false
332
+ },
333
+ "implied_volatility": {
334
+ "value": 30.0,
335
+ "data_type": "Forward",
336
+ "as_of": "2026-01-11",
337
+ "source": "Market Average (estimated)",
338
+ "fallback": true
339
+ }
340
+ },
341
+ "source": "volatility-basket",
342
+ "as_of": "2026-01-11"
343
+ },
344
+ "macro": {
345
+ "group": "raw_metrics",
346
+ "ticker": "MACRO",
347
+ "metrics": {
348
+ "gdp_growth": {
349
+ "value": 4.3,
350
+ "data_type": "Quarterly",
351
+ "as_of": "2025Q3",
352
+ "source": "BEA (Bureau of Economic Analysis)",
353
+ "fallback": false
354
+ },
355
+ "interest_rate": {
356
+ "value": 3.72,
357
+ "data_type": "Monthly",
358
+ "as_of": "2025-12-01",
359
+ "source": "FRED (Federal Reserve)",
360
+ "fallback": false
361
+ },
362
+ "cpi_inflation": {
363
+ "value": 2.74,
364
+ "data_type": "Monthly",
365
+ "as_of": "2025-November",
366
+ "source": "BLS (Bureau of Labor Statistics)",
367
+ "fallback": false
368
+ },
369
+ "unemployment": {
370
+ "value": 4.4,
371
+ "data_type": "Monthly",
372
+ "as_of": "2025-December",
373
+ "source": "BLS (Bureau of Labor Statistics)",
374
+ "fallback": false
375
+ }
376
+ },
377
+ "source": "macro-basket",
378
+ "as_of": "2026-01-11"
379
+ },
380
+ "news": {
381
+ "group": "content_analysis",
382
+ "ticker": "V",
383
+ "query": "Visa Inc. (V) stock news",
384
+ "items": [
385
+ {
386
+ "title": "After Three Hot Years, Will Stock Markets Sizzle Again?",
387
+ "content": "Returns have been fabulous but consider the potential for setbacks in this already hazardous year, our columnist says.",
388
+ "url": "https://www.nytimes.com/2026/01/09/business/stock-market-investing-returns.html",
389
+ "datetime": "2026-01-09",
390
+ "source": "New York Times"
391
+ },
392
+ {
393
+ "title": "Bill Gates Makes a Multibillion-Dollar Divorce Payout",
394
+ "content": "The billionaire and philanthropist has made a nearly $8 billion payment to the private foundation of his ex-wife, Melinda French Gates, tax filings show.",
395
+ "url": "https://www.nytimes.com/2026/01/09/business/dealbook/gates-divorce-settlement.html",
396
+ "datetime": "2026-01-09",
397
+ "source": "New York Times"
398
+ },
399
+ {
400
+ "title": "Is Visa Inc. (V) One of the Best Major Stocks to Invest in Right Now?",
401
+ "content": "Visa Inc. (NYSE:V) is one of the best major stocks to invest in right now. Monness, Crespi, Hardt & Co., Inc. reiterated a Hold rating on Visa Inc. (NYSE:V) ...",
402
+ "url": "https://finance.yahoo.com/news/visa-inc-v-one-best-092151784.html",
403
+ "datetime": "2026-01-09",
404
+ "source": "Yahoo Entertainment"
405
+ },
406
+ {
407
+ "title": "All Eyes on the U.S. in 2026",
408
+ "content": "Our reporters in Washington tell us what they\u2019re watching from the Trump administration.",
409
+ "url": "https://www.nytimes.com/2026/01/07/world/us-trump-venezuela-2026.html",
410
+ "datetime": "2026-01-07",
411
+ "source": "New York Times"
412
+ },
413
+ {
414
+ "title": "Why Trump\u2019s Greenland Strategy Has the World on Edge",
415
+ "content": "The president is again focused on acquiring the mineral-rich island. But lack of clarity about his goals and tactics is weighing on political and business leaders.",
416
+ "url": "https://www.nytimes.com/2026/01/07/business/dealbook/buy-invade-trump-greenland.html",
417
+ "datetime": "2026-01-07",
418
+ "source": "New York Times"
419
+ },
420
+ {
421
+ "title": "Oil Stocks Rally as Investors Bet on Return to Venezuela",
422
+ "content": "The energy sector of the S&P 500 rose 2.7 percent on Monday, lifting the broader market.",
423
+ "url": "https://www.nytimes.com/2026/01/05/business/oil-stocks-venezuela.html",
424
+ "datetime": "2026-01-05",
425
+ "source": "New York Times"
426
+ },
427
+ {
428
+ "title": "5 fantastic ASX ETFs for beginners in 2026",
429
+ "content": "These funds are highly rated for a reason. Here's what you need to know about them.\nThe post 5 fantastic ASX ETFs for beginners in 2026 appeared first on The Motley Fool Australia.",
430
+ "url": "https://www.fool.com.au/2026/01/02/5-fantastic-asx-etfs-for-beginners-in-2026/",
431
+ "datetime": "2026-01-02",
432
+ "source": "Motley Fool Australia"
433
+ },
434
+ {
435
+ "title": "Visa (NYSE: V) Stock Price Prediction and Forecast 2026-2030 (Jan 2026)",
436
+ "content": "This year, Visa Inc. (NYSE: V) has unveiled a scam disruption initiative, adoption of its \u201cTap to Phone\u201d technology has soared, it unveiled its vision for artificial intelligence (AI) in commerce, and it expanded its capabilities in the digital currency space\u2026",
437
+ "url": "https://biztoc.com/x/c031d63d4b6abfd2",
438
+ "datetime": "2026-01-01",
439
+ "source": "Biztoc.com"
440
+ },
441
+ {
442
+ "title": "Visa Stock Price and Chart \u2014 NYSE:V",
443
+ "content": "# Visa Inc. Visa (V): Emerging Uptrend Backed by Exceptional FundamentalsVisa is showing renewed technical strength, marked by the formation of higher highs and higher lows, with price action firmly holding above both the 20- and 50-day EMAs. This move follows a decisive breakout from a prolonged downtrend, signaling a shift in market structure toward a bullish trend. Visa Inc. 3.875% 15-MAY-2044. Visa Inc. 3.5% 15-MAY-2037. Watch Visa Inc.stock price performance more closely on the chart. For instance, on NYSEexchange Visa Inc.stocks are traded under the ticker V. Watch V chart and read a more detailed Visa Inc. stock forecast: see what analysts think of Visa Inc. and suggest that you do with its stocks. Track Visa Inc.stock price on the chart and check out the list of the most volatile stocks \u2014 is Visa Inc. there? You can trade Visa Inc.stock right from TradingView charts \u2014 choose your broker and connect to your account. Since market conditions are prone to changes, it's worth looking a bit further into the future \u2014 according to the 1 month rating Visa Inc.stock shows the buy signal.",
444
+ "url": "https://www.tradingview.com/symbols/NYSE-V/",
445
+ "datetime": null,
446
+ "source": null
447
+ },
448
+ {
449
+ "title": "V: Visa Inc - Stock Price, Quote and News",
450
+ "content": "# Visa Inc V:NYSE. * 52 Week High Date06/11/25. * 52 Week Low Date04/07/25. ## Latest On Visa Inc. * CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and VisaCNBC.com. And payment giants are preparingCNBC.com. * Economy grows, chip tariff delay, new S&P 500 record and more in Morning SquawkCNBC.com. ## Latest On Visa Inc. * CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and VisaCNBC.com. And payment giants are preparingCNBC.com. * 52 Week High Date06/11/25. * 52 Week Low Date04/07/25. * P/E (TTM)34.66. * Earnings Date01/28/2026(est). * When Stock Recovery Defeats Securities Fraud Claims: The Visa DecisionTipRanks. * Monness Keeps Their Hold Rating on Visa (V)\")TipRanks. * Visa Stock Stumbles While Its Crypto Card Network Sees 525% Volume ExplosionTipRanks. * Visa Updates Class B Conversion Rates After Escrow DepositTipRanks. CNBC's Investment Committee's Top Picks for 2026: Amazon, Sabra and Visa. Visa Inc. is a global payments technology company. Vice Chairman, Chief People and Corporate Affairs Officer and Corporate Secretary. Independent Chairman of the Board.",
451
+ "url": "https://www.cnbc.com/quotes/V",
452
+ "datetime": null,
453
+ "source": null
454
+ },
455
+ {
456
+ "title": "Buy or Sell Visa Stock - V Stock Price Quote & News",
457
+ "content": "On 2026-01-09, Visa(V) stock moved within a range of $349.00 to $354.70. With shares now at $355.54, the stock is trading +1.9% above its intraday low and +0.2%",
458
+ "url": "https://robinhood.com/us/en/stocks/V/",
459
+ "datetime": null,
460
+ "source": null
461
+ },
462
+ {
463
+ "title": "Visa Inc. (V) Stock Price, News, Quote & History",
464
+ "content": "(V) Stock Price, News, Quote & History - Yahoo Finance. ### [News](https://www.yahoo.com/). * [US](https://www.yahoo.com/news/us/). ### [Finance](https://finance.yahoo.com/). * [My Portfolio](https://finance.yahoo.com/portfolios/). * [News](https://finance.yahoo.com/news/). + [Earnings](https://finance.yahoo.com/topic/earnings/). * [Markets](https://finance.yahoo.com/markets/). + [Stocks](https://finance.yahoo.com/markets/stocks/). - [Highest dividend](https://finance.yahoo.com/markets/stocks/highest-dividend/). - [Unusual volume](https://finance.yahoo.com/markets/stocks/unusual-volume-stocks/). + [Private companies](https://finance.yahoo.com/markets/private-companies/highest-valuation/). - [52 week gainers](https://finance.yahoo.com/markets/private-companies/52-week-gainers/). - [Most funded](https://finance.yahoo.com/markets/private-companies/most-funded/). + [Sectors](https://finance.yahoo.com/sectors/). - [Technology](https://finance.yahoo.com/sectors/technology/). - [Financial services](https://finance.yahoo.com/sectors/financial-services/). - [Industrials](https://finance.yahoo.com/sectors/industrials/). + [Futures](https://finance.yahoo.com/markets/commodities/). + [Currencies](https://finance.yahoo.com/markets/currencies/ ). + [Calendar](https://finance.yahoo.com/calendar/). - [Earnings](https://finance.yahoo.com/calendar/earnings/). - [First time homebuyer](https://finance.yahoo.com/personal-finance/mortgages/article/first-time-home-buyer-195246478.html). * [Videos](https://finance.yahoo.com/videos/). * [Watch Now](https://finance.yahoo.com/live/). ### [Sports](https://sports.yahoo.com/). * [Show all](https://sports.yahoo.com/). * [News](https://www.yahoo.com/). * [Finance](https://finance.yahoo.com/). * [Sports](https://sports.yahoo.com/). + [News](https://www.yahoo.com/). - [US](https://www.yahoo.com/news/us/). + [Finance](https://finance.yahoo.com/). - [My portfolio](https://finance.yahoo.com/portfolios/). - [Markets](https://finance.yahoo.com/calendar/). - [News](https://finance.yahoo.com/news/). - [Videos](https://finance.yahoo.com/videos/). - [Sectors](https://finance.yahoo.com/sectors/). + [Sports](https://sports.yahoo.com/). - [Show all](https://sports.yahoo.com/). 1. [My Portfolio](https://finance.yahoo.com/portfolios/). 2. [News](https://finance.yahoo.com/news/). 7. [Earnings](https://finance.yahoo.com/topic/earnings/). 3. [Markets](https://finance.yahoo.com/markets/). 1. [Stocks](https://finance.yahoo.com/markets/stocks/). 5. [Highest dividend](https://finance.yahoo.com/markets/stocks/highest-dividend/). [Unusual volume](https://finance.yahoo.com/markets/stocks/unusual-volume-stocks/). 4. [Private companies](https://finance.yahoo.com/markets/private-companies/highest-valuation/). 1. [52 week gainers](https://finance.yahoo.com/markets/private-companies/52-week-gainers/). 3. [Most funded](https://finance.yahoo.com/markets/private-companies/most-funded/). 5. [Sectors](https://finance.yahoo.com/sectors/). 1. [Technology](https://finance.yahoo.com/sectors/technology/). 2. [Financial services](https://finance.yahoo.com/sectors/financial-services/). 6. [Industrials](https://finance.yahoo.com/sectors/industrials/). 7. [Futures](https://finance.yahoo.com/markets/commodities/). 8. [Currencies](https://finance.yahoo.com/markets/currencies/ ). 3. [Calendar](https://finance.yahoo.com/calendar/). 1. [Earnings](https://finance.yahoo.com/calendar/earnings/). 1. [My Money BETA](https://finance.yahoo.com/my-money/). 4. [First time homebuyer](https://finance.yahoo.com/personal-finance/mortgages/article/first-time-home-buyer-195246478.html). 7. [Videos](https://finance.yahoo.com/videos/). 8. [Watch Now](https://finance.yahoo.com/live/).",
465
+ "url": "https://finance.yahoo.com/quote/V/",
466
+ "datetime": null,
467
+ "source": null
468
+ }
469
+ ],
470
+ "item_count": 12,
471
+ "sources_used": [
472
+ "Tavily",
473
+ "NYT",
474
+ "NewsAPI"
475
+ ],
476
+ "source": "news-basket",
477
+ "as_of": "2026-01-11"
478
+ },
479
+ "sentiment": {
480
+ "group": "content_analysis",
481
+ "ticker": "V",
482
+ "items": [
483
+ {
484
+ "title": "Googl gains",
485
+ "content": "Bought after 2025 February earnings, doubled down in April dip, some more in May dip. Started with 60k. \n\nSold lots of weeklies to you regards against my long calls; just closed my position. \n\nWill dip my legs into goog again for the next run to $400. \n\nMicro contributors - aapl in Jan, Msft in May; avgo after earnings and MU. ",
486
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q9r6es/googl_gains/",
487
+ "datetime": "2026-01-11",
488
+ "source": "Reddit",
489
+ "subreddit": "r/wallstreetbets"
490
+ },
491
+ {
492
+ "title": "5 Things That Won't Happen In 2026 (The Alpha Of Inertia)",
493
+ "content": "This article lays out five slow-moving certainties for 2026 that investors can lean on. Click here to read more.",
494
+ "url": "https://finnhub.io/api/news?id=dc02cc7e318de2d458d5b92b23ef870ba3ca8e58c355af40624245a0a5104aac",
495
+ "datetime": "2026-01-10",
496
+ "source": "Finnhub",
497
+ "subreddit": null
498
+ },
499
+ {
500
+ "title": "Oklo ride to 1000$",
501
+ "content": "Call me skeptical boys but after losing a 160k I am going to let this ride to the moon. Not going to take profits until expiration. Diamond hands \ud83d\udc8e\ud83d\ude4c Let\u2019s see how much this can make me..",
502
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q9b1qx/oklo_ride_to_1000/",
503
+ "datetime": "2026-01-10",
504
+ "source": "Reddit",
505
+ "subreddit": "r/wallstreetbets"
506
+ },
507
+ {
508
+ "title": "Rain Raises $250 Million at $1.95 Billion Valuation for Stablecoin Payments Expansion",
509
+ "content": "ICONIQ led the round as Rain targets growth across the Americas, Europe, Asia and Africa.",
510
+ "url": "https://finnhub.io/api/news?id=5b4865a899c398090c883407215234a2257358b44e7887e6273245102ea078e3",
511
+ "datetime": "2026-01-09",
512
+ "source": "Finnhub",
513
+ "subreddit": null
514
+ },
515
+ {
516
+ "title": "Visa's Tokenization Push Is Becoming More Than a Security Play",
517
+ "content": "V's tokenization push is evolving beyond security, boosting transaction efficiency, AI-driven insights and seamless payments across devices.",
518
+ "url": "https://finnhub.io/api/news?id=6a13ef2d88f1a76f3e9aa488ff8145e902e35a956e8d738a011cb308c46e00bc",
519
+ "datetime": "2026-01-09",
520
+ "source": "Finnhub",
521
+ "subreddit": null
522
+ },
523
+ {
524
+ "title": "Circle's Non-Interest Revenues Accelerate: Can the Momentum Continue?",
525
+ "content": "CRCL shows rapid growth in non-interest revenues, lifting 2025 guidance as subscriptions, services and transaction fees scale across its platform.",
526
+ "url": "https://finnhub.io/api/news?id=1289ce4bcc1cdc2007ebf983c1432f188ec44e19f416675d57c7840935a79e3a",
527
+ "datetime": "2026-01-09",
528
+ "source": "Finnhub",
529
+ "subreddit": null
530
+ },
531
+ {
532
+ "title": "Mastercard Up 7.6% in a Month: Are Investors Looking Beyond AI Hype?",
533
+ "content": "MA shares jump 7.6% in a month as investors rotate from AI trades toward durable payment networks with steady growth drivers.",
534
+ "url": "https://finnhub.io/api/news?id=1f8cda21dfecdb07398c4a91e6db2482c248150caeb8f6e60fa8c75a5dba1866",
535
+ "datetime": "2026-01-09",
536
+ "source": "Finnhub",
537
+ "subreddit": null
538
+ },
539
+ {
540
+ "title": "The Influencer Marketing Factory Unveils Season 6 of \"The Influence Factor\" Podcast with Cutting-Edge Industry Leaders",
541
+ "content": "NEW YORK CITY, NEW YORK / ACCESS Newswire / January 9, 2026 / Global influencer marketing leader The Influencer Marketing Factory today announced Season 6 of its acclaimed podcast,The Influence Factor . Bi-weekly episodes will feature conversations ...",
542
+ "url": "https://finnhub.io/api/news?id=2d14c9529412c1c8e935a931fc5a332c7d5348f12652408c956d87fd2f6d3c10",
543
+ "datetime": "2026-01-09",
544
+ "source": "Finnhub",
545
+ "subreddit": null
546
+ },
547
+ {
548
+ "title": "Fiserv: Potentially In A Bottoming Process",
549
+ "content": "Fiserv (FISV) stock plunged 70% and FY25 guidance reset.",
550
+ "url": "https://finnhub.io/api/news?id=a1e7f5530265f365630da945e31e0b63dd4badff90a7accd50a181ce8ead81b7",
551
+ "datetime": "2026-01-09",
552
+ "source": "Finnhub",
553
+ "subreddit": null
554
+ },
555
+ {
556
+ "title": "Why is Mastercard Incorporated (MA) One of the Best Major Stocks to Invest in Right Now?",
557
+ "content": "Mastercard Incorporated (NYSE:MA) is one of the best major stocks to invest in right now. Monness Crespi Hardt & Co., Inc. reiterated a Hold rating on Mastercard Incorporated (NYSE:MA) on January 5 and set a price target of $525.00. In addition, Keefe, Bruyette & Woods maintained a Buy rating on the company on January 2 [\u2026]",
558
+ "url": "https://finnhub.io/api/news?id=8bd58b88bae91ac0c493840cb9b9f851b4fdf1b61c6ec880020ad51e4ebc2a04",
559
+ "datetime": "2026-01-09",
560
+ "source": "Finnhub",
561
+ "subreddit": null
562
+ },
563
+ {
564
+ "title": "Is Visa Inc. (V) One of the Best Major Stocks to Invest in Right Now?",
565
+ "content": "Visa Inc. (NYSE:V) is one of the best major stocks to invest in right now. Monness, Crespi, Hardt & Co., Inc. reiterated a Hold rating on Visa Inc. (NYSE:V) on January 5 and set a price target of $330.00. In a separate development, Visa Inc. (NYSE:V) and Fiserv, Inc. announced on December 22 a strategic [\u2026]",
566
+ "url": "https://finnhub.io/api/news?id=4a7abccded3cd2b373deb1ecf6f665a30923fd414a0e26e1026f228f1885d732",
567
+ "datetime": "2026-01-09",
568
+ "source": "Finnhub",
569
+ "subreddit": null
570
+ },
571
+ {
572
+ "title": "Brown & Brown: A Deep Value Opportunity",
573
+ "content": "Brown & Brown stock looks undervalued given its EPS growth and long dividend streak. Click here to see why I rate BRO stock a Buy.",
574
+ "url": "https://finnhub.io/api/news?id=bcbec1bc767dc8f96c4bca19f5565fcbc69129c77eb386e6a1e7e648e9452f04",
575
+ "datetime": "2026-01-09",
576
+ "source": "Finnhub",
577
+ "subreddit": null
578
+ },
579
+ {
580
+ "title": "Visa and JPMorgan Use Solana Rails But One Risk Still Worries Banks",
581
+ "content": "Major financial institutions, including JPMorgan and Visa, are increasingly turning to .cwp-coin-chart svg path { stroke-width: 0.65 !important; } .cwp-coin-widget-container .cwp-graph-container.positive svg path:nth-of-type(2) { stroke: #008868 !important; } .cwp-coin-widget-container .cwp-coin-trend.positive { color: #008868 !important; background-color: transparent !important; } .cwp-coin-widget-container .cwp-coin-popup-holder .cwp-coin-trend.positive { border: 1px solid #008868; border-radi",
582
+ "url": "https://finnhub.io/api/news?id=d01493ec2df5e6ce762d753f6aa91b2b04a0071e70c227eb13ff0060fb4f0b88",
583
+ "datetime": "2026-01-09",
584
+ "source": "Finnhub",
585
+ "subreddit": null
586
+ },
587
+ {
588
+ "title": "Assessing Visa (V) Valuation After Partnerships And Services Fuel Recent Share Price Momentum",
589
+ "content": "Visa (V) has been in focus after Deluxe adopted Visa Direct to power dlxFastFunds, offering near real-time funding for businesses and reducing typical settlement delays to support cash flow and day-to-day operations. See our latest analysis for Visa. Those product wins sit alongside a steady share price story, with Visa\u2019s 1 month share price return of 7.9% and 1 year total shareholder return of 13.5%. Its 3 year total shareholder return of 61.1% points to momentum that has built over time...",
590
+ "url": "https://finnhub.io/api/news?id=3bca1517d817f4be8e186900396305af36eaa89900335fb6238abe5373ed416f",
591
+ "datetime": "2026-01-09",
592
+ "source": "Finnhub",
593
+ "subreddit": null
594
+ },
595
+ {
596
+ "title": "$8K to $46K in my 0DTE account this week, took out $8K then blew the rest on SPY $588 puts. Wish I took out more, greed &amp; too excited again.",
597
+ "content": "",
598
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q7sy7u/8k_to_46k_in_my_0dte_account_this_week_took_out/",
599
+ "datetime": "2026-01-09",
600
+ "source": "Reddit",
601
+ "subreddit": "r/wallstreetbets"
602
+ },
603
+ {
604
+ "title": "RDDT 250c 3/20",
605
+ "content": "Let\u2019s go 300 after ER. I can feel it in my plums ",
606
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q8ep76/rddt_250c_320/",
607
+ "datetime": "2026-01-09",
608
+ "source": "Reddit",
609
+ "subreddit": "r/wallstreetbets"
610
+ },
611
+ {
612
+ "title": "Visa (V) Stock Falls Amid Market Uptick: What Investors Need to Know",
613
+ "content": "Visa (V) closed the most recent trading day at $352.23, moving 1.03% from the previous trading session.",
614
+ "url": "https://finnhub.io/api/news?id=e1852c5ac307a1fb1db7702bebe0f1f73f99059bdac6261abfe19a0b2731d857",
615
+ "datetime": "2026-01-08",
616
+ "source": "Finnhub",
617
+ "subreddit": null
618
+ },
619
+ {
620
+ "title": "Top 50 High-Quality Dividend Growth Stocks For January 2026",
621
+ "content": "2025 dividend growth stock screen: 50 picks, FCF valuation, +10.55% return. 17 stocks appear potentially undervalued, while 7 saw valuation downgrades. See more.",
622
+ "url": "https://finnhub.io/api/news?id=671f8c9315813f7a75e40f073a9858371b2150af06b9af85636d996aba0f4404",
623
+ "datetime": "2026-01-08",
624
+ "source": "Finnhub",
625
+ "subreddit": null
626
+ },
627
+ {
628
+ "title": "Deluxe to Implement Visa Direct to Enable Fast, Seamless Payments with dlxFastFunds",
629
+ "content": "MINNEAPOLIS, January 08, 2026--Deluxe (NYSE: DLX), a trusted Payments and Data company, today announced its collaboration with Visa to implement Visa Direct. This collaboration introduces dlxFastFundsSM, a funding solution that leverages Visa\u2019s trusted payment network to help businesses take control of their cash flow by skipping the typical one- to two-day settlement delay.",
630
+ "url": "https://finnhub.io/api/news?id=39cfb0684de57341da1b77116e273e6971c05fd8c71cf3ab7f58736916546ba5",
631
+ "datetime": "2026-01-08",
632
+ "source": "Finnhub",
633
+ "subreddit": null
634
+ },
635
+ {
636
+ "title": "Polygon Labs Launches Open Money Stack to Bridge Fiat and Onchain Settlement",
637
+ "content": "Polygon Labs has unveiled the Open Money Stack, a new set of rails designed to support regulated stablecoin payments and close the infrastructure gap between wallets, fiat access, routing and orchestration, compliance, and on-chain settlement. The next three years will define how money moves over the next thirty years.The Polygon ...",
638
+ "url": "https://finnhub.io/api/news?id=fdda05347f5ac2f705b44111e768cbfa316c11a0bb79c9d19991330d26e65f8d",
639
+ "datetime": "2026-01-08",
640
+ "source": "Finnhub",
641
+ "subreddit": null
642
+ },
643
+ {
644
+ "title": "EA SPORTS\u2122 Presents Madden Bowl to Headline Super Bowl LX Week With Luke Combs, Teddy Swims and More",
645
+ "content": "REDWOOD CITY, Calif., January 08, 2026--EA SPORTS\u2122 today unveiled the music lineup for EA SPORTS\u2122 Presents Madden Bowl in Partnership with Visa, delivering Super Bowl week\u2019s premier night of football and culture to the Bay. On Friday, February 6, Luke Combs, Teddy Swims, Stephen Wilson Jr, Gavin Adcock, and the Bay Area\u2019s own LaRussell will take over San Francisco\u2019s Chase Center for a high-energy celebration bringing fans, music, and football together under one roof.",
646
+ "url": "https://finnhub.io/api/news?id=2a92a99d52190b4eda53a7f562ce880f50cc2c51e624e686fbbf3a5c8a2fb74f",
647
+ "datetime": "2026-01-08",
648
+ "source": "Finnhub",
649
+ "subreddit": null
650
+ },
651
+ {
652
+ "title": "What Recent Analyst Calls Mean For Visa\u2019s (V) Evolving Story And Valuation",
653
+ "content": "Why Visa\u2019s Price Target Just Nudged Higher Visa\u2019s modeled fair value estimate has shifted only slightly to about US$395.85 from US$395.44, a small change that still reflects the company\u2019s central role in global payments and its large, widely used network. This modest move aligns with views that Visa\u2019s brand strength, cross border business and perceived quality versus some peers can support a higher price target, even as more cautious voices point to execution risks and already high...",
654
+ "url": "https://finnhub.io/api/news?id=7bdee8df49015189419a1c3f7dd04cbf86dc080cea8ec9bea3afc4d30a091aa0",
655
+ "datetime": "2026-01-08",
656
+ "source": "Finnhub",
657
+ "subreddit": null
658
+ },
659
+ {
660
+ "title": "Casino Apps USA 2026: LoneStar's Leading Mobile Casino App",
661
+ "content": "A 2026 Look at LoneStar\u2019s Mobile-First Sweepstakes Casino Platform, Features, and User Experience in the U.S.Atlantic City, New Jersey, Jan. 07, 2026 (GLOBE NEWSWIRE) -- The LoneStar Casino app has quickly emerged as a top choice for American players since its successful launch in early 2025. Noting the impact of mobile gaming, the sweepstakes casino has mainly focused on convenience and flexibility through a mobile-optimized platform. As a newcomer to the sweepstakes community, LoneStar has ent",
662
+ "url": "https://finnhub.io/api/news?id=3cadc758fda0b63f99d52bdd5767671a30c6b458f5faa448dbe318d8954f46c7",
663
+ "datetime": "2026-01-08",
664
+ "source": "Finnhub",
665
+ "subreddit": null
666
+ },
667
+ {
668
+ "title": "ONDS--drones, so hot right now...drones.",
669
+ "content": "V cool and v legal company with a lot of room to grow in the coming years. Also, trains are involved...literally an autist's dream. ",
670
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q7jaje/ondsdrones_so_hot_right_nowdrones/",
671
+ "datetime": "2026-01-08",
672
+ "source": "Reddit",
673
+ "subreddit": "r/wallstreetbets"
674
+ },
675
+ {
676
+ "title": "Third time is charm for posting",
677
+ "content": "Whatever is the reason, it keeps getting removed so I am posting gain.",
678
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q72kc9/third_time_is_charm_for_posting/",
679
+ "datetime": "2026-01-08",
680
+ "source": "Reddit",
681
+ "subreddit": "r/wallstreetbets"
682
+ },
683
+ {
684
+ "title": "SCHD ETF Alternative Strategy Aimed For Higher Total Return",
685
+ "content": "4-factor dividend growth portfolio beats SCHD: 14.74% CAGR vs 7.28%. Portfolio turnover averages 40\u00e2\u0080\u009350% annually, with stable dividend growth. See more here.",
686
+ "url": "https://finnhub.io/api/news?id=dbd59f8f7ee961e57a20dfa24f9f4284f6813c4bfe3ddd2217fbd06f79f32720",
687
+ "datetime": "2026-01-07",
688
+ "source": "Finnhub",
689
+ "subreddit": null
690
+ },
691
+ {
692
+ "title": "Global Card Fraud Losses at $33 Billion",
693
+ "content": "The Nilson Report Marks Decline in Card FraudSANTA BARBARA, Calif., Jan. 07, 2026 (GLOBE NEWSWIRE) -- Payment card fraud losses worldwide dipped 1.2% to $33.41 billion in 2024, according to the Nilson Report, the leading trade publication covering the global payment card industry. This fraud was tied to global card volume of $51.920 trillion. Losses to fraud are incurred by credit, debit and prepaid card issuers, merchants, processors of card payments from merchants and processors of card transa",
694
+ "url": "https://finnhub.io/api/news?id=243d4205b93aae6fa120b268c218a30c7586056da88b5a6dc353084ca0a44f1f",
695
+ "datetime": "2026-01-07",
696
+ "source": "Finnhub",
697
+ "subreddit": null
698
+ },
699
+ {
700
+ "title": "WEX or V: Which Is the Better Value Stock Right Now?",
701
+ "content": "WEX vs. V: Which Stock Is the Better Value Option?",
702
+ "url": "https://finnhub.io/api/news?id=db10552a92d9208e9243100ac6c641d30aa7d824a0385d058880091cad0be3df",
703
+ "datetime": "2026-01-07",
704
+ "source": "Finnhub",
705
+ "subreddit": null
706
+ },
707
+ {
708
+ "title": "Visa Stock's Steady 14.4% Rise in A Year: Can 2026 Add More Firepower?",
709
+ "content": "V's quiet consistency powers growth, stablecoin expansion, and AI-ready rails, steady, not flashy, but hard to ignore.",
710
+ "url": "https://finnhub.io/api/news?id=99ab1a0174780352d537a5fa91fba8ed2d0753082ced1833a627155f34e12ebc",
711
+ "datetime": "2026-01-07",
712
+ "source": "Finnhub",
713
+ "subreddit": null
714
+ },
715
+ {
716
+ "title": "How nonpayments became big business at Visa and Mastercard",
717
+ "content": "With fintechs and legal cases pressuring payment fees, the card companies are leaning more on revenue from other sources.",
718
+ "url": "https://finnhub.io/api/news?id=12860aaa4567cbf6661f2e4326a988edcd3ac22f58674961e4a1ee7236f46bd3",
719
+ "datetime": "2026-01-07",
720
+ "source": "Finnhub",
721
+ "subreddit": null
722
+ },
723
+ {
724
+ "title": "Investors Heavily Search Visa Inc. (V): Here is What You Need to Know",
725
+ "content": "Zacks.com users have recently been watching Visa (V) quite a bit. Thus, it is worth knowing the facts that could determine the stock's prospects.",
726
+ "url": "https://finnhub.io/api/news?id=f163bc032a9a11ef14cb90f78f037851789de56300db553a735c964c297773a6",
727
+ "datetime": "2026-01-07",
728
+ "source": "Finnhub",
729
+ "subreddit": null
730
+ },
731
+ {
732
+ "title": "Diginex Limited Announces Signing of Definitive Agreement to Acquire Plan A, Creating One of Europe\u2019s Leading Integrated ESG, Carbon Accounting and Decarbonization Platforms",
733
+ "content": "The combined business will deliver a single sophisticated platform to expand beyond existing strategic relationships, including HSBC, Coca Cola, Visa, and BMW.LONDON, Jan. 07, 2026 (GLOBE NEWSWIRE) -- Diginex Limited (NASDAQ: DGNX), a leading provider of Sustainability RegTech and data management solutions, today announced the signing of a definitive share purchase and transfer agreement (the \u201cSPTA\u201d), to acquire PlanA.earth GmbH (\"Plan A\"), one of Europe's leading AI-powered carbon accounting an",
734
+ "url": "https://finnhub.io/api/news?id=b8513dc445d50098a89a945f4795b079d4972cd3dc7787af8eda7aee4eebb102",
735
+ "datetime": "2026-01-07",
736
+ "source": "Finnhub",
737
+ "subreddit": null
738
+ },
739
+ {
740
+ "title": "Visa, Mastercard, ACI and Wex: 2026 predictions",
741
+ "content": "Major payments companies see several 2026 trends beyond the much-discussed stablecoin and agentic commerce crazes.",
742
+ "url": "https://finnhub.io/api/news?id=79b17d21b24b5c097282d9ccc00dd1840b91800c69c082c5decd99ee7b54b06a",
743
+ "datetime": "2026-01-07",
744
+ "source": "Finnhub",
745
+ "subreddit": null
746
+ },
747
+ {
748
+ "title": "Visa Crypto Card Spending Jumps 525%: Is Mainstream Adoption Finally Here?",
749
+ "content": "Visa-linked crypto card spending jumped 525% in 2025, rising from $14.6M to $91.3M in net spend, according to a Dune dashboard from @obchakevich research. This shift fits a broader pattern. Stablecoins and payment rails now carry trillions of dollars in monthly volume, turning crypto from speculation into something closer to ...",
750
+ "url": "https://finnhub.io/api/news?id=d0893c2096069a6eafd7fdc5fbe197be07fa1a9b4aec82a1f15ed17941cfeeba",
751
+ "datetime": "2026-01-07",
752
+ "source": "Finnhub",
753
+ "subreddit": null
754
+ },
755
+ {
756
+ "title": "Visa: The Easiest Way To Benefit From Consumers",
757
+ "content": "Visa stock is a \"Buy\" given its tollbooth role in the global economy. Here's what investors need to know.",
758
+ "url": "https://finnhub.io/api/news?id=0c74dc085ccd9cf2e470899b1d89b0d0b1a854e62e63b6bfea0f458623641e8e",
759
+ "datetime": "2026-01-07",
760
+ "source": "Finnhub",
761
+ "subreddit": null
762
+ },
763
+ {
764
+ "title": "Visa (V): 3 Reasons We Love This Stock",
765
+ "content": "Since July 2025, Visa has been in a holding pattern, floating around $357.79. The stock also fell short of the S&P 500\u2019s 10.8% gain during that period.",
766
+ "url": "https://finnhub.io/api/news?id=a708d77d34904a4beb1e1a1e1e746cb8146edc91b6158a3f6d004c7582d0e2f2",
767
+ "datetime": "2026-01-07",
768
+ "source": "Finnhub",
769
+ "subreddit": null
770
+ },
771
+ {
772
+ "title": "Is Visa (V) Still Reasonably Priced After Multi Year Share Price Strength?",
773
+ "content": "If you are wondering whether Visa's current share price still offers value, it helps to step back and look at what the recent numbers are actually telling you. Visa shares last closed at US$357.56, with returns of 1.1% over 7 days, 7.9% over 30 days, 3.2% year to date, 15.5% over 1 year, 65.4% over 3 years and 77.5% over 5 years. This gives you a clear snapshot of how the stock has behaved over different time frames. Recent headlines around Visa have largely focused on its role in global...",
774
+ "url": "https://finnhub.io/api/news?id=3eb7d568e1fd40b842e6a56df369e6dd7de93cd12ae832778e569cafb5017f62",
775
+ "datetime": "2026-01-07",
776
+ "source": "Finnhub",
777
+ "subreddit": null
778
+ },
779
+ {
780
+ "title": "Visa vs. Mastercard: Which Is the Better Growth Stock for 2026?",
781
+ "content": "Both companies have impressive business momentum, but one stock looks like the better buy headed into 2026.",
782
+ "url": "https://finnhub.io/api/news?id=28bdd8a4f1c45d08c86afe55ddf494344df26baff255304b968ea9f9d8027865",
783
+ "datetime": "2026-01-06",
784
+ "source": "Finnhub",
785
+ "subreddit": null
786
+ },
787
+ {
788
+ "title": "Here\u2019s the net worth and income of America\u2019s top 10%. Are you on track to catch up?",
789
+ "content": "Entry into the \"affluent class\" is harder than it used to be.",
790
+ "url": "https://finnhub.io/api/news?id=6eb2042ed3384118ef33e26ac6b10b8c56953db2d71f67857fbc85900ca01cb8",
791
+ "datetime": "2026-01-06",
792
+ "source": "Finnhub",
793
+ "subreddit": null
794
+ },
795
+ {
796
+ "title": "How Mastercard Is Diversifying Growth Beyond Card-Based Payments",
797
+ "content": "MA is expanding beyond card payments as value-added services like AI-driven security and data solutions fuel revenue growth.",
798
+ "url": "https://finnhub.io/api/news?id=9a9263d7cd877a1fb516f01e579bd5f3dc9b3559ae7e69203753c9bf99c6fd1a",
799
+ "datetime": "2026-01-06",
800
+ "source": "Finnhub",
801
+ "subreddit": null
802
+ },
803
+ {
804
+ "title": "Why These 3 Mega-Caps Could Still Surprise Investors in 2026",
805
+ "content": "Three durable compounders for 2026: Visa\u2019s payment scale, Walmart\u2019s 52-year dividend streak, and Amazon\u2019s cloud-led rebound after a heavy AI spending cycle.",
806
+ "url": "https://finnhub.io/api/news?id=89558854e0cf2937e14daa88815503902d35d14bb220132d4322827d4ab7f471",
807
+ "datetime": "2026-01-06",
808
+ "source": "Finnhub",
809
+ "subreddit": null
810
+ },
811
+ {
812
+ "title": "Russia\u2019s digital ruble will undercut its own card payment system, says analyst",
813
+ "content": "Digital ruble launch will see bank card market growth fall by up to 12% a year, expert says. MIR is Russia\u2019s answer to Visa and Mastercard. Digital ruble set to roll out in September. Foreign card firms \u201cwill never again dominate the Russian financial system.\u201d",
814
+ "url": "https://finnhub.io/api/news?id=d82bed2d9d6496004aca6f073533eedcac0a0f1292395f71a7c7a649714b526b",
815
+ "datetime": "2026-01-06",
816
+ "source": "Finnhub",
817
+ "subreddit": null
818
+ },
819
+ {
820
+ "title": "Rose's Income Garden Portfolio: 8 December Raises Report",
821
+ "content": "RIG portfolio gained 12.97% in 2025, matching the Dow with a 6.29% forward yield.",
822
+ "url": "https://finnhub.io/api/news?id=8cc766fe43a5294b540bc70630cd3174b8a813bd5c2236ca9bafd8d16e15ff21",
823
+ "datetime": "2026-01-06",
824
+ "source": "Finnhub",
825
+ "subreddit": null
826
+ },
827
+ {
828
+ "title": "Credit Card Processing for Nicotine Pouches is on Tower Payments' Radar for 2026",
829
+ "content": "Tower Payments today announced a focused payment gateway and merchant account service that helps nicotine pouch websites restore stable credit card processing after being declined by Stripe, Square, their bank, or PayPal. Looking toward next year, the service solves the immediate problem of sudden account closures and held deposits by providing an underwritten, nicotine\u2013friendly payment solution with clear pricing and one\u2013on\u2013one support.",
830
+ "url": "https://finnhub.io/api/news?id=7f539e4137ebba7f22056ecb47743b0df70f5f64c249ea021d011ad08d206e9b",
831
+ "datetime": "2026-01-06",
832
+ "source": "Finnhub",
833
+ "subreddit": null
834
+ },
835
+ {
836
+ "title": "Visa, Mastercard track roughly 4% US holiday retail sales growth",
837
+ "content": "The 2025 holiday season saw consumers shopping across channels to land the best deals and maximize convenience, according to new reports.",
838
+ "url": "https://finnhub.io/api/news?id=0d94b758eca0cb33100bfb367ab90de5c2c566b4f52a7f4b95219fb52a772960",
839
+ "datetime": "2026-01-06",
840
+ "source": "Finnhub",
841
+ "subreddit": null
842
+ },
843
+ {
844
+ "title": "Consumer groups attack card settlement",
845
+ "content": "Groups representing consumers and small business joined merchants in faulting a proposed Visa, Mastercard card fee settlement.",
846
+ "url": "https://finnhub.io/api/news?id=77a4e1444b457be52e1e557105ba25b259aa76d4b5c9a0539c2886f146274acb",
847
+ "datetime": "2026-01-06",
848
+ "source": "Finnhub",
849
+ "subreddit": null
850
+ },
851
+ {
852
+ "title": "My Dividend Growth Income: December 2025 Update",
853
+ "content": "Raised forward projected dividend income to $6,289.66 in December. Click here to read my portfolio analysis.",
854
+ "url": "https://finnhub.io/api/news?id=5c160c540ce5c6d099deb64a1fcf413c2fcbed9f7742d7e53f04a16119110529",
855
+ "datetime": "2026-01-06",
856
+ "source": "Finnhub",
857
+ "subreddit": null
858
+ },
859
+ {
860
+ "title": "Freedom Capital Sees Strong Results at Mastercard (MA), Maintains Hold View",
861
+ "content": "Mastercard Incorporated (NYSE:MA) is included among the 13 Best January Dividend Stocks to Invest in. On December 25, Freedom Capital analyst Mikhail Paramonov raised the firm\u2019s price target on Mastercard Incorporated (NYSE:MA) to $655 from $635 and kept a Hold rating on the shares. The change followed what the firm described as \u201cstrong\u201d Q4 results. [\u2026]",
862
+ "url": "https://finnhub.io/api/news?id=4b3e435d2ca911a2998a9d3c7f0eb62b9128c63714bf66681a6856606d3e2928",
863
+ "datetime": "2026-01-06",
864
+ "source": "Finnhub",
865
+ "subreddit": null
866
+ },
867
+ {
868
+ "title": "PayPal Casinos 2026: High 5 Casino Selected as Leading PayPal Casino",
869
+ "content": "CasinoTop10 Highlights High 5 Casino\u2019s PayPal Integration, Fast Transactions, and Player-Focused Gaming Experience for 2026 CHICAGO, IL, Jan. 05, 2026 (GLOBE NEWSWIRE) -- CasinoTop10, a trusted voice in igaming reviews, has officially named High 5 Casino as the best PayPal Casino, ranking the platform as the best for lightning-fast PayPal deposits and instant payouts. The site ensures a seamless online gaming experience for all players, enabling them to top up their accounts and withdraw their h",
870
+ "url": "https://finnhub.io/api/news?id=be6cb4b91f43dc5e99e2f63c101a07e10068099c6783c6a1184a5aabcdb51bb1",
871
+ "datetime": "2026-01-06",
872
+ "source": "Finnhub",
873
+ "subreddit": null
874
+ },
875
+ {
876
+ "title": "Prediction: The S&P 500 $1 Trillion Club Will Double Between 2026 and 2030",
877
+ "content": "Several companies could see massive gains by 2030 to join the vaunted club.",
878
+ "url": "https://finnhub.io/api/news?id=c21b8422372dcd0fd38b21180a0c04914df14d2c1119ec0bda01a12f79987df4",
879
+ "datetime": "2026-01-06",
880
+ "source": "Finnhub",
881
+ "subreddit": null
882
+ },
883
+ {
884
+ "title": "Back again with Moderna calls 400 buys $36 calls",
885
+ "content": "This time I sold before posting to Reddit ",
886
+ "url": "https://reddit.com/r/wallstreetbets/comments/1q5tpzb/back_again_with_moderna_calls_400_buys_36_calls/",
887
+ "datetime": "2026-01-06",
888
+ "source": "Reddit",
889
+ "subreddit": "r/wallstreetbets"
890
+ },
891
+ {
892
+ "title": "Why Does Visa Continue to Sit at the Center of Digital Payments?",
893
+ "content": "V remains central to digital payments thanks to its massive global network, transaction-based model and expanding value-added services as cash use declines.",
894
+ "url": "https://finnhub.io/api/news?id=b5eddf6787f624c20230022bc875bff0829bfbd65bf821721992595f16931e20",
895
+ "datetime": "2026-01-05",
896
+ "source": "Finnhub",
897
+ "subreddit": null
898
+ },
899
+ {
900
+ "title": "Visa Inc. Cl A stock underperforms Monday when compared to competitors despite daily gains",
901
+ "content": "Visa Inc. Cl A stock underperforms Monday when compared to competitors despite daily gains",
902
+ "url": "https://finnhub.io/api/news?id=d571ceea6eeefe63ee6aaab7ecb7cfbbd580622a0b3d8dc8ed2de3f76a1a5e40",
903
+ "datetime": "2026-01-05",
904
+ "source": "Finnhub",
905
+ "subreddit": null
906
+ },
907
+ {
908
+ "title": "My Dividend Stock Portfolio: New November Dividend Record - 100 Holdings With 12 Buys",
909
+ "content": "Read about the latest moves in my dividend stock portfolio and why I trimmed NVDA/AMD on valuation and rotated into BDCs (ARCC, OBDC, HTGC) for yield.",
910
+ "url": "https://finnhub.io/api/news?id=c7d57cc52fce12c1c1fb6836f77982bdb9233d7d33af4280465110aaef63946d",
911
+ "datetime": "2026-01-05",
912
+ "source": "Finnhub",
913
+ "subreddit": null
914
+ },
915
+ {
916
+ "title": "This Week In Digital Payment - South Africa Embraces Cashless Revolution With Rapid Growth",
917
+ "content": "South Africa's digital payment landscape is experiencing significant growth, as highlighted by a report from EBC Financial Group. The rapid adoption of cashless transactions is fostering greater financial inclusion and economic participation, with card-based transactions projected to surpass ZAR2.9 trillion ($159 billion) by 2025. This growth is driven by increased merchant acceptance, advancements in contactless technology, and the proliferation of mobile-led payments. Moreover, the...",
918
+ "url": "https://finnhub.io/api/news?id=06324755f2f1329987484ca015be14f3b68d50036283538519a382208d4cede4",
919
+ "datetime": "2026-01-05",
920
+ "source": "Finnhub",
921
+ "subreddit": null
922
+ },
923
+ {
924
+ "title": "VIG: Proof That A Higher Yield Isn't Everything",
925
+ "content": "Vanguard Dividend Appreciation ETF (VIG) mixes dividend growth with favorable sectors. Read more about VIG here.",
926
+ "url": "https://finnhub.io/api/news?id=1c161cf429298579cc1f69edda183ab767a637d65062d78afe362969dd6b2950",
927
+ "datetime": "2026-01-05",
928
+ "source": "Finnhub",
929
+ "subreddit": null
930
+ },
931
+ {
932
+ "title": "Visa-Issued Crypto Card Spending Jumps 525% in 2025",
933
+ "content": "Spending through Visa-issued crypto cards surged in 2025, with total net transaction volume rising 525% over the year, signaling growing consumer use of crypto-linked payment products for everyday purchases. Key Takeaways: Visa-issued crypto card spending jumped 525% in 2025, pointing to rising everyday use of crypto-linked payments. EtherFi led all ...",
934
+ "url": "https://finnhub.io/api/news?id=67b60cdfe08396c77986e5ad68bdda901e8afc1b6eba64040de0fa584688c7ec",
935
+ "datetime": "2026-01-05",
936
+ "source": "Finnhub",
937
+ "subreddit": null
938
+ },
939
+ {
940
+ "title": "Why is no one seeing the bigger picture?",
941
+ "content": "&gt;\\*Disclaimer\\*\n\n&gt;The information provided is for educational and informational purposes only and does not constitute financial, investment, legal, or tax advice. Economic conditions, markets, and regulations can change rapidly, and past performance is not indicative of future results. You should conduct your own research and consult with a qualified professional before making any financial decisions.\n\n\n\nOk First of all i'm not good with words im more good with math and numbers... so i'll ",
942
+ "url": "https://reddit.com/r/stocks/comments/1q3e6jr/why_is_no_one_seeing_the_bigger_picture/",
943
+ "datetime": "2026-01-04",
944
+ "source": "Reddit",
945
+ "subreddit": "r/stocks"
946
+ }
947
+ ],
948
+ "item_count": 58,
949
+ "sources_used": [
950
+ "Finnhub",
951
+ "Reddit"
952
+ ],
953
+ "source": "sentiment-basket",
954
+ "as_of": "2026-01-11"
955
+ }
956
+ },
957
+ "multi_source": {
958
+ "financials_all": {
959
+ "group": "source_comparison",
960
+ "ticker": "V",
961
+ "sources": {
962
+ "sec_edgar": {
963
+ "source": "SEC EDGAR XBRL",
964
+ "data": {
965
+ "financials": {
966
+ "ticker": "V",
967
+ "source": "SEC EDGAR XBRL",
968
+ "as_of": "2026-01-11",
969
+ "revenue": {
970
+ "value": 40000000000,
971
+ "data_type": "FY",
972
+ "end_date": "2025-09-30",
973
+ "filed": "2025-11-06",
974
+ "fiscal_year": 2025,
975
+ "form": "10-K"
976
+ },
977
+ "net_income": {
978
+ "value": 20058000000,
979
+ "data_type": "FY",
980
+ "end_date": "2025-09-30",
981
+ "filed": "2025-11-06",
982
+ "fiscal_year": 2025,
983
+ "form": "10-K"
984
+ },
985
+ "operating_income": {
986
+ "value": 23994000000,
987
+ "data_type": "FY",
988
+ "end_date": "2025-09-30",
989
+ "filed": "2025-11-06",
990
+ "fiscal_year": 2025,
991
+ "form": "10-K"
992
+ },
993
+ "operating_margin_pct": {
994
+ "value": 59.98,
995
+ "data_type": "FY",
996
+ "end_date": "2025-09-30",
997
+ "filed": "2025-11-06",
998
+ "fiscal_year": 2025,
999
+ "form": "10-K"
1000
+ },
1001
+ "net_margin_pct": {
1002
+ "value": 50.14,
1003
+ "data_type": "FY",
1004
+ "end_date": "2025-09-30",
1005
+ "filed": "2025-11-06",
1006
+ "fiscal_year": 2025,
1007
+ "form": "10-K"
1008
+ },
1009
+ "revenue_growth_3yr": {
1010
+ "value": 14.34,
1011
+ "data_type": "FY",
1012
+ "end_date": "2025-09-30",
1013
+ "filed": "2025-11-06",
1014
+ "fiscal_year": 2025,
1015
+ "form": "10-K"
1016
+ },
1017
+ "total_assets": {
1018
+ "value": 99627000000,
1019
+ "data_type": "FY",
1020
+ "end_date": "2025-09-30",
1021
+ "filed": "2025-11-06",
1022
+ "fiscal_year": 2025,
1023
+ "form": "10-K"
1024
+ },
1025
+ "total_liabilities": {
1026
+ "value": 61718000000,
1027
+ "data_type": "FY",
1028
+ "end_date": "2025-09-30",
1029
+ "filed": "2025-11-06",
1030
+ "fiscal_year": 2025,
1031
+ "form": "10-K"
1032
+ },
1033
+ "stockholders_equity": {
1034
+ "value": 26437000000,
1035
+ "data_type": "FY",
1036
+ "end_date": "2011-09-30",
1037
+ "filed": "2011-11-18",
1038
+ "fiscal_year": 2011,
1039
+ "form": "10-K"
1040
+ }
1041
+ },
1042
+ "debt": {
1043
+ "ticker": "V",
1044
+ "source": "SEC EDGAR XBRL",
1045
+ "as_of": "2026-01-11",
1046
+ "long_term_debt": {
1047
+ "value": 20977000000,
1048
+ "data_type": "FY",
1049
+ "end_date": "2021-09-30",
1050
+ "filed": "2021-11-18",
1051
+ "fiscal_year": 2021,
1052
+ "form": "10-K"
1053
+ },
1054
+ "total_debt": {
1055
+ "value": 25171000000,
1056
+ "data_type": "FY",
1057
+ "end_date": "2025-09-30",
1058
+ "filed": "2025-11-06",
1059
+ "fiscal_year": 2025,
1060
+ "form": "10-K"
1061
+ },
1062
+ "cash": {
1063
+ "value": 17164000000,
1064
+ "data_type": "FY",
1065
+ "end_date": "2025-09-30",
1066
+ "filed": "2025-11-06",
1067
+ "fiscal_year": 2025,
1068
+ "form": "10-K"
1069
+ },
1070
+ "net_debt": {
1071
+ "value": 8007000000,
1072
+ "data_type": "FY",
1073
+ "end_date": "2025-09-30",
1074
+ "filed": "2025-11-06",
1075
+ "fiscal_year": 2025,
1076
+ "form": "10-K"
1077
+ },
1078
+ "debt_to_equity": {
1079
+ "value": 0.95,
1080
+ "data_type": "FY",
1081
+ "end_date": "2025-09-30",
1082
+ "filed": "2025-11-06",
1083
+ "fiscal_year": 2025,
1084
+ "form": "10-K"
1085
+ }
1086
+ },
1087
+ "cash_flow": {
1088
+ "ticker": "V",
1089
+ "source": "SEC EDGAR XBRL",
1090
+ "as_of": "2026-01-11",
1091
+ "operating_cash_flow": {
1092
+ "value": 23059000000,
1093
+ "data_type": "FY",
1094
+ "end_date": "2025-09-30",
1095
+ "filed": "2025-11-06",
1096
+ "fiscal_year": 2025,
1097
+ "form": "10-K"
1098
+ },
1099
+ "capital_expenditure": {
1100
+ "value": 59000000,
1101
+ "data_type": "FY",
1102
+ "end_date": "2025-09-30",
1103
+ "filed": "2025-11-06",
1104
+ "fiscal_year": 2025,
1105
+ "form": "10-K"
1106
+ },
1107
+ "free_cash_flow": {
1108
+ "value": 23000000000,
1109
+ "data_type": "FY",
1110
+ "end_date": "2025-09-30",
1111
+ "filed": "2025-11-06",
1112
+ "fiscal_year": 2025,
1113
+ "form": "10-K"
1114
+ }
1115
+ }
1116
+ }
1117
+ },
1118
+ "yahoo_finance": {
1119
+ "source": "Yahoo Finance",
1120
+ "data": {
1121
+ "financials": {
1122
+ "ticker": "V",
1123
+ "source": "Yahoo Finance",
1124
+ "as_of": "2026-01-11",
1125
+ "revenue": {
1126
+ "value": 40000000000,
1127
+ "data_type": "TTM",
1128
+ "end_date": "2025-09-30",
1129
+ "filed": "2026-01-09"
1130
+ },
1131
+ "net_income": {
1132
+ "value": 19853000704,
1133
+ "data_type": "TTM",
1134
+ "end_date": "2025-09-30",
1135
+ "filed": "2026-01-09"
1136
+ },
1137
+ "gross_profit": {
1138
+ "value": 39105998848,
1139
+ "data_type": "TTM",
1140
+ "end_date": "2025-09-30",
1141
+ "filed": "2026-01-09"
1142
+ },
1143
+ "gross_margin_pct": {
1144
+ "value": 97.76,
1145
+ "data_type": "TTM",
1146
+ "end_date": "2025-09-30",
1147
+ "filed": "2026-01-09"
1148
+ },
1149
+ "net_margin_pct": {
1150
+ "value": 49.63,
1151
+ "data_type": "TTM",
1152
+ "end_date": "2025-09-30",
1153
+ "filed": "2026-01-09"
1154
+ }
1155
+ },
1156
+ "debt": {
1157
+ "ticker": "V",
1158
+ "source": "Yahoo Finance",
1159
+ "as_of": "2026-01-11",
1160
+ "total_debt": {
1161
+ "value": 26083999744,
1162
+ "data_type": "Point-in-time",
1163
+ "end_date": "2025-09-30",
1164
+ "filed": "2026-01-09"
1165
+ },
1166
+ "cash": {
1167
+ "value": 18997000192,
1168
+ "data_type": "Point-in-time",
1169
+ "end_date": "2025-09-30",
1170
+ "filed": "2026-01-09"
1171
+ },
1172
+ "net_debt": {
1173
+ "value": 7086999552,
1174
+ "data_type": "Point-in-time",
1175
+ "end_date": "2025-09-30",
1176
+ "filed": "2026-01-09"
1177
+ }
1178
+ },
1179
+ "cash_flow": {
1180
+ "ticker": "V",
1181
+ "source": "Yahoo Finance",
1182
+ "as_of": "2026-01-11",
1183
+ "operating_cash_flow": {
1184
+ "value": 23058999296,
1185
+ "data_type": "TTM",
1186
+ "end_date": "2025-09-30",
1187
+ "filed": "2026-01-09"
1188
+ },
1189
+ "free_cash_flow": {
1190
+ "value": 20072873984,
1191
+ "data_type": "TTM",
1192
+ "end_date": "2025-09-30",
1193
+ "filed": "2026-01-09"
1194
+ }
1195
+ }
1196
+ }
1197
+ }
1198
+ },
1199
+ "source": "fundamentals-basket",
1200
+ "as_of": "2026-01-11"
1201
+ },
1202
+ "valuation_all": {
1203
+ "group": "source_comparison",
1204
+ "ticker": "V",
1205
+ "sources": {
1206
+ "yahoo_finance": {
1207
+ "source": "Yahoo Finance",
1208
+ "regular_market_time": "2026-01-09",
1209
+ "data": {
1210
+ "current_price": 349.77,
1211
+ "market_cap": 675020144640.0,
1212
+ "enterprise_value": 677386649600.0,
1213
+ "trailing_pe": 34.25759,
1214
+ "forward_pe": 24.254278,
1215
+ "ps_ratio": 16.875504,
1216
+ "pb_ratio": 18.046125,
1217
+ "ev_ebitda": 24.168,
1218
+ "trailing_peg": 1.9228,
1219
+ "forward_peg": null,
1220
+ "earnings_growth": -0.014,
1221
+ "revenue_growth": 0.115
1222
+ }
1223
+ },
1224
+ "alpha_vantage": {
1225
+ "source": "Alpha Vantage",
1226
+ "latest_quarter": "2025-09-30",
1227
+ "fetched_at": "2026-01-09",
1228
+ "data": {
1229
+ "current_price": 339.81,
1230
+ "market_cap": 675020145000.0,
1231
+ "trailing_pe": 34.26,
1232
+ "forward_pe": 27.32,
1233
+ "ps_ratio": 16.88,
1234
+ "pb_ratio": 18.15,
1235
+ "ev_ebitda": 26.2,
1236
+ "trailing_peg": 1.923,
1237
+ "earnings_growth": -0.014,
1238
+ "revenue_growth": 0.115
1239
+ }
1240
+ }
1241
+ },
1242
+ "source": "valuation-basket",
1243
+ "as_of": "2026-01-11"
1244
+ },
1245
+ "macro_all": {
1246
+ "group": "raw_metrics",
1247
+ "ticker": "MACRO",
1248
+ "metrics": {
1249
+ "gdp_growth": {
1250
+ "value": 4.3,
1251
+ "data_type": "Quarterly",
1252
+ "as_of": "2025Q3",
1253
+ "source": "BEA (Bureau of Economic Analysis)",
1254
+ "fallback": false
1255
+ },
1256
+ "interest_rate": {
1257
+ "value": 3.72,
1258
+ "data_type": "Monthly",
1259
+ "as_of": "2025-12-01",
1260
+ "source": "FRED (Federal Reserve)",
1261
+ "fallback": false
1262
+ },
1263
+ "cpi_inflation": {
1264
+ "value": 2.74,
1265
+ "data_type": "Monthly",
1266
+ "as_of": "2025-November",
1267
+ "source": "BLS (Bureau of Labor Statistics)",
1268
+ "fallback": false
1269
+ },
1270
+ "unemployment": {
1271
+ "value": 4.4,
1272
+ "data_type": "Monthly",
1273
+ "as_of": "2025-December",
1274
+ "source": "BLS (Bureau of Labor Statistics)",
1275
+ "fallback": false
1276
+ }
1277
+ },
1278
+ "source": "macro-basket",
1279
+ "as_of": "2026-01-11"
1280
+ },
1281
+ "volatility_all": {
1282
+ "group": "raw_metrics",
1283
+ "ticker": "V",
1284
+ "metrics": {
1285
+ "vix": {
1286
+ "value": 15.45,
1287
+ "data_type": "Daily",
1288
+ "as_of": "2026-01-08",
1289
+ "source": "FRED (Federal Reserve)",
1290
+ "fallback": false
1291
+ },
1292
+ "vxn": {
1293
+ "value": 20.15,
1294
+ "data_type": "Daily",
1295
+ "as_of": "2026-01-08",
1296
+ "source": "FRED (Federal Reserve)",
1297
+ "fallback": false
1298
+ },
1299
+ "beta": {
1300
+ "value": 0.785,
1301
+ "data_type": "1Y",
1302
+ "as_of": "2026-01-09",
1303
+ "source": "Calculated from Yahoo Finance data",
1304
+ "fallback": false
1305
+ },
1306
+ "historical_volatility": {
1307
+ "value": 22.16,
1308
+ "data_type": "30D",
1309
+ "as_of": "2026-01-09",
1310
+ "source": "Calculated from Yahoo Finance data",
1311
+ "fallback": false
1312
+ },
1313
+ "implied_volatility": {
1314
+ "value": 30.0,
1315
+ "data_type": "Forward",
1316
+ "as_of": "2026-01-11",
1317
+ "source": "Market Average (estimated)",
1318
+ "fallback": true
1319
+ }
1320
+ },
1321
+ "source": "volatility-basket",
1322
+ "as_of": "2026-01-11"
1323
+ }
1324
+ },
1325
+ "conflict_resolution": {
1326
+ "financials": {
1327
+ "primary_source": "SEC EDGAR XBRL",
1328
+ "secondary_source": "Yahoo Finance",
1329
+ "conflicts": []
1330
+ },
1331
+ "valuation": {
1332
+ "primary_source": "Yahoo Finance",
1333
+ "secondary_source": "Alpha Vantage",
1334
+ "conflicts": []
1335
+ }
1336
+ },
1337
+ "aggregated_swot": {
1338
+ "strengths": [],
1339
+ "weaknesses": [],
1340
+ "opportunities": [],
1341
+ "threats": []
1342
+ },
1343
+ "completeness": {
1344
+ "completeness_pct": 35.7,
1345
+ "metrics_found": 5,
1346
+ "metrics_total": 14,
1347
+ "missing": {
1348
+ "financials": [
1349
+ "revenue",
1350
+ "net_income",
1351
+ "eps",
1352
+ "debt_to_equity"
1353
+ ],
1354
+ "valuation": [
1355
+ "trailing_pe",
1356
+ "pb_ratio",
1357
+ "ps_ratio"
1358
+ ],
1359
+ "news": [
1360
+ "results"
1361
+ ],
1362
+ "sentiment": [
1363
+ "composite_score"
1364
+ ]
1365
+ }
1366
+ },
1367
+ "generated_at": "2026-01-11T13:17:36.583056"
1368
+ }
docs/mcp_test_report_BAC.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP E2E Test Report: Bank of America Corporation (BAC)
2
+
3
+ ## Summary
4
+
5
+ | S/N | MCP | Status | Expected | Actual | Duration | Errors | Warnings |
6
+ |-----|-----|--------|----------|--------|----------|--------|----------|
7
+ | 1 | fundamentals | PASS | 9 | 9 | 10215ms | - | - |
8
+ | 2 | valuation | PASS | 11 | 11 | 902ms | - | - |
9
+ | 3 | volatility | PASS | 5 | 5 | 1873ms | - | - |
10
+ | 4 | macro | PASS | 4 | 4 | 4818ms | - | - |
11
+ | 5 | news | PASS | - | 4 | 1542ms | - | - |
12
+ | 6 | sentiment | PASS | - | 51 | 1826ms | - | - |
13
+
14
+ ---
15
+
16
+ ## Quantitative Data
17
+
18
+ | S/N | Metric | Value | Data Type | As Of | Source | Category |
19
+ |-----|--------|-------|-----------|-------|--------|----------|
20
+ | 1 | revenue | 101887000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
21
+ | 2 | net_income | 27132000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
22
+ | 3 | net_margin_pct | 26.63 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
23
+ | 4 | total_assets | 3261519000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
24
+ | 5 | total_liabilities | 2965960000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
25
+ | 6 | stockholders_equity | 295559000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
26
+ | 7 | operating_margin_pct | 35.29 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
27
+ | 8 | total_debt | 763981987840 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
28
+ | 9 | operating_cash_flow | 61471997952 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
29
+ | 10 | current_price | 55.85 | - | 2026-01-11 | yahoo_finance | Valuation |
30
+ | 11 | market_cap | 422231572480.0 | - | 2026-01-11 | yahoo_finance | Valuation |
31
+ | 12 | enterprise_value | 422701367296.0 | - | 2026-01-11 | yahoo_finance | Valuation |
32
+ | 13 | trailing_pe | 15.2595625 | - | 2026-01-11 | yahoo_finance | Valuation |
33
+ | 14 | forward_pe | 12.838106 | - | 2026-01-11 | yahoo_finance | Valuation |
34
+ | 15 | ps_ratio | 4.1621723 | - | 2026-01-11 | yahoo_finance | Valuation |
35
+ | 16 | pb_ratio | 1.4716344 | - | 2026-01-11 | yahoo_finance | Valuation |
36
+ | 17 | trailing_peg | 1.0583 | - | 2026-01-11 | yahoo_finance | Valuation |
37
+ | 18 | forward_peg | 0.4075589206349206 | - | 2026-01-11 | yahoo_finance | Valuation |
38
+ | 19 | earnings_growth | 0.315 | - | 2026-01-11 | yahoo_finance | Valuation |
39
+ | 20 | revenue_growth | 0.126 | - | 2026-01-11 | yahoo_finance | Valuation |
40
+ | 21 | vix | 15.45 | Daily | 2026-01-08 | FRED (Federal Reserve) | Volatility |
41
+ | 22 | vxn | 20.15 | Daily | 2026-01-08 | FRED (Federal Reserve) | Volatility |
42
+ | 23 | beta | 1.007 | 1Y | 2026-01-09 | Calculated from Yahoo Finance data | Volatility |
43
+ | 24 | historical_volatility | 16.93 | 30D | 2026-01-09 | Calculated from Yahoo Finance data | Volatility |
44
+ | 25 | implied_volatility | 30.0 | Forward | 2026-01-11 | Market Average (estimated) | Volatility |
45
+ | 26 | gdp_growth | 4.3 | Quarterly | 2025Q3 | BEA (Bureau of Economic Analysis) | Macro |
46
+ | 27 | interest_rate | 3.72 | Monthly | 2025-12-01 | FRED (Federal Reserve) | Macro |
47
+ | 28 | cpi_inflation | 2.74 | Monthly | 2025-November | BLS (Bureau of Labor Statistics) | Macro |
48
+ | 29 | unemployment | 4.4 | Monthly | 2025-December | BLS (Bureau of Labor Statistics) | Macro |
49
+
50
+ ---
51
+
52
+ ## Qualitative Data
53
+
54
+ | S/N | Title | Date | Source | Subreddit | URL | Category |
55
+ |-----|-------|------|--------|-----------|-----|----------|
56
+ | 1 | Bank of America Corporation (BAC) Latest Press Releases ... | - | Tavily | - | [Link](https://finance.yahoo.com/quote/BAC/press-releases/) | News |
57
+ | 2 | BAC: Bank of America Corp - Stock Price, Quote and News | - | Tavily | - | [Link](https://www.cnbc.com/quotes/BAC) | News |
58
+ | 3 | BAC: Bank of America Corp - Stock Price, Quote and News | - | Tavily | - | [Link](https://www.cnbc.com/quotes/%20BAC) | News |
59
+ | 4 | Page 75 | Bank of America Corporation (BAC) Latest Stock News | - | Tavily | - | [Link](https://seekingalpha.com/symbol/BAC/news?page=75) | News |
60
+ | 5 | Wall Street Week Ahead | 2026-01-11 | Finnhub | - | [Link](https://finnhub.io/api/news?id=b22a32ad6036940dc56e0844256e89500603d818f63c8ba5a719d3f195f3951c) | Sentiment |
61
+ | 6 | Earnings Season To Kick Off As Banking Heavyweights Report, Inflation Data In Fo | 2026-01-10 | Finnhub | - | [Link](https://finnhub.io/api/news?id=df06e522851fab7e7e52a52c2772429b8519081ab650a97a5d595e492d60f9ab) | Sentiment |
62
+ | 7 | Visible Alpha Breakdown Of U.S. Banks' Fourth Quarter Earnings Expectations | 2026-01-10 | Finnhub | - | [Link](https://finnhub.io/api/news?id=8d45119c0787924e04b3d56b4f0d2d9fbc398ab60154496334914d4b77e78151) | Sentiment |
63
+ | 8 | Bank earnings, CPI inflation data, Fed comments: What to Watch | 2026-01-10 | Finnhub | - | [Link](https://finnhub.io/api/news?id=cd815b49c50a31ef2697ad510a56a230f483ed2ea86dbaf3af13ef99447303e0) | Sentiment |
64
+ | 9 | Stock Market Today, Jan. 9: NuScale Power Jumps After Bank of America Upgrade | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=ae754c1d8897be1cb2b593bf80c23cb7eac143b0e258bf78e79decd2d03cef2c) | Sentiment |
65
+ | 10 | Options: A look into the financial sector ahead of bank earnings | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=0d0046e5210ad5e8d8735c87c0e10035c1cae179e90bfa25be379d35288965fb) | Sentiment |
66
+ | 11 | Bank of America Announces Redemption of $3,000,000,000 5.080% Fixed/Floating Rat | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=0ae27a3122896c2a97b30731b6801478fe3f164afda93b40c21af24e3503857c) | Sentiment |
67
+ | 12 | Why The Narrative Around West Pharmaceutical Services (WST) Is Shifting On 2026 | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=42a8ba501a8f44026b9193eb01272e0da59d9639e79ed8e902d0ef045e872283) | Sentiment |
68
+ | 13 | Is It Too Late To Consider Bank Of America (BAC) After A 24% One Year Gain? | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=ec4ed6055fee024455757a96ae11683a3d136cad46d86f8ebbb941508666c804) | Sentiment |
69
+ | 14 | Jim Cramer says don’t trade Apple and Nvidia as money rotates into overlooked st | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=3a0779d04224c658a3decaf2dea43f2c985a332b942b20b8923c9394e4d942b2) | Sentiment |
docs/mcp_test_report_KO.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # MCP E2E Test Report: The Coca-Cola Company (KO)
2
+
3
+ ## Summary
4
+
5
+ | S/N | MCP | Status | Expected | Actual | Duration | Errors | Warnings |
6
+ |-----|-----|--------|----------|--------|----------|--------|----------|
7
+ | 1 | fundamentals | PASS | 9 | 9 | 15284ms | - | - |
8
+ | 2 | valuation | PASS | 11 | 11 | 2224ms | - | - |
9
+ | 3 | volatility | PASS | 5 | 5 | 2277ms | - | - |
10
+ | 4 | macro | PASS | 4 | 4 | 7671ms | - | - |
11
+ | 5 | news | PASS | - | 4 | 3370ms | - | - |
12
+ | 6 | sentiment | PASS | - | 50 | 1736ms | - | - |
13
+
14
+ ---
15
+
16
+ ## Quantitative Data
17
+
18
+ | S/N | Metric | Value | Data Type | As Of | Source | Category |
19
+ |-----|--------|-------|-----------|-------|--------|----------|
20
+ | 1 | revenue | 47061000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
21
+ | 2 | net_income | 10631000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
22
+ | 3 | net_margin_pct | 22.59 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
23
+ | 4 | total_assets | 100549000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
24
+ | 5 | stockholders_equity | 24856000000 | FY | 2024-12-31 | SEC EDGAR | Fundamentals |
25
+ | 6 | operating_margin_pct | 32.37 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
26
+ | 7 | total_debt | 48161001472 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
27
+ | 8 | operating_cash_flow | 7602999808 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
28
+ | 9 | free_cash_flow | 1412875008 | TTM | 2026-01-11 | Yahoo Finance | Fundamentals |
29
+ | 10 | current_price | 70.51 | - | 2026-01-11 | yahoo_finance | Valuation |
30
+ | 11 | market_cap | 303451570176.0 | - | 2026-01-11 | yahoo_finance | Valuation |
31
+ | 12 | enterprise_value | 337706450944.0 | - | 2026-01-11 | yahoo_finance | Valuation |
32
+ | 13 | trailing_pe | 23.347683 | - | 2026-01-11 | yahoo_finance | Valuation |
33
+ | 14 | forward_pe | 21.887728 | - | 2026-01-11 | yahoo_finance | Valuation |
34
+ | 15 | ps_ratio | 6.366606 | - | 2026-01-11 | yahoo_finance | Valuation |
35
+ | 16 | pb_ratio | 9.70811 | - | 2026-01-11 | yahoo_finance | Valuation |
36
+ | 17 | trailing_peg | 2.1982 | - | 2026-01-11 | yahoo_finance | Valuation |
37
+ | 18 | forward_peg | 0.7271670431893688 | - | 2026-01-11 | yahoo_finance | Valuation |
38
+ | 19 | earnings_growth | 0.301 | - | 2026-01-11 | yahoo_finance | Valuation |
39
+ | 20 | revenue_growth | 0.051 | - | 2026-01-11 | yahoo_finance | Valuation |
40
+ | 21 | vix | 15.45 | Daily | 2026-01-08 | FRED (Federal Reserve) | Volatility |
41
+ | 22 | vxn | 20.15 | Daily | 2026-01-08 | FRED (Federal Reserve) | Volatility |
42
+ | 23 | beta | 0.042 | 1Y | 2026-01-09 | Calculated from Yahoo Finance data | Volatility |
43
+ | 24 | historical_volatility | 16.41 | 30D | 2026-01-09 | Calculated from Yahoo Finance data | Volatility |
44
+ | 25 | implied_volatility | 30.0 | Forward | 2026-01-11 | Market Average (estimated) | Volatility |
45
+ | 26 | gdp_growth | 4.3 | Quarterly | 2025Q3 | BEA (Bureau of Economic Analysis) | Macro |
46
+ | 27 | interest_rate | 3.72 | Monthly | 2025-12-01 | FRED (Federal Reserve) | Macro |
47
+ | 28 | cpi_inflation | 2.74 | Monthly | 2025-November | BLS (Bureau of Labor Statistics) | Macro |
48
+ | 29 | unemployment | 4.4 | Monthly | 2025-December | BLS (Bureau of Labor Statistics) | Macro |
49
+
50
+ ---
51
+
52
+ ## Qualitative Data
53
+
54
+ | S/N | Title | Date | Source | Subreddit | URL | Category |
55
+ |-----|-------|------|--------|-----------|-----|----------|
56
+ | 1 | The Coca-Cola Company (KO) Latest Stock News & ... | - | Tavily | - | [Link](https://finance.yahoo.com/quote/KO/news/) | News |
57
+ | 2 | The Coca-Cola Company (KO) Stock Price, News, Quote & History | - | Tavily | - | [Link](https://ca.finance.yahoo.com/quote/KO/latest-news/) | News |
58
+ | 3 | The Coca-Cola Company (KO) Latest Press Releases & ... | - | Tavily | - | [Link](https://ca.finance.yahoo.com/quote/KO/press-releases/) | News |
59
+ | 4 | KO The Coca-Cola Company Stock Price & Overview | - | Tavily | - | [Link](https://seekingalpha.com/symbol/KO) | News |
60
+ | 5 | January Dogs Of The Dow: One Ideal 'Safer' Dividend Buy | 2026-01-10 | Finnhub | - | [Link](https://finnhub.io/api/news?id=1660b2a2ba8c3d9e6bd7a573907b58ceded4a1a0c4d63c9ba3a114cc975bf4d3) | Sentiment |
61
+ | 6 | Coca-Cola Consolidated, Inc. Announces First Quarter Dividend | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=7c03bea3f2fd3da7e1123de8ae152fed743c7045fbd27a719f6ec895fb4af5fe) | Sentiment |
62
+ | 7 | The Best Warren Buffett Stocks to Buy With $2,500 Right Now | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=61ca0e60be9146fb269b7e554fb1aa61cba1c75836b1e4648e42c9575017e819) | Sentiment |
63
+ | 8 | PepsiCo's Stock Valuation Looks Attractive: Buy or Wait for Now? | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=01073ece29404b65546702142a72ce42e29b47dfda613081c5a9f2c4e25a510c) | Sentiment |
64
+ | 9 | The Best Stocks to Buy With $1,000 Right Now | 2026-01-09 | Finnhub | - | [Link](https://finnhub.io/api/news?id=140f1634015c1d3869855516b7d0df434fa67f215dec82d0d059558f7604c256) | Sentiment |
65
+ | 10 | 5 Under-the-Radar Consumer Staples Stocks With Pricing Power | 2026-01-08 | Finnhub | - | [Link](https://finnhub.io/api/news?id=9e436f5e94ba7056919dec63710b46705b14eb7e5386c37f11d889e7e290b31b) | Sentiment |
66
+ | 11 | Wells Fargo Adds Coca-Cola (KO) to Q1 2026 Tactical Ideas List | 2026-01-08 | Finnhub | - | [Link](https://finnhub.io/api/news?id=909e7eb1a346dc9067b8ee2498b8a2f55b12324ff41187b8611e951d40671984) | Sentiment |
67
+ | 12 | The 3 Best Dividend Aristocrats to Buy for 2026 | 2026-01-08 | Finnhub | - | [Link](https://finnhub.io/api/news?id=d385258e91b24623ae1bf88aec7116e8cf0b0fb695ac0755ed1e3172f629f3d6) | Sentiment |
68
+ | 13 | Betting Markets Say Supreme Court Will Scrap Trump Tariffs. How to Play It. | 2026-01-08 | Finnhub | - | [Link](https://finnhub.io/api/news?id=6e0fc5222e594ab3889889bab0e6ffd74edf31d51dce852ef5242d2e5bb21f59) | Sentiment |
69
+ | 14 | The Dividend Aristocrats No One’s Talking About (And Their 30+ Year Track Record | 2026-01-08 | Finnhub | - | [Link](https://finnhub.io/api/news?id=2ecc1591039f3c4ed06c25fc03db644f3a68a8f82c1d14447587d7c340c7532d) | Sentiment |
docs/metrics_schema_emitted.md ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## MCP Output Schema - Emitted Format
2
+
3
+ JSON/dict structure returned by each `get_all_sources_*()` function.
4
+
5
+ ---
6
+
7
+ ## 1. `get_all_sources_fundamentals(ticker)`
8
+
9
+ ```
10
+ {
11
+ "ticker": str,
12
+ "sec_edgar": {
13
+ "source": str,
14
+ "as_of": str,
15
+ "data": {
16
+ "revenue": {"value": float, "end_date": str, "fiscal_year": int, "form": str} | null,
17
+ "net_income": {"value": float, "end_date": str, "fiscal_year": int, "form": str} | null,
18
+ "net_margin_pct": {"value": float, "end_date": str, "fiscal_year": int, "form": str} | null,
19
+ "total_assets": {"value": float, "end_date": str, "fiscal_year": int, "form": str} | null,
20
+ "total_liabilities": {"value": float, "end_date": str, "fiscal_year": int, "form": str} | null,
21
+ "stockholders_equity": {"value": float, "end_date": str, "fiscal_year": int, "form": str} | null
22
+ }
23
+ },
24
+ "yahoo_finance": {
25
+ "source": str,
26
+ "as_of": str,
27
+ "data": {
28
+ "operating_margin_pct": {"value": float} | null,
29
+ "total_debt": {"value": float} | null,
30
+ "operating_cash_flow": {"value": float} | null,
31
+ "free_cash_flow": {"value": float} | null
32
+ }
33
+ },
34
+ "generated_at": str
35
+ }
36
+ ```
37
+
38
+ **Notes:**
39
+ - SEC EDGAR: 6 universal metrics (FY data with temporal fields)
40
+ - Yahoo Finance: 4 supplementary metrics (TTM data)
41
+ - If SEC fails, Yahoo provides fallback core metrics (revenue, net_income, net_margin_pct, total_assets)
42
+
43
+ ---
44
+
45
+ ## 2. `get_all_sources_valuation(ticker)`
46
+
47
+ ```
48
+ {
49
+ "group": "source_comparison",
50
+ "ticker": str,
51
+ "sources": {
52
+ "yahoo_finance": {
53
+ "source": str,
54
+ "regular_market_time": str,
55
+ "data": {
56
+ "current_price": float | null,
57
+ "market_cap": float | null,
58
+ "enterprise_value": float | null,
59
+ "trailing_pe": float | null,
60
+ "forward_pe": float | null,
61
+ "ps_ratio": float | null,
62
+ "pb_ratio": float | null,
63
+ "trailing_peg": float | null,
64
+ "forward_peg": float | null,
65
+ "earnings_growth": float | null,
66
+ "revenue_growth": float | null
67
+ }
68
+ }
69
+ },
70
+ "source": str,
71
+ "as_of": str
72
+ }
73
+ ```
74
+
75
+ **Notes:**
76
+ - 11 universal metrics (excludes ev_ebitda - banks don't report EBITDA)
77
+ - If Yahoo fails, `alpha_vantage` key replaces `yahoo_finance`
78
+
79
+ ---
80
+
81
+ ## 3. `get_all_sources_volatility(ticker)`
82
+
83
+ ```
84
+ {
85
+ "group": "raw_metrics",
86
+ "ticker": str,
87
+ "metrics": {
88
+ "vix": {
89
+ "value": float | null,
90
+ "data_type": str,
91
+ "as_of": str,
92
+ "source": str,
93
+ "fallback": bool
94
+ },
95
+ "vxn": {
96
+ "value": float | null,
97
+ "data_type": str,
98
+ "as_of": str,
99
+ "source": str,
100
+ "fallback": bool
101
+ },
102
+ "beta": {
103
+ "value": float | null,
104
+ "data_type": str,
105
+ "as_of": str,
106
+ "source": str,
107
+ "fallback": bool
108
+ },
109
+ "historical_volatility": {
110
+ "value": float | null,
111
+ "data_type": str,
112
+ "as_of": str,
113
+ "source": str,
114
+ "fallback": bool
115
+ },
116
+ "implied_volatility": {
117
+ "value": float | null,
118
+ "data_type": str,
119
+ "as_of": str,
120
+ "source": str,
121
+ "fallback": bool
122
+ }
123
+ },
124
+ "source": str,
125
+ "as_of": str
126
+ }
127
+ ```
128
+
129
+ **Notes:**
130
+ - `data_type` values: "Daily" (VIX/VXN), "1Y" (beta), "30D" (historical_vol), "Forward" (implied_vol)
131
+
132
+ ---
133
+
134
+ ## 4. `get_all_sources_macro()`
135
+
136
+ ```
137
+ {
138
+ "group": "raw_metrics",
139
+ "ticker": "MACRO",
140
+ "metrics": {
141
+ "gdp_growth": {
142
+ "value": float | null,
143
+ "data_type": str,
144
+ "as_of": str,
145
+ "source": str,
146
+ "fallback": bool
147
+ },
148
+ "interest_rate": {
149
+ "value": float | null,
150
+ "data_type": str,
151
+ "as_of": str,
152
+ "source": str,
153
+ "fallback": bool
154
+ },
155
+ "cpi_inflation": {
156
+ "value": float | null,
157
+ "data_type": str,
158
+ "as_of": str,
159
+ "source": str,
160
+ "fallback": bool
161
+ },
162
+ "unemployment": {
163
+ "value": float | null,
164
+ "data_type": str,
165
+ "as_of": str,
166
+ "source": str,
167
+ "fallback": bool
168
+ }
169
+ },
170
+ "source": str,
171
+ "as_of": str
172
+ }
173
+ ```
174
+
175
+ **Notes:**
176
+ - `data_type` values: "Quarterly" (GDP), "Monthly" (interest_rate, cpi, unemployment)
177
+ - `as_of` format varies: "2025Q3" (GDP), "2025-01" (monthly)
178
+
179
+ ---
180
+
181
+ ## 5. `get_all_sources_news(ticker, company_name)`
182
+
183
+ ```
184
+ {
185
+ "group": "content_analysis",
186
+ "ticker": str,
187
+ "query": str,
188
+ "items": [
189
+ {
190
+ "title": str | null,
191
+ "content": str | null,
192
+ "url": str | null,
193
+ "datetime": str | null,
194
+ "source": str
195
+ }
196
+ ],
197
+ "item_count": int,
198
+ "sources_used": [str],
199
+ "source": str,
200
+ "as_of": str
201
+ }
202
+ ```
203
+
204
+ **Notes:**
205
+ - `sources_used`: ["Tavily", "NYT", "NewsAPI"]
206
+ - `datetime`: YYYY-MM-DD format
207
+
208
+ ---
209
+
210
+ ## 6. `get_all_sources_sentiment(ticker, company_name)`
211
+
212
+ ```
213
+ {
214
+ "group": "content_analysis",
215
+ "ticker": str,
216
+ "items": [
217
+ {
218
+ "title": str | null,
219
+ "content": str | null,
220
+ "url": str | null,
221
+ "datetime": str | null,
222
+ "source": str,
223
+ "subreddit": str | null
224
+ }
225
+ ],
226
+ "item_count": int,
227
+ "sources_used": [str],
228
+ "source": str,
229
+ "as_of": str
230
+ }
231
+ ```
232
+
233
+ **Notes:**
234
+ - `sources_used`: ["Finnhub", "Reddit"]
235
+ - `subreddit`: Only populated for Reddit items (e.g., "r/wallstreetbets")
236
+ - `datetime`: YYYY-MM-DD format
docs/metrics_schema_human_readable.md ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Overview
2
+
3
+ Standardized output schema for financial data across ALL industries (banks, consumer goods, tech, etc.)
4
+
5
+ ---
6
+
7
+ ## Quantitative Metrics
8
+
9
+ ### 1. Fundamentals (9 metrics)
10
+
11
+ | Source | Metric | Description | Universal? |
12
+ |--------|--------|-------------|:----------:|
13
+ | **SEC EDGAR** | `revenue` | Total revenue (FY) | ✓ |
14
+ | **SEC EDGAR** | `net_income` | Net income (FY) | ✓ |
15
+ | **SEC EDGAR** | `net_margin_pct` | Net Income / Revenue % | ✓ |
16
+ | **SEC EDGAR** | `total_assets` | Total assets | ✓ |
17
+ | **SEC EDGAR** | `total_liabilities` | Total liabilities | ✓ |
18
+ | **SEC EDGAR** | `stockholders_equity` | Shareholders' equity | ✓ |
19
+ | **Yahoo Finance** | `operating_margin_pct` | Operating margin % (TTM) | Supplementary |
20
+ | **Yahoo Finance** | `total_debt` | Total debt (TTM) | Supplementary |
21
+ | **Yahoo Finance** | `operating_cash_flow` | Operating cash flow (TTM) | Supplementary |
22
+ | **Yahoo Finance** | `free_cash_flow` | Free cash flow (TTM) | Supplementary |
23
+
24
+ **Sources:**
25
+ ```
26
+ ┌────┬───────────────┬───────────┬───────────────────────────────────────┐
27
+ │ # │ Source │ Data Type │ Notes │
28
+ ├────┼───────────────┼───────────┼───────────────────────────────────────┤
29
+ │ 1 │ SEC EDGAR │ FY (10-K) │ Primary - official filings │
30
+ │ 2 │ Yahoo Finance │ TTM │ Supplementary + Fallback if SEC fails │
31
+ └────┴───────────────┴───────────┴───────────────────────────────────────┘
32
+ ```
33
+
34
+ ---
35
+
36
+ ### 2. Valuation (11 metrics)
37
+
38
+ | Source | Metric | Description |
39
+ |--------|--------|-------------|
40
+ | **Yahoo Finance** | `current_price` | Current stock price |
41
+ | **Yahoo Finance** | `market_cap` | Market capitalization |
42
+ | **Yahoo Finance** | `enterprise_value` | Enterprise value |
43
+ | **Yahoo Finance** | `trailing_pe` | Trailing P/E ratio |
44
+ | **Yahoo Finance** | `forward_pe` | Forward P/E ratio |
45
+ | **Yahoo Finance** | `ps_ratio` | Price-to-Sales ratio |
46
+ | **Yahoo Finance** | `pb_ratio` | Price-to-Book ratio |
47
+ | **Yahoo Finance** | `trailing_peg` | Trailing PEG ratio |
48
+ | **Yahoo Finance** | `forward_peg` | Forward PEG ratio |
49
+ | **Yahoo Finance** | `earnings_growth` | Earnings growth rate |
50
+ | **Yahoo Finance** | `revenue_growth` | Revenue growth rate |
51
+
52
+ **Sources:**
53
+ ```
54
+ ┌────┬───────────────┬─────────────────────────────────┐
55
+ │ # │ Source │ Notes │
56
+ ├────┼───────────────┼─────────────────────────────────┤
57
+ │ 1 │ Yahoo Finance │ Primary - real-time quotes │
58
+ │ 2 │ Alpha Vantage │ Fallback if Yahoo Finance fails │
59
+ └────┴───────────────┴─────────────────────────────────┘
60
+ ```
61
+ **Excluded:** `ev_ebitda` (banks don't report EBITDA)
62
+
63
+ ---
64
+
65
+ ### 3. Volatility (5 metrics)
66
+
67
+ | Source | Metric | Description |
68
+ |--------|--------|-------------|
69
+ | **FRED** | `vix` | CBOE Volatility Index (S&P 500) |
70
+ | **FRED** | `vxn` | CBOE NASDAQ Volatility Index |
71
+ | **Calculated** | `beta` | 1-year beta vs S&P 500 |
72
+ | **Calculated** | `historical_volatility` | 30-day historical volatility |
73
+ | **Estimated** | `implied_volatility` | Forward implied volatility |
74
+
75
+ **Sources:**
76
+ ```
77
+ ┌─────────────────────┬─────────────────┬───────────────────────────┐
78
+ │ Metric │ Primary │ Fallback │
79
+ ├─────────────────────┼─────────────────┼───────────────────────────┤
80
+ │ vix, vxn │ FRED │ - │
81
+ │ beta │ Yahoo Finance │ Alpha Vantage │
82
+ │ historical_vol │ Yahoo Finance │ Alpha Vantage │
83
+ │ implied_vol │ Options Chain │ Market average (30%) │
84
+ └─────────────────────┴─────────────────┴───────────────────────────┘
85
+ ```
86
+
87
+ ---
88
+
89
+ ### 4. Macro (4 metrics)
90
+
91
+ | Source | Metric | Description |
92
+ |--------|--------|-------------|
93
+ | **BEA** | `gdp_growth` | GDP growth rate (quarterly) |
94
+ | **FRED** | `interest_rate` | Federal funds rate |
95
+ | **BLS** | `cpi_inflation` | CPI inflation rate |
96
+ | **BLS** | `unemployment` | Unemployment rate |
97
+
98
+ **Sources:**
99
+ ```
100
+ ┌─────────────────────┬─────────────────┬───────────────────────────┐
101
+ │ Metric │ Primary │ Fallback │
102
+ ├─────────────────────┼─────────────────┼───────────────────────────┤
103
+ │ gdp_growth │ BEA │ FRED │
104
+ │ interest_rate │ FRED │ - │
105
+ │ cpi_inflation │ BLS │ FRED │
106
+ │ unemployment │ BLS │ FRED │
107
+ └─────────────────────┴─────────────────┴───────────────────────────┘
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Qualitative Data
113
+
114
+ ### 5. News (variable count)
115
+
116
+ | Field | Description |
117
+ |-------|-------------|
118
+ | `title` | Article headline |
119
+ | `date` | Publication date |
120
+ | `source` | News source (Tavily, NYT, NewsAPI) |
121
+ | `url` | Link to article |
122
+
123
+ **Sources (parallel, equally weighted):**
124
+ ```
125
+ ┌─────────┬─────────────────────────────┐
126
+ │ Source │ Notes │
127
+ ├─────────┼─────────────────────────────┤
128
+ │ Tavily │ AI-powered search │
129
+ │ NewsAPI │ Financial news aggregator │
130
+ │ NYT │ New York Times API │
131
+ └─────────┴─────────────────────────────┘
132
+ ```
133
+
134
+ ---
135
+
136
+ ### 6. Sentiment (variable count)
137
+
138
+ | Field | Description |
139
+ |-------|-------------|
140
+ | `title` | Post/article headline |
141
+ | `date` | Publication date |
142
+ | `source` | Source (Finnhub, Reddit) |
143
+ | `subreddit` | Reddit subreddit (if applicable) |
144
+ | `url` | Link to source |
145
+
146
+ **Sources (parallel, equally weighted):**
147
+ ```
148
+ ┌─────────┬───────────────────────────────────┐
149
+ │ Source │ Notes │
150
+ ├─────────┼───────────────────────────────────┤
151
+ │ Finnhub │ Company news & sentiment │
152
+ │ Reddit │ r/wallstreetbets, r/stocks │
153
+ └─────────┴───────────────────────────────────┘
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Expected Counts
159
+
160
+ | MCP | Expected | Rationale |
161
+ |-----|:--------:|-----------|
162
+ | fundamentals | 9 | SEC (6) + Yahoo (4 supplementary, ~1 null) |
163
+ | valuation | 11 | Yahoo Finance only, universal metrics |
164
+ | volatility | 5 | All universal |
165
+ | macro | 4 | All universal |
166
+ | news | - | Variable (depends on news cycle) |
167
+ | sentiment | - | Variable (depends on activity) |
168
+
169
+ ---
170
+
171
+ ## Files Implementing This Schema
172
+
173
+ | File | Environment | Purpose |
174
+ | ---------------------------------------------------------- | ----------- | ----------------------------------- |
175
+ | `mcp-servers/fundamentals-basket/server_legacy.py` | Test | Direct import for E2E tests |
176
+ | `mcp-servers/fundamentals-basket/services/orchestrator.py` | Production | Via http_server.py → server.py |
177
+ | `mcp-servers/valuation-basket/server.py` | Both | get_all_sources_valuation() |
178
+ | `mcp-servers/volatility-basket/server.py` | Both | get_all_sources_volatility() |
179
+ | `mcp-servers/macro-basket/server.py` | Both | get_all_sources_macro() |
180
+ | `tests/test_mcp_e2e.py` | Test | E2E validation with expected counts |
docs/newsapi_data_schema.md ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ NewsAPI Data Schema
2
+ ===================
3
+
4
+ Endpoint: https://newsapi.org/v2/everything
5
+ Method: GET
6
+
7
+ Note: Free tier has 24-hour delay on articles
8
+
9
+
10
+ Request Parameters
11
+
12
+ | field | type | description |
13
+ |----------|--------|------------------------------------------|
14
+ | apiKey | string | API key |
15
+ | q | string | Search query |
16
+ | sortBy | string | "publishedAt", "relevancy", "popularity" |
17
+ | language | string | Language code (e.g., "en") |
18
+ | pageSize | int | Results per page (max 100) |
19
+
20
+
21
+ Response (articles[])
22
+
23
+ | field | type | description |
24
+ |-------------|--------|-----------------------------|
25
+ | title | string | Article title |
26
+ | url | string | Article URL |
27
+ | description | string | Article description |
28
+ | content | string | Article content (truncated) |
29
+ | publishedAt | string | ISO date |
30
+ | source.name | string | Publisher name |
31
+
32
+
33
+ Example Result
34
+
35
+ | field | value |
36
+ |-------------|----------------------------------------|
37
+ | title | "Apple Announces New Product Line" |
38
+ | url | "https://techcrunch.com/apple-new..." |
39
+ | description | "Apple unveiled its latest products..."|
40
+ | publishedAt | "2025-01-08T10:15:00Z" |
41
+ | source.name | "TechCrunch" |
docs/nyt_data_schema.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ NYT Article Search Data Schema
2
+ ==============================
3
+
4
+ Endpoint: https://api.nytimes.com/svc/search/v2/articlesearch.json
5
+ Method: GET
6
+
7
+
8
+ Request Parameters
9
+
10
+ | field | type | description |
11
+ |------------|--------|---------------------------------|
12
+ | api-key | string | API key |
13
+ | q | string | Search query |
14
+ | sort | string | "newest", "oldest", "relevance" |
15
+ | begin_date | string | YYYYMMDD format |
16
+ | end_date | string | YYYYMMDD format |
17
+ | page | int | Pagination (0-indexed) |
18
+
19
+
20
+ Response (response.docs[])
21
+
22
+ | field | type | description |
23
+ |----------------|--------|------------------|
24
+ | headline.main | string | Article headline |
25
+ | web_url | string | Article URL |
26
+ | snippet | string | Article snippet |
27
+ | lead_paragraph | string | First paragraph |
28
+ | pub_date | string | ISO date |
29
+ | section_name | string | NYT section |
30
+
31
+
32
+ Example Result
33
+
34
+ | field | value |
35
+ |----------------|----------------------------------------|
36
+ | headline.main | "Apple Stock Surges on Earnings" |
37
+ | web_url | "https://nytimes.com/2025/01/apple..." |
38
+ | snippet | "Apple shares climbed on strong..." |
39
+ | pub_date | "2025-01-09T15:30:00Z" |
40
+ | section_name | "Business" |
docs/reddit_data_schema.md ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Reddit Data Schema
2
+ ==================
3
+
4
+ Endpoint: https://www.reddit.com/r/{subreddit}/search.json
5
+ Method: GET
6
+ Subreddits: wallstreetbets, stocks
7
+
8
+
9
+ Request Parameters
10
+
11
+ | field | type | description |
12
+ | ----------- | ------ | ---------------------------- |
13
+ | q | string | Search query (ticker) |
14
+ | sort | string | "relevance", "new", etc. |
15
+ | t | string | Time filter ("week") |
16
+ | limit | int | Max results |
17
+ | restrict_sr | string | "true" to limit to subreddit |
18
+
19
+
20
+ Response (data.children[].data)
21
+
22
+ | field | type | description |
23
+ |-------------|--------|------------------|
24
+ | title | string | Post title |
25
+ | selftext | string | Post body text |
26
+ | ups | int | Upvote count |
27
+ | permalink | string | Reddit permalink |
28
+ | created_utc | int | Unix timestamp |
29
+
30
+
31
+ Example Result
32
+
33
+ | field | value |
34
+ |-------------|-------------------------------------------|
35
+ | title | "AAPL earnings crush - bullish long term" |
36
+ | selftext | "Just saw the Q4 numbers and..." |
37
+ | ups | 2450 |
38
+ | permalink | "/r/stocks/comments/abc123/..." |
39
+ | created_utc | 1736351400 |
docs/schema_normalization.md ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Problem
2
+
3
+ | MCP | Emits | Analyzer Expects |
4
+ |-----|-------|------------------|
5
+ | volatility | `{"metrics": {"vix": ...}}` | `{"yahoo_finance": {"data": {...}}}` |
6
+ | macro | `{"metrics": {"gdp_growth": ...}}` | `{"bea_bls": {"data": {...}}}` |
7
+
8
+ ## Solution
9
+
10
+ | Step | Component | Action |
11
+ |:----:|-----------|--------|
12
+ | 1 | MCP servers | Emit raw schemas |
13
+ | 2 | **mcp_client.py** | `_normalize_*()` adapters |
14
+ | 3 | A2A | Pass normalized data |
15
+ | 4 | Analyzer | Consume consistent schema |
16
+
17
+ ## Why Source-Centric (not MCP-Centric)
18
+
19
+ | Human View (6 MCPs) | | Processing View (by source) | |
20
+ |---------------------|---|-----------------------------|----|
21
+ | fundamentals | → | SEC EDGAR | primary |
22
+ | valuation | → | Yahoo Finance | fallback |
23
+ | volatility | → | Alpha Vantage | fallback |
24
+ | macro | → | FRED / BEA / BLS | |
25
+ | news | → | Tavily / NYT / NewsAPI | |
26
+ | sentiment | → | Finnhub / Reddit | |
27
+
28
+ **MCPs** = fetch boundaries · **Sources** = conflict resolution
29
+
30
+ ### Example: Fundamentals MCP
31
+
32
+ | Human View | | Processing View | |
33
+ |------------|---|-----------------|---|
34
+ | **fundamentals** | | **SEC EDGAR** | primary |
35
+ | - revenue | → | - revenue | |
36
+ | - net_income | | - net_income | |
37
+ | - margins | | | |
38
+ | | | **Yahoo Finance** | fallback |
39
+ | | | - operating_cf | |
40
+
41
+ ## Target Schema (Source-Keyed)
42
+
43
+ ```python
44
+ {
45
+ "sources": {
46
+ "sec_edgar": {"revenue": {...}, "net_income": {...}},
47
+ "yahoo_finance": {"beta": {...}, "trailing_pe": {...}},
48
+ "fred": {"vix": {...}, "interest_rate": {...}},
49
+ "bea_bls": {"gdp_growth": {...}, "unemployment": {...}},
50
+ "tavily": {"items": [...]},
51
+ "finnhub": {"items": [...]},
52
+ }
53
+ }
54
+ ```
docs/tavily_data_schema.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Tavily Data Schema
2
+ ==================
3
+
4
+ Endpoint: https://api.tavily.com/search
5
+ Method: POST
6
+
7
+
8
+ Request Parameters
9
+
10
+ | field | type | description |
11
+ |-----------------|--------|-----------------------------|
12
+ | api_key | string | API key |
13
+ | query | string | Search query |
14
+ | search_depth | string | "basic" or "advanced" |
15
+ | max_results | int | 1-10 results |
16
+ | include_answer | bool | Include AI-generated answer |
17
+ | include_domains | array | Limit to specific domains |
18
+ | exclude_domains | array | Exclude specific domains |
19
+
20
+
21
+ Response (results[])
22
+
23
+ | field | type | description |
24
+ |----------------|--------|-------------------------|
25
+ | title | string | Article title |
26
+ | url | string | Article URL |
27
+ | content | string | Article snippet/content |
28
+ | score | float | Relevance score (0-1) |
29
+ | published_date | string | Publication date |
30
+
31
+
32
+ Example Result
33
+
34
+ | field | value |
35
+ |----------------|------------------------------------------|
36
+ | title | "Apple Q4 Earnings Beat Expectations" |
37
+ | url | "https://example.com/apple-earnings" |
38
+ | content | "Apple reported revenue of $119.6B..." |
39
+ | score | 0.89 |
40
+ | published_date | "2025-01-09" |
docs/vader_data_schema.md ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ VADER Sentiment Data Schema
2
+ ===========================
3
+
4
+ Library: vaderSentiment.vaderSentiment.SentimentIntensityAnalyzer
5
+ Method: polarity_scores(text)
6
+
7
+ VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and
8
+ rule-based sentiment analysis tool specifically attuned to social media.
9
+
10
+
11
+ Input
12
+
13
+ | field | type | description |
14
+ |-------|--------|-----------------|
15
+ | text | string | Text to analyze |
16
+
17
+
18
+ Output (polarity_scores)
19
+
20
+ | field | type | range | description |
21
+ |----------|-------|-------------|--------------------------|
22
+ | neg | float | 0.0 - 1.0 | Negative sentiment ratio |
23
+ | neu | float | 0.0 - 1.0 | Neutral sentiment ratio |
24
+ | pos | float | 0.0 - 1.0 | Positive sentiment ratio |
25
+ | compound | float | -1.0 - +1.0 | Normalized composite |
26
+
27
+ Note: neg + neu + pos = 1.0
28
+
29
+
30
+ Example
31
+
32
+ Input: "Apple reports record earnings, stock surges on strong iPhone sales"
33
+
34
+ | field | value |
35
+ |----------|-------|
36
+ | neg | 0.0 |
37
+ | neu | 0.594 |
38
+ | pos | 0.406 |
39
+ | compound | 0.765 |
docs/valuation_data_schema.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Valuation Data Schema
2
+ =====================
3
+
4
+ Single source of truth for valuation-basket MCP server output.
5
+ Example: AAPL (Apple Inc)
6
+
7
+ | S/N | metric | value | temporal info | source |
8
+ |-----|-----------------------|------------|-----------------|---------------|
9
+ | | **Price & Size** | | | |
10
+ | 1 | Current Price | $259.02 | Market Time | Yahoo Finance |
11
+ | 2 | Market Cap | $3.83T | Market Time | Yahoo Finance |
12
+ | 3 | Enterprise Value | $3.89T | Market Time | Yahoo Finance |
13
+ | | **Earnings Multiples**| | | |
14
+ | 4 | Trailing P/E | 34.72x | Market Time | Yahoo Finance |
15
+ | 5 | Forward P/E | 28.34x | Market Time | Yahoo Finance |
16
+ | 6 | Trailing PEG | 2.64 | Market Time | Yahoo Finance |
17
+ | 7 | Forward PEG | 2.28 | Market Time | Yahoo Finance |
18
+ | | **Revenue Multiples** | | | |
19
+ | 8 | P/S Ratio | 9.24x | Market Time | Yahoo Finance |
20
+ | 9 | EV/Revenue | 9.35x | Market Time | Yahoo Finance |
21
+ | 10 | EV/EBITDA | 26.88x | Market Time | Yahoo Finance |
22
+ | | **Asset Multiples** | | | |
23
+ | 11 | P/B Ratio | 52.17x | Market Time | Yahoo Finance |
24
+ | | **Risk** | | | |
25
+ | 12 | Beta | 1.09 | Market Time | Yahoo Finance |
26
+ | | **Alpha Vantage Only**| | | |
27
+ | 13 | 50 Day Moving Avg | $273.01 | Market Time | Alpha Vantage |
28
+ | 14 | 200 Day Moving Avg | $232.75 | Market Time | Alpha Vantage |
29
+ | 15 | 52 Week High | $288.62 | Market Time | Alpha Vantage |
30
+ | 16 | 52 Week Low | $168.63 | Market Time | Alpha Vantage |
31
+ | 17 | Analyst Target Price | $287.71 | Market Time | Alpha Vantage |
docs/volatility_data_schema.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Volatility Data Schema
2
+ ======================
3
+
4
+ Single source of truth for volatility-basket MCP server output.
5
+ Example: AAPL (Apple Inc)
6
+
7
+ | S/N | metric | value | temporal info | source |
8
+ |-----|-----------------------|---------|---------------|---------------------|
9
+ | | **Market Indices** | | | |
10
+ | 1 | VIX | 15.45 | 2026-01-08 | FRED |
11
+ | 2 | VXN | 20.15 | 2026-01-08 | FRED |
12
+ | | **Stock-Specific** | | | |
13
+ | 3 | Beta | 1.29 | 1yr rolling | Yahoo Finance |
14
+ | 4 | Historical Volatility | 12.33% | 30-day | Yahoo Finance |
15
+ | 5 | Implied Volatility | 28.45% | ATM option | Yahoo Finance Options|
docs/yahoo_data_schema.md ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Yahoo Finance Data Schema
2
+ =========================
3
+
4
+ Example: AAPL (Apple Inc)
5
+
6
+ Time Categories:
7
+ - Market Time: Real-time price data (regularMarketTime)
8
+ - Fiscal Time: Periodic accounting data (mostRecentQuarter, lastFiscalYearEnd)
9
+
10
+
11
+ Company Info
12
+
13
+ | field | value |
14
+ | -------- | ------------------ |
15
+ | longName | Apple Inc. |
16
+ | address1 | One Apple Park Way |
17
+ | city | Cupertino |
18
+ | state | CA |
19
+ | country | United States |
20
+
21
+
22
+ Valuation (Market Time: regularMarketTime)
23
+
24
+ | field | value |
25
+ |---------------------|---------------|
26
+ | regularMarketTime | 1767992401 |
27
+ | marketCap | 3832542658560 |
28
+ | enterpriseValue | 3889336156160 |
29
+ | trailingPE | 34.721554 |
30
+ | forwardPE | 28.341707 |
31
+ | enterpriseToEbitda | 26.87 |
32
+ | enterpriseToRevenue | 9.346 |
33
+ | priceToBook | 51.967537 |
34
+
35
+
36
+ Margins, Returns & Growth (Fiscal Time: mostRecentQuarter)
37
+
38
+ | field | value |
39
+ |-------------------------|------------|
40
+ | mostRecentQuarter | 1758931200 |
41
+ | grossMargins | 0.46905 |
42
+ | ebitdaMargins | 0.34782 |
43
+ | operatingMargins | 0.31647 |
44
+ | returnOnEquity | 1.71422 |
45
+ | returnOnAssets | 0.22964 |
46
+ | revenueGrowth | 0.079 |
47
+ | earningsQuarterlyGrowth | 0.864 |
48
+
49
+
50
+ Earnings (Fiscal Time: lastFiscalYearEnd / earningsTimestamp)
51
+
52
+ | field | value |
53
+ |-------------------|------------|
54
+ | lastFiscalYearEnd | 1758931200 |
55
+ | trailingEps | 7.47 |
56
+ | earningsTimestamp | 1769720400 |
57
+ | forwardEps | 9.15153 |
58
+
59
+
60
+ Cash Flow & Liquidity/Debt (Fiscal Time: mostRecentQuarter)
61
+
62
+ | field | value |
63
+ |-------------------|--------------|
64
+ | mostRecentQuarter | 1758931200 |
65
+ | freeCashflow | 78862254080 |
66
+ | operatingCashflow | 111482003456 |
67
+ | totalCash | 54697000960 |
68
+ | currentRatio | 0.893 |
69
+ | quickRatio | 0.771 |
70
+ | debtToEquity | 152.411 |
71
+ | totalDebt | 112377004032 |
72
+
73
+
74
+ Risk (Market Time: regularMarketTime)
75
+
76
+ | field | value |
77
+ |-------------------|------------|
78
+ | regularMarketTime | 1767992401 |
79
+ | beta | 1.093 |
80
+
81
+
82
+ Dividends (exDividendDate)
83
+
84
+ | field | value |
85
+ |----------------|------------|
86
+ | exDividendDate | 1762732800 |
87
+ | payoutRatio | 0.1367 |
docs/yahoo_options_data_schema.md ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Yahoo Finance Options Data Schema
2
+ ==================================
3
+
4
+ Example: AAPL (Apple Inc)
5
+
6
+ Endpoint: https://query1.finance.yahoo.com/v7/finance/options/{ticker}
7
+
8
+
9
+ Response Structure
10
+
11
+ | field | description |
12
+ |------------------------|-------------------------------------|
13
+ | optionChain | Root container for options data |
14
+ | optionChain.result | Array of result objects |
15
+ | result[0].quote | Underlying stock quote data |
16
+ | result[0].options | Array of options by expiration |
17
+ | result[0].strikes | Available strike prices |
18
+ | result[0].expirationDates | Unix timestamps of expirations |
19
+
20
+
21
+ quote (Underlying Stock)
22
+
23
+ | field | description |
24
+ |---------------------------|---------------------------|
25
+ | symbol | Ticker symbol |
26
+ | regularMarketPrice | Current stock price |
27
+ | regularMarketTime | Quote timestamp (Unix) |
28
+ | regularMarketChange | Price change |
29
+ | regularMarketChangePercent| Price change percentage |
30
+
31
+
32
+ Expiration Dates
33
+
34
+ | field | description |
35
+ |-----------------|---------------------------------------|
36
+ | expirationDates | Array of Unix timestamps |
37
+ | count | Number of available expiration dates |
38
+ | first | Nearest expiration (Unix timestamp) |
39
+ | last | Furthest expiration (Unix timestamp) |
40
+
41
+
42
+ Strike Prices
43
+
44
+ | field | description |
45
+ |---------|------------------------------|
46
+ | strikes | Array of available strikes |
47
+ | count | Number of strike prices |
48
+ | min | Lowest available strike |
49
+ | max | Highest available strike |
50
+
51
+
52
+ options[0] (First Expiration)
53
+
54
+ | field | description |
55
+ |----------------|----------------------------------|
56
+ | expirationDate | Expiration date (Unix timestamp) |
57
+ | calls[] | Array of call option contracts |
58
+ | puts[] | Array of put option contracts |
59
+
60
+
61
+ Contract Fields (calls[] / puts[])
62
+
63
+ | field | description |
64
+ |-------------------|------------------------------------|
65
+ | contractSymbol | Option contract symbol |
66
+ | strike | Strike price |
67
+ | currency | Currency (USD) |
68
+ | lastPrice | Last traded price |
69
+ | change | Price change |
70
+ | percentChange | Price change percentage |
71
+ | volume | Trading volume |
72
+ | openInterest | Open interest |
73
+ | bid | Bid price |
74
+ | ask | Ask price |
75
+ | impliedVolatility | Implied volatility (decimal, 0-1+) |
76
+ | inTheMoney | Boolean: in the money |
77
+ | expiration | Expiration timestamp |
78
+ | lastTradeDate | Last trade timestamp |
79
+
80
+
81
+ Implied Volatility Extraction
82
+ -----------------------------
83
+
84
+ To get ATM implied volatility:
85
+ 1. Get regularMarketPrice from quote
86
+ 2. Find call with strike closest to current price
87
+ 3. Read impliedVolatility field (multiply by 100 for %)
88
+
89
+ Example:
90
+
91
+ | field | value |
92
+ |-------------------------|---------|
93
+ | currentPrice | 259.02 |
94
+ | atmStrike | 260.00 |
95
+ | impliedVolatility (raw) | 0.2845 |
96
+ | impliedVolatility (%) | 28.45% |
mcp-servers/{financials-basket → fundamentals-basket}/README.md RENAMED
@@ -5,7 +5,7 @@ MCP server for fetching fundamental financial data from SEC EDGAR XBRL.
5
  ## Installation
6
 
7
  ```bash
8
- cd mcp-servers/financials-basket
9
  python3 -m venv venv
10
  source venv/bin/activate
11
  pip install -r requirements.txt
@@ -124,9 +124,9 @@ Add to `~/.config/claude/claude_desktop_config.json`:
124
  ```json
125
  {
126
  "mcpServers": {
127
- "financials-basket": {
128
  "command": "/path/to/venv/bin/python",
129
- "args": ["/path/to/mcp-servers/financials-basket/server.py"]
130
  }
131
  }
132
  }
@@ -186,7 +186,7 @@ Add to `~/.config/claude/claude_desktop_config.json`:
186
  ## Files
187
 
188
  ```
189
- financials-basket/
190
  ├── server.py # MCP server implementation
191
  ├── test_fetchers.py # Standalone test script
192
  ├── requirements.txt # Python dependencies
 
5
  ## Installation
6
 
7
  ```bash
8
+ cd mcp-servers/fundamentals-basket
9
  python3 -m venv venv
10
  source venv/bin/activate
11
  pip install -r requirements.txt
 
124
  ```json
125
  {
126
  "mcpServers": {
127
+ "fundamentals-basket": {
128
  "command": "/path/to/venv/bin/python",
129
+ "args": ["/path/to/mcp-servers/fundamentals-basket/server.py"]
130
  }
131
  }
132
  }
 
186
  ## Files
187
 
188
  ```
189
+ fundamentals-basket/
190
  ├── server.py # MCP server implementation
191
  ├── test_fetchers.py # Standalone test script
192
  ├── requirements.txt # Python dependencies
mcp-servers/fundamentals-basket/config.py ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Configuration for Financials-Basket MCP Server
3
+
4
+ Centralized configuration for timeouts, rate limits, circuit breaker,
5
+ and SWOT analysis thresholds.
6
+ """
7
+
8
+ # =============================================================================
9
+ # TIMEOUTS (seconds) - Increased for completeness-first mode
10
+ # =============================================================================
11
+
12
+ # Global timeout for MCP tool execution
13
+ TOOL_TIMEOUT = 60.0
14
+
15
+ # Per-source timeouts (increased for reliability)
16
+ SEC_EDGAR_TIMEOUT = 30.0
17
+ SEC_EDGAR_DOCUMENT_TIMEOUT = 45.0 # For fetching full 10-K documents
18
+ YAHOO_FINANCE_TIMEOUT = 30.0
19
+ CIK_LOOKUP_TIMEOUT = 15.0
20
+
21
+ # =============================================================================
22
+ # RATE LIMITING
23
+ # =============================================================================
24
+
25
+ # SEC EDGAR: 10 requests per second (official limit)
26
+ SEC_RATE_LIMIT_REQUESTS = 10
27
+ SEC_RATE_LIMIT_PERIOD = 1.0 # seconds
28
+
29
+ # Yahoo Finance: 5 requests per second (conservative)
30
+ YAHOO_RATE_LIMIT_REQUESTS = 5
31
+ YAHOO_RATE_LIMIT_PERIOD = 1.0
32
+
33
+ # =============================================================================
34
+ # RETRY CONFIGURATION
35
+ # =============================================================================
36
+
37
+ # Exponential backoff: 1s, 2s, 4s
38
+ RETRY_MAX_ATTEMPTS = 3
39
+ RETRY_BASE_DELAY = 1.0
40
+ RETRY_EXPONENTIAL_BASE = 2
41
+
42
+ # HTTP status codes that trigger retry
43
+ RETRY_STATUS_CODES = {429, 500, 502, 503, 504}
44
+
45
+ # =============================================================================
46
+ # CIRCUIT BREAKER
47
+ # =============================================================================
48
+
49
+ # SEC EDGAR circuit breaker
50
+ SEC_CB_FAILURE_THRESHOLD = 5 # Open after 5 consecutive failures
51
+ SEC_CB_SUCCESS_THRESHOLD = 3 # Close after 3 consecutive successes
52
+ SEC_CB_HALF_OPEN_TIMEOUT = 30.0 # seconds
53
+
54
+ # Yahoo Finance circuit breaker
55
+ YAHOO_CB_FAILURE_THRESHOLD = 3
56
+ YAHOO_CB_SUCCESS_THRESHOLD = 2
57
+ YAHOO_CB_HALF_OPEN_TIMEOUT = 60.0
58
+
59
+ # =============================================================================
60
+ # CACHE TTL (seconds)
61
+ # =============================================================================
62
+
63
+ # CIK mappings rarely change
64
+ CIK_CACHE_TTL = 86400 # 24 hours
65
+
66
+ # Company facts change with filings
67
+ FACTS_CACHE_TTL = 3600 # 1 hour
68
+
69
+ # Company info (name, SIC, etc.)
70
+ COMPANY_INFO_CACHE_TTL = 86400 # 24 hours
71
+
72
+ # =============================================================================
73
+ # SWOT ANALYSIS THRESHOLDS
74
+ # =============================================================================
75
+
76
+ # Revenue growth (3-year CAGR)
77
+ REVENUE_GROWTH_STRONG = 15.0 # > 15% = strength
78
+ REVENUE_GROWTH_POSITIVE = 5.0 # > 5% = positive
79
+ REVENUE_GROWTH_DECLINING = 0.0 # < 0% = weakness
80
+
81
+ # Net margin
82
+ NET_MARGIN_HIGH = 15.0 # > 15% = strength (high profitability)
83
+ NET_MARGIN_HEALTHY = 5.0 # > 5% = healthy
84
+ NET_MARGIN_THIN = 5.0 # < 5% = thin margins (weakness)
85
+ NET_MARGIN_UNPROFITABLE = 0.0 # < 0% = unprofitable (weakness)
86
+
87
+ # Operating margin
88
+ OPERATING_MARGIN_STRONG = 20.0 # > 20% = strong efficiency
89
+
90
+ # Debt to equity
91
+ DEBT_TO_EQUITY_HIGH = 2.0 # > 2.0 = threat (high leverage)
92
+ DEBT_TO_EQUITY_ELEVATED = 1.0 # > 1.0 = weakness (elevated debt)
93
+ DEBT_TO_EQUITY_LOW = 0.5 # < 0.5 = strength (low leverage)
94
+
95
+ # R&D as percentage of revenue
96
+ RD_HIGH_INVESTMENT = 10.0 # > 10% = opportunity (high R&D investment)
97
+
98
+ # =============================================================================
99
+ # API ENDPOINTS
100
+ # =============================================================================
101
+
102
+ # SEC EDGAR
103
+ SEC_BASE_URL = "https://data.sec.gov"
104
+ SEC_COMPANY_TICKERS_URL = "https://www.sec.gov/files/company_tickers.json"
105
+ SEC_SUBMISSIONS_URL = "https://data.sec.gov/submissions/CIK{cik}.json"
106
+ SEC_COMPANY_FACTS_URL = "https://data.sec.gov/api/xbrl/companyfacts/CIK{cik}.json"
107
+
108
+ # Required headers for SEC EDGAR
109
+ SEC_HEADERS = {
110
+ "User-Agent": "AI-Strategy-Copilot/1.0 (contact@example.com)",
111
+ "Accept": "application/json",
112
+ }
113
+
114
+ # Yahoo Finance headers
115
+ YAHOO_HEADERS = {
116
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
117
+ "Accept": "application/json",
118
+ "Accept-Language": "en-US,en;q=0.9",
119
+ }
120
+
121
+ # =============================================================================
122
+ # THREAD POOL (for blocking libraries like yfinance)
123
+ # =============================================================================
124
+
125
+ YFINANCE_THREAD_POOL_SIZE = 3
126
+ YFINANCE_SEMAPHORE_LIMIT = 3
127
+
128
+ # =============================================================================
129
+ # HTTP SERVER CONFIGURATION (for load-balanced deployment)
130
+ # =============================================================================
131
+
132
+ import os
133
+
134
+ # HTTP Server
135
+ HTTP_HOST = os.getenv("HTTP_HOST", "0.0.0.0")
136
+ HTTP_PORT = int(os.getenv("HTTP_PORT", "8001"))
137
+
138
+ # Load Balancer
139
+ NGINX_PORT = 8080
140
+ INSTANCE_PORTS = [8001, 8002, 8003]
141
+
142
+ # Instance identification
143
+ INSTANCE_ID = os.getenv("INSTANCE_ID", f"financials-default")
mcp-servers/{financials-basket → fundamentals-basket}/fetchers.py RENAMED
@@ -80,7 +80,8 @@ def get_latest_value(facts: dict, concept: str, unit: str = "USD") -> Optional[d
80
  "value": latest.get("val"),
81
  "end_date": latest.get("end"),
82
  "fiscal_year": latest.get("fy"),
83
- "form": latest.get("form")
 
84
  }
85
  return None
86
  except Exception as e:
@@ -131,8 +132,8 @@ async def fetch_financials_sec(ticker: str) -> dict:
131
 
132
  facts = data.get("facts", {})
133
 
134
- revenue = get_latest_value(facts, "Revenues") or \
135
- get_latest_value(facts, "RevenueFromContractWithCustomerExcludingAssessedTax") or \
136
  get_latest_value(facts, "SalesRevenueNet")
137
 
138
  net_income = get_latest_value(facts, "NetIncomeLoss")
@@ -171,7 +172,7 @@ async def fetch_financials_sec(ticker: str) -> dict:
171
  "total_liabilities": total_liabilities,
172
  "stockholders_equity": stockholders_equity,
173
  "source": "SEC EDGAR XBRL",
174
- "as_of": datetime.now().isoformat()
175
  }
176
  except Exception as e:
177
  logger.error(f"Financials error: {e}")
@@ -227,7 +228,7 @@ async def fetch_debt_metrics_sec(ticker: str) -> dict:
227
  "net_debt": {"value": net_debt} if net_debt else None,
228
  "debt_to_equity": debt_to_equity,
229
  "source": "SEC EDGAR XBRL",
230
- "as_of": datetime.now().isoformat()
231
  }
232
  except Exception as e:
233
  logger.error(f"Debt metrics error: {e}")
@@ -266,7 +267,7 @@ async def fetch_cash_flow_sec(ticker: str) -> dict:
266
  "free_cash_flow": {"value": fcf} if fcf else None,
267
  "rd_expense": rd_expense,
268
  "source": "SEC EDGAR XBRL",
269
- "as_of": datetime.now().isoformat()
270
  }
271
  except Exception as e:
272
  logger.error(f"Cash flow error: {e}")
@@ -347,7 +348,7 @@ def _fetch_yfinance_financials_sync(ticker: str) -> dict:
347
  "source": "Yahoo Finance (fallback)",
348
  "fallback": True,
349
  "fallback_reason": "CIK not found in SEC EDGAR",
350
- "as_of": datetime.now().isoformat()
351
  }
352
 
353
  except Exception as e:
@@ -537,5 +538,5 @@ async def get_sec_fundamentals_basket(ticker: str) -> dict:
537
  "cash_flow": cashflow,
538
  "swot_summary": swot_summary,
539
  "source": "SEC EDGAR",
540
- "generated_at": datetime.now().isoformat()
541
  }
 
80
  "value": latest.get("val"),
81
  "end_date": latest.get("end"),
82
  "fiscal_year": latest.get("fy"),
83
+ "form": latest.get("form"),
84
+ "filed": latest.get("filed"),
85
  }
86
  return None
87
  except Exception as e:
 
132
 
133
  facts = data.get("facts", {})
134
 
135
+ revenue = get_latest_value(facts, "RevenueFromContractWithCustomerExcludingAssessedTax") or \
136
+ get_latest_value(facts, "Revenues") or \
137
  get_latest_value(facts, "SalesRevenueNet")
138
 
139
  net_income = get_latest_value(facts, "NetIncomeLoss")
 
172
  "total_liabilities": total_liabilities,
173
  "stockholders_equity": stockholders_equity,
174
  "source": "SEC EDGAR XBRL",
175
+ "as_of": datetime.now().strftime("%Y-%m-%d")
176
  }
177
  except Exception as e:
178
  logger.error(f"Financials error: {e}")
 
228
  "net_debt": {"value": net_debt} if net_debt else None,
229
  "debt_to_equity": debt_to_equity,
230
  "source": "SEC EDGAR XBRL",
231
+ "as_of": datetime.now().strftime("%Y-%m-%d")
232
  }
233
  except Exception as e:
234
  logger.error(f"Debt metrics error: {e}")
 
267
  "free_cash_flow": {"value": fcf} if fcf else None,
268
  "rd_expense": rd_expense,
269
  "source": "SEC EDGAR XBRL",
270
+ "as_of": datetime.now().strftime("%Y-%m-%d")
271
  }
272
  except Exception as e:
273
  logger.error(f"Cash flow error: {e}")
 
348
  "source": "Yahoo Finance (fallback)",
349
  "fallback": True,
350
  "fallback_reason": "CIK not found in SEC EDGAR",
351
+ "as_of": datetime.now().strftime("%Y-%m-%d")
352
  }
353
 
354
  except Exception as e:
 
538
  "cash_flow": cashflow,
539
  "swot_summary": swot_summary,
540
  "source": "SEC EDGAR",
541
+ "generated_at": datetime.now().strftime("%Y-%m-%d")
542
  }
mcp-servers/fundamentals-basket/http_server.py ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Financials Basket HTTP Server
3
+
4
+ FastAPI wrapper around the microservices architecture for HTTP-based load balancing.
5
+ Runs as a persistent service instead of spawning new processes per request.
6
+
7
+ Usage:
8
+ uvicorn http_server:app --host 0.0.0.0 --port 8001
9
+
10
+ Multiple instances can run on different ports behind nginx load balancer.
11
+ """
12
+
13
+ import asyncio
14
+ import logging
15
+ import os
16
+ from datetime import datetime
17
+ from typing import Any, Dict, Optional
18
+
19
+ from fastapi import FastAPI, HTTPException, Request
20
+ from fastapi.middleware.cors import CORSMiddleware
21
+ from fastapi.responses import JSONResponse
22
+ from pydantic import BaseModel
23
+
24
+ from services.orchestrator import get_orchestrator_service
25
+ from config import TOOL_TIMEOUT
26
+
27
+ logging.basicConfig(level=logging.INFO)
28
+ logger = logging.getLogger("financials-http")
29
+
30
+ # Instance identification
31
+ INSTANCE_ID = os.getenv("INSTANCE_ID", f"financials-{os.getpid()}")
32
+
33
+ # FastAPI app
34
+ app = FastAPI(
35
+ title="Financials Basket HTTP API",
36
+ description="HTTP interface for SEC EDGAR and Yahoo Finance data with load balancing support",
37
+ version="1.0.0",
38
+ )
39
+
40
+ # CORS middleware
41
+ app.add_middleware(
42
+ CORSMiddleware,
43
+ allow_origins=["*"],
44
+ allow_credentials=True,
45
+ allow_methods=["*"],
46
+ allow_headers=["*"],
47
+ )
48
+
49
+ # Initialize orchestrator service (warm on startup)
50
+ orchestrator = get_orchestrator_service()
51
+
52
+
53
+ # =============================================================================
54
+ # REQUEST/RESPONSE MODELS
55
+ # =============================================================================
56
+
57
+ class ToolRequest(BaseModel):
58
+ """Request body for tool calls."""
59
+ ticker: Optional[str] = None
60
+ limit: Optional[int] = None
61
+
62
+
63
+ class HealthResponse(BaseModel):
64
+ """Health check response."""
65
+ status: str
66
+ instance: str
67
+ uptime_seconds: float
68
+ cache_stats: Dict[str, Any]
69
+
70
+
71
+ # Track startup time
72
+ _startup_time = datetime.now()
73
+
74
+
75
+ # =============================================================================
76
+ # ENDPOINTS
77
+ # =============================================================================
78
+
79
+ @app.get("/health", response_model=HealthResponse)
80
+ async def health_check():
81
+ """
82
+ Health check endpoint for nginx load balancer.
83
+
84
+ Returns instance status and cache statistics.
85
+ """
86
+ uptime = (datetime.now() - _startup_time).total_seconds()
87
+ status = orchestrator.get_status()
88
+
89
+ return HealthResponse(
90
+ status="ok",
91
+ instance=INSTANCE_ID,
92
+ uptime_seconds=uptime,
93
+ cache_stats=status.get("cache", {}),
94
+ )
95
+
96
+
97
+ @app.get("/status")
98
+ async def detailed_status():
99
+ """
100
+ Detailed status including circuit breaker and rate limiter state.
101
+ """
102
+ status = orchestrator.get_status()
103
+ return {
104
+ "instance": INSTANCE_ID,
105
+ "uptime_seconds": (datetime.now() - _startup_time).total_seconds(),
106
+ **status,
107
+ }
108
+
109
+
110
+ @app.post("/tools/{tool_name}")
111
+ async def call_tool(tool_name: str, request: ToolRequest):
112
+ """
113
+ Execute a tool by name.
114
+
115
+ Supported tools:
116
+ - get_company_info
117
+ - get_financials
118
+ - get_debt_metrics
119
+ - get_cash_flow
120
+ - get_sec_fundamentals
121
+ - get_all_sources_fundamentals
122
+ - get_material_events
123
+ - get_ownership_filings
124
+ - get_going_concern
125
+ """
126
+ logger.info(f"[{INSTANCE_ID}] Tool call: {tool_name} ticker={request.ticker}")
127
+
128
+ # Build arguments
129
+ arguments = {}
130
+ if request.ticker:
131
+ arguments["ticker"] = request.ticker.upper()
132
+ if request.limit is not None:
133
+ arguments["limit"] = request.limit
134
+
135
+ # Validate required arguments
136
+ tools_requiring_ticker = {
137
+ "get_company_info",
138
+ "get_financials",
139
+ "get_debt_metrics",
140
+ "get_cash_flow",
141
+ "get_sec_fundamentals",
142
+ "get_all_sources_fundamentals",
143
+ "get_material_events",
144
+ "get_ownership_filings",
145
+ "get_going_concern",
146
+ }
147
+
148
+ if tool_name in tools_requiring_ticker and not arguments.get("ticker"):
149
+ raise HTTPException(status_code=400, detail="ticker is required")
150
+
151
+ try:
152
+ # Execute via orchestrator with timeout
153
+ result = await asyncio.wait_for(
154
+ orchestrator.execute_tool(tool_name, arguments),
155
+ timeout=TOOL_TIMEOUT
156
+ )
157
+
158
+ # Add instance metadata
159
+ if isinstance(result, dict):
160
+ result["_instance"] = INSTANCE_ID
161
+
162
+ return result
163
+
164
+ except asyncio.TimeoutError:
165
+ logger.error(f"[{INSTANCE_ID}] Tool {tool_name} timed out")
166
+ raise HTTPException(
167
+ status_code=504,
168
+ detail=f"Tool execution timed out after {TOOL_TIMEOUT} seconds"
169
+ )
170
+ except Exception as e:
171
+ logger.error(f"[{INSTANCE_ID}] Tool {tool_name} error: {e}")
172
+ raise HTTPException(status_code=500, detail=str(e))
173
+
174
+
175
+ # =============================================================================
176
+ # CONVENIENCE ENDPOINTS (Direct tool access)
177
+ # =============================================================================
178
+
179
+ @app.get("/company/{ticker}")
180
+ async def get_company_info(ticker: str):
181
+ """Get company information for a ticker."""
182
+ return await call_tool("get_company_info", ToolRequest(ticker=ticker))
183
+
184
+
185
+ @app.get("/financials/{ticker}")
186
+ async def get_financials(ticker: str):
187
+ """Get financial metrics for a ticker."""
188
+ return await call_tool("get_financials", ToolRequest(ticker=ticker))
189
+
190
+
191
+ @app.get("/fundamentals/{ticker}")
192
+ async def get_fundamentals(ticker: str):
193
+ """Get full SEC fundamentals basket with SWOT."""
194
+ return await call_tool("get_sec_fundamentals", ToolRequest(ticker=ticker))
195
+
196
+
197
+ @app.get("/all-sources/{ticker}")
198
+ async def get_all_sources(ticker: str):
199
+ """Get financials from all sources (SEC EDGAR + Yahoo Finance)."""
200
+ return await call_tool("get_all_sources_fundamentals", ToolRequest(ticker=ticker))
201
+
202
+
203
+ # =============================================================================
204
+ # ERROR HANDLERS
205
+ # =============================================================================
206
+
207
+ @app.exception_handler(Exception)
208
+ async def global_exception_handler(request: Request, exc: Exception):
209
+ """Global exception handler for unhandled errors."""
210
+ logger.error(f"[{INSTANCE_ID}] Unhandled error: {exc}")
211
+ return JSONResponse(
212
+ status_code=500,
213
+ content={
214
+ "error": str(exc),
215
+ "instance": INSTANCE_ID,
216
+ "timestamp": datetime.now().strftime("%Y-%m-%d"),
217
+ }
218
+ )
219
+
220
+
221
+ # =============================================================================
222
+ # STARTUP/SHUTDOWN EVENTS
223
+ # =============================================================================
224
+
225
+ @app.on_event("startup")
226
+ async def startup_event():
227
+ """Warm up services on startup."""
228
+ logger.info(f"[{INSTANCE_ID}] Starting HTTP server...")
229
+ logger.info(f"[{INSTANCE_ID}] Orchestrator initialized: {orchestrator}")
230
+ logger.info(f"[{INSTANCE_ID}] Ready to accept requests")
231
+
232
+
233
+ @app.on_event("shutdown")
234
+ async def shutdown_event():
235
+ """Clean up on shutdown."""
236
+ logger.info(f"[{INSTANCE_ID}] Shutting down...")
237
+
238
+
239
+ # =============================================================================
240
+ # MAIN
241
+ # =============================================================================
242
+
243
+ if __name__ == "__main__":
244
+ import uvicorn
245
+
246
+ port = int(os.getenv("HTTP_PORT", "8001"))
247
+ host = os.getenv("HTTP_HOST", "0.0.0.0")
248
+
249
+ uvicorn.run(app, host=host, port=port)
mcp-servers/{financials-basket → fundamentals-basket}/mcp_sec_edgar.md RENAMED
File without changes
mcp-servers/fundamentals-basket/models/__init__.py ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Models package for Financials-Basket MCP Server
3
+
4
+ Contains data schemas and error definitions.
5
+ """
6
+
7
+ from .schemas import (
8
+ TemporalMetric,
9
+ ParsedFinancials,
10
+ DebtMetrics,
11
+ CashFlowMetrics,
12
+ SwotSummary,
13
+ FinancialsBasket,
14
+ FetchResult,
15
+ )
16
+ from .errors import (
17
+ ServiceError,
18
+ ErrorCodes,
19
+ CIKNotFoundError,
20
+ APITimeoutError,
21
+ CircuitOpenError,
22
+ RateLimitError,
23
+ )
24
+
25
+ __all__ = [
26
+ # Schemas
27
+ "TemporalMetric",
28
+ "ParsedFinancials",
29
+ "DebtMetrics",
30
+ "CashFlowMetrics",
31
+ "SwotSummary",
32
+ "FinancialsBasket",
33
+ "FetchResult",
34
+ # Errors
35
+ "ServiceError",
36
+ "ErrorCodes",
37
+ "CIKNotFoundError",
38
+ "APITimeoutError",
39
+ "CircuitOpenError",
40
+ "RateLimitError",
41
+ ]
mcp-servers/fundamentals-basket/models/errors.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Error definitions for Financials-Basket MCP Server
3
+
4
+ Defines error codes and custom exceptions for inter-service communication.
5
+ """
6
+
7
+ from dataclasses import dataclass
8
+ from typing import Optional
9
+
10
+
11
+ class ErrorCodes:
12
+ """Standardized error codes for service communication."""
13
+
14
+ # Fetcher errors
15
+ CIK_NOT_FOUND = "CIK_NOT_FOUND"
16
+ SEC_TIMEOUT = "SEC_TIMEOUT"
17
+ SEC_RATE_LIMIT = "SEC_RATE_LIMIT"
18
+ SEC_API_ERROR = "SEC_API_ERROR"
19
+
20
+ YAHOO_TIMEOUT = "YAHOO_TIMEOUT"
21
+ YAHOO_NO_DATA = "YAHOO_NO_DATA"
22
+ YAHOO_API_ERROR = "YAHOO_API_ERROR"
23
+
24
+ # Circuit breaker errors
25
+ CIRCUIT_OPEN = "CIRCUIT_OPEN"
26
+
27
+ # Parser errors
28
+ INVALID_FACTS = "INVALID_FACTS"
29
+ CONCEPT_NOT_FOUND = "CONCEPT_NOT_FOUND"
30
+ PARSE_ERROR = "PARSE_ERROR"
31
+
32
+ # General errors
33
+ TIMEOUT = "TIMEOUT"
34
+ UNKNOWN_ERROR = "UNKNOWN_ERROR"
35
+
36
+
37
+ @dataclass
38
+ class ServiceError:
39
+ """
40
+ Structured error for service communication.
41
+
42
+ Includes metadata for error handling and retry decisions.
43
+ """
44
+ code: str
45
+ message: str
46
+ source: str
47
+ recoverable: bool = True
48
+ retry_after: Optional[float] = None # seconds
49
+
50
+ def to_dict(self) -> dict:
51
+ """Convert to dictionary for JSON serialization."""
52
+ result = {
53
+ "error": self.code,
54
+ "message": self.message,
55
+ "source": self.source,
56
+ "recoverable": self.recoverable,
57
+ }
58
+ if self.retry_after:
59
+ result["retry_after"] = self.retry_after
60
+ return result
61
+
62
+
63
+ class FinancialsServiceError(Exception):
64
+ """Base exception for financials service errors."""
65
+
66
+ def __init__(self, code: str, message: str, source: str = "Unknown"):
67
+ self.code = code
68
+ self.message = message
69
+ self.source = source
70
+ super().__init__(f"[{code}] {message}")
71
+
72
+ def to_service_error(self, recoverable: bool = True) -> ServiceError:
73
+ """Convert to ServiceError for API response."""
74
+ return ServiceError(
75
+ code=self.code,
76
+ message=self.message,
77
+ source=self.source,
78
+ recoverable=recoverable,
79
+ )
80
+
81
+
82
+ class CIKNotFoundError(FinancialsServiceError):
83
+ """Raised when CIK cannot be found for a ticker."""
84
+
85
+ def __init__(self, ticker: str):
86
+ super().__init__(
87
+ code=ErrorCodes.CIK_NOT_FOUND,
88
+ message=f"Could not find CIK for ticker {ticker}",
89
+ source="SEC EDGAR",
90
+ )
91
+ self.ticker = ticker
92
+
93
+
94
+ class APITimeoutError(FinancialsServiceError):
95
+ """Raised when an API call times out."""
96
+
97
+ def __init__(self, source: str, timeout: float):
98
+ super().__init__(
99
+ code=ErrorCodes.TIMEOUT,
100
+ message=f"API call timed out after {timeout}s",
101
+ source=source,
102
+ )
103
+ self.timeout = timeout
104
+
105
+
106
+ class CircuitOpenError(FinancialsServiceError):
107
+ """Raised when circuit breaker is open."""
108
+
109
+ def __init__(self, source: str, retry_after: float):
110
+ super().__init__(
111
+ code=ErrorCodes.CIRCUIT_OPEN,
112
+ message=f"Circuit breaker open for {source}",
113
+ source=source,
114
+ )
115
+ self.retry_after = retry_after
116
+
117
+ def to_service_error(self, recoverable: bool = True) -> ServiceError:
118
+ """Convert to ServiceError with retry_after."""
119
+ error = super().to_service_error(recoverable)
120
+ error.retry_after = self.retry_after
121
+ return error
122
+
123
+
124
+ class RateLimitError(FinancialsServiceError):
125
+ """Raised when rate limit is exceeded."""
126
+
127
+ def __init__(self, source: str, retry_after: float):
128
+ super().__init__(
129
+ code=ErrorCodes.SEC_RATE_LIMIT if "SEC" in source else ErrorCodes.TIMEOUT,
130
+ message=f"Rate limit exceeded for {source}",
131
+ source=source,
132
+ )
133
+ self.retry_after = retry_after
134
+
135
+ def to_service_error(self, recoverable: bool = True) -> ServiceError:
136
+ """Convert to ServiceError with retry_after."""
137
+ error = super().to_service_error(recoverable)
138
+ error.retry_after = self.retry_after
139
+ return error
140
+
141
+
142
+ class ParseError(FinancialsServiceError):
143
+ """Raised when parsing fails."""
144
+
145
+ def __init__(self, message: str, source: str = "Parser"):
146
+ super().__init__(
147
+ code=ErrorCodes.PARSE_ERROR,
148
+ message=message,
149
+ source=source,
150
+ )
mcp-servers/fundamentals-basket/models/schemas.py ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Data schemas for Financials-Basket MCP Server
3
+
4
+ Defines the data contracts between services using dataclasses.
5
+ All temporal metadata (end_date, fiscal_year, form) is preserved.
6
+ """
7
+
8
+ from dataclasses import dataclass, field
9
+ from datetime import datetime
10
+ from typing import Optional, List, Dict, Any
11
+
12
+
13
+ @dataclass
14
+ class TemporalMetric:
15
+ """
16
+ A metric value with temporal metadata from SEC filings.
17
+
18
+ Preserves audit period context for calculated ratios.
19
+ """
20
+ value: Optional[float] = None
21
+ data_type: Optional[str] = None # "FY", "Q", "TTM", "Point-in-time", "Real-time"
22
+ end_date: Optional[str] = None # YYYY-MM-DD (period end date / "as of" date)
23
+ filed: Optional[str] = None # YYYY-MM-DD (SEC filing date / updated date)
24
+ fiscal_year: Optional[int] = None
25
+ form: Optional[str] = None # "10-K", "10-Q", etc.
26
+
27
+ def to_dict(self) -> dict:
28
+ """Convert to dictionary, excluding None values."""
29
+ result = {}
30
+ if self.value is not None:
31
+ result["value"] = self.value
32
+ if self.data_type:
33
+ result["data_type"] = self.data_type
34
+ if self.end_date:
35
+ result["end_date"] = self.end_date
36
+ if self.filed:
37
+ result["filed"] = self.filed
38
+ if self.fiscal_year:
39
+ result["fiscal_year"] = self.fiscal_year
40
+ if self.form:
41
+ result["form"] = self.form
42
+ return result if result else {"value": None}
43
+
44
+ @classmethod
45
+ def from_dict(cls, data: Optional[dict]) -> "TemporalMetric":
46
+ """Create from dictionary."""
47
+ if not data:
48
+ return cls()
49
+ if isinstance(data, (int, float)):
50
+ return cls(value=float(data))
51
+ return cls(
52
+ value=data.get("value"),
53
+ data_type=data.get("data_type"),
54
+ end_date=data.get("end_date"),
55
+ filed=data.get("filed"),
56
+ fiscal_year=data.get("fiscal_year"),
57
+ form=data.get("form"),
58
+ )
59
+
60
+
61
+ @dataclass
62
+ class ParsedFinancials:
63
+ """Parsed financial metrics from SEC EDGAR or Yahoo Finance."""
64
+ ticker: str
65
+ revenue: Optional[TemporalMetric] = None
66
+ net_income: Optional[TemporalMetric] = None
67
+ gross_profit: Optional[TemporalMetric] = None
68
+ operating_income: Optional[TemporalMetric] = None
69
+ gross_margin_pct: Optional[TemporalMetric] = None
70
+ operating_margin_pct: Optional[TemporalMetric] = None
71
+ net_margin_pct: Optional[TemporalMetric] = None
72
+ revenue_growth_3yr: Optional[TemporalMetric] = None
73
+ total_assets: Optional[TemporalMetric] = None
74
+ total_liabilities: Optional[TemporalMetric] = None
75
+ stockholders_equity: Optional[TemporalMetric] = None
76
+ source: str = "Unknown"
77
+ as_of: str = field(default_factory=lambda: datetime.now().strftime("%Y-%m-%d"))
78
+
79
+ def to_dict(self) -> dict:
80
+ """Convert to dictionary for JSON serialization."""
81
+ result = {
82
+ "ticker": self.ticker,
83
+ "source": self.source,
84
+ "as_of": self.as_of,
85
+ }
86
+
87
+ # Add temporal metrics
88
+ for field_name in [
89
+ "revenue", "net_income", "gross_profit", "operating_income",
90
+ "gross_margin_pct", "operating_margin_pct", "net_margin_pct",
91
+ "revenue_growth_3yr", "total_assets", "total_liabilities", "stockholders_equity"
92
+ ]:
93
+ value = getattr(self, field_name)
94
+ if value:
95
+ result[field_name] = value.to_dict() if isinstance(value, TemporalMetric) else value
96
+
97
+ return result
98
+
99
+
100
+ @dataclass
101
+ class DebtMetrics:
102
+ """Debt and leverage metrics."""
103
+ ticker: str
104
+ long_term_debt: Optional[TemporalMetric] = None
105
+ short_term_debt: Optional[TemporalMetric] = None
106
+ total_debt: Optional[TemporalMetric] = None
107
+ cash: Optional[TemporalMetric] = None
108
+ net_debt: Optional[TemporalMetric] = None
109
+ debt_to_equity: Optional[TemporalMetric] = None
110
+ source: str = "Unknown"
111
+ as_of: str = field(default_factory=lambda: datetime.now().strftime("%Y-%m-%d"))
112
+
113
+ def to_dict(self) -> dict:
114
+ """Convert to dictionary for JSON serialization."""
115
+ result = {
116
+ "ticker": self.ticker,
117
+ "source": self.source,
118
+ "as_of": self.as_of,
119
+ }
120
+
121
+ for field_name in [
122
+ "long_term_debt", "short_term_debt", "total_debt",
123
+ "cash", "net_debt", "debt_to_equity"
124
+ ]:
125
+ value = getattr(self, field_name)
126
+ if value:
127
+ result[field_name] = value.to_dict() if isinstance(value, TemporalMetric) else value
128
+
129
+ return result
130
+
131
+
132
+ @dataclass
133
+ class CashFlowMetrics:
134
+ """Cash flow metrics."""
135
+ ticker: str
136
+ operating_cash_flow: Optional[TemporalMetric] = None
137
+ capital_expenditure: Optional[TemporalMetric] = None
138
+ free_cash_flow: Optional[TemporalMetric] = None
139
+ rd_expense: Optional[TemporalMetric] = None
140
+ source: str = "Unknown"
141
+ as_of: str = field(default_factory=lambda: datetime.now().strftime("%Y-%m-%d"))
142
+
143
+ def to_dict(self) -> dict:
144
+ """Convert to dictionary for JSON serialization."""
145
+ result = {
146
+ "ticker": self.ticker,
147
+ "source": self.source,
148
+ "as_of": self.as_of,
149
+ }
150
+
151
+ for field_name in [
152
+ "operating_cash_flow", "capital_expenditure",
153
+ "free_cash_flow", "rd_expense"
154
+ ]:
155
+ value = getattr(self, field_name)
156
+ if value:
157
+ result[field_name] = value.to_dict() if isinstance(value, TemporalMetric) else value
158
+
159
+ return result
160
+
161
+
162
+ @dataclass
163
+ class SwotSummary:
164
+ """SWOT analysis summary generated from financial metrics."""
165
+ strengths: List[str] = field(default_factory=list)
166
+ weaknesses: List[str] = field(default_factory=list)
167
+ opportunities: List[str] = field(default_factory=list)
168
+ threats: List[str] = field(default_factory=list)
169
+ note: Optional[str] = None
170
+
171
+ def to_dict(self) -> dict:
172
+ """Convert to dictionary for JSON serialization."""
173
+ result = {
174
+ "strengths": self.strengths,
175
+ "weaknesses": self.weaknesses,
176
+ "opportunities": self.opportunities,
177
+ "threats": self.threats,
178
+ }
179
+ if self.note:
180
+ result["note"] = self.note
181
+ return result
182
+
183
+
184
+ @dataclass
185
+ class FinancialsBasket:
186
+ """Complete financials basket response."""
187
+ ticker: str
188
+ company: Dict[str, Any] = field(default_factory=dict)
189
+ financials: Optional[ParsedFinancials] = None
190
+ debt: Optional[DebtMetrics] = None
191
+ cash_flow: Optional[CashFlowMetrics] = None
192
+ swot_summary: Optional[SwotSummary] = None
193
+ source: str = "Unknown"
194
+ fallback: bool = False
195
+ fallback_reason: Optional[str] = None
196
+ generated_at: str = field(default_factory=lambda: datetime.now().strftime("%Y-%m-%d"))
197
+
198
+ def to_dict(self) -> dict:
199
+ """Convert to dictionary for JSON serialization."""
200
+ result = {
201
+ "ticker": self.ticker,
202
+ "company": self.company,
203
+ "source": self.source,
204
+ "generated_at": self.generated_at,
205
+ }
206
+
207
+ if self.financials:
208
+ result["financials"] = self.financials.to_dict()
209
+ if self.debt:
210
+ result["debt"] = self.debt.to_dict()
211
+ if self.cash_flow:
212
+ result["cash_flow"] = self.cash_flow.to_dict()
213
+ if self.swot_summary:
214
+ result["swot_summary"] = self.swot_summary.to_dict()
215
+ if self.fallback:
216
+ result["fallback"] = self.fallback
217
+ if self.fallback_reason:
218
+ result["fallback_reason"] = self.fallback_reason
219
+
220
+ return result
221
+
222
+
223
+ @dataclass
224
+ class FetchResult:
225
+ """Result from a fetch operation."""
226
+ success: bool
227
+ data: Optional[Dict[str, Any]] = None
228
+ error: Optional[str] = None
229
+ source: str = "Unknown"
230
+ latency_ms: float = 0.0
231
+ retries_used: int = 0
232
+ is_fallback: bool = False
233
+
234
+ def to_dict(self) -> dict:
235
+ """Convert to dictionary for JSON serialization."""
236
+ result = {
237
+ "success": self.success,
238
+ "source": self.source,
239
+ "latency_ms": self.latency_ms,
240
+ "retries_used": self.retries_used,
241
+ }
242
+ if self.data:
243
+ result["data"] = self.data
244
+ if self.error:
245
+ result["error"] = self.error
246
+ if self.is_fallback:
247
+ result["is_fallback"] = self.is_fallback
248
+ return result
mcp-servers/fundamentals-basket/nginx.conf ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Financials Basket Load Balancer Configuration
2
+ #
3
+ # Distributes requests across multiple HTTP server instances using least_conn algorithm.
4
+ # Run with: nginx -c /path/to/nginx.conf
5
+ #
6
+ # Instances should be started on ports 8001, 8002, 8003 before starting nginx.
7
+
8
+ # Run as daemon (set to 'off' for foreground/debugging)
9
+ daemon off;
10
+
11
+ # Worker processes (auto = number of CPU cores)
12
+ worker_processes auto;
13
+
14
+ # Error log location
15
+ error_log /tmp/financials-nginx-error.log warn;
16
+
17
+ # PID file
18
+ pid /tmp/financials-nginx.pid;
19
+
20
+ events {
21
+ # Maximum simultaneous connections per worker
22
+ worker_connections 1024;
23
+
24
+ # Use epoll for Linux
25
+ use epoll;
26
+
27
+ # Accept multiple connections at once
28
+ multi_accept on;
29
+ }
30
+
31
+ http {
32
+ # Basic settings
33
+ sendfile on;
34
+ tcp_nopush on;
35
+ tcp_nodelay on;
36
+ keepalive_timeout 65;
37
+ types_hash_max_size 2048;
38
+
39
+ # Logging
40
+ access_log /tmp/financials-nginx-access.log;
41
+
42
+ # Upstream cluster definition
43
+ upstream financials_cluster {
44
+ # Use least connections algorithm for better load distribution
45
+ # (routes to the server with fewest active connections)
46
+ least_conn;
47
+
48
+ # Server instances
49
+ server 127.0.0.1:8001 weight=1 max_fails=3 fail_timeout=30s;
50
+ server 127.0.0.1:8002 weight=1 max_fails=3 fail_timeout=30s;
51
+ server 127.0.0.1:8003 weight=1 max_fails=3 fail_timeout=30s;
52
+
53
+ # Keep connections alive for reuse
54
+ keepalive 32;
55
+ }
56
+
57
+ server {
58
+ # Listen on port 8080
59
+ listen 8080;
60
+ server_name localhost;
61
+
62
+ # Health check endpoint
63
+ location /health {
64
+ proxy_pass http://financials_cluster/health;
65
+ proxy_http_version 1.1;
66
+ proxy_set_header Connection "";
67
+ proxy_connect_timeout 2s;
68
+ proxy_read_timeout 5s;
69
+ }
70
+
71
+ # Status endpoint
72
+ location /status {
73
+ proxy_pass http://financials_cluster/status;
74
+ proxy_http_version 1.1;
75
+ proxy_set_header Connection "";
76
+ proxy_connect_timeout 2s;
77
+ proxy_read_timeout 5s;
78
+ }
79
+
80
+ # Tool endpoints (main API)
81
+ location /tools/ {
82
+ proxy_pass http://financials_cluster;
83
+ proxy_http_version 1.1;
84
+ proxy_set_header Host $host;
85
+ proxy_set_header X-Real-IP $remote_addr;
86
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
87
+ proxy_set_header Connection "";
88
+
89
+ # Timeouts for tool execution
90
+ proxy_connect_timeout 5s;
91
+ proxy_send_timeout 60s;
92
+ proxy_read_timeout 60s;
93
+
94
+ # Buffer settings
95
+ proxy_buffering on;
96
+ proxy_buffer_size 4k;
97
+ proxy_buffers 8 4k;
98
+ }
99
+
100
+ # Convenience endpoints
101
+ location /company/ {
102
+ proxy_pass http://financials_cluster;
103
+ proxy_http_version 1.1;
104
+ proxy_set_header Connection "";
105
+ proxy_connect_timeout 5s;
106
+ proxy_read_timeout 30s;
107
+ }
108
+
109
+ location /financials/ {
110
+ proxy_pass http://financials_cluster;
111
+ proxy_http_version 1.1;
112
+ proxy_set_header Connection "";
113
+ proxy_connect_timeout 5s;
114
+ proxy_read_timeout 45s;
115
+ }
116
+
117
+ location /fundamentals/ {
118
+ proxy_pass http://financials_cluster;
119
+ proxy_http_version 1.1;
120
+ proxy_set_header Connection "";
121
+ proxy_connect_timeout 5s;
122
+ proxy_read_timeout 60s;
123
+ }
124
+
125
+ location /all-sources/ {
126
+ proxy_pass http://financials_cluster;
127
+ proxy_http_version 1.1;
128
+ proxy_set_header Connection "";
129
+ proxy_connect_timeout 5s;
130
+ proxy_read_timeout 60s;
131
+ }
132
+
133
+ # Error handling
134
+ error_page 502 503 504 /50x.json;
135
+ location = /50x.json {
136
+ default_type application/json;
137
+ return 503 '{"error": "Service temporarily unavailable", "retry_after": 5}';
138
+ }
139
+ }
140
+ }
mcp-servers/{financials-basket → fundamentals-basket}/requirements.txt RENAMED
File without changes
mcp-servers/fundamentals-basket/server.py ADDED
@@ -0,0 +1,570 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Fundamentals Basket MCP Server
3
+
4
+ Thin facade that delegates to microservices:
5
+ - OrchestratorService: Coordinates fetcher, parser, cache
6
+ - FetcherService: HTTP calls with retry, rate limiting, circuit breaker
7
+ - ParserService: XBRL parsing, ratio calculations
8
+ - CacheService: CIK and facts caching with TTL
9
+
10
+ This file only handles:
11
+ - MCP protocol (tool definitions, call_tool decorator)
12
+ - Response formatting
13
+ - Legacy tools not yet migrated (material_events, ownership_filings, going_concern)
14
+ """
15
+
16
+ import asyncio
17
+ import json
18
+ import logging
19
+ import os
20
+ from datetime import datetime
21
+ from pathlib import Path
22
+ from typing import Optional
23
+
24
+ # Load environment variables
25
+ from dotenv import load_dotenv
26
+
27
+ env_paths = [
28
+ Path.home() / ".env",
29
+ Path(__file__).parent / ".env",
30
+ Path(__file__).parent.parent.parent / ".env",
31
+ ]
32
+ for env_path in env_paths:
33
+ if env_path.exists():
34
+ load_dotenv(env_path)
35
+ break
36
+
37
+ # MCP SDK
38
+ from mcp.server import Server
39
+ from mcp.server.stdio import stdio_server
40
+ from mcp.types import Tool, TextContent
41
+
42
+ # Services
43
+ from services.orchestrator import get_orchestrator_service
44
+ from services.cache import get_cache_service
45
+ from services.fetcher import get_fetcher_service
46
+ from config import TOOL_TIMEOUT
47
+
48
+ logging.basicConfig(level=logging.INFO)
49
+ logger = logging.getLogger("fundamentals-basket")
50
+
51
+ # Initialize MCP server
52
+ server = Server("fundamentals-basket")
53
+
54
+ # Get orchestrator service
55
+ orchestrator = get_orchestrator_service()
56
+
57
+
58
+ # =============================================================================
59
+ # LEGACY TOOLS (Not yet migrated to microservices)
60
+ # =============================================================================
61
+
62
+ async def fetch_material_events(ticker: str, limit: int = 20) -> dict:
63
+ """
64
+ Fetch recent 8-K material events (legacy implementation).
65
+
66
+ Parses 8-K filings for material events like:
67
+ - Item 1.02: Termination of material agreement
68
+ - Item 1.03: Bankruptcy or receivership
69
+ - Item 2.04: Asset impairment
70
+ - Item 5.02: Executive changes
71
+ """
72
+ cache = get_cache_service()
73
+ fetcher = get_fetcher_service()
74
+
75
+ cik = await cache.get_cik(ticker.upper())
76
+ if not cik:
77
+ cik = await fetcher.fetch_cik(ticker)
78
+ if cik:
79
+ await cache.set_cik(ticker.upper(), cik)
80
+
81
+ if not cik:
82
+ return {"ticker": ticker.upper(), "error": "CIK not found", "events": []}
83
+
84
+ try:
85
+ submissions = await fetcher.fetch_company_submissions(cik)
86
+ recent = submissions.get("filings", {}).get("recent", {})
87
+
88
+ forms = recent.get("form", [])
89
+ dates = recent.get("filingDate", [])
90
+ accessions = recent.get("accessionNumber", [])
91
+ items_list = recent.get("items", [])
92
+
93
+ events = []
94
+ eight_k_indices = [i for i, f in enumerate(forms) if f == "8-K"][:limit]
95
+
96
+ # High-priority item codes
97
+ high_priority_items = {
98
+ "1.02": "Termination of material agreement",
99
+ "1.03": "Bankruptcy or receivership",
100
+ "2.04": "Asset impairment",
101
+ "2.05": "Delisting",
102
+ "2.06": "Material impairment",
103
+ "3.01": "Notice of delisting",
104
+ "4.01": "Changes in auditors",
105
+ "4.02": "Non-reliance on financial statements",
106
+ "5.02": "Executive changes",
107
+ }
108
+
109
+ for idx in eight_k_indices:
110
+ items = items_list[idx] if idx < len(items_list) else ""
111
+ item_codes = [i.strip() for i in items.split(",") if i.strip()]
112
+
113
+ is_high_priority = any(
114
+ code in high_priority_items for code in item_codes
115
+ )
116
+
117
+ events.append({
118
+ "form": "8-K",
119
+ "filing_date": dates[idx] if idx < len(dates) else None,
120
+ "accession": accessions[idx] if idx < len(accessions) else None,
121
+ "items": item_codes,
122
+ "high_priority": is_high_priority,
123
+ "descriptions": [
124
+ high_priority_items.get(code, f"Item {code}")
125
+ for code in item_codes
126
+ if code in high_priority_items
127
+ ],
128
+ })
129
+
130
+ high_priority_count = sum(1 for e in events if e.get("high_priority"))
131
+
132
+ return {
133
+ "ticker": ticker.upper(),
134
+ "total_8k_filings": len(eight_k_indices),
135
+ "high_priority_events": high_priority_count,
136
+ "events": events,
137
+ "swot_implications": {
138
+ "threats": [
139
+ f"Found {high_priority_count} high-priority material events"
140
+ ] if high_priority_count > 0 else [],
141
+ },
142
+ "source": "SEC EDGAR",
143
+ }
144
+
145
+ except Exception as e:
146
+ logger.error(f"Material events fetch error for {ticker}: {e}")
147
+ return {"ticker": ticker.upper(), "error": str(e), "events": []}
148
+
149
+
150
+ async def fetch_ownership_filings(ticker: str, limit: int = 20) -> dict:
151
+ """
152
+ Fetch ownership filings (legacy implementation).
153
+
154
+ Includes:
155
+ - 13D/13G: 5%+ ownership changes
156
+ - Form 4: Insider transactions
157
+ """
158
+ cache = get_cache_service()
159
+ fetcher = get_fetcher_service()
160
+
161
+ cik = await cache.get_cik(ticker.upper())
162
+ if not cik:
163
+ cik = await fetcher.fetch_cik(ticker)
164
+ if cik:
165
+ await cache.set_cik(ticker.upper(), cik)
166
+
167
+ if not cik:
168
+ return {"ticker": ticker.upper(), "error": "CIK not found"}
169
+
170
+ try:
171
+ submissions = await fetcher.fetch_company_submissions(cik)
172
+ recent = submissions.get("filings", {}).get("recent", {})
173
+
174
+ forms = recent.get("form", [])
175
+ dates = recent.get("filingDate", [])
176
+ accessions = recent.get("accessionNumber", [])
177
+
178
+ # 13D/13G filings (5%+ owners)
179
+ thirteen_d_forms = ["SC 13D", "SC 13D/A", "SC 13G", "SC 13G/A"]
180
+ thirteen_d_indices = [
181
+ i for i, f in enumerate(forms) if f in thirteen_d_forms
182
+ ][:limit]
183
+
184
+ ownership_filings = []
185
+ for idx in thirteen_d_indices:
186
+ ownership_filings.append({
187
+ "form": forms[idx],
188
+ "filing_date": dates[idx] if idx < len(dates) else None,
189
+ "accession": accessions[idx] if idx < len(accessions) else None,
190
+ })
191
+
192
+ # Form 4 filings (insider trades)
193
+ form4_indices = [i for i, f in enumerate(forms) if f == "4"][:limit]
194
+ insider_filings = []
195
+ for idx in form4_indices:
196
+ insider_filings.append({
197
+ "form": "4",
198
+ "filing_date": dates[idx] if idx < len(dates) else None,
199
+ "accession": accessions[idx] if idx < len(accessions) else None,
200
+ })
201
+
202
+ return {
203
+ "ticker": ticker.upper(),
204
+ "ownership_5pct_filings": {
205
+ "count": len(ownership_filings),
206
+ "filings": ownership_filings,
207
+ },
208
+ "insider_transactions": {
209
+ "count": len(insider_filings),
210
+ "filings": insider_filings,
211
+ },
212
+ "swot_implications": {
213
+ "opportunities": [
214
+ f"Active institutional interest: {len(ownership_filings)} 13D/13G filings"
215
+ ] if ownership_filings else [],
216
+ },
217
+ "source": "SEC EDGAR",
218
+ }
219
+
220
+ except Exception as e:
221
+ logger.error(f"Ownership filings fetch error for {ticker}: {e}")
222
+ return {"ticker": ticker.upper(), "error": str(e)}
223
+
224
+
225
+ async def fetch_going_concern(ticker: str) -> dict:
226
+ """
227
+ Search 10-K for going concern warnings (legacy implementation).
228
+
229
+ Looks for keywords indicating substantial doubt about continuing operations.
230
+ """
231
+ cache = get_cache_service()
232
+ fetcher = get_fetcher_service()
233
+
234
+ cik = await cache.get_cik(ticker.upper())
235
+ if not cik:
236
+ cik = await fetcher.fetch_cik(ticker)
237
+ if cik:
238
+ await cache.set_cik(ticker.upper(), cik)
239
+
240
+ if not cik:
241
+ return {"ticker": ticker.upper(), "error": "CIK not found"}
242
+
243
+ try:
244
+ submissions = await fetcher.fetch_company_submissions(cik)
245
+ recent = submissions.get("filings", {}).get("recent", {})
246
+
247
+ forms = recent.get("form", [])
248
+ accessions = recent.get("accessionNumber", [])
249
+ primary_docs = recent.get("primaryDocument", [])
250
+
251
+ # Find latest 10-K
252
+ ten_k_idx = None
253
+ for i, f in enumerate(forms):
254
+ if f in ["10-K", "10-K/A"]:
255
+ ten_k_idx = i
256
+ break
257
+
258
+ if ten_k_idx is None:
259
+ return {
260
+ "ticker": ticker.upper(),
261
+ "warning": "No 10-K filing found",
262
+ "going_concern_found": False,
263
+ }
264
+
265
+ # Construct document URL
266
+ accession = accessions[ten_k_idx].replace("-", "")
267
+ doc = primary_docs[ten_k_idx]
268
+ url = f"https://www.sec.gov/Archives/edgar/data/{cik.lstrip('0')}/{accession}/{doc}"
269
+
270
+ # Fetch document
271
+ doc_text = await fetcher.fetch_10k_document(url)
272
+
273
+ # Search for going concern keywords
274
+ keywords = [
275
+ "going concern",
276
+ "substantial doubt",
277
+ "ability to continue",
278
+ "liquidity concerns",
279
+ "material uncertainty",
280
+ ]
281
+
282
+ matches = []
283
+ doc_lower = doc_text.lower()
284
+ for keyword in keywords:
285
+ if keyword in doc_lower:
286
+ matches.append(keyword)
287
+
288
+ # Determine risk level
289
+ if len(matches) >= 3:
290
+ risk_level = "high"
291
+ elif len(matches) >= 1:
292
+ risk_level = "medium"
293
+ else:
294
+ risk_level = "none"
295
+
296
+ return {
297
+ "ticker": ticker.upper(),
298
+ "going_concern_found": len(matches) > 0,
299
+ "risk_level": risk_level,
300
+ "keywords_found": matches,
301
+ "filing_url": url,
302
+ "swot_implications": {
303
+ "threats": [
304
+ f"Going concern warning: {', '.join(matches)}"
305
+ ] if matches else [],
306
+ },
307
+ "source": "SEC EDGAR 10-K",
308
+ }
309
+
310
+ except Exception as e:
311
+ logger.error(f"Going concern search error for {ticker}: {e}")
312
+ return {"ticker": ticker.upper(), "error": str(e)}
313
+
314
+
315
+ # =============================================================================
316
+ # MCP TOOL DEFINITIONS
317
+ # =============================================================================
318
+
319
+ @server.list_tools()
320
+ async def list_tools():
321
+ """List available SEC EDGAR tools."""
322
+ return [
323
+ Tool(
324
+ name="get_company_info",
325
+ description="Get basic company information from SEC EDGAR (name, industry, CIK).",
326
+ inputSchema={
327
+ "type": "object",
328
+ "properties": {
329
+ "ticker": {
330
+ "type": "string",
331
+ "description": "Stock ticker symbol (e.g., AAPL, TSLA)"
332
+ }
333
+ },
334
+ "required": ["ticker"]
335
+ }
336
+ ),
337
+ Tool(
338
+ name="get_financials",
339
+ description="Get key financial metrics from SEC filings (revenue, income, margins).",
340
+ inputSchema={
341
+ "type": "object",
342
+ "properties": {
343
+ "ticker": {
344
+ "type": "string",
345
+ "description": "Stock ticker symbol"
346
+ }
347
+ },
348
+ "required": ["ticker"]
349
+ }
350
+ ),
351
+ Tool(
352
+ name="get_debt_metrics",
353
+ description="Get debt and leverage metrics (debt levels, debt-to-equity ratio).",
354
+ inputSchema={
355
+ "type": "object",
356
+ "properties": {
357
+ "ticker": {
358
+ "type": "string",
359
+ "description": "Stock ticker symbol"
360
+ }
361
+ },
362
+ "required": ["ticker"]
363
+ }
364
+ ),
365
+ Tool(
366
+ name="get_cash_flow",
367
+ description="Get cash flow metrics (operating CF, CapEx, free cash flow, R&D).",
368
+ inputSchema={
369
+ "type": "object",
370
+ "properties": {
371
+ "ticker": {
372
+ "type": "string",
373
+ "description": "Stock ticker symbol"
374
+ }
375
+ },
376
+ "required": ["ticker"]
377
+ }
378
+ ),
379
+ Tool(
380
+ name="get_sec_fundamentals",
381
+ description="Get complete SEC fundamentals basket with aggregated SWOT summary.",
382
+ inputSchema={
383
+ "type": "object",
384
+ "properties": {
385
+ "ticker": {
386
+ "type": "string",
387
+ "description": "Stock ticker symbol"
388
+ }
389
+ },
390
+ "required": ["ticker"]
391
+ }
392
+ ),
393
+ Tool(
394
+ name="get_material_events",
395
+ description="Get recent 8-K material events (bankruptcy, impairments, executive changes, delisting).",
396
+ inputSchema={
397
+ "type": "object",
398
+ "properties": {
399
+ "ticker": {
400
+ "type": "string",
401
+ "description": "Stock ticker symbol"
402
+ },
403
+ "limit": {
404
+ "type": "integer",
405
+ "description": "Number of recent 8-K filings to return (default: 20)",
406
+ "default": 20
407
+ }
408
+ },
409
+ "required": ["ticker"]
410
+ }
411
+ ),
412
+ Tool(
413
+ name="get_ownership_filings",
414
+ description="Get ownership filings: 13D/13G (5%+ ownership changes), Form 4 (insider transactions).",
415
+ inputSchema={
416
+ "type": "object",
417
+ "properties": {
418
+ "ticker": {
419
+ "type": "string",
420
+ "description": "Stock ticker symbol"
421
+ },
422
+ "limit": {
423
+ "type": "integer",
424
+ "description": "Number of filings per category to return (default: 20)",
425
+ "default": 20
426
+ }
427
+ },
428
+ "required": ["ticker"]
429
+ }
430
+ ),
431
+ Tool(
432
+ name="get_going_concern",
433
+ description="Search latest 10-K for going concern warnings (substantial doubt, liquidity issues).",
434
+ inputSchema={
435
+ "type": "object",
436
+ "properties": {
437
+ "ticker": {
438
+ "type": "string",
439
+ "description": "Stock ticker symbol"
440
+ }
441
+ },
442
+ "required": ["ticker"]
443
+ }
444
+ ),
445
+ Tool(
446
+ name="get_all_sources_fundamentals",
447
+ description="Get financials from ALL sources (SEC EDGAR + Yahoo Finance) for side-by-side comparison.",
448
+ inputSchema={
449
+ "type": "object",
450
+ "properties": {
451
+ "ticker": {
452
+ "type": "string",
453
+ "description": "Stock ticker symbol"
454
+ }
455
+ },
456
+ "required": ["ticker"]
457
+ }
458
+ )
459
+ ]
460
+
461
+
462
+ # =============================================================================
463
+ # MCP CALL TOOL HANDLER
464
+ # =============================================================================
465
+
466
+ async def _execute_tool(name: str, ticker: str, arguments: dict) -> dict:
467
+ """Execute a tool by name."""
468
+ # Orchestrator-handled tools
469
+ orchestrator_tools = {
470
+ "get_company_info",
471
+ "get_financials",
472
+ "get_debt_metrics",
473
+ "get_cash_flow",
474
+ "get_sec_fundamentals",
475
+ "get_all_sources_fundamentals",
476
+ }
477
+
478
+ if name in orchestrator_tools:
479
+ return await orchestrator.execute_tool(name, {"ticker": ticker, **arguments})
480
+
481
+ # Legacy tools
482
+ if name == "get_material_events":
483
+ limit = arguments.get("limit", 20)
484
+ return await fetch_material_events(ticker, limit)
485
+
486
+ elif name == "get_ownership_filings":
487
+ limit = arguments.get("limit", 20)
488
+ return await fetch_ownership_filings(ticker, limit)
489
+
490
+ elif name == "get_going_concern":
491
+ return await fetch_going_concern(ticker)
492
+
493
+ else:
494
+ return {"error": f"Unknown tool: {name}"}
495
+
496
+
497
+ @server.call_tool()
498
+ async def call_tool(name: str, arguments: dict):
499
+ """
500
+ Handle tool invocations with GUARANTEED JSON-RPC response.
501
+
502
+ This function ALWAYS returns a valid TextContent response, even if:
503
+ - External APIs timeout
504
+ - Exceptions occur during processing
505
+ - Any unexpected error happens
506
+
507
+ This ensures MCP protocol compliance and prevents client hangs.
508
+ """
509
+ try:
510
+ ticker = arguments.get("ticker", "").upper()
511
+ if not ticker:
512
+ return [TextContent(type="text", text=json.dumps({
513
+ "error": "ticker is required",
514
+ "ticker": None,
515
+ "source": "fundamentals-basket"
516
+ }))]
517
+
518
+ # Execute tool with global timeout
519
+ try:
520
+ result = await asyncio.wait_for(
521
+ _execute_tool(name, ticker, arguments),
522
+ timeout=TOOL_TIMEOUT
523
+ )
524
+ except asyncio.TimeoutError:
525
+ logger.error(f"Tool {name} timed out after {TOOL_TIMEOUT}s for {ticker}")
526
+ result = {
527
+ "error": f"Tool execution timed out after {TOOL_TIMEOUT} seconds",
528
+ "ticker": ticker,
529
+ "tool": name,
530
+ "source": "fundamentals-basket",
531
+ "fallback": True
532
+ }
533
+
534
+ # Ensure result is JSON serializable
535
+ return [TextContent(type="text", text=json.dumps(result, indent=2, default=str))]
536
+
537
+ except json.JSONDecodeError as e:
538
+ logger.error(f"JSON serialization error for {name}: {e}")
539
+ return [TextContent(type="text", text=json.dumps({
540
+ "error": f"JSON serialization failed: {str(e)}",
541
+ "ticker": arguments.get("ticker", ""),
542
+ "tool": name,
543
+ "source": "fundamentals-basket"
544
+ }))]
545
+
546
+ except Exception as e:
547
+ # Catch-all: ALWAYS return valid JSON-RPC response
548
+ logger.error(f"Unexpected error in {name}: {type(e).__name__}: {e}")
549
+ return [TextContent(type="text", text=json.dumps({
550
+ "error": f"{type(e).__name__}: {str(e)}",
551
+ "ticker": arguments.get("ticker", ""),
552
+ "tool": name,
553
+ "source": "fundamentals-basket",
554
+ "fallback": True
555
+ }))]
556
+
557
+
558
+ # =============================================================================
559
+ # MAIN
560
+ # =============================================================================
561
+
562
+ async def main():
563
+ """Run the MCP server."""
564
+ logger.info("Starting fundamentals-basket MCP server (microservices architecture)")
565
+ async with stdio_server() as (read_stream, write_stream):
566
+ await server.run(read_stream, write_stream, server.create_initialization_options())
567
+
568
+
569
+ if __name__ == "__main__":
570
+ asyncio.run(main())