stock_search → stock_overview; add stock_insider, stock_filings, or stock_financials only when the prompt asks for it. This is a context product, not an advisor: report what the data says, never tell the user to buy, sell, hold, or size anything.
The spine
stock_overview is the body of the brief: it returns the latest financials, the valuation block, and growth rates in one call. For a plain “give me a brief,” that is the whole job — stock_financials, stock_insider, and stock_filings are depth you add on request.
Worked example: a brief on Apple
Fromstock_overview { "symbol": "AAPL" } (trimmed to the fields the brief uses):
stock_overview (trimmed)
The brief this supports
Answer first, then the facts, then a provenance line that separates the two clocks, then the calls used:Apple grew both revenue and earnings over its last fiscal year and trades at a premium multiple. Revenue rose about 6.4% and net income about 19.5% year over year. It trades at a trailing P/E of roughly 39.5, a free-cash-flow yield near 2.3%, and a dividend yield around 0.35%. Provenance: the growth figures are SEC-filed fundamentals (Two things make that a good brief rather than a generated one: it keeps the two clocks separate (the filing-based growth vs. the price-based multiples), and it labels the price-derived multiples as such instead of implying the filing states them.as_of.sec2026-06-26). The P/E and yields arecomputed_from_prices— fundamentals against a market close on 2026-07-01 — so they move with the price, not the filings. Calls used: stock_search, stock_overview. This is context, not advice.
Adding insider activity
If the prompt asks about insiders, addstock_insider. The response is a faithful transcription of Form 4s (provenance: "sec_filing") plus a summary. Here is a real result for a different company, NVIDIA:
stock_insider symbol=NVDA (trimmed)
shares is a decimal string; code is the SEC transaction code (resolve it in the stock_reference catalogs). Report the net direction, keep the sign, and do not turn a routine sale into a signal.
When the data says “no answer”
Ifstock_search returns is_covered: false with ingestion_pending, the symbol is real but not yet ingested — say the fundamentals are not available yet and stop. If a value inside the brief is a refusal (unavailable is present), report the gap; do not fill it with a guess. A brief that admits a gap is more useful than one that invents.
Agent recipes
Reusable prompt-to-call sequences and answer templates.