storyflo
Storyflo is an audio news and intelligence platform that lets LLM agents search and consume curated news, generate briefings, access declassified documents, and discover market-linked stories. 20 tools are free, with one premium paid tool.
Search & browse articles by keyword and/or vertical (tech, finance, science, media, sports, culture) — returns title, snippet, audio URL, and listen duration
Fetch full articles by slug, including body text and audio URL
Resolve audio URLs for direct playback (free tier includes stitched ads; Plus/Pro returns bare audio)
Daily digest — aggregate top articles across multiple verticals for a rolling 24h, 7d, or 30d window
Premium vertical briefing (paid via x402/USDC on Base) — stitched audio of top-25 trending articles in a single vertical from the last 24 hours
Subscribe to topic feeds — create or update personal podcast RSS feeds scoped to 1–6 verticals, compatible with Spotify, Apple Podcasts, Pocket Casts, etc.
List subscriptions — retrieve all podcast feeds created on the user's behalf
Declassified document library (public, no auth required) — search, retrieve full records, and get digests of FBI, CIA, NSA, NASA, DOJ, and AARO declassified cases
Market-linked insights — find articles matched to actively traded Kalshi event contracts (with signal tags) and Kraken crypto market link-outs for crypto-relevant stories
Discovery tools — retrieve trending topics, host personas, per-vertical landscape context, and the full podcast catalog
Partnership/embedder registration — explore partnership tiers, creative formats, and revenue-sharing payout rails
Generate RSS feeds that can be added to Apple Podcasts for subscribing to curated audio news and declassified case releases.
Provides access to narrated declassified NASA documents, including search and retrieval of case records from the Storyflo Declassified library.
Provides an OpenAI-compatible tool specification, enabling OpenAI agents to use Storyflo tools for searching articles, fetching audio, and accessing declassified documents.
Generate RSS feeds that can be added to Overcast for subscribing to curated audio news and declassified case releases.
Generate RSS feeds compatible with Pocket Casts for subscribing to curated audio news and declassified case releases.
Generate RSS feeds compatible with Spotify for subscribing to curated audio news and declassified case releases.
Storyflo MCP Server
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
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.jsOr via Docker:
docker build -t storyflo-mcp .
docker run -i --rm storyflo-mcpEnvironment variables:
Variable | Default | Purpose |
|
| Upstream MCP endpoint |
| (unset) | OAuth bearer for |
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 audioDaily 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 |
|
Discovery manifest |
|
OAuth (RFC 8414) |
|
OpenAI tool spec |
|
API docs |
|
One-click install
Cursor
cursor://anysphere.cursor-deeplink/mcp/install?name=storyflo&config=eyJ1cmwiOiAiaHR0cHM6Ly9hcGkuc3RvcnlmbG8uY29tL21jcC92MSJ9Claude Desktop / claude.ai
Settings → Connectors → Add custom connector → URL:
https://api.storyflo.com/mcp/v1Any 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 the curated article corpus by query/vertical |
| fetch the full record + body text + audio URL by slug |
| resolve the playable audio URL for an article |
| what's hot on Storyflo right now |
| the host voices (Theo / Mason / Riley / Iris / Brock / Wit) |
| one-shot per-vertical context for onboarding a listener |
| the full catalog of audio shows (per-host + Declassified) |
| top-N articles aggregated across verticals for a window |
| stories matched to Kalshi event contracts (editorial, not advice) |
| Kraken affiliate markets link-out for crypto-relevant stories |
| substring search across the Declassified case archive |
| full Declassified case record by slug |
| most-recently-published Declassified cases over a window |
| mint/update a personal podcast RSS feed scoped to verticals |
| resolve a Declassified podcast-feed URL (read-only) |
| list feeds this agent has minted for the human |
| returns a partner onboarding URL (no email/row created) |
| the embedder integration manifest |
| the embedder network manifest |
| explore partnership tiers, creative formats + payout rails |
Note:
subscribe_topic,subscribe_declassified_topic, andlist_subscriptionsare 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 |
| string | no | Full-text query against title + body + summary. Omit to browse a vertical without a keyword filter. |
| enum | no | One of: |
| 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 |
| string | yes | Article slug, as returned by |
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 |
| 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
ListenerSubscriptionrow 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_subscriptionsfirst and pass the union.Single feed per listener — call
list_subscriptionsfirst 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 |
| array<enum> | yes | 1–6 unique slugs from |
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 |
| enum | yes | One of |
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 |
| array | no | 1–6 verticals. Defaults to all 6 if omitted. |
| enum | no |
|
| 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 |
| string | no | Filter by story vertical (e.g. |
| string | no | Filter by Kalshi event category (e.g. |
| enum | no | One of |
| 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 storyfloLogo
The Storyflo brand mark for client UIs:
https://www.storyflo.com/icon-512.png
Related MCP servers
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
angheljf/nyt — NY Times article search.
AceDataCloud/MCPSerp — Google SERP (web, images, news, maps) search.
andybrandt/mcp-simple-arxiv — search + read arXiv papers.
Aas-ee/open-webSearch — free multi-engine web search.
Multimedia / audio adjacencies
AceDataCloud/MCPSuno — Suno AI music generation + vocal extraction.
bogdan01m/zapcap-mcp-server — video caption and B-roll generation.
Meta-MCP / aggregators
1mcp/agent — unified MCP server that aggregates multiple MCP servers into one.
tadas-github/a2asearch-mcp — discover 4,800+ MCP servers, agents, and CLI tools.
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 toolsdigestBuild a daily digestARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| verticals | No | ||
| window | No | 24h | |
| limit | No |
TDQS
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.
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.
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.
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.
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.
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 articleARead-onlyIdempotentInspect
Fetch the full record for an article by slug, including body_text + audio_url.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
TDQS
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.
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.
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.
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.
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.
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 URLARead-onlyIdempotentInspect
Resolve the playable audio URL for an article. Returns a stitched-with-ad URL on free tier or the bare audio for plus/pro.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
TDQS
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.
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.
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.
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.
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.
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 briefingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vertical | Yes |
TDQS
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.
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.
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.
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.
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.
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 subscriptionsARead-onlyIdempotentInspect
Return the listener feed(s) this agent has minted on the human's behalf.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 articlesARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query | |
| vertical | No | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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 feedBIdempotentInspect
Update the human's listener feed to the given verticals. Returns a podcast feed URL the listener can paste into Spotify, Apple Podcasts, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| verticals | Yes |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v1.0.0- First observed
digest - First observed
get_article - First observed
get_audio_url - First observed
get_vertical_briefing - First observed
list_subscriptions - First observed
search_articles - First observed
subscribe_topic
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
Dive into the latest and greatest from the tech world with our Hacker News MCP server.
Publish, search, and promote time-sensitive news and messages through a public remote MCP server.
Prediction-market news, $0.01/query. Register and buy inside this MCP session — free testnet funds.
Pay-per-call DeFi and macro intel for AI agents. x402 USDC tools via streamable HTTP /api/mcp.
Related MCP Servers
- AlicenseAqualityDmaintenanceOne click installation & Configuration,access to OpenAI's websearch functionality through the Model Context Protocol。193MIT
- AlicenseNot gradedqualityAmaintenanceA 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 npm501Apache 2.0
- AlicenseAqualityFmaintenanceMCP 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".355 npm21MIT
- AlicenseAqualityDmaintenanceEnables 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.5MIT