MCP Server

Talval

com.talval/research
Data & Analytics Finance & Investing Public & reachable MCP 2026-07-28

What this MCP does

Provides stock valuation research, fair-value estimates, screening, company comparisons, and 13F-based superinvestor portfolio data.

compare_stocks
Compare stocks
Put two or more tickers side by side on verdict, fair value, upside and scores.
Read only
Input schema
{'type': 'object', 'required': ['tickers'], 'properties': {'tickers': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 8, 'minItems': 2, 'description': 'Tickers to compare.'}}}
Output schema
{'type': 'object', 'required': ['companies', 'not_covered'], 'properties': {'companies': {'type': 'array', 'items': {'type': 'object', 'required': ['ticker'], 'properties': {'name': {'type': ['string', 'null']}, 'price': {'type': ['number', 'null']}, 'ticker': {'type': 'string'}, 'verdict': {'type': ['string', 'null'], 'description': 'Undervalued, Fairly valued or Overvalued.'}, 'currency': {'type': ['string', 'null'], 'description': 'Trading currency of the price and fair value.'}, 'conviction': {'type': ['integer', 'null']}, 'fair_value': {'type': ['number', 'null']}, 'upside_pct': {'type': ['number', 'null'], 'description': 'Percent, not a fraction: 12.5 means +12.5%.'}, 'value_score': {'type': ['number', 'null']}, 'safety_score': {'type': ['number', 'null']}, 'quality_score': {'type': ['number', 'null']}, 'fair_value_usable': {'type': 'boolean'}, 'dividend_yield_pct': {'type': ['number', 'null'], 'description': 'Percent, e.g. 2.9.'}}}}, 'not_covered': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tickers asked for that Talval does not cover.'}}}
get_stock_research
Get stock research
Talval's valuation verdict, fair-value estimate, upside, quality/safety/value scores and latest filed results for one ticker. End-of-day snapshot with a date.
Read only
Input schema
{'type': 'object', 'required': ['ticker'], 'properties': {'ticker': {'type': 'string', 'description': "Exact ticker as Talval lists it, e.g. 'AAPL', 'RHM.DE', 'PRU.L'."}}}
Output schema
{'type': 'object', 'required': ['ticker', 'covered'], 'properties': {'url': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'as_of': {'type': ['string', 'null'], 'description': 'Date of the verdict snapshot, YYYY-MM-DD.'}, 'price': {'type': ['number', 'null']}, 'scores': {'type': 'object', 'properties': {'value': {'type': ['number', 'null']}, 'safety': {'type': ['number', 'null']}, 'quality': {'type': ['number', 'null']}, 'dividend': {'type': ['number', 'null']}, 'composite': {'type': ['number', 'null']}, 'piotroski_f_score': {'type': ['integer', 'null'], 'description': '0-9.'}}, 'description': '0-100, null where the inputs behind a score are missing.'}, 'sector': {'type': ['string', 'null']}, 'ticker': {'type': 'string'}, 'country': {'type': ['string', 'null']}, 'covered': {'type': 'boolean', 'description': 'False when Talval does not cover this ticker; every other field is then null.'}, 'verdict': {'type': ['string', 'null'], 'description': 'Undervalued, Fairly valued or Overvalued.'}, 'currency': {'type': ['string', 'null'], 'description': 'Trading currency of price and fair value.'}, 'industry': {'type': ['string', 'null']}, 'conviction': {'type': ['integer', 'null'], 'description': '1-10.'}, 'fair_value': {'type': ['number', 'null'], 'description': 'Null when withheld — see fair_value_usable and withheld_reason.'}, 'market_cap': {'type': ['number', 'null']}, 'risk_level': {'type': ['string', 'null']}, 'upside_pct': {'type': ['number', 'null'], 'description': 'Percent, not a fraction.'}, 'pe_trailing': {'type': ['number', 'null']}, 'price_as_of': {'type': ['string', 'null']}, 'latest_annual': {'type': ['object', 'null'], 'properties': {'revenue': {'type': ['number', 'null']}, 'net_income': {'type': ['number', 'null']}, 'eps_diluted': {'type': ['number', 'null']}, 'fiscal_year': {'type': ['integer', 'null']}, 'free_cash_flow': {'type': ['number', 'null']}}, 'description': "As reported in the company's own filings — not estimates."}, 'withheld_reason': {'type': ['string', 'null'], 'description': 'Why fair_value is null, when it is.'}, 'fair_value_usable': {'type': 'boolean', 'description': 'False when the company reports in a different currency than it trades in, which makes every price-to-fundamentals figure cross-currency nonsense. A false here is a deliberate suppression, not missing data.'}, 'dividend_yield_pct': {'type': ['number', 'null'], 'description': 'Forward yield as a PERCENT, e.g. 2.9 for 2.9%.'}}}
get_superinvestor
Get a superinvestor's portfolio
One tracked investor's reported holdings and quarter-on-quarter activity. Call list_superinvestors first to get the slug.
Read only
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': "Slug, e.g. 'berkshire'."}}}
Output schema
{'type': 'object', 'required': ['slug', 'found'], 'properties': {'slug': {'type': 'string'}, 'found': {'type': 'boolean', 'description': 'False when no tracked investor has that slug.'}, 'person': {'type': ['string', 'null']}, 'manager': {'type': ['string', 'null']}, 'activity': {'type': ['object', 'null'], 'properties': {'reduced': {'type': 'array', 'items': {'type': 'string'}}, 'added_to': {'type': 'array', 'items': {'type': 'string'}}, 'new_buys': {'type': 'array', 'items': {'type': 'string'}}, 'sold_out': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'Quarter on quarter. Null when there is no prior filing to compare against.'}, 'holdings': {'type': 'array', 'items': {'type': 'object', 'properties': {'issuer': {'type': ['string', 'null']}, 'ticker': {'type': ['string', 'null']}, 'activity': {'type': ['string', 'null']}, 'pct_of_portfolio': {'type': ['number', 'null'], 'description': 'Percent, e.g. 12.4.'}}}, 'description': 'Largest first, capped at 30.'}, 'n_positions': {'type': ['integer', 'null']}, 'quarter_end': {'type': ['string', 'null']}, 'portfolio_value_usd': {'type': ['number', 'null']}}}
list_superinvestors
List superinvestors
The investors Talval tracks through their quarterly 13F filings — portfolio size, position count and largest holdings.
Read only
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'required': ['investors'], 'properties': {'investors': {'type': 'array', 'items': {'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'Pass this to get_superinvestor.'}, 'person': {'type': ['string', 'null']}, 'manager': {'type': ['string', 'null']}, 'n_positions': {'type': ['integer', 'null']}, 'quarter_end': {'type': ['string', 'null'], 'description': 'The reported quarter, YYYY-MM-DD.'}, 'portfolio_value_usd': {'type': ['number', 'null']}}}}}}
screen_stocks
Screen stocks
Run one of Talval's stock screens over the covered universe and return the ranked results with fair value, upside and scores.
Read only
Input schema
{'type': 'object', 'required': ['screen'], 'properties': {'limit': {'type': 'integer', 'default': 15, 'maximum': 50, 'minimum': 1, 'description': 'How many ranked rows to return. The screen is already ranked, so a smaller number gives the strongest names rather than a sample.'}, 'screen': {'enum': ['undervalued', 'high_quality', 'safe_dividend', 'undervalued_dividend'], 'type': 'string', 'description': 'Which screen to run.'}, 'sector': {'type': 'string', 'description': "Optional sector filter, e.g. 'Technology'."}}}
Output schema
{'type': 'object', 'required': ['screen', 'rows'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['ticker'], 'properties': {'name': {'type': ['string', 'null']}, 'price': {'type': ['number', 'null']}, 'ticker': {'type': 'string'}, 'verdict': {'type': ['string', 'null'], 'description': 'Undervalued, Fairly valued or Overvalued.'}, 'currency': {'type': ['string', 'null'], 'description': 'Trading currency of the price and fair value.'}, 'fair_value': {'type': ['number', 'null']}, 'upside_pct': {'type': ['number', 'null'], 'description': 'Percent, not a fraction: 12.5 means +12.5%.'}, 'quality_score': {'type': ['number', 'null']}}}, 'description': 'Ranked. Empty when nothing clears the screen.'}, 'label': {'type': ['string', 'null']}, 'screen': {'type': 'string'}, 'sector': {'type': ['string', 'null'], 'description': 'The sector filter applied, if any.'}}}
search_stocks
Search stocks
Find a company in Talval's coverage by name or ticker. Typo tolerant. Use this first when you only have a company name.
Read only
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 8, 'maximum': 25, 'minimum': 1, 'description': 'How many matches to return. Raise it when a name is ambiguous across listings — Shell and Unilever trade in more than one place.'}, 'query': {'type': 'string', 'description': "Company name or ticker, e.g. 'Rheinmetall' or 'RHM.DE'."}}}
Output schema
{'type': 'object', 'required': ['query', 'matches'], 'properties': {'query': {'type': 'string'}, 'matches': {'type': 'array', 'items': {'type': 'object', 'required': ['ticker'], 'properties': {'name': {'type': ['string', 'null']}, 'sector': {'type': ['string', 'null']}, 'ticker': {'type': 'string'}}}, 'description': "Empty when nothing in Talval's coverage matches."}}}
stocks_of_the_week
Stocks of the week
Talval's current weekly picks — the latest Undervalued verdict per ticker, refreshed weekly.
Read only
Input schema
{'type': 'object', 'properties': {}}
Output schema
{'type': 'object', 'required': ['picks'], 'properties': {'note': {'type': ['string', 'null'], 'description': "This week's written note, when there is one."}, 'picks': {'type': 'array', 'items': {'type': 'object', 'required': ['ticker'], 'properties': {'name': {'type': ['string', 'null']}, 'rank': {'type': ['integer', 'null']}, 'sector': {'type': ['string', 'null']}, 'ticker': {'type': 'string'}, 'verdict': {'type': ['string', 'null']}, 'conviction': {'type': ['integer', 'null']}}}, 'description': 'Empty when nothing is published for this week yet.'}, 'week_start': {'type': ['string', 'null']}}}
Changed
stocks_of_the_week
Oct. 1, 2026, 2:54 a.m.
Changed
get_superinvestor
Oct. 1, 2026, 2:54 a.m.
Changed
list_superinvestors
Oct. 1, 2026, 2:54 a.m.
Changed
compare_stocks
Oct. 1, 2026, 2:54 a.m.
Changed
screen_stocks
Oct. 1, 2026, 2:54 a.m.
Changed
get_stock_research
Oct. 1, 2026, 2:54 a.m.
Changed
search_stocks
Oct. 1, 2026, 2:54 a.m.
Added
stocks_of_the_week
Sept. 17, 2026, 12:37 p.m.
Added
get_superinvestor
Sept. 17, 2026, 12:37 p.m.
Added
list_superinvestors
Sept. 17, 2026, 12:37 p.m.
Added
compare_stocks
Sept. 17, 2026, 12:37 p.m.
Added
screen_stocks
Sept. 17, 2026, 12:37 p.m.
Added
get_stock_research
Sept. 17, 2026, 12:37 p.m.
Added
search_stocks
Sept. 17, 2026, 12:37 p.m.