storyflo
The audio-news + Declassified MCP that pays your agent to integrate.
Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only
What it can do
- Search Articles: 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 / me
- Get Article: Fetch the full record for an article by slug, including body_text + audio_url.
- Get Audio Url: Resolve the playable audio URL for an article. Returns a stitched-with-ad URL on free tier or the bare audio for plus/pro.
What data it sees
Do you need an account
No: the server works without sign-in
The audio-news + Declassified MCP that pays your agent to integrate. Give your users narrated news and a viral library of real FBI / CIA / NSA / NASA / AARO declassified cases β plus market-linked story signal. The best tools are free and no-auth, so you wire it in and ship in seconds.
Why integrate
- πΈ Earn β
register_embedderenrolls your agent in revenue share; every attributed impression pays out (fiat or USDC on Base). Almost no MCP pays you back. - β‘ Free, no-auth β Declassified + discovery + narrated audio need zero signup. Try
search_declassifiedin 30 seconds. - π§ Content your users want β narrated audio for any article, daily briefings, and an evergreen Declassified archive.
23 tools across declassified, discovery, audio news, market signal, premium briefings (metered per-call via x402/USDC), and partner/earn.
Remote endpoint: https://api.storyflo.com/mcp/v1 Β· OAuth + Dynamic Client Registration (auto).
Server tool list (23)
Raw names from tools/list. Only developers need these.
| search_articles | 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). |
| get_article | Fetch the full record for an article by slug, including body_text + audio_url. |
| get_audio_url | Resolve the playable audio URL for an article. Returns a stitched-with-ad URL on free tier or the bare audio for plus/pro. |
| subscribe_topic | Mint or update the human's personal Storyflo podcast feed. Pass 1β6 vertical slugs from `tech`, `finance`, `science`, `media`, `sports`, `culture`. 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 (the listener doesn't need to re-paste it). β’ 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 (read the current set via `list_subscriptions` first and pass the union if you want additive behavior). β’ Single feed per listener β call `list_subscriptions` first to avoid clobbering an existing feed the listener explicitly chose. When to use Use after 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`. |
| list_subscriptions | Return the listener feed(s) this agent has minted on the human's behalf. |
| get_vertical_briefing | 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. |
| get_market_linked_stories | Storyflo stories that match an actively traded event contract on Kalshi (a CFTC-regulated exchange). Each item carries qualitative signal tags (high_velocity, genuine_uncertainty) plus a link-out to Kalshi's own page where the live market data lives. Editorial sourcing surface, not market-data redistribution: Storyflo never returns raw prices, market-implied probabilities, volumes, or open interest in this payload. Use this 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. Filter by story vertical, Kalshi category (Politics, Economics, Companies, Science and Technology, Sports), or by signal tag. |
| get_crypto_market_link | Return Storyflo's markets-partner Kraken affiliate URL for a given crypto asset (BTC, ETH, etc). Editorial linkout, not a trading prompt: the URL points at Kraken's public asset page so a listener who wants exposure can reach a regulated venue without leaving the brief context. Markets-as-INPUT posture (counsel-cleared) β Storyflo never quotes prices, never recommends positions, and never frames exposure as risk-free. Behavior - Read-only. No persistent server state. - Idempotent β same (asset, embedder_slug) returns the same URL. - Fail-closed β when KRAKEN_AFFILIATE_ENABLED is off OR the partner base URL is unset, the call returns an error structure rather than a half-formed URL. - Attribution-aware β pass embedder_slug to credit the embedding publisher in the affiliate ?ref parameter; default falls back to ?ref=storyflo so the link is always trackable. When to use Surface the link in show-notes copy or in MCP-client renderings of a crypto-relevant story. DO NOT inline the URL into spoken audio narration without the host-read line that frames it as an editorial signal. |
| digest | 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. |
| search_declassified | Search Storyflo's Declassified archive β narrated cases drawn from FBI, CIA, NSA, NASA, DOJ, AARO, war.gov and other publicly-released government documents. Substring match across case title + synopsis. Use when the agent needs to find a Declassified case matching a topic (e.g. 'UAP', 'JFK', 'COINTELPRO', 'Roswell') before fetching the full case via `get_declassified_case` or handing the audio_url to a player. Public β no auth required. |
| get_declassified_case | Fetch the full record for a Declassified case by slug. Returns title, summary, transcript_excerpt, episode_date, duration_sec, agency, audio_url, source_doc_url, and up to 5 related cases. Use after `search_declassified` when the agent needs the full case body to summarize, narrate, or hand off audio playback. Public β no auth required. |
| digest_declassified | Return the most-recently-published Declassified cases over a rolling window. Use for 'what's new in Declassified this week' style prompts. window=today (~24h) | week (default) | month. Public β no auth required. |
| subscribe_declassified_topic | Resolve a podcast-feed URL the user can paste into Apple Podcasts, Overcast, Pocket Casts, or Spotify to receive every new Declassified case automatically. Also returns a JSON `episodes_url` the agent can poll, plus a `matched_so_far` count of cases that already mention the topic. Read-only β does NOT store the user's email or any PII; the RSS feed is the subscription. Public β no auth required. |
| get_trending_topics | Return storyflo's current cross-vertical trending snapshot: top stories ranked by recency + velocity, active publishers in the last 24h, the featured daily-brief compilation, and per-vertical hot lists. Use when the agent needs to surface 'what's hot on storyflo right now' to its human, or to decide which vertical landscape to dig into next. Public β no auth required. |
| get_personas | Return the storyflo 6-host persona catalog (Theo, Mason, Riley, etc.) β each entry includes slug, name, voice_id, owned verticals, tone archetype, sign-off line, and the listener-facing URLs for sample audio + RSS. Use this to pick a voice for the agent's use case before rendering audio or briefing the user on which host covers which vertical. Public β no auth required. |
| get_vertical_landscape | Return everything an agent needs to onboard a listener for a single vertical in one tool call: top stories, the named host persona (with sample-audio URL and tone), the premium-briefing URL the agent can deep-link (x402-gated), and the public RSS feed the listener can paste into any podcast player. Use after the agent has decided which vertical to set up β saves a follow-up `get_personas` + `search_articles` + `get_premium_briefing` round trip. Public β no auth required. |
| list_podcasts | Return the public catalog of Storyflo podcast shows β the Declassified archive plus 6 daily-brief shows hosted by Theo (tech), Mason (markets), Riley (news), Iris (health), Brock (sports), and Wit (comedy). Each entry includes the show title, host name, vertical, RSS feed URL (paste into Apple Podcasts / Spotify / Overcast), and a deep-link to the storyflo.com listen surface. Use to surface every audio show an agent can offer its user without re-deriving the catalog from /v1/podcasts/* URL patterns. Public β no auth required. |
| register_embedder | Resolve the storyflo embedder onboarding URL prefilled with the partner's name + email + optional vertical. Returns the URL the human must visit to complete signup (storyflo emails a magic link to verify ownership; the embedder slug + ref_token are minted on verification). DOES NOT create a DB row + DOES NOT send email β the MCP tool is a discovery + handoff surface so an agent can call it speculatively without triggering inbox-bound email to the human. Public β no auth required. |
| get_embedder_manifest | Wrap the public ``/embed/<slug>/manifest.json`` β an agent-discoverable JSON bundle of creative formats, voice options, payout config, and beacon URLs for a registered embedder. Use after `register_embedder` or when an agent is reading another partner's manifest to plan an ad buy. Public β no auth required. |
| get_embedder_network_manifest | Wrap the public ``/embed/network-manifest.json`` β the platform-level DSP/SSP onboarding bundle: supported creative formats, payout rails, attribution URLs, integration patterns. Use when an agent is evaluating whether to wire storyflo into its surface, or when a DSP partner needs the canonical integration shape. Public β no auth required. |
| quote_partnership | Return the indicative partnership tier (starter / growth / scale / enterprise) + monthly fee + storyflo revenue-share bps for a partner integrating storyflo into their agent product. Pure pricing-matrix lookup; no contract is created. The agent should hand the returned contact_url to the human to open a formal partnership thread. Public β no auth required. |
| stream_briefing_render_events | Subscribe to real-time briefing-render events. Returns the SSE endpoint URL with the chosen filters as query params β the agent's MCP client should open it with EventSource (browser), httpx.stream / aiohttp (Python), or `curl -N` (CLI). Event types: `briefing.rendered` (daily-brief lands), `declassified.published` (new Declassified episode), `persona_briefing.rendered` (persona brief synthesised / audio rendered). Frame shape: {event_type, seq, slug, vertical, persona_slug, audio_url, published_at, metadata}. The endpoint replays the last ~1000 events on connect; a heartbeat is emitted every 30s. Public-anon read. |
| get_mcp_usage_self | Return the caller's own trailing 30-day MCP tool-usage summary: total calls, success rate, p50 latency, and per-tool call/error counts. Identity is resolved from the OAuth bearer token on this request β anonymous callers receive a zeroed shape. Use this to self-budget against rate limits, audit which tools your agent actually uses, or decide whether a paid tier is worth the spend. Read-only, no side effects. |