Eight tools that surface the qualitative layer behind the price: SEC filings, risk factors, dividend history, splits, short interest, news flow, market movers, and ticker metadata. Numbers are the surface; the why is in the prose, and the prose is in the filings.
Notes from Surendra Singh.
# filings & risk factors get_sec_filings(ticker, form_type="10-K", limit=5) get_risk_factors(ticker) # Item 1A excerpt from latest 10-K # corporate actions get_dividends(ticker, limit=20) get_splits(ticker, limit=20) get_short_interest(ticker) # days-to-cover, % of float # news & market color get_news(ticker=None, limit=10) # ticker-scoped or broad market_movers(direction="gainers", exchange="US", limit=10) # metadata get_ticker_details(ticker) # sector, industry, market cap, employees search_tickers(query, limit=10) # resolve names → symbols
Item 1A of every 10-K is the company telling investors, in writing and under legal liability, what could go wrong. Most readers skim it because it sounds boilerplate. The signal is in the changes year-over-year. A factor that appears for the first time, or shifts from a one-paragraph mention to a four-paragraph mention, is management telling you what they are now actually worried about.
"Read the risk factors. Then read last year's risk factors. The diff is the alpha."
get_risk_factors(ticker) returns the latest section so a Claude prompt can compare it to the prior year on demand. The library does not perform the diff for you — that's a judgment call about what counts as a meaningful change. The tool surfaces the source text. The reading is still yours.
Three corporate-action signals, three different audiences:
get_dividends returns the full series — the cuts are visible.get_news with a ticker returns ticker-scoped headlines. Without a ticker, it returns the broad market news flow. market_movers returns the day's biggest gainers, losers, or most-actives by exchange. Both are sentiment surfaces — useful for a quick read on what the desk is talking about, dangerous if treated as signal.
News tools return headlines and timestamps, not engagement metrics, sentiment scores, or "news score" rollups. The reason is that any sentiment score is a model on top of the headlines, and that model belongs in the user's prompt where they can inspect it — not buried inside a tool that pretends the score is data. Stuffing a black-box sentiment number into a "fundamentals API" is how trust degrades.
get_ticker_details and search_tickers are unglamorous and load-bearing. The first returns sector, industry, market cap, employee count, headquarters, exchange listing, and CIK — the fields that make a ticker comparable to its peers. The second resolves "Apple" to "AAPL" and "Berkshire" to both "BRK.A" and "BRK.B" so the rest of the stack doesn't have to guess.
The reason these matter: cross-sectional analysis is impossible without consistent metadata. Comparing AAPL's margin to "the rest of tech" requires a sector classifier; correlating short interest to performance across an industry requires an industry classifier. Without metadata, every analysis is one ticker at a time.