Skip to main content
Glama

list_available_reports

Read-only

List the symbols with a report plan SAVED on or after report_date (default: TODAY) — the real-time research get_latest_report can hand over right now, and whether each is current or has a newer event since.

A plan is saved the moment a material event publishes for a symbol (eps_update,
eps_release, 8k_release, financials_release, ir_publication, transcript_update) and
nightly for company_update. This tool is the INVENTORY of those plans — it does not
build or return a report. Returns `plans`, newest plan first:
  {"plans": [{"symbol": "NVDA", "event_type": "eps_release",
              "planned_at": "<iso>",   # when the plan was built
              "queued_at": "<iso>",    # the report inputs (the event) it was built from
              "fresh": true,           # see below
              "source": "redis"}, ...]}  # redis = built within 3 days, s3 = older durable copy
`fresh` applies the SAME rule get_latest_report (/get-cached-reports) applies:
  fresh: true  -> the report get_latest_report([ticker]) returns was written from
                  this plan and reflects the latest event. These are the names to pull.
  fresh: false -> a newer event landed after the plan. Its own report may still be in
                  progress (minutes); otherwise get_latest_report returns the older PDF
                  flagged stale, and generate_report_for_stock(ticker) writes a new
                  note in a few minutes. Say so before the user waits on it.
  not listed   -> no plan IN THE WINDOW. An empty result does not mean there is no
                  research — it means nothing was planned in the window. Widen
                  `report_date` before concluding a symbol has no plan; only then is
                  a first generate_report_for_stock note (a few minutes) the answer
                  (or `onboard_symbol` if the ticker is not covered).

TWO WAYS IN:
  1) Event-first — list_realtime_events(event_type=...) shows what just published; call
     this with event_types=[<that type>] to confirm which of those symbols have a plan
     and which are fresh, then get_latest_report(symbols=[...]) for the ones the user
     wants. (An event in the 12h cache with no plan here means the plan is still being
     built — check again in a minute.)
  2) Research-first — skip the events step: call this with no filter for every symbol
     planned TODAY, grouped by the event that triggered it. Plans stay listed for 7
     days, so pass report_date="YYYY-MM-DD" (e.g. 3 days back) when the user wants the
     running inventory rather than today's, or when today's list comes back thin.

PICKING THE MOST PERTINENT PLANS ("pull the most relevant reports today", "what's worth
reading right now"): the list is an inventory, not a ranking — a nightly company_update
plan sits next to a transcript that just landed. Rank by the EVENT, not by the plan:
  a) FILTER on what published — list_realtime_events for the material types
     (transcript_update, 8k_release, ir_publication, eps_release / eps_update,
     financials_release) and for the tape (biggest_mover, biggest_loser,
     biggest_gainer). A symbol on BOTH lists — a filing or call AND a move — is
     the strongest candidate.
  b) ANALYZE the content — read the event payloads (what the 8-K discloses, what the
     call said, what the deck guides to) and keep the ones that change something;
     get_event_ontology(event_type=...) says what each type means.
  c) CONFIRM with intraday price action — detect_intraday_outlier_jumps(tickers=[...])
     (and get_aftermarket_data after the close) shows whether the market treated it
     as significant; a print with no reaction ranks below a mover with a filing.
  d) MATCH to plans — call this tool with event_types=[<the types from a>] and keep
     the candidates that appear, preferring `fresh: true`; `queued_at` should be the
     event you just read.
  e) PULL the winners — get_latest_report(symbols=[...]) for the few that survived,
     not the whole list: every one comes back in seconds, flagged fresh or stale.
     Tell the user which is which, and offer generate_report_for_stock (a few minutes
     each) only if they want to wait.

Not `get_latest_report`: that PULLS the reports for named tickers (each one's latest
document). This tool answers "for which symbols could
I get a fresh report?" — by event, across the universe — before anything is pulled. Not
`generate_research_report`: that is the broad, topical, or multi-company writeup;
the plans listed here are single-symbol, event-anchored reports.

Synchronous, cheap (500/hour). Requires auth (your MCP client attaches the OAuth
bearer automatically).

Input Schema

NameRequiredDescriptionDefault
event_typesNoPlan-earning event types to list: eps_update, eps_release, 8k_release, financials_release, ir_publication, transcript_update, biggest_mover, biggest_gainer, biggest_loser, company_update. Any other type is a 422. Omit for every type.
report_dateNoLower bound on when the plan was built, YYYY-MM-DD (default today). Earlier dates widen the window and cost more; plans stay listed for 7 days. A malformed date is a 422.

Output Schema

NameRequiredDescriptionDefault
plansYesSaved report plans in the window, newest first. Empty means nothing was planned in the window.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / event_types / description
      Previous value: -"Plan-earning event types to list: eps_update, eps_release, 8k_release, financials_release, ir_publication, transcript_update, company_update. Any other type is a 422. Omit for every type."New value: +"Plan-earning event types to list: eps_update, eps_release, 8k_release, financials_release, ir_publication, transcript_update, biggest_mover, biggest_gainer, biggest_loser, company_update. Any other type is a 422. Omit for every type."
  2. Changed2 schema fields changed
    • changedInput schema / properties / report_date / description
      Previous value: -"Lower bound on when the plan was built, YYYY-MM-DD (default today). Earlier dates widen the window and cost more; plans stay renderable for 7 days. A malformed date is a 422."New value: +"Lower bound on when the plan was built, YYYY-MM-DD (default today). Earlier dates widen the window and cost more; plans stay listed for 7 days. A malformed date is a 422."
    • changedOutput schema / $defs / ReportPlan / properties / fresh / description
      Previous value: -"True: get_latest_report renders it in ~10-20 s. False: a newer event landed; only a rebuild refreshes it."New value: +"True: the report get_latest_report returns reflects the latest event. False: a newer event landed since (its report may be in progress; otherwise generate_report_for_stock writes one)."
  3. First observed

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond basic functionality, providing deep behavioral context. It defines the meaning of `fresh: true` vs `fresh: false` and describes the resulting behavior (e.g., recommending a wait or triggering `generate_report_for_stock`). It also mentions cost constraints (500/hour) and synchronous behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While extensive, the structure is highly efficient and appropriately sized for the tool's complexity. The use of bold headers (e.g., 'TWO WAYS IN') and categorized bullet points ensures maximum readability and zero-waste information delivery.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition is extremely complete for a high-complexity inventory tool. It details internal states (redis vs s3 source), usage patterns, and complex logic flows, leaving no critical decisions for the agent to make without the provided context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description significantly adds meaning beyond the schema by listing valid `event_types` and warning about the consequence of using invalid types (422 error). For `report_date`, it explains the trade-off between widening the window and incurring greater cost, as well as the 7-day retention policy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is exceptionally clear, stating that this tool is an 'INVENTORY' of report plans, distinguishing it from 'build' or 'return' functions. It explicitly contrasts itself with sibling tools like get_latest_report (PULL) and generate_research_report (topical writeups). The purpose is stated upfront and refined throughout the document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear, actionable usage guidelines in two distinct modes: 'Event-first' and 'Research-first.' Furthermore, it outlines a comprehensive five-step workflow for finding the most pertinent plans, linking this tool to several other sibling functions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources