MCP is the tool-calling standard that lets any LLM interact with external services without custom integration code. Here is everything you need to build audio intelligence into your agent — authentication, tools, rate limits, webhooks, and a production checklist.
Model Context Protocol (MCP) is an open specification, released by Anthropic in November 2024, that standardizes how language models communicate with external tools, APIs, and data sources. Before MCP, every AI framework invented its own tool-calling convention: OpenAI's function calling schema (introduced June 2023), Anthropic's own tool_use content blocks, LangChain's BaseTool interface, and so on. If you wanted your tool to work with three different AI hosts, you wrote three different adapters.
MCP collapses that into a single interface. An MCP server exposes a set of tools over JSON-RPC 2.0, a lightweight remote procedure call protocol. The server declares each tool's name, description, and input schema in a standard format. Any MCP-compatible host — Claude Desktop, Continue.dev, Cursor, Zed, a LangChain agent, a custom Python script — can connect to the server, discover the available tools, and call them without knowing anything about the underlying implementation.
The transport layer is HTTP with Server-Sent Events (SSE) for streaming, or standard input/output for local processes. The ListenBrief MCP server runs as a hosted HTTP service at https://listenbrief.com/mcp/v1 — no local install required.
Audio briefing generation is an inherently multi-step, asynchronous process. Content is fetched from sources, synthesized by an LLM, converted to speech by a TTS engine, encoded, and stored. That pipeline takes 60–180 seconds end to end. A synchronous HTTP request would time out. A polling loop is awkward to implement in every client independently.
MCP handles this elegantly. The agent calls generate_briefing and receives a job ID. It calls get_briefing_status at intervals — the model itself can reason about how long to wait based on the tool's description. When the job completes, it calls get_latest_briefing to retrieve the full result including the audio URL and structured story data.
The model's reasoning ability makes this more robust than a traditional polling client. If a tool call fails with a transient error, the model can decide to retry. If it fails repeatedly, the model can surface the error to the user rather than silently giving up. The agent is the error-handling layer.
See the MCP podcast server use case for a high-level overview. For deeper technical integration options, the AI podcast API use case covers the REST layer that underpins everything.
list_profiles
Returns all briefing profiles for the authenticated user. Includes profile ID, name, source count, and schedule.
get_profile
Returns full details for a single profile by ID: sources, topics, voice preference, delivery channels.
create_profile
Creates a new briefing profile with specified sources and topics. Returns the new profile ID.
update_profile
Updates an existing profile's sources, topics, or schedule. Partial updates are supported.
generate_briefing
Triggers on-demand briefing generation for a profile. Returns a job ID for status polling.
get_briefing_status
Returns the current status of a generation job: queued, processing, complete, or failed.
get_latest_briefing
Returns the most recent complete briefing for a profile: audio URL, duration, and story array.
list_briefings
Returns a paginated list of past briefings for a profile. Useful for history or audit.
add_source
Adds an RSS feed, YouTube channel, or website URL to an existing profile.
list_sources
Returns all sources currently configured on a profile with their type and status.
Each tool's input schema is declared in the MCP manifest. The model reads the descriptions and parameter names to understand what each tool does and what arguments it needs — no separate documentation required during an agent session.
The following is a simplified Python script using the Anthropic SDK's tool use feature, calling the ListenBrief MCP server to bootstrap a new briefing profile. In a real MCP host like Claude Desktop, you wouldn't write this code — the host handles it. But this illustrates the underlying mechanics.
ListenBrief uses API key authentication for both the REST API and the MCP server. Keys are prefixed to indicate their type and environment:
lb_live_... — production key, full access, billed against your plan.lb_test_... — test key, returns mock responses, no audio generated, no billing.lb_ro_... — read-only key, can call list_* and get_* tools but not generate_briefing, create_profile, or add_source.When configuring the MCP server in Claude Desktop or another host, you provide the API key in the server configuration. The key scopes what the model can do — a read-only key prevents an agent from accidentally creating profiles or triggering generation during an exploration session.
For multi-user platforms, you generate per-user API keys via the developer API and pass the appropriate key when configuring the MCP connection for each user's agent context. Never share a single production key across multiple end users — you lose audit trail and can't isolate rate limit consumption.
Rate limits apply at the API key level. The ListenBrief MCP server enforces the same limits as the REST API, since it's the same backend:
The MCP server returns 429 Too Many Requests JSON-RPC errors when rate limits are exceeded, with a Retry-After header indicating how many seconds to wait. A well-behaved agent will read the tool's error response and either wait or surface the limitation to the user.
If you are building a product where multiple end users each get their own briefing, the pattern is:
POST /v1/api-keys with a scoped permission set to create a per-user API key. Store it in your database associated with the user record.DELETE /v1/api-keys/{key_id} to revoke the key and prevent further usage.This pattern ensures each user's briefing data is isolated, billing is trackable per user, and a compromised key affects only one user's data.
Polling is fine for agent sessions where the LLM is present and can reason about wait times. For backend systems generating briefings in batch — say, 500 users' briefings before 7 AM — polling is expensive and fragile. Webhooks are the right model.
Configure a webhook endpoint on your profile:
When a briefing finishes generating, ListenBrief POSTs to your webhook URL with the full briefing payload including the audio URL. Your server validates the X-ListenBrief-Signature header (HMAC-SHA256 of the raw body using your webhook secret), then processes the event: write the audio URL to your database, push a notification to the user, or trigger the next step in your pipeline.
Webhook delivery is retried up to 5 times with exponential backoff if your endpoint returns a non-2xx status. After 5 failures, the event is logged and marked as failed — you can retrieve missed events via GET /v1/webhook-events for up to 7 days.
Use a lb_test_... key during development. In test mode:
generate_briefing returns immediately with a synthetic job ID. No audio is generated.get_briefing_status returns complete after two calls (simulating a short generation time).get_latest_briefing returns a static mock payload with 5 fake stories and a static demo MP3 URL.To switch from test to production, replace the lb_test_... key with a lb_live_... key. No other code changes are required.
lb_live_... keys in production and lb_test_... keys in development and CI.generate_briefing polling (exponential backoff, max 10 attempts).429) handled gracefully — queue the request and retry after Retry-After seconds.get_latest_briefing on every user request.Full API reference documentation is at developer.listenbrief.com, including OpenAPI 3.1 spec, TypeScript and Python SDKs, and interactive examples for each endpoint.
The MCP server specification is implemented per the open MCP standard. The server code is not open source, but the interface is fully documented at developer.listenbrief.com/quickstart-mcp.
The ListenBrief MCP server is hosted at listenbrief.com/mcp/v1. Local hosting is not currently supported, but the REST API can be used locally for development and testing.
Tool calls return standard JSON-RPC error objects with codes and messages. The generate_briefing tool is idempotent — calling it multiple times won't create duplicate briefings for the same time window.
Get your API key with a 7-day free trial. Full MCP server access included on all plans.
Get your API key