Skip to main content
Glama

Search media appearances

search_media_appearances
Read-only

Search what people said outside earnings calls, in two kinds of source:

  • Interviews: podcasts, TV interviews and conference talks by company executives, investors, fund managers, analysts, economists, journalists and other guests.

  • Central-bank documents: speeches, testimony, policy statements, minutes, press-conference transcripts, projections and reports from the Federal Reserve Board and regional Reserve Banks, the European Central Bank and euro-area national central banks, the Bank of England, the Bank of Japan, the Reserve Bank of India, the People's Bank of China, the Bank of Korea, the Hong Kong Monetary Authority, Taiwan's central bank and others. Documents in other languages yield English paraphrases, and each claim's verbatim_quote keeps the original language. A query in Chinese, Japanese, Korean or Thai also finds claims whose original-language quote holds every query word, such as 关税 for a Chinese episode about tariffs.

Use it for questions about what a named person or institution said: "what has Waller said about rate cuts", "what did the ECB say about inflation at its last meeting", "what did Jensen Huang say about export controls". Claims cover listed and unlisted companies (OpenAI, DeepSeek, MiniMax), institutions (the Federal Reserve, the European Central Bank, regulators), and whole markets and industries, not only the speaker's own employer.

How to search: put one to three key words in query, and put the speaker in person, the publisher in institution and the kind of document in appearance_type. A returned row must contain most of the query words, so a long question returns fewer rows than its key words alone. Retry with the speaker's own vocabulary or a synonym before concluding there is no coverage. No serving-time model interprets or expands the query: retrieval is lexical, not semantic. It tries strict full-text matching first, loose any-term full-text matching only when strict matching returns no candidates, then trigram matching only when both full-text stages are empty.

Canonical search_target values:

  • "search" (default): blended structured claims and broad passage cards.

  • "claims": normalized decision-relevant claims only.

  • "passages": broad substantive paraphrase cards only.

  • "pressure_points": stored refusal and declined-to-confirm claim rows.

  • "appearances": video-level catalog rows.

  • "coverage": company-level structured-corpus inventory.

  • "episodes": every episode the podcast feeds listed, newest first, transcribed or not (result_kind "feed_episode"): show, title, published date, link, transcribed, and status, which says why an episode was not transcribed. Use it for the newest episode of a show. A feed_episode row has no paraphrase and no quote. show narrows it to one show, and every query word must be in the title; date_from, date_to, limit and offset apply, and the other filters do not. A search with show that finds no transcribed row also returns the matching feed episodes under feed_episodes, next to the empty results.

"all" maps to "search", "videos" to "appearances", and "companies" to "coverage" for older clients; "search" is the primary blended target, not a legacy alias.

Result contracts:

  • search/claims/passages/pressure_points return result_kind, canonical_paraphrase, speaker, primary ticker, topic labels, video/channel/publication metadata, lexical relevance, and source_url (a timestamped YouTube deep link, the audio file with a #t= start time for a podcast whose stored link is an audio file, otherwise the episode page for a podcast, the document page for an official document, or the PDF page of a press-conference transcript). start_s is the second of the recording at which the row starts (null for official documents, which have no recording time); give it as the time when the podcast link opens an episode page. Claim and pressure_point rows also return verbatim_quote, the speaker's exact words in the original language, at most 1,000 characters (a longer quote is cut at a sentence end or a space, never inside a number), and quote_truncated, true when the quote was cut (both null on passage rows). detail=true adds normalized claim and attribution fields plus institution, document_kind and event_date (null for interviews), but never raw transcript text or evidence spans.

  • appearances returns video metadata, primary ticker, attribution metadata, matching claim count, URL, and relevance score. detail has no effect.

  • coverage returns company-level appearance, publication-date-span, channel, claim, and low-confidence-attribution counts. It is structured coverage, not a per-person acquired-video/hour inventory; query, sort, and detail have no effect.

Filter and ordering semantics:

  • company is comma-separated tickers and company names, mixed freely. A stored ticker matches the appearance's company or a section subject with that ticker; any other value is read as the name of a company, institution, or organisation a podcast section is about, matched after dropping punctuation, a leading "The", and corporate suffixes. Every ticker attached to a matched name joins the ticker filter, so "Alphabet" also reaches GOOGL rows. The result records company_tickers, company_names, company_matched, and company_unmatched (a value that matched nothing, with up to five possible matches); an unmatched value returns no rows, not an error. company_filter is the old name of company and behaves the same; passing both is an error. The appearances and coverage targets also match every value, upper-cased, against the entity references of claims (products, rivals, partners such as "CUDA"); a value found only there is listed under company_references.

  • person is a case-insensitive substring over the finding speaker and/or appearance speaker metadata. appearance_type applies to every target: podcast, tv_interview, conference and other for interviews; speech, testimony, minutes, statement, press_conference and hearing for official documents. country ("US") restricts every target to official documents of that country; institution ("Federal Reserve") is described with show and channel below.

  • claim_family restricts structured claims. With blended search it suppresses passage cards; pairing it with search_target="passages" is an error. For appearances/coverage it requires videos with matching structured claims.

  • date_from/date_to are inclusive YYYY-MM-DD bounds on the video's stored publication/upload date, which can differ from the recording or event date.

  • show, channel, and institution are case-insensitive substrings of a podcast show name, a YouTube channel name, and a publishing institution; each returns only rows of its own kind, and when more than one is given rows matching any of them are returned. show also matches the YouTube uploads of a show whose YouTube channel is registered for it.

  • relevance orders lexical score first, then publication date (a relevance search of claims with a query gives its rows in turns by episode, see below); newest orders publication date first, then lexical score. Coverage has fixed inventory ordering by latest covered publication date.

  • limit is one page of 1-50 rows and offset skips that many ranked rows before the page, so limit=15 with offset=15 returns rows 16-30 of the same ranking. Every result carries has_more, plus next_offset when more rows follow; call again with that offset to read the next page.

  • A relevance search of claims (search or claims target, with a query) also returns episode_ranking: the episodes of the page's rows, best first. Each lists video_title, channel, published_at, episode_score, matching_claims, title_match and result_ids (the result_id of each of its rows in results). Its rows go in turns: the best row of each episode, then the second-best row of each, so one episode does not fill the page. Such a search ranks its best 400 rows; a note says when the pages stop there.

With an empty query, each target browses its most recent rows (search and claims show claims only).

Evidence safety: canonical_paraphrase is FactIQ's summary, not a transcript quotation. Quote only verbatim_quote, exactly as returned, and say so when quote_truncated is true. Cite source_url (timestamped for YouTube and podcast audio files, page-anchored for PDF transcripts) and start_s with the returned speaker, publication date, and video or document metadata. FOMC minutes describe the meeting of event_date and are published three weeks later; the Committee, not one person, is their speaker. Do not put canonical_paraphrase in quotation marks: passage rows have no verbatim_quote, so quote a passage only after you verify the wording at the source link. The tool never returns raw transcript turns.

Detail-field safety: internal audit flags are not published; judge a claim from value, assertion_status, and the timestamped source link. company_attribution_confidence and company_attribution_source concern only the video-to-company/ticker assignment; inferred attribution is not independent confirmation.

Input Schema

NameRequiredDescriptionDefault
showNoCase-insensitive substring of a podcast show name, for example 'Odd Lots'. Returns podcast rows only: the show's feed episodes and its YouTube uploads when its YouTube channel is registered for it. With search_target='episodes' it names the show whose feed episodes are listed. Combine with channel or institution to also include YouTube or official-document rows that match those; rows matching any given name filter are returned.
sortNo"relevance" orders lexical score first and publication date second; a relevance search of claims with a query groups its rows by episode and gives them in turns (see episode_ranking). "newest" orders publication date first and lexical score second. Coverage uses its fixed company-inventory ordering.relevance
limitNoMaximum rows returned in one page, from 1 through 50. Use offset to read the pages after the first.
queryNoLexical search text: one to three key words, for example 'rate cuts' or 'export controls'. A returned row must contain most of the query words, so a long question returns fewer rows; after common words are dropped, the first eight words find rows and every word counts in the ranking. Put a phrase in double quotes to find it word for word: claims whose quote holds the phrase come first. Put the speaker in person and the publisher in institution instead of in the query. No serving-time model interprets the query. Retry synonyms or the speaker's own terminology if needed. Ignored by coverage; appearances matches only video title/channel metadata.
detailNoFor search/claims/passages/pressure_points, add normalized claim and company-attribution fields. Internal audit flags use bounded public names and include field_semantics; raw transcript text and evidence spans remain excluded. Has no effect on appearances or coverage rows.
offsetNoNumber of ranked rows to skip before the returned page, so offset=15 with limit=15 gives rows 16 through 30 of the same ranking. Every result reports has_more, and adds next_offset when more rows follow; repeat the call with that value to read the next page.
personNoCase-insensitive name substring. Returns statements whose speaker matches, by the stored label or by the name the result shows for it (a label NADELLA shown as Satya Nadella). Only when no such statement matches does it return rows of episodes whose host or guest list holds the name; a note then says that the speaker of those rows can be someone else.
channelNoCase-insensitive substring of a YouTube channel name, for example 'Bloomberg Television'. Returns YouTube rows only. Combine with show or institution to also include podcast or official-document rows that match those; rows matching any given name filter are returned.
companyNoComma-separated tickers and company names, mixed freely (for example, 'NVDA,OpenAI' or 'Federal Reserve,Alphabet'). A value that is a stored ticker matches the appearance's company or a section subject with that ticker. Any other value is read as the name of a company, institution, or organisation the podcast section is about, so unlisted companies (OpenAI, MiniMax, Manycore Tech), central banks, and regulators are found by name. Names are matched after dropping punctuation, a leading 'The', and corporate suffixes ('NVIDIA Corp.' finds NVIDIA; 'Alphabet' also reaches GOOGL rows), and each result records how every value was read: company_tickers, company_names, company_matched, and company_unmatched (with up to five possible matches per value that matched nothing). The appearances and coverage targets also match every value, upper-cased, against the entity references of claims (products, rivals, partners such as 'CUDA' or 'ChatGPT'); a value found only there is listed under company_references. Alternate spellings can return different appearances or coverage rows because reference names are matched exactly ('open ai' and 'OpenAI' select the same subject but not the same references); the claims rows are the same.
countryNoISO country code of the institution that published an official document, for example 'US'. Restricts every target to official documents of that country.
date_toNoInclusive YYYY-MM-DD upper bound on the video's stored publication/upload date, which may differ from its recording or event date.
date_fromNoInclusive YYYY-MM-DD lower bound on the video's stored publication/upload date, which may differ from its recording or event date.
institutionNoCase-insensitive substring of the institution that published an official document, for example 'Federal Reserve'. Returns official-document rows only; podcast and YouTube rows have no institution. Combine with show or channel to also include podcast or YouTube rows that match those; rows matching any given name filter are returned.
claim_familyNoOptional claim-ontology code. Blended search then returns structured claims only; appearances/coverage require matching claims. It is incompatible with search_target='passages'. Invalid codes return the valid vocabulary.
search_targetNoCanonical targets: "search" (default blended claims + passages), "claims" (normalized decision-relevant claims), "passages" (broad substantive paraphrase cards), "pressure_points" (refusals and declined-to-confirm claims), "appearances" (video catalog), and "coverage" (company-level structured-corpus inventory), and "episodes" (every episode the podcast feeds listed, transcribed or not, with title, date, link and the reason it was not transcribed; no paraphrase, no quote). Compatibility aliases are "all" -> "search", "videos" -> "appearances", and "companies" -> "coverage"; new callers should use the canonical values.search
company_filterNoOld name of company. Accepted with the same behaviour; the response note asks the client to update its plugin. Do not pass both.
appearance_typeNoOptional appearance-type filter. Interviews: podcast, tv_interview, conference, other. Official documents: speech, testimony, minutes, statement, press_conference, hearing. Applies to every canonical target.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / person / description
      Previous value: -"Case-insensitive name substring matched against the result speaker and/or the appearance speaker metadata."New value: +"Case-insensitive name substring. Returns statements whose speaker matches, by the stored label or by the name the result shows for it (a label NADELLA shown as Satya Nadella). Only when no such statement matches does it return rows of episodes whose host or guest list holds the name; a note then says that the speaker of those rows can be someone else."
    • changedInput schema / properties / query / description
      Previous value: -"Lexical search text: one to three key words, for example 'rate cuts' or 'export controls'. A returned row must contain most of the query words, so a long question returns fewer rows; put the speaker in person and the publisher in institution instead of in the query. No serving-time model interprets the query. Retry synonyms or the speaker's own terminology if needed. Ignored by coverage; appearances matches only video title/channel metadata."New value: +"Lexical search text: one to three key words, for example 'rate cuts' or 'export controls'. A returned row must contain most of the query words, so a long question returns fewer rows; after common words are dropped, the first eight words find rows and every word counts in the ranking. Put a phrase in double quotes to find it word for word: claims whose quote holds the phrase come first. Put the speaker in person and the publisher in institution instead of in the query. No serving-time model interprets the query. Retry synonyms or the speaker's own terminology if needed. Ignored by coverage; appearances matches only video title/channel metadata."
    • changedInput schema / properties / search_target / description
      Previous value: -"Canonical targets: \"search\" (default blended claims + passages), \"claims\" (normalized decision-relevant claims), \"passages\" (broad substantive paraphrase cards), \"pressure_points\" (refusals and declined-to-confirm claims), \"appearances\" (video catalog), and \"coverage\" (company-level structured-corpus inventory). Compatibility aliases are \"all\" -> \"search\", \"videos\" -> \"appearances\", and \"companies\" -> \"coverage\"; new callers should use the canonical values."New value: +"Canonical targets: \"search\" (default blended claims + passages), \"claims\" (normalized decision-relevant claims), \"passages\" (broad substantive paraphrase cards), \"pressure_points\" (refusals and declined-to-confirm claims), \"appearances\" (video catalog), and \"coverage\" (company-level structured-corpus inventory), and \"episodes\" (every episode the podcast feeds listed, transcribed or not, with title, date, link and the reason it was not transcribed; no paraphrase, no quote). Compatibility aliases are \"all\" -> \"search\", \"videos\" -> \"appearances\", and \"companies\" -> \"coverage\"; new callers should use the canonical values."
    • changedInput schema / properties / search_target / enum
      Previous value: -[
      -  "search",
      -  "claims",
      -  "passages",
      -  "pressure_points",
      -  "appearances",
      -  "coverage",
      -  "all",
      -  "videos",
      -  "companies"
      -]New value: +[
      +  "search",
      +  "claims",
      +  "passages",
      +  "pressure_points",
      +  "appearances",
      +  "coverage",
      +  "all",
      +  "videos",
      +  "companies",
      +  "episodes"
      +]
    • changedInput schema / properties / show / description
      Previous value: -"Case-insensitive substring of a podcast show name, for example 'Odd Lots'. Returns podcast rows only. Combine with channel or institution to also include YouTube or official-document rows that match those; rows matching any given name filter are returned."New value: +"Case-insensitive substring of a podcast show name, for example 'Odd Lots'. Returns podcast rows only: the show's feed episodes and its YouTube uploads when its YouTube channel is registered for it. With search_target='episodes' it names the show whose feed episodes are listed. Combine with channel or institution to also include YouTube or official-document rows that match those; rows matching any given name filter are returned."
    • changedInput schema / properties / sort / description
      Previous value: -"\"relevance\" orders lexical score first and publication date second; \"newest\" orders publication date first and lexical score second. Coverage uses its fixed company-inventory ordering."New value: +"\"relevance\" orders lexical score first and publication date second; a relevance search of claims with a query groups its rows by episode and gives them in turns (see episode_ranking). \"newest\" orders publication date first and lexical score second. Coverage uses its fixed company-inventory ordering."
  2. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Lexical search text. Natural-language questions are accepted because person/question scaffolding is normalized, not because a serving-time model interprets them. Use concise topical vocabulary and retry synonyms or the speaker's own terminology if needed. Ignored by coverage; appearances matches only video title/channel metadata."New value: +"Lexical search text: one to three key words, for example 'rate cuts' or 'export controls'. A returned row must contain most of the query words, so a long question returns fewer rows; put the speaker in person and the publisher in institution instead of in the query. No serving-time model interprets the query. Retry synonyms or the speaker's own terminology if needed. Ignored by coverage; appearances matches only video title/channel metadata."
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds real behavioral context beyond them: retrieval is lexical with a strict full-text → loose any-term → trigram fallback, pagination via has_more/next_offset, the 400-row ranking cap, episode_ranking turn-taking, and explicit quote-safety rules. The only gap is that the long result-contract section largely duplicates what the existing output schema already exposes, which blunts its added value somewhat.

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

Conciseness2/5

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

It is front-loaded and sectioned, which helps, but at roughly 1,300 words it is far beyond what a search tool needs, and large blocks (result contracts, source_url/start_s formatting, per-target filter applicability) restate the very detailed schema and output schema almost verbatim. The duplication inflates prompt cost without adding decision-relevant information.

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

Completeness4/5

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

For a 17-parameter, multi-target tool with an output schema, the description covers routing, filter interaction, error conditions, and citation safety — nothing an agent needs is missing. It is arguably over-complete, restating return-value detail the output schema already carries.

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 description coverage is 100%, so the baseline is 3; the description still earns credit for cross-parameter semantics the schema states only locally — e.g. that a matched company name pulls in every ticker attached to it, that show/channel/institution combine as an OR, that claim_family plus search_target='passages' is an error, and that unsupported filters silently no-op on the episodes target.

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 precise verb+scope ("Search what people said outside earnings calls") and enumerates the two source families, explicitly excluding earnings calls — which is exactly the sibling tool search_earnings_transcripts. An agent can route between this and the earnings tool without opening either schema.

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 concrete example questions ("what has Waller said about rate cuts"), tells the caller how to decompose a question into query/person/institution/appearance_type, advises retrying with synonyms before concluding no coverage, and names which search_target to pick for newest-episode, coverage, or refusal queries.

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