Skip to main content
Glama

Server Details

Podcast transcripts as clean Markdown with real speaker names — via the Spoken API.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
spokenmd/spoken
GitHub Stars
5
Server Listing
Spoken

TDQS

A4.4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct action+resource: search episodes, list episodes/following/new episodes, get transcript/balance, follow/unfollow shows. No two tools can be easily mistaken, and descriptions explicitly clarify boundaries like list_following vs list_new_episodes.

Naming Consistency5/5

All tools use a consistent snake_case verb_noun pattern (follow_podcast, get_balance, list_episodes, etc.). Verb choices are predictable (get, list, search, follow/unfollow) with no deviations.

Tool Count5/5

8 tools is well-scoped for a podcast transcript and follow-management API. Each tool earns its place, with no redundancy or unnecessary granularity.

Completeness4/5

Core lifecycle is covered: search, list episodes, fetch transcript, manage follows, check credits. Minor gap: no direct podcast/show search tool; show discovery relies on episode search results, which is workable but slightly indirect.

Available Tools

8 tools
follow_podcastFollow a showA
Idempotent
Inspect

Declare a follow for a show, or clear a mute. Pass a podcast_id from search_podcasts. A declared follow stays until unfollow_podcast, regardless of fetch activity, and does not use one of the five automatic slots. For a show never fetched, what counts as new starts from its newest episode now. Does not consume credits.

NameRequiredDescriptionDefault
podcast_idYesShow id (the podcast_id field from a search_podcasts result).

Output Schema

NameRequiredDescription
stateYes
podcastYesShow name.
podcast_idYesShow id; pass it to list_episodes or follow_podcast.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only cover safety/idempotency; the description adds substantive behavior an agent cannot infer: the follow persists regardless of fetch activity, does not consume one of five automatic slots, does not spend credits, and defines what counts as 'new' for a never-fetched show. That is exactly the beyond-annotations context this dimension rewards.

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?

Four short sentences, action first, then semantics, then cost. Every sentence carries information, though the clause about new-episode counting for unfetched shows is dense and could be tightened.

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?

An output schema exists so return values need no explanation, and the description covers the remaining unknowns an agent would need: persistence semantics, slot accounting, credit cost, and the id's source. Nothing material is missing for a single-parameter mutation 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 coverage is 100%, so the baseline is 3, and the description adds provenance ('from search_podcasts') that tells the agent where a valid id originates rather than just its type. It does not add format or validation detail beyond that, so 4 rather than 5.

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?

States a specific verb and resource ('Declare a follow for a show') and adds a second, less obvious effect ('or clear a mute'), which the agent would not guess from the name. It names siblings (search_podcasts, unfollow_podcast) so it can be told apart from them. The dual behavior is slightly muddled but the core action is unmistakable.

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?

Explicitly tells the agent where the argument comes from ('Pass a podcast_id from search_podcasts') and when this tool is the right one: it contrasts with the five automatic slots and with unfollow_podcast. No explicit 'when not to use' beyond the sibling reference, so it falls just short of a 5.

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

get_balanceGet credit balanceA
Read-onlyIdempotent
Inspect

Check the current Spoken credit balance, account email, and recent usage for the configured API key. Does not consume credits.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
emailNoAccount email, when one is attached to the key.
usageYes
creditsYesCredits remaining; one is spent per first fetch of an episode.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered without the description. The description adds genuinely new behavioral context not present in annotations: 'Does not consume credits,' which is the key cost concern for a metered API. It stops short of stating auth requirements or rate limits.

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, no filler. The scope of returned data is front-loaded and the cost caveat is placed where it will be read before invocation.

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 no-parameter read tool with an output schema already defining the return shape, the description supplies everything an agent needs: what it returns, that it targets the configured API key, and that it is free. Return-value detail is correctly delegated to the output schema.

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 tool takes zero parameters, so there is nothing for the description to disambiguate — baseline 4 applies. The description correctly does not invent parameter guidance where none is needed.

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?

States a specific verb ('Check') and names the exact resources returned: credit balance, account email, and recent usage. It is unmistakably distinct from the podcast-management siblings (list_episodes, search_podcasts, follow_podcast), so an agent can route without opening any schema.

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?

Usage is implied by the purpose (check balance before making calls), and 'for the configured API key' clarifies the scope, but there is no explicit when-to-use/when-not guidance or named alternative. Adequate for a zero-parameter read tool, but no routing instructions are given.

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

get_transcriptGet transcriptA
Read-onlyIdempotent
Inspect

Fetch a podcast episode's transcript as clean Markdown with real speaker names and timestamps. Pass an episode id from search_podcasts. Costs 1 credit on the first fetch of an episode; repeat fetches are free and errors are never charged.

NameRequiredDescriptionDefault
episode_idYesEpisode id returned by search_podcasts.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuinely new behavioral context: the 1-credit cost on first fetch, free repeat fetches, and no charge on errors. That is valuable billing/retry semantics, though return structure beyond format is not detailed.

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 tight sentences with no filler. The core action and output format are front-loaded, and the cost/retry caveat follows as supporting detail.

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 no output schema, the description compensates by describing the return format (Markdown, real speaker names, timestamps), the input provenance, and the billing behavior. Nothing an agent needs to call this correctly 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?

Only one parameter and schema description coverage is 100% — the schema already documents that episode_id is the id returned by search_podcasts. The description merely repeats that provenance, adding no syntax or format detail beyond the schema, so the 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?

States a specific verb (Fetch) and resource (podcast episode's transcript) plus the output shape (clean Markdown with real speaker names and timestamps). It also names the sibling tool (search_podcasts) that produces the required input, so an agent can distinguish it from list_episodes or get_balance at a glance.

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?

Explicitly tells the agent where the episode_id comes from (search_podcasts), establishing the prerequisite workflow step. It does not state any when-not-to-use condition or alternative transcript sources, so it stops short of a 5.

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

list_episodesList a show's episodesA
Read-onlyIdempotent
Inspect

List a podcast's entire back-catalog (every episode, newest first). Pass a podcast_id from a search_podcasts result. Returns each episode's id, title, and date — fetch any with get_transcript. Use this to transcribe a whole show. Does not consume credits itself; transcribing the returned episodes costs 1 credit each (repeat fetches are free), so make sure the key has enough credits before looping.

NameRequiredDescriptionDefault
podcast_idYesShow id (the podcast_id field from a search_podcasts result).

Output Schema

NameRequiredDescription
countYesEpisodes listed; fetching all of them costs up to this many credits.
podcastYesShow name.
episodesYes
podcast_idYesShow id; pass it to list_episodes or follow_podcast.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive), but the description adds behavior none of them express: it consumes no credits itself, transcribing returned episodes costs 1 credit each, repeat fetches are free, and the agent should verify the key has enough credits before looping. This credit/cost disclosure is genuinely load-bearing context.

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?

Front-loads what the tool returns and its ordering, then appends the credit caveat. Four sentences all carry weight, though the credit-warning clause is slightly verbose relative to the rest.

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 an output schema present, return values need not be enumerated, yet the description still summarizes them (id, title, date). For a single-param read tool it supplies the upstream source, downstream consumer, and cost model — everything needed to call 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 single podcast_id parameter is already documented as 'the podcast_id field from a search_podcasts result'. The description repeats this provenance without adding format, validation, or edge-case detail 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?

States a specific verb and resource ('List a podcast's entire back-catalog') with scope and ordering ('every episode, newest first'), which cleanly distinguishes it from the sibling list_new_episodes. An agent can identify it without opening the schema.

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?

Explicitly routes the agent: pass a podcast_id from a search_podcasts result, and fetch episodes with get_transcript to 'transcribe a whole show'. It names the upstream and downstream tools but never states the inverse condition (e.g. when to prefer list_new_episodes over this back-catalog listing), so it stops short of full when/when-not guidance.

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

list_followingList followed showsA
Read-onlyIdempotent
Inspect

The shows this key is kept current on. Every charged fetch makes its show a follow: the five most-fetched shows from the last 180 days are followed automatically (source 'fetch'), and up to 25 more can be declared with follow_podcast (source 'explicit'). Muted shows are listed separately. Use list_new_episodes to see what is new on them. Does not consume credits; the demo key has nothing to follow with.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
mutedYes
limitsYes
followingYes

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, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: the description does not consume credits, the demo key has nothing to follow, the 5-auto / 25-explicit follow caps, the 180-day window, and that muted shows appear in a separate section. These are non-obvious traits not derivable from the schema or annotations.

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

Conciseness3/5

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

Most sentences carry real payload (source semantics, caps, credit cost, alternative tool), but the opening sentence is confusingly phrased and the 'every charged fetch makes its show a follow' clause takes a second read to parse. Information is not cleanly front-loaded around the core action of listing.

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?

An output schema exists, so return values need not be explained, and the description covers the important ambient facts: follow sources, muted separation, credit cost, and where to go next. The only gap is the fuzzy lead sentence, which slightly obscures what exactly is returned as the primary list.

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 tool takes zero parameters, so there is nothing for the description to disambiguate at the parameter level; the baseline for a parameterless tool is 4. The description correctly implies a bare, no-argument call.

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 identifies the resource (the shows this key is kept current on) and, more usefully, defines what a 'follow' actually means here — automatic follows from charged fetches (source 'fetch') versus declared follows via follow_podcast (source 'explicit'). The opening clause 'The shows this key is kept current on' is grammatically awkward and never states a clean verb like 'lists', but the follow semantics make the resource unambiguous and distinguishable 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 Guidelines4/5

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

It explicitly routes the agent to two siblings: follow_podcast to declare additional follows, and list_new_episodes to see what is new on the followed shows. It also notes muted shows are listed separately. It does not state an explicit when-not-to-use condition beyond the demo-key caveat, so it falls short of full 5-level routing.

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

list_new_episodesList new episodes on followed showsA
Read-onlyIdempotent
Inspect

What is new on the shows this key follows: for each show, the episodes released in the last 90 days that are newer than the newest one already fetched from it (up to 10 per show), each with a transcript_url. Episodes with no transcript are left out. Fetch any with get_transcript (1 credit each on first fetch); a fetch raises that show's floor, so the next call lists only what came after. Refreshed hourly, so a show followed moments ago may be empty until its first poll. Does not consume credits.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
as_ofYesWhen the list was read, ISO 8601.
countYesNew episodes across all followed shows.
showsYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations confirm it is a safe read, but the description adds non-obvious behavior beyond them: the 90-day window, the 10-per-show cap, the floor-raising side effect of get_transcript, hourly refresh latency, and zero credit cost. These are exactly the traits an agent needs and cannot get from annotations or schema.

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?

Front-loaded with the core answer ('What is new...') and each sentence carries distinct operational detail. It is slightly dense and could be split for readability, but no sentence is wasted.

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 output schema exists, the description wisely omits return-shape details and instead covers the entire operational contract: filtering rules, caps, costs, cursoring side effects, and freshness latency. Nothing an agent needs in order to call it correctly is missing.

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?

There are zero parameters, so the baseline is 4. The description is silent on parameters, which is correct since there are none, but it also doesn't add semantic meaning (no parameters exist to clarify).

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?

States a specific resource (new episodes on followed shows) and goes far beyond the name by specifying the exact scope: last 90 days, newer than the newest already fetched, up to 10 per show, transcript_url required. An agent can distinguish this from list_episodes and list_following immediately.

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?

Explicitly names the follow-up tool (get_transcript) and its cost, and describes the cursoring behavior that dictates when to call again. It also sets a precondition (hourly refresh) that explains when calling would be futile.

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

search_podcastsSearch podcastsA
Read-onlyIdempotent
Inspect

Search published podcast episodes by text query, or paste an episode URL (Spotify, YouTube, etc.). Returns matching episodes with their id, title, podcast, podcast_id, and date. Use the id with get_transcript, or the podcast_id with list_episodes to get the show's whole back-catalog. Does not consume credits.

NameRequiredDescriptionDefault
queryYesFree text (e.g. 'huberman sleep') or a pasted episode URL.

Output Schema

NameRequiredDescription
resultsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond annotations: the call does not consume credits, which matters for a credit-metered service. It could go further on result limits or pagination, but the credit disclosure is real added value.

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?

Four short sentences, front-loaded with the primary capability, then return fields, then chaining guidance, then the cost caveat. No filler and nothing out of order.

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 one-parameter search tool with an output schema already present, the description supplies everything else an agent needs: accepted input forms, key return fields for extraction, downstream tool chaining, and the credit cost. Nothing material 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 coverage is 100% with a single documented 'query' parameter, so the schema already carries the load. The description echoes that dual free-text/URL intent and adds platform examples (Spotify, YouTube) slightly beyond the schema's example, but adds no format or parsing rules, so baseline 3 is right.

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?

States a specific verb (search) and resource (published podcast episodes) plus the two accepted input modes (free-text query or pasted episode URL). Distinguishes itself from siblings like list_episodes and get_transcript by describing what it returns and how it differs from the back-catalog 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?

Gives clear context for the two invocation modes and explicitly routes follow-up work to get_transcript (via id) and list_episodes (via podcast_id). No explicit 'do not use this when...' exclusion, so it stops short of the top score.

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

unfollow_podcastStop following a showA
Idempotent
Inspect

Mute a show: it leaves the followed list and later fetches do not re-add it. follow_podcast reverses it. Pass a podcast_id from list_following. Does not consume credits.

NameRequiredDescriptionDefault
podcast_idYesShow id, from list_following or search_podcasts.

Output Schema

NameRequiredDescription
stateYes
podcastYesShow name.
podcast_idYesShow id; pass it to list_episodes or follow_podcast.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false, destructiveHint=false, idempotentHint=true; the description adds non-obvious semantics: the show leaves the followed list AND later fetches will not re-add it, that follow_podcast reverses the effect, and that no credits are consumed. That is real behavioral context (persistence, reversibility, cost) beyond the structured hints.

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 short sentences, front-loaded with the effect, then the reversal, then the id source and cost note. Every clause carries information an agent needs; nothing is padding.

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?

An output schema exists so return values need not be described. Effect, persistence, reversibility, id provenance, and cost are all covered, which is everything needed to invoke this one-parameter tool 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 coverage is 100% and there is a single required parameter already documented as coming from list_following or search_podcasts. The description's 'Pass a podcast_id from list_following' repeats, and slightly narrows, what the schema already states, adding no new syntax or format 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?

States a concrete verb+resource ('Mute a show: it leaves the followed list') and explicitly names the sibling that undoes it (follow_podcast), so an agent can distinguish it from follow_podcast without opening schemas. The word 'Mute' is slightly off-register versus the tool name 'unfollow', but the very next clause resolves the effect unambiguously.

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 clear routing context: the reverse operation is follow_podcast, and the id comes from list_following. It does not spell out an explicit when-not-to-use or a broader alternative comparison, but for a single-purpose toggle the guidance is sufficient.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updates
    • Changedfollow_podcast1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "podcast": {
        +      "description": "Show name.",
        +      "type": "string"
        +    },
        +    "podcast_id": {
        +      "description": "Show id; pass it to list_episodes or follow_podcast.",
        +      "type": "string"
        +    },
        +    "state": {
        +      "enum": [
        +        "following",
        +        "muted"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "podcast_id",
        +    "podcast",
        +    "state"
        +  ],
        +  "type": "object"
        +}
    • Changedget_balance2 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "credits": {
        +      "description": "Credits remaining; one is spent per first fetch of an episode.",
        +      "type": "number"
        +    },
        +    "email": {
        +      "description": "Account email, when one is attached to the key.",
        +      "type": "string"
        +    },
        +    "usage": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "recent": {
        +          "description": "The 50 most recent fetches.",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "accessedAt": {
        +                "type": "string"
        +              },
        +              "episodeId": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "episodeId",
        +              "accessedAt"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "total": {
        +          "description": "Episodes fetched with this key.",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "total",
        +        "recent"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "credits",
        +    "usage"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_episodes1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "description": "Episodes listed; fetching all of them costs up to this many credits.",
        +      "type": "number"
        +    },
        +    "episodes": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "description": "Release date, ISO 8601.",
        +            "type": "string"
        +          },
        +          "id": {
        +            "description": "Episode id; pass it to get_transcript.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "date"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "podcast": {
        +      "description": "Show name.",
        +      "type": "string"
        +    },
        +    "podcast_id": {
        +      "description": "Show id; pass it to list_episodes or follow_podcast.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "podcast_id",
        +    "podcast",
        +    "count",
        +    "episodes"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_following2 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "following": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "fetch_count": {
        +            "description": "Episodes of this show fetched.",
        +            "type": "number"
        +          },
        +          "last_fetched_at": {
        +            "type": "string"
        +          },
        +          "newest_fetched_id": {
        +            "description": "Newest episode fetched; list_new_episodes lists what came after it.",
        +            "type": "string"
        +          },
        +          "podcast": {
        +            "description": "Show name.",
        +            "type": "string"
        +          },
        +          "podcast_id": {
        +            "description": "Show id; pass it to list_episodes or follow_podcast.",
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "'fetch': followed automatically from fetches. 'explicit': declared with follow_podcast.",
        +            "enum": [
        +              "fetch",
        +              "explicit"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "podcast_id",
        +          "podcast",
        +          "source",
        +          "fetch_count"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "limits": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "explicit": {
        +          "description": "Most shows that can be declared with follow_podcast.",
        +          "type": "number"
        +        },
        +        "inferred": {
        +          "description": "Shows followed automatically from fetches.",
        +          "type": "number"
        +        },
        +        "inferred_window_days": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "explicit",
        +        "inferred",
        +        "inferred_window_days"
        +      ],
        +      "type": "object"
        +    },
        +    "muted": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "podcast": {
        +            "description": "Show name.",
        +            "type": "string"
        +          },
        +          "podcast_id": {
        +            "description": "Show id; pass it to list_episodes or follow_podcast.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "podcast_id",
        +          "podcast"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "following",
        +    "muted",
        +    "limits"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_new_episodes2 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "as_of": {
        +      "description": "When the list was read, ISO 8601.",
        +      "type": "string"
        +    },
        +    "count": {
        +      "description": "New episodes across all followed shows.",
        +      "type": "number"
        +    },
        +    "shows": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "episodes": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "date": {
        +                  "description": "Release date, ISO 8601.",
        +                  "type": "string"
        +                },
        +                "id": {
        +                  "description": "Episode id; pass it to get_transcript.",
        +                  "type": "string"
        +                },
        +                "title": {
        +                  "type": "string"
        +                },
        +                "transcript_url": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "title",
        +                "date",
        +                "transcript_url"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "podcast": {
        +            "description": "Show name.",
        +            "type": "string"
        +          },
        +          "podcast_id": {
        +            "description": "Show id; pass it to list_episodes or follow_podcast.",
        +            "type": "string"
        +          },
        +          "source": {
        +            "description": "'fetch': followed automatically from fetches. 'explicit': declared with follow_podcast.",
        +            "enum": [
        +              "fetch",
        +              "explicit"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "podcast_id",
        +          "podcast",
        +          "source",
        +          "episodes"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "as_of",
        +    "count",
        +    "shows"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_podcasts1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "date": {
        +            "description": "Release date, ISO 8601.",
        +            "type": "string"
        +          },
        +          "id": {
        +            "description": "Episode id; pass it to get_transcript.",
        +            "type": "string"
        +          },
        +          "podcast": {
        +            "description": "Show name.",
        +            "type": "string"
        +          },
        +          "podcast_id": {
        +            "description": "Show id; pass it to list_episodes or follow_podcast.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "date",
        +          "podcast_id",
        +          "podcast"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedunfollow_podcast1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "podcast": {
        +      "description": "Show name.",
        +      "type": "string"
        +    },
        +    "podcast_id": {
        +      "description": "Show id; pass it to list_episodes or follow_podcast.",
        +      "type": "string"
        +    },
        +    "state": {
        +      "enum": [
        +        "following",
        +        "muted"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "podcast_id",
        +    "podcast",
        +    "state"
        +  ],
        +  "type": "object"
        +}
  2. 8 tool updates
    • First observedfollow_podcast
    • First observedget_balance
    • First observedget_transcript
    • First observedlist_episodes
    • First observedlist_following
    • First observedlist_new_episodes
    • First observedsearch_podcasts
    • First observedunfollow_podcast

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Fetch podcast transcripts as clean Markdown with real speaker names via the Spoken API. Tools: search_podcasts, get_transcript, get_balance.
    3
    66 npm
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to transcribe links (YouTube, Google Drive, Dropbox), list and search your recordings for spoken words and moments, and read transcripts in json/txt/srt/vtt, summaries and metadata. It also lets them request new summaries and delete recordings, all through your own account with API-key or OAuth sign-in.
    8
    378 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.