Captivate MCP by usefulapi

Read shows, episodes, media and download analytics; update episode text in Captivate.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
100%
Naming quality
72%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (7)

  • LOWTool 'captivate_list_scheduled_episodes' name length outside 3-30 rangein captivate_list_scheduled_episodes
  • LOWTool 'captivate_get_overview_analytics' name length outside 3-30 rangein captivate_get_overview_analytics
  • LOWTool 'captivate_get_episode_overview_analytics' name length outside 3-30 rangein captivate_get_episode_overview_analytics
  • LOWTool 'captivate_get_average_analytics' name length outside 3-30 rangein captivate_get_average_analytics
  • LOWTool 'captivate_get_episode_total_analytics' name length outside 3-30 rangein captivate_get_episode_total_analytics
  • LOWTool 'captivate_get_monthly_analytics' name length outside 3-30 rangein captivate_get_monthly_analytics
  • LOWTool 'captivate_get_episode_monthly_analytics' name length outside 3-30 rangein captivate_get_episode_monthly_analytics

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,362Tokens (tool definitions)
~908 BTypical response size
Moderate attention impact (1.85% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "captivate": {
      "url": "https://captivate.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://captivate.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (17)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢captivate_get_user(user_id)

Get a Captivate user profile by user id (the id shown in the dashboard API section). Captivate API: GET /users/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "The Captivate user id."
    }
  },
  "required": [
    "user_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_list_user_shows(user_id)

List the podcasts (shows) a user can access in any role. Good first call to find show ids. Captivate API: GET /users/{id}/shows.

Input Schema

{
  "type": "object",
  "properties": {
    "user_id": {
      "type": "string",
      "description": "The Captivate user id."
    }
  },
  "required": [
    "user_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_show(show_id)

Get a podcast show by id: title, description, categories, artwork, status and settings. Captivate API: GET /shows/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_show_feed(show_id)

Get the public RSS feed URL of a show. Captivate API: GET /shows/{id}/feed.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_list_episodes(show_id)

List the episodes of a show with their status, publish date, titles and shownotes, plus a total count. Captivate API: GET /shows/{id}/episodes.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_list_scheduled_episodes(show_id)

List the episodes of a show that are scheduled for a future publish date. Captivate API: GET /shows/{id}/episodes/scheduled.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_episode(episode_id)

Get the full record of one episode by id. Captivate API: GET /episodes/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "The episode id (from captivate_list_episodes)."
    }
  },
  "required": [
    "episode_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_media(media_id)

Get the record of one uploaded media (audio) file by id. Captivate API: GET /media/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "media_id": {
      "type": "string",
      "description": "The media id."
    }
  },
  "required": [
    "media_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_list_show_media(show_id, offset, order, sort)

List the uploaded media files of a show (20 per page) with totalCount. Captivate API: GET /shows/{id}/media.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "offset": {
      "description": "Number of items to skip (default 0). The page size is 20.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "order": {
      "description": "Sort column, for example created_at.",
      "type": "string"
    },
    "sort": {
      "description": "Sort direction.",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_overview_analytics(show_id, start, end, include_top_episodes)

Download analytics overview of a show for a date range, optionally with top episodes. Captivate API: GET /insights/{show}/overview.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "start": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Start date, yyyy-mm-dd."
    },
    "end": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "End date, yyyy-mm-dd."
    },
    "include_top_episodes": {
      "description": "Include the top episodes.",
      "type": "boolean"
    }
  },
  "required": [
    "show_id",
    "start",
    "end"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_episode_overview_analytics(show_id, episode_id, start, end)

Download analytics overview of one episode for a date range. Captivate API: GET /insights/{show}/overview/{episode}.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "episode_id": {
      "type": "string",
      "description": "The episode id (from captivate_list_episodes)."
    },
    "start": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Start date, yyyy-mm-dd."
    },
    "end": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "End date, yyyy-mm-dd."
    }
  },
  "required": [
    "show_id",
    "episode_id",
    "start",
    "end"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_average_analytics(show_id, interval_days)

Average downloads per interval of a show (default 28-day intervals). Captivate API: GET /insights/{show}/averages.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "interval_days": {
      "description": "Interval length in days (default 28).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_total_analytics(show_id)

All-time download total of a show. Captivate API: GET /insights/{show}/total.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_episode_total_analytics(show_id, episode_id)

All-time download total of one episode. Captivate API: GET /insights/{show}/total/{episode}.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "episode_id": {
      "type": "string",
      "description": "The episode id (from captivate_list_episodes)."
    }
  },
  "required": [
    "show_id",
    "episode_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_monthly_analytics(show_id)

Month-by-month downloads of a show for the past 12 months. Captivate API: GET /insights/{show}/monthly.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    }
  },
  "required": [
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢captivate_get_episode_monthly_analytics(show_id, episode_id)

Month-by-month downloads of one episode. Captivate API: GET /insights/{show}/monthly/{episode}.

Input Schema

{
  "type": "object",
  "properties": {
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "episode_id": {
      "type": "string",
      "description": "The episode id (from captivate_list_episodes)."
    }
  },
  "required": [
    "show_id",
    "episode_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴captivate_update_episode(episode_id, show_id, title, shownotes, summary, ...)

WRITE. Change the text fields of an existing episode (title, shownotes, summary, subtitle). Only the fields you pass are sent. It does not publish, delete or change media. Captivate API: PUT /episodes/{id}.

Input Schema

{
  "type": "object",
  "properties": {
    "episode_id": {
      "type": "string",
      "description": "The episode id (from captivate_list_episodes)."
    },
    "show_id": {
      "type": "string",
      "description": "The show id (from captivate_list_user_shows)."
    },
    "title": {
      "description": "New episode title.",
      "type": "string",
      "maxLength": 255
    },
    "shownotes": {
      "description": "New shownotes (HTML allowed, max 4,000 characters).",
      "type": "string",
      "maxLength": 4000
    },
    "summary": {
      "description": "New Apple Podcasts summary (max 4,000 characters).",
      "type": "string",
      "maxLength": 4000
    },
    "itunes_subtitle": {
      "description": "New subtitle (max 255 characters).",
      "type": "string",
      "maxLength": 255
    }
  },
  "required": [
    "episode_id",
    "show_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded17 tools