Skip to main content
Glama

Server Details

Podcast intelligence for agents: transcripts, clips, speaker diarization, mention tracking.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
74.0% over 55 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.3/5.0

Scored across 28 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions (resolve vs get vs list, search vs find mentions are explicitly differentiated). Some overlap exists among the resolve tools (particle_entity_resolve, particle_person_resolve, particle_company_resolve), but descriptions provide clear guidance, so misselection is unlikely though possible.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with the particle_ prefix and a verb_noun or domain_action structure. There is no mixing of conventions, and the naming is highly predictable.

Tool Count3/5

With 28 tools, the count is heavy for a single server, exceeding the typical 15-tool sweet spot. However, the domain is broad (podcast intelligence plus alerts) and each tool has a unique purpose with no obvious redundancy, so the count is borderline but justifiable.

Completeness4/5

The surface covers core operations: entity resolution, profile retrieval, podcast/episode search and discovery, alert CRUD, and topic browsing. Minor gaps exist (e.g., sponsor/ad presence tools are referenced but not advertised), but the meta-tools particle_catalog and particle_call allow agents to discover and execute any public tool, providing a workaround.

Available Tools

28 tools
particle_alert_createA
Destructive
Inspect

Create an alert that watches a single entity and sets up recurring email delivery to external recipients whenever it is mentioned on a podcast episode (kind=ENTITY_MENTION) or appears as a speaker (kind=PODCAST_SPEAKER). Pass the entity slug from a resolve tool — resolve a name with particle_entity_resolve, then create the alert with the slug it returns. An alert watches exactly one entity; to cover several entities, call this tool once per entity.

An active alert emails future matches to its configured recipients at the selected delivery cadence until paused or deleted. Only recipients verified for your organization receive alert emails; pending recipients may be saved but stay silent until verified.

When a name has no entity slug, or its entity has no podcast coverage (a startup known by a brand that differs from its legal name, a product, a drug, a code word), create a kind=KEYWORD_MENTION alert with keyword instead of entities. It fires whenever the phrase is spoken — the match particle_podcast_search_transcripts makes for a double-quoted keyword_search phrase (words adjacent and in order), not the looser unquoted match — so also set description to say what the phrase means; that is how same-name mentions of something else are filtered out.

Use the optional filters object to narrow what gets surfaced on every channel (matches list, realtime email, daily/weekly digest). Four independent axes: languages (BCP-47-like tags like ['en','pt-BR'] — empty means all languages), relevance (EVERYTHING returns on-target + incidental matches, RELEVANT narrows to on-target only — dropping passing mentions), source_popularity (ANY keeps every source, POPULAR keeps only matches from podcasts in the top 5% by chart popularity), and speaker_roles (PODCAST_SPEAKER alerts only — REPLACES the default appearance set GUEST/PANELIST/CORRESPONDENT/AUDIENCE/SOUNDBITE_SPEAKER; sending it on an ENTITY_MENTION alert errors with unprocessable_entity).

Billing: creating an active alert can move an eligible organization's subscription from its credit/trial phase to paid fixed-fee billing. Explain this possible billing change and obtain the user's explicit confirmation before creating an active alert. Creating a paused alert (is_active=false) does not trigger this billing transition.

After creation the alert immediately backfills matches from the past week (visible via particle_alert_list_matches) without sending emails for them. To see what an alert would catch BEFORE committing, use particle_alert_preview first. The created alert's id feeds particle_alert_get, particle_alert_update, particle_alert_delete, and particle_alert_list_matches.

Alerts are not covered by zero data retention: the alert's definition and its matched results are stored as part of the alerts feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoWhat signal to watch for. ENTITY_MENTION (default) fires whenever a watched entity is mentioned on a podcast episode. PODCAST_SPEAKER fires only when a watched person is themself an identified speaker (guest/panelist/correspondent/audience). KEYWORD_MENTION fires whenever keyword is spoken — use it when the name has no entity slug (a resolve tool finds nothing, or the right entity has no episodes). Kind is fixed at creation.
titleYesHuman-readable title for the alert (e.g. 'OpenAI mentions').
filtersNoPersistent narrowing applied to every surface the alert produces (matches list, realtime email, daily/weekly digest). Omit for no filters — every detected match is surfaced. See AlertFiltersInput for the four axes (languages, relevance, source_popularity, speaker_roles).
keywordNoKEYWORD_MENTION alerts only (and required for them): the phrase to watch, e.g. Lightfield. Matches like a double-quoted keyword_search phrase — the words adjacent and in order, ignoring case and punctuation, on whole words — in topic-discussion and interview segments, never ad reads, intros, or outros. Also set description to say what the phrase means (e.g. 'Lightfield, the AI-native CRM'); it is how same-name mentions of something else get filtered out. A phrase that matched more than 700 podcast episodes in the past week is rejected as too broad.
entitiesNoThe entity to watch, as a single slug from the resolve tools (particle_entity_resolve, particle_person_resolve, particle_company_resolve). Person, company, and place/other (knowledge-graph) slugs are all accepted; the resolved type is echoed back in the response. Exactly one for ENTITY_MENTION and PODCAST_SPEAKER — an alert watches a single entity, so create one alert per entity. Omit for KEYWORD_MENTION.
is_activeNoWhether the alert produces matches. Defaults to true. Set false to create it paused.
descriptionNoOptional longer description of what the alert is for.
notificationsNoEmail addresses for recurring alert notifications. Only recipients verified for your organization receive alert emails; pending recipients may be saved but stay silent until verified. At least one recipient must be deliverable. When omitted, defaults to your account email if available; otherwise pass at least one.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
delivery_cadenceNoHow often matches are emailed: REALTIME (default, one email per match), DAILY (one bundled email each morning), or WEEKLY (one bundled email Monday).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and openWorldHint=true, so the description is not obligated to restate mutability. It adds valuable context beyond the annotations: the active-alert billing transition with an explicit confirmation requirement, the paused-alert exception, the silent backfill of the past week, the verified/pending recipient behavior, and the zero-data-retention exclusion for alerts. It does not, however, explain why destructiveHint is set (e.g., what gets removed or overwritten), which is a modifier worth flagging.

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

Conciseness3/5

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

The description is well organized, with a clear creation paragraph followed by separate paragraphs on entity vs. keyword, filters, billing, and post-creation behavior. However, it is long and repeats some schema content (the keyword phrase semantics, the speaker_roles replacement behavior), which inflates length without adding new information for those points.

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?

Given a 10-parameter tool with a nested filters object, no output schema, and mutation semantics, the description covers the full end-to-end workflow: resolve, preview, create, backfill, downstream ids, billing consent, and retention caveat. Nothing an agent needs to invoke it correctly is missing.

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 adds meaning beyond the schema on several parameters: the double-quoted phrase matching semantics for `keyword` and the requirement to explain the phrase in `description`; the interaction between `filters` and every downstream surface; the REPLACES-not-intersects behavior of `speaker_roles` and the error when sent with ENTITY_MENTION; the billing effect of `is_active`; and the chaining guidance for `output_format`. This goes beyond the schema text for several fields.

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 states a specific verb and resource ('Create an alert that watches a single entity') and enumerates the three kinds of signal it can watch (ENTITY_MENTION, PODCAST_SPEAKER, KEYWORD_MENTION). It distinguishes itself from siblings by naming particle_alert_preview as the pre-commit alternative and listing downstream alert tools that consume the returned id.

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 gives explicit when-to-use rules: use ENTITY_MENTION with a slug from particle_entity_resolve; fall back to KEYWORD_MENTION when there is no slug or no podcast coverage; run particle_alert_preview before committing. It also routes the agent to the resolve tools by name and states that one alert covers one entity, so multi-entity coverage means multiple calls.

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

particle_alert_delete
Destructive
Inspect

Delete an alert. This is a soft delete: the alert stops producing matches and disappears from particle_alert_list, but its past matches and deliveries are retained for audit. To pause an alert instead of removing it, use particle_alert_update with is_active=false.

Only the alert's creator or an organization OWNER or ADMIN can delete it; an API key acts as the user who created the key. Other callers get a 403.

ParametersJSON Schema
NameRequiredDescriptionDefault
alert_idYesAlert id to delete.
particle_alert_getA
Read-only
Inspect

Fetch a single alert's full configuration — title, kind, cadence, watched entities (with names), notification emails, and any active filters (languages, relevance, source_popularity, speaker_roles). The filters section is omitted when the alert carries none. By default the response is just the configuration; request include=['matches'] to embed the most recent matches it has caught and include=['deliveries'] for the email audit log. For the full, paginated match history with transcript excerpts, use particle_alert_list_matches.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoOptional sections to embed: 'matches' for the most recent matches the alert has caught, 'deliveries' for the email delivery audit log.
alert_idYesAlert id from particle_alert_list or particle_alert_create.
match_limitNoHow many recent matches to embed when include=matches (1-25, default 5). Use particle_alert_list_matches for full pagination and transcript windows.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.7/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, so the safety profile is known. The description adds useful behavioral context: it notes the 'filters' section is omitted when none exist, explains that include embeds additional data, and warns that JSON output is 'larger and noisier for an LLM to read.' It does not contradict annotations. It doesn't cover pagination or rate limits, but those are delegated to the sibling tool.

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?

The description is a single, well-organized paragraph that front-loads the core purpose, then flows naturally into optional includes, then the sibling pointer. Every sentence earns its place—no filler or redundancy. The structure makes it easy for an agent to quickly extract the key decision points.

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?

For a tool with 4 parameters, no output schema, and rich annotations, the description covers all necessary operational aspects: default return, optional sections, parameter usage, output format guidance, and redirection to the sibling for extended functionality. Nothing essential is missing for an agent to invoke it correctly.

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% and each parameter already has a description. The description adds value by explaining the default behavior of include (not specified in schema) and providing rationale for choosing output_format (markdown vs json), including a caution about JSON verbosity. It also clarifies the relationship between match_limit and include, reinforcing the schema's default of 5. This goes beyond mere repetition.

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 clearly states a specific verb ('Fetch') and resource ('a single alert's full configuration'), enumerates the content (title, kind, cadence, watched entities, emails, filters), and explicitly differentiates from the sibling tool particle_alert_list_matches by noting it returns the full paginated history. This leaves no ambiguity about the tool's role.

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?

The description provides explicit usage guidance: it explains the default behavior (configuration only), how to request embedded sections via include, and directly instructs when to use an alternative tool ('For the full, paginated match history with transcript excerpts, use particle_alert_list_matches'). It also clarifies when to use output_format=json (programmatic chaining) vs markdown, covering both when and when-not to use this tool.

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

particle_alert_listA
Read-only
Inspect

List the alerts in your project, newest first. Each entry carries the alert id — feed it into particle_alert_get for full configuration, particle_alert_list_matches for what it has caught, or particle_alert_update / particle_alert_delete to manage it.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoAlerts per page (1-100, default 25).
cursorNoOpaque pagination cursor from a previous response's cursor field.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and destructiveHint, so the safety profile is covered. The description adds useful behavioral detail: results are newest-first, each entry carries the alert id, and this is scoped to the current project. This goes beyond the annotations without contradicting them.

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?

Two compact sentences with no filler. The main behavior is front-loaded, and the downstream routing adds high-value guidance without bloating the description.

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 read-only list tool with no output schema, the description gives the essential return clue (each entry carries the alert id) and ordering. It does not enumerate all entry fields, but it provides enough for an agent to decide to call the tool and to chain into the appropriate follow-up tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the input schema fully documents limit, cursor, and output_format. The description adds no parameter-specific details but is not required to; it stays at the baseline because it does not enrich parameter meaning beyond the schema.

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 clearly states the operation ('List the alerts in your project'), the resource, and the ordering ('newest first'). It also distinguishes itself from sibling tools by explaining what each entry's id can feed into, making it easy to tell apart from particle_alert_list_matches and particle_alert_get.

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

Usage Guidelines4/5

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

The description clearly establishes the listing use case and tells the agent what to do with the returned alert ids, routing to get, list_matches, update, or delete. It does not explicitly state when not to use this tool versus create or preview, but the intended context is clear enough.

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

particle_alert_list_matchesA
Read-only
Inspect

List the matches an alert has caught, newest first — the payoff of an alert. Each match names the watched entity and the podcast episode it was detected on (with episode and podcast slugs that feed particle_podcast_get_episode and particle_podcast_resolve). Use view=detailed to include the transcript excerpts around each mention, and after/before to scope to a date range. Backfilled matches (from the past-week sweep at creation) are flagged and never triggered an email.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoDetail level. 'summary' (default) returns each match's entity, episode, and counts. 'detailed' also includes the transcript excerpt windows around each mention.
afterNoOnly matches detected on or after this ISO date (e.g. 2026-05-01).
limitNoMatches per page (1-100, default 25).
beforeNoOnly matches detected on or before this ISO date.
cursorNoOpaque pagination cursor from a previous response's cursor field.
alert_idYesAlert id whose matches to list.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish read-only and non-destructive behavior. The description adds useful behavioral details beyond those annotations: results are newest-first, optional view=detailed changes payload richness, and backfilled matches are flagged and never triggered an email. No contradiction with annotations.

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?

Three tight sentences front-load the core purpose, then add the most decision-relevant parameter guidance and one important data nuance. No redundant restating of schema fields; every clause earns its place.

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?

For a read-only list tool with full schema coverage of all 7 parameters and annotations covering the safety profile, the description supplies the missing result semantics (match contents, slugs, excerpt behavior, backfill flag). An agent has what it needs to select and call this correctly.

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. The description adds extra semantic value by explaining what view=detailed yields (transcript excerpts), what after/before do (date-range scoping), and how returned slugs connect to particle_podcast_get_episode / particle_podcast_resolve.

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 opens with a specific verb and resource ('List the matches an alert has caught') and adds ordering ('newest first'), making the tool's job unmistakable. It also clarifies what a match contains (watched entity, podcast episode, slugs) and differentiates this from alert-lifecycle siblings like particle_alert_list.

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

Usage Guidelines4/5

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

The phrase 'the payoff of an alert' gives clear context for when this belongs in a workflow, and the description gives direct guidance for optional behavior ('Use view=detailed... after/before...'). It does not explicitly name alternatives or state when not to use the tool, so it stops short of a top score.

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

particle_alert_previewAInspect

Preview how often an alert would fire BEFORE creating it. Sweeps the past N days (default 7, max 30) for the given entity (or keyword, for kind=KEYWORD_MENTION) and returns the total match count, a per-day breakdown, and a small sample of the most recent matches with episode context. Use this to size an alert (REALTIME vs DAILY vs WEEKLY cadence) or to confirm the entity slug watches the right thing, then call particle_alert_create with the same entity slug (for KEYWORD_MENTION, the same keyword instead). Pass the same filters you plan to save so the estimate matches what the alert would surface — the languages and speaker_roles axes narrow the sweep; relevance and source_popularity are read-time projections that don't, so the count is an upper bound when relevance=RELEVANT. Starts a background sweep and caches its progress and results; it does not create an alert or send notifications.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoSignal to preview. Defaults to ENTITY_MENTION.
filtersNoSame as particle_alert_create.filters. Pass the filters you intend to save so the estimate reflects what the alert would actually surface. Only languages and speaker_roles narrow the historical sweep; relevance and source_popularity are read-time projections that don't run on historical episodes, so setting them leaves the count unchanged (the estimate is an upper bound when relevance=RELEVANT).
keywordNoSame as particle_alert_create.keyword — required for KEYWORD_MENTION. A phrase that matched more than 700 podcast episodes in the past week is rejected as too broad, as on create.
entitiesNoThe entity to preview, as a single slug (from the resolve tools), same as particle_alert_create.entities — exactly one for entity kinds, omitted for KEYWORD_MENTION.
window_daysNoHow many days back to sweep (1-30, default 7).
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations (readOnlyHint=false, destructiveHint=false) are minimal and all-negative, so the description carries the behavioral burden and discharges it exceptionally. It discloses the background sweep and caching side effect (which explains why readOnlyHint=false), the non-destructive guarantee, the upper-bound caveat when relevance=RELEVANT, and which filter axes actually narrow the historical sweep vs which are read-time projections. No contradiction with annotations; the side-effect disclosure actually reconciles the readOnlyHint=false flag.

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?

The description is dense (~120 words) but logically ordered: purpose → mechanism → usage workflow → filter semantics → side-effect caveats. Every sentence carries distinct information and the purpose is front-loaded. Slight deduction for redundancy, since the filter projection/upper-bound caveat is restated in the schema's filters.description, making the overall definition longer than strictly necessary.

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 complex 6-parameter tool with sparse annotations and no output schema, the description covers the essentials well: return content (count, breakdown, sample), non-destructive behavior, filter semantics, and the create-workflow link. The main gap is the sync/async ambiguity — it says 'starts a background sweep and caches its progress and results' without clarifying whether the call blocks for the sweep or returns immediately with progress, nor how to retrieve the cached results afterward. A minor gap given the otherwise thorough coverage.

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% with rich per-parameter descriptions, so the baseline is 3. The tool description adds genuine cross-parameter orchestration value: it ties entities/keyword to the derive-from-create workflow, and clarifies which filters (languages, speaker_roles) narrow the sweep vs which (relevance, source_popularity) are projections that leave the count unchanged. It stops short of 5 because individual parameter semantics are already exhaustively documented in the schema.

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 opening sentence 'Preview how often an alert would fire BEFORE creating it' grounds the tool with a specific verb and resource, and the description further specifies the mechanism (sweep past N days), return values (match count, per-day breakdown, sample), and explicit exclusions ('does not create an alert or send notifications'). It clearly differentiates from siblings: it is not particle_alert_create (no creation), not particle_alert_get/list (no existing-alert read), and not particle_alert_list_matches (no live-match listing).

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?

The description gives explicit when-to-use guidance: 'Use this to size an alert (REALTIME vs DAILY vs WEEKLY cadence) or to confirm the entity slug watches the right thing.' It also names the exact continuation workflow — 'then call particle_alert_create with the same entity slug' — and instructs the caller to reuse planned filters. This is turnkey routing to the correct sibling.

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

particle_alert_updateA
Destructive
Inspect

Update an existing alert. Only the fields you pass change; the entities and notifications lists, when provided, replace the whole set (pass a single entity slug from the resolve tools, same as particle_alert_create — an alert watches exactly one entity). A KEYWORD_MENTION alert takes a new keyword instead of entities. Use is_active to pause or resume an alert without deleting it. An alert's kind is fixed at creation — to change it, create a new alert.

Notification changes affect future recurring email delivery to external recipients; resuming an alert restarts delivery to its configured destinations. Alert emails follow delivery_cadence until paused or deleted. Only recipients verified for your organization receive alert emails; pending recipients may be saved but stay silent until verified.

The optional filters object replaces the alert's filter set wholesale — omit to leave the existing filters unchanged, send {} to clear all filters. Same four axes as particle_alert_create.filters: languages, relevance (EVERYTHING/RELEVANT), source_popularity (ANY/POPULAR), and speaker_roles (PODCAST_SPEAKER alerts only — sending it on an ENTITY_MENTION alert returns unprocessable_entity).

Alerts are not covered by zero data retention: the alert's definition and its matched results are stored as part of the alerts feature.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew title.
filtersNoReplace the alert's filter set wholesale. Omit to leave the existing filters unchanged; send an empty object {} to clear all filters. Same four axes as particle_alert_create.filters (languages, relevance, source_popularity, speaker_roles).
keywordNoReplacement phrase for a KEYWORD_MENTION alert; omit to leave it unchanged. Not accepted on other kinds. Matches already recorded keep the phrase they fired on.
alert_idYesAlert id to update.
entitiesNoReplacement watch target as a single entity slug (from the resolve tools). When provided, replaces the entire existing watch list — exactly one entity; omit to leave entities unchanged. Not accepted on KEYWORD_MENTION alerts.
is_activeNoPause (false) or resume (true) the alert.
descriptionNoNew description.
notificationsNoReplacement recipients for recurring alert emails. Only recipients verified for your organization receive alert emails; pending recipients stay silent until verified. When provided, replaces the entire existing set; omit to leave them unchanged.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
delivery_cadenceNoNew delivery cadence.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the destructiveHint/openWorldHint annotations: replacement (not merge) semantics for entities, notifications, and filters, the {} vs omit distinction for filters, notification effects on future recurring email delivery, verified-recipient gating, cadence behavior, and the explicit disclosure that alerts are not covered by zero data retention.

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?

Front-loads the core update semantics and then organizes remaining detail into distinct paragraphs (replacement rules, delivery/recipients, filters, retention). The filters paragraph duplicates the schema's filters description fairly closely, which is the main source of redundancy.

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?

For a 10-parameter mutation tool with no output schema and a nested filters object, the description covers the behaviors an agent actually needs: partial-update semantics, kind constraints, replacement vs omit, error conditions (speaker_roles on ENTITY_MENTION), and the retention caveat.

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 cross-parameter semantics the schema states only per-field: keyword vs entities mutual exclusivity by alert kind, and the wholesale replacement behavior of the nested filters object including the {} clears-all case. It largely mirrors the schema's filter documentation, which caps it at 4.

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?

States a specific verb+resource ('Update an existing alert') and immediately disambiguates the update model: only passed fields change, while entities/notifications replace wholesale. It also draws the boundary against particle_alert_create by noting an alert's kind is fixed at creation and a new alert is needed to change it.

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

Usage Guidelines4/5

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

Gives clear context: use resolve tools for entity slugs, use is_active to pause/resume instead of deleting, and create a new alert to change kind. It does not explicitly route between particle_alert_get/list/preview, but the update-vs-create-vs-delete boundary is well covered.

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

particle_callA
Destructive
Inspect

Dispatch any public Particle tool by name. Compatibility fallback for harnesses that block calling tools that weren't advertised on tools/list — every public Particle tool is executable by name, so prefer calling discovered tools directly when your harness allows it. Identical metering and plan gating apply either way. Use particle_catalog to discover tool names and input schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYesFlat name of any public Particle tool (e.g. 'particle_podcast_get_episode'). Discover names and schemas with particle_catalog.
argumentsNoArguments object for the target tool, matching its input schema.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, openWorldHint=true, and the description adds context about identical metering and plan gating. It also clarifies that all public tools are executable by name. This complements the annotations without contradicting them.

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?

Concise and logically ordered: core behavior first, then fallback rationale, then guidance to discover schemas. No redundant repetition of the schema.

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?

Strong for a dynamic dispatcher tool: it covers when to use it, how to discover target tools, and notes metering/plan gating. It lacks output format details, but given the dynamic nature and the explicit pointer to particle_catalog, it is largely complete.

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 schema already documents the two parameters. The description adds meaning by explaining how to populate them: use particle_catalog for names and schemas, and pass arguments matching the target tool's input schema.

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?

Clearly states a specific action and resource: 'Dispatch any public Particle tool by name.' It clearly differentiates itself as a compatibility fallback versus the sibling particle_* tools, explicitly saying to prefer calling discovered tools directly when the harness allows.

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?

Explicitly states when to use the tool: as a fallback for harnesses that block calling tools not advertised on tools/list, and when not to prefer it: 'prefer calling discovered tools directly when your harness allows it.' Links to particle_catalog for discovery.

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

particle_catalogA
Read-only
Inspect

Browse the full Particle tool catalog. Your tools/list shows only the default categories, but EVERY public Particle tool is callable by name regardless of what was advertised — call this tool to discover the rest.

Without arguments: the categorical menu (every category with tool names, one-line summaries, and an ↳ line listing each tool's expand options). With category: the full input schema for each of that category's tools, ready to call.

Two conventions the one-line summaries don't convey, so read tools through this lens:

  • Tools are lean by default and EXPAND. Most return a minimal payload and opt into richer sections via an include array (e.g. a company's people, products, and competitors; a person's roles and podcast appearances) or change behavior via a mode/format switch. The ↳ line names these — a tool does far more than its summary alone implies.

  • Responses are a graph; slugs are edges. A slug a tool returns (person, company, podcast, episode, publisher, guest) is a valid input to the other tools, so you resolve once and then traverse: company → its people → a person's podcast appearances → that episode's transcript and every entity in it.

Categories on offer:

  • system (always-on): Discovery meta-tools: browse the full tool catalog and call any tool by name.

  • podcasts (default): Resolve podcasts, list and fetch episodes, search transcripts, and find entity mentions.

  • people (default): Resolve people and entities to canonical handles and fetch person profiles.

  • companies (default): Resolve companies and fetch company profiles with people, products, and competitors.

  • topics (default): Browse the hierarchical topic taxonomy used to classify podcast episodes.

  • podcast_rankings (default): Podcast chart rankings: current charts, movers, and ranking history.

  • podcast_guests (default): Podcast guest directory, trending guests, and per-guest appearance profiles.

  • podcast_advertising (opt-in): Podcast advertising intelligence: sponsor rosters, ad presence, and sponsor leaderboards.

  • podcast_publishers (opt-in): Podcast publisher profiles with their shows, bias profile, and suitability profile.

  • podcast_ratings (opt-in): Listener review ratings for podcasts: summaries and recent rating lists.

  • podcast_bias (opt-in): Corpus-wide political-bias views: publisher leaderboards and publishers by bias result.

  • podcast_suitability (opt-in): Corpus-wide GARM brand-suitability views: publisher leaderboards and category exposure.

  • alerts (default): Create and manage alerts that watch entities for podcast mentions or speaker appearances, preview match frequency, and review the matches an alert has caught.

  • radar (opt-in): Display selected research results as embedded Radar cards, with a Markdown fallback. Rendering is free and does not fetch data.

Opt-in categories can also be advertised on tools/list by adding ?include=<category> (comma-separated, or all) to the connection URL, or the X-Particle-Include header. ?exclude= hides default categories; ?tools=<name,...> pins the advertised list to exact tools instead. Discovery is free; tool execution is metered and plan-gated as usual.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoExposure category name (e.g. 'podcast_bias'). When set, the response includes the FULL input schema for every tool in that category — call this before invoking a tool you haven't seen advertised. When omitted, returns the categorical menu: every category with its tools and one-line summaries.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.9/5.0
Behavior5/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 substantial behavioral context: the no-args categorical menu vs. full-schema mode, the 'lean by default and EXPAND' convention, the graph/slugs-as-edges model, and the warning that JSON output is 'larger and noisier for an LLM to read.' These are non-obvious traits that materially affect how an agent uses the tool. No contradiction with annotations exists.

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?

The description is long but rigorously structured with bold headers, bullets, and a front-loaded purpose statement. Each section—categories, expansion conventions, graph traversal, opt-in configuration, and output format guidance—earns its place because this is a meta-tool that must explain the entire ecosystem to be useful. There is no filler or redundant restatement of the schema.

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?

For a discovery tool with no output schema, the description is remarkably complete: it covers all categories, what each invocation mode returns, how to read the menu's '↳' expand lines, how slugs connect tool responses, and how to control advertised categories via URL query parameters or headers. An agent has everything needed to call it correctly and use the results to traverse the Particle ecosystem.

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 operational meaning beyond the field descriptions: it explains that category triggers 'the FULL input schema for every tool in that category' and that markdown is the LLM-facing default while JSON is for programmatic exact extraction. It also enumerates the category options, effectively enriching the category parameter's possible values.

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 opens with a specific verb and resource: 'Browse the full Particle tool catalog.' It also clearly distinguishes itself as a meta-tool compared to the functional sibling tools, explaining that tools/list only advertises default categories while this tool discovers every callable public tool. This is far more than a tautology or vague summary.

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?

The description explicitly says 'call this before invoking a tool you haven't seen advertised' and contrasts the advertised tools/list with the full catalog. It also explains when to use no arguments versus the category argument, and covers opt-in/exclusion mechanics via URL parameters or headers. This leaves no ambiguity about when to invoke it.

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

particle_company_getA
Read-only
Inspect

Return a bundled profile for one company: identifiers (slug, ticker, domain, CIK, QID, linked entity), name, and description.

Request optional sections via include: 'people' for current leadership and notable people (person slugs feed particle_person_get), 'products' for the three-level product hierarchy, 'competitors' for the competitor list, 'external_links' for the company's LinkedIn, social profiles, domain, Wikidata QID, SEC CIK and tickers. The default response is lean — include only what you need.

For sponsor/advertising analytics on this company, use particle_company_get_podcast_ad_presence instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoOptional response sections: 'people' (current leadership and notable people), 'products' (three-level product hierarchy), 'competitors' (competitor list), 'podcast_recommendations' (the ten podcasts the company could advertise on next, with the shows it already buys that led there; premium), 'external_links' (LinkedIn, social profiles, domain, Wikidata QID, SEC CIK and tickers). Default response is lean — request only what you need.
company_slugYesCompany identifier — accepts slug (e.g. 'nvidia'), domain (e.g. 'nvidia.com'), or canonical ID. If you already know the domain you can call this tool directly without first running particle_company_resolve.
product_statusNoComma-separated lifecycle filter for include=products (e.g. 'active' or 'active,announced'). Allowed values: active, announced, discontinued, rumored. Defaults to 'active'.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true, openWorldHint=true, and destructiveHint=false, lowering the bar. The description adds genuine context beyond those: the lean-default response shape, what each include section returns, the 'premium' flag on podcast_recommendations, and the cross-tool pointer that person slugs feed particle_person_get. It doesn't cover failure modes or rate limits, but for a read-only fetch with annotations present this is a strong addition.

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?

The description is front-loaded and each sentence earns its place: purpose in sentence one, optional-section semantics in sentence two, sibling routing in sentence three. The length is proportionate to the five optional include sections it must document, with zero filler.

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?

With no output schema, the description carries the burden of explaining return values, and it does — default payload contents (identifiers, name, description) and each optional section's contents, including the ten-podcast premium recommendation list. The only gaps are edge-case behavior (unknown slug, empty results) and what 'premium' means for the caller (billing/access implications), which are minor for a read-only fetch tool.

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

Parameters3/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 schema already documents include, company_slug, and product_status with detailed descriptions. The description adds marginal workflow nuance ('If you already know the domain you can call this tool directly without first running particle_company_resolve') and reiterates the include options, but does not meaningfully explain anything the schema leaves out.

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 opening sentence names the verb ('Return'), the resource ('a bundled profile for one company'), and enumerates the contents (identifiers, name, description). It explicitly distinguishes itself from siblings by closing with 'use particle_company_get_podcast_ad_presence instead' for sponsor/advertising analytics, matching the highest bar for sibling differentiation.

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?

The description gives explicit routing: use particle_company_get_podcast_ad_presence for sponsor/advertising analytics, and skip particle_company_resolve when the domain is already known ('you can call this tool directly without first running...'). It also prescribes behavior — 'The default response is lean — include only what you need' — leaving nothing about when/why to call it to inference.

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

particle_company_resolveA
Read-only
Inspect

Resolve a company by free-text name, ticker, SEC CIK, Wikidata QID, or domain. Returns candidates with the agent-facing identifier (slug, falling back to domain or id) you should pass to particle_company_get, particle_company_get_podcast_ad_presence, particle_podcast_find_mentions (as company_slug), or particle_podcast_list_episodes.

At least one identifier is required. Multiple are ANDed together — useful for disambiguating (e.g. ticker plus a name hint). For people or other knowledge-graph entities (not companies) use particle_entity_resolve instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoSEC Central Index Key (e.g. '0000320193'). Comma-separated for bulk.
qidNoWikidata QID (e.g. 'Q312'). Comma-separated for bulk.
limitNoMaximum candidates to return (1-25, default 5).
queryNoFree-text company name (case-insensitive). Use for human-typed names.
domainNoCompany website domain (e.g. 'apple.com'). Comma-separated for bulk.
tickerNoStock ticker symbol (e.g. 'NVDA', 'AAPL'). Comma-separated for multi-ticker lookup.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already communicate read-only and open-world behavior, so the description adds meaningful context by revealing that candidates are returned with an agent-facing identifier (slug, falling back to domain or id) and that identifiers are ANDed. This goes beyond the structured annotations, though it does not cover error or no-match 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?

Four purposeful sentences are front-loaded with the tool's purpose and return behavior, then move to input constraints and routing guidance. There is no filler or needless repetition of schema content.

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?

For a 6-parameter resolve tool with no output schema, the description covers required input, identifier combination behavior, output identifier shape, and downstream usage. The remaining details are fully covered by 100% schema documentation and the readOnly/openWorld annotations.

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 met. The description adds important cross-parameter semantics: at least one identifier is required even though no schema field is required, multiple identifiers are ANDed, and the returned slug/domain/id is meant to be passed as company_slug to downstream tools.

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 opens with 'Resolve a company by free-text name, ticker, SEC CIK, Wikidata QID, or domain,' naming a specific verb, resource, and accepted identifier forms. It also distinguishes itself from sibling resolve tools by directing people and non-company knowledge-graph entities to particle_entity_resolve.

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 explicitly states when to use this tool, requires at least one identifier, explains that multiple identifiers are ANDed for disambiguation, and gives a clear when-not with an alternative: use particle_entity_resolve for people or non-company entities. It even tells the agent which downstream tools should receive the returned slug.

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

particle_entity_getA
Read-only
Inspect

One knowledge-graph entity's profile: name, kind, description, and Wikipedia link. Use it to confirm what a slug from particle_entity_resolve actually refers to — especially for the long tail that isn't a person or company (places, organizations, events, products, concepts).

When the entity is a linked person or company the response carries the person_slug / company_slug — prefer particle_person_get / particle_company_get for those, which return the full profiles. Entity slugs feed particle_podcast_find_mentions, particle_podcast_get_episode_timeseries, and the alert tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
entity_slugYesKnowledge-graph entity slug or encoded ID from particle_entity_resolve, episode entity listings, or mention payloads (e.g. 'germany', 'bitcoin').
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.5/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, so the read-only nature is covered. The description adds behavioral detail beyond that: it reveals that the response carries person_slug / company_slug for linked entities, and it explains that the output_format changes the serialization, noting that the JSON shape is 'larger and noisier for an LLM to read.' These are genuine behavioral disclosures not present in the annotations or schema, though it stops short of describing error conditions or response envelope.

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?

The description is front-loaded with the core purpose in the first sentence, followed by use-case and routing guidance. The second paragraph earns its place by explaining when to prefer sibling tools and the downstream consumers of entity slugs. It is slightly longer than necessary but contains no filler; the structure flows logically from what → when → alternatives.

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?

With no output schema, the description compensates by naming the returned fields (name, kind, description, Wikipedia link) and the presence of person_slug/company_slug for linked entities. It also covers the two parameters, the source of valid slugs, and the appropriate output format. For a simple read-by-slug tool, this is sufficient; an agent has enough to invoke it correctly and interpret the result, though it leaves response envelope details unspecified.

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 meaningful semantics. It clarifies that entity_slug comes from particle_entity_resolve, episode entity listings, or mention payloads, and gives concrete examples ('germany', 'bitcoin'). For output_format, it goes beyond the enum values by explaining when to use JSON ('only for programmatic chaining where exact field extraction matters') and why markdown is the default for LLM reading. This is valuable guidance the schema alone does not provide.

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 opening sentence states a specific verb and resource: this tool returns a knowledge-graph entity's profile with name, kind, description, and Wikipedia link. It explicitly distinguishes itself from sibling tools by noting it is not the full person/company profile tool and that it is for confirming slugs from particle_entity_resolve. Even without reading the schema, an agent knows exactly what this tool does and how it differs from the person/company getters.

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?

The description gives explicit when-to-use guidance: 'Use it to confirm what a slug from particle_entity_resolve actually refers to' and then lists the long-tail entity categories. It also provides a clear when-not-to-use rule: for linked persons/companies, prefer particle_person_get / particle_company_get, which return full profiles. It closes with downstream usage, telling the agent that entity slugs feed mention, timeseries, and alert tools, making the tool's place in the workflow unambiguous.

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

particle_entity_resolveA
Read-only
Inspect

Resolve any named thing — person, company, place, or other entity — by free-text name in one union search. Each candidate carries a type and the canonical slug for that type:

  • person: the canonical person slug. Feed it into particle_person_get, every person_slug parameter (particle_podcast_find_mentions, particle_podcast_search_transcripts, particle_podcast_list_episodes), or particle_podcast_get_guest's guest_slug.

  • company: the canonical company slug. Feed it into particle_company_get and every company_slug parameter.

  • place/other: a bare entity slug. Feed it into the entity_slug parameter on particle_podcast_find_mentions, particle_podcast_search_transcripts, and particle_podcast_list_episodes to filter by that entity.

Use this first whenever you only have a name and don't know what kind of thing it names. If you already know it's a person, particle_person_resolve ranks people only; for companies with a known ticker, domain, CIK, or QID, particle_company_resolve has more identifier surface.

For bulk resolution, pass a comma-separated query (e.g. "sam altman, nvidia, davos") — each name is resolved independently in a single call and limit applies per query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum candidates per query (1-10, default 5).
queryYesFree-text name(s) of a person, organization, place, or company to resolve (e.g. 'sam altman', 'nvidia'). Case-insensitive. Comma-separated for bulk lookup (e.g. 'sam altman, kara swisher, marc andreessen') — each query is resolved independently and grouped in the response.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare the tool read-only and non-destructive, and the description adds meaningful behavioral context beyond that: candidates carry `type` and canonical `slug`, slugs feed into specific downstream parameters, and bulk queries resolve independently with `limit` applying per query. No contradictions with annotations.

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?

The description is well-structured and front-loaded, with useful bullets and examples. It is slightly long due to enumerating many downstream tool/parameter names, but every sentence serves a purpose: one for definition, one for routing, one for bulk behavior.

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?

For a two-parameter tool with no output schema, the description covers input semantics, output candidate structure, downstream usage, when to use it, and alternative tools. Nothing an agent needs to call or consume this tool is missing.

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%, setting a baseline of 3. The description adds value beyond the schema by clarifying that a comma-separated `query` resolves each name independently in a single call and that `limit` applies per query, which is not explicit in the schema.

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 opens with a precise verb and resource: 'Resolve any named thing — person, company, place, or other entity — by free-text name in one union search.' It clearly distinguishes this from sibling resolve tools by stating it is a union search across entity types, and it explains the type/slug candidate structure.

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?

Excellent routing guidance: 'Use this first whenever you only have a name and don't know what kind of thing it names.' It explicitly names alternatives (`particle_person_resolve`, `particle_company_resolve`) and the conditions under which to choose them, plus bulk-resolution usage instructions.

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

particle_person_get
Read-only
Inspect

Return a person's profile: name, current role, and bio, keyed by the canonical person slug from particle_person_resolve.

Request optional sections via include: 'external_links' for LinkedIn/Wikipedia/social profiles, 'podcast_appearances' for their most recent podcast appearances (episode and podcast slugs included for follow-up calls), 'companies' for the full role history, 'sports' for an athlete's or coach's sports, teams (with years and leagues) and leagues from Wikidata, with entity slugs for particle_entity_get. The default response is lean.

For podcast-guest analytics (appearance stats, suitability exposure, co-appearance graph) use particle_podcast_get_guest with the same slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoOptional response sections: 'external_links' (LinkedIn, Wikipedia, social profiles), 'podcast_appearances' (recent podcast appearances with episode and podcast slugs), 'companies' (the full role history, current role included and marked), 'sports' (sports played, teams played for or coached with years and leagues, from Wikidata). Default response is lean — request only what you need.
person_slugYesCanonical person slug from particle_person_resolve (e.g. 'sam-altman'), or the encoded person ID.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
particle_person_resolveA
Read-only
Inspect

Resolve a person by free-text name. Returns ranked candidates with the canonical person slug — the stable handle accepted by particle_person_get, by every person_slug parameter (particle_podcast_find_mentions, particle_podcast_search_transcripts, particle_podcast_list_episodes), and by particle_podcast_get_guest's guest_slug.

For bulk resolution, pass a comma-separated query — each name resolves independently in one call.

For organizations, places, or mixed/unknown entity kinds use particle_entity_resolve; for companies with a known ticker or domain use particle_company_resolve.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum candidates per query (1-10, default 5).
queryYesFree-text person name (e.g. 'sam altman'). Case-insensitive. Comma-separated for bulk lookup — each name is resolved independently and grouped in the response.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark this as read-only and non-destructive, but the description adds substantial behavioral context: results are ranked, the returned slug is stable and reusable across many downstream person_slug parameters, bulk queries resolve independently, and output_format changes the serialization with a warning that JSON is noisier for LLM reading. This goes well beyond what annotations could convey.

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?

The description is front-loaded with the core action, followed by return-value semantics, then bulk usage, then alternatives. Every sentence earns its place, and the enumeration of downstream endpoints is dense but purposeful. There is no redundant phrasing.

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?

For a read-only resolution tool with no output schema, the description covers the essential operations: what input looks like, what output to expect (ranked candidates with slug), how bulk queries behave, and which sibling tools to use instead. An agent has enough information to both select and invoke this tool correctly in most scenarios.

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

Parameters3/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 reinforces query semantics and exposes the canonical-slug benefit, but it largely restates what the input schema already documents for limit, query, and output_format. It adds no critical parameter meaning beyond the schema.

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 opens with a specific verb and resource: 'Resolve a person by free-text name' and states the concrete output ('ranked candidates with the canonical person slug'). It distinguishes this tool from sister tools by explicitly contrasting it with particle_entity_resolve and particle_company_resolve, leaving no ambiguity about its niche.

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?

The description provides explicit when-to-use rules: use it for resolving persons, use particle_entity_resolve for organizations/places/mixed/unknown kinds, and use particle_company_resolve for companies with a known ticker or domain. It also gives bulk-query guidance, covering the main usage decisions an agent must make.

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

particle_podcast_find_mentionsA
Read-only
Inspect

Find dialogue lines where a specific person or company is named in podcast transcripts.

Three response modes

format="summary" (default, wide scan). Returns up to limit episodes (reverse-chronological), each with metadata + the first 10 mention-only lines (just the lines naming the entity, no surrounding dialogue). Use this to see what's been said across episodes and decide which episodes are worth reading in full. Paginate older episodes with cursor.

format="detail" (narrow drill-in). Requires episode_slug. Returns the full mention windows with context_lines of surrounding dialogue around each mention. Pass one slug for a single episode, or up to 10 comma-separated slugs (e.g. episode_slug="all-in-200,all-in-201,all-in-202") to multi-get several episodes in one call. limit/cursor don't apply.

format="compact" (screening). The same episodes as summary, each with its mention count, the strings it was mentioned as, and the segments carrying the mentions (id, title, type, first mention time) — no dialogue lines at all, the smallest shape. limit and cursor page it exactly as summary. Use it to fan out over many entities or a long date range and decide where to read; the segment ids are citations, and format="detail" with the episode slug reads the lines.

Workflow

Two patterns, depending on what you already know:

  • No specific episode in mind: call format="summary" first to scan, then call format="detail" with the slug(s) of the episodes worth reading in full. For most questions (sentiment, recurring themes, who said what when), summary alone has enough signal and the second call isn't needed.

  • Already have the episode slug (e.g. user mentioned the episode by name, or you have it from another tool like particle_podcast_get_episode or particle_podcast_search_transcripts): skip summary entirely and call format="detail" with episode_slug directly.

Examples

Wide scan, then drill in: User asks "what has All-In said about OpenAI recently?". Call format="summary", company_slug="openai", podcast_slug="all-in", since="2025-11-01", limit=20. Read the mention lines per episode; if 2-3 episodes have substantive discussion, call format="detail", episode_slug="slug1,slug2,slug3" for full context in one round-trip.

Direct drill-in: User says "In All-In #200 they discuss OpenAI's strategy — pull the full quotes". Call format="detail", episode_slug="all-in-200", company_slug="openai" directly — no summary needed.

When NOT to use this tool

For dialogue that discusses a topic without naming a specific person or company (paraphrase-tolerant search), use particle_podcast_search_transcripts instead — that one ranks segments by relevance to a free-text query.

Required inputs

One of person_slug, company_slug, or entity_slug is required: person_slug for a person, company_slug for a company, entity_slug for any other knowledge-graph entity (places, organizations, events, concepts). Resolve a name to a slug first with particle_person_resolve, particle_company_resolve, or particle_entity_resolve. Slugs are case-insensitive on input.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoConstrain how the entity participates: guest, host, panelist, correspondent, or mention.
limitNoEpisodes per page (1-50, default 10). Summary and compact modes — detail returns one episode regardless.
sinceNoOnly episodes published on or after this ISO 8601 date (e.g. 2025-01-01).
untilNoOnly episodes published on or before this ISO 8601 date.
cursorNoOpaque pagination cursor from a previous summary or compact response's cursor field. Summary and compact modes.
formatNoResponse shape. 'summary' (default) returns many episodes (reverse chron) with metadata plus the first few mention-only lines per episode — use this to scan and pick episodes to drill into. 'detail' requires episode_slug and returns one episode's full mention windows with surrounding dialogue context. 'compact' returns the same episodes as summary with the mention count and the segments carrying the mentions (id, title, type, first mention time) and no dialogue — the smallest shape, for screening many entities before reading any.
languageNoRestrict to episodes of podcasts in this language — ISO 639-1 code (e.g. 'fr'). Matches the podcast's primary language subtag, so 'fr' covers 'fr-FR'.
entity_slugNoKnowledge-graph entity slug from particle_entity_resolve for the long tail that isn't a person or company — places, organizations, events, products, concepts (e.g. 'germany'). Use person_slug for people and company_slug for companies.
person_slugNoPerson slug or encoded person ID from particle_person_resolve, particle_entity_resolve, or the guest tools (e.g. 'sam-altman'). One of person_slug, company_slug, or entity_slug is required.
company_slugNoCompany slug, domain, or canonical ID (e.g. 'nvidia' or 'nvidia.com'). Resolves to the company's linked entity.
episode_slugNoEpisode slug(s) or canonical ID(s). For format='detail', required: pass one slug for a single drill-in or up to 10 comma-separated slugs (e.g. 'all-in-200,all-in-201,all-in-202') for a multi-episode drill-in in one call. For format='summary' or 'compact', optional filter to one episode.
podcast_slugNoRestrict mentions to a single podcast by slug, internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works.
context_linesNoSurrounding dialogue lines around each mention (1-20, default 2). Detail mode only — ignored in summary and compact.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/openWorldHint/destructiveHint, so the bar is lower, yet the description still adds substantial behavior: default page size and reverse-chronological ordering, that `limit`/`cursor` are inert in detail mode, that detail accepts up to 10 comma-separated slugs for a multi-get, and that summary returns only the first 10 mention-only lines. It also states the slug-resolution prerequisite path.

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?

Front-loads purpose, then modes, then workflow, then exclusions — good information hierarchy for a 14-parameter tool with three response shapes. The length is largely justified, though the three-mode behavior is restated in both the modes section and the workflow/examples, which is mildly redundant.

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?

Covers mode selection, routing rules, required slug inputs, resolution prerequisites, pagination, and multi-get limits — everything needed to invoke correctly. No output schema exists, and the description compensates by describing the shape each mode returns, so nothing material is missing.

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, and the description clearly beats it: it explains the mode-dependent meaning of `format`, `episode_slug`, `limit`/`cursor`, and `context_lines` beyond the schema text, plus the 'one of person_slug/company_slug/entity_slug is required' rule and slug case-insensitivity. It stops short of fully 5 because most individual parameter semantics are already carried by the schema.

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+resource+scope: 'Find dialogue lines where a specific person or company is named in podcast transcripts.' It explicitly distinguishes itself from the sibling `particle_podcast_search_transcripts` (named-entity lookup vs. paraphrase-tolerant topic search), so an agent can route correctly 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?

Provides explicit when-to-use for all three `format` modes, two concrete workflow patterns (scan-then-drill-in vs. direct drill-in when the slug is already known), worked examples, and a dedicated 'When NOT to use' section naming the alternative tool. Nothing about tool selection is left to inference.

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

particle_podcast_get_episodeA
Read-only
Inspect

Return a bundled overview of one podcast episode: title, podcast, speakers (with entity slugs), top mentioned entities, and segment/clip counts.

By default the response is lean — counts plus the top mentioned entities. Request optional sections via include: 'segments' for the structural outline with timestamps, 'entities' for the complete entity list, 'clips' for engagement-ranked highlight clips, 'topics' for topic classifications with slugs, or 'transcript' for the dialogue transcript (narrow it by speaker or time range via transcript_speaker / transcript_start / transcript_end — full transcripts are large).

For "every line about X in this episode" use particle_podcast_find_mentions with episode_slug instead — that returns the dialogue around each mention with is_mention flags. For the ad reads inside the episode use particle_podcast_get_episode_ads (premium).

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoOptional response sections: 'transcript' (bounded dialogue transcript — large for long episodes; narrow it with the transcript_* sub-params), 'segments' (structural outline with timestamps), 'entities' (complete mentioned-entity list instead of the top 20), 'clips' (engagement-ranked highlight clips), 'topics' (topic classifications with slugs), 'related' (the five episodes from OTHER shows most related to this one — slug, show, score, band; for the full ranked list with the basis behind each match call particle_podcast_list_related_episodes). Default response is lean — request only what you need.
episode_slugYesEpisode slug or canonical ID. A particle.pro or Radar episode link also works.
transcript_endNoTranscript end clip in seconds.
transcript_startNoTranscript start clip in seconds.
transcript_formatNoTranscript format for include=transcript. Defaults to text.
transcript_speakerNoFilter the transcript to one speaker (name or entity slug).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnly/openWorld/non-destructive, so the bar is lower, and the description adds real context: the default response is lean, only counts plus top entities unless `include` is used, and full transcripts are large and narrowable. It omits any note about rate limits or cost for the premium ads sibling, but the safety and payload behavior is well disclosed.

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?

Three short paragraphs, front-loaded with the payload summary before optional sections and routing alternatives. Every sentence carries information, though the middle paragraph packs six enum values into one dense sentence that slightly slows scanning.

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?

With no output schema, the description does the work of describing the return shape (title, podcast, speakers, entities, counts) and payload sizing. It is nearly complete, but the 'related' include value and its alternative (particle_podcast_list_related_episodes) are only covered in the schema, not the prose.

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 goes further by explaining the rationale behind `include` (lean default vs. heavy transcript), the transcript sub-params for narrowing, and the size implications. It does not mention the 'related' enum value that the schema documents, so it is not fully additive.

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 concrete verb+resource ('Return a bundled overview of one podcast episode') and enumerates exactly what the bundle contains: title, podcast, speakers with entity slugs, top mentioned entities, segment/clip counts. It is clearly distinguishable from siblings like find_mentions, get_episode_ads, and list_related_episodes, which it names.

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?

Provides explicit routing rules: use particle_podcast_find_mentions with episode_slug for 'every line about X', and particle_podcast_get_episode_ads for ad reads. It also states the default lean behavior and when to request each optional section, so an agent knows both when to call this tool and when not to.

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

particle_podcast_get_episode_timeseriesA
Read-only
Inspect

Time-bucketed episode counts — the purpose-built answer to "how often is X discussed over time". Counts episodes matching the same filters as particle_podcast_list_episodes (person, company, entity, podcast, keyword, language, duration, transcript availability) per day, week, or month, plus range totals. keyword_search additionally counts matching transcript segments per bucket (exact counts); semantic_search does the same by meaning, with the same similarity threshold as particle_podcast_search_transcripts (lower bounds for pathologically broad queries), and requires published_after. The two cannot be combined.

Use this for appearance, publication, or topic trend lines instead of paging particle_podcast_list_episodes, particle_podcast_find_mentions, or particle_podcast_search_transcripts once per period. Buckets are UTC-aligned, zero-filled, and Monday-aligned for weeks; ranges are capped at 1000 buckets. At least one of podcast_slug, person_slug, company_slug, entity_slug, keyword_search, or semantic_search is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole filter when person_slug, company_slug, or entity_slug is set.
intervalNoBucket width. Weeks start on Monday; all buckets are UTC-aligned. Defaults to week.
languageNoRestrict to episodes of podcasts in this language — ISO 639-1 code (e.g. 'fr'). Matches the podcast's primary language subtag, so 'fr' covers 'fr-FR'.
entity_slugNoKnowledge-graph entity slug from particle_entity_resolve for the long tail that isn't a person or company (e.g. 'germany'). Use person_slug for people and company_slug for companies.
person_slugNoPerson slug or encoded person ID (e.g. 'sam-altman'). Counts episodes featuring the person as a speaker — and, when the person has a linked knowledge-graph entity, episodes that mention them.
company_slugNoCompany slug, domain, or ID. Resolves to the linked entity.
max_durationNoMaximum episode duration in seconds.
min_durationNoMinimum episode duration in seconds.
podcast_slugNoPodcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. A particle.pro or Radar show link also works.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
has_transcriptNoOnly count episodes with a completed transcript.
keyword_searchNoKeyword filter over transcript content. Double-quoted substrings must appear as exact phrases; unquoted terms must all appear in one transcript segment. Adds per-bucket mention counts to the response. Cannot be combined with semantic_search.
published_afterNoInclusive range start as an ISO 8601 date or date-time. Omit to aggregate all time.
semantic_searchNoVector-similarity filter by meaning over transcript content — the counting twin of particle_podcast_search_transcripts' semantic_search, using the same similarity threshold. Describe the topic the way you'd say it to a colleague; paraphrase tolerant. Adds per-bucket mention counts to the response. Requires published_after (ranges up to ~2 years). Cannot be combined with keyword_search.
published_beforeNoRange end as an ISO 8601 date or date-time. Defaults to now.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, non-destructive), and the description adds substantive behavior: buckets are UTC-aligned, zero-filled, Monday-aligned for weeks, ranges capped at 1000 buckets, and keyword/semantic modes add per-bucket mention counts. These constraints materially affect how an agent should call and interpret results.

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?

Front-loaded with the purpose and the routing decision before the mechanics paragraph; every sentence carries information (filters, bucket semantics, caps, exclusions). It is dense and long, but nothing is filler — the only minor cost is that a reader must hold several constraints at once.

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?

No output schema exists, and the description compensates by describing the return shape: per-bucket counts, range totals, and per-bucket mention counts in keyword/semantic modes. Combined with 100% schema coverage and annotations, an agent has everything needed to call it correctly and interpret 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 cross-parameter meaning the schema states only locally: semantic_search requires published_after with ranges up to ~2 years, keyword vs semantic cannot be combined, and both add mention counts. It also clarifies what the at-least-one-filter rule means across the 15 params.

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?

States a specific verb+resource ('Time-bucketed episode counts') and immediately reframes it in agent terms ('the purpose-built answer to "how often is X discussed over time"'), naming the sibling list_episodes whose filters it shares. An agent can distinguish it from particle_podcast_list_episodes, find_mentions, and search_transcripts without opening a 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?

Explicitly says to use it 'for appearance, publication, or topic trend lines instead of paging particle_podcast_list_episodes, particle_podcast_find_mentions, or particle_podcast_search_transcripts once per period' — a named alternative plus the condition that selects this tool. It also states the hard prerequisite ('at least one of podcast_slug, person_slug, ... is required') and the mutual exclusion of keyword_search and semantic_search.

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

particle_podcast_get_guestA
Read-only
Inspect

A guest's podcast-appearance profile: lifetime stats (appearances, distinct podcasts, first/last appearance) plus their most frequent podcasts. Guests are people — the same slug works with particle_person_get for the biographical profile.

Request optional sections via include: 'appearances' for the most recent episode appearances (episode and podcast slugs included for follow-up calls), 'podcasts' for the per-podcast rollup, 'suitability' for brand-suitability exposure across the podcasts they appear on, 'recommended_podcasts' for the five shows they could plausibly appear on next — shows related to the ones they have guested on, minus those, with the venues behind each pick (the pitch list; branch on each row's band).

Returns not_found for people who exist but have never appeared on a podcast — use particle_person_get for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoOptional response sections: 'appearances' (most recent episode appearances with episode/podcast slugs), 'podcasts' (per-podcast rollup of where they appear), 'suitability' (brand-suitability exposure across the podcasts they appear on), 'recommended_podcasts' (the five shows they could plausibly appear on next — shows related to the ones they have guested on, minus those, each with the venues that led there; the pitch list). Default response is the profile + lifetime stats.
guest_slugYesPerson slug (e.g. 'sam-altman') from particle_podcast_list_guests, particle_person_resolve, or particle_entity_resolve.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.6/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, so the safety profile is covered. The description adds meaningful behavioral context: it returns not_found for people who exist but never appeared on a podcast, and it explains the recommended_podcasts section is a pitch list with venues behind each pick. This goes beyond the annotations and helps the agent anticipate edge cases.

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?

The description is dense but well-organized: it front-loads the core purpose, then explains optional sections, then handles the edge case. Every sentence adds information, though the include-section explanation is somewhat long and could be trimmed without losing meaning.

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?

For a read-only profile tool with 100% schema coverage and no output schema, the description is complete. It covers the default response, optional sections, edge cases (not_found), and routing to sibling tools. An agent has everything needed to select and invoke this tool correctly.

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 schema already documents all three parameters well. The description adds value by explaining the default response (profile + lifetime stats) and clarifying that 'recommended_podcasts' is the pitch list with venues, which is not fully obvious from the schema alone. It also gives a concrete slug example and source tools for obtaining slugs.

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 clearly states the tool returns a guest's podcast-appearance profile with lifetime stats and frequent podcasts, and explicitly distinguishes guests from people by pointing to particle_person_get for biographical profiles. It names the resource (guest), the verb (get), and the scope (podcast-appearance profile), making it easy to differentiate from siblings like particle_person_get.

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?

The description gives explicit guidance on when to use this tool vs alternatives: use particle_person_get for people who exist but have never appeared on a podcast, and the same slug works with particle_person_get for biographical profiles. It also explains optional include sections and their purposes, so an agent knows exactly what to request.

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

particle_podcast_get_rankingsA
Read-only
Inspect

Podcast chart rankings from Apple Podcasts and Spotify, in four modes:

  • chart (default): the current chart for a source/country/category slot, or — with podcast_slug — every chart slot that podcast currently holds.

  • movers: the biggest rank changes over window_days (risers, fallers, debuts, exits).

  • history: past snapshots for a chart slot, or — with podcast_slug — one podcast's chart history over time.

  • slots: the valid slot values — every source, country, and category_slug with live chart data — so filter values are discovered, not guessed. source narrows the country/category listings; other filters are ignored.

Each row carries the matched podcast_slug when the chart entry is in the catalog — feed it into particle_podcast_resolve or any podcast tool. For a single podcast's at-a-glance chart presence, particle_podcast_resolve with include: ["rankings"] is one call instead of two.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoWhat to return. 'chart' (default): the current chart — or, with podcast_slug, every chart slot the podcast currently holds. 'movers': biggest rank changes over window_days (risers, fallers, debuts, exits). 'history': past chart snapshots for a slot — or, with podcast_slug, one podcast's chart history. 'slots': the valid chart-slot values — every source, country, and category_slug with live data — for discovering filter values before a chart/movers/history call.
limitNoRows per page (1-100, default 25).
sinceNoMode=history only: only snapshots captured on or after this ISO 8601 timestamp.
untilNoMode=history only: only snapshots captured on or before this ISO 8601 timestamp.
changeNoMode=movers only: filter by change type. Defaults to all.
cursorNoOpaque pagination cursor from a previous response. Not supported by mode=movers.
sourceNoRanking source platform. Defaults to apple.
countryNoISO 3166-1 alpha-2 country code (e.g. 'us', 'gb', 'jp'). Defaults to us.
window_daysNoMode=movers only: comparison window in days (1-30, default 1 = vs. yesterday).
podcast_slugNoPodcast slug, internal ID, or numeric iTunes ID. With mode=chart: that podcast's current chart appearances across every slot. With mode=history: that podcast's chart history. A particle.pro or Radar show link also works.
category_slugNoCategory slug (e.g. 'comedy', 'business'). Omit for the overall chart.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds real behavioral detail beyond that: cursor is not supported for mode=movers, 'slots' ignores other filters, and each row carries the matched podcast_slug for chaining. It stops short of describing pagination limits or result sizing, so not a 5.

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?

Front-loaded with the four modes as bullets, then a short note on podcast_slug propagation and the sibling alternative. Efficient and scannable, though the mode bullets are long enough that a reader must parse carefully; not maximally tight.

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?

For a 12-parameter, no-required-args, no-output-schema tool, the description covers mode semantics, defaults (apple, us, limit 25, window 1), filter behavior, and the chaining field returned in rows. Nothing an agent needs to select and invoke a mode correctly is missing.

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 goes further by explaining cross-parameter interaction (podcast_slug flips chart/history into per-podcast queries; source narrows the slots listing), which the schema descriptions state only in isolation. That added mode-interaction meaning justifies a 4.

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 opening states a specific verb and resource ('Podcast chart rankings from Apple Podcasts and Spotify') and then enumerates four distinct modes with concrete semantics for each. It also distinguishes itself from the sibling particle_podcast_resolve by naming the exact alternative call for at-a-glance chart presence.

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?

Each mode is given an explicit use case ('slots' to discover filter values, 'movers' for rank changes over window_days), and the description explicitly routes single-podcast lookups to particle_podcast_resolve with include: ["rankings"] as a one-call alternative. When-and-when-not guidance is concrete rather than implied.

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

particle_podcast_list_clipsA
Read-only
Inspect

Browse AI-extracted highlight clips across the catalog, ranked by engagement potential — the shareable moments. Filter by podcast, episode, clip type (FUNNY, CONTROVERSIAL, INSIGHTFUL, ...), minimum engagement score, or speaker — speaker takes a person slug and returns only clips of that person talking ('an insightful Sam Altman clip').

Pass clip_id for one clip's full detail (description, social-hook intro, speaker, audio URL), plus include: ["transcript"] for its dialogue.

For text-based clip discovery — finding clips about a topic or entity — use particle_podcast_search_transcripts instead: matching clips arrive inline on each search result. Episode slugs on every row feed particle_podcast_get_episode.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoClip type filter.
limitNoClips per page (1-50, default 10).
cursorNoOpaque pagination cursor from a previous response.
clip_idNoReturn one clip's full detail instead of a listing. Clip IDs come from this tool, particle_podcast_get_episode with include=clips, and search-result overlapping clips.
includeNoWith clip_id only: 'transcript' attaches the clip's dialogue transcript.
speakerNoRestrict the listing to clips whose primary speaker is this person — a person slug (e.g. 'sam-altman' from particle_person_resolve), a knowledge-graph entity slug for the same person, or an ID.
episode_slugNoRestrict the listing to one episode (slug or ID). A particle.pro or Radar episode link also works.
podcast_slugNoRestrict the listing to one podcast (slug, internal ID, or numeric iTunes ID). A particle.pro or Radar show link also works.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
min_engagementNoMinimum engagement potential score (0-100). Above 70 is typical for a strong clip.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, openWorldHint), so the description goes further by explaining ranking behavior, the detail-vs-list mode switch, and output_format trade-offs (JSON 'larger and noisier for an LLM'). It stops short of describing pagination semantics beyond the cursor parameter.

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?

Three front-loaded paragraphs that each carry distinct information — catalog browsing, detail mode, and the sibling alternative. Slightly long, but no sentence is redundant, and the key routing decision is stated early.

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?

For a 10-parameter filter/list tool with annotations and no output schema, the description covers the filter dimensions, the detail mode, the output format choice, and the alternative tool. Nothing an agent needs to call it correctly is missing.

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%, which sets the baseline at 3, but the description adds genuine meaning: speaker takes a person slug and returns only that person talking, clip_id fetches full detail, include=transcript attaches dialogue, and min_engagement above 70 is 'typical for a strong clip'.

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?

States a specific verb and resource ('Browse AI-extracted highlight clips across the catalog, ranked by engagement potential') and names the enumeration of filter dimensions. It clearly distinguishes itself from the transcript-search sibling, so an agent can tell them apart without opening a 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?

Explicitly routes the agent: text/topic-based discovery should use particle_podcast_search_transcripts instead, and clip_id switches the tool into single-clip detail mode. It also names the handoff to particle_podcast_get_episode via episode slugs.

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

particle_podcast_list_episodesA
Read-only
Inspect

List episodes across the catalog with rich filters: by podcast, person, company, language, date range, duration, or transcript availability.

By default it lists the episodes we have ingested. Pass transcript_status with podcast_slug to reach the show's back catalogue — older episodes discovered in its feed but not transcribed, marked requestable. Their transcript, segments, speakers and entities do not exist until one is requested.

Use this for episode-level discovery when you only need metadata (title, duration, speakers, counts). For dialogue around a person in any episode, use particle_podcast_find_mentions. For ranked retrieval by topic, use particle_podcast_search_transcripts.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole filter when person_slug or company_slug is set.
limitNoEpisodes per page (1-50, default 10).
cursorNoOpaque pagination cursor from a previous response.
languageNoRestrict to episodes of podcasts in this language — ISO 639-1 code (e.g. 'fr'). Matches the podcast's primary language subtag, so 'fr' covers 'fr-FR'.
entity_slugNoKnowledge-graph entity slug from particle_entity_resolve for the long tail that isn't a person or company — places, organizations, events, products, concepts (e.g. 'germany'). Use person_slug for people and company_slug for companies.
person_slugNoPerson slug or encoded person ID from particle_person_resolve, particle_entity_resolve, or the guest tools (e.g. 'sam-altman'). Episodes featuring or mentioning the person.
company_slugNoCompany slug, domain, or ID. Resolves to the linked entity.
max_durationNoMaximum episode duration in seconds.
min_durationNoMinimum episode duration in seconds.
podcast_slugNoPodcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. A particle.pro or Radar show link also works.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
has_transcriptNoOnly include episodes with a completed transcript. Superseded by transcript_status=transcribed; do not pass both.
published_afterNoISO 8601 date or date-time.
published_beforeNoISO 8601 date or date-time.
transcript_statusNoFilter by where episodes stand on the way to a transcript. Omitted lists the episodes we have ingested. any, untranscribed and requestable also list the podcast's back catalogue — episodes discovered in its feed but not transcribed — and require podcast_slug: any lists every discovered episode, untranscribed those without a transcript, requestable back-catalogue episodes whose transcript can be requested. transcribed lists episodes with a transcript.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, openWorld, non-destructive), and the description adds genuine behavioral context the annotations do not: the default scope is ingested episodes only, and reaching a show's back catalogue requires passing transcript_status together with podcast_slug. It also warns that requestable episodes have no transcript, segments, speakers or entities until requested. A clear step above the annotated baseline.

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?

Three short paragraphs, front-loaded with purpose and filters, then the default-vs-back-catalogue caveat, then routing to siblings. Every sentence carries weight, though the middle paragraph is dense enough that it could be marginally tighter.

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 15-param, zero-required, no-output-schema list tool the description covers scope, defaults, filter surface and sibling routing adequately. It does not describe pagination/cursor semantics beyond the schema, but the schema documents those fields, so the gap is minor.

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 meaning beyond the schema by explaining the interaction between transcript_status and podcast_slug (default vs. back-catalogue behaviour) and flagging the requestable state's downstream effects. That is real semantic value over the per-parameter text.

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?

States a specific verb+resource ('List episodes across the catalog') and enumerates the filter dimensions, so an agent knows exactly what it returns. It also explicitly names the sibling tools it is not (find_mentions, search_transcripts), distinguishing it from the rest of the podcast_* family.

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 ('episode-level discovery when you only need metadata') plus two named alternatives with their governing conditions ('for dialogue around a person... use find_mentions' / 'for ranked retrieval by topic... use search_transcripts'). Nothing is left to inference.

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

particle_podcast_list_guestsA
Read-only
Inspect

Browse podcast guests across the catalog, in two opinionated modes:

  • directory (default): the guest directory ranked by lifetime appearances (guests with 2+ appearances).

  • trends: who's making the rounds right now — guests with appearances on 2+ distinct podcasts in the last 30 days, which surfaces cross-show press tours rather than show regulars. The press-tour shape is enforced: every in-window appearance must be on a different podcast, each needs 5+ minutes of identified speaking time, mononymous catch-all people are excluded, and the in-window rate must be a 2x spike over the guest's lifetime baseline.

podcast_slug switches the directory to one show's roster: every guest who has appeared on that podcast, ranked by appearances on the show (one-off guests included). topic_slug narrows either corpus mode to guests appearing on episodes about that topic. Guest slugs ARE person slugs — feed them into particle_podcast_get_guest for the appearance profile or particle_person_get for the person profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoWhat to return. 'directory' (default): the guest directory ranked by lifetime appearances. 'trends': guests trending right now — appearances on 2+ distinct podcasts in the last 30 days (cross-show press tours, not regulars).
limitNoGuests per page (1-50, default 20).
cursorNoOpaque pagination cursor from a previous response.
topic_slugNoRestrict to guests with appearances on episodes classified under this topic (slug from particle_topic_browse, e.g. 'technology/artificial-intelligence'). Ignored when podcast_slug is set.
podcast_slugNoReturn one show's guest roster instead of the corpus directory: every guest who has appeared on this podcast, ranked by appearances on the show (no lifetime-appearance floor). Slug from particle_podcast_resolve. Only valid with the default directory mode. A particle.pro or Radar show link also works.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover safety (readOnlyHint, destructiveHint false), so the bar is lower, yet the description still discloses substantive behavioral traits: the trends-mode enforcement rules (distinct podcasts, 5+ min identified speaking, mononymous exclusion, 2x spike threshold) and the pagination/output_format tradeoffs. This is unusually rich disclosure.

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?

Front-loaded with the mode split and dense with information; nearly every clause earns its place. Slightly verbose in places (e.g. 'two opinionated modes', the long list of trends-mode constraints) but not padded.

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 read-only browse tool with no output schema, the description covers modes, parameter precedence, pagination and output format, and routing to follow-up tools. It does not describe the shape of returned guest entries (fields, ordering metadata), a minor gap given the absence of an output schema.

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; the description goes further by stating parameter interaction rules not present in the schema ('ignored when podcast_slug is set', 'only valid with the default directory mode') and guidance on when to use json vs markdown. It stops short of explaining cursor/limit behavior beyond the schema.

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?

States a specific verb+resource (browse podcast guests) and immediately splits it into two named, well-defined modes with distinct ranking semantics. It also names the downstream tools (particle_podcast_get_guest, particle_person_get) so the agent can place this tool in the workflow.

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?

Explicitly describes when each mode applies ('directory' for lifetime-ranked directory vs 'trends' for cross-show press tours) and when the slug parameters take effect, including the precedence rule ('topic_slug ignored when podcast_slug is set', podcast_slug only valid in directory mode). It also tells the agent what to do with the returned guest slugs.

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

particle_podcast_resolveA
Read-only
Inspect

Find a podcast by free-text title, exact slug, iTunes ID, or RSS feed URL. Returns slug, title, episode count, bias, and the top recurring speakers (with entity slugs). Use the slug as the agent-facing handle to feed into other podcast tools (particle_podcast_find_mentions, particle_podcast_list_episodes, particle_podcast_get_sponsors).

Free-text matching is forgiving — typos, missing or extra words, and pasted episode titles all work. Results are ordered best-match-first; text matches carry a match_quality field, and an empty list means the catalog has no plausible candidate.

With all identifiers omitted, returns the most recently updated podcasts — useful for browsing the catalog when you don't have a name in mind. Narrow free-text browsing with topic_slug (topic concentration, descendants included), suitability_tier, or min_popularity (global popularity percentile over charting podcasts).

Optional hydrations attach extra data to each result in the same call:

  • include: ["external_links"]: third-party platform presences (directories, social profiles, video channels, publisher websites) with resolved URLs and audience metrics.

  • include: ["suitability"]: per-category brand-suitability breakdown (12 categories with prevalence, treatment, derived risk level, reasoning, and evidence excerpts) — premium-grade data, requires a plan with premium endpoints. The high-level suitability_tier enum (SAFE / LIMITED / SENSITIVE / UNSAFE) is rendered on every result without opt-in.

  • include: ["ratings_summary"]: listener-review aggregate (average stars, count, per-platform breakdown).

  • include: ["bias"]: full political-bias analysis (the high-level bias enum is always rendered without opt-in).

  • include: ["rankings"]: current chart positions across sources/countries/categories — premium-grade data, requires a plan with premium endpoints. For movers and history use particle_podcast_get_rankings.

  • include: ["format"]: the show's format profile — how often episodes feature guests, detected production formats (interview, panel, call_in, solo_narrated), ad and video presence, episode-length distribution, publishing cadence, and the publish-day pattern.

  • recent_episodes: N: inline this many of each result's most recent episodes (slug, title, published_at, duration) — skip the follow-up particle_podcast_list_episodes call when you only need the most recent tail.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoExact slug match for a known handle (e.g. 'all-in').
limitNoMaximum candidates to return (1-25, default 5).
queryNoFree-text search across podcast titles and descriptions (case-insensitive partial match). Omit to fall back to the most recently updated podcasts.
includeNoOptional non-parameterized hydrations to attach to each result. 'external_links' adds third-party platform presences (directories, social profiles, video channels, publisher websites). 'suitability' adds the per-category brand-suitability breakdown (premium-grade data — requires a plan with premium endpoints). 'ratings_summary' adds the listener-review aggregate. 'bias' adds the full political-bias analysis. 'rankings' adds current chart positions (premium-grade data — requires a plan with premium endpoints). 'format' adds the format profile (guest frequency, interview/panel/call-in/solo formats, ads, video, episode length, cadence, publish days). 'related' adds the five most related shows (slug, score, band) — for the full ranked list with the basis behind each pair call particle_podcast_list_related. 'recommended_guests' adds the five guests the show could book next — people who have guested on its related shows but never on it (person slug, score, band, and the related shows that booked them); the booking pipeline. 'recommended_sponsors' adds the five advertisers the show could pitch — sponsors that run on its related shows but not on it (sponsor, linked company, score, band, ads and most recent ad across those shows, and which shows); the prospecting list (premium-grade data — requires a plan with premium endpoints). 'coverage' adds how much of the show's history we know of and have transcribed: discovered episodes by transcript status and by year, and whether its back catalogue (older episodes discovered in its feed but not transcribed) has been imported and is complete. The high-level suitability_tier and bias enums are always rendered without opt-in. Off by default; opt in only when needed.
rss_urlNoCanonical RSS feed URL. Resolves directly to the matching podcast.
itunes_idNoNumeric Apple Podcasts / iTunes ID (e.g. '1502871393'). Resolves directly to the matching podcast.
topic_slugNoFilter candidates by topic (slug from particle_topic_browse, e.g. 'technology/artificial-intelligence'). Matches podcasts where the topic — or any of its descendants — accounts for a meaningful share of episodes, ranked by concentration.
min_popularityNoRestrict candidates to podcasts whose global popularity percentile is at least this value (0-1]. Popularity is a cume_dist ranking over currently-charting podcasts; non-charting podcasts are excluded when set. Omit or 0 to disable.
recent_episodesNoInline this many of each result's most recent episodes (slug, title, published_at, duration). 0 (default) means none — call particle_podcast_list_episodes if you need more than the inline tail. Capped at 25.
suitability_tierNoFilter candidates by brand-suitability tier. Podcasts without a suitability analysis are excluded when set.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly=true, openWorld=true, destructive=false, so the bar is met; the description adds genuinely useful context beyond that: free-text matching is forgiving (typos, extra words), results are best-match-ordered, text matches carry match_quality, an empty list means no plausible candidate, and premium hydrations require a plan with premium endpoints. It also notes hydrations are off by default.

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?

Front-loaded with the purpose and routing before the detail, and the bulleted include section is scannable. It is long and substantially restates the schema's include descriptions, so it is slightly verbose rather than maximally tight.

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?

No output schema exists, so the description carries the burden of explaining return values (slug, title, episode count, bias, top recurring speakers with entity slugs) and it does so. For a 10-parameter, zero-required resolver with an enum of hydrations, the description is complete enough to call correctly.

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 adds semantic value above the schema: it explains the empty-list/ordering semantics, the match_quality field, and explicit cross-references between included data and the sibling tools that extend it (e.g. rankings vs particle_podcast_get_rankings, related vs particle_podcast_list_related).

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 states a specific verb+resource ('Find a podcast') and enumerates the exact resolution keys (free-text title, slug, iTunes ID, RSS URL). It also names the sibling tools that consume the returned slug, so an agent can distinguish this resolver from the downstream consumers without opening any 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?

It explicitly routes the agent: use the returned slug as the handle to feed into particle_podcast_find_mentions, particle_podcast_list_episodes, and particle_podcast_get_sponsors. It also states the no-identifier fallback (most recently updated podcasts) and the filter alternatives (topic_slug, suitability_tier, min_popularity), plus cross-references particle_podcast_get_rankings for movers/history.

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

particle_podcast_search_transcriptsA
Read-only
Inspect

Search the podcast catalog by what is said in episodes — by meaning (semantic_search), by exact phrase (keyword_search), or both at once (hybrid ranking). This is THE way to retrieve relevant dialogue, segments, and clips: each result is one segment of one episode with bounded transcript windows pinpointing the highest-relevance lines, plus any highlight clips that overlap the segment inline on the match.

Segments partition an episode's transcript — where start_line and end_line are present, every spoken line belongs to exactly one segment and one segment's end_line + 1 is the next one's start_line. They are contiguous in transcript lines, not in wall-clock seconds: the seconds between one segment's end_seconds and the next's start_seconds contain no transcribed speech. These matches do not carry the line ranges themselves — fetch them with particle_podcast_get_episode and include: ["segments"], where their absence marks an episode segmented by an earlier version, a small share of which do leave lines uncovered. Clips are sparse, engagement-ranked highlights that overlap some segments. There is no separate clip-search tool — relevant clips arrive on these matches, and a known episode's full clip list is particle_podcast_get_episode with include: ["clips"].

A match window defaults to one line of context around each matched line; raise context to widen windows in place instead of fetching the full transcript.

Screening many results? Pass format: "compact". Each match then carries only its identity — episode and podcast slugs, segment id and bounds, segment type, the segment's one-line description, and the relevance score — with no dialogue or clips, at a fraction of the size and latency of the default. Fan out compact searches over companies, themes, or dates, decide which segments matter, then read dialogue only for those: particle_podcast_get_episode with include: ["transcript"] and transcript_start/transcript_end set to the segment's bounds, or this tool again with episode_slug narrowed to that episode.

Use this for "find dialogue about a topic". For "every line naming a person or company" use particle_podcast_find_mentions instead — person_slug and company_slug here narrow ranked results, they don't drive the ranking.

Choosing your query. At least one of semantic_search or keyword_search is required, and they do different jobs:

  • semantic_search carries the idea. Write it as a sentence describing what should be discussed, in the vocabulary a speaker would use. It is paraphrase-tolerant, so it finds the topic however it happens to be worded.

  • keyword_search carries words that must be literally spoken. Every word must occur in the same passage, so it is for one or two exact tokens — a ticker, a product name — not for a description. Putting a sentence here returns nothing.

  • Use both when a topic must also contain an exact term. The result is their intersection, which is narrow by design; if that comes back empty, keyword_match: "ranked" relaxes the keyword side to a relevance hint.

Do not put a name in semantic_search. Resolve it (particle_person_resolve, particle_company_resolve, particle_entity_resolve) and pass the slug — searching for "Sam Altman" as text finds passages that sound like him, while person_slug finds the episodes actually featuring him.

Start broad, then narrow. Every filter compounds, and each one can silently remove all results. Issue the query with semantic_search alone first, then add filters once you know the topic has coverage. If a search returns nothing because of your filters, the error names the specific parameter responsible and the retry to make — act on it rather than re-issuing variations of the same query.

Note on role. It describes how someone relates to the episode: guest/host/panelist/correspondent mean they spoke, mention means they were talked about. Omitting role covers both and is almost always what you want.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoHow the entity must relate to the episode. Speaking roles: 'guest', 'host', 'panelist', 'correspondent', or 'speaker' for any of them. 'mention' means the entity is talked about rather than speaking. Omit to match both — usually what you want.
sortNoSort order. Defaults to relevance.
limitNoResults per page (1-50, default 10).
sinceNoOnly segments from episodes published on or after this ISO 8601 date.
untilNoOnly segments from episodes published on or before this ISO 8601 date.
cursorNoOpaque pagination cursor from a previous response.
formatNoResponse shape. 'full' (default) carries each match's bounded dialogue windows and overlapping clips. 'compact' returns the same ranked matches with no dialogue — episode and podcast slugs, segment id and bounds, segment type, the segment's one-line description, and the relevance score — at a fraction of the size and latency, because the transcript load and line scoring are skipped. Use it to screen many results (a fan-out over companies, themes, or dates) and read dialogue only for the survivors.
contextNoLines of surrounding dialogue around each matched line (1-15, default 1). Widens each match window in place — use a larger value instead of fetching the full transcript when a match needs more context. Ignored when format is compact.
languageNoRestrict to episodes of podcasts in this language — ISO 639-1 code (e.g. 'fr'). Matches the podcast's primary language subtag, so 'fr' covers 'fr-FR'.
entity_slugNoKnowledge-graph entity slug from particle_entity_resolve for the long tail that isn't a person or company — places, organizations, events, products, concepts (e.g. 'germany'). Use person_slug for people and company_slug for companies.
entity_typeNoNarrow to dialogue in episodes that mention any entity of this category — e.g. 'book', 'company', 'movie', 'school'. Use for 'discussions of X that reference some book'. Ignored when person_slug/company_slug/entity_slug names a specific entity, which is strictly narrower. Categories come from particle_catalog.
person_slugNoPerson slug or encoded person ID from particle_person_resolve, particle_entity_resolve, or the guest tools (e.g. 'sam-altman'). Filters results to dialogue featuring this person. For 'every line about X' use particle_podcast_find_mentions instead.
company_slugNoCompany slug, domain, or ID. Resolves to the company's linked entity and applies as a filter.
episode_slugNoFilter to a specific episode by slug or ID. A particle.pro or Radar episode link also works.
podcast_slugNoPodcast slug, internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works.
segment_typeNoSegment type filter.
keyword_matchNoHow UNQUOTED keyword_search words are applied. 'required' (default) excludes any passage missing one of them, which also makes a hybrid call an intersection with semantic_search. Switch to 'ranked' when keyword_search is a loose bag of related words that will not co-occur — then those words only steer relevance. Quoted phrases still filter in both modes: to relax a phrase, remove its quotes rather than switching mode.
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.
keyword_searchNoWords that must literally be spoken. Use for exact tokens a paraphrase would miss — tickers, product names, drug names, model numbers. Every word must appear in the same passage (see keyword_match), so keep it to the one or two words that must be said and put the rest of the idea in semantic_search. Wrap words in double quotes to also require them adjacent and in order in the segment's spoken dialogue — only for short exact strings, never for a sentence. A quoted name matches segments where the name appears in the dialogue, not segments that person speaks in; use person_slug or particle_podcast_find_mentions for a person's appearances. There is no boolean OR: 'a OR b' requires the literal word 'OR', so issue one call per alternative.
semantic_searchNoVector-similarity search by meaning. Express the query the way you'd describe the topic to a colleague — paraphrase tolerant. Combine with keyword_search for hybrid ranking. Describe a topic, not a name: to find a specific person/company/entity, filter with person_slug / company_slug / entity_slug (or use particle_podcast_find_mentions for every line about them) — and for an exact token like a ticker, use keyword_search.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the read-only/non-destructive profile, but the description adds substantial behavioral context beyond them: segment partitioning semantics, the absence of a separate clip-search tool, how errors name the offending parameter and suggested retry, and the size/latency tradeoff of compact mode.

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?

Front-loaded with purpose and organized under bold headers, which suits a 20-parameter tool. It is, however, verbose and mildly redundant — the clip-search explanation is stated twice and some parameter guidance is repeated in prose after the schema already covers it.

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?

For a 20-param tool with no output schema, the description covers the necessary ground: it explains what each result contains (segment, windows, overlapping clips), the response-shape options, and the pagination/error behavior. An agent has enough context to call it correctly without inference.

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?

With 100% schema coverage the baseline is 3, but the description adds practical meaning beyond the schema: 'do not put a name in semantic_search', the 'ranked' relaxation for keyword_match, and the role-omission guidance. Much of this also appears in the schema descriptions, so it is additive rather than transformative.

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?

States a specific verb (search) and resource (podcast transcripts/dialogue) with the three query modes named inline (semantic, keyword, hybrid). It explicitly differentiates from siblings, naming `particle_podcast_find_mentions` and `particle_podcast_get_episode` for the adjacent tasks an agent might confuse it with.

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 vs. alternatives ('find dialogue about a topic' vs. 'every line naming a person' → find_mentions), a start-broad-then-narrow workflow, the screening pattern with `format: 'compact'`, and query-construction rules for semantic vs. keyword. Exclusions and alternatives are both spelled out.

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

particle_topic_browseA
Read-only
Inspect

Navigate the topic taxonomy. Without parent_slug, returns the top-level roots (Politics, Business, Technology, etc.). With parent_slug set, returns the direct children of that topic. Topic slugs use a parent/child convention (e.g. politics/elections) and let agents browse the hierarchy to find well-named categories.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoTopics per page (1-100, default 50).
cursorNoOpaque pagination cursor from a previous response.
parent_slugNoTopic slug or ID. Returns the direct children of this topic. Omit for top-level roots (Politics, Business, Technology, etc.).
output_formatNoOutput serialization. 'markdown' (default) returns the LLM-facing rendering. 'json' returns the structured payload as JSON text — use only for programmatic chaining where exact field extraction matters; the JSON shape is larger and noisier for an LLM to read.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already signal a safe, read-only operation. The description adds useful behavioral context beyond that: hierarchical traversal semantics, the parent/child slug convention, and the fact that results are direct children only. It does not mention pagination details or rate limits, but those are less critical given the read-only annotation and schema-covered parameters.

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?

The description is three sentences, front-loaded with the main verb and resource, then immediately explains the key branching behavior and slug convention. Every sentence earns its place with no redundancy or filler.

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 read-only taxonomy browser with all parameters optional and fully described in the schema, the description covers the core behavior and the one non-obvious detail (slug convention). It could optionally mention that deeper traversal is done by passing a child slug as parent_slug, but this is strongly implied and the tool is otherwise complete enough for correct invocation.

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. The description adds meaningful parameter nuance by explaining the parent/child slug convention and how omitting parent_slug changes the result set, which goes beyond the raw schema descriptions and helps agents construct correct calls.

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 states exactly what the tool does: it navigates the topic taxonomy, returning top-level roots when parent_slug is omitted and direct children when it is provided. The parent/child slug convention and example make the tool easily distinguishable from the alert, company, podcast, and other sibling tools.

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

Usage Guidelines4/5

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

The description clearly explains the two main usage modes (browse roots vs. children of a topic) and frames the tool as a way to find well-named categories. It does not explicitly name alternative tools for similar tasks, but the intended use case is clear and no exclusionary guidance is needed.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedparticle_person_get2 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Optional response sections: 'external_links' (LinkedIn, Wikipedia, social profiles), 'podcast_appearances' (recent podcast appearances with episode and podcast slugs), 'companies' (the full role history, current role included and marked). Default response is lean — request only what you need."New value: +"Optional response sections: 'external_links' (LinkedIn, Wikipedia, social profiles), 'podcast_appearances' (recent podcast appearances with episode and podcast slugs), 'companies' (the full role history, current role included and marked), 'sports' (sports played, teams played for or coached with years and leagues, from Wikidata). Default response is lean — request only what you need."
      • changedInput schema / properties / include / items / enum
        Previous value: -[
        -  "external_links",
        -  "podcast_appearances",
        -  "companies"
        -]New value: +[
        +  "external_links",
        +  "podcast_appearances",
        +  "companies",
        +  "sports"
        +]
  2. 2 tool updates
    • Changedparticle_alert_create1 field changed
      • changedInput schema / properties / notifications / description
        Previous value: -"Email addresses to notify. Each must already be verified for your organization (or belong to an org member). When omitted, defaults to your account email if available; otherwise pass at least one."New value: +"Email addresses for recurring alert notifications. Only recipients verified for your organization receive alert emails; pending recipients may be saved but stay silent until verified. At least one recipient must be deliverable. When omitted, defaults to your account email if available; otherwise pass at least one."
    • Changedparticle_alert_update1 field changed
      • changedInput schema / properties / notifications / description
        Previous value: -"Replacement notification emails. When provided, replaces the entire existing set; omit to leave them unchanged."New value: +"Replacement recipients for recurring alert emails. Only recipients verified for your organization receive alert emails; pending recipients stay silent until verified. When provided, replaces the entire existing set; omit to leave them unchanged."
  3. 2 tool updates
    • Changedparticle_podcast_find_mentions6 fields changed
      • changedInput schema / properties / context_lines / description
        Previous value: -"Surrounding dialogue lines around each mention (1-20, default 2). Detail mode only — ignored in summary."New value: +"Surrounding dialogue lines around each mention (1-20, default 2). Detail mode only — ignored in summary and compact."
      • changedInput schema / properties / cursor / description
        Previous value: -"Opaque pagination cursor from a previous summary response's cursor field. Summary mode only."New value: +"Opaque pagination cursor from a previous summary or compact response's cursor field. Summary and compact modes."
      • changedInput schema / properties / episode_slug / description
        Previous value: -"Episode slug(s) or canonical ID(s). For format='detail', required: pass one slug for a single drill-in or up to 10 comma-separated slugs (e.g. 'all-in-200,all-in-201,all-in-202') for a multi-episode drill-in in one call. For format='summary', optional filter to one episode. A particle.pro or Radar episode link also works."New value: +"Episode slug(s) or canonical ID(s). For format='detail', required: pass one slug for a single drill-in or up to 10 comma-separated slugs (e.g. 'all-in-200,all-in-201,all-in-202') for a multi-episode drill-in in one call. For format='summary' or 'compact', optional filter to one episode."
      • changedInput schema / properties / format / description
        Previous value: -"Response shape. 'summary' (default) returns many episodes (reverse chron) with metadata plus the first few mention-only lines per episode — use this to scan and pick episodes to drill into. 'detail' requires episode_slug and returns one episode's full mention windows with surrounding dialogue context."New value: +"Response shape. 'summary' (default) returns many episodes (reverse chron) with metadata plus the first few mention-only lines per episode — use this to scan and pick episodes to drill into. 'detail' requires episode_slug and returns one episode's full mention windows with surrounding dialogue context. 'compact' returns the same episodes as summary with the mention count and the segments carrying the mentions (id, title, type, first mention time) and no dialogue — the smallest shape, for screening many entities before reading any."
      • changedInput schema / properties / format / enum
        Previous value: -[
        -  "summary",
        -  "detail"
        -]New value: +[
        +  "summary",
        +  "detail",
        +  "compact"
        +]
      • changedInput schema / properties / limit / description
        Previous value: -"Episodes per page (1-50, default 10). Summary mode only — detail returns one episode regardless."New value: +"Episodes per page (1-50, default 10). Summary and compact modes — detail returns one episode regardless."
    • Changedparticle_podcast_search_transcripts2 fields changed
      • changedInput schema / properties / context / description
        Previous value: -"Lines of surrounding dialogue around each matched line (1-15, default 1). Widens each match window in place — use a larger value instead of fetching the full transcript when a match needs more context."New value: +"Lines of surrounding dialogue around each matched line (1-15, default 1). Widens each match window in place — use a larger value instead of fetching the full transcript when a match needs more context. Ignored when format is compact."
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Response shape. 'full' (default) carries each match's bounded dialogue windows and overlapping clips. 'compact' returns the same ranked matches with no dialogue — episode and podcast slugs, segment id and bounds, segment type, the segment's one-line description, and the relevance score — at a fraction of the size and latency, because the transcript load and line scoring are skipped. Use it to screen many results (a fan-out over companies, themes, or dates) and read dialogue only for the survivors.",
        +  "enum": [
        +    "full",
        +    "compact"
        +  ],
        +  "type": "string"
        +}
  4. 1 tool update
    • Changedparticle_podcast_resolve2 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Optional non-parameterized hydrations to attach to each result. 'external_links' adds third-party platform presences (directories, social profiles, video channels, publisher websites). 'suitability' adds the per-category brand-suitability breakdown (premium-grade data — requires a plan with premium endpoints). 'ratings_summary' adds the listener-review aggregate. 'bias' adds the full political-bias analysis. 'rankings' adds current chart positions (premium-grade data — requires a plan with premium endpoints). 'format' adds the format profile (guest frequency, interview/panel/call-in/solo formats, ads, video, episode length, cadence, publish days). 'related' adds the five most related shows (slug, score, band) — for the full ranked list with the basis behind each pair call particle_podcast_list_related. 'recommended_guests' adds the five guests the show could book next — people who have guested on its related shows but never on it (person slug, score, band, and the related shows that booked them); the booking pipeline. 'recommended_sponsors' adds the five advertisers the show could pitch — sponsors that run on its related shows but not on it (sponsor, linked company, score, band, ads and most recent ad across those shows, and which shows); the prospecting list (premium-grade data — requires a plan with premium endpoints). The high-level suitability_tier and bias enums are always rendered without opt-in. Off by default; opt in only when needed."New value: +"Optional non-parameterized hydrations to attach to each result. 'external_links' adds third-party platform presences (directories, social profiles, video channels, publisher websites). 'suitability' adds the per-category brand-suitability breakdown (premium-grade data — requires a plan with premium endpoints). 'ratings_summary' adds the listener-review aggregate. 'bias' adds the full political-bias analysis. 'rankings' adds current chart positions (premium-grade data — requires a plan with premium endpoints). 'format' adds the format profile (guest frequency, interview/panel/call-in/solo formats, ads, video, episode length, cadence, publish days). 'related' adds the five most related shows (slug, score, band) — for the full ranked list with the basis behind each pair call particle_podcast_list_related. 'recommended_guests' adds the five guests the show could book next — people who have guested on its related shows but never on it (person slug, score, band, and the related shows that booked them); the booking pipeline. 'recommended_sponsors' adds the five advertisers the show could pitch — sponsors that run on its related shows but not on it (sponsor, linked company, score, band, ads and most recent ad across those shows, and which shows); the prospecting list (premium-grade data — requires a plan with premium endpoints). 'coverage' adds how much of the show's history we know of and have transcribed: discovered episodes by transcript status and by year, and whether its back catalogue (older episodes discovered in its feed but not transcribed) has been imported and is complete. The high-level suitability_tier and bias enums are always rendered without opt-in. Off by default; opt in only when needed."
      • changedInput schema / properties / include / items / enum
        Previous value: -[
        -  "external_links",
        -  "suitability",
        -  "ratings_summary",
        -  "bias",
        -  "rankings",
        -  "format",
        -  "related",
        -  "recommended_guests",
        -  "recommended_sponsors"
        -]New value: +[
        +  "external_links",
        +  "suitability",
        +  "ratings_summary",
        +  "bias",
        +  "rankings",
        +  "format",
        +  "related",
        +  "recommended_guests",
        +  "recommended_sponsors",
        +  "coverage"
        +]
  5. 1 tool update
    • Changedparticle_podcast_list_episodes2 fields changed
      • changedInput schema / properties / has_transcript / description
        Previous value: -"Only include episodes with a completed transcript."New value: +"Only include episodes with a completed transcript. Superseded by transcript_status=transcribed; do not pass both."
      • addedInput schema / properties / transcript_status
        Added value: +{
        +  "description": "Filter by where episodes stand on the way to a transcript. Omitted lists the episodes we have ingested. any, untranscribed and requestable also list the podcast's back catalogue — episodes discovered in its feed but not transcribed — and require podcast_slug: any lists every discovered episode, untranscribed those without a transcript, requestable back-catalogue episodes whose transcript can be requested. transcribed lists episodes with a transcript.",
        +  "enum": [
        +    "any",
        +    "transcribed",
        +    "untranscribed",
        +    "requestable"
        +  ],
        +  "type": "string"
        +}
  6. 10 tool updates
    • Changedparticle_podcast_find_mentions2 fields changed
      • changedInput schema / properties / episode_slug / description
        Previous value: -"Episode slug(s) or canonical ID(s). For format='detail', required: pass one slug for a single drill-in or up to 10 comma-separated slugs (e.g. 'all-in-200,all-in-201,all-in-202') for a multi-episode drill-in in one call. For format='summary', optional filter to one episode."New value: +"Episode slug(s) or canonical ID(s). For format='detail', required: pass one slug for a single drill-in or up to 10 comma-separated slugs (e.g. 'all-in-200,all-in-201,all-in-202') for a multi-episode drill-in in one call. For format='summary', optional filter to one episode. A particle.pro or Radar episode link also works."
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Restrict mentions to a single podcast by slug, internal ID, or numeric iTunes ID."New value: +"Restrict mentions to a single podcast by slug, internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works."
    • Changedparticle_podcast_get_episode1 field changed
      • changedInput schema / properties / episode_slug / description
        Previous value: -"Episode slug or canonical ID."New value: +"Episode slug or canonical ID. A particle.pro or Radar episode link also works."
    • Changedparticle_podcast_get_episode_timeseries1 field changed
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast."New value: +"Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. A particle.pro or Radar show link also works."
    • Changedparticle_podcast_get_rankings1 field changed
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Podcast slug, internal ID, or numeric iTunes ID. With mode=chart: that podcast's current chart appearances across every slot. With mode=history: that podcast's chart history."New value: +"Podcast slug, internal ID, or numeric iTunes ID. With mode=chart: that podcast's current chart appearances across every slot. With mode=history: that podcast's chart history. A particle.pro or Radar show link also works."
    • Changedparticle_podcast_list_clips2 fields changed
      • changedInput schema / properties / episode_slug / description
        Previous value: -"Restrict the listing to one episode (slug or ID)."New value: +"Restrict the listing to one episode (slug or ID). A particle.pro or Radar episode link also works."
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Restrict the listing to one podcast (slug, internal ID, or numeric iTunes ID)."New value: +"Restrict the listing to one podcast (slug, internal ID, or numeric iTunes ID). A particle.pro or Radar show link also works."
    • Changedparticle_podcast_list_episodes1 field changed
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast."New value: +"Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. A particle.pro or Radar show link also works."
    • Changedparticle_podcast_list_guests1 field changed
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Return one show's guest roster instead of the corpus directory: every guest who has appeared on this podcast, ranked by appearances on the show (no lifetime-appearance floor). Slug from particle_podcast_resolve. Only valid with the default directory mode."New value: +"Return one show's guest roster instead of the corpus directory: every guest who has appeared on this podcast, ranked by appearances on the show (no lifetime-appearance floor). Slug from particle_podcast_resolve. Only valid with the default directory mode. A particle.pro or Radar show link also works."
    • Changedparticle_podcast_list_related1 field changed
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"The source podcast — slug (e.g. 'all-in' from particle_podcast_resolve), internal ID, or numeric iTunes ID."New value: +"The source podcast — slug (e.g. 'all-in' from particle_podcast_resolve), internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works."
    • Changedparticle_podcast_list_related_episodes1 field changed
      • changedInput schema / properties / episode_slug / description
        Previous value: -"Episode slug or ID (from particle_podcast_list_episodes, particle_podcast_get_episode, or a search result)."New value: +"Episode slug or ID (from particle_podcast_list_episodes, particle_podcast_get_episode, or a search result). A particle.pro or Radar episode link also works."
    • Changedparticle_podcast_search_transcripts2 fields changed
      • changedInput schema / properties / episode_slug / description
        Previous value: -"Filter to a specific episode by slug or ID."New value: +"Filter to a specific episode by slug or ID. A particle.pro or Radar episode link also works."
      • changedInput schema / properties / podcast_slug / description
        Previous value: -"Podcast slug, internal ID, or numeric iTunes ID."New value: +"Podcast slug, internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works."
  7. 2 tool updates
    • Changedparticle_alert_create1 field changed
      • changedInput schema / properties / keyword / description
        Previous value: -"KEYWORD_MENTION alerts only (and required for them): the phrase to watch, e.g. Lightfield. Matches like a double-quoted keyword_search phrase — the words adjacent and in order, ignoring case and punctuation, on whole words — in topic-discussion and interview segments, never ad reads, intros, or outros. Also set description to say what the phrase means (e.g. 'Lightfield, the AI-native CRM'); it is how same-name mentions of something else get filtered out. A phrase that matched more than 7,000 podcast episodes in the past week is rejected as too broad."New value: +"KEYWORD_MENTION alerts only (and required for them): the phrase to watch, e.g. Lightfield. Matches like a double-quoted keyword_search phrase — the words adjacent and in order, ignoring case and punctuation, on whole words — in topic-discussion and interview segments, never ad reads, intros, or outros. Also set description to say what the phrase means (e.g. 'Lightfield, the AI-native CRM'); it is how same-name mentions of something else get filtered out. A phrase that matched more than 700 podcast episodes in the past week is rejected as too broad."
    • Changedparticle_alert_preview1 field changed
      • changedInput schema / properties / keyword / description
        Previous value: -"Same as particle_alert_create.keyword — required for KEYWORD_MENTION. A phrase that matched more than 7,000 podcast episodes in the past week is rejected as too broad, as on create."New value: +"Same as particle_alert_create.keyword — required for KEYWORD_MENTION. A phrase that matched more than 700 podcast episodes in the past week is rejected as too broad, as on create."
  8. 3 tool updates
    • Changedparticle_alert_create5 fields changed
      • changedInput schema / properties / entities / description
        Previous value: -"The entity to watch, as a single slug from the resolve tools (particle_entity_resolve, particle_person_resolve, particle_company_resolve). Person, company, and place/other (knowledge-graph) slugs are all accepted; the resolved type is echoed back in the response. Exactly one — an alert watches a single entity, so create one alert per entity."New value: +"The entity to watch, as a single slug from the resolve tools (particle_entity_resolve, particle_person_resolve, particle_company_resolve). Person, company, and place/other (knowledge-graph) slugs are all accepted; the resolved type is echoed back in the response. Exactly one for ENTITY_MENTION and PODCAST_SPEAKER — an alert watches a single entity, so create one alert per entity. Omit for KEYWORD_MENTION."
      • addedInput schema / properties / keyword
        Added value: +{
        +  "description": "KEYWORD_MENTION alerts only (and required for them): the phrase to watch, e.g. Lightfield. Matches like a double-quoted keyword_search phrase — the words adjacent and in order, ignoring case and punctuation, on whole words — in topic-discussion and interview segments, never ad reads, intros, or outros. Also set description to say what the phrase means (e.g. 'Lightfield, the AI-native CRM'); it is how same-name mentions of something else get filtered out. A phrase that matched more than 7,000 podcast episodes in the past week is rejected as too broad.",
        +  "maxLength": 100,
        +  "type": "string"
        +}
      • changedInput schema / properties / kind / description
        Previous value: -"What signal to watch for. ENTITY_MENTION (default) fires whenever a watched entity is mentioned on a podcast episode. PODCAST_SPEAKER fires only when a watched person is themself an identified speaker (guest/panelist/correspondent/audience). Kind is fixed at creation."New value: +"What signal to watch for. ENTITY_MENTION (default) fires whenever a watched entity is mentioned on a podcast episode. PODCAST_SPEAKER fires only when a watched person is themself an identified speaker (guest/panelist/correspondent/audience). KEYWORD_MENTION fires whenever keyword is spoken — use it when the name has no entity slug (a resolve tool finds nothing, or the right entity has no episodes). Kind is fixed at creation."
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "ENTITY_MENTION",
        -  "PODCAST_SPEAKER"
        -]New value: +[
        +  "ENTITY_MENTION",
        +  "PODCAST_SPEAKER",
        +  "KEYWORD_MENTION"
        +]
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "entities"
        -]New value: +[
        +  "title"
        +]
    • Changedparticle_alert_preview4 fields changed
      • changedInput schema / properties / entities / description
        Previous value: -"The entity to preview, as a single slug (from the resolve tools), same as particle_alert_create.entities — exactly one."New value: +"The entity to preview, as a single slug (from the resolve tools), same as particle_alert_create.entities — exactly one for entity kinds, omitted for KEYWORD_MENTION."
      • addedInput schema / properties / keyword
        Added value: +{
        +  "description": "Same as particle_alert_create.keyword — required for KEYWORD_MENTION. A phrase that matched more than 7,000 podcast episodes in the past week is rejected as too broad, as on create.",
        +  "maxLength": 100,
        +  "type": "string"
        +}
      • changedInput schema / properties / kind / enum
        Previous value: -[
        -  "ENTITY_MENTION",
        -  "PODCAST_SPEAKER"
        -]New value: +[
        +  "ENTITY_MENTION",
        +  "PODCAST_SPEAKER",
        +  "KEYWORD_MENTION"
        +]
      • removedInput schema / required
        Removed value: -[
        -  "entities"
        -]
    • Changedparticle_alert_update2 fields changed
      • changedInput schema / properties / entities / description
        Previous value: -"Replacement watch target as a single entity slug (from the resolve tools). When provided, replaces the entire existing watch list — exactly one entity; omit to leave entities unchanged."New value: +"Replacement watch target as a single entity slug (from the resolve tools). When provided, replaces the entire existing watch list — exactly one entity; omit to leave entities unchanged. Not accepted on KEYWORD_MENTION alerts."
      • addedInput schema / properties / keyword
        Added value: +{
        +  "description": "Replacement phrase for a KEYWORD_MENTION alert; omit to leave it unchanged. Not accepted on other kinds. Matches already recorded keep the phrase they fired on.",
        +  "maxLength": 100,
        +  "type": "string"
        +}
  9. 1 tool update
    • Changedparticle_company_get2 fields changed
      • changedInput schema / properties / include / description
        Previous value: -"Optional response sections: 'people' (current leadership and notable people), 'products' (three-level product hierarchy), 'competitors' (competitor list), 'podcast_recommendations' (the ten podcasts the company could advertise on next, with the shows it already buys that led there; premium). Default response is lean — request only what you need."New value: +"Optional response sections: 'people' (current leadership and notable people), 'products' (three-level product hierarchy), 'competitors' (competitor list), 'podcast_recommendations' (the ten podcasts the company could advertise on next, with the shows it already buys that led there; premium), 'external_links' (LinkedIn, social profiles, domain, Wikidata QID, SEC CIK and tickers). Default response is lean — request only what you need."
      • changedInput schema / properties / include / items / enum
        Previous value: -[
        -  "people",
        -  "products",
        -  "competitors",
        -  "podcast_recommendations"
        -]New value: +[
        +  "people",
        +  "products",
        +  "competitors",
        +  "podcast_recommendations",
        +  "external_links"
        +]
  10. 28 tool updates
    • First observedparticle_alert_create
    • First observedparticle_alert_delete
    • First observedparticle_alert_get
    • First observedparticle_alert_list
    • First observedparticle_alert_list_matches
    • First observedparticle_alert_preview
    • First observedparticle_alert_update
    • First observedparticle_call
    • First observedparticle_catalog
    • First observedparticle_company_get
    • First observedparticle_company_resolve
    • First observedparticle_entity_get
    • First observedparticle_entity_resolve
    • First observedparticle_person_get
    • First observedparticle_person_resolve
    • First observedparticle_podcast_find_mentions
    • First observedparticle_podcast_get_episode
    • First observedparticle_podcast_get_episode_timeseries
    • First observedparticle_podcast_get_guest
    • First observedparticle_podcast_get_rankings
    • First observedparticle_podcast_list_clips
    • First observedparticle_podcast_list_episodes
    • First observedparticle_podcast_list_guests
    • First observedparticle_podcast_list_related
    • First observedparticle_podcast_list_related_episodes
    • First observedparticle_podcast_resolve
    • First observedparticle_podcast_search_transcripts
    • First observedparticle_topic_browse

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources