Connects Claude to podcast transcript analysis with five extraction tools: pull product mentions with confidence scores and recommendation strength, identify sponsor segments with read-through estimates, track product trends across episodes, compare mentions across multiple shows, and generate formatted shoppable show notes. Returns structured JSON with speaker attribution, affiliate network signals, and category labels. Runs on OpenAI embeddings with SQLite caching. Free tier gives you 200 calls per day through their hosted endpoint, or run it locally via stdio. Built for podcasters and affiliate marketers who need to turn long-form audio transcripts into monetizable product databases without manual tagging.
Public tool metadata for what this MCP can expose to an agent.
extract_podcast_productsExtract product and brand mentions from a podcast transcript. Returns structured data including product name, category, confidence score, recommendation strength, and sponsor segments. Supports caching by episode_id.4 paramsExtract product and brand mentions from a podcast transcript. Returns structured data including product name, category, confidence score, recommendation strength, and sponsor segments. Supports caching by episode_id.
api_keystringepisode_idstringtranscriptstringcategory_filterarrayanalyze_episode_sponsorsIdentify sponsor segments in a podcast episode and estimate read-through rates. Returns sponsor list, read type (host-read, mid-roll, etc.), call-to-action, and aggregate metrics. Uses cached extraction if episode_id was previously processed.3 paramsIdentify sponsor segments in a podcast episode and estimate read-through rates. Returns sponsor list, read type (host-read, mid-roll, etc.), call-to-action, and aggregate metrics. Uses cached extraction if episode_id was previously processed.
api_keystringepisode_idstringtranscriptstringtrack_product_trendsCompare product mentions across multiple podcast episodes to identify rising, stable, and falling product trends. Requires episodes to have been previously extracted (via extract_podcast_products) and cached by episode_id.3 paramsCompare product mentions across multiple podcast episodes to identify rising, stable, and falling product trends. Requires episodes to have been previously extracted (via extract_podcast_products) and cached by episode_id.
api_keystringepisode_idsarraycategory_filterarraycompare_products_across_showsCompare and rank product mentions across multiple podcast shows using cached extractions — no re-run. Collapses a 3-call manual join into 1 tool call. Performs entity resolution to identify the same product mentioned across shows. Returns ranked cross-show product list with pe...5 paramsCompare and rank product mentions across multiple podcast shows using cached extractions — no re-run. Collapses a 3-call manual join into 1 tool call. Performs entity resolution to identify the same product mentioned across shows. Returns ranked cross-show product list with pe...
api_keystringcategorystringshow_idsarraymin_confidencenumbermin_show_countintegergenerate_show_notes_sectionFormat extracted podcast products into a shoppable show notes section. Returns a ready-to-paste markdown or HTML product list, grouped by endorsement strength (strong/moderate/mention), with affiliate links where resolved. Use after extract_podcast_products — either pass episo...5 paramsFormat extracted podcast products into a shoppable show notes section. Returns a ready-to-paste markdown or HTML product list, grouped by endorsement strength (strong/moderate/mention), with affiliate links where resolved. Use after extract_podcast_products — either pass episo...
stylestringminimal · fullformatstringmarkdown · htmlapi_keystringproductsarrayepisode_idstringTurn podcast transcripts into affiliate revenue. Give any episode transcript to an AI agent — get back every product mentioned, who said it, how strongly they recommended it, and which affiliate network carries it. F1=100% on eval suite. Free tier: 200 calls/day.
⭐ If this saves you time, please star the repo — it helps other developers find it.
Live endpoint:
https://podcast-commerce-mcp.sincetoday.workers.dev/mcp· See examples
Extract product mentions, sponsor segments, and product trends from podcast transcripts. Built on x402, the open payment standard backed by Shopify, Google, Microsoft, Visa, and the Linux Foundation.
| Tool | Description |
|---|---|
extract_podcast_products | Extract products/brands from a transcript with confidence scores |
analyze_episode_sponsors | Identify sponsor segments and estimate read-through rates |
track_product_trends | Compare product mentions across multiple episodes |
compare_products_across_shows | Cross-show product ranking with entity resolution across multiple shows |
generate_show_notes_section | Format extracted products as a shoppable show notes section |
# Install
npm install podcast-commerce-mcp
# Configure
cp .env.example .env
# Edit .env: set OPENAI_API_KEY
# Run (stdio MCP server)
npx podcast-commerce-mcp
Add to your claude_desktop_config.json or use /add-mcp in Claude Code. Free tier: 200 calls/day, no API key needed:
{
"mcpServers": {
"podcast-commerce": {
"url": "https://podcast-commerce-mcp.sincetoday.workers.dev/mcp"
}
}
}
{
"mcpServers": {
"podcast-commerce": {
"command": "npx",
"args": ["podcast-commerce-mcp"],
"env": {
"OPENAI_API_KEY": "sk-..."
}
}
}
}
extract_podcast_products{
"transcript": "Raw text or URL to a .txt file",
"episode_id": "optional-cache-key",
"category_filter": ["saas", "physical_goods"],
"api_key": "optional-paid-key"
}
Returns:
{
"episode_id": "...",
"products": [
{
"name": "Notion",
"category": "saas",
"mention_context": "I use Notion every day...",
"speaker": "Host",
"confidence": 0.9,
"recommendation_strength": "strong",
"affiliate_link": null,
"mention_count": 2
}
],
"sponsor_segments": [...],
"_meta": { "processing_time_ms": 1200, "ai_cost_usd": 0.001, "cache_hit": false }
}
analyze_episode_sponsors{
"transcript": "...",
"episode_id": "optional",
"api_key": "optional"
}
track_product_trends{
"episode_ids": ["ep1", "ep2", "ep3"],
"category_filter": ["saas"]
}
Requires episodes to be previously extracted and cached. Returns trends[] with brand, trend (rising/stable/falling), avg_recommendation_strength, and top_category.
compare_products_across_shows{
"show_ids": ["show-a", "show-b"],
"min_show_count": 2,
"min_confidence": 0.85
}
Ranks products by how many shows mention them. Returns products[] with brand, show_count, avg_confidence, recommendation_consensus (unanimous/majority/mixed/rare).
generate_show_notes_section{
"episode_id": "previously-extracted-id",
"format": "markdown",
"style": "full"
}
Formats cached product data as a shoppable show notes block. Returns a formatted string ready to paste into episode notes.
Real extraction from a Huberman Lab episode transcript (live eval: F1=89%, 96/100 score, $0.00046/call, 8100ms):
{
"episode_id": "huberman-ep-312",
"products": [
{
"name": "AG1 (Athletic Greens)",
"brand": "AG1",
"category": "supplement",
"mention_context": "today's episode is brought to you by AG1. I've been taking it every morning for six months",
"confidence": 0.97,
"recommendation_strength": "strong"
},
{
"name": "Oura Ring",
"category": "physical_goods",
"mention_context": "I've been wearing it for sleep tracking for two years. They're not a sponsor, just a genuine rec",
"confidence": 0.95,
"recommendation_strength": "strong"
}
],
"sponsor_segments": [
{
"sponsor_name": "AG1",
"read_type": "host_read",
"estimated_read_through": 0.72,
"call_to_action": "code HUBERMAN for a free year's supply of Vitamin D"
}
]
}
See /examples endpoint for full output with value narrative: https://podcast-commerce-mcp.sincetoday.workers.dev/examples
MCP_API_KEYS with valid keys| Variable | Required | Default | Description |
|---|---|---|---|
OPENAI_API_KEY | Yes | — | OpenAI API key |
AGENT_ID | No | anonymous | Agent identifier for rate limiting |
MCP_API_KEYS | No | — | Comma-separated paid API keys |
CACHE_DIR | No | ./data/cache.db | SQLite cache path |
PAYMENT_ENABLED | No | false | Set true to enforce limits |
npm install
npm run typecheck # Zero type errors
npm test # All tests pass
npm run build # Compile to dist/
MIT — Since Today Studio
OPENAI_API_KEY*secretOpenAI API key for GPT-4o-mini product extraction (required)
MCP_API_KEYSsecretComma-separated paid API keys for unlimited calls (optional — omit for free tier: 200 calls/day)
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp