Skip to main content
Glama

Ingredient List Parser

grocery_normalize
Read-only

Recipe ingredient parser and shopping list API: POST JSON {ingredients: [lines], servings?, targetServings?} (or GET ingredients=line|line). Returns per line name, canonicalId, qty, unit, metric (ml or g), category, optional/toTaste, prepNote, stated pack size, a typical pack hint, plus a merged shoppingList scaled to targetServings and unparsed lines. Deterministic, no outbound calls, no prices, nothing stored. Bad input (400) or nothing parsed (422) (Base: not charged; other rails may charge). Price $0.002 per call via x402, USDC on Base (MCP payments are Base only). Paid calls are subject to Horizon Pulse buyer terms: https://horizonpulse.dev/terms/buyer

Input Schema

NameRequiredDescriptionDefault
servingsNoServings the recipe makes (1-100); give with targetServings to scale
ingredientsYesRecipe ingredient lines, one per item (max 100, 200 chars each)
targetServingsNoServings you want (1-100)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), yet the description adds substantial behavior the annotations do not: deterministic output, no outbound calls, nothing stored, 400 vs 422 failure semantics, and a per-call price with the payment rail and buyer terms. That is exactly the kind of context an agent needs before calling a paid x402 endpoint.

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

Conciseness3/5

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

The purpose is correctly front-loaded in the first clause, and most sentences carry real information. But the whole definition is a single dense run-on paragraph, and the payment/legal boilerplate (price, rail, terms URL, 'other rails may charge') consumes roughly half the text and is hard to scan.

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?

There is no output schema, but the description enumerates every returned field (name, canonicalId, qty, unit, metric, category, optional/toTaste, prepNote, pack size, pack hint) plus the merged shoppingList and unparsed lines. Combined with the error and payment semantics, an agent has everything needed to call this correctly.

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 the schema already documents all three parameters, making 3 the baseline. The description goes beyond it by explaining that servings and targetServings are meant to be supplied together for scaling, and by documenting a GET query-string mode (ingredients=line|line) that does not appear in the input schema at all.

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

Purpose4/5

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

The description states a specific verb and resource: it parses recipe ingredient lines and returns normalized per-line fields plus a merged, serving-scaled shopping list. That is far more concrete than the title alone. It does not, however, distinguish itself from the sibling grocery_ingredient tool, leaving the agent to guess which one handles single ingredients.

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

Usage Guidelines3/5

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

Usage is implied by the request shape: POST a batch of lines with optional servings/targetServings to get a scaled shopping list, or use GET for a single pipe-delimited string. There is no explicit 'use this when...' clause, no exclusions, and no pointer to grocery_ingredient for the single-item case, so the agent must infer routing.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.