# PodPitch

> Find relevant podcasts without an account. Connect PodPitch for private campaigns and outreach.

- name: io.github.nealshulman/podpitch
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 93/100
- quality: 74/100 (needs work)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.nealshulman%2Fpodpitch
- tools: https://api.protogrid.dev/v1/servers/io.github.nealshulman%2Fpodpitch/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "podpitch": {
      "type": "http",
      "url": "https://api.podpitch.com/v1/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 75
- drivers: +repository +website +reachable +uptime-100% +updated-24d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 74/100 (needs work)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 75 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 51 of 51 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: get_subject_results (idempotentHint); delete_template (idempotentHint); rewrite_pitch_drafts (idempotentHint); …
- warn `tools.token_cost`: about 10,147 tokens to load every tool
- warn `tools.api_dump`: 51 tools, 61% named like REST operations: looks like an API mapped one endpoint per tool
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 50 (weight 15)

- warn `stability.changes`: 7 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 51, about 10,147 tokens to load them all
- tool set hash: ef4d063672885a551c406304c2235f8c
- tools last changed: 2026-10-31T03:09:48.000Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.nealshulman/podpitch.svg)](https://protogrid.dev/servers/io.github.nealshulman/podpitch)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-31 `list_templates` changed (inputSchema)
- 2026-10-31 `get_upcoming_sends` changed (inputSchema)
- 2026-10-31 `create_profile` changed (description) **meaning changed**
  - before: Create a profile for your team.
  - after: Create a profile for your team. PodPitch rewrites the bio with web research before saving, which can take a few minutes, so don't retry while it runs. The result's web_enhanced_bio says whether it did. If the web has nothing on them, the bio stays as passed.
- 2026-10-28 `create_profile` changed (inputSchema)
- 2026-10-28 `generate_pitch_drafts` changed (inputSchema)
- 2026-10-28 `search_account_podcasts` changed (inputSchema)
- 2026-10-22 `create_podcast_campaign` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.nealshulman%2Fpodpitch/changes

## Remotes

- https://api.podpitch.com/v1/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (51)

- `add_contacts_to_campaign`: Add selected contacts to your campaign through the existing duplicate checks.
- `archive_profile`: Archive a profile belonging to your team.
- `cancel_upcoming_send`: Cancel an upcoming send belonging to your team.
- `create_inbox_label`: Create an inbox label.
- `create_podcast_campaign`: Create a podcast campaign in Off mode using a team profile and connected senders. Existing plan and first-campaign setup checks apply.
- `create_profile`: Create a profile for your team. PodPitch rewrites the bio with web research before saving, which can take a few minutes, so don't retry while it runs. The result's web_enhanced_bio says whether it did. If the web has nothing on them, the bio stays as passed.
- `create_template`: Create a writing template.
- `delete_template`: Delete a writing template belonging to your team.
- `disable_campaign_schedule`: Disable pending sends for your campaign.
- `edit_pitch_draft`: Edit a saved, unscheduled pitch at its expected stage. Refresh before editing; scheduled messages use edit_upcoming_send.
- `edit_upcoming_send`: Edit an upcoming unsent message through existing validation.
- `exclude_contacts`: Add or update your team's contact exclusions.
- `generate_pitch_drafts`: Generate or replace saved pitch drafts for contacts in your campaign using existing limits and team checks. Can overwrite existing draft content, including with rewrite enabled. Read drafts first and obtain approval for replacement. Does not send emails.
- `get_account_podcast`: Read a podcast's full account-accessible record.
- `get_campaign`: Read your team's campaign and its settings.
- `get_campaign_audit`: Read the change history of your campaign.
- `get_campaign_build_progress`: Read draft generation progress for your team's campaign.
- `get_campaign_draft_previews`: Read pitch previews for a campaign.
- `get_campaign_drafts`: Read saved drafts for any campaign type, including podcast campaigns. Returns all six email stages, generation/error and pause/send state. Use next_offset as offset for the next page; use entity_id for a specific draft. A queued acknowledgement is not completion; read saved content and is_regenerating to verify.
- `get_campaign_schedule`: Read scheduled campaign sends.
- `get_connected_account`: Return the account represented by this connection, with a stable opaque profile ID and display email.
- `get_inbox_counts`: Read inbox status counts.
- `get_pitch_activity`: Read your team's recent pitch, reply, booking, and open counts.
- `get_podcast_details`: Read public details for a podcast from search. No account or contact addresses.
- `get_profile_audit`: Read the change history of your profile.
- `get_subject_results`: Read subject line performance for your campaign.
- `get_upcoming_sends`: Read upcoming sends for your team.
- `list_campaigns`: List up to 50 campaign summaries, newest first. Use next_before_id as before_id for the next page. Read complete settings with get_campaign.
- `list_connected_senders`: List connected sender accounts, connection status, and daily capacity. Never returns credentials.
- `list_excluded_contacts`: Read your team's excluded contacts.
- `list_inbox_labels`: List your team's inbox labels.
- `list_inbox_threads`: Search or list your team's inbox threads with pagination.
- `list_media_lists`: List your team's saved media lists.
- `list_profiles`: List your team's profiles.
- `list_templates`: Read your team's writing templates.
- `mark_inbox_thread`: Mark a thread read, unread, starred, or archived.
- `pause_campaign_schedule`: Pause pending sends for your campaign.
- `read_inbox_thread`: Read a thread in a mailbox belonging to your team.
- `read_podcast_media_list`: Read a podcast media list belonging to your team.
- `reply_to_inbox_thread`: Send a reply in a thread belonging to your team. Sends an email.
- `report_agent_bug`: Record a minimal technical PodPitch failure without an account. Report concrete tool failures once. Exclude credentials, personal data, pitches and conversations. Respect client approval. Returns a persisted report ID.
- `reschedule_upcoming_send`: Reschedule an upcoming send through existing scheduling validation.
- `rewrite_pitch_drafts`: Rewrite saved pitches or apply a template using the existing generation queue and team checks. Does not send emails.
- `schedule_campaign`: Schedule campaign pitches through the existing campaign and pitch-limit checks.
- `search_account_podcasts`: Search podcasts with your account's filters and search allowance.
- `search_podcasts`: Find active podcasts by topic or name. No account needed. Returns public show information and listening links, never contact addresses.
- `send_pitch`: Send a pitch through PodPitch's existing authorization, plan, campaign-mode, and daily pitch limits. Sends an email.
- `set_campaign_mode`: Set a campaign Off or Manual through the existing mode checks. MagicPitch does not allow Manual.
- `unarchive_profile`: Restore an archived profile.
- `update_campaign`: Update campaign name, writing, follow-up, and tracking settings. Scheduling uses schedule_campaign.
- `update_template`: Update a writing template belonging to your team.
