# com.petabloom/podcasts (remote · podcasts.petabloom.com)

An MCP server that provides tools to discover and retrieve podcast episodes transcripts.

- Trust score: 74/100 (medium)
- Change this week: +5
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `podcasts.petabloom.com`: 74/100 (this document), [markdown](https://verifymcp.io/servers/com-petabloom-podcasts/podcasts.md), [page](https://verifymcp.io/servers/com-petabloom-podcasts/podcasts)

## Channel facts

- Endpoint: `https://podcasts.petabloom.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.2.7`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 74/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1612 tokens (~268/item across 6 items; 5 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-petabloom-podcasts https://podcasts.petabloom.com/mcp
```

### Codex

```toml
[mcp_servers.com-petabloom-podcasts]
url = "https://podcasts.petabloom.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-petabloom-podcasts": {
      "type": "remote",
      "url": "https://podcasts.petabloom.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-petabloom-podcasts --url https://podcasts.petabloom.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-petabloom-podcasts:
    url: "https://podcasts.petabloom.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-petabloom-podcasts": {
      "type": "http",
      "url": "https://podcasts.petabloom.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 74, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 73, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 71, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 69, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 68)

First indexed and scored.

## MCP tools (5)

### `search_episodes` (~236 tokens)

Search Episodes

Search indexed podcast episodes by keyword or show name and return the show/episode GUIDs needed for transcript retrieval.

Input parameters:

- `cursor` (integer): Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results.
- `limit` (integer): Maximum number of episodes to return. Must be between 1 and 50.
- `podcast_name` (string): Optional podcast title or internal label to narrow results to a specific show.
- `published_after`: Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
- `published_before`: Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
- `published_within_hours`: Filter episodes published in the past X hours. Maximum 168 hours (1 week).
- `query` (string): Optional search keywords matched against indexed episode content. Use people, topics, companies, or phrases.
- `sort` (string): Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided.

Output parameters:

- `count` (integer): Number of episodes returned on this page.
- `episodes` (array): Matching transcript-ready episodes.
- `next_cursor`: Cursor to pass to the next search call to retrieve the next page of results, or null if there are no more pages.
- `total_count` (integer): Total number of matching transcript-ready episodes across all pages.
- `total_count_is_approximate` (boolean): When true, `total_count` is a lower bound — more matches may exist than were counted. False for exact lexical/date counts; can be true only for semantic results (e.g. the topic-search fallback).

### `get_latest_episodes` (~158 tokens)

Get Latest Episodes

Return the most recent transcript-ready episodes across the full podcast catalog.

Input parameters:

- `cursor` (integer): Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results.
- `limit` (integer): Maximum number of episodes to return. Must be between 1 and 50.
- `published_after`: Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
- `published_before`: Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
- `sort` (string): Sort order for results. `relevance` ranks full-text searches first and falls back to newest-first when no query is provided.

Output parameters:

- `count` (integer): Number of episodes returned on this page.
- `episodes` (array): Matching transcript-ready episodes.
- `next_cursor`: Cursor to pass to the next search call to retrieve the next page of results, or null if there are no more pages.
- `total_count` (integer): Total number of matching transcript-ready episodes across all pages.
- `total_count_is_approximate` (boolean): When true, `total_count` is a lower bound — more matches may exist than were counted. False for exact lexical/date counts; can be true only for semantic results (e.g. the topic-search fallback).

### `search_episodes_by_topic` (~359 tokens)

Search Episodes by Topic

Semantic topic search across the podcast catalog. Unlike `search_episodes` (which does lexical/keyword matching), this tool understands meaning: a query for 'AI safety' will match episodes about 'AI alignment', 'AGI risk', or 'frontier model evaluation' even if they don't contain the exact phrase. Returns ranked episodes with the matched topic phrases so you can explain *why* each result is relevant before fetching the transcript. Best for conceptual or thematic queries — use `search_episodes` instead when the user is looking for a specific person, product, or verbatim phrase.

Input parameters:

- `cursor` (integer): Zero-based episode offset for pagination. Use the `next_cursor` returned by a prior search/listing call to fetch the next page of results.
- `limit` (integer): Maximum number of episodes to return. Must be between 1 and 50.
- `published_after`: Inclusive lower publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
- `published_before`: Inclusive upper publication-date bound. Accepts YYYY-MM-DD or ISO 8601 datetime.
- `show_guid` (string): Optional canonical show GUID (as returned by `search_episodes` or `get_latest_episodes` in the `show_guid` field) to restrict topic search to a single podcast. Leave empty to search across all shows.
- `topic` (string, required): Semantic topic to find episodes about. Free-form phrasing welcome — the server embeds this string and finds episodes whose extracted topic phrases are closest in meaning. Good examples: 'AI safety',…

Output parameters:

- `count` (integer): Number of episodes returned on this page.
- `episodes` (array): Episodes ranked by best topic-phrase similarity to the query.
- `next_cursor`: Cursor to pass to the next search call to retrieve the next page of results, or null if there are no more pages.
- `query` (string): The topic query that was embedded and searched.
- `total_count` (integer): Number of matching episodes, counted over the nearest-match candidate window rather than the whole catalog. When `total_count_is_approximate` is true, treat this as a lower bound — broad queries may…
- `total_count_is_approximate` (boolean): True when the candidate window was exhausted, so `total_count` undercounts the true number of matches. When false, `total_count` is exact. Refine the query for tighter results if this is true and you…

### `get_transcript` (~153 tokens)

Get Transcript

Fetch a bounded transcript chunk for a specific episode using its show and episode GUIDs. Use `next_cursor` to continue reading.

Input parameters:

- `cursor` (integer): Zero-based character offset into the transcript. Use the `next_cursor` returned by a prior get_transcript call to fetch the next chunk.
- `episode_guid` (string, required): Episode GUID returned by `search_episodes` or `get_latest_episodes`.
- `max_chars` (integer): Target maximum number of transcript characters to return. Chunks prefer natural boundaries and may be slightly shorter. Must be between 100 and 20000.
- `show_guid` (string, required): Podcast show GUID returned by `search_episodes` or `get_latest_episodes`.

Output parameters:

- `char_end` (integer): Exclusive zero-based end offset of this chunk in the complete transcript.
- `char_start` (integer): Inclusive zero-based start offset of this chunk in the complete transcript.
- `duration_seconds`: Episode duration in seconds when available from the source feed.
- `episode_guid` (string): Podcast episode GUID requested by the client.
- `episode_title` (string): Podcast episode title.
- `has_more` (boolean): Whether another get_transcript call is needed to continue reading.
- `next_cursor`: Cursor to pass to the next get_transcript call, or null at the end.
- `published_date` (string): Episode publication timestamp in ISO 8601 format.
- `rss_feed_url` (string): RSS feed URL for the podcast show.
- `show_guid` (string): Podcast show GUID requested by the client.
- `show_title` (string): Podcast show title.
- `text` (string): Transcript chunk text.
- `total_chars` (integer): Total character count of the complete transcript text.

### `give_feedback` (~51 tokens)

Give Feedback

Send structured feedback about bugs, missing data, unclear behavior, or feature requests.

Input parameters:

- `feedback` (string, required): Feedback for the server team. Include the problem, missing capability, or suggested improvement without sensitive user data.

Output parameters:

- `feedback_id` (string): Stable feedback identifier.
- `message` (string): Human-readable result summary.
- `status` (string): Feedback persistence status.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-petabloom-podcasts/podcasts#diagnostics

## Score history

- 2026-08-03: 74
- 2026-08-02: 74
- 2026-08-01: 73
- 2026-07-31: 73
- 2026-07-30: 71
- 2026-07-29: 70
- 2026-07-28: 69
- 2026-07-27: 69
- 2026-07-26: 68

## Links

- Remote endpoint: https://podcasts.petabloom.com/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-petabloom-podcasts/podcasts/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-petabloom-podcasts/podcasts/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-petabloom-podcasts/podcasts
