Skip to main content
Glama

Search earnings transcripts

search_earnings_transcripts
Read-only

Search earnings-call intelligence from live calls, decomposed into atomic, quote-anchored claims and Q&A pressure points — never a raw transcript dump.

Retrieval for "claims" and "pressure_points" is lexical, not semantic. A nonempty query uses an OR-of-tokens full-text candidate set; strict websearch_to_tsquery matches receive a fixed ranking boost, so strict matches rank ahead of loose partial-term matches. Lower-ranked rows may match only some query terms. If that filtered full-text search returns no rows, a trigram fallback handles typos and sub-word variants. Quoted phrases use websearch syntax, but synonyms are not inferred: try the company's own vocabulary ("capex" and "capital expenditure", segment names, abbreviations). Word forms are matched by their English stem, so "lock" also finds "locked" and "locking", and a hyphen counts as a space, so "lock-in" also finds "locked in" and "locked into". For a broad screen, prefer this tool over run_sql regular expressions, which match only the exact spelling. An empty or partial result is not proof that management did not discuss a topic; coverage and vocabulary both matter.

Target and filter semantics:

  • "claims" (default) searches or browses normalized management/analyst claim rows. ticker, quarter_filter, claim_family, section, detail, and limit apply. claim_family matches primary or secondary families; section is "prepared_remarks" or "qa". Base rows include direction/value/unit where checkable, assertion_status, canonical_statement, verbatim_quote, speaker, speaker_role, section, transcript_id, source_block_index, qa_turn_id, and a source_link object. detail=true rows also carry entity_refs: the companies, products and bodies the claim names, each with raw_name, ref_type (competitor, customer, supplier, partner, product, regulatory_body, other, none), is_implied, entity_name, and entity_ticker.

  • "pressure_points" searches or browses what analysts pressed for and whether management confirmed, declined, deflected, or partially answered. ticker, quarter_filter, claim_family (the linked family), detail, and limit apply. section is ignored because every pressure point is from Q&A. Base rows include specific_ask, response_quality, refused_number, linked_family, linked_claim_id, verbatim_quote, speakers, transcript_id, source_block_index, qa_turn_id, and a source_link object. speakers lists every transcript turn the quote draws on, in spoken order, each with block_index, speaker, role (analyst, ceo, cfo, ...) and firm as stored for that turn; one quote usually spans an analyst's question and a manager's answer, so attribute each part of the quote to its own speaker.

  • "disclosure_profile" is a direct company lookup, not text search. The ticker is the first ticker value, or query when ticker is empty. Profiles are curated separately from transcript coverage, so a covered company may not have one; availability is "available" or "unavailable" accordingly. quarter_filter, claim_family, section, detail, and limit do not narrow it.

  • "coverage" is corpus inventory, not text search. ticker and limit apply; query, quarter_filter, claim_family, section, and detail do not narrow it. Rows report calls_covered, earliest_period, latest_period, latest_call_date (the call date of latest_period), claims, pressure_points, and recent_calls (the newest stored calls, each as its fiscal_period and call date).

Fiscal period labels follow each company's own fiscal year, and they are not always the calendar year of the call: a retailer's March 2026 call can be FY2025Q4. Before you pin quarter_filter, read the fiscal_period of the call you want from recent_calls. When a quarter_filter matches no call of the requested tickers, the result note lists the periods and call dates that are stored for them.

An empty query is a capped browse, not a completeness guarantee. Rows are ordered by newest fiscal period/call and then source-block (spoken) order within one call. Every response is limited to at most 50 rows, and a browse that reaches its limit may omit additional rows even if no truncation flag is present. For a latest-call note: (1) call "coverage" with one ticker, (2) read latest_period, (3) call "claims" with that ticker, quarter_filter=latest_period, query="", detail=true, and a deliberate limit, then (4) call "pressure_points" with the same ticker and quarter. Treat both browses as capped evidence, not a complete transcript. Narrow large result sets with ticker, quarter, target, claim_family, and (for claims) section. For media quotes, run_sql can read transcripts.appearance_claims.verbatim_quote; other transcript tables remain restricted.

Evidence rules: canonical_statement is normalized and must not be quoted as verbatim. Quote only verbatim_quote, with its speaker, role, ticker, and fiscal period. A […] inside verbatim_quote marks omitted transcript sentences between non-adjacent evidence spans: preserve it exactly when quoting, and never present text on either side of it as one continuous statement. When a quote is used, render source_link.source_label as the Markdown link text for source_link.source_url beside the claim. The label names the company, fiscal period, and earnings call transcript; never replace it with an ingestion vendor. Do not make a second call just to find a citation, do not invent a replacement when source_url is null, and do not call a document-level link exact context. source_locator still identifies the stored transcript block or Q&A turn. assertion_status is load-bearing: analyst_hypothesized is the analyst's framing, while mgmt_declined_to_confirm is a refusal, not a management assertion. Spoken call claims are a different source class from filed XBRL actuals (run_sql on the sec schema) and formally issued targets (the sec_guidance dataset); label them separately.

Examples:

  • Latest call: search_earnings_transcripts(query="", search_target="coverage", ticker="MU"), then repeat with search_target="claims", quarter_filter=<latest_period>, detail=true, limit=50, and finally with search_target="pressure_points" for the same ticker and quarter.

  • Cross-company theme: search_earnings_transcripts(query="capital expenditure capacity", search_target="claims", ticker="MU,NVDA", detail=true); inspect each returned row for topical support, do not assume every term matched, and retry vocabulary as needed.

  • Disclosure habits: search_earnings_transcripts(query="", search_target="disclosure_profile", ticker="MU").

claim_family codes: driver_attribution, forward_conviction, prior_view_revision, strategic_agreement, pricing_mechanics, demand_magnitude, capacity_milestone, competitive_positioning, cohort_behavior, cost_margin_bridge, capital_allocation, stated_risk_constraint, qa_dynamics, regulatory_policy, pipeline_backlog, commodity_hedging, ma_deal, labor_org. Topic paths (topic_path column) are rooted at: demand, supply_capacity, pricing, cost_margin, capital, competition, customer, product_roadmap, risk, governance.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search_earnings_transcripts"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum 1-50 rows (default 15). This is a hard cap, not proof the result is complete; narrow by ticker, quarter, target, family, and claims section.
queryNoFor claims/pressure_points: lexical websearch text; strict matches rank above loose partial-term matches, with trigram fallback only when FTS returns no rows. Empty text browses capped rows. For disclosure_profile, it can supply the ticker when ticker is empty. Ignored by coverage.
detailNoFor claims, add structured_fields, secondary_families, period, time_horizon, conviction_qualifier, denominator, falsifiable, and entity_refs (the companies, products and bodies the claim names: raw_name as spoken, ref_type such as competitor/customer/supplier, is_implied for an unnamed reference, and the matched entity_name/entity_ticker when known); for pressure_points, add tone_note. Ignored by disclosure_profile and coverage. The extractor's quantified flag is not published: it only records that the extractor wrote something into value, which the caller can already see in value itself.
tickerNoTicker, or a comma-separated list of tickers, for claims, pressure_points, and coverage; case-insensitive. Company names belong in company_name; pass only one of the two. A name passed here is still read as a name when it fits a stored company, and the response says so. Companies listed in India carry the NSE suffix ('RELIANCE.NS', 'INFY.NS') and companies listed in Switzerland carry '.SW' ('NESN.SW', 'ROP.SW'); a plain NSE or Swiss symbol is also accepted, but a symbol that is a US ticker ('INFY', 'ROP') selects the US listing. The response lists possible matches for a value that is not in the transcript corpus. disclosure_profile uses only the first ticker.
sectionNoprepared_remarks or qa; applies only to claims. Ignored for pressure_points because those rows are all Q&A, and ignored by lookup/inventory targets.
claim_familyNoClaim-family code. Matches primary/secondary families on claims and the linked family on pressure_points; ignored by disclosure_profile and coverage.
company_nameNoCompany name, or a comma-separated list of names, for claims, pressure_points, and coverage; case-insensitive ('nvidia', 'HP Inc', 'Ford Motor'). Each name resolves to the stored ticker(s) that match it best; the response reports the resolution and lists possible matches for a name that resolved to nothing. Pass either company_name or ticker, not both. disclosure_profile uses only the first resolved ticker.
search_targetNoclaims or pressure_points perform lexical retrieval/browse; disclosure_profile is a direct company lookup; coverage is corpus inventory.claims
company_filterNoDeprecated alias of ticker, kept for clients installed before the parameter was renamed. Pass ticker instead.
quarter_filterNoExact fiscal period such as FY2026Q3; applies to claims and pressure_points. Ignored by disclosure_profile and coverage. Pin this after coverage for a single-call browse.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / detail / description
      Previous value: -"For claims, add structured_fields, secondary_families, period, time_horizon, conviction_qualifier, denominator, and falsifiable; for pressure_points, add tone_note. Ignored by disclosure_profile and coverage. The extractor's quantified flag is not published: it only records that the extractor wrote something into value, which the caller can already see in value itself."New value: +"For claims, add structured_fields, secondary_families, period, time_horizon, conviction_qualifier, denominator, falsifiable, and entity_refs (the companies, products and bodies the claim names: raw_name as spoken, ref_type such as competitor/customer/supplier, is_implied for an unnamed reference, and the matched entity_name/entity_ticker when known); for pressure_points, add tone_note. Ignored by disclosure_profile and coverage. The extractor's quantified flag is not published: it only records that the extractor wrote something into value, which the caller can already see in value itself."
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/openWorld=false/destructive=false, and the description still adds substantial behavioral context: lexical OR-of-tokens retrieval with strict-match ranking boosts, trigram fallback on zero hits, stem and hyphen handling, a hard 50-row cap that may silently omit rows, and fiscal-period labeling pitfalls. It also discloses evidence rules (canonical_statement must not be quoted, […] span markers, citation rendering, assertion_status semantics) that annotations cannot convey.

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

Conciseness4/5

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

Purpose and retrieval semantics are front-loaded, and the target-by-target bullet structure plus worked examples make a long description navigable. It is nonetheless very long for a tool definition, with some duplication of the schema's own parameter notes and a claim_family code list buried at the end.

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?

With an output schema present, the description needn't explain return shapes, and it instead covers the things that matter: per-target row contents, cap/truncation caveats, fiscal-period resolution steps, entity_refs detail expansion, and citation/quoting obligations. An agent has everything needed to call it correctly and interpret capped results.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond it: the full claim_family code list, topic_path roots, the warning to pin quarter_filter from coverage's recent_calls because fiscal labels diverge from calendar years, and per-target applicability of ticker/section/detail. Some of this (target-specific ignoring of parameters) restates the schema, keeping it from a 5.

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?

Opens with a specific verb and resource ('Search earnings-call intelligence') and immediately scopes it as atomic, quote-anchored claims and Q&A pressure points rather than raw transcripts. It explicitly differentiates itself from run_sql regex and, via the evidence rules, from filed XBRL actuals and sec_guidance targets, so an agent can place it among siblings without opening schemas.

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?

Gives explicit when-to-use rules (broad screens prefer this over run_sql regex; empty query is a capped browse), when-not signals ('an empty or partial result is not proof that management did not discuss a topic'), and worked multi-step recipes for latest-call, cross-company theme, and disclosure-habit workflows. Alternatives and preconditions are named rather than inferred.

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