Skip to main content
Glama

Storyflo MCP Server

storyflo-mcp MCP server storyflo-mcp MCP server score

Official Model Context Protocol server for Storyflo — curated audio news + daily briefings + the public Declassified library (FBI/CIA/NSA/NASA/DOJ/AARO releases) + market-linked story signals, all exposed as a callable surface for any LLM agent.

Claude Desktop one-click .mcpb: for a no-config Claude Desktop install, see the companion extension repo Alisammour/storyflo-mcp-extension.

This repository contains a zero-dependency stdio bridge (src/index.js) that relays MCP JSON-RPC between a local stdio client and the hosted streamable-http endpoint, plus discovery + install references. The Storyflo platform itself is proprietary; agent integration through the public API is the supported surface.

Install — one click

Add to Cursor Install in VS Code Install in VS Code Insiders

Claude Code: claude mcp add --transport http storyflo https://api.storyflo.com/mcp/v1 Any remote client: https://api.storyflo.com/mcp/v1 (streamable-http) · stdio: npx storyflo-mcp

The best tools are free + no-auth — try search_declassified (real FBI/CIA/NSA/NASA cases) in seconds, then earn revenue share by integrating via register_embedder.

Related MCP server: 1MCP Server

Run the stdio bridge

npx storyflo-mcp            # or: node src/index.js

Or via Docker:

docker build -t storyflo-mcp .
docker run -i --rm storyflo-mcp

Environment variables:

Variable

Default

Purpose

STORYFLO_MCP_URL

https://api.storyflo.com/mcp/v1

Upstream MCP endpoint

STORYFLO_TOKEN

(unset)

OAuth bearer for tools/call; discovery (initialize, ping, tools/list, resources/list) works anonymously

Claude Desktop / any stdio-only MCP client config:

{
  "mcpServers": {
    "storyflo": {
      "command": "npx",
      "args": ["-y", "storyflo-mcp"],
      "env": { "STORYFLO_TOKEN": "<optional bearer>" }
    }
  }
}

What you can do

  • Audio news — search Storyflo's curated corpus by vertical (tech, finance, science, media, sports, culture, + more), fetch full articles, and resolve playable audio

  • Daily briefings — aggregate top-N cross-vertical roll-ups (digest) or a stitched single-vertical audio briefing (get_vertical_briefing, premium)

  • Declassified library — narrated FBI/CIA/NSA/NASA/DOJ/AARO releases, public + no auth

  • Market-linked signals — Storyflo stories matched to Kalshi event contracts + a Kraken crypto markets link-out (editorial, not investment advice)

  • Discovery — trending topics, host personas, per-vertical landscape, full podcast catalog

  • Subscriptions — mint personal podcast feeds for articles or Declassified, on the listener's behalf

  • Partner integration — register as an embedder + explore partnership tiers/payout rails for revenue share

Endpoints

Surface

URL

MCP transport

https://api.storyflo.com/mcp/v1

Discovery manifest

https://api.storyflo.com/.well-known/mcp.json

OAuth (RFC 8414)

https://api.storyflo.com/.well-known/oauth-authorization-server

OpenAI tool spec

https://api.storyflo.com/v1/agents/openai-tools.json

API docs

https://www.storyflo.com/developers

One-click install

Cursor

cursor://anysphere.cursor-deeplink/mcp/install?name=storyflo&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkuc3RvcnlmbG8uY29tL21jcC92MSJ9

Add Storyflo to Cursor

Claude Desktop / claude.ai

Settings → Connectors → Add custom connector → URL:

https://api.storyflo.com/mcp/v1

Any MCP-compatible client (Continue, Cline, Zed, Windsurf, ChatGPT Custom Connectors)

{
  "mcpServers": {
    "storyflo": {
      "url": "https://api.storyflo.com/mcp/v1",
      "transport": "streamable-http"
    }
  }
}

Tools

Storyflo exposes 21 tools (20 free + 1 premium) across three auth tiers:

Public (no auth, no OAuth flow needed) — designed so any LLM agent can browse + recommend from a fresh client install without an OAuth handshake:

tool

what it does

search_articles

search the curated article corpus by query/vertical

get_article

fetch the full record + body text + audio URL by slug

get_audio_url

resolve the playable audio URL for an article

get_trending_topics

what's hot on Storyflo right now

get_personas

the host voices (Theo / Mason / Riley / Iris / Brock / Wit)

get_vertical_landscape

one-shot per-vertical context for onboarding a listener

list_podcasts

the full catalog of audio shows (per-host + Declassified)

digest

top-N articles aggregated across verticals for a window

get_market_linked_stories

stories matched to Kalshi event contracts (editorial, not advice)

get_crypto_market_link

Kraken affiliate markets link-out for crypto-relevant stories

search_declassified

substring search across the Declassified case archive

get_declassified_case

full Declassified case record by slug

digest_declassified

most-recently-published Declassified cases over a window

subscribe_topic

mint/update a personal podcast RSS feed scoped to verticals

subscribe_declassified_topic

resolve a Declassified podcast-feed URL (read-only)

list_subscriptions

list feeds this agent has minted for the human

register_embedder

returns a partner onboarding URL (no email/row created)

get_embedder_manifest

the embedder integration manifest

get_embedder_network_manifest

the embedder network manifest

quote_partnership

explore partnership tiers, creative formats + payout rails

Note: subscribe_topic, subscribe_declassified_topic, and list_subscriptions are listed as public for discovery; calls that mint/list a listener's feed resolve identity via OAuth bearer when present.

Premium (x402 over USDC on Base mainnet)get_vertical_briefing: a stitched audio briefing of the top-25 trending articles in a vertical from the last 24h.

The live tool manifest (with full JSON Schema for every parameter) is at /v1/agents/openai-tools.json — the source of truth Glama, OpenAI, and Anthropic introspect.

Declassified library · public · no auth (NEW, 2026-06-20)

The Declassified library is Storyflo's narrated archive of publicly-released government documents from FBI, CIA, NSA, NASA, DOJ, AARO, war.gov, and other agencies. Every case has a narrated audio version, a transcript excerpt, and a source-document link. The 4 tools below traverse the same archive that backs the /declassified FE shelf and the public Declassified RSS feed.

search_declassified · public

Substring search across case title + synopsis. Returns {slug, title, dek, episode_date, duration_sec, agency, category, era, audio_url} per match.

Parameters: query (string, required), limit (int, 1-50, default 10).

get_declassified_case · public

Full case record by slug. Returns {slug, title, dek, summary, transcript_excerpt, episode_date, duration_sec, agency, category, era, cover_url, audio_url, source_doc_url, related_cases:[{slug, title}]}.

Parameters: slug (string, required).

digest_declassified · public

Most-recently-published cases over a rolling window. Returns the same card shape as search_declassified.

Parameters: window (today | week (default) | month), limit (int, 1-50, default 10).

subscribe_declassified_topic · public

Resolves a podcast-feed URL the user can paste into Apple Podcasts, Overcast, Pocket Casts, or Spotify to receive every new Declassified case automatically. Returns {topic, rss_feed_url, archive_url, episodes_url, matched_so_far, note}. Read-only by design: no DB row is written, no email is stored, the RSS feed IS the subscription.

Parameters: topic (string, required), email (string, optional — informational only, never stored).

search_articles · free

Search Storyflo's curated article corpus by query and/or vertical. Use this when the agent needs to find articles matching a topic before deciding which one to read or play.

Parameters

name

type

required

description

query

string

no

Full-text query against title + body + summary. Omit to browse a vertical without a keyword filter.

vertical

enum

no

One of: tech, finance, science, media, sports, culture. Narrows results to a single vertical.

limit

int

no

Max results (default 10, capped 25).

Returns — array of { slug, title, publisher, vertical, snippet, audio_url, listen_seconds, published_at }.


get_article · free

Fetch the full record for a single article by slug. Use after search_articles when the agent needs the full body text or full audio URL.

Parameters

name

type

required

description

slug

string

yes

Article slug, as returned by search_articles.

Returns{ slug, title, body_text, audio_url, publisher, vertical, sources[], published_at }.


get_audio_url · free

Resolve the playable audio URL for an article without fetching the body. Use when the agent wants to hand off audio playback to the user. Free tier returns a stitched-with-ad URL; Plus/Pro returns the bare audio.

Parameters

name

type

required

description

slug

string

yes

Article slug.

Returns{ slug, audio_url, listen_seconds, tier }.


subscribe_topic · free

Mint or update the human's personal Storyflo podcast feed. Pass 1–6 vertical slugs and the server creates a private RSS feed scoped to those verticals — or updates the existing feed in place if the listener already has one. Returns the RSS URL the listener can paste into Spotify, Apple Podcasts, Pocket Casts, or any podcast client.

Behavior

  • Persistent server-side side-effect — a ListenerSubscription row is created or updated. The returned RSS URL stays stable across calls for the same listener (no re-pasting needed).

  • Idempotent on identical input — calling twice with the same verticals leaves state unchanged.

  • REPLACES on different input — calling with a different verticals set OVERWRITES the previous selection rather than adding to it. Use this to switch a listener's feed; do NOT call to add verticals incrementally. For additive behavior, read the current set via list_subscriptions first and pass the union.

  • Single feed per listener — call list_subscriptions first to avoid clobbering an existing feed the listener explicitly chose.

Use when the agent has been asked to set up audio news for the human across a defined set of topics. Do NOT use to FETCH articles or audio — that's search_articles + get_audio_url.

Parameters

name

type

required

description

verticals

array&lt;enum&gt;

yes

1–6 unique slugs from tech, finance, science, media, sports, culture. Replaces (does not append to) the listener's current selection.

Returns{ feed_url, verticals, listener_token }.


list_subscriptions · free

Return the listener feeds this agent has minted on the human's behalf. Use before subscribe_topic to avoid creating duplicate feeds.

Parameters — none.

Returns — array of { feed_url, verticals, created_at }.


get_vertical_briefing · paid (x402)

Fetch a stitched audio briefing of the top-25 trending articles in a single vertical from the last 24h. Use when the agent wants a "today's headlines for X" experience for the user. Read-only — no listener state mutated.

Parameters

name

type

required

description

vertical

enum

yes

One of tech, finance, science, media, sports, culture, news.

Returns{ vertical, audio_url, item_count, listen_seconds, articles[] }.

Cost — single x402 charge; covers the full stitched briefing audio.


digest · free (heaviest)

Aggregate the top-N articles across one or more verticals for a window (24h / 7d / 30d). The heaviest action — counts most against per-agent rate limit. Use for "read me today's tech + finance news" prompts where the agent wants a curated cross-vertical roll-up rather than a single vertical's briefing.

Parameters

name

type

required

description

verticals

array

no

1–6 verticals. Defaults to all 6 if omitted.

window

enum

no

24h (default), 7d, or 30d.

limit

int

no

Max articles per vertical (default 5, capped 25).

Returns{ window, verticals, items: [{ slug, title, vertical, audio_url, snippet }] }.


get_market_linked_stories · free

Storyflo stories that match an actively traded event contract on Kalshi — a CFTC-regulated designated contract market. Each item carries qualitative signal tags plus a link-out to Kalshi's own page where the live market data lives.

This is an editorial sourcing surface, not market-data redistribution. Storyflo never returns raw prices, market-implied probabilities, volumes, or open interest in this payload. The agent or user follows the linkout to see live numbers on Kalshi.

Use when the agent needs to know which Storyflo stories are about news themes that have an actively traded event contract — e.g. World Cup matches, political mention contracts, corporate events. Same shape as a newsroom citing CME futures: market activity informs which stories are worth surfacing.

Parameters

name

type

required

description

vertical

string

no

Filter by story vertical (e.g. news, finance, tech, crypto).

category

string

no

Filter by Kalshi event category (e.g. Politics, Economics, Companies, Science and Technology, Sports).

signal

enum

no

One of active, high_velocity, genuine_uncertainty. high_velocity = the matched market is repricing meaningfully in the last 24h; genuine_uncertainty = the market sits in the 40–60% band where it itself is uncertain.

limit

int

no

Max items (default 10, capped 50).

Returns — array of:

{
  "story": { "slug", "title", "vertical", "published_at" },
  "matched_market": { "title", "category", "url" },
  "signal_tags": ["active", "high_velocity"?, "genuine_uncertainty"?],
  "match": { "score", "shared_terms" }
}

plus top-level attribution and disclaimer strings on every payload.

The matched_market.url links to Kalshi's own events page so the user / agent sees live market data on the source. Storyflo does not redistribute that data.

Compliance posture (counsel-reviewed; regression-tested in CI):

  • Vocabulary locked: never bets, odds, picks, or wagers — anywhere on the surface

  • Attribution on every payload: "Market data: Kalshi, a CFTC-regulated designated contract market"

  • Disclaimer on every payload: market-implied probabilities are exchange prices, not Storyflo forecasts and not investment advice; story-to-market links indicate topical correlation, not causation; informational use only

  • Liquidity floor (vol24h ≥ 100 OR OI ≥ 1000) excludes thin markets that could be manipulated into the feed

  • Near-resolved markets (implied probability outside 3–97%) excluded — keeps forward-looking signal only

  • Input-not-output frame: raw prices, probabilities, volumes, and open interest are computed internally for ranking but never exposed in the public payload. The linkout is the user's path to live data on Kalshi's own surface.

Authentication

OAuth 2.1 + PKCE. Public clients (Claude/ChatGPT/Cursor's MCP connectors) auto-register via Dynamic Client Registration (RFC 7591) at /oauth/register. No manual API key needed.

x402 micropayments

The premium tool (get_vertical_briefing) is metered via x402 over USDC on Base mainnet. Agents pay per call, no upfront contract. All 20 other tools require no payment — the Declassified, discovery, and partner tools need no auth at all, and the listener/article tools require only OAuth.

70/20/10 revenue split: 70% to the publisher, 20% to the recommending agent, 10% to Storyflo. On-chain and deterministic.

SDK

Native client libraries for TypeScript and Python:

npm install storyflo-sdk      # https://www.npmjs.com/package/storyflo-sdk
pip install storyflo          # https://pypi.org/project/storyflo/

Install via Smithery

npx -y @smithery/cli install storyflo

The Storyflo brand mark for client UIs: https://www.storyflo.com/icon-512.png

If you ship an agent that uses storyflo, you might also want the following — same x402-over-Base monetization rail, similar agent-facing posture, or natural complements in the news / finance / audio category space.

Same payment rail (x402 over USDC on Base)

  • forgemeshlabs/coinopai-mcp — paid crypto intelligence (trade decisions, audit against real prices, signal history) over USDC micropayments on Base.

  • 8randonpickart5/alderpost-mcp — eight bundled intelligence endpoints (security, company, threat, compliance, sales, sports, property, health) via x402 on Base.

Financial / market-data sourcing

  • Yahoo Finance MCP server — real-time equity quotes for agents that need security-level data alongside storyflo's market-aware news signal.

News + article sourcing

Multimedia / audio adjacencies

Meta-MCP / aggregators

If you maintain an MCP server that pairs naturally with storyflo and isn't listed, please open a PR or comment on an issue. We curate this list quarterly.

Support

  • Developer questions: api@storyflo.com

  • Bug reports: open an issue on this repo

  • Discord: TBD

License

MIT for this repository's content (README + manifest references). The Storyflo platform itself is proprietary; agent integration through the public API is the supported integration surface.

Available Tools

7 tools
digestBuild a daily digestA
Read-only
Inspect

Aggregate the top-N articles across selected verticals for the requested window. Heaviest action — counts more against the per-agent rate limit. Use this for 'read me today's tech news' style prompts.

ParametersJSON Schema
NameRequiredDescriptionDefault
verticalsNo
windowNo24h
limitNo

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint, destructiveHint), the description adds the key behavioral note that this is the 'heaviest action' and counts more against the per-agent rate limit. This is useful context not present in the annotations, aiding in cost/rate management.

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: the first defines the action and scope, the second adds a use-case example and rate-limit warning. Every sentence is purposeful, with no redundancy or filler. Front-loaded with the core purpose.

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 tool's purpose, usage context, and a critical rate-limit caveat, making it reasonably complete for a simple read-only tool with no output schema. It does not mention that verticals is optional or the default window, but those are captured in the schema, and the description adds enough to avoid major confusion.

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 0%, so the description compensates by explaining 'top-N' (limit), 'selected verticals' (verticals), and 'requested window' (window). This gives functional meaning to all three parameters, though it does not enumerate allowed enum values (those are in the schema).

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 tool aggregates top-N articles across verticals for a time window, with a specific verb ('Aggregate') and resource ('articles'). However, it does not explicitly differentiate from sibling tools like digest_declassified or get_vertical_briefing, so it lacks explicit sibling differentiation.

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 a clear usage context with the example prompt 'read me today's tech news' and warns that it is a heavy action for rate limits. It does not mention specific alternatives or when not to use it, but the context is sufficient for typical use cases.

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

get_articleGet articleA
Read-onlyIdempotent
Inspect

Fetch the full record for an article by slug, including body_text + audio_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety traits. The description adds that the record includes body_text and audio_url, which is useful return-content context beyond the annotations, but does not disclose any additional behavioral traits like error handling or rate limits. This aligns with the 'annotations present' baseline.

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 a single, well-structured sentence that is immediately clear and front-loaded. Every word adds value, with no filler or redundant phrasing.

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 tool's simplicity (1 parameter) and the presence of annotations covering safety, the description is largely complete. It mentions the key return fields (body_text + audio_url) despite no output schema. It does not describe error behavior or edge cases, but for a straightforward fetch tool, this is sufficient.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only mentions 'by slug', which essentially repeats the parameter name without adding meaning (e.g., format, example, or what a slug is). With no other context, the description fails to enrich the parameter beyond its name.

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 the specific verb 'Fetch' and identifies the resource ('article') and the key identifier ('by slug'). It also lists key fields returned ('body_text + audio_url'), which clearly distinguishes it from sibling tools like search_articles (which searches) and get_audio_url (which returns only a URL).

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 clearly implies use when you have a slug and need the full article record. No explicit exclusions or alternatives are named, but the context is unambiguous. A score of 4 is appropriate because it provides clear context without explicit when-not guidance.

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

get_audio_urlGet audio URLA
Read-onlyIdempotent
Inspect

Resolve the playable audio URL for an article. Returns a stitched-with-ad URL on free tier or the bare audio for plus/pro.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

TDQS

A4.3/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. The description adds tier-dependent output behavior (stitched-with-ad vs bare audio), which is valuable and not derivable from annotations or schema. This exceeds the baseline expectation.

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, both informative and free of redundancy. The main action is front-loaded, and the second sentence adds a meaningful nuance about tiers. No wasted words.

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 one-parameter resolver with robust annotations, the description covers the core purpose, the input implied by 'article', and the output type (URL). No output schema exists, so the return description suffices. Edge cases are not necessary at this complexity level.

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 has only 'slug' with no description, and schema coverage is 0%. The description clarifies that the slug refers to an article, but does not explain the slug format or how to obtain it. It offers partial compensation for a simple parameter but not complete semantics.

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's function with a specific verb 'Resolve' and a specific resource 'playable audio URL for an article'. It distinguishes itself from siblings like get_article by focusing on audio URL resolution. The tier-dependent return detail further anchors its purpose.

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 implies when to use it: 'for an article' indicates it pairs with an article identifier (slug). It doesn't explicitly name alternatives or exclusion criteria, but the context is clear. Lacks explicit 'use this instead of...' guidance, so not a 5.

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

get_vertical_briefingGet per-vertical premium briefingA
Read-onlyIdempotent
Inspect

Fetch a stitched audio briefing of the top-25 trending articles in a single vertical from the last 24h. Premium — settles in USDC on Base via x402. Vertical must be one of the canonical 7 buckets: tech, finance, news, science, health, young_moms, yoga. First call without an X-Payment header returns the x402 challenge; sign + retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
verticalYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already signal readOnly, openWorld, idempotent, and non-destructive. The description goes further by disclosing the payment requirement, the x402 challenge on first call, the need to sign and retry, and the audio output format — behavioral details not present in 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?

Four dense sentences with no filler. The first sentence states the core function, followed by payment, validation, and authentication flow — each sentence serves a distinct purpose.

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 tool with no output schema, the description explains what is returned (audio briefing), the query window (last 24h), the vertical constraint, the auth challenge, and the payment method. This is complete given the tool's complexity and rich annotations.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully compensates by listing all 7 allowed vertical values (tech, finance, news, science, health, young_moms, yoga) and adding the canonical-bucket constraint. This directly aids parameter selection beyond the raw enum 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 the tool fetches a 'stitched audio briefing' of the top-25 trending articles for a single vertical over the last 24 hours. This specific verb+resource+scope distinguishes it from siblings like get_vertical_landscape and digest.

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 provides clear usage context: it is premium (USDC on Base via x402), the vertical must be one of 7 canonical buckets, and the first call without X-Payment triggers a challenge-retry flow. However, it does not explicitly name alternatives or state when not to use this tool 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.

list_subscriptionsList active subscriptionsA
Read-onlyIdempotent
Inspect

Return the listener feed(s) this agent has minted on the human's behalf.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context beyond this by specifying that the returned feeds are those the agent minted on the human's behalf, clarifying the exact scope of the data. This is useful behavioral information not present in 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?

The description is a single sentence that is front-loaded with the verb 'Return' and directly states the resource. There is zero waste or repetition of the title or annotations. It is as concise as possible while still providing meaningful context.

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?

This is a simple, read-only list operation with no parameters, no output schema, and strong safety annotations. The description fully explains what the tool returns and the specific scope, making it complete for the tool's complexity. There are no gaps in information needed for an agent 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?

The input schema has zero parameters, so there are no parameter descriptions to add. As per the baseline for 0-parameter tools, this scores a 4. The description does not need to discuss parameters because there are none.

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 tool's function: it returns listener feed(s) that the agent has minted on the human's behalf. The verb 'Return' is synonymous with 'list' and the resource is specific, distinguishing it from sibling tools like list_podcasts. However, the phrase 'listener feed(s)' is somewhat jargon-heavy, slightly reducing clarity.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or compare with sibling tools such as get_my_private_feed or subscribe_topic. The usage is only implied by the tool name and title, not explained.

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

search_articlesSearch Storyflo articlesA
Read-onlyIdempotent
Inspect

Search Storyflo's article corpus. Returns slug, title, publisher, vertical, snippet, audio_url, and listen_seconds for each match. Use vertical to scope (tech / finance / science / media / sports / culture).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch query
verticalNo
limitNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds behavioral value by listing the exact return fields (slug, title, publisher, vertical, snippet, audio_url, listen_seconds) and explaining the vertical scoping behavior, which goes beyond the annotations. However, it does not mention edge cases like empty queries or pagination behavior.

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 two sentences, front-loaded with the primary purpose, and every sentence adds value. It efficiently covers the resource, return fields, and vertical scoping without unnecessary fluff.

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 search tool with 3 optional parameters and no output schema, the description is reasonably complete. It specifies the return fields, and the schema provides constraints for limit and query. It does not explain sorting or empty-query behavior, but given the annotations and schema, the context is sufficiently covered for an agent to invoke the 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 description coverage is only 33%, with only 'query' having a schema description. The description compensates for 'vertical' by listing allowed values, but 'limit' is not mentioned in either the schema description or the tool description. The parameter semantics are partially clarified, but not fully compensated for the low schema coverage.

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 tool's function with a specific verb ('Search') and resource ('Storyflo's article corpus'), and lists the return fields, making the purpose unambiguous. It does not explicitly name sibling tools like search_declassified, but the scope is clear enough to differentiate from other search tools.

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 provides usage guidance for the vertical parameter ('Use vertical to scope') but does not mention when to use this tool versus alternatives such as search_declassified or get_article. The usage context is implied rather than explicitly stated, and there are no exclusion criteria or alternative tool references.

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

subscribe_topicSubscribe to topic feedB
Idempotent
Inspect

Update the human's listener feed to the given verticals. Returns a podcast feed URL the listener can paste into Spotify, Apple Podcasts, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
verticalsYes

TDQS

B3.1/5.0
Behavior3/5

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

The description discloses that the tool is a mutation ('Update') which aligns with readOnlyHint=false. The idempotentHint=true is consistent with 'returns a podcast feed URL'. No additional behavioral traits beyond annotations are provided, such as authentication needs or side effects on existing subscriptions. The description adds the return value context, meriting a 3.

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 two short sentences that each contribute value: the first states the action and target, the second explains the output and usage. No filler or redundant information.

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?

Given the simple tool (one parameter, no output schema), the description covers the basic purpose and return value. However, it lacks details on whether subscriptions are replaced or appended, and does not reference related tools like list_subscriptions for managing subscriptions. Completeness is adequate but not thorough.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must clarify parameter meaning. It mentions 'to the given verticals' but does not explain how the array is processed (e.g., replaces or appends), nor does it describe the enumerated values beyond their names. This leaves ambiguity about the parameter's semantics.

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 (update the listener feed) and the resource (human's listener feed), and specifies the return type (podcast feed URL). It distinguishes itself from sibling tools like get_article or search_articles by focusing on subscription. However, it could more explicitly differentiate from similar tools like list_subscriptions.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus alternatives, nor does it mention prerequisites or scenarios where it should not be used. It only states what it does, leaving the agent to infer usage context.

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 updatesv1.0.0
    • First observeddigest
    • First observedget_article
    • First observedget_audio_url
    • First observedget_vertical_briefing
    • First observedlist_subscriptions
    • First observedsearch_articles
    • First observedsubscribe_topic

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: digest aggregates, get_article fetches full record, get_audio_url resolves audio, get_vertical_briefing fetches audio briefing, list_subscriptions returns feeds, search_articles searches, subscribe_topic updates feeds. No overlapping functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., 'digest', 'get_article', 'search_articles', 'subscribe_topic'), making them predictable and easy to distinguish.

Tool Count5/5

With 7 tools, the server is well-scoped for its purpose of news article retrieval, audio briefings, and subscription management. Each tool serves a necessary function without redundancy.

Completeness4/5

Core workflows are covered: searching, fetching articles and audio, subscribing to verticals, and getting briefings. Minor gaps exist: no unsubscribe tool and the digest tool lacks explicit vertical selection, but agents can work around these limitations.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    A unified Model Context Protocol server that aggregates multiple MCP servers into one, allowing AI assistants like Claude Desktop, Cursor, and Cherry Studio to connect to a single server instead of managing multiple instances.
    981 npm
    501
    Apache 2.0
  • A
    license
    A
    quality
    F
    maintenance
    MCP server to search 4,800+ MCP servers, AI agents, CLI tools and agent skills from the A2ASearch directory. Ask Claude: "Find MCP servers for database access".
    3
    55 npm
    21
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLMs to search, fetch, and manage arXiv research papers across various categories. It allows users to browse recent publications, query specific metadata, and retrieve full abstracts through a local database.
    5
    MIT