Spaces:
Sleeping
Sleeping
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
- .gitignore +8 -0
- .obsidian/app.json +3 -0
- .obsidian/appearance.json +3 -0
- .obsidian/core-plugins.json +33 -0
- .obsidian/workspace.json +224 -0
- AAPL_data.txt +168 -0
- configs/__init__.py +2 -0
- configs/company_name_filters.py +65 -0
- configs/output_schemas.py +48 -0
- docs/SEC_EDGAR_data_schema.md +64 -0
- docs/alphavantage_data_schema.md +77 -0
- docs/bea_data_schema.md +73 -0
- docs/bls_data_schema.md +98 -0
- docs/data_flow.md +141 -0
- docs/finnhub_data_schema.md +37 -0
- docs/fred_data_schema.md +110 -0
- docs/fundamentals_data_schema.md +42 -0
- docs/macro_data_schema.md +22 -0
- docs/mcp_data_sources.md +172 -0
- docs/mcp_normalized_schemas.md +30 -0
- docs/mcp_output_sample.md +246 -0
- docs/mcp_output_visa.md +91 -0
- docs/mcp_raw_visa.json +939 -0
- docs/mcp_raw_visa.md +962 -0
- docs/mcp_raw_visa_test.json +1368 -0
- docs/mcp_test_report_BAC.md +69 -0
- docs/mcp_test_report_KO.md +69 -0
- docs/metrics_schema_emitted.md +236 -0
- docs/metrics_schema_human_readable.md +180 -0
- docs/newsapi_data_schema.md +41 -0
- docs/nyt_data_schema.md +40 -0
- docs/reddit_data_schema.md +39 -0
- docs/schema_normalization.md +54 -0
- docs/tavily_data_schema.md +40 -0
- docs/vader_data_schema.md +39 -0
- docs/valuation_data_schema.md +31 -0
- docs/volatility_data_schema.md +15 -0
- docs/yahoo_data_schema.md +87 -0
- docs/yahoo_options_data_schema.md +96 -0
- mcp-servers/{financials-basket → fundamentals-basket}/README.md +4 -4
- mcp-servers/fundamentals-basket/config.py +143 -0
- mcp-servers/{financials-basket → fundamentals-basket}/fetchers.py +9 -8
- mcp-servers/fundamentals-basket/http_server.py +249 -0
- mcp-servers/{financials-basket → fundamentals-basket}/mcp_sec_edgar.md +0 -0
- mcp-servers/fundamentals-basket/models/__init__.py +41 -0
- mcp-servers/fundamentals-basket/models/errors.py +150 -0
- mcp-servers/fundamentals-basket/models/schemas.py +248 -0
- mcp-servers/fundamentals-basket/nginx.conf +140 -0
- mcp-servers/{financials-basket → fundamentals-basket}/requirements.txt +0 -0
- 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 & 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 & 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": ">\\*Disclaimer\\*\n\n>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 & 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": ">\\*Disclaimer\\*\n\n>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/
|
| 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 |
-
"
|
| 128 |
"command": "/path/to/venv/bin/python",
|
| 129 |
-
"args": ["/path/to/mcp-servers/
|
| 130 |
}
|
| 131 |
}
|
| 132 |
}
|
|
@@ -186,7 +186,7 @@ Add to `~/.config/claude/claude_desktop_config.json`:
|
|
| 186 |
## Files
|
| 187 |
|
| 188 |
```
|
| 189 |
-
|
| 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, "
|
| 135 |
-
get_latest_value(facts, "
|
| 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().
|
| 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().
|
| 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().
|
| 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().
|
| 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().
|
| 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())
|