Skip to Content
MCP ServerTool Reference

Tool Reference

Every tool available through the ShowHub MCP server. Tools are grouped by category. Unless noted, any argument marked podcastId is optional. Omit it to use the active podcast.

Status & Info

get_status

Get the current user’s account info, active podcast, setup progress, and a list of all their podcasts. Call this first to understand what the user has set up so far.

ArgumentTypeRequiredDescription
(none)

Returns: User email, display name, active podcast, setup step, and a list of all podcasts with their IDs and titles.


get_podcast_details

Get full details about a podcast including branding, connected platforms, custom domain, and stats.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.

Returns: Podcast title, slug, subdomain, branding config, connected platforms, episode count, custom domain info, and setup status.


Podcast Management

list_podcasts

List all podcasts owned by the current user.

ArgumentTypeRequiredDescription
(none)

Returns: Array of podcasts with IDs, titles, slugs, and subdomains.


select_podcast

Set which podcast the agent should work on. All subsequent operations that don’t pass a podcastId will use this.

ArgumentTypeRequiredDescription
podcastIdstringYesThe ID of the podcast to select as active.

Returns: Confirmation with the selected podcast’s details.


create_podcast

Create a new podcast. Also sets it as the active podcast and advances setup to “podcast created”. The slug becomes the hosted subdomain: {slug}.showhubco.com.

ArgumentTypeRequiredDescription
titlestringYesThe podcast title.
slugstringYesURL-safe slug (lowercase, hyphens OK). Becomes the subdomain.
descriptionstringNoOptional podcast description.
rssUrlstringNoRSS feed URL. If omitted, a placeholder is created.

Returns: The new podcast’s ID, title, slug, and subdomain.


claim_subdomain

Claim or change the hosted subdomain for a podcast. The new slug must be unique.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
subdomainstringYesThe desired subdomain (lowercase, hyphens OK, min 3 chars).

Returns: Confirmation with the new subdomain URL.


complete_setup

Mark the setup wizard as completed. Call after all setup steps are done.

ArgumentTypeRequiredDescription
(none)

Returns: Confirmation that setup is complete.


Connectors

list_connectors

List all connected platforms (YouTube, RSS, Spotify, etc.) for a podcast.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.

Returns: Array of connectors with platform, status, and last sync time.


connect_rss

Connect an RSS feed as a source. If the ownerEmail matches the user’s email, it auto-verifies.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
feedUrlstringYesThe RSS feed URL.
ownerEmailstringNoEmail of the feed owner. Auto-verifies if it matches.

Returns: The new connector’s ID and status.


connect_spotify

Connect a Spotify show. Provide the Spotify show URL and optionally the RSS feed URL for auto-verification.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
showUrlstringYesSpotify show URL (e.g. https://open.spotify.com/show/...).
feedUrlstringNoOptional RSS feed URL for the show.
ownerEmailstringNoEmail of the show owner for verification.

Returns: The new connector’s ID and status.


connect_youtube

Connect a YouTube channel. Provide the channel ID (starts with UC).

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
channelIdstringYesYouTube channel ID (starts with UC).
channelTitlestringNoChannel display name.

Returns: The new connector’s ID and status.


disconnect_connector

Disconnect a platform connector by its ID.

ArgumentTypeRequiredDescription
connectorIdstringYesThe connector ID to disconnect.

Returns: Confirmation that the connector was removed.


trigger_sync

Trigger a source sync for a podcast. Fetches the latest episodes from the connected source.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.

Returns: Confirmation that sync was triggered.


Branding

get_branding

Get the current branding configuration (colors, logo, banner, fonts) for a podcast.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.

Returns: Full branding config including colors, fonts, dark mode, logo URLs, and custom CSS.


update_branding

Update branding settings. Only pass the fields you want to change.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
primaryColorstringNoPrimary brand color (hex, e.g. #6366f1).
accentColorstringNoAccent color (hex).
backgroundColorstringNoBackground color (hex).
darkModebooleanNoEnable dark mode.
displayNamestringNoDisplay name shown on the site.
fontFamilystringNoFont family name.
customCssstringNoCustom CSS to inject.
footerTextstringNoFooter text.

Returns: The updated branding config.


set_website_url

Set the podcast’s external website URL (used for branding extraction and links).

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
websiteUrlstringYesThe podcast’s website URL.

Returns: Confirmation with the updated URL.


set_template

Set the default page template for episodes.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
templatestringYesOne of minimal, magazine, or podcast_native.

Returns: Confirmation with the selected template.


Episodes

list_episodes

List episodes for a podcast, sorted by most recent first.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
limitnumberNoMax episodes to return (default 50, max 100).
visibleOnlybooleanNoOnly return visible episodes.

Returns: Array of episodes with title, description snippet, duration, visibility status, and transcript status.


update_episode_visibility

Show or hide an episode on the public site.

ArgumentTypeRequiredDescription
episodeIdstringYesThe episode ID.
isVisiblebooleanYesWhether the episode should be visible.

Returns: Confirmation with the updated visibility status.


Embed Player

get_embed_theme

Get the current embed player theme settings (colors, layout, density).

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.

Returns: Theme ID, colors, page title/subtitle, and custom CSS.


update_embed_theme

Update embed player theme settings. Only pass the fields you want to change.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
themeIdstringNoTheme ID (see list below).
pageTitlestringNoTitle shown on the embed player.
pageSubtitlestringNoSubtitle shown on the embed player.
primaryColorstringNoPrimary color (hex).
accentColorstringNoAccent color (hex).
backgroundColorstringNoBackground color (hex).
customCssstringNoCustom CSS to inject into the embed.

Available themes: classic-list, card-grid, minimal-rows, magazine, dark-studio, waveform, neon-pulse, mono-column, cinema-stack, editorial-cards, playlist-stripes, soft-glow, vinyl-spin, tape-deck, broadcast-tower, spotlight, ticker-tape, glass-panel, paper-clip, spectrum-bars.

Returns: The updated embed theme config.


get_embed_code

Get the embed code snippets for a podcast.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.

Returns: A script tag embed, an iframe embed, and the hosted site URL.


Episodes (Extended)

get_episode

Get full details about a specific episode.

ArgumentTypeRequiredDescription
episodeIdstringYesThe episode ID.

Returns: Episode title, description, audio URL, duration, publish date, season, visibility, blog post status, and transcript availability.


search_episodes

Search episodes by keyword within a podcast.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID. Omit to use the active podcast.
querystringYesSearch query.
limitnumberNoMax results (default 20).

Returns: Array of matching episodes with title, snippet, and relevance score.


batch_update_episodes

Update multiple episodes at once (visibility, season assignment, etc.). Requires Business plan.

ArgumentTypeRequiredDescription
updatesarrayYesArray of { episodeId, visibility?, seasonId? } objects.

Returns: Count of updated episodes and any errors.


Seasons

list_seasons

List all seasons for a podcast. Requires Business plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Array of seasons with IDs, titles, and episode counts.


create_season

Create a new season. Requires Business plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
titlestringYesSeason title.
numbernumberNoSeason number.

Returns: The created season.


update_season

Update season title or number. Requires Business plan.

ArgumentTypeRequiredDescription
seasonIdstringYesSeason ID.
titlestringNoNew title.
numbernumberNoNew number.

Returns: The updated season.


add_episode_to_season

Assign an episode to a season. Requires Business plan.

ArgumentTypeRequiredDescription
seasonIdstringYesSeason ID.
episodeIdstringYesEpisode ID.

Returns: Confirmation.


remove_episode_from_season

Remove an episode from its season. Requires Business plan.

ArgumentTypeRequiredDescription
seasonIdstringYesSeason ID.
episodeIdstringYesEpisode ID.

Returns: Confirmation.


Blog

list_blog_posts

List blog posts for a podcast. Requires Business plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
statusstringNoFilter: draft, published, or all. Default: all.
limitnumberNoMax results.

Returns: Array of blog posts with titles, status, and dates.


get_blog_post

Get a single blog post by ID. Requires Business plan.

ArgumentTypeRequiredDescription
postIdstringYesBlog post ID.

Returns: Full blog post with title, body, status, and linked episode.


create_blog_post

Create a new blog post. Requires Business plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
titlestringYesPost title.
bodystringYesPost body (Markdown).
statusstringNodraft or published. Default: draft.
episodeIdstringNoLink to an episode.

Returns: The created blog post.


update_blog_post

Update an existing blog post. Requires Business plan.

ArgumentTypeRequiredDescription
postIdstringYesBlog post ID.
titlestringNoNew title.
bodystringNoNew body.
statusstringNodraft or published.

Returns: The updated blog post.


delete_blog_post

Delete a blog post. Requires Business plan.

ArgumentTypeRequiredDescription
postIdstringYesBlog post ID.

Returns: Confirmation.


Pages

list_pages

List the pages on a podcast’s site (homepage, about, etc.).

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Array of pages with IDs, slugs, and titles.


get_page

Get a page’s configuration and sections.

ArgumentTypeRequiredDescription
pageIdstringYesPage ID.

Returns: Page config, sections, and template.


update_page

Update a page’s sections or settings.

ArgumentTypeRequiredDescription
pageIdstringYesPage ID.
sectionsarrayNoUpdated sections array.
titlestringNoPage title.

Returns: The updated page.


Analytics

get_analytics_overview

Get a summary of podcast analytics (plays, listeners, sources). Requires Pro plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
periodstringNo7d, 30d, 90d, or all. Default: 30d.

Returns: Total plays, unique listeners, top episodes, source breakdown, and trends.


get_top_episodes

Get the top episodes by plays for a podcast. Requires Pro plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
periodstringNo7d, 30d, 90d, or all. Default: 30d.
limitnumberNoMax results. Default: 10.

Returns: Ranked list of episodes with play counts and listener counts.


get_audience_geo

Get listener geography breakdown. Requires Pro plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
periodstringNoTime period. Default: 30d.

Returns: Country-level listener breakdown.


get_listener_trend

Get daily listener trend for a period. Requires Pro plan.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
periodstringNo7d, 30d, 90d. Default: 30d.
episodeIdstringNoScope to a single episode.

Returns: Daily data points with date, plays, and unique listeners.


Insight Data Tools

These tools provide deterministic data analysis — no AI/LLM calls. They analyze your podcast’s actual listener data and return structured findings.

episode_autopsy

Analyze an episode’s listener retention curve. Shows where people dropped off, what they skipped, and what held their attention. Includes confidence labels based on listener count.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
episodeIdstringYesEpisode to analyze.

Returns:

  • confidence: high (30+ starts), medium (15–29), low (5–14), or insufficient (< 5)
  • summary: Intro hold %, average % listened, reached-end %, start count
  • findings: Each drop-off or spike with timestamp, transcript excerpt, signals (e.g. sponsor_read_keywords, topic_shift, long_monologue), and whether the moment aligns with chapter boundaries
  • retention.curve: Sampled retention curve (every 5th of 100 buckets)

find_clips

Find the best 20–90 second moments in an episode for social clips. Uses retention data to find high-engagement sections with timestamps snapped to sentence boundaries in the transcript.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
episodeIdstringYesEpisode to analyze.
minDurationSecondsnumberNoMinimum clip length (default: 20s).
maxClipsnumberNoMax clips to return (default: 5).

Returns: Array of clip candidates, each with:

  • startSec / endSec: Sentence-boundary-snapped timestamps
  • durationSec: Clip duration
  • retentionScore: Local average retention share
  • scoreBreakdown: Individual signal contributions (spike, chapter, keyword, relistened)
  • transcript: Excerpt text
  • deepLink: Direct URL to the clip moment on the show’s site
  • basis: retention or retention+transcript — what signals contributed

topic_gaps

Find topics your audience searches for that the show hasn’t covered. Uses zero-result searches from your site search and Search Console data. A privacy floor of ≥ 3 distinct searches is enforced before any topic can appear.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
sampleSizenumberNoMax gaps to return.

Returns:

  • privacyFloor: Always 3 (minimum distinct searches)
  • totalGaps: Number of gaps found
  • gaps: Array of { topic, distinctSearches, source, coverage } where source is site_search or search_console and coverage is uncovered or partial

Sync & Status

get_sync_status

Check the sync status for a podcast — last sync time, pending items, errors.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Last sync timestamp, connector statuses, and any errors.


get_domain_status

Check the hosted address and the custom domain’s state.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Hosted URL, plus (if set) the custom domain, status, what it’s waiting on (statusDetail), the exact DNS records with absolute names, Search Console / email extras, and a nextStep hint.


Custom Domains

Connect a domain the user already owns. Show Hub does not sell domains. Requires Pro plan. The agent never handles DNS passwords or API tokens: DNS changes happen on the private setupUrl, which offers one-click setup, paste-a-token setup or guided steps.

start_custom_domain

Detect the domain’s DNS provider, save it, and return the records plus a setup link.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
domainstringYesyourshow.com or listen.yourshow.com.
includeEmailbooleanNoAlso add SPF/DKIM records so the domain is ready to send email.
allowReplaceExistingSitebooleanNoOnly after the user confirms replacing a website already on the bare domain.

Returns: records, dnsProvider, connectMethod (domain_connect, api_token or manual), setupUrl (private, 7 days) and nextSteps. If the bare domain already serves a website, returns needsDecision: true with subdomain suggestions instead of saving.

verify_custom_domain

Re-check DNS, hosting and SSL now and return the updated status (Show Hub also checks automatically).

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

check_domain_propagation

Ask DNS probes in about 12 cities what they currently resolve for the domain.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: summary (e.g. “9 of 12 locations see …”), and per-location state: match, missing, mismatch or error.

create_domain_handoff

Create a private setup page for whoever manages the user’s DNS. No Show Hub account needed. Creating a new link revokes the old one.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
recipientEmailstringNoEmail the link to this person.
notestringNoShort note included in the email.

Returns: setupUrl, expiresAt, emailedTo.

remove_custom_domain

Disconnect the custom domain. The site stays at the Show Hub address and DNS records at the provider are left alone. Requires confirmation (two-phase confirmToken).

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

get_site_health

Check the health of a podcast’s hosted site.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Site reachability, page count, episode count, last build time, and any issues.


Site Branches

Stage changes to your site before going live. Requires Business plan.

list_branches

List all site branches.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Array of branches with IDs, names, and change counts.


create_branch

Create a new site branch for staging changes.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
namestringYesBranch name.
descriptionstringNoDescription.

Returns: The created branch.


apply_branch_change

Add or update a change on a branch.

ArgumentTypeRequiredDescription
branchIdstringYesBranch ID.
changeobjectYesThe change to apply.

Returns: The updated branch with its changes.


merge_branch

Merge a branch’s changes into the live site.

ArgumentTypeRequiredDescription
branchIdstringYesBranch ID.

Returns: Confirmation with the list of applied changes.


discard_branch

Discard a branch and all its staged changes.

ArgumentTypeRequiredDescription
branchIdstringYesBranch ID.

Returns: Confirmation.


Team

Manage team members and roles. Requires Business plan.

list_members

List all team members for a podcast.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.

Returns: Array of members with IDs, emails, roles, and join dates.


invite_member

Invite a new team member by email.

ArgumentTypeRequiredDescription
podcastIdstringNoPodcast ID.
emailstringYesEmail to invite.
rolestringYeseditor or viewer.

Returns: The pending invitation.


update_member_role

Change a team member’s role.

ArgumentTypeRequiredDescription
memberIdstringYesMember ID.
rolestringYesNew role.

Returns: The updated member.


remove_member

Remove a team member.

ArgumentTypeRequiredDescription
memberIdstringYesMember ID.

Returns: Confirmation.

Last updated on