pro.particle/particle-pro
REMOTE · MCP.PARTICLE.PRO · SCANNED SEP 26
Podcast intelligence for agents: transcripts, clips, speaker diarization, mention tracking.
Available components
Recent critical change
Authorization (7 Sept 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security60
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (particle_alert_create). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability74
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 16930 tokens (~583/item across 29 items; 28 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management63
- Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the pro.particle/particle-pro MCP server?
pro.particle/particle-pro is a hosted endpoint at https://mcp.particle.pro/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.particle.pro
claude mcp add --transport http pro-particle-particle-pro 'https://mcp.particle.pro/'
{
"mcpServers": {
"pro-particle-particle-pro": {
"url": "https://mcp.particle.pro/"
}
}
} {
"servers": {
"pro-particle-particle-pro": {
"type": "http",
"url": "https://mcp.particle.pro/"
}
}
} [mcp_servers.pro-particle-particle-pro] url = "https://mcp.particle.pro/"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"pro-particle-particle-pro": {
"type": "remote",
"url": "https://mcp.particle.pro/",
"enabled": true
}
}
} openclaw mcp add pro-particle-particle-pro --url 'https://mcp.particle.pro/' --transport streamable-http
mcp_servers:
pro-particle-particle-pro:
url: "https://mcp.particle.pro/" {
"McpServers": {
"pro-particle-particle-pro": {
"Transport": "http",
"Url": "https://mcp.particle.pro/"
}
}
} assistant mcp add pro-particle-particle-pro -t streamable-http -u 'https://mcp.particle.pro/'
{
"mcpServers": {
"pro-particle-particle-pro": {
"type": "http",
"url": "https://mcp.particle.pro/"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 25 Sept 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 0
- Tool “particle_alert_create” rewrote its description, which is the text the model reads security
- Tool “particle_alert_preview” rewrote its description, which is the text the model reads security
- Tool “particle_alert_create” is now declared destructive security
- Tool “particle_alert_update” is now declared destructive security
- 23 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Sept 26 +4
- HTTPS: unverified → pass ▲ security
- 21 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 26 Sept 2026 · Probed https://mcp.particle.pro
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.particle.pro | CN=WR3,O=Google Trust Services,C=US | 21 Aug 2026 | 19 Nov 2026 | RSA 2048 | SHA256-RSA | 50f860968ef1e6e4097a6f611663294d |
| SANs: mcp.particle.pro | ||||||
| CN=WR3,O=Google Trust Services,C=US (CA) | CN=GTS Root R1,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | RSA 2048 | SHA256-RSA | 7ff005a91568d63abc22861684aa4b5a |
| CN=GTS Root R1,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 19 Jun 2020 | 28 Jan 2028 | RSA 4096 | SHA256-RSA | 77bd0d6cdb36f91aea210fc4f058d30d |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of mcp.particle.pro. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| pro. | present | 42154 | 8 | Verified |
| particle.pro. | present | 35017 | 8 | Verified |
| mcp.particle.pro. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.particle.pro | Verified | 200 | |
| http (plaintext) | http://mcp.particle.pro | HTTPS enforced | 301 | https://mcp.particle.pro:443/ |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
particle_alert_create ~1,104
Create an alert that watches a single entity and emails you 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. When a name has no entity slug, or its entity has no podcast coverage (a startup known by a brand that differs from its legal name, a product, a drug, a code word), create a kind=KEYWORD_MENTION alert with `keyword` instead of `entities`. It fires whenever the phrase is spoken — the match particle_podcast_search_transcripts makes for a double-quoted keyword_search phrase (words adjacent and in order), not the looser unquoted match — so also set `description` to say what the phrase means; that is how same-name mentions of something else are filtered out. Use the optional `filters` object to narrow what gets surfaced on every channel (matches list, realtime email, daily/weekly digest). Four independent axes: `languages` (BCP-47-like tags like ['en','pt-BR'] — empty means all languages), `relevance` (EVERYTHING returns on-target + incidental matches, RELEVANT narrows to on-target only — dropping passing mentions), `source_popularity` (ANY keeps every source, POPULAR keeps only matches from podcasts in the top 5% by chart popularity), and `speaker_roles` (PODCAST_SPEAKER alerts only — REPLACES the default appearance set GUEST/PANELIST/CORRESPONDENT/AUDIENCE/SOUNDBITE_SPEAKER; sending it on an ENTITY_MENTION alert errors with unprocessable_entity). Billing: creating an active alert can move an eligible organization's subscription from its credit/trial phase to paid fixed-fee billing. Explain this possible billing change and obtain the user's explicit confirmation before creating an active alert. Creating a paused alert (is_active=false) does not trigger this billing…
| Name | Type | Req | Description |
|---|---|---|---|
| delivery_cadence | string | – | How often matches are emailed: REALTIME (default, one email per match), DAILY (one bundled email each morning), or WEEKLY (one bundled email Monday). |
| description | string | – | Optional longer description of what the alert is for. |
| entities | array | – | 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… |
| filters | object | – | 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… |
| is_active | boolean | – | Whether the alert produces matches. Defaults to true. Set false to create it paused. |
| keyword | string | – | 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 punc… |
| kind | string | – | 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 speake… |
| notifications | array | – | 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. |
| output_format | string | – | 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 matte… |
| title | string | yes | Human-readable title for the alert (e.g. 'OpenAI mentions'). |
No output schema declared.
No examples provided.
particle_alert_delete ~72
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.
| Name | Type | Req | Description |
|---|---|---|---|
| alert_id | string | yes | Alert id to delete. |
No output schema declared.
No examples provided.
particle_alert_get ~266
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 | Type | Req | Description |
|---|---|---|---|
| alert_id | string | yes | Alert id from particle_alert_list or particle_alert_create. |
| include | array | – | Optional sections to embed: 'matches' for the most recent matches the alert has caught, 'deliveries' for the email delivery audit log. |
| match_limit | integer | – | 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 | string | – | 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 matte… |
No output schema declared.
No examples provided.
particle_alert_list ~157
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 | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque pagination cursor from a previous response's cursor field. |
| limit | integer | – | Alerts per page (1-100, default 25). |
| output_format | string | – | 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 matte… |
No output schema declared.
No examples provided.
particle_alert_list_matches ~300
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 | Type | Req | Description |
|---|---|---|---|
| after | string | – | Only matches detected on or after this ISO date (e.g. 2026-05-01). |
| alert_id | string | yes | Alert id whose matches to list. |
| before | string | – | Only matches detected on or before this ISO date. |
| cursor | string | – | Opaque pagination cursor from a previous response's cursor field. |
| limit | integer | – | Matches per page (1-100, default 25). |
| output_format | string | – | 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 matte… |
| view | string | – | Detail level. 'summary' (default) returns each match's entity, episode, and counts. 'detailed' also includes the transcript excerpt windows around each mention. |
No output schema declared.
No examples provided.
particle_alert_preview ~464
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 | Type | Req | Description |
|---|---|---|---|
| entities | array | – | 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. |
| filters | object | – | 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… |
| keyword | string | – | 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. |
| kind | string | – | Signal to preview. Defaults to ENTITY_MENTION. |
| output_format | string | – | 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 matte… |
| window_days | integer | – | How many days back to sweep (1-30, default 7). |
No output schema declared.
No examples provided.
particle_alert_update ~486
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. The optional `filters` object replaces the alert's filter set wholesale — omit to leave the existing filters unchanged, send {} to clear all filters. Same four axes as particle_alert_create.filters: `languages`, `relevance` (EVERYTHING/RELEVANT), `source_popularity` (ANY/POPULAR), and `speaker_roles` (PODCAST_SPEAKER alerts only — sending it on an ENTITY_MENTION alert returns unprocessable_entity).
| Name | Type | Req | Description |
|---|---|---|---|
| alert_id | string | yes | Alert id to update. |
| delivery_cadence | string | – | New delivery cadence. |
| description | string | – | New description. |
| entities | array | – | 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… |
| filters | object | – | 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, relev… |
| is_active | boolean | – | Pause (false) or resume (true) the alert. |
| keyword | string | – | 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. |
| notifications | array | – | Replacement notification emails. When provided, replaces the entire existing set; omit to leave them unchanged. |
| output_format | string | – | 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 matte… |
| title | string | – | New title. |
No output schema declared.
No examples provided.
particle_call ~125
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.
| Name | Type | Req | Description |
|---|---|---|---|
| arguments | object | – | Arguments object for the target tool, matching its input schema. |
| tool | string | yes | Flat name of any public Particle tool (e.g. 'particle_podcast_get_episode'). Discover names and schemas with particle_catalog. |
No output schema declared.
No examples provided.
particle_catalog ~819
Browse the full Particle tool catalog. Your tools/list shows only the default categories, but EVERY public Particle tool is callable by name regardless of what was advertised — call this tool to discover the rest. Without arguments: the categorical menu (every category with tool names, one-line summaries, and an `↳` line listing each tool's expand options). With `category`: the full input schema for each of that category's tools, ready to call. Two conventions the one-line summaries don't convey, so read tools through this lens: - Tools are lean by default and EXPAND. Most return a minimal payload and opt into richer sections via an `include` array (e.g. a company's people, products, and competitors; a person's roles and podcast appearances) or change behavior via a `mode`/`format` switch. The `↳` line names these — a tool does far more than its summary alone implies. - Responses are a graph; slugs are edges. A slug a tool returns (person, company, podcast, episode, publisher, guest) is a valid input to the other tools, so you resolve once and then traverse: company → its people → a person's podcast appearances → that episode's transcript and every entity in it. Categories on offer: - `system` (always-on): Discovery meta-tools: browse the full tool catalog and call any tool by name. - `podcasts` (default): Resolve podcasts, list and fetch episodes, search transcripts, and find entity mentions. - `people` (default): Resolve people and entities to canonical handles and fetch person profiles. - `companies` (default): Resolve companies and fetch company profiles with people, products, and competitors. - `topics` (default): Browse the hierarchical topic taxonomy used to classify podcast episodes. - `podcast_rankings` (default): Podcast chart rankings: current charts, movers, and ranking history. - `podcast_guests` (default): Podcast guest directory, trending guests, and per-guest appearance profiles. - `podcast_advertising` (opt-in): Podcast advertising intelligence:…
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | 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. Whe… |
| output_format | string | – | 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 matte… |
No output schema declared.
No examples provided.
particle_company_get ~350
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 | Type | Req | Description |
|---|---|---|---|
| company_slug | string | 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_r… |
| include | array | – | Optional response sections: 'people' (current leadership and notable people), 'products' (three-level product hierarchy), 'competitors' (competitor list), 'podcast_recommendations' (the ten podcasts… |
| product_status | string | – | Comma-separated lifecycle filter for include=products (e.g. 'active' or 'active,announced'). Allowed values: active, announced, discontinued, rumored. Defaults to 'active'. |
No output schema declared.
No examples provided.
particle_company_resolve ~287
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 | Type | Req | Description |
|---|---|---|---|
| cik | string | – | SEC Central Index Key (e.g. '0000320193'). Comma-separated for bulk. |
| domain | string | – | Company website domain (e.g. 'apple.com'). Comma-separated for bulk. |
| limit | integer | – | Maximum candidates to return (1-25, default 5). |
| qid | string | – | Wikidata QID (e.g. 'Q312'). Comma-separated for bulk. |
| query | string | – | Free-text company name (case-insensitive). Use for human-typed names. |
| ticker | string | – | Stock ticker symbol (e.g. 'NVDA', 'AAPL'). Comma-separated for multi-ticker lookup. |
No output schema declared.
No examples provided.
particle_entity_get ~233
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 | Type | Req | Description |
|---|---|---|---|
| entity_slug | string | yes | Knowledge-graph entity slug or encoded ID from particle_entity_resolve, episode entity listings, or mention payloads (e.g. 'germany', 'bitcoin'). |
| output_format | string | – | 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 matte… |
No output schema declared.
No examples provided.
particle_entity_resolve ~395
Resolve any named thing — person, company, place, or other entity — by free-text name in one union search. Each candidate carries a `type` and the canonical `slug` for that type: - `person`: the canonical person slug. Feed it into `particle_person_get`, every `person_slug` parameter (`particle_podcast_find_mentions`, `particle_podcast_search_transcripts`, `particle_podcast_list_episodes`), or `particle_podcast_get_guest`'s `guest_slug`. - `company`: the canonical company slug. Feed it into `particle_company_get` and every `company_slug` parameter. - `place`/`other`: a bare entity slug. Feed it into the `entity_slug` parameter on `particle_podcast_find_mentions`, `particle_podcast_search_transcripts`, and `particle_podcast_list_episodes` to filter by that entity. Use this first whenever you only have a name and don't know what kind of thing it names. If you already know it's a person, `particle_person_resolve` ranks people only; for companies with a known ticker, domain, CIK, or QID, `particle_company_resolve` has more identifier surface. For bulk resolution, pass a comma-separated `query` (e.g. "sam altman, nvidia, davos") — each name is resolved independently in a single call and `limit` applies per query.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum candidates per query (1-10, default 5). |
| query | string | 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 andree… |
No output schema declared.
No examples provided.
particle_person_get ~283
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. 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 | Type | Req | Description |
|---|---|---|---|
| include | array | – | Optional response sections: 'external_links' (LinkedIn, Wikipedia, social profiles), 'podcast_appearances' (recent podcast appearances with episode and podcast slugs), 'companies' (the full role hist… |
| output_format | string | – | 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 matte… |
| person_slug | string | yes | Canonical person slug from particle_person_resolve (e.g. 'sam-altman'), or the encoded person ID. |
No output schema declared.
No examples provided.
particle_person_resolve ~259
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 | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum candidates per query (1-10, default 5). |
| output_format | string | – | 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 matte… |
| query | string | 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. |
No output schema declared.
No examples provided.
particle_podcast_find_mentions ~1,240
Find dialogue lines where a specific person or company is named in podcast transcripts. ## Two 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. ## Workflow Two patterns, depending on what you already know: - **No specific episode in mind:** call `format="summary"` first to scan, then call `format="detail"` with the slug(s) of the episodes worth reading in full. For most questions (sentiment, recurring themes, who said what when), summary alone has enough signal and the second call isn't needed. - **Already have the episode slug** (e.g. user mentioned the episode by name, or you have it from another tool like `particle_podcast_get_episode` or `particle_podcast_search_transcripts`): skip summary entirely and call `format="detail"` with `episode_slug` directly. ## Examples *Wide scan, then drill in:* User asks "what has All-In said about OpenAI recently?". Call `format="summary"`, `company_slug="openai"`, `podcast_slug="all-in"`, `since="2025-11-01"`, `limit=20`. Read the mention lines per episode; if 2-3 episodes have substantive discussion, call `format="detail"`, `episode_slug="slug1,slug2,slug3"` for full context in one round-trip. *Direct drill-in:* User says "In All-In #200 they discuss OpenAI's strategy — pull the full quotes". Call `format="detail"`, `episode_slug="all-in-20…
| Name | Type | Req | Description |
|---|---|---|---|
| company_slug | string | – | Company slug, domain, or canonical ID (e.g. 'nvidia' or 'nvidia.com'). Resolves to the company's linked entity. |
| context_lines | integer | – | Surrounding dialogue lines around each mention (1-20, default 2). Detail mode only — ignored in summary. |
| cursor | string | – | Opaque pagination cursor from a previous summary response's cursor field. Summary mode only. |
| entity_slug | string | – | 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 peo… |
| episode_slug | string | – | 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… |
| format | string | – | 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'… |
| language | string | – | 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'. |
| limit | integer | – | Episodes per page (1-50, default 10). Summary mode only — detail returns one episode regardless. |
| output_format | string | – | 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 matte… |
| person_slug | string | – | 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. |
| podcast_slug | string | – | Restrict mentions to a single podcast by slug, internal ID, or numeric iTunes ID. |
| role | string | – | Constrain how the entity participates: guest, host, panelist, correspondent, or mention. |
| since | string | – | Only episodes published on or after this ISO 8601 date (e.g. 2025-01-01). |
| until | string | – | Only episodes published on or before this ISO 8601 date. |
No output schema declared.
No examples provided.
particle_podcast_get_episode ~415
Return a bundled overview of one podcast episode: title, podcast, speakers (with entity slugs), top mentioned entities, and segment/clip counts. By default the response is lean — counts plus the top mentioned entities. Request optional sections via `include`: 'segments' for the structural outline with timestamps, 'entities' for the complete entity list, 'clips' for engagement-ranked highlight clips, 'topics' for topic classifications with slugs, or 'transcript' for the dialogue transcript (narrow it by speaker or time range via `transcript_speaker` / `transcript_start` / `transcript_end` — full transcripts are large). For "every line about X in this episode" use `particle_podcast_find_mentions` with `episode_slug` instead — that returns the dialogue around each mention with `is_mention` flags. For the ad reads inside the episode use `particle_podcast_get_episode_ads` (premium).
| Name | Type | Req | Description |
|---|---|---|---|
| episode_slug | string | yes | Episode slug or canonical ID. |
| include | array | – | Optional response sections: 'transcript' (bounded dialogue transcript — large for long episodes; narrow it with the transcript_* sub-params), 'segments' (structural outline with timestamps), 'entitie… |
| transcript_end | number | – | Transcript end clip in seconds. |
| transcript_format | string | – | Transcript format for include=transcript. Defaults to text. |
| transcript_speaker | string | – | Filter the transcript to one speaker (name or entity slug). |
| transcript_start | number | – | Transcript start clip in seconds. |
No output schema declared.
No examples provided.
particle_podcast_get_episode_timeseries ~757
Time-bucketed episode counts — the purpose-built answer to "how often is X discussed over time". Counts episodes matching the same filters as `particle_podcast_list_episodes` (person, company, entity, podcast, keyword, language, duration, transcript availability) per day, week, or month, plus range totals. `keyword_search` additionally counts matching transcript segments per bucket (exact counts); `semantic_search` does the same by meaning, with the same similarity threshold as `particle_podcast_search_transcripts` (lower bounds for pathologically broad queries), and requires `published_after`. The two cannot be combined. Use this for appearance, publication, or topic trend lines instead of paging `particle_podcast_list_episodes`, `particle_podcast_find_mentions`, or `particle_podcast_search_transcripts` once per period. Buckets are UTC-aligned, zero-filled, and Monday-aligned for weeks; ranges are capped at 1000 buckets. At least one of podcast_slug, person_slug, company_slug, entity_slug, keyword_search, or semantic_search is required.
| Name | Type | Req | Description |
|---|---|---|---|
| company_slug | string | – | Company slug, domain, or ID. Resolves to the linked entity. |
| entity_slug | string | – | 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. |
| has_transcript | boolean | – | Only count episodes with a completed transcript. |
| interval | string | – | Bucket width. Weeks start on Monday; all buckets are UTC-aligned. Defaults to week. |
| keyword_search | string | – | 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… |
| language | string | – | 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'. |
| max_duration | integer | – | Maximum episode duration in seconds. |
| min_duration | integer | – | Minimum episode duration in seconds. |
| output_format | string | – | 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 matte… |
| person_slug | string | – | 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. |
| podcast_slug | string | – | Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. |
| published_after | string | – | Inclusive range start as an ISO 8601 date or date-time. Omit to aggregate all time. |
| published_before | string | – | Range end as an ISO 8601 date or date-time. Defaults to now. |
| role | string | – | Role filter when person_slug, company_slug, or entity_slug is set. |
| semantic_search | string | – | 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 wa… |
No output schema declared.
No examples provided.
particle_podcast_get_guest ~402
A guest's podcast-appearance profile: lifetime stats (appearances, distinct podcasts, first/last appearance) plus their most frequent podcasts. Guests are people — the same slug works with `particle_person_get` for the biographical profile. Request optional sections via `include`: 'appearances' for the most recent episode appearances (episode and podcast slugs included for follow-up calls), 'podcasts' for the per-podcast rollup, 'suitability' for brand-suitability exposure across the podcasts they appear on, 'recommended_podcasts' for the five shows they could plausibly appear on next — shows related to the ones they have guested on, minus those, with the venues behind each pick (the pitch list; branch on each row's band). Returns not_found for people who exist but have never appeared on a podcast — use `particle_person_get` for those.
| Name | Type | Req | Description |
|---|---|---|---|
| guest_slug | string | yes | Person slug (e.g. 'sam-altman') from particle_podcast_list_guests, particle_person_resolve, or particle_entity_resolve. |
| include | array | – | Optional response sections: 'appearances' (most recent episode appearances with episode/podcast slugs), 'podcasts' (per-podcast rollup of where they appear), 'suitability' (brand-suitability exposure… |
| output_format | string | – | 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 matte… |
No output schema declared.
No examples provided.
particle_podcast_get_rankings ~662
Podcast chart rankings from Apple Podcasts and Spotify, in four modes: - `chart` (default): the current chart for a source/country/category slot, or — with `podcast_slug` — every chart slot that podcast currently holds. - `movers`: the biggest rank changes over `window_days` (risers, fallers, debuts, exits). - `history`: past snapshots for a chart slot, or — with `podcast_slug` — one podcast's chart history over time. - `slots`: the valid slot values — every source, country, and category_slug with live chart data — so filter values are discovered, not guessed. `source` narrows the country/category listings; other filters are ignored. Each row carries the matched `podcast_slug` when the chart entry is in the catalog — feed it into `particle_podcast_resolve` or any podcast tool. For a single podcast's at-a-glance chart presence, `particle_podcast_resolve` with `include: ["rankings"]` is one call instead of two.
| Name | Type | Req | Description |
|---|---|---|---|
| category_slug | string | – | Category slug (e.g. 'comedy', 'business'). Omit for the overall chart. |
| change | string | – | Mode=movers only: filter by change type. Defaults to all. |
| country | string | – | ISO 3166-1 alpha-2 country code (e.g. 'us', 'gb', 'jp'). Defaults to us. |
| cursor | string | – | Opaque pagination cursor from a previous response. Not supported by mode=movers. |
| limit | integer | – | Rows per page (1-100, default 25). |
| mode | string | – | 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, e… |
| output_format | string | – | 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 matte… |
| podcast_slug | string | – | 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. |
| since | string | – | Mode=history only: only snapshots captured on or after this ISO 8601 timestamp. |
| source | string | – | Ranking source platform. Defaults to apple. |
| until | string | – | Mode=history only: only snapshots captured on or before this ISO 8601 timestamp. |
| window_days | integer | – | Mode=movers only: comparison window in days (1-30, default 1 = vs. yesterday). |
No output schema declared.
No examples provided.
particle_podcast_list_clips ~461
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 | Type | Req | Description |
|---|---|---|---|
| clip_id | string | – | 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. |
| cursor | string | – | Opaque pagination cursor from a previous response. |
| episode_slug | string | – | Restrict the listing to one episode (slug or ID). |
| include | array | – | With clip_id only: 'transcript' attaches the clip's dialogue transcript. |
| limit | integer | – | Clips per page (1-50, default 10). |
| min_engagement | integer | – | Minimum engagement potential score (0-100). Above 70 is typical for a strong clip. |
| output_format | string | – | 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 matte… |
| podcast_slug | string | – | Restrict the listing to one podcast (slug, internal ID, or numeric iTunes ID). |
| speaker | string | – | 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. |
| type | string | – | Clip type filter. |
No output schema declared.
No examples provided.
particle_podcast_list_episodes ~471
List episodes across the catalog with rich filters: by podcast, person, company, language, date range, duration, or transcript availability. 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`.
| Name | Type | Req | Description |
|---|---|---|---|
| company_slug | string | – | Company slug, domain, or ID. Resolves to the linked entity. |
| cursor | string | – | Opaque pagination cursor from a previous response. |
| entity_slug | string | – | 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 peo… |
| has_transcript | boolean | – | Only include episodes with a completed transcript. |
| language | string | – | 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'. |
| limit | integer | – | Episodes per page (1-50, default 10). |
| max_duration | integer | – | Maximum episode duration in seconds. |
| min_duration | integer | – | Minimum episode duration in seconds. |
| output_format | string | – | 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 matte… |
| person_slug | string | – | 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. |
| podcast_slug | string | – | Podcast slug, internal ID, or numeric iTunes ID. Restrict to one podcast. |
| published_after | string | – | ISO 8601 date or date-time. |
| published_before | string | – | ISO 8601 date or date-time. |
| role | string | – | Role filter when person_slug or company_slug is set. |
No output schema declared.
No examples provided.
particle_podcast_list_guests ~482
Browse podcast guests across the catalog, in two opinionated modes: - `directory` (default): the guest directory ranked by lifetime appearances (guests with 2+ appearances). - `trends`: who's making the rounds right now — guests with appearances on 2+ distinct podcasts in the last 30 days, which surfaces cross-show press tours rather than show regulars. The press-tour shape is enforced: every in-window appearance must be on a different podcast, each needs 5+ minutes of identified speaking time, mononymous catch-all people are excluded, and the in-window rate must be a 2x spike over the guest's lifetime baseline. `podcast_slug` switches the directory to one show's roster: every guest who has appeared on that podcast, ranked by appearances on the show (one-off guests included). `topic_slug` narrows either corpus mode to guests appearing on episodes about that topic. Guest slugs ARE person slugs — feed them into `particle_podcast_get_guest` for the appearance profile or `particle_person_get` for the person profile.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque pagination cursor from a previous response. |
| limit | integer | – | Guests per page (1-50, default 20). |
| mode | string | – | 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 pr… |
| output_format | string | – | 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 matte… |
| podcast_slug | string | – | 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_podc… |
| topic_slug | string | – | 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. |
No output schema declared.
No examples provided.
particle_podcast_list_related ~791
List the shows most related to a podcast, best first — "shows like this show". Each result carries the related show's slug, a calibrated score in (0,1], and a coarse band (strong: same beat and audience; moderate: overlapping subject or audience; weak: a loose connection) to branch on. Add `include: ["basis"]` to see WHY each pair is related: content similarity of recent episodes, shared topics, shared guests (named), same publisher, shared sponsors — use it to explain a recommendation or to keep only pairs related for the reason you care about (shared guests for booking, content for media planning). Related sets are precomputed per show from its transcripts, topic profile, guest roster, network and advertisers, restricted to the show's language. Only shows above a relatedness floor are listed, machine-generated and farmed feeds are never listed, and a publisher's duplicate feeds of one show appear once. An empty FIRST page is not an error: its `coverage` says whether the set is not computed yet, nothing cleared the floor, or the request's filters and the default policy removed everything; an empty page reached through a cursor is simply the end of the list. Not a topic browser: for shows that COVER a topic use `particle_podcast_resolve` with `topic_slug`. Not a guest lookup: for where a person has appeared use `particle_podcast_get_guest`. Not advertiser co-occurrence: use `particle_podcast_get_sponsors`. Every related show's slug feeds `particle_podcast_resolve`, `particle_podcast_list_episodes` and the other podcast tools; person slugs in the basis feed `particle_podcast_get_guest`, topic slugs feed `particle_podcast_resolve`'s `topic_slug`. For the five most related shows inline on a resolve, pass `include: ["related"]` to `particle_podcast_resolve` instead of calling this tool.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque pagination cursor from a previous response. |
| exclude_same_publisher | boolean | – | Drop shows from the source show's own publisher. |
| include | array | – | Optional response sections. 'basis' attaches, per result, the signals that make the two shows related: content similarity of recent episodes, shared topics, shared guests (named), same publisher, sha… |
| language | string | – | Only shows in this language: an ISO 639-1 code such as 'en' or 'es'. |
| limit | integer | – | Results per page (1-50, default 10). |
| min_popularity | number | – | Only shows at or above this popularity percentile (0-1]. A floor above 0 excludes non-charting shows; 0 applies no floor. |
| min_score | number | – | Drop results below this fused score (0-1]. Prefer branching on each result's band (strong / moderate / weak); score thresholds may be recalibrated as the ranker improves. |
| output_format | string | – | 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 matte… |
| podcast_slug | string | – | The source podcast — slug (e.g. 'all-in' from particle_podcast_resolve), internal ID, or numeric iTunes ID. |
| publishing_status | string | – | Only shows that released an episode in the last 90 days ('active') or did not ('dormant'); shows with no known episode date match neither. |
| suitability_tier | string | – | Only shows whose latest brand-suitability tier is this value; never-assessed shows are excluded. |
No output schema declared.
No examples provided.
particle_podcast_list_related_episodes ~504
Episodes from OTHER shows that cover the same story or subject as a given episode, best first — a live nearest-neighbour search over episode content, reranked on shared salient entities, shared topics and a shared news story. Each row carries a calibrated score and a band (strong / moderate / weak) to branch on; pass `include: ["basis"]` to see the signals behind every match. Each show contributes at most two episodes, the same content republished on another feed is collapsed to one row, and feeds the screens flag as machine-made or syndication spam are excluded. Use it when you already have an episode and want its coverage elsewhere ('who else covered this?'). Add `published_within_days` (7–30) to keep to the same news cycle; `same_podcast: true` admits the show's own episodes, which are otherwise excluded. Do NOT use it to find dialogue about a topic — that is `particle_podcast_search_transcripts` — nor to find every line naming an entity, which is `particle_podcast_find_mentions`. Episode slugs on every row feed `particle_podcast_get_episode`; podcast slugs feed `particle_podcast_resolve`.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque pagination cursor from a previous response. |
| episode_slug | string | yes | Episode slug or ID (from particle_podcast_list_episodes, particle_podcast_get_episode, or a search result). |
| include | array | – | 'basis' attaches, per result, the signals behind the match: content similarity, shared entities with names, shared topics, a shared news story, shared guests, days apart. |
| limit | integer | – | Results per page (1-50, default 10). |
| output_format | string | – | 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 matte… |
| published_within_days | integer | – | Only episodes published within this many days of the query episode, on either side. Omit for no window. Use 7–30 for 'who else covered this story'. |
| same_podcast | boolean | – | Admit episodes of the same show. Off by default — a show's own episodes are its episode list (particle_podcast_list_episodes), not its related content. |
No output schema declared.
No examples provided.
particle_podcast_resolve ~1,168
Find a podcast by free-text title, exact slug, iTunes ID, or RSS feed URL. Returns slug, title, episode count, bias, and the top recurring speakers (with entity slugs). Use the slug as the agent-facing handle to feed into other podcast tools (`particle_podcast_find_mentions`, `particle_podcast_list_episodes`, `particle_podcast_get_sponsors`). Free-text matching is forgiving — typos, missing or extra words, and pasted episode titles all work. Results are ordered best-match-first; text matches carry a `match_quality` field, and an empty list means the catalog has no plausible candidate. With all identifiers omitted, returns the most recently updated podcasts — useful for browsing the catalog when you don't have a name in mind. Narrow free-text browsing with `topic_slug` (topic concentration, descendants included), `suitability_tier`, or `min_popularity` (global popularity percentile over charting podcasts). Optional hydrations attach extra data to each result in the same call: - `include: ["external_links"]`: third-party platform presences (directories, social profiles, video channels, publisher websites) with resolved URLs and audience metrics. - `include: ["suitability"]`: per-category brand-suitability breakdown (12 categories with prevalence, treatment, derived risk level, reasoning, and evidence excerpts) — premium-grade data, requires a plan with premium endpoints. The high-level `suitability_tier` enum (SAFE / LIMITED / SENSITIVE / UNSAFE) is rendered on every result without opt-in. - `include: ["ratings_summary"]`: listener-review aggregate (average stars, count, per-platform breakdown). - `include: ["bias"]`: full political-bias analysis (the high-level bias enum is always rendered without opt-in). - `include: ["rankings"]`: current chart positions across sources/countries/categories — premium-grade data, requires a plan with premium endpoints. For movers and history use `particle_podcast_get_rankings`. - `include: ["format"]`: the show's form…
| Name | Type | Req | Description |
|---|---|---|---|
| include | array | – | Optional non-parameterized hydrations to attach to each result. 'external_links' adds third-party platform presences (directories, social profiles, video channels, publisher websites). 'suitability'… |
| itunes_id | string | – | Numeric Apple Podcasts / iTunes ID (e.g. '1502871393'). Resolves directly to the matching podcast. |
| limit | integer | – | Maximum candidates to return (1-25, default 5). |
| min_popularity | number | – | 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… |
| query | string | – | Free-text search across podcast titles and descriptions (case-insensitive partial match). Omit to fall back to the most recently updated podcasts. |
| recent_episodes | integer | – | 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. Cappe… |
| rss_url | string | – | Canonical RSS feed URL. Resolves directly to the matching podcast. |
| slug | string | – | Exact slug match for a known handle (e.g. 'all-in'). |
| suitability_tier | string | – | Filter candidates by brand-suitability tier. Podcasts without a suitability analysis are excluded when set. |
| topic_slug | string | – | 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… |
No output schema declared.
No examples provided.
particle_podcast_search_transcripts ~1,674
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. Use this for "find dialogue *about* a topic". For "every line *naming* a person or company" use `particle_podcast_find_mentions` instead — `person_slug` and `company_slug` here narrow ranked results, they don't drive the ranking. **Choosing your query.** At least one of `semantic_search` or `keyword_search` is required, and they do different jobs: - `semantic_search` carries the *idea*. Write it as a sentence describing what should be discussed, in the vocabulary a speaker would use. It is paraphrase-tolerant, so it finds the topic however it h…
| Name | Type | Req | Description |
|---|---|---|---|
| company_slug | string | – | Company slug, domain, or ID. Resolves to the company's linked entity and applies as a filter. |
| context | integer | – | 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 contex… |
| cursor | string | – | Opaque pagination cursor from a previous response. |
| entity_slug | string | – | 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 peo… |
| entity_type | string | – | 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/comp… |
| episode_slug | string | – | Filter to a specific episode by slug or ID. |
| keyword_match | string | – | 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' w… |
| keyword_search | string | – | 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),… |
| language | string | – | 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'. |
| limit | integer | – | Results per page (1-50, default 10). |
| output_format | string | – | 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 matte… |
| person_slug | string | – | 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 abou… |
| podcast_slug | string | – | Podcast slug, internal ID, or numeric iTunes ID. |
| role | string | – | 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.… |
| segment_type | string | – | Segment type filter. |
| semantic_search | string | – | 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 n… |
| since | string | – | Only segments from episodes published on or after this ISO 8601 date. |
| sort | string | – | Sort order. Defaults to relevance. |
| until | string | – | Only segments from episodes published on or before this ISO 8601 date. |
No output schema declared.
No examples provided.
particle_topic_browse ~212
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.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | string | – | Opaque pagination cursor from a previous response. |
| limit | integer | – | Topics per page (1-100, default 50). |
| output_format | string | – | 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 matte… |
| parent_slug | string | – | Topic slug or ID. Returns the direct children of this topic. Omit for top-level roots (Politics, Business, Technology, etc.). |
No output schema declared.
No examples provided.
What is the pro.particle/particle-pro MCP server?
pro.particle/particle-pro is an MCP server listed in the public MCP registry as pro.particle/particle-pro. Podcast intelligence for agents: transcripts, clips, speaker diarization, mention tracking. This page covers its hosted endpoint (https://mcp.particle.pro).
Is the pro.particle/particle-pro MCP server safe to use?
pro.particle/particle-pro scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the pro.particle/particle-pro MCP server expose?
pro.particle/particle-pro exposes 28 tools: particle_alert_create, particle_alert_delete, particle_alert_get, particle_alert_list, particle_alert_list_matches, and 23 more. Their descriptions and schemas cost roughly 14,839 tokens of context every time the server is loaded.
Does the pro.particle/particle-pro MCP server require authentication?
No. We connected to pro.particle/particle-pro without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the pro.particle/particle-pro MCP server still maintained?
pro.particle/particle-pro is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.