Turn 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-mcpAdd 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-..."
}
}
}
}{
"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 }
}{
"transcript": "...",
"episode_id": "optional",
"api_key": "optional"
}{
"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.
{
"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).
{
"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
- Free tier: 200 calls/day per agent (no API key required)
- Paid: $0.01/call — set
MCP_API_KEYSwith 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