Skip to main content
Glama
teamsincetoday

Recipe Commerce Intelligence MCP

Recipe Commerce Intelligence MCP

npm License: MIT Stars

Turn recipes into affiliate revenue. Extract every branded ingredient and kitchen tool from any recipe, match each to Amazon Associates, ShareASale, or Awin, and generate a shoppable ingredient list in seconds. 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://recipe-commerce-mcp.sincetoday.workers.dev/mcp · See examples

Extract recipes and ingredients from cooking video transcripts, match to purchasable products, and build affiliate shopping lists. Built on x402, the open payment standard backed by Shopify, Google, Microsoft, Visa, and the Linux Foundation.

Tools

Tool

Description

extract_recipe_ingredients

Extract structured recipe data from a cooking video transcript or YouTube URL

match_ingredients_to_products

Match ingredients to purchasable products with affiliate program details

suggest_affiliate_products

Generate a ranked affiliate shopping list scored by revenue potential

Related MCP server: MCP Affiliate Server

Connect in Claude Code — No Install Required

Add to your claude_desktop_config.json or use /add-mcp in Claude Code. Free tier: 200 calls/day, no API key needed:

{
  "mcpServers": {
    "recipe-commerce": {
      "url": "https://recipe-commerce-mcp.sincetoday.workers.dev/mcp"
    }
  }
}

Quick Start

# Install
npm install recipe-commerce-mcp

# Configure
cp .env.example .env
# Edit .env: set OPENAI_API_KEY

# Run (stdio MCP server)
npx recipe-commerce-mcp

MCP Client Config

{
  "mcpServers": {
    "recipe-commerce": {
      "command": "npx",
      "args": ["recipe-commerce-mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-..."
      }
    }
  }
}

Tool Reference

extract_recipe_ingredients

{
  "transcript": "Cooking video transcript or YouTube URL",
  "recipe_id": "optional-cache-key",
  "api_key": "optional-paid-key"
}

Returns:

{
  "result": {
    "recipeName": "Beef Bourguignon",
    "ingredients": [
      { "name": "beef chuck", "quantity": "2", "unit": "lbs", "category": "meat", "is_optional": false }
    ],
    "equipment": [
      { "name": "Le Creuset Dutch oven 5.5qt", "category": "cookware", "requiredForRecipe": true }
    ],
    "techniques": ["braising", "searing"],
    "cuisineType": "French",
    "difficulty": "medium"
  },
  "_meta": { "processing_time_ms": 1950, "ai_cost_usd": 0.0024, "cache_hit": false, "recipe_id": "..." }
}

match_ingredients_to_products

{
  "ingredients": [{ "name": "beef chuck", "quantity": "2", "unit": "lbs" }],
  "recipe_id": "optional-uses-cached-ingredients",
  "api_key": "optional"
}

Returns affiliate program details (Amazon Associates, ShareASale, Awin), price range, commission rate (2–10%), brand? (extracted brand name for branded ingredients, e.g. "Maldon" for "Maldon salt"), estimatedCommission (USD estimate based on price × commission rate), and substitution alternatives.

suggest_affiliate_products

{
  "recipe_name": "Beef Bourguignon",
  "ingredients": [...],
  "api_key": "optional"
}

Returns ingredients and equipment ranked by affiliate revenue score. Equipment scores highest (10% commission via Amazon Associates).

Example Output

Real extraction from a Serious Eats beef bourguignon recipe (live eval avg: F1=93%, 98/100 score, $0.000370/call, 2608ms):

{
  "recipe_id": "serious-eats-beef-bourguignon",
  "ingredients": [
    {
      "name": "Dutch oven (5.5 qt)",
      "brand": "Le Creuset",
      "category": "equipment",
      "is_optional": false,
      "affiliate_revenue_score": 0.92,
      "estimatedCommission": 8.50,
      "amazon_search_terms": ["dutch oven 5.5 quart", "Le Creuset 5.5 qt"]
    },
    {
      "name": "Maldon sea salt",
      "brand": "Maldon",
      "category": "ingredient",
      "is_optional": false,
      "affiliate_revenue_score": 0.18,
      "estimatedCommission": 0.42
    },
    {
      "name": "beef chuck",
      "brand": null,
      "category": "ingredient",
      "is_optional": false,
      "affiliate_revenue_score": 0.12,
      "estimatedCommission": null,
      "amazon_search_terms": null
    }
  ]
}

See /examples endpoint for full output with value narrative: https://recipe-commerce-mcp.sincetoday.workers.dev/examples

Pricing

  • Free tier: 200 calls/day per agent (no API key required)

  • Paid: $0.01/call — set MCP_API_KEYS with valid keys

Environment Variables

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

Development

npm install
npm run typecheck   # Zero type errors
npm test            # All tests pass
npm run build       # Compile to dist/

License

MIT — Since Today Studio

Available Tools

3 tools
extract_recipe_ingredientsA

Extract structured recipe data from transcript text or YouTube URL: recipe name, ingredients with quantity and unit, equipment list, and cooking technique tags. YouTube URL transcription requires yt-dlp installed on the server — if not available the call fails; pass raw transcript text for reliable extraction in all environments. Returns ingredient list ready for match_ingredients_to_products and suggest_affiliate_products. Call this first — both downstream tools reuse its cache. Use for recipe monetization, shoppable recipe creation, and cooking content commerce. Example: recipe_id='chocolate-chip-cookies-v1', transcript='2 cups flour...' → returns {ingredients:[{name:'flour',quantity:'2',unit:'cups',category:'pantry'},...]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
transcriptYesRaw transcript text OR a YouTube URL (e.g. https://youtube.com/watch?v=...)
recipe_idNoOptional recipe identifier for caching. Auto-derived from content if omitted.
api_keyNoOptional API key for paid access beyond the free tier

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It explains the success/failure condition for YouTube URLs (requires yt-dlp), caching behavior via recipe_id, and the nature of the return value. It does not elaborate on edge cases like malformed transcripts or error handling, but covers the main dependencies and output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at 7 sentences. It front-loads the core purpose, then covers critical caveats, return value, ordering, use cases, and an example. Every sentence adds necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 3 parameters with full schema descriptions, no output schema, and moderate complexity. The description compensates by listing returned fields (ingredients with name, quantity, unit, category; plus recipe name, equipment, technique tags). It also explains caching and downstream dependencies, making the tool's role and output clear for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value beyond schema descriptions by explaining that transcript can be either raw text or a YouTube URL, that recipe_id is for caching and auto-derived if omitted, and by providing an example that illustrates parameter usage and return structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool extracts structured recipe data (recipe name, ingredients, equipment, technique tags) from transcript text or YouTube URL. It distinguishes from sibling tools (match_ingredients_to_products and suggest_affiliate_products) by positioning itself as the first step that populates cache for downstream use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this first' and explains the dependency between this tool and its siblings. It provides clear guidance on when to use raw transcript text versus YouTube URL, including the caveat about yt-dlp installation. Use cases (recipe monetization, shoppable recipe creation) are listed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

match_ingredients_to_productsA

Match recipe ingredients to purchasable products on Amazon and specialty retailers. Returns affiliate program details (Amazon Associates, ShareASale, Awin), estimated price range, estimated commission rate (2–10%), and substitution alternatives. Commission rates are benchmark estimates — not live affiliate platform data. Use this tool for ingredient-level product details and substitutions; use suggest_affiliate_products for a revenue-ranked shopping list instead. Accepts ingredient list directly or recipe_id from a prior extract_recipe_ingredients call. Use for recipe affiliate monetization and shoppable recipe generation. Example: recipe_id='chocolate-chip-cookies-v1' → returns [{name:'flour',product:'King Arthur All-Purpose Flour',program:'Amazon Associates',estimated_commission_pct:4}].

ParametersJSON Schema
NameRequiredDescriptionDefault
ingredientsNoIngredient list from extract_recipe_ingredients. Provide this OR recipe_id.
recipe_idNoRecipe ID from a prior extraction — loads ingredients from cache.
api_keyNoOptional API key for paid access beyond the free tier

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that commission rates are benchmark estimates (not live data), which is a key behavioral trait. However, it does not mention if any data is persisted or require authentication, missing some context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (6 sentences), front-loaded with the core purpose, covers key aspects without redundancy, and includes a illustrative example.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Moderately complex tool with no output schema; the description adequately explains the return values (affiliate details, price range, commission rate, substitutions) and provides an example, making it complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and description adds value by clarifying the mutual exclusivity of ingredients and recipe_id, and providing an example output snippet, going beyond the schema's descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool matches recipe ingredients to purchasable products with affiliate details, and distinguishes itself from the sibling tool 'suggest_affiliate_products' by specifying its focus on ingredient-level details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use (for ingredient-level product details) and when not (use suggest_affiliate_products for revenue-ranked shopping list), and notes that input can be an ingredient list or a recipe_id from a prior extraction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_affiliate_productsA

Generate a revenue-ranked affiliate shopping list for a recipe, sorted by estimated commission potential. Equipment ranks highest (Amazon Associates ~10% commission). Returns items sorted by affiliate score with estimated price range and commission per item. Revenue estimates are algorithmic benchmarks — not live pricing data. Use this tool for ranked shopping lists and blog monetization strategy; use match_ingredients_to_products for ingredient-level product SKUs and substitutions. Accepts ingredient list or recipe_id from extract_recipe_ingredients. Example: recipe_name='Beef Bourguignon'.

ParametersJSON Schema
NameRequiredDescriptionDefault
recipe_nameYesRecipe name (e.g. 'Beef Bourguignon', 'Chocolate Chip Cookies')
ingredientsNoIngredient list. Provide this OR recipe_id.
recipe_idNoRecipe ID from a prior extraction — loads from cache.
api_keyNoOptional API key for paid access beyond the free tier

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It notes that revenue estimates are algorithmic benchmarks (not live pricing), equipment ranks highest in commission, and the output is sorted by affiliate score with price ranges. It does not cover potential rate limits or caching behavior, but the provided details are substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise—four sentences—with no filler. It front-loads the main purpose, then provides ranking priority, usage guidelines, input constraints, and an example. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 4 parameters, no output schema, and no annotations, the description explains the output format (sorted items with price range and commission) and notes on data accuracy. Missing details like pagination or error handling, but provided information is sufficient for typical use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with adequate parameter descriptions. The description adds context by stating the tool accepts ingredient list or recipe_id from extract_recipe_ingredients and provides an example ('recipe_name='Beef Bourguignon''). This adds meaningful usage guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb-object pair: 'Generate a revenue-ranked affiliate shopping list for a recipe.' It clearly states the resource (shopping list) and the action (generate, sorted by commission). It also distinguishes from sibling tool match_ingredients_to_products by explaining that tool is for ingredient-level SKUs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('ranked shopping lists and blog monetization strategy') and when to use the sibling tool ('ingredient-level product SKUs and substitutions'). It also specifies that it accepts an ingredient list or recipe_id from extract_recipe_ingredients, providing clear input guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.7/5.0
Disambiguation5/5

Each tool has a distinct and clear purpose: extraction, matching, and suggestion. They form a logical pipeline with no overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores: extract_recipe_ingredients, match_ingredients_to_products, suggest_affiliate_products.

Tool Count5/5

Three tools is appropriate for the focused domain of recipe commerce intelligence, covering the essential workflow without excess.

Completeness4/5

The tool set covers the main workflow from extraction to product suggestion, though live pricing and direct purchase links are not included, but that aligns with the stated purpose of intelligence.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Household-aware kitchen brain for AI agents: manage pantry inventory with freshness tracking, shopping lists, recipe collections with cook notes and per-diner ratings, dietary profiles with allergen safety, and kitchen equipment — all through 27 tools with OAuth 2.1 authentication. Includes a free tool for ingredient-based recipe generation without an account (accounts are free!).
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to search products and generate affiliate links across European and global affiliate networks, automating product discovery and link creation for monetization.
    5
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to search recipes, compose nutritionally balanced meals, optimize weekly meal plans based on macro targets for family members, and generate consolidated grocery lists from a personal recipe database.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/teamsincetoday/recipe-commerce-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server