OP3 MCP Server & CLI
A free, open source OP3 MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents read your podcast's downloads, real listeners and retention.
0.0(0 ratings)- 1
Add it with a single command in a terminal.
claude mcp add op3 \
-- npx -y @thenavidm/op3-mcp-cli@latest - 2
In Claude Code, type /mcp. OP3 should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
claude mcp add op3 -- npx -y @thenavidm/op3-mcp-cli@latest - 2
In Claude Code, type /mcp. OP3 should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
claude mcp add op3 \
-- npx -y @thenavidm/op3-mcp-cli@latest - 2
In Claude Code, type /mcp. OP3 should show as connected.
/mcp
- 1Download the extension
Download the Claude Desktop extension.
- 2
Double-click it, and Claude Desktop installs it.
- 1
Add it with a single command in a terminal.
codex mcp add op3 \
-- npx -y @thenavidm/op3-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
codex mcp add op3 -- npx -y @thenavidm/op3-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
codex mcp add op3 \
-- npx -y @thenavidm/op3-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Open Cursor's settings, go to the MCP tab, and click Add new global MCP server.
- 2
Add the server.
{
"mcpServers": {
"op3": {
"command": "npx",
"args": ["-y", "@thenavidm/op3-mcp-cli@latest"]
}
}
} - 3
Open the MCP tab again. It should show 22 tools.
- 1
Open the Command Palette and run MCP: Open User Configuration.
- 2
Add the server to that mcp.json.
If the file already has servers, add only this one inside servers.
{
"servers": {
"op3": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/op3-mcp-cli@latest"]
}
}
}
- 1
Add it with a single command in a terminal.
copilot mcp add op3 \
-- npx -y @thenavidm/op3-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get op3
- 1
Add it with a single command in a terminal.
copilot mcp add op3 -- npx -y @thenavidm/op3-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get op3
- 1
Add it with a single command in a terminal.
copilot mcp add op3 \
-- npx -y @thenavidm/op3-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get op3
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers.
{
"mcpServers": {
"op3": {
"command": "npx",
"args": ["-y", "@thenavidm/op3-mcp-cli@latest"]
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
%USERPROFILE%\.gemini\settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers.
{
"mcpServers": {
"op3": {
"command": "npx",
"args": ["-y", "@thenavidm/op3-mcp-cli@latest"]
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers.
{
"mcpServers": {
"op3": {
"command": "npx",
"args": ["-y", "@thenavidm/op3-mcp-cli@latest"]
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"op3": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/op3-mcp-cli@latest"],
"enabled": true
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
%USERPROFILE%\.config\opencode\opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"op3": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/op3-mcp-cli@latest"],
"enabled": true
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"op3": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/op3-mcp-cli@latest"],
"enabled": true
}
}
} - 3
Restart OpenCode.
- 1
Add it with a single command in a terminal.
openclaw mcp add op3 \
--command npx \
--arg -y \
--arg @thenavidm/op3-mcp-cli@latest - 2
Check that it starts and lists its tools.
openclaw mcp doctor op3 --probe
- 1
Add it with a single command in a terminal.
openclaw mcp add op3 --command npx --arg -y --arg @thenavidm/op3-mcp-cli@latest - 2
Check that it starts and lists its tools.
openclaw mcp doctor op3 --probe
- 1
Add it with a single command in a terminal.
openclaw mcp add op3 \
--command npx \
--arg -y \
--arg @thenavidm/op3-mcp-cli@latest - 2
Check that it starts and lists its tools.
openclaw mcp doctor op3 --probe
- 1
In the agent panel, click the … menu, then MCP Servers, Manage MCP Servers and View raw config.
- 2
Add the server to mcp_config.json.
If the file already has servers, add only this one inside mcpServers.
{
"mcpServers": {
"op3": {
"command": "npx",
"args": ["-y", "@thenavidm/op3-mcp-cli@latest"]
}
}
}
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it.
mcp_servers:
op3:
command: "npx"
args: ["-y", "@thenavidm/op3-mcp-cli@latest"]
- 1
Open your Hermes config.
%USERPROFILE%\.hermes\config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it.
mcp_servers:
op3:
command: "npx"
args: ["-y", "@thenavidm/op3-mcp-cli@latest"]
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it.
mcp_servers:
op3:
command: "npx"
args: ["-y", "@thenavidm/op3-mcp-cli@latest"]
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.claude/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Claude Code to use op3-cli.
Running op3-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.claude\skills\op3-podcast-analytics" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\op3-mcp-cli\SKILL.md" "$HOME\.claude\skills\op3-podcast-analytics\" - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Claude Code to use op3-cli.
Running op3-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.claude/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Claude Code to use op3-cli.
Running op3-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.agents/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Codex to use op3-cli.
Running op3-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.agents\skills\op3-podcast-analytics" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\op3-mcp-cli\SKILL.md" "$HOME\.agents\skills\op3-podcast-analytics\" - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Codex to use op3-cli.
Running op3-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.agents/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Codex to use op3-cli.
Running op3-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 3
Ask Cursor to use op3-cli.
Running op3-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 3
Ask VS Code to use op3-cli.
Running op3-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.copilot/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Copilot CLI to use op3-cli.
Running op3-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.copilot\skills\op3-podcast-analytics" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\op3-mcp-cli\SKILL.md" "$HOME\.copilot\skills\op3-podcast-analytics\" - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Copilot CLI to use op3-cli.
Running op3-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.copilot/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask Copilot CLI to use op3-cli.
Running op3-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 3
Ask Gemini CLI to use op3-cli.
Running op3-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.config/opencode/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask OpenCode to use op3-cli.
Running op3-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\op3-podcast-analytics" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\op3-mcp-cli\SKILL.md" "$HOME\.config\opencode\skills\op3-podcast-analytics\" - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask OpenCode to use op3-cli.
Running op3-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.config/opencode/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask OpenCode to use op3-cli.
Running op3-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.openclaw/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask OpenClaw to use op3-cli.
Running op3-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.openclaw\skills\op3-podcast-analytics" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\op3-mcp-cli\SKILL.md" "$HOME\.openclaw\skills\op3-podcast-analytics\" - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask OpenClaw to use op3-cli.
Running op3-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/op3-podcast-analytics
cp "$(npm root -g)/@thenavidm/op3-mcp-cli/SKILL.md" ~/.openclaw/skills/op3-podcast-analytics/ - 3
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 4
Ask OpenClaw to use op3-cli.
Running op3-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 3
Ask Antigravity to use op3-cli.
Running op3-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 3
Ask Hermes to use op3-cli.
Running op3-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/op3-mcp-cli@latest - 2
Check your setup.
It names anything that's wrong and the fix.
op3-cli doctor - 3
List every command, then try one.
op3-cli
op3-cli op3-global-app-share
Needs Node 22 or newer. It works with no token at first, and your own free token from op3.dev is better. Set it up.
It's free and open source. If it saves you time, star it on GitHub, so more people find it.
This free OP3 MCP server and CLI gives your AI real access to OP3, the Open Podcast Prefix Project: downloads, real listeners, retention, geography and apps for any show with the OP3 prefix. It turns downloads into actual listeners, tracks whether they come back, compares episodes at the same age, and benchmarks your app mix against the whole of OP3.
It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 22 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.
In this guide, I'll show you:
- What the OP3 MCP server & CLI is, and what you can ask it
- How to install it and check that it works
- When to use the MCP server, and when the CLI
- Every tool, and how to keep your account safe
Every tool on this page comes from the server itself, and every cost was measured in Claude Code.
Key takeaways
What is the OP3 MCP server & CLI?
The OP3 MCP server & CLI is a free, open source program that lets AI agents read open podcast analytics from OP3 for you, in two ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.
You ask in plain language. Your AI picks the right tool, and the server makes the call to OP3's public API.
The CLI is the same program as commands. op3-cli op3-show-downloads --identifier <feed url> runs the same code your AI runs when you ask how your show did this month, whether an agent like Claude Code runs it or you do.
In an AI OS, the layer that connects your AI to your context, your data and your tools, a server like this is how your AI reaches OP3. I explain how the parts fit together in how to build an AI operating system, and here's how I use AI myself.
What can you ask it?
Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:
Try askingHow many downloads did my podcast get this month?
How many actual people is that, not downloads?
Are my listeners coming back, or is it a new audience every month?
Is this week's episode tracking ahead or behind my usual?
Which podcast apps do my listeners use, and is that unusual?
OP3 shows nothing for my feed. What's wrong?
The second one shows why this is useful. Every podcast dashboard counts downloads, which are apps fetching files, and OP3's rows let this count the people behind them.
It works well next to my Apple Podcasts MCP server and Podcast Index MCP server, so your AI can check where your show ranks in each country and read any episode's transcript in the same chat. Every server I've made is on my MCP servers page.
For your show, my free podcast RSS feed validator and podcast rank checker help too. When your show is ready to earn, I cover how to make money podcasting.
How to install the OP3 MCP server
Pick your app in the box at the top of this page. Each one is a single command or a pasted block, with no account and no key to start.
Windsurf, Zed and Cline take the same server, though they don't have a tab in the box yet. Follow the box's Cursor tab, and put its block here instead:
| App | Where the block goes |
|---|---|
| Windsurf | In the Cascade panel, open the Actions menu (…) and choose Open MCP config file, then paste the block. |
| Cline | Click the MCP Servers icon in the Cline panel, open the Configure tab, click Configure MCP Servers, and paste the block. |
| Zed | Go to Settings, then AI, then MCP Servers, and choose Add Server, then Add Local Server. Enter the block's command, arguments and variables, and Zed saves them under context_servers. |
Pro tip: It works right away on OP3's shared preview token. Get your own free token at op3.dev before you rely on it, because the shared one is rate limited.
Set up OP3
There's nothing to set up to start. The server falls back to OP3's shared preview token, which is rate limited and which OP3 can withdraw.
OP3_TOKEN in your app's config.You don't need to own a podcast. The token reads public OP3 data, which covers every show with the prefix on its feed.
Check that it works
Run the doctor. It checks the token and makes a live call to OP3.
npx -y @thenavidm/op3-mcp-cli doctorIf OP3 has nothing for a show, the feed has no OP3 prefix yet. op3_verify_prefix checks it.
In Claude Code, /mcp also shows whether the OP3 server is connected. It's one of the Claude Code commands worth knowing.
Use the OP3 CLI
The CLI is the same 22 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.
Every tool name becomes a command with dashes, so op3_show_downloads runs as op3-cli op3-show-downloads.
npm install -g @thenavidm/op3-mcp-cli
op3-cli
op3-cli op3-global-app-share
op3-cli op3-get-show --identifier https://feeds.example.com/show.xml
op3-cli op3-audience-summary --helpThe bare op3-cli lists every command, op3-cli which <words> finds the command for a task, and op3-cli <command> --help shows what a command takes. Nothing asks first, because nothing here writes.
op3-cli install <app> adds the server to Claude Code, Codex, Claude Desktop, Cursor, VS Code or Gemini CLI, in each app's own format.
These are the flags you'll use most:
| Flag | What it does |
|---|---|
--json | Prints JSON |
--compact | Prints the JSON on one line |
--select a,b.c | Keeps only those fields, and a dotted path goes deeper |
--agent | Machine mode: compact JSON, no prompts, and it never confirms anything |
--confirm | Lets a write that asks first go ahead |
--dry-run | Shows what a write would do, without doing it |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | It worked |
| 2 | The command was typed wrong |
| 3 | OP3 has nothing for that show or episode |
| 4 | OP3 rejected the token |
| 5 | OP3's API failed |
| 7 | You hit a rate limit, so wait and try again |
MCP server or CLI: which one?
Both are the same program with the same 22 tools. The difference is when your AI pays for them, in the tokens it reads.
- MCP server
- 9,000 tokens
- CLI
- Nothing
- MCP server
- 1,000 tokens
- CLI
- Nothing
- MCP server
- Nothing more, or in Claude Code the tools it picks
- CLI
- 3,400 tokens, once
- MCP server
- 181,000 tokens
- CLI
- 3,400 tokens
- MCP server
- Yes
- CLI
- No, there's no terminal there
- MCP server
- No
- CLI
- Yes
An app that loads every tool up front sends the full list with every message, whether you mention OP3 or not. Claude Code doesn't by default: its tool search sends only the tool names and the server's instructions, and loads a tool's full definition when your AI reaches for it.
The CLI costs nothing until OP3 comes up. Then your agent reads its skill file once and runs the commands it needs. With the skill added, Claude Code also lists its one-line description with every message, about 200 tokens.
When the whole conversation is about OP3, the gap closes. Then the MCP server is the better experience, because you ask in plain language and your AI never has to look up a command.
How to spend less
In Claude Code, leave tool search on, which it is unless you've set ENABLE_TOOL_SEARCH=false.
Turn the server off when you aren't looking at your stats, with your AI app's own switch.
Or install the CLI and connect the server later, on the days it earns its place. Every tool stays in reach, and the standing cost drops to nothing.
Every number here was measured on October 5, 2026 in Claude Code 2.1.286 with Claude Opus 5.5. It's the same one-line prompt with and without the server connected, once with tool search off so every tool loads, and once with Claude Code's default. The skill was measured the same way, and other apps and models count tokens a little differently.
Reading the numbers
A few things about podcast numbers explain most of the questions people ask.
A download isn't a person
It's an app fetching a file, and one listener whose app fetches again over 3 days counts 3 times. op3_audience_summary gives both numbers and the ratio.
Compare episodes at the same age
An older episode has had longer to collect downloads. op3_episode_curve compares each one against your show's own median at the same age.
App share needs a benchmark
Nearly every show's biggest app is Apple Podcasts, so 40% on Apple can be below average. op3_benchmark_apps divides by OP3's global share, so 100 means exactly average.
The totals lag about a day
Rolled-up figures carry the date they're as of, which is why they won't match a live dashboard exactly.
Every OP3 tool
The tables below list all 22 tools, grouped the way the repo groups them. Every one only reads, and the server reaches nothing but OP3.
Shows and episodes
op3_resolve_show- What it does
- Turn any podcast identifier into an OP3 show uuid.
- Kind
- Reads
op3_get_show- What it does
- Look up a show on OP3: its uuid, title, podcast guid and public stats page.
- Kind
- Reads
op3_list_episodes- What it does
- List a show's episodes with their OP3 episode ids, titles and publication dates, newest first.
- Kind
- Reads
Downloads
op3_show_downloads- What it does
- A show's headline download numbers: downloads in the last 30 days, the week-by-week breakdown over the last four weeks, and the weekly average.
- Kind
- Reads
op3_episode_downloads- What it does
- Per-episode download counts for a show's recent episodes: downloads in the first 1, 3, 7 and 30 days after publication, plus all-time.
- Kind
- Reads
op3_compare_shows- What it does
- Compare several shows side by side on monthly downloads and weekly average, ranked.
- Kind
- Reads
Listeners and retention
op3_audience_summary- What it does
- Unique listeners against downloads for a show over any window.
- Kind
- Reads
op3_new_vs_returning- What it does
- Split a show's listeners in a window into first-time and returning, by comparing against a longer baseline period immediately before it.
- Kind
- Reads
op3_listener_retention- What it does
- Cohort carry-over between two periods: how much of the earlier period's audience showed up again in the later one.
- Kind
- Reads
op3_episode_overlap- What it does
- Which episodes share an audience.
- Kind
- Reads
Trends
op3_download_trend- What it does
- A show's downloads and unique listeners over time, bucketed by day, week or month, with a growth rate and the peak period.
- Kind
- Reads
op3_listening_patterns- What it does
- When downloads happen, by hour of day and day of week, in UTC.
- Kind
- Reads
op3_episode_curve- What it does
- How one episode is tracking against the show's own median at the same age.
- Kind
- Reads
Geography
op3_geography- What it does
- Where a show's downloads come from, at whichever level you ask for: continent, country, region (state or province), metro area, or timezone.
- Kind
- Reads
Apps and devices
op3_app_share- What it does
- Which podcast apps a show's audience uses, over any window you choose, with unique listeners alongside downloads.
- Kind
- Reads
op3_device_breakdown- What it does
- How a show is consumed, across all four dimensions OP3 records: agentType (app, browser, bot), agentName (the specific app), deviceType (mobile, computer, tablet, smart speaker) and deviceName (Apple iPhone, Android Phone).
- Kind
- Reads
op3_global_app_share- What it does
- Podcast app market share across every show OP3 measures, over the last thirty days.
- Kind
- Reads
op3_benchmark_apps- What it does
- A show's app mix against OP3's global mix, with an index where 100 means exactly average.
- Kind
- Reads
Discovery
op3_recent_transcripts- What it does
- Recently published episodes across all of OP3 that carry a podcast:transcript tag, newest first.
- Kind
- Reads
Raw data
op3_query_downloads- What it does
- Raw download rows for a show, with every filter OP3 offers.
- Kind
- Reads
op3_query_hits- What it does
- Raw request rows from OP3's redirect log, across every show unless filtered by url.
- Kind
- Reads
op3_verify_prefix- What it does
- Check whether OP3 is actually receiving downloads for a show, and say what is wrong when it is not.
- Kind
- Reads
Is the OP3 MCP server safe?
There's nothing to undo, because nothing here writes. Every tool reads OP3's public data.
Your listeners stay anonymous too. OP3's per-listener codes are counted inside the server and stripped from everything it returns, so your AI only sees counts, rates and shares.
Watch out: Show and episode titles come from anyone's RSS feed, so some text your AI reads was written by strangers. The server tells your AI to treat it as data, and since it only reads OP3, there's little it could be tricked into doing.
Your data
There's no server of ours in between. The server runs on your computer, talks to op3.dev and stores nothing on disk.
Answers are kept in memory for 5 minutes, so several questions about one show don't repeat the same slow scan. Set OP3_CACHE_TTL_MS=0 to turn that off.
OP3 MCP server settings
Every setting is optional, as an environment variable in your app's config.
OP3_TOKEN- Default
- the preview token
- What it does
- Holds your own bearer token from op3.dev
OP3_REQUEST_TIMEOUT_MS- Default
45000- What it does
- Sets how long one request may take
OP3_MIN_REQUEST_INTERVAL_MS- Default
150- What it does
- Sets the pause between requests
OP3_MAX_ROWS- Default
50000- What it does
- Caps the rows any one analysis pulls
OP3_CACHE_TTL_MS- Default
300000- What it does
- Sets how long answers are kept in memory.
0turns it off
OP3_API_KEY- Default
- none
- What it does
- Another name for OP3_TOKEN, the word OP3's keys page uses
OP3_MAX_RETRIES- Default
3- What it does
- Retries on 429 and server errors
OP3_MAX_PAGES- Default
40- What it does
- Cap on continuation pages
OP3_USER_AGENT- Default
op3-mcp- What it does
- Sent on every request
OP3_BASE_URL- Default
https://op3.dev/api/1- What it does
- OP3's API root
OP3_SURFACE- Default
full- What it does
- Full tool list, or search for very large catalogs
OP3_TOOL_TIMEOUT_MS- Default
- none
- What it does
- Deadline for any tool
OP3_HTTP_PORT- Default
8787- What it does
- Port for --http, 8787 when unset
OP3_HTTP_HOST- Default
- none
- What it does
- Address for --http, 127.0.0.1 when unset; any other needs a token
OP3_HTTP_TOKEN- Default
- none
- What it does
- Bearer token --http requires
OP3_HTTP_ALLOWED_ORIGINS- Default
- none
- What it does
- Browser origins beyond localhost that may call --http, comma-separated
OP3_DEBUG- Default
- none
- What it does
- Print debug lines on stderr
Troubleshooting
Run the doctor first. It names the step that failed and the fix.
| What you see | What to do |
|---|---|
| "OP3 has nothing at /shows/…" | The feed has no OP3 prefix. Run op3_verify_prefix, then follow op3.dev/setup |
| Downloads are zero but the show exists | The prefix was added recently. Widen the window |
| A tool times out | The window is too wide for a scan. Narrow it |
| A result says it was cut short | A cap stopped the pull. Narrow the window or raise OP3_MAX_ROWS |
| Rate limited on the preview token | It's shared. Get your own at op3.dev/api/keys |
If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.
More free tools for your podcast
Price a sponsorship from your downloads, or see where your show ranks.
Free tools
FAQs about the OP3 MCP server & CLI
Here are the questions people ask most about the OP3 MCP server and CLI.
The OP3 MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor read open podcast analytics from OP3.
It has 22 tools for downloads, listeners, retention, geography, apps and trends, and the same tools run as a CLI that agents like Claude Code and Codex use, or that you type yourself.
An MCP server is a standard way to give an AI app real access to a tool, so it can act instead of guessing.
MCP stands for Model Context Protocol, and Claude, Codex, Cursor and many other AI apps speak it.
Every server I've made is on my MCP servers page.
The OP3 CLI is the same program as the OP3 MCP server, run as commands.
AI agents like Claude Code, Codex and OpenCode run them for you, and you can type them in a terminal or a script.
One npm package installs both.
Use the OP3 MCP server in an AI app with no terminal, like Claude Desktop's chat, and the CLI in a terminal, a script or a cron job.
In an AI app that can run commands, like Claude Code, Codex or Cursor, the CLI is the lighter choice, because it costs nothing until it runs.
Yes, the OP3 MCP server is free and open source under the MIT license, and OP3's data is free to read.
The only thing you pay for is your own AI app.
No, it works on OP3's shared preview token with nothing set up.
A free token of your own from op3.dev avoids the shared rate limit.
It works with any show whose feed carries the OP3 prefix, whoever hosts it.
Without the prefix, OP3 has never seen a download for the show.
Each counts differently, and OP3 counts downloads through the prefix across every app.
OP3's totals also lag about a day.
No, OP3's per-listener codes are counted inside the server and never returned.
Your AI only sees counts, rates and shares.
The OP3 MCP server works with any app that speaks MCP.
That includes Claude Code, Claude Desktop, Codex, Cursor, VS Code, Windsurf, Zed, Cline, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Antigravity and Hermes.
I did.
I'm Navid Moazzez, and I made the OP3 MCP server & CLI as one of my free tools on navid.me.
You can read more about me.
The code is on GitHub under the MIT license, and the package is on npm.
More MCP servers & CLIs
Related free tools
Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Read the affiliate disclaimer.
On this page
The most actionable AI newsletter for founders
Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.
No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.
P.S. Sign up now to get free access to my ultimate AI tools guide for creators.
