{"ok":true,"name":"grocery_normalize","description":"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).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["ingredients"],"properties":{"servings":{"type":"integer","description":"Servings the recipe makes (1-100); give with targetServings to scale"},"ingredients":{"type":"array","items":{"type":"string"},"description":"Recipe ingredient lines, one per item (max 100, 200 chars each)"},"targetServings":{"type":"integer","description":"Servings you want (1-100)"}},"additionalProperties":false},"serverUrl":"https://horizonpulse.dev/mcp","transport":"http","handshake":"ok","host":"horizonpulse.dev","score":66,"grade":"B","auth":"x402","lastScannedAt":"2026-10-30T13:06:15.405Z","stale":false,"permalink":"https://agentboardai.app/mcp/horizonpulse.dev/grocery_normalize","page":"https://agentboardai.app/site/horizonpulse.dev"}