Skip to main content
Glama
essoen

pocketcasts-mcp

by essoen
README.md
# Pocket Casts MCP Server

An MCP (Model Context Protocol) server that connects to the Pocket Casts podcast app, allowing AI assistants to search, browse, and manage your podcast library.

> **Note:** This uses the unofficial Pocket Casts API. There is no official public API — this server relies on reverse-engineered endpoints used by community projects.

## Prerequisites

- Node.js 18+
- A Pocket Casts account (email & password)

## Installation

### Remote (npx — no clone required)

Run the server directly without installing anything locally:

```bash
npx pocketcasts-mcp
```

#### Claude Desktop

Add to your config file:

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "pocketcasts": {
      "command": "npx",
      "args": ["-y", "pocketcasts-mcp"],
      "env": {
        "POCKETCASTS_EMAIL": "your@email.com",
        "POCKETCASTS_PASSWORD": "your-password"
      }
    }
  }
}
```

#### Claude Code

```bash
claude mcp add pocketcasts \
  -e POCKETCASTS_EMAIL=your@email.com \
  -e POCKETCASTS_PASSWORD=your-password \
  -s user \
  -- npx -y pocketcasts-mcp
```

The `-s user` flag makes the server available across all your projects. Omit it to scope to the current project only.

#### Global install (alternative)

Install once, then reference the command directly:

```bash
npm install -g pocketcasts-mcp
```

Then use `pocketcasts-mcp` as the command instead of `npx -y pocketcasts-mcp` in the configs above.

---

### Local (from source)

Clone and build the server yourself:

```bash
git clone https://github.com/essoen/PocketCasts-mcp.git
cd PocketCasts-mcp
npm install
npm run build
```

#### Claude Desktop

```json
{
  "mcpServers": {
    "pocketcasts": {
      "command": "node",
      "args": ["/absolute/path/to/PocketCasts-mcp/dist/index.js"],
      "env": {
        "POCKETCASTS_EMAIL": "your@email.com",
        "POCKETCASTS_PASSWORD": "your-password"
      }
    }
  }
}
```

#### Claude Code

```bash
claude mcp add pocketcasts \
  -e POCKETCASTS_EMAIL=your@email.com \
  -e POCKETCASTS_PASSWORD=your-password \
  -s user \
  -- node /absolute/path/to/PocketCasts-mcp/dist/index.js
```

#### Cursor / VS Code

Add to `.cursor/mcp.json` or `.vscode/mcp.json` in your project:

```json
{
  "mcpServers": {
    "pocketcasts": {
      "command": "node",
      "args": ["/absolute/path/to/PocketCasts-mcp/dist/index.js"],
      "env": {
        "POCKETCASTS_EMAIL": "your@email.com",
        "POCKETCASTS_PASSWORD": "your-password"
      }
    }
  }
}
```

Or with npx (no local clone needed):

```json
{
  "mcpServers": {
    "pocketcasts": {
      "command": "npx",
      "args": ["-y", "pocketcasts-mcp"],
      "env": {
        "POCKETCASTS_EMAIL": "your@email.com",
        "POCKETCASTS_PASSWORD": "your-password"
      }
    }
  }
}
```

---

## Configuration

The server requires two environment variables:

| Variable | Description |
|----------|-------------|
| `POCKETCASTS_EMAIL` | Your Pocket Casts account email |
| `POCKETCASTS_PASSWORD` | Your Pocket Casts account password |

These can be set via:
- The `env` block in your MCP client config (recommended)
- Your shell profile (`~/.bashrc`, `~/.zshrc`, etc.)
- A `.env` file in your project (if your MCP client supports it)

> **Security:** Never commit files containing your credentials to version control. If using a `.env` file, ensure it is listed in `.gitignore`. Avoid storing passwords in config files that may be synced or backed up to cloud services.

## Available Tools

### Discovery
| Tool | Description |
|------|-------------|
| `search_podcasts` | Search for podcasts by keyword or title |
| `get_top_charts` | Get top-ranked podcasts |
| `get_trending` | Get currently trending podcasts |
| `get_featured` | Get featured podcasts |

### Library
| Tool | Description |
|------|-------------|
| `get_subscriptions` | List all subscribed podcasts |

### Episodes
| Tool | Description |
|------|-------------|
| `get_podcast_episodes` | List episodes for a podcast (sorted newest or oldest) |
| `get_episode_notes` | Get show notes for an episode |
| `get_new_releases` | Get new episodes from subscriptions |
| `get_in_progress` | Get partially-listened episodes |
| `get_starred` | Get starred/favorited episodes |
| `get_history` | Get listening history (most recent 100) |

### Playback Management
| Tool | Description |
|------|-------------|
| `update_playing_status` | Mark episode as unplayed, in_progress, or completed |
| `update_played_position` | Set playback resume position (in seconds) |
| `update_starred` | Star or unstar an episode |

## Development

```bash
git clone https://github.com/essoen/PocketCasts-mcp.git
cd PocketCasts-mcp
npm install
npm run build
npm start
```

## API Reference

This server uses the unofficial Pocket Casts API at `api.pocketcasts.com`. Endpoints were reverse-engineered by the community. See [furgoose/Pocket-Casts](https://github.com/furgoose/Pocket-Casts) for the original documentation.

## License

MIT

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have distinct purposes (e.g., get_featured vs get_top_charts vs get_trending), but there is minor overlap between get_new_releases and get_podcast_episodes, and between discovery tools. Descriptions help differentiate, but an agent might occasionally misselect.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (get_ or update_), with clear and predictable naming across the entire set.

Tool Count5/5

14 tools for a podcast management server cover discovery, subscriptions, history, and playback state. Each tool serves a distinct function, and the count is well-scoped for the domain.

Completeness3/5

The toolset covers browsing, listening history, and playback updates, but lacks subscription management (e.g., subscribe/unsubscribe) and episode-level search. These are notable gaps that may hinder some workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues