Skip to main content
Glama

OP3 MCP

Stars License npm Downloads YouTube X LinkedIn

OP3 sits in front of the audio file, so it counts every download whatever app made it.

That is why its numbers differ from Apple's or Spotify's, which each report only their own listeners.

22 tools, including unique listeners, retention cohorts and episode benchmark curves that OP3's own API does not expose.

Built and maintained by Navid Moazzez.

You:  How is my podcast actually doing this month?

Claude:  213 downloads over the last 30 days, from 209 unique listeners.
         That ratio of 1.02 is unusually clean: nearly every download is a
         distinct person rather than an app re-fetching.

         Week by week: 1, 3, 101, 108. The second half of the window is
         well ahead of the first.

         Your audience is spread across 132 regions. Sao Paulo is the
         largest single one at 5.6%, then Dhaka and Punjab.

         One thing worth knowing: 96% of downloads come through Chrome,
         against 7.5% across all podcasts. That is a 12.9x over-index, and
         it means people are listening on your web page rather than in a
         podcast app.

Contents

  1. What you can ask it

  2. Quick install

  3. Setup

  4. Connect your client

  5. Check it worked

  6. Tools

  7. Reading the numbers

  8. Your data

  9. Troubleshooting

Related MCP server: Claude Stats MCP

1. What you can ask it 💬

  • How 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?

  • Where in the world is my audience, down to the state?

  • Which podcast apps do my listeners use, and is that unusual?

  • Compare my show against these three others.

  • What day and hour do most downloads happen?

  • Which of my episodes share the same listeners?

  • OP3 shows nothing for my feed. What is wrong?

The one that is impossible without this server is the second. Every podcast analytics dashboard reports downloads. A download is an app fetching a file, not a person, and one listener whose app re-requests across three days counts three times. OP3's raw rows carry a privacy-preserving per-listener hash, so unique listeners, returning listeners and retention can be computed from them. None of OP3's own aggregated endpoints expose that, and this server does.

2. Quick install ⚡

Node 20 or newer. Nothing else.

npx -y @thenavidm/op3-mcp@latest --version

That is the whole install. npx fetches it on demand, so there is nothing to update later: with @latest, a new version reaches you the next time your client starts the server.

To build from source instead:

git clone https://github.com/navidmoazzez/op3-mcp.git
cd op3-mcp
npm install
npm run build
npm test
node dist/index.js --version

3. Setup 🔑

You can skip this. The server works with no credential at all, because OP3 publishes a shared preview token and that is what it falls back to. It is rate limited and OP3 can withdraw it, so get your own before relying on it.

Have an agent do it

The agent cannot sign in to OP3 for you. What it can do is walk you through it and wire up the config.

Paste this into Claude Code, Cursor, or any agent with terminal access:

Help me set up the OP3 MCP server.

1. Open https://op3.dev/api/keys and tell me what to click to create an
   API key and its bearer token.
2. Stop and wait for me to paste the token back.
3. Add the server to my MCP client config with that token as OP3_TOKEN.
4. Run the doctor command and tell me whether it worked.

Or do it yourself

  1. Go to op3.dev/api/keys.

  2. Create an API key and copy its bearer token.

  3. Set it as OP3_TOKEN in your client config, as in section 4.

You do not need to own a podcast. The token reads public OP3 data, which covers every show that has the OP3 prefix on its feed.

To revoke

Delete the key at op3.dev/api/keys. It stops working immediately.

If you want your own show in here

Your podcast needs the OP3 prefix on its episode audio URLs. That is a change to your feed, not to this server, and it is documented at op3.dev/setup. Until a listener downloads an episode through the prefix, OP3 has no data for your show and neither does this.

4. Connect your client 🔌

OP3_TOKEN is optional in every block below. Leave it out to use OP3's preview token.

Claude Code

claude mcp add op3 \
  -e OP3_TOKEN=your-token \
  -- npx -y @thenavidm/op3-mcp@latest

Add --scope user to make it available in every project rather than just this one.

Claude Desktop

Platform

Config path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "op3": {
      "command": "npx",
      "args": ["-y", "@thenavidm/op3-mcp@latest"],
      "env": { "OP3_TOKEN": "your-token" }
    }
  }
}

Tip Claude Desktop does not inherit your shell PATH. If npx is not found, use the absolute path from which npx.

Quit Claude Desktop completely and reopen it.

claude.ai on the web

claude.ai runs a connector from Anthropic's cloud rather than your machine, so it cannot launch a local command. It needs a public HTTPS URL.

Run the server over HTTP:

npx -y @thenavidm/op3-mcp@latest --http --port 8000

Host it somewhere with a public HTTPS URL, then in claude.ai go to Customize, Connectors, +, Add custom connector, paste the URL and click Add.

On Team and Enterprise plans an owner adds it first under Organization settings, Connectors, then each member enables it under Customize, Connectors.

Set OP3_HTTP_TOKEN to require a bearer token on every request, and OP3_HTTP_HOST=0.0.0.0 if it needs to accept connections from outside the machine. It binds to 127.0.0.1 by default.

Cursor

.cursor/mcp.json, same JSON shape as Claude Desktop, key mcpServers.

Windsurf

~/.codeium/windsurf/mcp_config.json, key mcpServers.

VS Code

.vscode/mcp.json. The key is servers, not mcpServers, and each entry takes "type": "stdio".

{
  "servers": {
    "op3": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@thenavidm/op3-mcp@latest"],
      "env": { "OP3_TOKEN": "your-token" }
    }
  }
}

Codex CLI

~/.codex/config.toml:

[mcp_servers.op3]
command = "npx"
args = ["-y", "@thenavidm/op3-mcp@latest"]

[mcp_servers.op3.env]
OP3_TOKEN = "your-token"

Gemini CLI

~/.gemini/settings.json, key mcpServers.

Everything else

Any stdio MCP client takes the same three things: the command npx, the args, and the env block.

Docker

docker build -t op3-mcp .
docker run --rm -i -e OP3_TOKEN=your-token op3-mcp

5. Check it worked 🩺

npx -y @thenavidm/op3-mcp@latest doctor

It tests the token against the cheapest OP3 endpoint, tests the raw query endpoints separately because they fail for their own reasons, and prints the settings in force.

Symptom

Cause

doctor says the token was rejected

The key was deleted at op3.dev/api/keys, or OP3_TOKEN has a stray space

Every show lookup returns not found

The podcast does not have the OP3 prefix on its feed. Run op3_verify_prefix

Rolled-up tools work, raw ones time out

The window is too wide. Narrow it, or raise OP3_REQUEST_TIMEOUT_MS

Numbers do not match the OP3 dashboard

Rolled-up figures lag by about a day. Check the asof field

npx not found in Claude Desktop

Desktop does not inherit your shell PATH. Use the absolute path

6. Tools 🛠️

Every tool is a read. Nothing here changes anything.

Finding a show

Tool

Does

op3_resolve_show

Any identifier to an OP3 show uuid. Takes a feed URL and encodes it for you

op3_get_show

Show title, uuid, podcast guid, stats page, optionally the episode list

op3_list_episodes

Episodes with OP3 episode ids and publication dates, searchable by title

Downloads, from OP3's rolled-up data

Fast. Prefer these whenever they answer the question.

Tool

Does

op3_show_downloads

Monthly downloads, the week-by-week breakdown, and the weekly average

op3_episode_downloads

Downloads at 1, 3, 7 and 30 days after publication, plus all-time

op3_compare_shows

Several shows ranked side by side, in one request

Audience, from the raw rows

The tools OP3's own API cannot give you.

Tool

Does

op3_audience_summary

Unique listeners against downloads, and the ratio between them

op3_new_vs_returning

First-time against repeat listeners, over a baseline you choose

op3_listener_retention

Cohort carry-over between two periods, as two separate rates

op3_episode_overlap

Which episodes share an audience, and how much

Where and how

Tool

Does

op3_geography

Downloads and listeners by continent, country, region, metro or timezone

op3_app_share

Podcast apps, over any window rather than OP3's fixed three months

op3_device_breakdown

All four dimensions at once: agent type, app, device type, device

op3_global_app_share

App market share across every show OP3 measures

op3_benchmark_apps

This show against that global mix, indexed so 100 is average

Over time

Tool

Does

op3_download_trend

Downloads and listeners by day, week or month, with a growth rate

op3_listening_patterns

Hour of day and day of week, in UTC

op3_episode_curve

One episode against the show's median at the same age

Discovery and setup

Tool

Does

op3_recent_transcripts

Episodes across OP3 that carry a podcast:transcript tag

op3_verify_prefix

Whether OP3 is receiving downloads for a feed, and what is wrong if not

op3_query_downloads

Raw download rows, every filter OP3 offers. The escape hatch

op3_query_hits

Raw request log across OP3. A verification surface, not an analytics one

7. Reading the numbers 📊

The part worth more than the upstream API docs. All of it was found by probing the live API, because OP3's OpenAPI document declares no response schemas.

A download is not a person. It is an app fetching a file. Podcast analytics across the industry quotes downloads, and a show with a loyal audience whose apps re-request looks larger than a show with more actual listeners. op3_audience_summary gives both numbers and the ratio.

Episodes are not comparable on totals. An older episode has had longer to accumulate downloads. op3_episode_curve compares at equal age against the show's own median, and excludes episodes younger than the horizon from that median so a three-day-old episode does not drag a thirty-day comparison down.

App share on its own says almost nothing. Nearly every show's biggest app is Apple Podcasts, because Apple is around 38% of all podcast listening. A show at 40% Apple is under-indexed. op3_benchmark_apps divides by the global share so the number means something.

bots does more than add bots. With it off, OP3 applies its published download calculation, which deduplicates repeat requests. With it on you get raw request rows. On one probe the same window returned 213 against 345, and only 79 of the difference were bot rows.

Rolled-up figures lag about a day. They carry an asof date. That is why they will not match a live dashboard exactly.

An empty episode list is normal for a small show. OP3's daily rollup has not covered it yet. The show-level total may still be there.

Metro codes are US-only. They are a US broadcast concept. Use level=region for a worldwide breakdown.

Raw download rows come back oldest first. OP3 offers no way to reverse that on this endpoint, so a limit takes the earliest rows in the window. Narrow the window to see recent activity rather than raising the limit.

Some shows cannot be filtered by episode. OP3 derives the episode id from the episode audio URL, so a host that regenerates those URLs leaves historical rows carrying ids that no longer appear in the feed. Checked across three shows, two matched exactly and one had no overlap at all. op3_episode_curve detects this and says so rather than returning silent zeros.

The raw endpoints are scans, not indexes. Two rows took 2790ms when probed. Cost grows with the window. The server pages with a continuation token, caps what it will pull, and labels any result that was cut short, because a truncated result presented as complete makes every rate computed from it wrong.

8. Your data 🔐

There is no backend. The server runs on your machine, talks to op3.dev, and stores nothing on disk.

Responses are cached in memory for five minutes so an agent asking several questions about one show does not pay for the same scan repeatedly. That cache dies with the process. Set OP3_CACHE_TTL_MS=0 to disable it.

Per-listener identifiers never leave the server. OP3's raw row carries audienceId and hashedIpAddress. Both are aggregated over inside the process and stripped from anything returned. Every audience figure is a count, a rate or a distribution.

This is deliberate. OP3 exists to be a privacy-preserving analytics service, and a wrapper that streamed stable per-listener keys into a model context would undo that. op3_query_downloads can emit a shortened, non-reversible label if you need to tell rows apart by listener, and it is off by default.

Third-party text. Show and episode titles come from arbitrary RSS feeds. Anyone can publish a podcast, so that text is attacker-controlled and reaches the model inside a tool result. The server neutralises fence-breaking and tells the model in its instructions to treat it as data. That raises the cost of an injection rather than removing it. The real reason the blast radius is small is that this server is read-only and reaches nothing but OP3.

Settings

Variable

Default

Does

OP3_TOKEN

preview token

Your bearer token from op3.dev/api/keys

OP3_REQUEST_TIMEOUT_MS

45000

Per-request deadline

OP3_MIN_REQUEST_INTERVAL_MS

150

Spacing between requests

OP3_MAX_ROWS

50000

Cap on rows any one analysis pulls

OP3_MAX_PAGES

40

Cap on continuation pages

OP3_CACHE_TTL_MS

300000

Response cache lifetime, 0 disables

OP3_HTTP_PORT

8787

Port for --http

OP3_HTTP_HOST

127.0.0.1

Bind address for --http

OP3_HTTP_TOKEN

none

Require this bearer token on HTTP requests

9. Troubleshooting 🔧

Run doctor first. It names the problem in one command.

npx -y @thenavidm/op3-mcp@latest doctor

Symptom

Cause and fix

"OP3 has nothing at /shows/..."

The show has no OP3 prefix on its feed. Run op3_verify_prefix, then op3.dev/setup

Downloads are zero but the show exists

The prefix was added recently and nothing has come through. Widen the lookback

Every row is a bot

The prefix works but no listener has downloaded yet

A tool times out

The window is too wide for a scan. Narrow it or raise OP3_REQUEST_TIMEOUT_MS

A result says it was truncated

A cap stopped the pull. Narrow the window, or raise OP3_MAX_ROWS

op3_episode_curve returns zeros with a warning

The host regenerates episode URLs, so episode ids do not line up. Show-level tools still work

Rate limited on the preview token

It is shared. Get your own at op3.dev/api/keys

FAQ ❓

An MCP server is a standard way to give an AI assistant tools it can actually call. Model Context Protocol is the agreement they speak, so any MCP client connects to any MCP server. This one exposes 22 read-only tools over OP3.

It does not. The token reads public OP3 data, which covers every show that has the prefix on its feed.

You do not need an account, though you should get a token. Without one the server uses OP3's shared preview token, which is rate limited.

It works with any podcast whose feed carries the OP3 prefix, whoever hosts it.

Those report only their own listeners. OP3 sits in front of the audio file, so it sees every download regardless of app.

It does not. OP3's API is read-only and so is this.

It does not. Per-listener identifiers are aggregated inside the server and stripped from every response.

The raw endpoints are scans. Cost grows with the window. The rolled-up tools answer in milliseconds; prefer them.

It works over the HTTP transport, which needs a public HTTPS URL. See section 4.

With @latest in the install line, the next published version reaches you the next time your client starts the server.

Questions

Run into a problem or have a question? Open an issue and I will help.

About the author 👋

Navid Moazzez is a leading AI business strategist, and the host of the AI Creator Summit, watched by 100,000+ creators. He helps creators and founders master AI and build their own AI Operating System (AI OS) to automate their business and life. This MCP server is one piece of that system.

Links

If this is useful, star the repo and come say hi on X.

Dependencies

Library

License

What it does

MCP TypeScript SDK

MIT

The MCP server and transports

zod

MIT

Tool argument schemas and validation

Nothing else. The OP3 client, the pagination, the aggregation and the time handling are all built in, so the install is two packages deep.

License

MIT. Free to use, modify, and share.

Not affiliated with, endorsed by, or connected to the Open Podcast Prefix Project.


© 2026 NM Media. Made with ❤️ by Navid Moazzez.

Available Tools

22 tools
op3_app_shareop3_app_shareA
Read-onlyIdempotent

Which podcast apps a show's audience uses, over any window you choose, with unique listeners alongside downloads. Prefer this over OP3's built-in app query when the window matters, because OP3's own endpoint is locked to the last three calendar months. Listener share is the more honest column: an app that re-requests files inflates its download share without representing more people.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
topNoHow many apps to return.
botsNoInclude known bots. Off by default.
startNoWindow start, e.g. -30d. Defaults to -30d.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint:false, so the safety profile is established. The description adds valuable behavioral nuance beyond those annotations: it cautions that download share can be inflated by apps that re-request files, and it advises that listener share is the more honest metric. This helps the agent interpret results correctly rather than simply invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler: it states output scope, gives a routing rule with rationale, and adds a column-interpretation caveat. Every sentence earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only query tool with a rich schema and strong annotations, the description is complete: it tells the agent what the tool returns, when to prefer it, how to interpret its columns, and how it differs from a close alternative. The lack of an output schema is compensated by the description already naming the key output dimensions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all five parameters including defaults, bounds, and formats. The description reinforces the importance of start/end window semantics but does not add parameter-level information beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific, concrete statement of what the tool returns: the podcast apps a show's audience uses, with unique listeners alongside downloads, over a user-selected window. It is clearly distinguishable from siblings like op3_global_app_share by emphasizing 'a show's audience' and from OP3's built-in app query by emphasizing flexible windowing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to prefer this tool over OP3's built-in app query: whenever the window matters, because the built-in endpoint is locked to the last three calendar months. This is direct, actionable routing guidance that prevents incorrect tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_audience_summaryop3_audience_summaryA
Read-onlyIdempotent

Unique listeners against downloads for a show over any window. This is the number OP3's own dashboard and every rolled-up endpoint cannot give you: how many people, not how many requests. Read downloadsPerListener as the key figure, near 1 means each download is a distinct person, well above 1 means apps re-requesting the same file and every download number you see elsewhere is inflated by that factor.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end, same formats as start. Defaults to now.
botsNoInclude downloads from known bots. Off by default, which matches how OP3's own download counts are computed.
startNoWindow start. A relative value like -30d, -8w or -3m, a date like 2026-08-01, or an ISO timestamp. Defaults to -30d. Wider windows are slower: this reads raw rows, not a rollup.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds valuable interpretation of the key metric, downloadsPerListener, and warns that other download figures are inflated by re-requests. This goes beyond the annotations and helps the agent understand the result's meaning.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose. The second sentence explains interpretation of the key metric without unnecessary filler. Every part adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description helpfully explains the central output concept, downloadsPerListener. Parameter semantics are fully covered by the schema, and annotations cover safety. It could be more explicit about the full set of returned fields, but it is sufficient for an agent to select and invoke the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all four parameters. The description adds only general context like 'over any window' but does not provide additional parameter-level detail beyond what the schema already includes, meriting the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific, meaningful objective: compute unique listeners against downloads for a show over any window. It clearly differentiates from other endpoints by emphasizing 'how many people, not how many requests,' which distinguishes it from download-focused sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly tells the agent when to use this tool: when the true audience size matters and when other endpoints only provide request counts. It says 'every rolled-up endpoint cannot give you' this number, giving clear usage context, though it does not explicitly name alternative tools or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_benchmark_appsop3_benchmark_appsA
Read-onlyIdempotent

A show's app mix against OP3's global mix, with an index where 100 means exactly average. This is the tool that turns app share into something actionable. A show can be 40% Apple Podcasts and be under-indexed, because Apple is around 38% globally, so raw share hides the real story. Over-indexed apps are where this audience is unusual and where it can be reached deliberately.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
botsNoInclude known bots. Off by default.
startNoWindow start for the show side, e.g. -30d. Defaults to -30d.
min_shareNoIgnore apps below this percentage of the show's downloads. Without a floor, one download from an obscure app reports as a huge over-index.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so safety is covered. The description adds valuable behavioral context: the result is a relative index, not raw share, and a high raw percentage can still be an under-index. It does not describe output shape or sorting, but the core interpretation is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the core definition and uses a single concrete example to make the index concept actionable. The sentence about turning app share into something actionable is slightly promotional, but it reinforces purpose without making the description bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With fully documented parameters, read-only annotations, and no output schema, the description supplies enough output semantics—app mix benchmarked against global mix with 100 as average—for an agent to invoke the tool and interpret results. It could be more explicit about the response being a per-app list, but the core intent is unambiguous.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and each parameter already has a meaningful description, so the baseline of 3 applies. The tool description adds no parameter-level detail beyond what the schema provides; the min_share rationale is in the schema, not in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (a show's app mix), the comparator (OP3's global mix), and the key output concept (an index where 100 means exactly average). It does not use an explicit verb like 'benchmark' or 'compare', and it does not name sibling alternatives, but the 'against OP3's global mix' phrasing distinguishes it from raw app-share tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a concrete use case: look for over-indexed apps to find where this audience is unusual and reachable. The Apple Podcasts example also explains why raw share is a misleading filter. It does not explicitly say when to prefer op3_app_share or op3_global_app_share instead, so exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_compare_showsop3_compare_showsA
Read-onlyIdempotent

Compare several shows side by side on monthly downloads and weekly average, ranked. OP3 accepts many shows in one request, so this is one call rather than several. Useful for benchmarking a show against others in its category, or for tracking a portfolio of shows at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesTwo to twenty shows, each as a uuid, podcast:guid or feed URL. Anything that is not already a uuid costs one extra lookup.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, read-only operation. The description adds useful behavioral context: the request accepts many shows at once and returns ranked comparison data across monthly downloads and weekly average. No contradictions with annotations are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences, each earning its place: the first states the core function, the second explains batching efficiency, and the third gives concrete use cases. The key elements are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the single parameter, the read-only annotations, and the clear purpose, the description provides enough context to select and invoke the tool. It does not detail the output format, but no output schema exists and the ranked comparison result is reasonably inferable from the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% parameter coverage, including the accepted identifier formats, the 2-to-20 item limit, and the extra lookup cost for non-UUID identifiers. The description does not add meaning beyond what the schema states, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('compare'), a clear resource ('several shows side by side'), and concrete metrics ('monthly downloads and weekly average, ranked'). This clearly distinguishes it from single-show tools like op3_get_show or op3_show_downloads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains when this tool is appropriate: benchmarking a show against category peers or tracking multiple shows at once. It also notes that one request handles many shows, implying it should be preferred over repeated single-show calls, though it does not name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_device_breakdownop3_device_breakdownA
Read-onlyIdempotent

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). One call returns all four, which is what you want for a picture of the audience rather than a single ranked list.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
topNoHow many entries per dimension.
botsNoInclude known bots. Worth turning on here specifically, since agentType is the dimension that shows how much bot traffic a feed attracts.
startNoWindow start, e.g. -30d. Defaults to -30d.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnly, idempotent, and non-destructive behavior, the description adds valuable output behavior: all four dimensions are returned in a single call, avoiding the need for multiple requests. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core concept and with the dimensions enumerated efficiently. The final sentence adds selection context and is not wasteful, though slightly promotional.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since there is no output schema, the description does well to communicate that the call returns all four dimensions at once. However, it does not describe the result structure, ordering, or how the 'top' parameter applies per dimension, leaving some ambiguity for an agent with no output schema to rely on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the parameter semantics are already documented structurally. The description adds no parameter-level details beyond what the schema provides, keeping this at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool does: it explains how a show is consumed across four named OP3 dimensions and notes that one call returns all four. It is specific about the resource and the shape of the result, though it does not explicitly name a sibling tool it should be distinguished from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a useful selection cue: 'One call returns all four, which is what you want for a picture of the audience rather than a single ranked list.' This implies when to use it, but it does not name alternatives or provide explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_download_trendop3_download_trendA
Read-onlyIdempotent

A show's downloads and unique listeners over time, bucketed by day, week or month, with a growth rate and the peak period. Growth compares the two halves of the window rather than first period against last, because podcast downloads are weekly-seasonal enough that comparing endpoints is close to noise.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
botsNoInclude known bots. Off by default.
startNoWindow start, e.g. -90d, -12w, 2026-01-01. Defaults to -30d.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.
granularityNoBucket size. Use week or month for windows longer than a couple of months.day

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a non-obvious behavioral detail: growth compares the two halves of the window rather than endpoints, with the weekly-seasonality rationale. This goes beyond the readOnly/idempotent annotations and helps an agent interpret the returned growth rate correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, with the core output front-loaded and a high-value rationale in the second. No repetitive or unnecessary wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description plus the fully-covered schema and read-only annotations is sufficient for an agent to invoke the tool. It names the returned data elements, though it does not describe the exact response shape or explicitly route between sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all parameters, but the description adds meaning to start/end by explaining that growth compares window halves. It also reinforces granularity semantics with the bucketing phrase, raising it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (a show's downloads and unique listeners) and the time-series nature, also mentioning growth rate and peak period. It lacks an explicit verb, but it is specific enough to distinguish it from aggregate sibling tools like op3_show_downloads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use for time-series analysis of a show, and the growth explanation gives useful context, but it does not explicitly state when to prefer this over siblings or when not to use it. No alternative tools are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_episode_curveop3_episode_curveA
Read-onlyIdempotent

How one episode is tracking against the show's own median at the same age. Returns cumulative downloads by day after publication alongside the median across comparable episodes, plus a verdict. This is the only fair way to judge a recent episode: total downloads always favour older episodes because they have had longer to accumulate. Only episodes at least as old as the horizon go into the median, so a three-day-old episode does not drag a thirty-day comparison toward zero.

ParametersJSON Schema
NameRequiredDescriptionDefault
botsNoInclude known bots. Off by default.
episode_idYesThe OP3 episode id, a 64-character hash from op3_list_episodes or op3_get_show with include_episodes.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.
horizon_daysNoHow many days after publication to chart. 30 is the industry convention.
compare_episodesNoHow many other episodes form the median. More is steadier and slower.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint/idempotentHint annotations, the description discloses key behavior: the comparison is age-normalized, the median is computed only from episodes at least as old as the horizon, and the tool returns a verdict. This prevents misinterpretation of raw download totals and explains why a young episode won't distort the median.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose and output, why this tool matters, and how the median is constructed to avoid bias. It is front-loaded and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytics tool with full schema coverage and no output schema, the description explains what is returned, how the comparison works, and why it is fair. An agent has enough context to select and invoke the tool correctly without needing more detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all parameters at 100% coverage, so the baseline is 3. The description adds useful semantic context by explaining that only episodes at least as old as the horizon enter the median, which clarifies the role of horizon_days, and the notion of 'comparable episodes' gives meaning to compare_episodes. Other parameters like bots and identifier do not need additional explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states what the tool returns: cumulative downloads by day after publication, the median across comparable episodes, and a verdict. It describes the resource (an episode's curve relative to the show's own median), but it does not explicitly name or differentiate from sibling tools like op3_episode_downloads or op3_compare_shows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a strong when-to-use signal: it is 'the only fair way to judge a recent episode' and explains why raw total downloads are misleading because older episodes have had more time to accumulate. It does not explicitly name alternative tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_episode_downloadsop3_episode_downloadsA
Read-onlyIdempotent

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. Use it to compare how episodes performed at equal age. Note that an empty result is normal for a small or new show, it means OP3's daily rollup has not covered it yet rather than that there is no data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many episodes to return, newest first.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as read-only, idempotent, and open-world. The description adds meaningful behavior beyond that: empty results are normal for small/new shows because OP3's daily rollup may not have covered them yet. This prevents the agent from misinterpreting an empty response as a failure. It also communicates the time-window structure of the returned data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences: the first states the core function and return metrics, the second gives the primary use case and a valuable caveat about empty results. Every sentence earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the schema fully documents parameters, annotations cover safety and idempotency, and the description explains the metric, use case, and empty-result semantics, nothing essential is missing. The lack of an output schema is mitigated because the description already says what is returned. It is complete for a read-only query tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both identifiers and limit fully. The description adds no new parameter-level detail, but it reinforces that the identifier refers to a show, which is consistent with the schema. Baseline 3 is appropriate because the schema carries the load and the description does not need to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (per-episode download counts) and precise metric (downloads in first 1, 3, 7, 30 days plus all-time). This clearly differentiates from show-level tools like op3_show_downloads and curve tools like op3_episode_curve, which would otherwise be plausible siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit use case: 'Use it to compare how episodes performed at equal age.' This provides clear context for why an agent would select this tool. It does not explicitly name alternative tools or when not to use it, but the guidance is strong enough to route an agent correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_episode_overlapop3_episode_overlapA
Read-onlyIdempotent

Which episodes share an audience. For each pair of a show's busiest episodes, reports shared listeners, a symmetric similarity, and the share of the smaller episode's audience that also heard the other. Read the smaller side's share first: for one big episode and one small one the symmetric number is always near zero, while the smaller side's share tells you whether a spike brought genuinely new people or just gave the existing audience another download.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end, same formats as start. Defaults to now.
botsNoInclude downloads from known bots. Off by default, which matches how OP3's own download counts are computed.
startNoWindow start. A relative value like -30d, -8w or -3m, a date like 2026-08-01, or an ISO timestamp. Defaults to -30d. Wider windows are slower: this reads raw rows, not a rollup.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.
top_episodesNoHow many of the busiest episodes to compare. Pairs grow quadratically, so 6 gives 15 pairs and 15 gives 105.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds valuable behavioral context beyond annotations by explaining that the symmetric similarity is near zero for a big/small episode pair and that the smaller side's share is the diagnostically meaningful number. This helps the agent interpret results and avoid misreading the metric.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the primary purpose; the second delivers essential interpretation guidance that prevents a predictable misinterpretation. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with no output schema, the description explains the core result fields—shared listeners, symmetric similarity, and the smaller episode's audience share—and how to read them. It is slightly light on exact return structure, but the parameter schema covers inputs and annotations cover safety. Overall it is complete enough for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters (identifier, start, end, bots, top_episodes) are already well documented elsewhere. The description does not add parameter-level detail, but it does reinforce the meaning of top_episodes by referring to 'the show's busiest episodes'. This is adequate but not compensatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('reports') and resource ('each pair of a show's busiest episodes') and clearly distinguishes itself from sibling tools like op3_episode_downloads or op3_compare_shows by targeting episode-to-episode audience overlap within a single show. It is not a tautology and goes beyond the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool—when you need audience overlap between a show's top episodes—but it never explicitly states alternatives or when not to use it. The interpretive note about interpreting the smaller side's share is useful, but selection guidance against sibling tools is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_geographyop3_geographyA
Read-onlyIdempotent

Where a show's downloads come from, at whichever level you ask for: continent, country, region (state or province), metro area, or timezone. Reports downloads and unique listeners side by side for each place, because one enthusiastic listener in a small market otherwise looks like a market. Region and metro are qualified by country, so Illinois and Israel do not merge.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
topNoHow many places to return. The rest are folded into otherCount rather than dropped.
botsNoInclude downloads from known bots. Off by default.
levelNoGranularity. country is the usual answer. region is states and provinces. metro is a US-centric DMA code and is mostly empty outside the US.country
startNoWindow start, e.g. -30d, -8w, 2026-08-01. Defaults to -30d.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: it reports downloads and listeners side by side to avoid misleading small-market conclusions, qualifies regions and metros by country, notes metro is US-centric and mostly empty elsewhere, and implies folded results through the top parameter. This directly shapes how an agent interprets the output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the purpose appears in the first sentence, granularity options in the second, and the country-qualification caveat earns its place. Every sentence adds information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytics tool with rich annotations and full schema coverage, the description covers the key decision-relevant context: available geography levels, the unique-listeners pairing, metro's US limitation, and the country-qualification nuance. No critical gap remains for an agent deciding whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description reinforces the meaning of level and top through examples and caveats, but does not need to add further parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states exactly what the tool does: reports downloads and unique listeners by geographic area, selectable at five granularity levels. It clearly distinguishes this from sibling analytics tools by focusing on geography rather than episodes, devices, or trends.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on when the tool is appropriate: any geographic breakdown of a show's audience, with 'country is the usual answer' as practical guidance. It does not explicitly name alternative tools or when not to use it, but the geographic focus and level guidance are strong enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_get_showop3_get_showA
Read-onlyIdempotent

Look up a show on OP3: its uuid, title, podcast guid and public stats page. Set include_episodes to also get the episode list with OP3 episode ids, titles and publication dates. Episode ids from here are what the episode-level tools filter on.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesThe show, as any of: an OP3 show uuid (32 hex characters), a podcast:guid (the dashed UUID from the feed's <podcast:guid> tag), or the RSS feed URL itself. A plain feed URL is fine, it gets encoded for you.
episode_limitNoCap on episodes returned when include_episodes is true. Newest first.
include_episodesNoInclude the episode list. Off by default because a long-running show returns hundreds.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: include_episodes is off by default due to potentially hundreds of episodes, and episode IDs obtained here are the basis for downstream episode tools. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the main purpose, the optional behavior with rationale, and the downstream usage of returned IDs. It is front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with three well-described parameters, the description is complete. It covers what data is returned, the optional episode expansion, and how the results connect to other tools. No output schema exists, but the listed return fields are sufficient for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The description reinforces the purpose of include_episodes and the role of episode IDs but does not add significant semantic detail beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Look up a show on OP3') and the resource, listing the returned fields (uuid, title, podcast guid, public stats page) and the optional episode list. It does not explicitly distinguish this tool from siblings like op3_resolve_show, but the core purpose is specific and understandable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this tool to look up a show and optionally retrieve episode IDs, and notes that these episode IDs are what episode-level tools filter on. It does not explicitly name alternatives or say when not to use it, but the context is enough for an agent to know when it is relevant.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_global_app_shareop3_global_app_shareA
Read-onlyIdempotent

Podcast app market share across every show OP3 measures, over the last thirty days. This is the industry benchmark, not one show's numbers, and it is useful on its own for questions about the podcast app landscape. Can be narrowed to a single device to see which apps dominate on, say, an Apple iPhone.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_agentNoRestrict to the device inferred from a raw user agent string.
device_nameNoRestrict to one device, e.g. 'Apple iPhone'. Device names come from op3_device_breakdown.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, destructiveHint, and idempotentHint, so the description only needs to add context beyond safety traits. It adds the fixed trailing-thirty-day window, the global aggregation scope, and clarifies that results are not per-show—useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The definition is front-loaded, the benchmark context is useful, and the device example earns its place by clarifying an optional parameter's real-world use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent benchmark query, the description plus annotations cover what the tool returns conceptually, its scope, its time window, and the available narrowing. It does not explicitly describe the response format, but the absence of an output schema and the simple market-share concept make this acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes both optional parameters fully, including an example device name and the source for device names. The description adds a small usability signal about narrowing to a device, but it does not meaningfully extend the schema's parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific function and resource: podcast app market share across every show OP3 measures over the last thirty days. It explicitly distinguishes this from any single show's numbers, which differentiates it from per-show app share siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It says this is the industry benchmark and useful for landscape-level questions, while noting it is not a single show's numbers, which implies per-show questions should use another tool. It also gives a concrete usage example for narrowing by device, though it doesn't name alternative sibling tools explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_listener_retentionop3_listener_retentionA
Read-onlyIdempotent

Cohort carry-over between two periods: how much of the earlier period's audience showed up again in the later one. Returns two rates that answer different questions. retentionRate is the share of the old audience that came back, which measures whether the show holds people. carryOverShare is the share of the new period that is old faces, which measures whether the show is growing or recycling. A show can score well on one and badly on the other.

ParametersJSON Schema
NameRequiredDescriptionDefault
botsNoInclude downloads from known bots. Off by default, which matches how OP3's own download counts are computed.
later_endNoEnd of the later period. Defaults to now.
cohort_endNoEnd of the earlier period, and the start of the later one. Defaults to -30d.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.
cohort_startNoStart of the earlier period. Defaults to -60d.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description's extra value comes from explaining the two output rates and the interpretative caveat that a show can score well on one rate and badly on the other. This adds useful behavioral context beyond annotations, though it does not cover edge cases such as empty periods or sampling details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear definition and then, in a few sentences, explains both output metrics and an important caveat. Every sentence earns its place, though it is slightly more conceptual and wordy than the leanest possible definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by explicitly naming and defining both return rates, which is enough for an agent to interpret the result. Combined with schema-covered parameters and defaults, the tool can be invoked correctly; the only notable gap is the lack of explicit sibling differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters and their defaults, which makes 3 the baseline. The description adds conceptual framing about earlier and later periods but does not add new parameter-level details, so it does not exceed baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly defines what the tool does: it computes cohort carry-over between two periods and returns two distinct rates, retentionRate and carryOverShare, with specific meanings. It is specific about the resource and metric, but it does not explicitly compare itself to sibling tools like op3_new_vs_returning or op3_episode_overlap, so it misses the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool by explaining what each rate answers: retentionRate indicates whether the show holds its audience, while carryOverShare indicates whether the show is growing or recycling. This is effective usage guidance, though it stops short of naming alternatives or stating when not to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_listening_patternsop3_listening_patternsA
Read-onlyIdempotent

When downloads happen, by hour of day and day of week, in UTC. Useful for choosing a publication slot. Read it as request timing rather than listening behaviour: a podcast app's scheduled background refresh fires on the app's schedule, not when a person pressed play, so the peaks partly reflect app defaults.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
botsNoInclude known bots. Leave off: bot traffic is often scheduled hourly and will flatten the pattern.
startNoWindow start, e.g. -30d. Defaults to -30d.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/destructive annotations, the description warns that scheduled background refreshes can dominate the pattern and that peaks partly reflect app defaults. This prevents a real misinterpretation and is valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences front-load the key dimension (time buckets), then give a concrete use case and an essential caveat. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only analytics tool with fully documented parameters and no nested schema, the description covers what the data is, the timezone, the use case, and how to interpret it correctly. Nothing needed to invoke or understand the report is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents start, end, identifier, and bots. The description adds the UTC timezone context but otherwise does not need to repeat parameter meanings; a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports download timing aggregated by hour of day and day of week in UTC, which is a specific resource and dimensions. It distinguishes this report from sibling analytics tools by naming the exact grouping and the publication-slot use case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says the report is useful for choosing a publication slot, and adds an important interpretation caveat about request timing versus listening behaviour. It does not name alternative tools or exclusion conditions, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_list_episodesop3_list_episodesA
Read-onlyIdempotent

List a show's episodes with their OP3 episode ids, titles and publication dates, newest first. Use it to find the episode id for a specific episode before asking anything episode-level. Episode titles come from the publisher's RSS feed and are third-party text.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many episodes to return, newest first.
searchNoCase-insensitive substring match on the episode title, applied before the limit.
identifierYesThe show, as any of: an OP3 show uuid (32 hex characters), a podcast:guid (the dashed UUID from the feed's <podcast:guid> tag), or the RSS feed URL itself. A plain feed URL is fine, it gets encoded for you.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful behavioral context: results are newest first, titles are third-party text from the publisher's RSS feed, and the tool is positioned as a prerequisite before episode-level queries. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the core behavior, then gives the practical usage guidance and a relevant caveat about title source. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with rich annotations and a fully documented schema, the description is complete. It states what the output contains, the ordering, the usage purpose, and a data-quality caveat. No output schema exists, but the description sufficiently conveys the expected return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters identifier, limit, and search are already thoroughly documented. The description adds context about the returned fields and the use case, but it does not add significant parameter-level meaning beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('a show's episodes'), and specifies the returned fields: OP3 episode ids, titles, and publication dates, ordered newest first. This clearly differentiates it from sibling tools like op3_get_show, which focuses on show-level info rather than episode listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool: 'Use it to find the episode id for a specific episode before asking anything episode-level.' This gives clear context and a prerequisite, though it does not explicitly name alternatives or when-not-to-use conditions relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_new_vs_returningop3_new_vs_returningA
Read-onlyIdempotent

Split a show's listeners in a window into first-time and returning, by comparing against a longer baseline period immediately before it. Answers whether a show is reaching new people or serving the same audience repeatedly. The baseline length matters: a short baseline calls a monthly listener new, so it defaults to four times the window and both sizes are reported so you can judge the answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end, same formats as start. Defaults to now.
botsNoInclude downloads from known bots. Off by default, which matches how OP3's own download counts are computed.
startNoWindow start. A relative value like -30d, -8w or -3m, a date like 2026-08-01, or an ISO timestamp. Defaults to -30d. Wider windows are slower: this reads raw rows, not a rollup.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.
baseline_multiplierNoHow many window-lengths of history to treat as the baseline. Higher is more accurate and slower. 4 means a 30-day window is compared against the 120 days before it.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: the baseline length affects results, the default is four times the window, and both baseline and window sizes are reported so the agent can judge reliability.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, each earning its place: the first defines the operation, the second states the use case, and the third flags an important behavioral nuance. The critical caveat about baseline length is front-loaded within the third sentence and clearly explained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description does well by stating that both sizes are reported. It explains the default baseline multiplier and its effect. It could be more explicit about what 'first-time' and 'returning' mean operationally, but the schema and description together provide sufficient context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage and already explains identifier, start, end, bots, and baseline_multiplier. The description adds conceptual meaning about how the baseline comparison works and why baseline length matters, but it does not substantially extend parameter-level semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Split') and resource ('a show's listeners in a window') and clearly differentiates the tool's purpose from siblings by focusing on first-time vs returning listeners. It also states the core question the tool answers, making its role distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: when you want to know whether a show is reaching new listeners or serving the same audience. It does not explicitly name alternatives or exclusions, but the purpose framing provides enough guidance for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_query_downloadsop3_query_downloadsA
Read-onlyIdempotent

Raw download rows for a show, with every filter OP3 offers. This is the escape hatch for questions the aggregating tools do not cover. Prefer op3_show_downloads, op3_audience_summary, op3_geography or op3_app_share when they can answer the question, because raw rows are slow to fetch and expensive to reason over. Rows come back oldest first and OP3 offers no way to reverse that on this endpoint, so the limit takes the earliest rows in the window: to see recent activity, narrow the window with start rather than raising the limit. Per-listener identifiers are removed from the output.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
botsNoReturn raw request rows instead of OP3's deduplicated download count. This adds bot traffic and also switches off OP3's download calculation, so the row count rises for reasons beyond bots. Off by default, which matches every other download figure OP3 reports.
limitNoRows to return. Kept low on purpose: these rows are wide and fill a context window fast.
startNoWindow start, e.g. -24h, -7d, 2026-08-01. Defaults to -30d.
episode_idNoRestrict to one episode, by its 64-character OP3 episode id.
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.
include_listener_keysNoInclude a shortened, non-reversible listener label so rows can be told apart by listener. The full audienceId and hashedIpAddress are never returned either way.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds several non-obvious behaviors beyond the annotations: rows are ordered oldest first, there is no way to reverse ordering on this endpoint, the limit selects the earliest rows, and per-listener identifiers are removed from output. These are exactly the behavioral details an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: core purpose first, then routing guidance, then ordering/limit behavior, then privacy. It avoids repeating schema fields or annotation contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the non-obvious decision-relevant context: when to prefer siblings, ordering limitations, limit behavior, and removal of listener identifiers. Since there is no output schema, the returned row fields are not enumerated, which is a small gap, but the description is otherwise sufficient for an agent to invoke and reason about the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful cross-parameter guidance: limit interacts with the oldest-first ordering, and start is the way to reach recent rows. This enriches the semantics of limit and start without restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens by stating the exact resource and result: raw download rows for a show with every filter OP3 offers. It also distinguishes this tool from the aggregating siblings by calling it the escape hatch for questions they do not cover, so an agent can tell it apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the preferred alternatives (op3_show_downloads, op3_audience_summary, op3_geography, op3_app_share) and explains why raw rows should be avoided when possible: they are slow to fetch and expensive to reason over. It also gives concrete query strategy: because rows return oldest first, narrow the window with start rather than raising limit to see recent activity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_query_hitsop3_query_hitsA
Read-onlyIdempotent

Raw request rows from OP3's redirect log, across every show unless filtered by url. This is the lowest level OP3 exposes and it is a verification surface rather than an analytics one: it shows individual requests including user agents, byte ranges and the edge that served them. For questions about a specific show's performance, use the show tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNoWindow end. Defaults to now.
urlNoFilter by episode URL. Supports a trailing wildcard for a starts-with match, which is how you scope this to one show or one host.
limitNoRows to return.
startNoWindow start, e.g. -1h, -24h. Defaults to -1h, because this is a firehose across all shows.
newest_firstNoSort most recent first.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the read-only and idempotent annotations, the description discloses that results span every show unless filtered by URL, and that rows include user agents, byte ranges, and edge information. This adds meaningful behavioral context, though it does not address potential volume/cost implications of querying all shows.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it states what the tool returns, why that matters, and when to use a different tool. Every sentence earns its place and the key scope limitation is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema tool, the description gives enough clarity about the kind of data returned and the default cross-show scope. It lacks explicit details about response shape beyond a few example fields, but the schema covers parameters and the description covers semantics sufficiently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all five parameters are already documented in the input schema. The description adds little parameter-level detail beyond reaffirming that the URL filter is the scoping mechanism, which is already present in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns raw request rows from OP3's redirect log, positioned as the lowest-level verification surface rather than an analytics tool. It explicitly contrasts this with show-level analytics tools, making its scope and purpose easy to distinguish from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use the show tools instead when the question is about a specific show's performance, and frames this tool as a verification surface. This gives the agent clear routing guidance between raw log inspection and analytics queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_recent_transcriptsop3_recent_transcriptsA
Read-onlyIdempotent

Recently published episodes across all of OP3 that carry a podcast:transcript tag, newest first. Use it to find podcasts whose episodes are machine-readable, which is the shortlist worth building on for anything that needs to read transcripts rather than count downloads. Returns podcast guids you can pass straight to the show tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many episodes to return, newest first.
resolve_showsNoLook each podcast guid up to add the show title and uuid. Costs one request per distinct show, so leave it off for large limits.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds important behavioral context: it returns podcast guids, not transcript text or download counts, and it covers all of OP3 with newest-first ordering. This prevents a common misinterpretation of what 'recent transcripts' means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: what the tool returns comes first, followed by when to use it and what to do with the output. Every sentence earns its place, and there is no repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two optional, fully documented parameters and strong annotations, the definition covers selection, invocation, and output chaining. It states the output shape enough for an agent to pass podcast guids to show tools, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes both parameters fully, including the default and cost caveat for resolve_shows. The description adds no parameter-level detail beyond what the schema provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the exact resource: recently published OP3 episodes that carry a podcast:transcript tag, newest first. It also states the operational purpose of finding machine-readable podcasts and implicitly distinguishes itself from download-focused sibling tools. This leaves no ambiguity about what the tool returns or why it exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly says to use this tool when the goal is reading transcripts or finding machine-readable episodes, and contrasts it with counting downloads. It also tells the agent that the returned podcast guids can be passed to the show tools. However, it does not name a specific sibling tool as the alternative, so the guidance is clear but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_resolve_showop3_resolve_showA
Read-onlyIdempotent

Turn any podcast identifier into an OP3 show uuid. Accepts a show uuid, a podcast:guid, or an RSS feed URL, and reports which kind it recognised. Use this first when you have a feed URL and need the uuid every other tool wants. If this fails, the show most likely does not have the OP3 prefix on its feed, which means OP3 has no data for it at all.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesThe show, as any of: an OP3 show uuid (32 hex characters), a podcast:guid (the dashed UUID from the feed's <podcast:guid> tag), or the RSS feed URL itself. A plain feed URL is fine, it gets encoded for you.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation safe and idempotent, and the description adds valuable behavior beyond that: it reports which identifier kind was recognized, accepts and encodes feed URLs automatically, and interprets failure as the feed lacking an OP3 prefix (meaning OP3 has no data). This gives the agent actionable expectations about behavior and failure semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: purpose first, accepted inputs second, usage context and failure interpretation last. Every sentence earns its place, and the most important scoping information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only resolution tool with rich annotations, the description covers input varieties, the output concept (uuid plus recognized kind), and the meaning of failure. No output schema exists, but the description still gives the agent enough to call the tool and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single parameter fully with 100% coverage, including accepted formats and URL encoding, so the description does not need to add parameter detail. The description reinforces the input types but does not provide new semantic information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Turn any podcast identifier into an OP3 show uuid') and enumerates the accepted input formats. It also positions the tool as the first step before other OP3 tools, distinguishing it from siblings that consume a resolved UUID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance ('Use this first when you have a feed URL and need the uuid every other tool wants') and explains what a failure means. It does not explicitly state when not to use it, such as when you already have the OP3 uuid, so it stops short of a full exclusion rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_show_downloadsop3_show_downloadsA
Read-onlyIdempotent

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. This is the fast answer to 'how many downloads does my show get' and should be preferred over the raw query tools whenever it can answer the question. Excludes bots. Updated once a day.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesAn OP3 show uuid, a podcast:guid, or the show's RSS feed URL.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds meaningful context beyond annotations: it excludes bots and updates only once a day, which calibrate agent expectations about data freshness and composition. Doesn't overpromise a specific response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Tree compact sentences with no filler: first defines the payload, second gives usage guidance, third states caveats. Front-loaded with the most important distinguishing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one required parameter, no output schema, and annotations covering safety. The description tells the agent what values are returned, when to prefer it, how fresh data is, and what data quality caveats exist — enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the only parameter, identifier, already documents accepted formats (uuid, podcast:guid, RSS feed URL). The description adds no extra meaning beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states it returns a show's headline download metrics: 30-day total, week-by-week breakdown for four weeks, and weekly average. It also contrasts itself with 'raw query tools', helping an agent distinguish it from the many sibling aggregation and query tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit direction to prefer this tool over 'raw query tools' whenever it can answer the question, and notes it is a 'fast answer' to a common query. It doesn't name exact sibling tools or formally state when not to use it, but the category-level guidance and freshness limitation are useful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

op3_verify_prefixop3_verify_prefixA
Read-onlyIdempotent

Check whether OP3 is actually receiving downloads for a show, and say what is wrong when it is not. Run this first whenever the numbers are zero or a show cannot be found. It separates the three cases that look identical from the outside: the prefix was never added to the feed, it was added but no download has come through yet, or it is working and the answer is genuinely a small number.

ParametersJSON Schema
NameRequiredDescriptionDefault
lookbackNoHow far back to look for any request at all.-7d
identifierYesThe show, as a uuid, podcast:guid, or RSS feed URL. A feed URL is the most useful input here, because the failure being diagnosed is usually that OP3 has never seen that feed.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly, idempotent, and non-destructive hints, so the bar is lower. The description adds valuable diagnostic behavior: it separates three externally identical failure cases and can say what is wrong. This goes beyond what the annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, follows with a clear trigger for use, and then explains the key diagnostic nuance. Every sentence contributes; there is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only diagnostic tool with no output schema, the description sufficiently explains what the tool does, when to run it, what kinds of outcomes it distinguishes, and which input is most useful. An agent has enough context to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already documented. The description adds extra meaning by explicitly advising that a feed URL is the most useful input because the typical failure is that OP3 has never seen that feed. This guidance supplements the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb: 'Check whether OP3 is actually receiving downloads for a show' and clearly identifies the resource. It also distinguishes this diagnostic tool from the many lookup/download siblings by explaining it is the first tool to run when numbers are zero or a show cannot be found.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit usage context: 'Run this first whenever the numbers are zero or a show cannot be found.' This is a clear trigger condition that guides tool selection, though it does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct metric or level of the OP3 data model—headline downloads, trends, raw rows, audience cohorts, geography, app/device mix, benchmarks—and the descriptions repeatedly instruct which tool to prefer over which. Even the four download-related tools are cleanly separated by aggregation level and intent.

Naming Consistency4/5

All names share the op3_ prefix and snake_case, with many following a verb_noun or resource_metric pattern like op3_list_episodes and op3_query_downloads. A few are noun-only or phrase-like, such as op3_geography and op3_new_vs_returning, so the pattern is consistent but not perfectly uniform.

Tool Count3/5

At 22 tools this is on the heavy side and will create meaningful selection overhead for an agent. The count is not bloated—each tool maps to a genuinely different OP3 query—but it is above the range where a tool set feels lean and immediately navigable.

Completeness5/5

The surface covers the full OP3 analytics workflow: resolving and verifying show identity, show and episode metadata, headline and raw downloads, unique audience, returning listeners, retention, episode overlap, geography, app and device mix, global benchmarks, trends, listening patterns, episode curves, and transcript discovery. There are no obvious dead ends for common podcast-analytics questions.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Connects Google Analytics 4 data to Claude, Cursor and other MCP clients, enabling natural language queries of website traffic, user behavior, and analytics data with access to 200+ GA4 dimensions and metrics.
    10
    235
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides statistical analysis and usage tracking for Claude Code, enabling users to query daily/monthly stats, compare users, analyze trends, detect anomalies, and generate usage reports through natural language.
  • A
    license
    A
    quality
    A
    maintenance
    Enables querying Rybbit Analytics data directly through MCP-compatible clients like Claude Code. It provides tools for monitoring website statistics, user sessions, error logs, funnels, and performance metrics via natural language.
    40
    13
    4
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/navidmoazzez/op3-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server