Skip to main content
Each recipe maps a class of user prompt to the smallest set of noxstock calls and an answer template. The output rules these templates assume (answer first, preserve freshness and signs, no advice) live once in the agent instructions — paste that block into your agent and the templates below fall out of it. REST paths and MCP tools are listed side by side. MCP arguments use native JSON types: lists are arrays (["10-K","10-Q"]), not comma-separated strings. Plan access matters here: a Free key covers the snapshot/valuation recipes in full; insider, compare, filings, technicals, and price-action need Starter or Builder (plans and limits).

One-symbol brief

Serves prompts like “What’s going on with AAPL?”, “Give me a read on Apple”, “Should I be paying attention to NVDA?” — a single ticker, no specific sub-topic. Calls: snapshot is usually enough. Add insider (Starter+) only when the prompt hints at ownership or recent activity; add valuation when it hints at price-versus-worth. On a Free key, skip the activity line and say insider data was not consulted rather than guessing.
GET /v2/snapshot?symbol=AAPL
GET /v2/insider?symbol=AAPL          # only if activity is in scope
Template:
Answer: <one factual sentence — what the symbol is doing right now>

Setup
- <price, day change, recent performance, 52-week position from snapshot>
- <sector/industry or asset_type if it matters>

Activity / caveats
- <insider net direction, or any unsupported/stale/null reasons>

Freshness
- Snapshot: <freshness>, as_of <timestamp>, market_status <status>
- Insider: <freshness>, as_of <timestamp>

Calls used
- <routes or tool names>
Filled with the live AAPL snapshot and insider fixtures (numbers copied verbatim; the insider rollup returns ten recent transactions and a 90-day summary, trimmed here to the relevant lines):
aapl-brief.txt
Answer: AAPL is trading at 314.86, up 1.17% on the day and up 54.06% over the past
year (+25.56% vs SPY), sitting near the top of its 52-week range.

Setup
- Price 314.86, day change +1.17%. 52-week range 194.30-316.94; position 95.3% of
  range, 1.8% below the 52-week high.
- 1-year +54.06%, vs SPY +25.56%. Sector: Technology, Consumer Electronics.
- Trailing P/E 37.28, FCF yield 2.83%, dividend yield 0.34%.

Activity / caveats
- Insider 90-day Form 4 rollup: net direction "selling". 0 open-market buys vs 13
  open-market sells, net_shares_market_only -397,759, net_value_usd -$111,705,105.08.
  Largest sale: Arthur D Levinson (Director), 50,000 shares at 311.02 on 2026-05-27,
  not under a 10b5-1 plan.
- Notice: recent_transactions_limited_to_10. The full rollup scans the latest 200
  Form 4 filings; only the 10 most recent transactions are itemized.

Freshness
- Snapshot: intraday, as_of 2026-06-05T14:19:06Z, market_status open.
- Insider: end_of_day, as_of 2026-06-05T06:45:45Z.

Calls used
- snapshot, insider
Note the two as_of timestamps differ: the quote is intraday, the Form 4 rollup is end-of-day. Surface both rather than collapsing them into one.

Valuation check

Serves “Is AAPL expensive?”, “Is NVDA cheap right now?”, “How does the multiple look?”. Snapshot gives price context; valuation gives the multiples and their 5-year position. Skip fundamentals unless the user asks why the multiple is what it is.
GET /v2/snapshot?symbol=NVDA
GET /v2/valuation?symbol=NVDA
Template:
Answer: <cheap / expensive / mixed / not enough valuation context — from returned fields only>

Why
- valuation_context: anchor <metric>, value <x>, percentile_5y <n>, position <label>
- <supporting multiples and yields, keeping _pct and _usd>

Caveats
- <ETFs return freshness "unsupported" for valuation; financial-company guardrails; stale/degraded data>

Freshness
- Valuation: <freshness>, as_of <timestamp>, market_status <status>

Calls used
- snapshot, valuation
ETFs do not get valuation multiples — /v2/valuation for an ETF returns HTTP 200 with freshness: "unsupported". Treat that as the answer, not a failure.

Compare a basket

Serves “Compare NVDA, AMD, and INTC”, “How do these three stack up?”. One compare call returns an aligned row per symbol. If the user wants more, deepen only the symbol they fixate on. symbols takes 2-4 tickers; 5 or more returns PARAM_INVALID. The default field set is price,pct_1y,vs_spy_pct_1y,pe_ttm,rsi_14,trending; any field a symbol cannot supply is listed in fields_omitted_by_symbol.
GET /v2/compare?symbols=NVDA,AMD,INTC
Template:
Answer: <one-sentence comparison — a contrast, not a recommendation>

Scorecard
| Symbol | <field> | <field> | <field> |
| --- | ---: | ---: | ---: |
| <symbol> | <value> | <value> | <value> |

Notes
- fields_requested: <list>
- fields_omitted_by_symbol: <only if non-empty>

Freshness
- Compare: <freshness>, as_of <timestamp>, market_status <status>

Calls used
- compare
A negative pe_ttm means trailing losses, not a cheap multiple — keep the sign and say so.

SEC risk review

Serves “What are the risks in Apple’s latest 10-K?”, “Summarize Tesla’s risk factors”. Resolve the symbol, list filings, pick the latest 10-K’s accession, then pull the section text and summarize only that text.
GET /v2/filings?symbol=AAPL&form=10-K&limit=3
GET /v2/filings/0000320193-25-000079
GET /v2/filings/0000320193-25-000079/section/risk_factors
Template:
Answer: <1-2 sentence summary drawn from the section text only>

Key risks from the section
- <point from text>
- <point from text>
- <point from text>

Source
- Form <form>, accession <accession>, filed <filing_date>, period <period_of_report>
- Section: <section>, char_count <n>

Freshness
- Filing/section: <freshness>, as_of <timestamp>

Calls used
- filings_list, filings_get, filings_section
The risk_factors section for that AAPL accession returns char_count 68069 — far more than fits one answer. Summarize the themes (macro and tariff exposure, supply-chain concentration, competition, legal and regulatory) and say the text was condensed. Do not add a single fact that is not in the returned text: no news, no consensus, no stock move, no memory. The 926 foreign private issuers (~18% of the universe) file 20-F/40-F/6-K, so /v2/filings returns unsupported for them — see coverage and gaps.

Insider scan

Serves “Any notable insider activity in AAPL?”, “Are executives selling?”. One insider call returns the trailing 90-day Form 4 rollup plus recent transactions. limit ranges 1-200 (default 10). The rollup scans the latest 200 Form 4 filings; if it truncates, summary_90d.notices says so.
GET /v2/insider?symbol=AAPL&limit=20
Template:
Answer: <notable / quiet / not available — from summary_90d.net_direction>

90-day Form 4 summary
- Open-market: <buy_count> buys, <sell_count> sells, net_shares_market_only <signed>, net_value_usd <signed>
- All activity: <transactions> total, net_shares_all_kinds <signed>, by kind <transactions_by_kind>
- Notices: <summary_90d.notices if present>

Recent transactions
- <transaction_date>: <insider_name> (<role>), <transaction_kind>, <shares>, <value_usd or unavailable reason>, 10b5-1 <true/false>

Freshness
- Insider: <freshness>, as_of <timestamp>

Calls used
- insider
Some transactions have no price: gifts and exercises return value_usd as { "available": false, "reason": ... }. Keep the reason; do not impute a dollar value. Selling pressure in the rollup is not a sell signal — report it, do not advise on it.

Technical timing

Serves “Is AAPL overbought?”, “Is the trend extended?”. Technicals gives indicators and zones; price-action gives volume, extremes, gaps, and drawdowns. Add history only when the user wants the actual series.
GET /v2/technicals?symbol=AAPL
GET /v2/price-action?symbol=AAPL
GET /v2/history?symbol=AAPL&series=close,rsi_14&range=1y&cadence=daily   # only for a chart
Template:
Answer: <extended / neutral / weak / not enough technical context>

Setup
- RSI and zone (note daily vs weekly), distance from moving averages, ADX/trend
- 52-week distance, recent drawdown, volume vs average, streak/gap context

Caveats
- market_status is session state, not execution readiness
- <degraded/null long-window fields if present>

Freshness
- Technicals: <freshness>, as_of <timestamp>, market_status <status>
- Price action: <freshness>, as_of <timestamp>, market_status <status>

Calls used
- technicals, price_action
The history tool argument is named period — it maps to REST’s range (whose own legacy alias is also period). Do not imply execution readiness or tell the user to enter or exit a trade.

Choose endpoints

For a prompt no recipe covers, pick the smallest route set by job.