particle-pro
Server Details
Podcast intelligence for agents: transcripts, clips, speaker diarization, mention tracking.
- Status
- Healthy
- Uptime
- 80.3% over 74 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 38 tools
The set contains several adjacent capabilities (find_mentions vs search_transcripts, mention_trends vs episode_timeseries, share_of_voice vs compare_share_of_voice), but the descriptions explicitly define boundaries and include 'when not to use this tool' guidance. A few resolver/profile and meta tools still require care to distinguish, but the overlaps are mostly well signposted.
Names are consistently snake_case with a particle_ prefix and generally follow particle_<domain>_<action>, making them predictable. Minor exceptions like particle_call and particle_catalog lack a domain segment, and action ordering varies, but there is no chaotic mixing of conventions.
38 tools is heavy for a single server, even given the broad podcast-intelligence scope. The catalog and category mechanisms help, but several tools could be consolidated and the discovery burden is real; the count is borderline rather than clearly well-scoped.
Core workflows are well covered: entity/person/company/podcast resolution and profiles, episode and transcript search, mentions, trends, rankings, guests, topics, alerts CRUD, and transcription requests. There are some dangling references to tools not present in the advertised set (e.g. company_get_podcast_ad_presence, podcast_get_sponsors), presumably opt-in, which is a minor but notable gap.
Available Tools
38 toolsparticle_alert_createParticle Alert CreateADestructiveInspect
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). ENTITY_MENTION alerts also take speaker_statement_characteristics, which fires only on mentions said a certain way: {"sentiment": ["negative"]} for negative mentions of a company, {"specificity": ["specific"], "temporal_orientation": ["future"]} for predictions about it, {"certainty": ["confident"]} for confident claims. Each mention line in the alert's matches carries its labels.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 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: by default as guest/panelist/correspondent/audience or in an excerpted soundbite (SOUNDBITE_SPEAKER), never as host; speaker_roles replaces that set. 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. | |
| title | Yes | Human-readable title for the alert (e.g. 'OpenAI mentions'). | |
| filters | No | Persistent 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). | |
| keyword | No | 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. | |
| entities | No | 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. | |
| is_active | No | Whether the alert produces matches. Defaults to true. Set false to create it paused. | |
| description | No | Optional longer description of what the alert is for. | |
| notifications | No | 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. | |
| output_format | No | Output 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_cadence | No | How often matches are emailed: REALTIME (default, one email per match), DAILY (one bundled email each morning), or WEEKLY (one bundled email Monday). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint=false / destructiveHint=true annotations: discloses the possible credit-to-paid billing transition and the need for explicit user confirmation, that paused alerts avoid it, that creation backfills the past week without emailing, that unverified recipients stay silent, and that alerts are excluded from zero data retention. These are exactly the operational facts an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and rightly dense on billing/backfill, but the long filters paragraph duplicates what the schema already documents in greater depth (language tag collapsing, popularity percentile, statement characteristics), padding a description that is already the longest part of the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, nested-object mutation with no output schema, the description covers everything an agent needs: the resolve-then-create prerequisite chain, kind selection, billing consent, backfill behaviour, recipient verification, DZR status, and which sibling tools consume the returned alert id. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds cross-parameter meaning the schema only states piecemeal — that is_active=false sidesteps the billing transition, that entities and keyword are mutually exclusive by kind, and the coupling of keyword with the free-text description field for disambiguation. It restates the filters axes, but the workflow-level framing is genuine added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an alert that watches a single entity and sets up recurring email delivery') and enumerates the three signal kinds with what each fires on. It explicitly distinguishes itself from particle_alert_preview and the resolve tools, so an agent can place it in the workflow without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: resolve a name first with particle_entity_resolve and pass the slug; use KEYWORD_MENTION when no slug exists or the entity lacks podcast coverage; call once per entity to cover several; use particle_alert_preview before committing. It also states when-not (paused alerts avoid billing, speaker_roles on ENTITY_MENTION errors).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_alert_deleteParticle Alert DeleteADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| alert_id | Yes | Alert id to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, but the description adds genuinely new behavior: this is a soft delete, matches and deliveries are retained for audit, the alert disappears from particle_alert_list, and unauthorized callers get a 403. The note that an API key acts as the user who created the key is context the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and the soft-delete consequence, followed by the alternative and the permission rule. Every sentence carries information an agent needs; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the definition covers what is destroyed versus retained, where the alert disappears from, the escape hatch for pausing, and the authorization model including the 403 outcome. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already carries the parameter documentation and the description need not repeat it. The description implies the alert must be one the caller owns or administers, but adds no format or identifier guidance for alert_id itself, matching the baseline of 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Delete an alert') and immediately qualifies the scope with the soft-delete semantics, so an agent knows exactly what operation is performed. It also names the sibling tool it is not (particle_alert_update), which is the main source of ambiguity among the alert tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not and the alternative: 'To pause an alert instead of removing it, use particle_alert_update with is_active=false.' It also states the caller conditions under which the tool is valid, so an agent can decide before invoking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_alert_getParticle Alert GetARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional sections to embed: 'matches' for the most recent matches the alert has caught, 'deliveries' for the email delivery audit log. | |
| alert_id | Yes | Alert id from particle_alert_list or particle_alert_create. | |
| match_limit | No | How many recent matches to embed when include=matches (1-25, default 5). Use particle_alert_list_matches for full pagination and transcript windows. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the read-only, non-destructive, closed-world safety profile, so the description only needs to add behavioral nuance — which it does: filters is omitted when empty, markdown is the default output, and json is described as larger and noisier for an LLM. It doesn't discuss pagination limits or error behavior for a missing alert_id, but the added context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with what is returned, then conditional behavior, then the routing alternative. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 compensates by enumerating the returned fields and explicitly stating that filters is omitted when absent. Combined with the include-based optional sections and the sibling pointer, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning beyond the schema: the match_limit default/behavior when include=matches, the conditional relationship between include and match_limit, and the practical tradeoff of output_format='json' ('noisier for an LLM to read').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch) and resource (a single alert's full configuration) and enumerates the concrete fields returned (title, kind, cadence, watched entities, notification emails, filters). It also names the sibling particle_alert_list_matches, so the agent can distinguish a single-alert fetch from a paginated history query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes default behavior ('response is just the configuration'), the opt-in paths with their exact parameter values (include=['matches'], include=['deliveries']), and the alternative tool with its selection condition ('for the full, paginated match history with transcript excerpts, use particle_alert_list_matches'). This is the when/when-not/alternative pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_alert_listParticle Alert ListARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Alerts per page (1-100, default 25). | |
| cursor | No | Opaque pagination cursor from a previous response's cursor field. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower, and the description adds the sort order and the fact that entries carry an id. It doesn't mention pagination behavior (cursor round-trip) or rate limits, which would raise this further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the identification of the tool is front-loaded before the sibling routing guidance. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully discloses the ordering and that each entry includes an id, which is what an agent needs to chain calls. It stops short of describing the remaining entry fields (e.g., name, status), so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, cursor, and output_format are already fully documented in the schema. The description adds no syntax, format, or default information beyond that, leaving this at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the alerts in your project') plus a scope-defining detail (newest first). It also distinguishes itself from four named siblings by describing what each one does with the id this tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the correct follow-up tool for each intent: particle_alert_get for configuration, particle_alert_list_matches for activity, update/delete for management. An agent can pick the right tool without opening sibling schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_alert_list_matchesParticle Alert List MatchesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Detail level. 'summary' (default) returns each match's entity, episode, and counts. 'detailed' also includes the transcript excerpt windows around each mention. | |
| after | No | Only matches detected on or after this ISO date (e.g. 2026-05-01). | |
| limit | No | Matches per page (1-100, default 25). | |
| before | No | Only matches detected on or before this ISO date. | |
| cursor | No | Opaque pagination cursor from a previous response's cursor field. | |
| alert_id | Yes | Alert id whose matches to list. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint true, destructiveHint false), so the bar is lower, yet the description still adds real behavior: results are newest-first, and backfilled matches from the creation sweep are flagged and never sent an email. It omits pagination behavior, but the substantive disclosure here is well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the verb and the highest-value behavioral fact (the payoff + newest-first). Every sentence carries information; the phrasing "the payoff of an alert" is slightly decorative but not wasteful, keeping it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-value burden and does so: it explains that each match names the watched entity and the episode/podcast slugs, plus what detailed view adds and how backfilled matches appear. Combined with a fully-covered input schema and read-only annotations, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so view, after, before, limit, cursor, and output_format are all documented structurally; the description largely restates the view/after/before semantics. The only marginal addition is that episode/podcast slugs feed particle_podcast_get_episode and particle_podcast_resolve, which justifies baseline 3 rather than higher.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the matches an alert has caught") plus ordering ("newest first") and even characterizes the payoff ("the payoff of an alert"). Combined with the name and the explicit downstream-tool references, an agent can distinguish this from particle_alert_list without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage cues: use view=detailed for transcript excerpts, use after/before to scope a date range, and notes which sibling tools the returned slugs feed. It stops short of explicitly saying when not to use it or contrasting it with particle_alert_list, so it's clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_alert_previewParticle 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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Signal to preview. Defaults to ENTITY_MENTION. | |
| filters | No | Same as particle_alert_create.filters. Pass the filters you intend to save so the estimate reflects what the alert would actually surface. languages, speaker_roles, source_popularity and speaker_statement_characteristics narrow the historical sweep exactly as they narrow new matches; relevance is graded only on new matches, so setting it leaves the count unchanged (the estimate is an upper bound when relevance=RELEVANT). | |
| keyword | No | 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. | |
| entities | No | 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. | |
| window_days | No | How many days back to sweep (1-30, default 7). | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the annotations: it is asynchronous ('Starts a background sweep and caches its progress and results'), it does not create an alert or notify anyone, and relevance=RELEVANT makes the count an upper bound. That last point is genuinely load-bearing for interpreting the number returned. It stops short of covering cost/latency or what happens on repeated calls, so it is not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the create-follow-up in the first three sentences, with per-parameter caveats after. It is on the long side and restates some schema content (the narrowing-versus-projection detail appears both here and in the filters schema), so a little trimming is possible without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-value burden and does so: total match count, per-day breakdown, and a sample of recent matches with episode context. Combined with the async/caching disclosure and the create-then-verify workflow, an agent has enough to call it and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 a non-obvious semantic distinction the schema only partially states: languages and speaker_roles narrow the sweep while relevance and source_popularity are read-time projections that do not, making the count an upper bound under relevance=RELEVANT. It also flags the window default/max in prose, though much of the per-parameter guidance duplicates the already detailed schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-plus-resource and an explicit temporal qualifier: 'Preview how often an alert would fire BEFORE creating it.' It then enumerates exactly what the sweep returns (total count, per-day breakdown, recent-match sample with episode context), which an agent cannot confuse with particle_alert_create or 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the two concrete use cases ('size an alert (REALTIME vs DAILY vs WEEKLY cadence)' or 'confirm the entity slug watches the right thing') and names the follow-up sibling: 'then call particle_alert_create with the same entity slug'. It also instructs passing the same filters so the estimate matches the saved alert, and explicitly scopes the tool out of creating alerts or sending notifications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_alert_updateParticle Alert UpdateADestructiveInspect
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 axes as particle_alert_create.filters: languages, relevance (EVERYTHING/RELEVANT), source_popularity (ANY/POPULAR), speaker_roles (PODCAST_SPEAKER alerts only — sending it on an ENTITY_MENTION alert returns unprocessable_entity), and speaker_statement_characteristics (ENTITY_MENTION alerts only; it applies to matches detected after the update).
Alerts are not covered by zero data retention: the alert's definition and its matched results are stored as part of the alerts feature.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New title. | |
| filters | No | Replace 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). | |
| keyword | No | 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. | |
| alert_id | Yes | Alert id to update. | |
| entities | No | 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. | |
| is_active | No | Pause (false) or resume (true) the alert. | |
| description | No | New description. | |
| notifications | No | 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. | |
| output_format | No | Output 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_cadence | No | New delivery cadence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive, non-read-only and open-world, and the description adds real context beyond them: wholesale replacement of entities/notifications, the fact that filter objects replace rather than merge, ZDR exclusion, kind-dependent unprocessable_entity errors, and email verification gating. However, it never states what the response looks like or whether the caller can see prior values before overwriting a set — gaps that matter for a destructiveHint mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded, but long and partly redundant: the filters paragraph restates the speaker_roles / speaker_statement_characteristics restrictions that already appear verbatim in the schema descriptions. The delivery/verification paragraph repeats the `notifications` param description. Tightening would preserve meaning with less duplication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the tricky parts an agent needs for a 10-param destructive mutation with nested objects: replacement semantics, kind constraints, pause semantics, filter clearing, and error conditions. Missing only the return shape (no output schema exists) and whether alert_id is org-scoped, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description earns extra credit by adding cross-parameter semantics the schema cannot express — keyword vs entities mutual exclusivity by alert kind, {} clearing filters, and is_active meaning pause/resume rather than delete. It does repeat a fair amount of the schema's own enum/filter prose, which caps it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Update an existing alert') and immediately clarifies the lifecycle boundary against particle_alert_create ('an alert's kind is fixed at creation — to change it, create a new alert'). An agent can distinguish update from create/delete/get/list without consulting any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states partial-update semantics ('Only the fields you pass change'), which params replace wholesale, and the kind-specific rule that KEYWORD_MENTION takes `keyword` while entity alerts take `entities`. It also routes the agent to particle_alert_create for kind changes and names resolve tools for slugs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_callParticle CallADestructiveInspect
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. A tool particle_catalog lists but your tools/list lacks (client lists go stale after a deploy) is callable here: never report it unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | Flat name of any public Particle tool (e.g. 'particle_podcast_get_episode'). Discover names and schemas with particle_catalog. | |
| arguments | No | Arguments object for the target tool, matching its input schema. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=true and openWorldHint=true, and the description does not contradict them. It adds context the annotations cannot express: that metering and plan gating apply identically to direct calls, and that client tool lists go stale after a deploy. It stops short of noting that the destructive/read-only profile is inherited from the target tool, which would be the natural next clarification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then the fallback rationale, then the discovery pointer and the stale-list instruction. Efficient overall, though the opening sentence and 'every public Particle tool is executable by name' partially restate each other.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-argument dispatcher with no output schema, the description covers how to find valid tool names and schemas, what billing/gating applies, and the stale-catalog edge case. The one unstated piece is that the response mirrors the target tool's own output, which an agent could reasonably wonder about.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both properties are documented, including an example name and the instruction that 'arguments' must match the target tool's input schema. The description reinforces the discovery path via particle_catalog but adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Dispatch any public Particle tool by name.' The description immediately positions it as a compatibility fallback rather than a normal tool, which cleanly distinguishes it from the concrete siblings like particle_podcast_get_episode and from the discovery sibling particle_catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('harnesses that block calling tools that weren't advertised on tools/list'), when-not ('prefer calling discovered tools directly when your harness allows it'), the discovery alternative ('Use particle_catalog to discover tool names and input schemas'), and an explicit instruction on the stale-list case ('never report it unavailable'). 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_catalogParticle CatalogARead-onlyInspect
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
includearray (e.g. a company's people, products, and competitors; a person's roles and podcast appearances) or change behavior via amode/formatswitch. 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_trends(default): Trending entities on podcasts: daily entity charts with movement and the quote behind it.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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Exposure 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_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive/closed-world, yet the description still adds substantial behavior: discovery is free while execution is metered and plan-gated, and the catalog payload carries the `↳` expand-option line. It could go one step further on how large the no-argument menu response is, but the cost and response-shape context is well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The leading paragraph front-loads the core insight (unadvertised tools are callable) before any detail, and the two convention bullets genuinely earn their space. The full category enumeration is somewhat redundant since the tool itself returns that menu, which costs it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, zero-required discovery tool with annotations covering the safety profile, the description covers what both modes return, the metering model, and the traversal model an agent needs to use the catalog effectively. Nothing about calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameter descriptions already cover the category-vs-menu behavior and the markdown/json tradeoff, so the schema carries this dimension. The description's added detail is really cross-catalog convention (include arrays, mode/format switches) rather than meaning for these two parameters, which is helpful context but not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Browse the full Particle tool catalog') and immediately explains the distinguishing premise: tools/list is incomplete, but every public tool is callable by name. It differentiates itself from the sibling meta-tool particle_call by being the discovery half of that pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit branching on when to call with no arguments (categorical menu) vs with `category` (full input schemas), plus the derived rule 'call this before invoking a tool you haven't seen advertised.' It also names the alternatives for getting the same information (?include=, ?exclude=, ?tools= URL params), so the agent can choose the right path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_company_getParticle Company GetARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | 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. | |
| company_slug | Yes | Company 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_status | No | Comma-separated lifecycle filter for include=products (e.g. 'active' or 'active,announced'). Allowed values: active, announced, discontinued, rumored. Defaults to 'active'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, open-world), and the description adds useful context: the default response is lean and sections are opt-in, with a note that person slugs feed particle_person_get. Doesn't discuss rate limits, auth, or premium gating beyond the schema, so slightly short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs, front-loaded with the default response shape, then the include options, then routing to the alternative. Slightly dense but every sentence carries weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only profile fetch with full schema coverage and no output schema, the description fully explains what returns by default, how to expand it, and where to go for adjacent data. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3; the description elevates by explaining the relationships between parameters — that `include` sections chain into particle_person_get and that `product_status` filters include=products. Minor gap: doesn't restate the product_status lifecycle values, but the schema does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Return) and resource (bundled profile for one company), enumerating exactly what fields come back (slug, ticker, domain, CIK, QID, name, description). Explicitly distinguishes itself from particle_company_get_podcast_ad_presence for ad analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use-the-alternative guidance ('For sponsor/advertising analytics... use particle_company_get_podcast_ad_presence instead'), notes it can be called directly with a domain without first running particle_company_resolve, and advises 'request only what you need.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_company_get_statement_characteristicsParticle Company Get Statement CharacteristicsARead-onlyInspect
How a company's people speak on podcasts, together, and how that moves over time: the share of their lines that are negative, neutral or positive; hedged, neutral or confident; vague, neutral or specific; and about the past, present or future, overall and per week or month (the last year by default), with how many of the people said them. Use it for 'how confident do OpenAI's people sound lately' or 'are Microsoft's executives talking more about the future'. Pass include=['examples'] for each bucket's strongest line per outer label, with who said it (a person_slug for particle_person_get_statement_characteristics), the episode and a link that plays the moment.
The people are the ones particle_company_get lists with include=['people']: current roles by default, past ones too with include_past_roles. Shares are of their scored lines (lines too short to read carry no characteristics); low_sample marks fewer than 20 behind a share. For one person, use particle_person_get_statement_characteristics. Resolve the company first with particle_company_resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional sections: 'examples' adds each bucket's strongest line for every outer label (negative/positive, hedged/confident, vague/specific, past/future) with its episode and a link that plays it. Lean by default. | |
| interval | No | Bucket width (default month). Weeks start on Monday (UTC). | |
| company_slug | Yes | Company identifier — slug from particle_company_resolve (e.g. 'microsoft'), domain (e.g. 'microsoft.com'), or canonical ID. | |
| output_format | No | Output 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. | |
| published_after | No | Start of the window (ISO 8601 date or date-time). Defaults to a year before published_before. | |
| published_before | No | End of the window: a bare date includes that whole UTC day. Defaults to now. | |
| include_past_roles | No | Count people in past roles at the company too. By default only the people in a current role count. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it discloses the default window (last year, weekly/monthly buckets), what population is counted (current roles only unless include_past_roles), that shares are of scored lines with short lines excluded, and that `low_sample` flags fewer than 20 underlying lines. Those sampling caveats are exactly the kind of trait an agent needs to interpret the numbers honestly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and example queries are front-loaded, and the two follow-up paragraphs cover population and caveats rather than restating the name. It is dense and long for a tool description — the examples paragraph could be trimmed — but nearly every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter analytical tool with no output schema, the description explains what the payload contains (shares per bucket per interval, speaker counts, low_sample flags) and how to enrich it with examples. It stops short of describing the response's structural shape, but the default markdown rendering and schema docs cover most of that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 real meaning on top by explaining that include=['examples'] returns a strongest line per bucket with a `person_slug` usable in the person sibling, plus an episode and a playable link. It also clarifies the population semantics tied to include_past_roles, though it doesn't touch interval or output_format beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 framing — 'how a company's people speak on podcasts' broken into negativity, hedging, vagueness, and time orientation — and immediately names the exact metrics returned. It distinguishes itself sharply from the sibling `particle_person_get_statement_characteristics` by scoping to a whole company's people rather than one person.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete trigger questions ('how confident do OpenAI's people sound lately', 'are Microsoft's executives talking more about the future'), names the single-person alternative, and states the prerequisite of resolving the company first with `particle_company_resolve`. Both the when-to-use and the when-not-to-use path are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_company_resolveParticle Company ResolveARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cik | No | SEC Central Index Key (e.g. '0000320193'). Comma-separated for bulk. | |
| qid | No | Wikidata QID (e.g. 'Q312'). Comma-separated for bulk. | |
| limit | No | Maximum candidates to return (1-25, default 5). | |
| query | No | Free-text company name (case-insensitive). Use for human-typed names. | |
| domain | No | Company website domain (e.g. 'apple.com'). Comma-separated for bulk. | |
| ticker | No | Stock ticker symbol (e.g. 'NVDA', 'AAPL'). Comma-separated for multi-ticker lookup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, openWorldHint, destructiveHint=false), so the bar is lower. The description still adds real context beyond them: the call returns multiple candidates and the identifier to carry forward (`slug`, with `domain`/`id` fallback). It does not discuss candidate ranking, ambiguity handling, or rate limits, which keeps it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the input forms and the return contract in the first sentence, then uses a short second paragraph for the AND-composition rule and the sibling redirect. No filler or restatement of the parameter list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-value burden and does so by naming the candidate payload and the field to forward. Combined with the requiredness and ANDing rules, an agent has everything needed to call this tool and chain its result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 contributes two facts the schema does not encode: that at least one identifier is mandatory (the schema lists zero required parameters) and that multiple identifiers are ANDed rather than ORed. These meaningfully change how an agent composes a call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve) and resource (company) plus the exact accepted identifier forms (name, ticker, CIK, QID, domain). It also distinguishes itself from the adjacent resolvers by explicitly routing people/other KG entities to `particle_entity_resolve`, so an agent can pick it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard precondition ('At least one identifier is required'), tells the agent identifiers are ANDed for disambiguation, and names the alternative sibling (`particle_entity_resolve`) for non-company entities. It even lists which downstream tools consume the returned identifier, which is actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_entity_getParticle Entity GetARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_slug | Yes | Knowledge-graph entity slug or encoded ID from particle_entity_resolve, episode entity listings, or mention payloads (e.g. 'germany', 'bitcoin'). | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/destructiveHint already covering the safety profile, the description adds valuable payload context: the response carries person_slug/company_slug when the entity is linked, which is behavior the annotations do not convey. It stops short of describing pagination or error behavior, but for a read-only lookup this is a solid addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and field list are front-loaded in the first clause, followed by the disambiguating condition and then downstream wiring. Every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only lookup with no output schema, the description covers what is returned, when to prefer it, when to prefer siblings, and where its slug input and output connect. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters (entity_slug, output_format) are fully documented in the schema, so this is baseline. The description adds provenance for entity_slug (from particle_entity_resolve, episode listings, mention payloads) but no additional format or syntax detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('One knowledge-graph entity's profile') and enumerates the fields returned (name, kind, description, Wikipedia link). It distinguishes itself from siblings by naming particle_person_get/particle_company_get as the preferred tools for linked persons and companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('confirm what a slug from particle_entity_resolve actually refers to') and identifies its niche ('the long tail that isn't a person or company'). It names the alternatives and the condition that selects them, plus the downstream tools whose input it feeds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_entity_resolveParticle Entity ResolveARead-onlyInspect
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 intoparticle_person_get, everyperson_slugparameter (particle_podcast_find_mentions,particle_podcast_search_transcripts,particle_podcast_list_episodes), orparticle_podcast_get_guest'sguest_slug.company: the canonical company slug. Feed it intoparticle_company_getand everycompany_slugparameter.place/other: a bare entity slug. Feed it into theentity_slugparameter onparticle_podcast_find_mentions,particle_podcast_search_transcripts, andparticle_podcast_list_episodesto 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum candidates per query (1-10, default 5). | |
| query | Yes | Free-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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the safety profile is covered. The description adds real behavioral value: each candidate carries a `type` and canonical `slug`, and it maps each type's slug to the downstream parameters that consume it, which is more than the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a scannable type-to-slug bullet list and a bulk-resolution note. Slightly long, but nearly every sentence carries routing information an agent needs, so there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations covering safety and no output schema to worry about, the description supplies the missing return-shape context (candidates carry `type` and canonical `slug`) and how to consume those slugs downstream. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both `query` and `limit` are already fully documented, including comma-separated bulk semantics and per-query grouping. The description largely repeats that and only marginally adds the per-query behavior of `limit`, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("resolve") and resource ("any named thing — person, company, place, or other entity") in one union search, and explicitly distinguishes itself from particle_person_resolve and particle_company_resolve. An agent can select this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule ("Use this first whenever you only have a name and don't know what kind of thing it names") plus the conditions selecting the alternatives: person_resolve when the type is known, company_resolve when ticker/domain/CIK/QID are known. Bulk-query usage is also spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_expertise_getParticle Expertise GetARead-onlyInspect
Describe one occupation or field of research and, on request, who is booked under it: its parent, children and crosswalk by default; include: ["top_guests"] ranks the guests listed under it by podcast appearances in a window (default the last 30 days, at most 90), and include: ["top_podcasts"] ranks the shows that booked them. standing="established" ranks only credentialed or recognized experts — "the shows that book established finance experts" is field plus top_podcasts plus standing. A broad code covers everything below it.
Take codes from particle_expertise_resolve, which turns free text ("doctors", "finance") into them; on unresolved_reference or not_found, resolve and retry. Guest slugs work with particle_person_get (include: ["expertise"]) and particle_podcast_get_guest; podcast slugs with every podcast tool.
For a multi-criteria guest search (practicing, seniority, capacity, employer, all-time) use particle_podcast_list_guests; for one show's guest mix use particle_podcast_resolve with include: ["guest_expertise"].
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | A field of research's ANZSRC 2020 code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment'). Pass exactly one of occupation or field. | |
| limit | No | Rows per top_ section (1-25, default 10). | |
| since | No | Window start for the top_ sections (YYYY-MM-DD). Defaults to 30 days before until; the window may span at most 90 days. | |
| until | No | Window end for the top_ sections (YYYY-MM-DD, inclusive). Defaults to now. | |
| include | No | Optional sections: 'top_guests' (the guests in the code most booked in the window, with appearances, shows and last appearance) and 'top_podcasts' (the shows that booked the code's guests most). Default is the code with its parent, children and crosswalk. | |
| standing | No | Rank only guests whose standing is recognized this way (e.g. 'established' for credentialed experts). Applies to the top_ sections. | |
| min_guests | No | top_podcasts keeps shows that booked at least this many distinct guests in the code in the window (default 1). | |
| occupation | No | An occupation's SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists'). Pass exactly one of occupation or field. | |
| min_podcasts | No | top_guests keeps guests seen on at least this many distinct shows in the window (default 1); raise it to favor guests booked across the medium over a show's regulars. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the read-only/open-world safety profile, and the description adds substantial operational context: the default vs. opt-in section behavior, the 30-day default window capped at 90 days, how standing filters ranking, and the markdown-vs-json tradeoff ('JSON shape is larger and noisier for an LLM to read').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then routing, then alternatives — each paragraph carries distinct information and nothing is filler. It is dense with parentheticals and slightly long, but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-param, no-output-schema tool, the description covers defaults, constraints, opt-in return contents ('with appearances, shows and last appearance'), and disambiguation from four sibling tools. An agent has everything needed to call it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds real meaning on top of the schema, e.g. min_podcasts 'raise it to favor guests booked across the medium over a show's regulars' and the window cap semantics. It stops short of exhaustively explaining every param, but the value-add is genuine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Describe one occupation or field of research') plus what the default response contains (parent, children, crosswalk) and what opt-in sections add. It is immediately distinguishable from siblings like particle_expertise_resolve (which produces codes) and particle_person_get (which consumes slugs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: take codes from particle_expertise_resolve, retry on unresolved_reference/not_found, use particle_podcast_list_guests for multi-criteria guest search, and particle_podcast_resolve with include:['guest_expertise'] for one show's guest mix. It even names the exact invocation pattern for a common query ('the shows that book established finance experts').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_expertise_resolveParticle Expertise ResolveARead-onlyInspect
Turn free text into the occupation and field-of-research codes the speaker-expertise filters take. When a question restricts who is speaking by occupation, profession, credentials or industry ("doctors", "medical professionals", "economists", "people in finance", "lawyers"), the filters, not search wording, decide who speaks. guest_occupation takes the everyday word itself, so the first search can carry it without waiting for this tool: call it to see or choose among the codes, and when a filter returns unresolved_reference, then retry with the code. Codes are SOC 2018 occupations (with their ISCO-08 equivalents) and ANZSRC 2020 fields of research. 'cardiologist' finds SOC 29-1212 Cardiologists; 'finance' finds the finance fields. Each code comes back with its slug, level, parent and the parameters that accept it: occupation/field on particle_podcast_list_guests and particle_expertise_get, and guest_occupation/guest_field on particle_podcast_find_mentions, particle_podcast_list_episodes, particle_podcast_search_transcripts, particle_podcast_get_episode_timeseries and particle_podcast_resolve. Pass parent to walk the hierarchy one level down (a SOC major group's minor groups, then broad groups, then occupations; a division's groups); a group such as physicians or an everyday name such as doctors filters everything below it. A word no occupation names may name a field (oncologists finds field 3211 Oncology) or a capacity: founders comes back as the capacity executive_founder, which capacity on particle_podcast_list_guests and guest_capacity on the episode and mention tools take.
Not for people or companies — use particle_person_resolve, particle_company_resolve or particle_entity_resolve. Not the topic taxonomy either: particle_topic_browse classifies what episodes are about, these codes classify what speakers know.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum codes to return (1-25, default 5). | |
| query | No | Free text naming an occupation or a field of research (e.g. 'cardiologist', 'financial analyst', 'constitutional law'). Singular or plural; words match by prefix. Omit with parent to list that code's children, or omit both to list the top level. | |
| parent | No | A code, slug or title whose children to list (e.g. '29-0000' for the healthcare occupations, or '38' for economics). With query, searches only below it. | |
| standard | No | Which codes to search: 'occupation' (SOC 2018, with ISCO-08 equivalents), 'field' (ANZSRC 2020 fields of research), or 'any' (default) for both. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/non-destructive annotations, the description discloses the code systems in use (SOC 2018, ISCO-08, ANZSRC 2020), the returned fields per code, hierarchy traversal behavior, and the fallback to capacities such as `executive_founder`. This is substantial behavioral context for a resolver tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and usage guidance are front-loaded, and the dense content is largely relevant for a complex resolver. It is long and includes a lengthy cross-tool parameter list, but almost every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description explains the return structure at a useful level: each code comes with slug, level, parent, and the parameters that accept it. Combined with the annotations and the detailed schema, an agent has enough information to select, call, and chain this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so parameter documentation is strong. The description still adds useful semantics beyond the schema, especially for `parent`: walking the SOC/ANZSRC hierarchy one level down, and the fact that a group or everyday name filters everything below it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Turn free text into the occupation and field-of-research codes the speaker-expertise filters take.' It explicitly distinguishes this resolver from person/company/entity resolvers and from the topic taxonomy, so an agent can identify its role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use guidance: questions that restrict speakers by occupation, profession, credentials or industry. It also explains when this tool is optional, when to retry after an `unresolved_reference`, and names the sibling resolvers to use instead for people, companies, or entities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_person_getParticle Person GetARead-onlyInspect
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 current team (NFL, MLB and NHL rosters), sports, teams (with years and leagues) and leagues, with entity slugs for particle_entity_get (only the current team says where a player is today: a team with no end year may be one they left), 'expertise' for what they know and how established they are (standing, seniority, the occupations and fields they are listed under — codes that guest_occupation/guest_field and particle_expertise_get accept). 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.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | 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' (the current team of an NFL, MLB or NHL player, sports played, and teams played for or coached with years and leagues), 'expertise' (what they know and how established they are: standing, seniority, experience, the occupations and fields they are listed under with codes the guest_ filters accept, organization, credential). Default response is lean — request only what you need. | |
| person_slug | Yes | Canonical person slug from particle_person_resolve (e.g. 'sam-altman'), or the encoded person ID. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuinely useful behavior beyond that: the default payload is lean, sections are opt-in, `output_format='json'` is larger/noisier and meant for programmatic chaining, and it flags that only the current team reliably indicates where a player is today whereas a team with no end year may have been left.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and slug provenance are front-loaded in the first sentence, and the closing sentence routes analytics cleanly. The middle paragraph is a dense wall of text with run-on clauses (notably the 'sports' enumeration) and partially repeats the schema's `include` documentation, so it is informative but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 describing returns and does so section-by-section, plus documents the lean default and serialization choice. It omits error/invalid-slug behavior and any rate or permission notes, but an agent has enough to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 enumerating what each `include` value yields and cross-referencing downstream consumers (episode/podcast slugs for follow-up calls, entity slugs for `particle_entity_get`, occupation/field codes accepted by `guest_occupation`/`guest_field` and `particle_expertise_get`), though much of this overlaps the schema's own enum description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource ('Return a person's profile: name, current role, and bio') and pins the keying input to the canonical slug from `particle_person_resolve`. It also distinguishes adjacent capabilities by routing analytics to `particle_podcast_get_guest` and entity lookups to `particle_entity_get`, so an agent can separate it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear routing: obtain the slug via `particle_person_resolve`, use `particle_podcast_get_guest` for guest analytics, and request only the `include` sections needed since the default response is lean. There are no explicit when-not-to-use conditions (e.g. when a resolve-only answer suffices), but the context for correct use is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_person_get_statement_characteristicsParticle Person Get Statement CharacteristicsARead-onlyInspect
How a person speaks on podcasts, and how that moves over time: the share of their lines that are negative, neutral or positive; hedged, neutral or confident; vague, neutral or specific; and about the past, present or future, overall and per week or month (the last year by default). Use it for 'is Sam Altman more cautious than he used to be', 'how often does she make predictions', or 'how positive has he been lately'. Pass include=['examples'] for each bucket's strongest line per outer label, with episode slugs for particle_podcast_get_episode and a link that plays the moment.
Shares are of the person's scored lines (lines too short to read carry no characteristics); low_sample marks fewer than 20 behind a share. To find their lines said a certain way about a topic, use particle_podcast_search_transcripts with person_slug and speaker_statement_characteristics. Resolve the person first with particle_person_resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional sections: 'examples' adds each bucket's strongest line for every outer label (negative/positive, hedged/confident, vague/specific, past/future) with its episode and a link that plays it. Lean by default. | |
| interval | No | Bucket width (default month). Weeks start on Monday (UTC). | |
| person_slug | Yes | Person slug from particle_person_resolve (e.g. 'sam-altman'), or the encoded person ID. | |
| output_format | No | Output 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. | |
| published_after | No | Start of the window (ISO 8601 date or date-time). Defaults to a year before published_before. | |
| published_before | No | End of the window: a bare date includes that whole UTC day. Defaults to now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, it discloses the scoring basis (shares are of the person's scored lines; too-short lines carry no characteristics), the low_sample flag threshold of 20, the default one-year window, and exactly what include=['examples'] adds, including episode slugs and a playback link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the semantic meaning of the output, then mechanics, then routing to alternatives. Dense but mostly earns its space; the second paragraph packs several unrelated points (scoring caveat, alternative tool, resolve prerequisite) rather than sequencing them cleanly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-shape burden and does so: it enumerates the bucket dimensions, the overall vs per-interval breakdown, the low_sample marker, and the structure of the optional examples section. An agent can call this correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description earns extra by explaining why to add include=['examples'] and how its output chains into particle_podcast_get_episode. It also restates the default window behavior, though interval/output_format semantics are largely left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and scope: how a person speaks on podcasts, broken into sentiment, hedging, vagueness and temporal-orientation buckets, overall and per week/month. It is clearly distinguishable from siblings such as particle_podcast_get_episode_timeseries or particle_person_get, and it explicitly is not the transcript-search tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete trigger questions ('is Sam Altman more cautious than he used to be', 'how often does she make predictions'), names the alternative path (particle_podcast_search_transcripts with person_slug and speaker_statement_characteristics) for finding specific lines, and states the prerequisite of resolving the person first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_person_resolveParticle Person ResolveARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum candidates per query (1-10, default 5). | |
| query | Yes | Free-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_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so safety is covered. The description adds genuine context beyond them: that the output is a ranked candidate list rather than a single resolution, that the slug is a stable handle accepted by several named tools, and that bulk queries resolve independently and are grouped. It stops short of noting ambiguity/failure cases (e.g. what happens when nothing matches), which keeps it off 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, each doing distinct work: what it returns, the bulk mode, and the disambiguation from siblings. The routing information is last, after the core behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter read-only resolver with no output schema, the description covers result shape (ranked candidates + slug), bulk behavior, and sibling disambiguation. Nothing needed 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.
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 contributes meaning the schema does not: that the slug returned is the value to pass into person_slug and guest_slug parameters, and that comma-separated queries are resolved independently and grouped. The limit and output_format semantics are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Resolve a person by free-text name') and immediately names the return shape: ranked candidates with the canonical person slug. It also distinguishes itself from particle_entity_resolve and particle_company_resolve by entity kind, so an agent can pick it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules: use this for persons, particle_entity_resolve for orgs/places/mixed, particle_company_resolve for companies with known ticker or domain. It also names the bulk pattern (comma-separated query) and the downstream tools that consume 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_podcast_find_mentionsParticle Podcast Find MentionsARead-onlyInspect
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 callformat="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_episodeorparticle_podcast_search_transcripts): skip summary entirely and callformat="detail"withepisode_slugdirectly.
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.
Who said it
The guest_ filters keep only the mentions a matching guest spoke: guest_field="banking-finance-and-investment" with guest_standing="established" reads what established finance experts said about a company. When the question names who speaks ("doctors", "economists", "people in finance"), resolve the words with particle_expertise_resolve first and filter by the code; on unresolved_reference, resolve and retry rather than dropping the filter. A word no occupation names may name a capacity instead ("founders", "politicians"): pass it as guest_capacity. Each episode lists its identified speakers with their occupation codes, standing and seniority. For the split of all mentions across occupations or fields use particle_podcast_get_share_of_voice.
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.
For how often the subject comes up, or which shows mentioned it this week versus last, use particle_podcast_get_mention_trends instead of paging this tool once per period; its podcast slugs come back here as podcast_slug to read what a show said.
Strongest first
With speaker_statement_characteristics, sort="strength" puts the episodes whose mentions carry the labels most clearly first: the most clearly negative takes on a company, the most confident predictions about a drug. This is the tool for the strongest lines about a subject; particle_podcast_search_transcripts refuses a subject without a topic and sends you here.
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.
How each line is said. Lines in topic and interview segments end with their speaker statement characteristics, pole labels only, e.g. _[positive · confident · future]_: sentiment (negative/positive), certainty (hedged/confident), specificity (vague/specific) and temporal orientation (past/future). A pole label means the line clearly reads that way; _[neutral]_ means it leans clearly on no axis; no brackets means the line was not read (short lines, intros, ad breaks). With output_format=json they are each line's speaker_statement_characteristics object, middle labels included.
Filtering by how a line is said. Pass speaker_statement_characteristics to keep only lines said a certain way: {"sentiment": ["negative"]} for criticism, {"specificity": ["specific"], "temporal_orientation": ["future"]} for concrete predictions, {"certainty": ["confident"], "sentiment": ["positive"], "temporal_orientation": ["future"]} for a high-conviction outlook. Put the topic, never the tone, in semantic_search. Every matched or mention line then carries labels the filter accepts.
Without a topic. On particle_podcast_search_transcripts, the filter alone with episode_slug, speaker or a guest_ filter (no semantic_search or keyword_search) returns the strongest lines said that way, at most 50, strongest first: an episode's boldest predictions, or a person's most confident claims. Their Match row reads characteristics. For the strongest lines naming a person, company or entity, pass the filter with sort: "strength" on particle_podcast_find_mentions instead.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Constrain how the entity participates: guest, host, panelist, correspondent, or mention. | |
| sort | No | Episode order. 'recency' (default) is newest first. 'strength' requires speaker_statement_characteristics and puts the episodes whose mentions carry those labels most clearly first (the most clearly negative takes, the most confident predictions), each episode's mentions strongest first. Pass the same sort with a cursor. | |
| limit | No | Episodes per page (1-50, default 10). Summary and compact modes — detail returns one episode regardless. | |
| since | No | Only episodes published on or after this ISO 8601 date (e.g. 2025-01-01). | |
| until | No | Only episodes published on or before this ISO 8601 date. | |
| cursor | No | Opaque pagination cursor from a previous summary or compact response's cursor field. Summary and compact modes. | |
| format | No | 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. | |
| language | No | Restrict 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_slug | No | Knowledge-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. | |
| guest_field | No | Only mentions spoken by a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve. | |
| person_slug | No | Person 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_slug | No | Company slug, domain, or canonical ID (e.g. 'nvidia' or 'nvidia.com'). Resolves to the company's linked entity. | |
| episode_slug | No | 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. | |
| podcast_slug | No | Restrict mentions to a single podcast by slug, internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works. | |
| context_lines | No | Surrounding dialogue lines around each mention (1-20, default 2). Detail mode only — ignored in summary and compact. | |
| output_format | No | Output 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. | |
| guest_capacity | No | Only mentions spoken by a guest who knows their field in this capacity (e.g. 'public_official' for politicians). particle_expertise_resolve names the capacity an everyday word means. | |
| guest_in_field | No | Only mentions spoken by a guest speaking within their own field (the guest the other guest_ filters select, when given). | |
| guest_standing | No | Only mentions spoken by a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'. | |
| guest_seniority | No | Only mentions spoken by a guest at this seniority or above. | |
| guest_occupation | No | Only mentions spoken by a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'financial-and-investment-analysts' or 'physicians'). A word with no occupation filters by the field of research or capacity it names: 'investors' is field 350208, 'politicians' is capacity public_official. | |
| guest_practicing | No | Only mentions spoken by a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group. | |
| speaker_statement_characteristics | No | Keep only mentions said a certain way. This tool takes no topic text: the subject is person_slug, company_slug or entity_slug, and HOW it is spoken of goes here: criticism, skepticism or bearish takes → sentiment negative; praise, optimism or bullish takes → sentiment positive; predictions or forecasts → temporal_orientation future (add specificity specific for concrete predictions); high conviction → certainty confident; hedging → certainty hedged; concrete claims → specificity specific. Who speaks goes in the guest_ filters. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Every mention line carries labels the filter accepts. Needs a subject with a knowledge graph entity: one matched only by name is refused. Example, criticism of the subject: {"sentiment": ["negative"]}. To narrow to a topic as well, call particle_podcast_search_transcripts with the subject's company_slug or entity_slug, the topic in semantic_search, and this filter. |
TDQS
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 real behavioral detail absent from annotations: pagination by cursor, per-mode scoping, how mention lines are labeled with poles, what happens on unresolved_reference, and that a name-only match is refused. However, roughly a fifth of the text drifts into describing how a sibling tool (search_transcripts) behaves rather than this tool, which dilutes rather than informs this tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and mode selection are correctly front-loaded under clear headers, and the three-mode framing is a useful spine. But the definition is long and partly redundant, and the closing "Without a topic" section is largely an essay about particle_podcast_search_transcripts rather than this tool — content that does not earn its place in this definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter, nested-object, no-output-schema tool, the description covers everything an agent needs to call it correctly: how to resolve slugs, how the modes differ, how to build the characteristics filter, how guest filters combine, and how to page. Nothing material is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each of the 23 parameters, and the baseline would be 3. The description still earns above baseline by explaining cross-parameter interactions the schema only states tersely: which mode makes episode_slug required, which modes honor limit/cursor/context_lines, that sort="strength" is only valid with speaker_statement_characteristics, and the resolve-first workflow for slugs and guest filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb+resource+scope: "Find dialogue lines where a specific person or company is named in podcast transcripts." It is immediately distinguishable from the siblings that also touch transcripts (search_transcripts for topic discussion, get_mention_trends for frequency), and those distinctions are made explicitly later.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use guidance is given for all three modes, plus two worked workflow patterns keyed to what the agent already knows (slug in hand vs. wide scan). A dedicated "When NOT to use this tool" section names the two alternatives and the conditions that route to them, so the choice between find_mentions, search_transcripts and get_mention_trends is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_get_entity_chartParticle Podcast Get Entity ChartARead-onlyInspect
What is trending on podcasts: Particle's daily Trends charts, which rank the entities (people, shows, films, games, books, brands, athletes, teams) that the most podcasts are talking about, with each entry's movement since the previous edition and, when the editors explained it, why it moved, backed by a verbatim podcast quote and a link that plays it.
Call with no arguments for the cross-category all chart. Pick a narrower chart with chart (its schema lists every chart and the windows it publishes): entertainment (tv-series, movies, video-games), sports leagues (nfl, nba, ...), books (fiction, nonfiction, comics-manga), and guests, which ranks people by the distinct shows they appeared on. sort=acceleration surfaces the fastest risers anywhere in the chart.
Rank does not always follow the podcast count: most charts weigh how far an entry's coverage sits above its own normal level, so a lower count can rank higher.
Each entry returns a slug. Pass an entity slug to particle_entity_get, or to particle_podcast_get_mention_trends (entity_slug) for which podcasts drive it; pass a person slug to particle_person_get or particle_podcast_get_guest; pass a quote's episode id to particle_podcast_get_episode.
Not for podcast shows' own chart positions on Apple or Spotify: use particle_podcast_get_rankings. Not for one subject you already know: use particle_podcast_get_mention_trends.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | 'rank' (default): the chart as published. 'acceleration': the whole edition reordered by how fast each entry's coverage is growing, fastest first, so a fast riser deep in the chart surfaces; each entry keeps its published rank. Not measured on the guests chart, which stays in rank order. | |
| chart | No | Which chart to read. Defaults to 'all'. The charts, with their group and the windows each publishes: 'all-entertainment': All Entertainment (entertainment; 7d) 'tv-series': TV Series (entertainment; 7d, 24h) 'movies': Movies (entertainment; 7d, 24h) 'video-games': Video Games (entertainment; 7d, 24h) 'guests': Guest Appearances (overall; 7d, 24h) 'all': All Entities (overall; 7d) 'all-sports': All Sports (sports; 7d) 'nfl': NFL (sports; 7d, 24h) 'nba': NBA (sports; 7d, 24h) 'mlb': MLB (sports; 7d, 24h) 'nhl': NHL (sports; 7d, 24h) 'college-football': College Football (sports; 7d, 24h) 'wnba': WNBA (sports; 7d) 'college-basketball': College Basketball (sports; 7d) 'soccer': Soccer (sports; 7d) 'golf': Golf (sports; 7d) 'tennis': Tennis (sports; 7d) 'formula-1': Formula 1 (sports; 7d) 'nascar': NASCAR (sports; 7d) 'pro-wrestling': Pro Wrestling (sports; 7d) 'fiction': Fiction (books; 7d) 'comics-manga': Comics & Manga (books; 7d) 'nonfiction': Non-Fiction (books; 7d) | |
| limit | No | How many ranked entries to return, from rank 1 down (1-100, default 10). | |
| window | No | Measurement window. '7d' (default) ranks the last seven days; '24h' ranks the last day. The composite charts and most sports charts publish 7d only (see chart). | |
| include | No | Optional sections. 'timeseries' adds each entry's daily podcast and mention counts. 'driven_by' names, on an entry that rises because of another entry's coverage (a song with its artist), the entry that drives it. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, open-world, non-destructive profile, and the description goes further with real behavioral nuance: ranks are weighted relative to an entity's own baseline so count does not determine rank, and acceleration is not measured on the guests chart. It also reveals that entries carry slugs and quote episode ids usable for chaining. It stops short of describing response shape or pagination, which keeps it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then usage, then the ranking caveat, then chaining targets — a sensible order. It is dense and somewhat long, and the partial re-listing of chart categories duplicates the `chart` enum description, but every paragraph carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no output schema, the description covers what an entry contains (rank, movement, reason, quote, playback link, slug), how to follow up on each object type by name, and the ranking edge cases. Nothing an agent needs to select or invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 value beyond it by grouping the charts (entertainment, sports, books, guests) and explaining what guests ranks, plus the acceleration caveat affecting `sort`. It repeats a fair amount of what the enum descriptions already say, limiting the upside.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'What is trending on podcasts... rank the entities... with movement since the previous edition and why it moved.' The entity types it covers are enumerated and it explicitly distinguishes itself from particle_podcast_get_rankings (Apple/Spotify show charts) and particle_podcast_get_mention_trends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use: call with no arguments for the `all` chart, pick narrower charts by name with groupings listed, `sort=acceleration` for fastest risers. It also states two negative cases with named alternatives, so an agent is routed without reading either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_get_episodeParticle Podcast Get EpisodeARead-onlyInspect
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, 'guest_expertise' for each guest's expertise and whether they spoke within their field, 'speaker_statement_characteristics' for how the episode's lines were said (label shares overall and per speaker, who is most hedged or forward-looking, and a few of its strongest predictions, confident claims, criticism and optimism lines), 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).
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional 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), 'guest_expertise' (each guest's expertise read and how the episode used it: whether they spoke within their field, whether the appearance was promotional, how they were introduced), 'speaker_statement_characteristics' (how the lines were said: label shares overall and per identified speaker, who is most hedged or forward-looking, and up to 5 of its strongest predictions, confident claims, criticism and optimism lines). Default response is lean — request only what you need. | |
| episode_slug | Yes | Episode slug or canonical ID. A particle.pro or Radar episode link also works. | |
| transcript_end | No | Transcript range end in seconds. Lines that overlap the range are returned whole. | |
| transcript_start | No | Transcript range start in seconds. Lines that overlap the range are returned whole. | |
| transcript_format | No | Transcript format for include=transcript. Defaults to text. | |
| transcript_speaker | No | Filter the transcript to one speaker: a name, a person slug or ID, or an entity slug or ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the description's real contribution is pay-per-section behavior: lean by default, opt-in sections via `include`, and the warning that full transcripts are large and should be narrowed by speaker/time range. It stops short of any rate-limit, auth, or premium-status note for this tool itself, which keeps it off 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and default behavior, then routes to alternatives — a sensible order. The long inline enumeration of every `include` value largely duplicates the schema enum description, which is the one place it spends words it doesn't need to.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and six parameters, the description covers what comes back, what the lean default contains, how to expand it, and the size caveat on transcripts — enough for an agent to call this correctly and avoid over-fetching. The only omission ('related' in the prose include list) is fully covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema carries the baseline; the description still adds practical meaning by framing `include` as an opt-in cost/benefit tradeoff and by explaining that transcript_speaker/transcript_start/transcript_end exist to bound a large payload. Minor gap: the prose enumeration of `include` values omits 'related', which only the schema mentions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Return a bundled overview of one podcast episode') and immediately enumerates the returned fields (title, podcast, speakers with slugs, top entities, segment/clip counts). It also explicitly differentiates itself from two siblings, so an agent can pick it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit default ('response is lean — counts plus top mentioned entities') and tells the agent exactly which alternative to use for adjacent needs: 'every line about X' → particle_podcast_find_mentions with episode_slug, and ad reads → particle_podcast_get_episode_ads (premium). The when/when-not/alternatives routing is complete.
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_timeseriesParticle Podcast Get Episode TimeseriesARead-onlyInspect
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. For how often a person, company or brand is mentioned, use particle_podcast_get_mention_trends: it leaves ad reads out, where this tool counts an episode for a company or entity named only in its ad reads, and it says which podcasts carried the mentions. 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, semantic_search, guest_occupation, or guest_field is required.
The guest_ filters count episodes by their guests' expertise (resolve the words to codes with particle_expertise_resolve first; on unresolved_reference, resolve and retry): guest_field alone charts how often a field's experts are booked; with company_slug it charts the company's episodes featuring those experts. They are episode-level and never check who spoke: with keyword_search, a matching segment counts when its episode had such a guest, even if the host said the words. For who said a keyword, use particle_podcast_get_share_of_voice with keyword_search.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Role filter when person_slug, company_slug, or entity_slug is set. | |
| interval | No | Bucket width. Weeks start on Monday; all buckets are UTC-aligned. Defaults to week. | |
| language | No | Restrict 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_slug | No | Knowledge-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. | |
| guest_field | No | Only episodes with a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment'). | |
| person_slug | No | Person 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_slug | No | Company slug, domain, or ID. Resolves to the linked entity. | |
| max_duration | No | Maximum episode duration in seconds. | |
| min_duration | No | Minimum episode duration in seconds. | |
| podcast_slug | No | Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. A particle.pro or Radar show link also works. | |
| output_format | No | Output 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. | |
| guest_capacity | No | Only episodes with a guest who knows their field in this capacity (e.g. 'executive_founder' for founders). It narrows the other filters; particle_expertise_resolve names the capacity an everyday word means. | |
| guest_in_field | No | Only episodes with a guest speaking within their own field (the guest the other guest_ filters select, when given). | |
| guest_standing | No | Only episodes with a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'. | |
| has_transcript | No | Only count episodes with a completed transcript. | |
| keyword_search | No | Keyword 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. | |
| guest_seniority | No | Only episodes with a guest at this seniority or above. | |
| published_after | No | Inclusive range start as an ISO 8601 date or date-time. Omit to aggregate all time. | |
| semantic_search | No | Vector-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. | |
| guest_occupation | No | Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). A word with no occupation filters by the field of research or capacity it names: 'oncologists' is field 3211, 'founders' is capacity executive_founder. | |
| guest_practicing | No | Only episodes with a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group (e.g. '29-1212' or 'physicians'). | |
| published_before | No | Range end as an ISO 8601 date or date-time. Defaults to now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, non-destructive, openWorld), yet the description adds substantial non-obvious behavior: UTC-aligned zero-filled buckets, Monday-aligned weeks, a 1000-bucket cap, the ~2-year range limit on semantic search, the 'lower bounds for pathologically broad queries' caveat, and the requirement that at least one filter be supplied. It even explains the guest_ filters' episode-level semantics and the unresolved_reference retry flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the when-to-use contrast before dense operational detail; the three paragraphs follow a logical progression (what it computes, when to pick it, how the guest_ filters behave). It is long, but nearly every sentence carries a decision-relevant constraint, so the length is mostly earned rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter, zero-required, no-output-schema tool, the description covers the gaps that matter: it explains what the response is (per-bucket counts plus range totals and per-bucket transcript mention counts), the at-least-one-filter precondition, and the keyword/semantic mutual exclusion. 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.
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 cannot: guest_field alone charts a field's expert bookings whereas guest_field + company_slug charts company episodes with those experts, and guest_ filters never check who actually spoke. It also clarifies that keyword_search and semantic_search each attach per-bucket mention counts to the response.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — time-bucketed episode counts per day/week/month plus range totals — and immediately frames the use case ('how often is X discussed over time'). It explicitly names the siblings it supersedes (particle_podcast_list_episodes, particle_podcast_find_mentions, particle_podcast_search_transcripts) and the related tool it is not (particle_podcast_get_mention_trends).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing rules: use this for trend lines 'instead of paging' the list/search tools, use get_mention_trends when the question is about brand mentions, and get_share_of_voice when the question is who said a keyword. It also states the selection constraint (keyword_search vs semantic_search cannot be combined, semantic requires published_after) and the minimum filter requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_get_guestParticle Podcast Get GuestARead-onlyInspect
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, with the venues behind each pick and each show's suitability tier, latest episode and chart breadth (the pitch list; branch on each row's band). It already leaves out every show they have appeared on, other feeds of those shows with the same host, shows that stopped publishing and UNSAFE shows, and ranks shows far smaller than their usual venues lower, so there is no need to check each pick's episodes, 'in_field_appearances' for the most recent appearances where they spoke within their own field of expertise (what they know is what the episode drew on; particle_person_get with include: ["expertise"] says what that field is).
Returns not_found for people who exist but have never appeared on a podcast — use particle_person_get for those.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Optional 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, each with the venues that led there, its suitability tier, latest episode and chart breadth; shows they appeared on, same-host sibling feeds, dormant and UNSAFE shows are already left out; the pitch list), 'in_field_appearances' (most recent appearances where they spoke within their own field of expertise). Default response is the profile + lifetime stats. | |
| guest_slug | Yes | Person slug (e.g. 'sam-altman') from particle_podcast_list_guests, particle_person_resolve, or particle_entity_resolve. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a safe read-only open-world tool, but the description adds meaningful behavior: default response contents, not_found semantics, recommendation filtering rules, ranking behavior, and suitability-band interpretation. Those details go well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and purpose-first, with useful routing details. It is somewhat dense and the recommended_podcasts explanation is a long run-on that restates schema details, but it contains little irrelevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex guest-profile tool with no output schema, the description is essentially complete: it explains default output, optional sections, special return behavior, and the related person tool. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description still adds practical meaning for the include sections, especially the pitch-list semantics and filtering of recommended_podcasts, though much of the enum documentation is repeated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: a guest's podcast-appearance profile with lifetime stats and frequent podcasts. It explicitly distinguishes this from particle_person_get's biographical profile and notes the not_found case for non-guests.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent when to use this tool and when to switch to particle_person_get for people with no podcast appearances. It also explains the purpose of each optional include section, including when to ask for recommendations or in-field appearances.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_get_mention_trendsParticle Podcast Get Mention TrendsARead-onlyInspect
How a person's, company's or entity's podcast mentions are moving, for tracking it week over week. To find what is rising across all podcasts rather than track a subject you already know, use particle_podcast_get_entity_chart. Two modes:
compare(default): which podcasts mentioned it in a window (default the last 7 days, at most 90) and how each compares with the equal-length window before it: episode and mention line counts in both, the delta, and a label. A show in both windows iscontinuing; one only in the previous isdropped. A show only in the current window is judged against the lookback before it (lookback_days, default 90):newwhen it never mentioned the subject there, published at least four episodes there, and has two or more mention lines now;returningwhen it mentioned the subject earlier in the lookback;passingfor a single line;newly_trackedwhen it published too little in the lookback to tell. Totals for both windows count every podcast. Filter withchange, order withsort(risingandfallingfor the biggest movers), and page withcursor. Answers "which shows talked about Nike this week versus last?" in one call, and, withchange="new"(sorted by popularity unlesssortis set), "which podcasts started talking about Nike this month?" or "which mentioned Nike for the first time?": read what the leading shows said withparticle_podcast_find_mentions. Since 2026-10-23,newno longer means every show absent from the previous window; that set is nownew,returning,passingandnewly_trackedtogether.timeseries: mention counts per day, week or month over a range (omitpublished_afterfor all time), each bucket with its episodes, mention lines and distinct podcasts. Answers "is it rising?".podcast_slugcharts one show.breakdownsplits each bucket by a speaker statement characteristics label (breakdown="sentiment": is it spoken of more negatively this quarter?), andspeaker_statement_characteristicscounts only the mentions said that way ({"temporal_orientation": ["future"]}: are predictions about it rising?); both needpublished_after, at most 365 days back.
Mentions inside ad reads are left out unless include_ads, so a brand that advertises heavily is measured by what shows say about it. The newest day fills in over about a day as episodes are processed, so a window ending now reads slightly low and the current bucket is marked partial: compare full buckets.
Podcast slugs in the response work with particle_podcast_find_mentions (with the same dates as since and until, to read what a show said) and particle_podcast_list_episodes. Not for the mention lines themselves (particle_podcast_find_mentions), appearance or topic trends by role or keyword (particle_podcast_get_episode_timeseries, which counts an episode for a company named only in its ad reads), or a split by who said it (particle_podcast_get_share_of_voice). To be told about new mentions as they air, create an alert with particle_alert_create.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | 'compare' (default): which podcasts mentioned the subject in the window and how each compares with the equal-length window before it, with both windows' totals. 'timeseries': mention counts per day, week or month over a range, with the podcasts carrying them per bucket. | |
| role | No | Constrain how the subject participates: guest, host, panelist, correspondent, or mention. In compare mode the lookback's earlier-mention check counts any mention whatever the role, so a first guest appearance on a show that named the subject before is 'returning', not 'new'. | |
| sort | No | compare only: 'mentions' (most current-window mention lines first), 'rising' or 'falling' (largest gain or loss from the previous window first), or 'popularity' (biggest shows first). Defaults to popularity with change 'new' or 'returning', else mentions. | |
| limit | No | compare only: podcasts per page (1-50, default 10). | |
| change | No | compare only: keep podcasts with this label. 'new': started talking about the subject: two or more mention lines in the window, none in the lookback before it, on a show that published at least four episodes there. Use it for 'which shows started talking about X' or 'mentioned X for the first time'. 'returning': back after a gap in the lookback. 'passing': a single line, a first in the lookback. 'newly_tracked': too little published history to tell (fewer than four episodes in the lookback, which includes a monthly show over the default 90 days: pass lookback_days=180 for those). 'continuing': both windows. 'dropped': the previous window only. | |
| cursor | No | compare only: cursor from a previous response. Pass published_after and published_before as that response's window so the page lines up. | |
| interval | No | Bucket width. timeseries: defaults to week. compare: adds each podcast's counts per bucket over the current window. | |
| language | No | Only podcasts in this language: ISO 639-1 code (e.g. 'fr'), matched on the podcast's primary language subtag. | |
| breakdown | No | timeseries only: also split each bucket's mentions by their label on this speaker statement characteristics axis: breakdown='sentiment' answers 'is it spoken of more negatively this quarter?'. Each bucket's label shares are of its scored mentions, and a bucket with fewer than 20 is marked low sample. Mention counts are unchanged. Needs published_after, at most 365 days before published_before. | |
| entity_slug | No | Knowledge-graph entity slug from particle_entity_resolve for anything that isn't a person or company (e.g. 'germany'). | |
| guest_field | No | Only mentions spoken by a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve. | |
| include_ads | No | Count mentions inside ad reads too. Off by default, so a brand that advertises heavily is measured by what shows say about it, not its own ads. | |
| person_slug | No | Person slug from particle_person_resolve (e.g. 'sam-altman'). One of person_slug, company_slug or entity_slug is required. | |
| company_slug | No | Company slug or domain from particle_company_resolve (e.g. 'nvidia'). Resolves to the company's linked entity. | |
| podcast_slug | No | timeseries only: chart the mentions on one podcast (slug from particle_podcast_resolve). In compare mode the rows are the podcasts. | |
| lookback_days | No | compare only: days before published_after a podcast must not have mentioned the subject in to be 'new' (7-180, default 90; never shorter than the previous window). | |
| output_format | No | Output 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. | |
| guest_capacity | No | Only mentions spoken by a guest who knows their field in this capacity (e.g. 'public_official' for politicians). particle_expertise_resolve names the capacity an everyday word means. | |
| guest_in_field | No | Only mentions spoken by a guest speaking within their own field (the guest the other guest_ filters select, when given). | |
| guest_standing | No | Only mentions spoken by a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'. | |
| publisher_slug | No | Only mentions on podcasts of this publisher (network), by slug. | |
| guest_seniority | No | Only mentions spoken by a guest at this seniority or above. | |
| published_after | No | compare: start of the current window (ISO 8601 date or date-time); defaults to 7 days before published_before, and the window may span at most 90 days. timeseries: start of the range; omit to chart all time. | |
| guest_occupation | No | Only mentions spoken by a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'financial-and-investment-analysts' or 'physicians'). A word with no occupation filters by the field of research or capacity it names: 'investors' is field 350208, 'politicians' is capacity public_official. | |
| guest_practicing | No | Only mentions spoken by a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group. | |
| published_before | No | End of the current window or range: a bare date includes that whole UTC day. Defaults to now. | |
| speaker_statement_characteristics | No | timeseries only: count only mentions said a certain way: {"temporal_orientation": ["future"]} charts predictions about the subject; {"sentiment": ["negative"]} criticism. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Needs published_after, at most 365 days before published_before. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/openWorld/non-destructive; the description adds substantive behavior beyond them: ad-read mentions excluded unless include_ads, the newest day filling in over ~a day with a partial-marked bucket, low-sample flags under 20 scored mentions, the 365-day cap for breakdown/characteristics modes, and the dated semantic change to 'new'. These are exactly the operational caveats annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and sibling routing before mode detail, and each mode paragraph earns its space. It is unusually long, however, and several label definitions in the compare paragraph repeat what the schema's change/sort descriptions already state, which is the main cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 27-parameter tool with no output schema, the description still conveys return shape (per-podcast rows with counts, deltas, labels, both-window totals; per-bucket series), default behaviors, and prerequisites for each mode. Nothing critical for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description goes further by explaining cross-parameter interactions (cursor must be reused with the original published_after/published_before, sort defaults shift with change='new'/'returning', lookback_days never shorter than the previous window, breakdown requires published_after). Much of the 'change' label text mirrors the schema, so it is additive but partly redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('how a person's, company's or entity's podcast mentions are moving') and immediately names the sibling to use instead for discovery ('particle_podcast_get_entity_chart'). The two-mode breakdown further sharpens what the tool returns, so an agent can distinguish it from every listed sibling without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use examples ('which shows talked about Nike this week versus last?'), mode selection criteria, and named alternatives for adjacent jobs (find_mentions for lines, get_episode_timeseries for role/keyword trends, get_share_of_voice for speaker splits, alert_create for ongoing monitoring). Exclusions are stated, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_get_rankingsParticle Podcast Get RankingsARead-onlyInspect
Podcast chart rankings from Apple Podcasts and Spotify, in four modes:
chart(default): the current chart for a source/country/category slot, or — withpodcast_slug— every chart slot that podcast currently holds.movers: the biggest rank changes overwindow_days(risers, fallers, entries, exits). Mostchange=newentries are established shows returning to the chart; for new podcasts, launches, or debuts usechange=debut— shows on that chart slot for the first time since tracking began (May 2026). A debut is per slot: a show can debut on the overall chart after months in a category, so read its episode count and, when shown, its first-episode date before calling it brand-new.history: past snapshots for a chart slot, or — withpodcast_slug— one podcast's chart history over time, newest first. Per-podcast history defaults tocountry=us; passcountryfor other markets. For one chart's trajectory passsource,country, andcategory_slugtoo (omitcategory_slugfor the overall chart plus every category): 90 days of one slot fits in one page of 100, where the unfiltered history of a popular show runs to hundreds of rows. History begins in May 2026.slots: the valid slot values — every source, country, and category_slug with live chart data — so filter values are discovered, not guessed.sourcenarrows 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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What 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. | |
| limit | No | Rows per page (1-100, default 25). | |
| since | No | Mode=history only: only snapshots captured on or after this ISO 8601 timestamp. | |
| until | No | Mode=history only: only snapshots captured on or before this ISO 8601 timestamp. | |
| change | No | Mode=movers only: filter by change type. Defaults to all. 'debut': shows on this chart slot for the first time since tracking began (May 2026) — use it for 'new podcasts', 'just launched', 'debuted'. 'new': every entry, mostly established shows returning. 'reentry': only the returning ones. | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| source | No | Ranking source platform. Defaults to apple. | |
| country | No | ISO 3166-1 alpha-2 country code (e.g. 'us', 'gb', 'jp'). Defaults to us. | |
| window_days | No | Mode=movers only: comparison window in days (1-30, default 1 = vs. yesterday). | |
| podcast_slug | No | 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. | |
| category_slug | No | Category slug (e.g. 'comedy', 'business'). Omit for the overall chart. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true and destructive=false, yet the description still adds substantial behavior: tracking begins May 2026, per-podcast history silently defaults to country=us, category_slug omission means 'overall chart plus every category', slots ignores other filters, and 90 days of one slot fits in a single 100-row page. The per-slot caveat on debuts ('read its episode count and, when shown, its first-episode date before calling it brand-new') is exactly the kind of semantic trap an agent would otherwise fall into.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a mode list before any detail, and the bulleted structure maps one bullet per mode, which is easy to scan. It is long and some clauses (the debut episode-count aside, the page-of-100 justification) are dense, but each carries a real disambiguation an agent needs, so little is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers mode selection, defaults, historical boundaries, pagination behavior, and one row-level fact (matched podcast_slug fed into other tools) despite having no output schema and 12 parameters. The return shape is still only partly described — rank fields, whether movers rows show deltas, and exit rows' contents are left implicit — which keeps it short of fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so mode, change, source, country, category_slug and output_format are already documented and repetition earns no credit. The description does go beyond the schema on cross-parameter interactions — that history needs source+country+category_slug to describe one slot's trajectory, that source narrows but other filters are ignored in slots mode — which is genuine value. Remaining parameters (since/until/cursor/limit) get no extra semantics in the prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource and then splits it into four named modes with distinct returned content, so an agent can tell chart from movers from history from slots without opening the schema. It also distinguishes itself from the sibling particle_podcast_resolve by noting that the at-a-glance case is one call there instead of two here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing for every mode: slots exists to discover filter values 'not guessed'; history should be pinned to source/country/category_slug because unfiltered history of a popular show runs hundreds of rows; change=debut is prescribed for 'new podcasts/launches' while change=new is warned as mostly returning shows. It also names the alternative tool for the single-podcast case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_get_transcription_requestParticle Podcast Get Transcription RequestARead-onlyInspect
Read where your organization's transcription request stands, by request_id or by the episode's episode_slug. Free: this is how to wait for a transcription that particle_podcast_request_transcription queued, so poll it every minute or so (a transcription usually takes 5 to 10 minutes) rather than requesting again.
state is queued (waiting its turn), admitted (being transcribed), transcribed (the episode tools now serve its transcript: particle_podcast_get_episode, particle_podcast_find_mentions, particle_podcast_search_transcripts), or failed (failure_reason says why, and the charge is refunded). By episode_slug, your organization's request answers even once the episode is transcribed; for an episode we hold that it never requested, there is no request, and state says where its transcript stands.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | No | The request's request_id, as particle_podcast_request_transcription returned it. Pass this or episode_slug. | |
| episode_slug | No | The episode whose request to read: its episode_slug. Pass this or request_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring readOnly/openWorld/destructive=false, the description adds substantial behavior context they do not cover: it is free to call, typical latency is 5-10 minutes, and it enumerates the full state machine (queued, admitted, transcribed, failed) with what each implies, including that failure_refund applies on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the polling instruction, and every sentence carries operational value. The final sentence about the episode_slug edge case is dense and slightly tangled ('for an episode we hold that it never requested, there is no request'), costing some readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly supplies the return semantics (the four state values and their meanings), which is exactly what is needed for a polling tool. The one gap is that both parameters are optional and the description never states the behavior when neither or both are passed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description goes further: it explains that request_id comes from particle_podcast_request_transcription, and that episode_slug resolves your organization's request even after transcription, with an explicit edge case for episodes you never requested. It does not say what happens if both or neither key is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) plus the resource (the organization's transcription request) and the two lookup keys, so it is unmistakable against the sibling particle_podcast_request_transcription that creates the request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not-to-use guidance: it names itself as the way to wait on a request queued by particle_podcast_request_transcription, prescribes polling 'every minute or so', and explicitly says to poll 'rather than requesting again'. It also names the downstream tools to use once state is transcribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_list_clipsParticle Podcast List ClipsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Clip type filter. | |
| limit | No | Clips per page (1-50, default 10). | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| clip_id | No | Return 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. | |
| include | No | With clip_id only: 'transcript' attaches the clip's dialogue transcript. | |
| speaker | No | Restrict 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_slug | No | Restrict the listing to one episode (slug or ID). A particle.pro or Radar episode link also works. | |
| podcast_slug | No | Restrict the listing to one podcast (slug, internal ID, or numeric iTunes ID). A particle.pro or Radar show link also works. | |
| output_format | No | Output 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_engagement | No | Minimum engagement potential score (0-100). Above 70 is typical for a strong clip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=true, so safety is covered. The description adds real behavioral context beyond that: results are engagement-ranked, clip_id switches to a detail mode returning description, social-hook intro, speaker and audio URL, and include=['transcript'] attaches dialogue. It doesn't discuss pagination limits or ranking caveats, keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short paragraphs, front-loaded with what the tool does, then detail mode, then sibling routing. Dense but every sentence carries information; the parenthetical example is illustrative rather than padding. Slightly heavy on nested parentheticals, which is the only thing keeping it from 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 bears some burden of return-value explanation, and it delivers for the clip_id detail path while implying list rows carry episode slugs. Pagination via cursor and limit is left entirely to the schema, and the listing row shape is never described, leaving a small gap for a 10-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuinely adds meaning: it explains that `speaker` takes a person slug and returns only clips of that person talking ('an insightful Sam Altman clip'), and that clip_id toggles a different response shape rather than filtering a list. Those are interpretive details the schema alone doesn't convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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') plus the ranking dimension ('ranked by engagement potential'), and immediately characterizes the content as 'the shareable moments'. An agent can distinguish this from particle_podcast_search_transcripts or particle_podcast_get_episode 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between modes and siblings: 'For text-based clip discovery — finding clips about a topic or entity — use particle_podcast_search_transcripts instead' and notes episode slugs 'feed particle_podcast_get_episode'. The single-clip detail path (pass clip_id) is also called out with its own trigger condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_list_episodesParticle Podcast List EpisodesARead-onlyInspect
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.
The guest_ filters list episodes by their guests' expertise (resolve the words to codes with particle_expertise_resolve first; on unresolved_reference, resolve and retry): guest_occupation="cardiologists" with guest_practicing=true lists episodes with a practicing cardiologist as a guest, and guest_capacity="executive_founder" lists episodes with a founder as a guest.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Role filter when person_slug or company_slug is set. | |
| limit | No | Episodes per page (1-50, default 10). | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| language | No | Restrict 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_slug | No | Knowledge-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. | |
| guest_field | No | Only episodes with a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment'). | |
| person_slug | No | Person 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_slug | No | Company slug, domain, or ID. Resolves to the linked entity. | |
| max_duration | No | Maximum episode duration in seconds. | |
| min_duration | No | Minimum episode duration in seconds. | |
| podcast_slug | No | Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. A particle.pro or Radar show link also works. | |
| output_format | No | Output 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. | |
| guest_capacity | No | Only episodes with a guest who knows their field in this capacity (e.g. 'executive_founder' for founders). It narrows the other filters; particle_expertise_resolve names the capacity an everyday word means. | |
| guest_in_field | No | Only episodes with a guest speaking within their own field (the guest the other guest_ filters select, when given). | |
| guest_standing | No | Only episodes with a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'. | |
| has_transcript | No | Only include episodes with a completed transcript. Superseded by transcript_status=transcribed; do not pass both. | |
| guest_seniority | No | Only episodes with a guest at this seniority or above. | |
| published_after | No | ISO 8601 date or date-time. | |
| guest_occupation | No | Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). A word with no occupation filters by the field of research or capacity it names: 'oncologists' is field 3211, 'founders' is capacity executive_founder. | |
| guest_practicing | No | Only episodes with a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group (e.g. '29-1212' or 'physicians'). | |
| published_before | No | ISO 8601 date or date-time. | |
| transcript_status | No | 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/no-destruction, and the description goes well beyond them: it discloses that the default lists only ingested episodes, that transcript_status with podcast_slug reaches untranscribed back-catalogue episodes marked requestable, and that transcript, segments, speakers and entities do not exist until a request is made. It also explains output_format trade-offs for chaining.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and default behavior, then alternatives, then the nuanced filter semantics — a sensible ordering for a 22-parameter tool. Some sentences are dense and could be tightened, but none are filler given the parameter surface area.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-param, no-output-schema tool the description covers the hard parts: default scope, back-catalogue lifecycle, sibling routing, and the guest-filter resolution chain. It names some return fields in passing ('title, duration, speakers, counts') but stops short of describing the overall response shape, which is the only real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, and the description adds real meaning on top: worked examples of filter combination (guest_occupation="cardiologists" with guest_practicing=true; guest_capacity="executive_founder"), the requirement to resolve words to codes via particle_expertise_resolve first, and the unresolved_reference retry behavior. It does not touch every one of the 22 params, but the ones it covers are the non-obvious ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List episodes across the catalog') plus the filterable dimensions, and explicitly distinguishes itself from two sibling tools (particle_podcast_find_mentions for dialogue, particle_podcast_search_transcripts for ranked topic retrieval). An agent can place it correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions ('episode-level discovery when you only need metadata') and names the two alternatives with the conditions that select them. It also states the default mode versus the transcript_status + podcast_slug path for reaching the back catalogue, and the prerequisite resolve-and-retry flow for the guest_ filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_list_guestsParticle Podcast List GuestsARead-onlyInspect
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. For the daily ranked guests chart, with movement since the previous edition and each guest's top clip, useparticle_podcast_get_entity_chartwithchart="guests".
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. occupation/field (with standing, seniority, practicing, capacity, employer) keep guests by what they know: resolve the words ("doctors", "economists") to codes with particle_expertise_resolve first, and on unresolved_reference resolve and retry rather than dropping the filter. Every row names the guest's occupation codes, standing and seniority; include: ["expertise"] adds their organization.
Guest slugs ARE person slugs — feed them into particle_podcast_get_guest for the appearance profile or particle_person_get for the person profile.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What 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). | |
| field | No | Only guests listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment'). Directory mode only. | |
| limit | No | Guests per page (1-50, default 20). | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| include | No | Optional per-guest sections: 'expertise' (widens the occupation codes, standing and seniority every row carries to the fuller one-line read with the organization). Directory mode only. | |
| capacity | No | Only guests who know their field in this capacity. Directory mode only. | |
| employer | No | Only guests whose organization is this company (slug from particle_company_resolve, or a domain). Directory mode only. | |
| standing | No | Only guests whose standing is recognized this way: 'established' (conferred by others: a credential, a position, recognition in the field), 'self_described', or 'unverified'. Directory mode only. | |
| seniority | No | Only guests at this seniority or above. Directory mode only. | |
| occupation | No | Only guests listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). Directory mode only. | |
| practicing | No | Only guests who still work in the occupation. Needs a SOC 2018 occupation or group (e.g. '29-1212' Cardiologists or 'physicians'). Directory mode only. | |
| topic_slug | No | Restrict 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_slug | No | 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. | |
| output_format | No | Output 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. | |
| appeared_since | No | Only guests with an appearance on or after this date (YYYY-MM-DD or ISO 8601). Directory mode only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, open-world), and the description adds substantial behavior beyond them: the 2+ appearance floor, the in-window cross-show enforcement, the 5+ minute speaking-time requirement, mononymous-person exclusion, and the 2x spike rule. It also discloses what each row contains and what `include: ["expertise"]` widens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the mode distinction, which is the decision an agent needs first, and every sentence carries filter or routing information. It is on the long side and some sentences (the press-tour shape) are dense enough that a skimming agent could miss the enforcement rules, keeping it shy of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter, zero-required tool with no output schema, the description covers mode semantics, filter interaction, resolution prerequisites, row contents, and downstream slug reuse. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: `podcast_slug` swaps the ranking basis and lifts the lifetime floor, `topic_slug` narrows 'either corpus mode', and expertise filters are gated behind `particle_expertise_resolve` resolution. It does not explain `limit`/`cursor` or `output_format` trade-offs, which are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Browse podcast guests across the catalog') and immediately distinguishes two concrete modes with their ranking rules. It even names the sibling tool to use for the adjacent daily chart use case, so an agent can differentiate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use for each mode ('directory' for lifetime-ranked directory, 'trends' for cross-show press tours), plus an explicit alternative: use `particle_podcast_get_entity_chart` with `chart="guests"` for the daily ranked chart. It also gives recovery guidance ('on `unresolved_reference` resolve and retry rather than dropping the filter') and downstream routing via `particle_podcast_get_guest` / `particle_person_get`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_request_transcriptionParticle Podcast Request TranscriptionAIdempotentInspect
Request the transcription of a back-catalogue episode: one discovered in its podcast's feed but not yet transcribed, which particle_podcast_list_episodes (transcript_status=requestable, with podcast_slug) and particle_podcast_get_episode mark requestable. Its transcript, segments, speakers, entities and mentions do not exist until it is transcribed.
Billing: the request that queues the episode costs $0.05 per episode on every plan, charged in USD and never drawn from the included requests, and needs overage billing turned on (overage_required otherwise). Confirm the charge with the user before requesting. Every other outcome is billed as an ordinary lookup: an episode your organization already requested (the existing request is returned), one another organization's request already queued, or one we already hold.
It returns at once with the request's state: queued, admitted (being transcribed), transcribed, or failed (failure_reason says why; the charge is refunded). Transcription usually takes 5 to 10 minutes. Poll with particle_podcast_get_transcription_request, which is free; never call this tool again to poll. Once transcribed, the episode keeps its slug and every episode tool serves it: particle_podcast_get_episode, particle_podcast_find_mentions with episode_slug, and particle_podcast_search_transcripts.
| Name | Required | Description | Default |
|---|---|---|---|
| episode_slug | Yes | The episode to transcribe: the episode_slug particle_podcast_list_episodes or particle_podcast_get_episode gives an episode whose transcript is requestable (a back-catalogue episode's is its ID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and openWorldHint=true, so the description carries the real burden and does so well: exact cost ($0.05/episode, USD, never drawn from included requests), prerequisite (overage billing must be on), refund on failure, non-charged outcomes (existing/queued/already-held requests billed as ordinary lookups), expected latency (5–10 minutes), return states (queued/admitted/transcribed/failed with failure_reason), and post-transcription discoverability across sibling tools. This is unusually complete behavioral disclosure consistent with idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the eligibility rule, then billing, then lifecycle/polling — a sensible order for an agent. The prose is dense and slightly repetitive around billing outcomes, but nearly every clause supplies a fact an agent needs to avoid a wrong or duplicate (paid) call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return values, and it does: the immediate response carries a request state with enumerated values and failure_reason on failure. Combined with cost, prerequisites, latency and handoff to polling/discovery tools, an agent has everything needed to call this correctly and follow up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single episode_slug parameter, so the baseline is 3; the description adds value by explaining where a valid slug comes from (list_episodes with transcript_status=requestable and podcast_slug, or get_episode) and that the episode ID serves as the slug for back-catalogue episodes. It stops short of format/syntax examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Request the transcription of a back-catalogue episode') and precisely scopes the eligible set: episodes found in a feed but not yet transcribed, marked requestable by particle_podcast_list_episodes (transcript_status=requestable) or particle_podcast_get_episode. It also clarifies what does not yet exist (transcript, segments, speakers, entities, mentions), so the agent can distinguish it from particle_podcast_get_transcription_request and the search/get tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (only requestable back-catalogue episodes), when-not-to-use ('never call this tool again to poll'), and the named alternative for polling (particle_podcast_get_transcription_request, described as free). It also imposes a procedural precondition rarely stated so plainly: confirm the $0.05 charge with the user first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_resolveParticle Podcast ResolveARead-onlyInspect
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-levelsuitability_tierenum (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 useparticle_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.include: ["guest_expertise"]: the show's guest mix — shares of its analyzed guest appearances by established, senior and in-field guests and promotional appearances, and the occupations and fields it books most.recent_episodes: N: inline this many of each result's most recent episodes (slug, title, published_at, duration) — skip the follow-upparticle_podcast_list_episodescall when you only need the most recent tail.
Find shows by who they book with guest_occupation or guest_field (resolve the words to codes with particle_expertise_resolve first) and the share floors min_established_guest_share, min_in_field_guest_share and max_promotional_guest_share: guest_field="banking-finance-and-investment" with min_established_guest_share=0.5 finds shows that book established finance experts. For the shows that booked an occupation's or field's guests most in a recent window, use particle_expertise_get with include: ["top_podcasts"].
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Exact slug match for a known handle (e.g. 'all-in'). | |
| limit | No | Maximum candidates to return (1-25, default 5). | |
| query | No | Free-text search across podcast titles and descriptions (case-insensitive partial match). Omit to fall back to the most recently updated podcasts. | |
| include | No | 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. 'guest_expertise' adds the show's guest mix: the shares of its analyzed guest appearances by established, senior or in-field guests and promotional appearances, and the occupations and fields it books most (codes the guest_ filters accept). 'speaker_statement_characteristics' adds how the show's lines are said over the last 365 days: each sentiment, certainty, specificity and temporal_orientation label's share of its scored lines, and for each pole label the share of profiled shows with a lower share (e.g. more forward-looking than 82% of shows) — how the show talks, not what it covers. The high-level suitability_tier and bias enums are always rendered without opt-in. Off by default; opt in only when needed. | |
| rss_url | No | Canonical RSS feed URL. Resolves directly to the matching podcast. | |
| itunes_id | No | Numeric Apple Podcasts / iTunes ID (e.g. '1502871393'). Resolves directly to the matching podcast. | |
| topic_slug | No | Filter 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. | |
| guest_field | No | Only shows whose analyzed guests include someone listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve. | |
| min_popularity | No | Restrict 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_episodes | No | Inline 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. | |
| guest_occupation | No | Only shows whose analyzed guests include someone listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve. | |
| suitability_tier | No | Filter candidates by brand-suitability tier. Podcasts without a suitability analysis are excluded when set. | |
| min_in_field_guest_share | No | Only shows where at least this share (0-1) of analyzed guest appearances are guests speaking within their own field. | |
| max_promotional_guest_share | No | Only shows where at most this share (0-1) of analyzed guest appearances are promotional; 0 keeps only shows with none. | |
| min_established_guest_share | No | Only shows where at least this share (0-1) of analyzed guest appearances are by guests of established standing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations: forgiving matching, best-match ordering, match_quality, empty-list meaning, premium-plan requirements for certain hydrations, and which fields are always rendered. Annotations already cover read-only safety, so the remaining premium/rate-limit details are not essential, but the description adds rich operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose and return handle, then organizes advanced filters and hydrations clearly. It is long and somewhat duplicative with the include parameter schema, but most content is relevant and structured rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 optional parameters, no output schema, and complex hydration options, the description is complete enough for correct invocation. It explains return fields, default browsing behavior, result ordering, premium constraints, and when to use follow-up tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningfully supplements the schema with examples and cross-tool guidance for guest filters, topic concentration, popularity, and hydrations, though much of the include list duplicates the very detailed schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: find a podcast by title, slug, iTunes ID, or RSS URL. It also states what is returned and identifies the resulting slug as the agent-facing handle for other podcast tools, clearly distinguishing it from siblings such as list_episodes and find_mentions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly covers multiple usage modes: identifier lookup, forgiving free-text search, no-identifier browsing, filtering by topic/suitability/popularity/guest attributes, and optional hydrations. It also routes agents to alternatives such as particle_podcast_list_episodes when recent_episodes is insufficient and particle_expertise_get for top podcasts by guest field.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_podcast_search_transcriptsParticle Podcast Search TranscriptsARead-onlyInspect
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_searchcarries 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_searchcarries 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.
The question's constraints go on the first call. Who is speaking, which person, company or show, which window or language: when the question states it, pass it from the start, because a search without it answers a different question. Hold back only the filters you add on your own (a segment_type, a role, a narrower window) until a search shows the topic has coverage: every filter compounds, and each one can remove all results. If a search returns nothing because of a filter, the error names the parameter responsible and the retry to make — act on it rather than re-issuing variations of the same query, and when a constraint the question stated is what emptied it, say so before showing anything wider.
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.
Who is speaking. When the question restricts who speaks by occupation, profession or industry ("medical professionals", "economists", "lawyers"), pass the words themselves as guest_occupation, which resolves an everyday word to the occupation, field or capacity it names, or a code from particle_expertise_resolve as guest_occupation/guest_field (plus guest_standing="established" or guest_practicing=true when credentials matter); never stand the profession in for a filter inside semantic_search. On unresolved_reference, resolve and retry; never drop the filter. A word no occupation names may name a capacity ("founders", "politicians"): pass it as guest_capacity. The filters AND together, so two groups ("founders and VCs") take one call each. The filters keep segments in which such a guest speaks, so a window can also carry the host's lines: each full-format match lists its identified speakers as **Speaker:** rows with their occupation codes, standing and seniority — check them before attributing a line to a credential.
How each line is said. Lines in topic and interview segments end with their speaker statement characteristics, pole labels only, e.g. _[positive · confident · future]_: sentiment (negative/positive), certainty (hedged/confident), specificity (vague/specific) and temporal orientation (past/future). A pole label means the line clearly reads that way; _[neutral]_ means it leans clearly on no axis; no brackets means the line was not read (short lines, intros, ad breaks). With output_format=json they are each line's speaker_statement_characteristics object, middle labels included.
Filtering by how a line is said. Pass speaker_statement_characteristics to keep only lines said a certain way: {"sentiment": ["negative"]} for criticism, {"specificity": ["specific"], "temporal_orientation": ["future"]} for concrete predictions, {"certainty": ["confident"], "sentiment": ["positive"], "temporal_orientation": ["future"]} for a high-conviction outlook. Put the topic, never the tone, in semantic_search. Every matched or mention line then carries labels the filter accepts.
Without a topic. On particle_podcast_search_transcripts, the filter alone with episode_slug, speaker or a guest_ filter (no semantic_search or keyword_search) returns the strongest lines said that way, at most 50, strongest first: an episode's boldest predictions, or a person's most confident claims. Their Match row reads characteristics. For the strongest lines naming a person, company or entity, pass the filter with sort: "strength" on particle_podcast_find_mentions instead.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | How 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. | |
| sort | No | Sort order. Defaults to relevance. | |
| limit | No | Results per page (1-50, default 10). | |
| since | No | Only segments from episodes published on or after this ISO 8601 date. | |
| until | No | Only segments from episodes published on or before this ISO 8601 date. | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| format | No | 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. | |
| context | No | 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. | |
| speaker | No | Person slug or ID from particle_person_resolve (e.g. 'sam-altman'). Keeps only passages in which this person speaks a line, and only their lines can match: 'did X say Y', where person_slug is 'Y came up in an episode with X'. With keyword_search their own lines must carry every quoted phrase (and every unquoted word under keyword_match=required). A clip of them played on another show does not count, so this finds the original rather than its replays. An empty result does not prove they never said it: narrow with podcast_slug, episode_slug or dates, or try semantic_search. Cannot be combined with the guest_ filters. | |
| language | No | Restrict 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_slug | No | Knowledge-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_type | No | Narrow 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. | |
| guest_field | No | Only episodes with a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment'). | |
| person_slug | No | Person 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_slug | No | Company slug, domain, or ID. Resolves to the company's linked entity and applies as a filter. | |
| episode_slug | No | Filter to a specific episode by slug or ID. A particle.pro or Radar episode link also works. | |
| podcast_slug | No | Podcast slug, internal ID, or numeric iTunes ID. A particle.pro or Radar show link also works. | |
| segment_type | No | Segment type filter. | |
| speaker_role | No | Keep only lines whose speaker held one of these roles in the episode: guest, panelist, host, correspondent, or speaker for any of them. ["guest", "panelist"] leaves out the hosts' lines, such as a news show's scripted reads. Every matched line is spoken in one of the roles. No default: omit it to keep every speaker's lines. Not role, which is how person_slug, company_slug or entity_slug relates to the episode. With speaker, keeps that person's lines in these roles; beside the guest_ filters it must name guest or panelist. | |
| keyword_match | No | How 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_format | No | Output 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. | |
| guest_capacity | No | Only episodes with a guest who knows their field in this capacity (e.g. 'executive_founder' for founders). It narrows the other filters; particle_expertise_resolve names the capacity an everyday word means. | |
| guest_in_field | No | Only episodes with a guest speaking within their own field (the guest the other guest_ filters select, when given). | |
| guest_standing | No | Only episodes with a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'. | |
| keyword_search | No | Words 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. | |
| guest_seniority | No | Only episodes with a guest at this seniority or above. | |
| semantic_search | No | Vector-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. Describe a topic, not a tone: optimistic, skeptical, predictions and other ways something is said go in speaker_statement_characteristics ('AI drug discovery', not 'optimistic predictions about AI drug discovery'). | |
| guest_occupation | No | Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). A word with no occupation filters by the field of research or capacity it names: 'oncologists' is field 3211, 'founders' is capacity executive_founder. | |
| guest_practicing | No | Only episodes with a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group (e.g. '29-1212' or 'physicians'). | |
| speaker_statement_characteristics | No | Keep only lines said a certain way. HOW something is said goes here and never in semantic_search: optimistic or bullish → sentiment positive; skeptical, critical or bearish → sentiment negative; predictions or forecasts → temporal_orientation future (add specificity specific for concrete predictions); high conviction → certainty confident; hedging → certainty hedged; concrete claims → specificity specific. The topic goes in semantic_search and who speaks in the guest_ or speaker filters. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Every matched line carries labels the filter accepts. Example: {"certainty": ["confident"], "temporal_orientation": ["future"]}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, non-destructive behavior, and the description is fully consistent with that. It adds substantial behavioral context beyond annotations: result shape, segment partition semantics, clip overlap behavior, compact-mode tradeoffs, line-characteristic labels, and error behavior when filters remove all results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and organized with bold headings, and its length is justified by the tool's complexity. However, some points are repeated between the overview and the schema-like parameter notes, and the very long prose could be tighter without losing necessary guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 30 parameters, no required fields, and no output schema, the description is unusually complete. It explains return formats, segment and clip behavior, compact screening, speaker characteristics, query construction, and filter interactions, so an agent has enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the parameters, but the description adds strategic meaning beyond those field descriptions. It clarifies semantic versus keyword search, hybrid intersection behavior, `role` versus `speaker`, guest filter interactions, `speaker_statement_characteristics`, and how constraints compound, which is valuable for a 30-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: searching the podcast catalog by spoken episode content. It distinguishes semantic, keyword, and hybrid search modes in the first sentence and later names the sibling tool `particle_podcast_find_mentions` for a different retrieval need, so an agent can identify the tool's role without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives extensive when-to-use guidance: semantic vs keyword vs hybrid query construction, when to use `particle_podcast_find_mentions` instead, how to screen many results with `format: "compact"`, and how to handle filters that are stated by the question versus self-added. It also explains alternatives and retry behavior when filters empty results, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
particle_topic_browseParticle Topic BrowseARead-onlyInspect
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.
To find a topic by name instead of walking the tree, pass query (e.g. artificial intelligence): exact names rank first, then prefixes, then substrings (for a word of 3+ characters), each by story coverage, and parent_slug narrows the search to that subtree. The same name often sits under several parents, so read the ancestry before picking a slug. Topic slugs feed the topic_slug filters on particle_podcast_resolve and particle_podcast_list_guests.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Topics per page (1-100, default 50). | |
| query | No | Find topics by name: exact names first, then names starting with it, then (when it has a word of 3 or more characters) names containing it, each ranked by story coverage. Covers topics with at least 5 story clusters; browse with parent_slug for the long tail. Pages reach the top 200 matches. | |
| cursor | No | Opaque pagination cursor from a previous response. | |
| parent_slug | No | Topic slug or ID. Returns the direct children of this topic. Omit for top-level roots (Politics, Business, Technology, etc.). With query, limits the search to this topic's descendants. | |
| output_format | No | Output 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
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only establish the read-only, non-destructive, closed-world profile. The description goes well beyond: it discloses the ranking order (exact, prefix, substring by story coverage), the query mode's coverage floor ('at least 5 story clusters'), a 200-match page ceiling, and a real caution that the same name sits under several parents so ancestry must be read first.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs, front-loaded with the primary browse behavior before the query alternative. It is slightly repetitive with the schema's query-ranking wording, and the downstream-tool sentence could be trimmed, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, no-required, read-only browse tool with no output schema, the description covers both modes, ranking, coverage limits, pagination ceiling, and downstream slug usage. It does not describe the shape of an individual returned topic, which is a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 genuinely non-schema meaning: the parent/child slug convention with an example ('politics/elections') and the fact that parent_slug narrows query to that subtree. Minor redundancy with the schema's own query ranking text keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Navigate the topic taxonomy') and precisely defines both operating modes: no parent_slug returns top-level roots, with parent_slug returns direct children. No sibling tool in this server does taxonomy browsing, so the agent can identify it immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts the two paths: walk the tree via parent_slug, or 'to find a topic by name instead of walking the tree, pass query.' It also names the downstream consumers ('topic_slug' filters on particle_podcast_resolve and particle_podcast_list_guests), telling the agent why it would call this before those.
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 tool update
- Added
particle_podcast_get_entity_chart
1 tool update
- Changed
particle_podcast_search_transcripts1 field changed- added
Input schema / properties / speaker_roleAdded value: +{ + "description": "Keep only lines whose speaker held one of these roles in the episode: guest, panelist, host, correspondent, or speaker for any of them. [\"guest\", \"panelist\"] leaves out the hosts' lines, such as a news show's scripted reads. Every matched line is spoken in one of the roles. No default: omit it to keep every speaker's lines. Not role, which is how person_slug, company_slug or entity_slug relates to the episode. With speaker, keeps that person's lines in these roles; beside the guest_ filters it must name guest or panelist.", + "items": { + "enum": [ + "guest", + "panelist", + "host", + "correspondent", + "speaker" + ], + "type": "string" + }, + "type": "array" +}
14 tool updates
- Changed
particle_alert_create1 field changed- added
Input schema / properties / filters / properties / speaker_statement_characteristicsAdded value: +{ + "description": "ENTITY_MENTION alerts only — sending it on a PODCAST_SPEAKER or KEYWORD_MENTION alert returns unprocessable_entity. Keeps a match only when one of its mention lines was said the way you ask, the same filter particle_podcast_find_mentions takes: {'sentiment': ['negative']} for criticism of the watched entity, {'specificity': ['specific'], 'temporal_orientation': ['future']} for concrete predictions about it, {'certainty': ['confident']} for confident claims. Labels on one axis OR together, axes AND. Mention lines the filter does not accept are not marked as mentions and do not count. Put how something is said here, never in the alert's title or keyword.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
particle_alert_preview2 fields changed- changed
Input schema / properties / filters / descriptionPrevious value: -"Same 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)."New value: +"Same as particle_alert_create.filters. Pass the filters you intend to save so the estimate reflects what the alert would actually surface. languages, speaker_roles, source_popularity and speaker_statement_characteristics narrow the historical sweep exactly as they narrow new matches; relevance is graded only on new matches, so setting it leaves the count unchanged (the estimate is an upper bound when relevance=RELEVANT)." - added
Input schema / properties / filters / properties / speaker_statement_characteristicsAdded value: +{ + "description": "ENTITY_MENTION alerts only — sending it on a PODCAST_SPEAKER or KEYWORD_MENTION alert returns unprocessable_entity. Keeps a match only when one of its mention lines was said the way you ask, the same filter particle_podcast_find_mentions takes: {'sentiment': ['negative']} for criticism of the watched entity, {'specificity': ['specific'], 'temporal_orientation': ['future']} for concrete predictions about it, {'certainty': ['confident']} for confident claims. Labels on one axis OR together, axes AND. Mention lines the filter does not accept are not marked as mentions and do not count. Put how something is said here, never in the alert's title or keyword.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
particle_alert_update1 field changed- added
Input schema / properties / filters / properties / speaker_statement_characteristicsAdded value: +{ + "description": "ENTITY_MENTION alerts only — sending it on a PODCAST_SPEAKER or KEYWORD_MENTION alert returns unprocessable_entity. Keeps a match only when one of its mention lines was said the way you ask, the same filter particle_podcast_find_mentions takes: {'sentiment': ['negative']} for criticism of the watched entity, {'specificity': ['specific'], 'temporal_orientation': ['future']} for concrete predictions about it, {'certainty': ['confident']} for confident claims. Labels on one axis OR together, axes AND. Mention lines the filter does not accept are not marked as mentions and do not count. Put how something is said here, never in the alert's title or keyword.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
particle_company_get_statement_characteristics - Added
particle_person_get_statement_characteristics - Added
particle_podcast_compare_share_of_voice - Changed
particle_podcast_find_mentions2 fields changed- added
Input schema / properties / sortAdded value: +{ + "description": "Episode order. 'recency' (default) is newest first. 'strength' requires speaker_statement_characteristics and puts the episodes whose mentions carry those labels most clearly first (the most clearly negative takes, the most confident predictions), each episode's mentions strongest first. Pass the same sort with a cursor.", + "enum": [ + "recency", + "strength" + ], + "type": "string" +} - added
Input schema / properties / speaker_statement_characteristicsAdded value: +{ + "description": "Keep only mentions said a certain way. This tool takes no topic text: the subject is person_slug, company_slug or entity_slug, and HOW it is spoken of goes here: criticism, skepticism or bearish takes → sentiment negative; praise, optimism or bullish takes → sentiment positive; predictions or forecasts → temporal_orientation future (add specificity specific for concrete predictions); high conviction → certainty confident; hedging → certainty hedged; concrete claims → specificity specific. Who speaks goes in the guest_ filters. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Every mention line carries labels the filter accepts. Needs a subject with a knowledge graph entity: one matched only by name is refused. Example, criticism of the subject: {\"sentiment\": [\"negative\"]}. To narrow to a topic as well, call particle_podcast_search_transcripts with the subject's company_slug or entity_slug, the topic in semantic_search, and this filter.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
particle_podcast_get_episode2 fields changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 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), 'guest_expertise' (each guest's expertise read and how the episode used it: whether they spoke within their field, whether the appearance was promotional, how they were introduced). Default response is lean — request only what you need."New value: +"Optional 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), 'guest_expertise' (each guest's expertise read and how the episode used it: whether they spoke within their field, whether the appearance was promotional, how they were introduced), 'speaker_statement_characteristics' (how the lines were said: label shares overall and per identified speaker, who is most hedged or forward-looking, and up to 5 of its strongest predictions, confident claims, criticism and optimism lines). Default response is lean — request only what you need." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "transcript", - "segments", - "entities", - "clips", - "topics", - "related", - "guest_expertise" -]New value: +[ + "transcript", + "segments", + "entities", + "clips", + "topics", + "related", + "guest_expertise", + "speaker_statement_characteristics" +]
- Changed
particle_podcast_get_mention_trends2 fields changed- added
Input schema / properties / breakdownAdded value: +{ + "description": "timeseries only: also split each bucket's mentions by their label on this speaker statement characteristics axis: breakdown='sentiment' answers 'is it spoken of more negatively this quarter?'. Each bucket's label shares are of its scored mentions, and a bucket with fewer than 20 is marked low sample. Mention counts are unchanged. Needs published_after, at most 365 days before published_before.", + "enum": [ + "sentiment", + "certainty", + "specificity", + "temporal_orientation" + ], + "type": "string" +} - added
Input schema / properties / speaker_statement_characteristicsAdded value: +{ + "description": "timeseries only: count only mentions said a certain way: {\"temporal_orientation\": [\"future\"]} charts predictions about the subject; {\"sentiment\": [\"negative\"]} criticism. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Needs published_after, at most 365 days before published_before.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
particle_podcast_get_share_of_voice9 fields changed- added
Input schema / properties / breakdownAdded value: +{ + "description": "Also split each group's lines by their label on this axis: by='occupation' with breakdown='sentiment' is how each occupation spoke of the subject. A group's breakdown shares are of its scored mentions, and a group with fewer than 20 is marked low sample. Must differ from by. Not with keyword_search.", + "enum": [ + "sentiment", + "certainty", + "specificity", + "temporal_orientation" + ], + "type": "string" +} - changed
Input schema / properties / by / descriptionPrevious value: -"Group the speakers by 'occupation' (SOC 2018, default) or 'field' (ANZSRC 2020 fields of research)."New value: +"Group the speakers by 'occupation' (SOC 2018, default) or 'field' (ANZSRC 2020 fields of research), or group the counted lines by HOW they were said: 'sentiment', 'certainty', 'specificity' or 'temporal_orientation' gives one group per label (how negatively or positively NVIDIA is spoken of is by='sentiment'). Not with keyword_search." - changed
Input schema / properties / by / enumPrevious value: -[ - "occupation", - "field" -]New value: +[ + "occupation", + "field", + "sentiment", + "certainty", + "specificity", + "temporal_orientation" +] - added
Input schema / properties / examplesAdded value: +{ + "description": "Also quote up to this many lines (0-3, default 0) for each group, or with breakdown for each of its labels: the quote, who said it, the episode and a timestamp linked to the moment. Strongest first: the lines that most clearly carry the label or read the way speaker_statement_characteristics asks; with neither, the newest. At most one per episode, from different speakers where it can. Not with keyword_search.", + "maximum": 3, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / level / descriptionPrevious value: -"Group level: 'major' (default; SOC major groups or ANZSRC divisions) or 'detailed' (detailed occupations or ANZSRC groups)."New value: +"Group level: 'detailed' (default; detailed occupations or ANZSRC groups, each with the top-level group it sits under) or 'major' (SOC major groups or ANZSRC divisions only)." - changed
Input schema / properties / level / enumPrevious value: -[ - "major", - "detailed" -]New value: +[ + "detailed", + "major" +] - added
Input schema / properties / speaker_statement_characteristicsAdded value: +{ + "description": "Count only mentions said a certain way: {\"temporal_orientation\": [\"future\"]} splits who makes predictions about the subject; {\"sentiment\": [\"negative\"]} who criticizes it. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Not with keyword_search.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +} - changed
Input schema / properties / speakers / descriptionPrevious value: -"Whose lines count: 'all' (default, hosts included) or 'guests' (guests and panelists only)."New value: +"Whose lines count: 'guests' (default; guests and panelists) or 'all' (hosts included). Hosts speak most mention lines and their own occupations dominate an 'all' split, so pass 'all' only when the hosts' voice is the question." - changed
Input schema / properties / speakers / enumPrevious value: -[ - "all", - "guests" -]New value: +[ + "guests", + "all" +]
- Added
particle_podcast_get_transcription_request - Added
particle_podcast_request_transcription - Changed
particle_podcast_resolve2 fields changed- changed
Input schema / properties / include / descriptionPrevious 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. 'guest_expertise' adds the show's guest mix: the shares of its analyzed guest appearances by established, senior or in-field guests and promotional appearances, and the occupations and fields it books most (codes the guest_ filters accept). 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. 'guest_expertise' adds the show's guest mix: the shares of its analyzed guest appearances by established, senior or in-field guests and promotional appearances, and the occupations and fields it books most (codes the guest_ filters accept). 'speaker_statement_characteristics' adds how the show's lines are said over the last 365 days: each sentiment, certainty, specificity and temporal_orientation label's share of its scored lines, and for each pole label the share of profiled shows with a lower share (e.g. more forward-looking than 82% of shows) — how the show talks, not what it covers. The high-level suitability_tier and bias enums are always rendered without opt-in. Off by default; opt in only when needed." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "external_links", - "suitability", - "ratings_summary", - "bias", - "rankings", - "format", - "related", - "recommended_guests", - "recommended_sponsors", - "coverage", - "guest_expertise" -]New value: +[ + "external_links", + "suitability", + "ratings_summary", + "bias", + "rankings", + "format", + "related", + "recommended_guests", + "recommended_sponsors", + "coverage", + "guest_expertise", + "speaker_statement_characteristics" +]
- Changed
particle_podcast_search_transcripts2 fields changed- changed
Input schema / properties / semantic_search / descriptionPrevious value: -"Vector-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."New value: +"Vector-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. Describe a topic, not a tone: optimistic, skeptical, predictions and other ways something is said go in speaker_statement_characteristics ('AI drug discovery', not 'optimistic predictions about AI drug discovery')." - added
Input schema / properties / speaker_statement_characteristicsAdded value: +{ + "description": "Keep only lines said a certain way. HOW something is said goes here and never in semantic_search: optimistic or bullish → sentiment positive; skeptical, critical or bearish → sentiment negative; predictions or forecasts → temporal_orientation future (add specificity specific for concrete predictions); high conviction → certainty confident; hedging → certainty hedged; concrete claims → specificity specific. The topic goes in semantic_search and who speaks in the guest_ or speaker filters. Labels listed for one axis match any of them; axes combine with AND, so add only the axes the request names. Every matched line carries labels the filter accepts. Example: {\"certainty\": [\"confident\"], \"temporal_orientation\": [\"future\"]}.", + "properties": { + "certainty": { + "description": "How sure the speaker sounds. 'confident' for flat assertions and high conviction; 'hedged' for maybe, I think, it could, and other hedging; 'neutral' for neither.", + "items": { + "enum": [ + "hedged", + "neutral", + "confident" + ], + "type": "string" + }, + "type": "array" + }, + "sentiment": { + "description": "The statement's tone. 'positive' for optimistic, bullish, approving or praising lines; 'negative' for skeptical, bearish, critical or worried ones; 'neutral' for lines that clearly lean neither way.", + "items": { + "enum": [ + "negative", + "neutral", + "positive" + ], + "type": "string" + }, + "type": "array" + }, + "specificity": { + "description": "Whether the line commits to something concrete. 'specific' for names, numbers, dates and mechanisms (concrete claims); 'vague' for generalities; 'neutral' for neither.", + "items": { + "enum": [ + "vague", + "neutral", + "specific" + ], + "type": "string" + }, + "type": "array" + }, + "temporal_orientation": { + "description": "Where the line points in time. 'future' for predictions, forecasts, plans and expectations; 'past' for looking back; 'present' for how things are now.", + "items": { + "enum": [ + "past", + "present", + "future" + ], + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
3 tool updates
- Changed
particle_podcast_get_guest1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 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), 'in_field_appearances' (most recent appearances where they spoke within their own field of expertise). Default response is the profile + lifetime stats."New value: +"Optional 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, each with the venues that led there, its suitability tier, latest episode and chart breadth; shows they appeared on, same-host sibling feeds, dormant and UNSAFE shows are already left out; the pitch list), 'in_field_appearances' (most recent appearances where they spoke within their own field of expertise). Default response is the profile + lifetime stats."
- Changed
particle_podcast_get_mention_trends5 fields changed- changed
Input schema / properties / change / descriptionPrevious value: -"compare only: keep podcasts that are 'new' to the subject (current window only), 'continuing' (both windows) or 'dropped' (previous window only)."New value: +"compare only: keep podcasts with this label. 'new': started talking about the subject: two or more mention lines in the window, none in the lookback before it, on a show that published at least four episodes there. Use it for 'which shows started talking about X' or 'mentioned X for the first time'. 'returning': back after a gap in the lookback. 'passing': a single line, a first in the lookback. 'newly_tracked': too little published history to tell (fewer than four episodes in the lookback, which includes a monthly show over the default 90 days: pass lookback_days=180 for those). 'continuing': both windows. 'dropped': the previous window only." - changed
Input schema / properties / change / enumPrevious value: -[ - "new", - "continuing", - "dropped" -]New value: +[ + "new", + "returning", + "passing", + "newly_tracked", + "continuing", + "dropped" +] - added
Input schema / properties / lookback_daysAdded value: +{ + "description": "compare only: days before published_after a podcast must not have mentioned the subject in to be 'new' (7-180, default 90; never shorter than the previous window).", + "maximum": 180, + "minimum": 7, + "type": "integer" +} - changed
Input schema / properties / role / descriptionPrevious value: -"Constrain how the subject participates: guest, host, panelist, correspondent, or mention."New value: +"Constrain how the subject participates: guest, host, panelist, correspondent, or mention. In compare mode the lookback's earlier-mention check counts any mention whatever the role, so a first guest appearance on a show that named the subject before is 'returning', not 'new'." - changed
Input schema / properties / sort / descriptionPrevious value: -"compare only: 'mentions' (default, most current-window mention lines first), 'rising' or 'falling' (largest gain or loss from the previous window first), or 'popularity' (biggest shows first)."New value: +"compare only: 'mentions' (most current-window mention lines first), 'rising' or 'falling' (largest gain or loss from the previous window first), or 'popularity' (biggest shows first). Defaults to popularity with change 'new' or 'returning', else mentions."
- Changed
particle_podcast_get_rankings2 fields changed- changed
Input schema / properties / change / descriptionPrevious value: -"Mode=movers only: filter by change type. Defaults to all."New value: +"Mode=movers only: filter by change type. Defaults to all. 'debut': shows on this chart slot for the first time since tracking began (May 2026) — use it for 'new podcasts', 'just launched', 'debuted'. 'new': every entry, mostly established shows returning. 'reentry': only the returning ones." - changed
Input schema / properties / change / enumPrevious value: -[ - "all", - "up", - "down", - "new", - "exit" -]New value: +[ + "all", + "up", + "down", + "new", + "debut", + "reentry", + "exit" +]
1 tool update
- Changed
particle_podcast_get_rankings1 field changed- changed
Input schema / properties / cursor / descriptionPrevious value: -"Opaque pagination cursor from a previous response. Not supported by mode=movers."New value: +"Opaque pagination cursor from a previous response."
1 tool update
- Added
particle_podcast_get_mention_trends
2 tool updates
- Changed
particle_podcast_get_episode3 fields changed- changed
Input schema / properties / transcript_end / descriptionPrevious value: -"Transcript end clip in seconds."New value: +"Transcript range end in seconds. Lines that overlap the range are returned whole." - changed
Input schema / properties / transcript_speaker / descriptionPrevious value: -"Filter the transcript to one speaker (name or entity slug)."New value: +"Filter the transcript to one speaker: a name, a person slug or ID, or an entity slug or ID." - changed
Input schema / properties / transcript_start / descriptionPrevious value: -"Transcript start clip in seconds."New value: +"Transcript range start in seconds. Lines that overlap the range are returned whole."
- Changed
particle_podcast_search_transcripts1 field changed- added
Input schema / properties / speakerAdded value: +{ + "description": "Person slug or ID from particle_person_resolve (e.g. 'sam-altman'). Keeps only passages in which this person speaks a line, and only their lines can match: 'did X say Y', where person_slug is 'Y came up in an episode with X'. With keyword_search their own lines must carry every quoted phrase (and every unquoted word under keyword_match=required). A clip of them played on another show does not count, so this finds the original rather than its replays. An empty result does not prove they never said it: narrow with podcast_slug, episode_slug or dates, or try semantic_search. Cannot be combined with the guest_ filters.", + "type": "string" +}
1 tool update
- Changed
particle_topic_browse2 fields changed- changed
Input schema / properties / parent_slug / descriptionPrevious value: -"Topic slug or ID. Returns the direct children of this topic. Omit for top-level roots (Politics, Business, Technology, etc.)."New value: +"Topic slug or ID. Returns the direct children of this topic. Omit for top-level roots (Politics, Business, Technology, etc.). With query, limits the search to this topic's descendants." - added
Input schema / properties / queryAdded value: +{ + "description": "Find topics by name: exact names first, then names starting with it, then (when it has a word of 3 or more characters) names containing it, each ranked by story coverage. Covers topics with at least 5 story clusters; browse with parent_slug for the long tail. Pages reach the top 200 matches.", + "maxLength": 100, + "minLength": 2, + "type": "string" +}
1 tool update
- Changed
particle_alert_create1 field changed- changed
Input schema / properties / kind / descriptionPrevious 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."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: by default as guest/panelist/correspondent/audience or in an excerpted soundbite (SOUNDBITE_SPEAKER), never as host; speaker_roles replaces that set. 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."
1 tool update
- Changed
particle_podcast_get_share_of_voice3 fields changed- added
Input schema / properties / keyword_searchAdded value: +{ + "description": "Split the lines that say these words instead of an entity's mentions: every word in one line, case-insensitive; wrap words in double quotes to require them adjacent and in order. Words count as spoken, so a word with two meanings counts both. Window at most 90 days.", + "maxLength": 500, + "type": "string" +} - changed
Input schema / properties / person_slug / descriptionPrevious value: -"Person slug from particle_person_resolve (e.g. 'sam-altman'). One of person_slug, company_slug or entity_slug is required."New value: +"Person slug from particle_person_resolve (e.g. 'sam-altman'). One of person_slug, company_slug, entity_slug or keyword_search is required." - changed
Input schema / properties / published_after / descriptionPrevious value: -"Only episodes published on or after this date (YYYY-MM-DD). Defaults to 30 days before published_before; the window may span at most 365 days."New value: +"Only episodes published on or after this date (YYYY-MM-DD). Defaults to 30 days before published_before; the window may span at most 365 days for an entity and 90 for a keyword."
5 tool updates
- Changed
particle_podcast_find_mentions3 fields changed- added
Input schema / properties / guest_capacityAdded value: +{ + "description": "Only mentions spoken by a guest who knows their field in this capacity (e.g. 'public_official' for politicians). particle_expertise_resolve names the capacity an everyday word means.", + "enum": [ + "researcher", + "licensed_professional", + "practitioner", + "executive_founder", + "public_official", + "journalist_analyst", + "creator_entertainer", + "athlete_coach", + "clergy", + "firsthand", + "layperson" + ], + "type": "string" +} - changed
Input schema / properties / guest_occupation / descriptionPrevious value: -"Only mentions spoken by a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'financial-and-investment-analysts')."New value: +"Only mentions spoken by a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'financial-and-investment-analysts' or 'physicians'). A word with no occupation filters by the field of research or capacity it names: 'investors' is field 350208, 'politicians' is capacity public_official." - changed
Input schema / properties / guest_practicing / descriptionPrevious value: -"Only mentions spoken by a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation."New value: +"Only mentions spoken by a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group."
- Changed
particle_podcast_get_episode_timeseries3 fields changed- added
Input schema / properties / guest_capacityAdded value: +{ + "description": "Only episodes with a guest who knows their field in this capacity (e.g. 'executive_founder' for founders). It narrows the other filters; particle_expertise_resolve names the capacity an everyday word means.", + "enum": [ + "researcher", + "licensed_professional", + "practitioner", + "executive_founder", + "public_official", + "journalist_analyst", + "creator_entertainer", + "athlete_coach", + "clergy", + "firsthand", + "layperson" + ], + "type": "string" +} - changed
Input schema / properties / guest_occupation / descriptionPrevious value: -"Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212')."New value: +"Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). A word with no occupation filters by the field of research or capacity it names: 'oncologists' is field 3211, 'founders' is capacity executive_founder." - changed
Input schema / properties / guest_practicing / descriptionPrevious value: -"Only episodes with a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation (e.g. '29-1212')."New value: +"Only episodes with a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group (e.g. '29-1212' or 'physicians')."
- Changed
particle_podcast_list_episodes3 fields changed- added
Input schema / properties / guest_capacityAdded value: +{ + "description": "Only episodes with a guest who knows their field in this capacity (e.g. 'executive_founder' for founders). It narrows the other filters; particle_expertise_resolve names the capacity an everyday word means.", + "enum": [ + "researcher", + "licensed_professional", + "practitioner", + "executive_founder", + "public_official", + "journalist_analyst", + "creator_entertainer", + "athlete_coach", + "clergy", + "firsthand", + "layperson" + ], + "type": "string" +} - changed
Input schema / properties / guest_occupation / descriptionPrevious value: -"Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212')."New value: +"Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). A word with no occupation filters by the field of research or capacity it names: 'oncologists' is field 3211, 'founders' is capacity executive_founder." - changed
Input schema / properties / guest_practicing / descriptionPrevious value: -"Only episodes with a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation (e.g. '29-1212')."New value: +"Only episodes with a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group (e.g. '29-1212' or 'physicians')."
- Changed
particle_podcast_list_guests2 fields changed- changed
Input schema / properties / occupation / descriptionPrevious value: -"Only guests listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212'). Directory mode only."New value: +"Only guests listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). Directory mode only." - changed
Input schema / properties / practicing / descriptionPrevious value: -"Only guests who still work in the occupation. Needs a detailed SOC 2018 occupation (e.g. '29-1212' Cardiologists). Directory mode only."New value: +"Only guests who still work in the occupation. Needs a SOC 2018 occupation or group (e.g. '29-1212' Cardiologists or 'physicians'). Directory mode only."
- Changed
particle_podcast_search_transcripts3 fields changed- added
Input schema / properties / guest_capacityAdded value: +{ + "description": "Only episodes with a guest who knows their field in this capacity (e.g. 'executive_founder' for founders). It narrows the other filters; particle_expertise_resolve names the capacity an everyday word means.", + "enum": [ + "researcher", + "licensed_professional", + "practitioner", + "executive_founder", + "public_official", + "journalist_analyst", + "creator_entertainer", + "athlete_coach", + "clergy", + "firsthand", + "layperson" + ], + "type": "string" +} - changed
Input schema / properties / guest_occupation / descriptionPrevious value: -"Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212')."New value: +"Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve, or a SOC group or everyday name (e.g. 'cardiologists', '29-1212', 'physicians' or 'doctors'). A word with no occupation filters by the field of research or capacity it names: 'oncologists' is field 3211, 'founders' is capacity executive_founder." - changed
Input schema / properties / guest_practicing / descriptionPrevious value: -"Only episodes with a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation (e.g. '29-1212')."New value: +"Only episodes with a guest who still works in guest_occupation, which must be a SOC 2018 occupation or group (e.g. '29-1212' or 'physicians')."
2 tool updates
- Changed
particle_person_get1 field changed- changed
Input schema / properties / include / descriptionPrevious 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), 'expertise' (what they know and how established they are: standing, seniority, experience, the occupations and fields they are listed under with codes the guest_ filters accept, organization, credential). 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' (the current team of an NFL, MLB or NHL player, sports played, and teams played for or coached with years and leagues), 'expertise' (what they know and how established they are: standing, seniority, experience, the occupations and fields they are listed under with codes the guest_ filters accept, organization, credential). Default response is lean — request only what you need."
- Changed
particle_podcast_list_guests1 field changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional per-guest sections: 'expertise' (each guest's standing, seniority, most specific occupation and field, and organization on one line). Directory mode only."New value: +"Optional per-guest sections: 'expertise' (widens the occupation codes, standing and seniority every row carries to the fuller one-line read with the organization). Directory mode only."
12 tool updates
- Added
particle_expertise_get - Added
particle_expertise_resolve - Changed
particle_person_get2 fields changed- changed
Input schema / properties / include / descriptionPrevious 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."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), 'expertise' (what they know and how established they are: standing, seniority, experience, the occupations and fields they are listed under with codes the guest_ filters accept, organization, credential). Default response is lean — request only what you need." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "external_links", - "podcast_appearances", - "companies", - "sports" -]New value: +[ + "external_links", + "podcast_appearances", + "companies", + "sports", + "expertise" +]
- Changed
particle_podcast_find_mentions6 fields changed- added
Input schema / properties / guest_fieldAdded value: +{ + "description": "Only mentions spoken by a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve.", + "type": "string" +} - added
Input schema / properties / guest_in_fieldAdded value: +{ + "description": "Only mentions spoken by a guest speaking within their own field (the guest the other guest_ filters select, when given).", + "type": "boolean" +} - added
Input schema / properties / guest_occupationAdded value: +{ + "description": "Only mentions spoken by a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'financial-and-investment-analysts').", + "type": "string" +} - added
Input schema / properties / guest_practicingAdded value: +{ + "description": "Only mentions spoken by a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation.", + "type": "boolean" +} - added
Input schema / properties / guest_seniorityAdded value: +{ + "description": "Only mentions spoken by a guest at this seniority or above.", + "enum": [ + "professional", + "senior", + "distinguished" + ], + "type": "string" +} - added
Input schema / properties / guest_standingAdded value: +{ + "description": "Only mentions spoken by a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'.", + "enum": [ + "established", + "self_described", + "unverified" + ], + "type": "string" +}
- Changed
particle_podcast_get_episode2 fields changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 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."New value: +"Optional 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), 'guest_expertise' (each guest's expertise read and how the episode used it: whether they spoke within their field, whether the appearance was promotional, how they were introduced). Default response is lean — request only what you need." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "transcript", - "segments", - "entities", - "clips", - "topics", - "related" -]New value: +[ + "transcript", + "segments", + "entities", + "clips", + "topics", + "related", + "guest_expertise" +]
- Changed
particle_podcast_get_episode_timeseries6 fields changed- added
Input schema / properties / guest_fieldAdded value: +{ + "description": "Only episodes with a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment').", + "type": "string" +} - added
Input schema / properties / guest_in_fieldAdded value: +{ + "description": "Only episodes with a guest speaking within their own field (the guest the other guest_ filters select, when given).", + "type": "boolean" +} - added
Input schema / properties / guest_occupationAdded value: +{ + "description": "Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212').", + "type": "string" +} - added
Input schema / properties / guest_practicingAdded value: +{ + "description": "Only episodes with a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation (e.g. '29-1212').", + "type": "boolean" +} - added
Input schema / properties / guest_seniorityAdded value: +{ + "description": "Only episodes with a guest at this seniority or above.", + "enum": [ + "professional", + "senior", + "distinguished" + ], + "type": "string" +} - added
Input schema / properties / guest_standingAdded value: +{ + "description": "Only episodes with a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'.", + "enum": [ + "established", + "self_described", + "unverified" + ], + "type": "string" +}
- Changed
particle_podcast_get_guest2 fields changed- changed
Input schema / properties / include / descriptionPrevious value: -"Optional 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."New value: +"Optional 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), 'in_field_appearances' (most recent appearances where they spoke within their own field of expertise). Default response is the profile + lifetime stats." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "appearances", - "podcasts", - "suitability", - "recommended_podcasts" -]New value: +[ + "appearances", + "podcasts", + "suitability", + "recommended_podcasts", + "in_field_appearances" +]
- Added
particle_podcast_get_share_of_voice - Changed
particle_podcast_list_episodes6 fields changed- added
Input schema / properties / guest_fieldAdded value: +{ + "description": "Only episodes with a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment').", + "type": "string" +} - added
Input schema / properties / guest_in_fieldAdded value: +{ + "description": "Only episodes with a guest speaking within their own field (the guest the other guest_ filters select, when given).", + "type": "boolean" +} - added
Input schema / properties / guest_occupationAdded value: +{ + "description": "Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212').", + "type": "string" +} - added
Input schema / properties / guest_practicingAdded value: +{ + "description": "Only episodes with a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation (e.g. '29-1212').", + "type": "boolean" +} - added
Input schema / properties / guest_seniorityAdded value: +{ + "description": "Only episodes with a guest at this seniority or above.", + "enum": [ + "professional", + "senior", + "distinguished" + ], + "type": "string" +} - added
Input schema / properties / guest_standingAdded value: +{ + "description": "Only episodes with a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'.", + "enum": [ + "established", + "self_described", + "unverified" + ], + "type": "string" +}
- Changed
particle_podcast_list_guests9 fields changed- added
Input schema / properties / appeared_sinceAdded value: +{ + "description": "Only guests with an appearance on or after this date (YYYY-MM-DD or ISO 8601). Directory mode only.", + "type": "string" +} - added
Input schema / properties / capacityAdded value: +{ + "description": "Only guests who know their field in this capacity. Directory mode only.", + "enum": [ + "researcher", + "licensed_professional", + "practitioner", + "executive_founder", + "public_official", + "journalist_analyst", + "creator_entertainer", + "athlete_coach", + "clergy", + "firsthand", + "layperson" + ], + "type": "string" +} - added
Input schema / properties / employerAdded value: +{ + "description": "Only guests whose organization is this company (slug from particle_company_resolve, or a domain). Directory mode only.", + "type": "string" +} - added
Input schema / properties / fieldAdded value: +{ + "description": "Only guests listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment'). Directory mode only.", + "type": "string" +} - added
Input schema / properties / includeAdded value: +{ + "description": "Optional per-guest sections: 'expertise' (each guest's standing, seniority, most specific occupation and field, and organization on one line). Directory mode only.", + "items": { + "enum": [ + "expertise" + ], + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / occupationAdded value: +{ + "description": "Only guests listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212'). Directory mode only.", + "type": "string" +} - added
Input schema / properties / practicingAdded value: +{ + "description": "Only guests who still work in the occupation. Needs a detailed SOC 2018 occupation (e.g. '29-1212' Cardiologists). Directory mode only.", + "type": "boolean" +} - added
Input schema / properties / seniorityAdded value: +{ + "description": "Only guests at this seniority or above. Directory mode only.", + "enum": [ + "professional", + "senior", + "distinguished" + ], + "type": "string" +} - added
Input schema / properties / standingAdded value: +{ + "description": "Only guests whose standing is recognized this way: 'established' (conferred by others: a credential, a position, recognition in the field), 'self_described', or 'unverified'. Directory mode only.", + "enum": [ + "established", + "self_described", + "unverified" + ], + "type": "string" +}
- Changed
particle_podcast_resolve7 fields changed- added
Input schema / properties / guest_fieldAdded value: +{ + "description": "Only shows whose analyzed guests include someone listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve.", + "type": "string" +} - added
Input schema / properties / guest_occupationAdded value: +{ + "description": "Only shows whose analyzed guests include someone listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve.", + "type": "string" +} - changed
Input schema / properties / include / descriptionPrevious 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."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. 'guest_expertise' adds the show's guest mix: the shares of its analyzed guest appearances by established, senior or in-field guests and promotional appearances, and the occupations and fields it books most (codes the guest_ filters accept). The high-level suitability_tier and bias enums are always rendered without opt-in. Off by default; opt in only when needed." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "external_links", - "suitability", - "ratings_summary", - "bias", - "rankings", - "format", - "related", - "recommended_guests", - "recommended_sponsors", - "coverage" -]New value: +[ + "external_links", + "suitability", + "ratings_summary", + "bias", + "rankings", + "format", + "related", + "recommended_guests", + "recommended_sponsors", + "coverage", + "guest_expertise" +] - added
Input schema / properties / max_promotional_guest_shareAdded value: +{ + "description": "Only shows where at most this share (0-1) of analyzed guest appearances are promotional; 0 keeps only shows with none.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / min_established_guest_shareAdded value: +{ + "description": "Only shows where at least this share (0-1) of analyzed guest appearances are by guests of established standing.", + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / min_in_field_guest_shareAdded value: +{ + "description": "Only shows where at least this share (0-1) of analyzed guest appearances are guests speaking within their own field.", + "maximum": 1, + "minimum": 0, + "type": "number" +}
- Changed
particle_podcast_search_transcripts6 fields changed- added
Input schema / properties / guest_fieldAdded value: +{ + "description": "Only episodes with a guest listed under this ANZSRC 2020 field of research: a code, slug or title from particle_expertise_resolve (e.g. 'banking-finance-and-investment').", + "type": "string" +} - added
Input schema / properties / guest_in_fieldAdded value: +{ + "description": "Only episodes with a guest speaking within their own field (the guest the other guest_ filters select, when given).", + "type": "boolean" +} - added
Input schema / properties / guest_occupationAdded value: +{ + "description": "Only episodes with a guest listed under this occupation: a SOC 2018 or ISCO-08 code, slug or title from particle_expertise_resolve (e.g. 'cardiologists' or '29-1212').", + "type": "string" +} - added
Input schema / properties / guest_practicingAdded value: +{ + "description": "Only episodes with a guest who still works in guest_occupation, which must be a detailed SOC 2018 occupation (e.g. '29-1212').", + "type": "boolean" +} - added
Input schema / properties / guest_seniorityAdded value: +{ + "description": "Only episodes with a guest at this seniority or above.", + "enum": [ + "professional", + "senior", + "distinguished" + ], + "type": "string" +} - added
Input schema / properties / guest_standingAdded value: +{ + "description": "Only episodes with a guest whose standing is recognized this way: 'established' (conferred by others), 'self_described', or 'unverified'.", + "enum": [ + "established", + "self_described", + "unverified" + ], + "type": "string" +}
1 tool update
- Changed
particle_person_get2 fields changed- changed
Input schema / properties / include / descriptionPrevious 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." - changed
Input schema / properties / include / items / enumPrevious value: -[ - "external_links", - "podcast_appearances", - "companies" -]New value: +[ + "external_links", + "podcast_appearances", + "companies", + "sports" +]
2 tool updates
- Changed
particle_alert_create1 field changed- changed
Input schema / properties / notifications / descriptionPrevious 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."
- Changed
particle_alert_update1 field changed- changed
Input schema / properties / notifications / descriptionPrevious 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."
Related MCP Connectors
Podcast knowledge for AI agents: search episodes, pull transcripts and ask questions.
Podcast search, metadata, chapters, and transcripts for AI agents — from $15/mo
Podcast and media analysis: transcripts, captions, chapters, ad markers and show notes.
Search speech in podcasts, government meetings, and your own audio: speakers, entities, timestamps.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI agents to search millions of podcasts, read and search episode transcripts with timestamps and speakers, and access chapters, soundbites, Podcasting 2.0 tags, value-for-value data, feed health, and index statistics through 36 tools.3654 npm1MIT
- AlicenseNot gradedqualityDmaintenanceExtract product mentions, sponsors, and trends from podcast transcripts to generate affiliate revenue, with F1=100% on eval suite and a free tier of 200 calls/day.24 npmMIT
- AlicenseNot gradedqualityDmaintenanceHosted Claude connector that turns the podcasts you already follow into a searchable, askable knowledge source. Ask what a guest said and get the answer back with the exact quote and timestamp.MIT

Podwiseofficial
AlicenseNot gradedqualityAmaintenanceSearch podcast episodes, pull transcripts, ask questions about an episode and export summaries as Markdown.418MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.