Serveur MCP

Recall Kitchen

io.github.adamdecaf/recall-kitchen
Commerce et retail Recherche et exploration Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Searches US product recall databases by text, identifiers, VIN, UPC, barcode, or image and supports tracked products and recall notifications.

add_inventory_product
Add a product to this API key's inventory. Requires a verified account (sign in at https://app.recallkitchen.com with the signup email). Unverified signup keys cannot add inventory.
Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['name'], 'properties': {'sku': {'type': 'string', 'description': 'optional SKU or UPC'}, 'name': {'type': 'string', 'description': 'product name'}, 'brand': {'type': 'string', 'description': 'optional brand'}, 'category': {'enum': ['bad_result', 'tool_error', 'missing_capability', 'confusing_schema', 'docs', 'other'], 'type': 'string', 'description': 'optional category'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['id', 'name', 'brand', 'category', 'sku'], 'properties': {'id': {'type': 'integer'}, 'sku': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': 'string'}, 'category': {'type': 'string'}}, 'additionalProperties': False}
add_watch_pattern
Add a recall watch pattern for this API key. Same websearch syntax as search_product_recalls (AND, OR, -exclude, quoted phrases). Requires an API key.
Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['pattern'], 'properties': {'weight': {'type': 'integer', 'maximum': 8, 'minimum': 0, 'description': 'optional weight 0-8, default 4'}, 'pattern': {'type': 'string', 'description': 'websearch pattern: unquoted words are AND, OR is or, -term excludes, quoted phrases match as a unit'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['pattern', 'weight'], 'properties': {'weight': {'type': 'integer'}, 'pattern': {'type': 'string'}}, 'additionalProperties': False}
check_tracked_products
Check this API key's watch patterns and inventory against current indexed recalls (including historical notices). Does not create notifications. Generic patterns such as food or hazard only match in titles. Requires an API key.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'maximum matches to return'}, 'offset': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'number of matches to skip'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['matches', 'offset'], 'properties': {'offset': {'type': 'integer'}, 'matches': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['recall', 'reasons'], 'properties': {'recall': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'reasons': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'patterns': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'inventory': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'name', 'brand', 'category', 'sku'], 'properties': {'id': {'type': 'integer'}, 'sku': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': 'string'}, 'category': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}}, 'message': {'type': 'string'}, 'nextOffset': {'type': ['null', 'integer']}}, 'additionalProperties': False}
create_api_key
Create an additional API key for this account. Requires an existing API key. Unverified accounts may have only one key; verified accounts may have three. Usage is counted per account, not per key.
Schéma d’entrée
{'type': 'object', 'properties': {'kind': {'enum': ['user', 'agent'], 'type': 'string', 'description': 'optional kind: user or agent, default agent'}, 'name': {'type': 'string', 'description': 'optional key name'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['key_id', 'name', 'kind', 'api_key', 'limits', 'message'], 'properties': {'kind': {'type': 'string'}, 'name': {'type': 'string'}, 'key_id': {'type': 'string'}, 'limits': {'type': 'object', 'required': ['hourly', 'daily', 'max_keys_per_user', 'max_watch_patterns', 'max_inventory', 'allow_account_writes', 'tier'], 'properties': {'tier': {'type': 'string'}, 'daily': {'type': 'integer'}, 'hourly': {'type': 'integer'}, 'max_inventory': {'type': 'integer'}, 'max_keys_per_user': {'type': 'integer'}, 'max_watch_patterns': {'type': 'integer'}, 'allow_account_writes': {'type': 'boolean'}}, 'additionalProperties': False}, 'api_key': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}
get_product_recall
Get a recall by id, including extracted lots, UPCs, model numbers, locations, contact info, and product photo URLs
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'id': {'type': 'string', 'description': 'alias for recall_id'}, 'recall_id': {'type': 'string', 'description': 'recall id returned by search tools'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}
give_feedback
Report a bug, missing capability, bad search result, or confusing schema to the Recall Kitchen team. Use this instead of silently working around a problem. message is required and should include the MCP tool names you called, the actions you took, the query or identifiers, and any recall_id. Do not send API keys, photos, or PII. Optional category: bad_result, tool_error, missing_capability, confusing_schema, docs, other. Optional severity: blocked, workaround, annoyance. No API key or x402 required. Does not count against search quotas.
Schéma d’entrée
{'type': 'object', 'required': ['message'], 'properties': {'message': {'type': 'string', 'description': 'describe the problem. Include the MCP tool names you called, the actions you took, the query or identifiers, and any recall_id. Do not send API keys, photos, or PII.'}, 'category': {'enum': ['bad_result', 'tool_error', 'missing_capability', 'confusing_schema', 'docs', 'other'], 'type': 'string', 'description': 'optional: bad_result, tool_error, missing_capability, confusing_schema, docs, or other'}, 'severity': {'enum': ['blocked', 'workaround', 'annoyance'], 'type': 'string', 'description': 'optional: blocked, workaround, or annoyance'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['accepted', 'message'], 'properties': {'message': {'type': 'string'}, 'accepted': {'type': 'boolean'}}, 'additionalProperties': False}
list_api_keys
List this account's API keys (id, name, prefix, created). Secrets are not shown. Requires an API key.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['keys', 'limits'], 'properties': {'keys': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['key_id', 'name', 'kind', 'key_prefix', 'created_at'], 'properties': {'kind': {'type': 'string'}, 'name': {'type': 'string'}, 'key_id': {'type': 'string'}, 'created_at': {'type': 'string'}, 'key_prefix': {'type': 'string'}, 'last_used_at': {'type': ['null', 'string']}}, 'additionalProperties': False}}, 'limits': {'type': 'object', 'required': ['hourly', 'daily', 'max_keys_per_user', 'max_watch_patterns', 'max_inventory', 'allow_account_writes', 'tier'], 'properties': {'tier': {'type': 'string'}, 'daily': {'type': 'integer'}, 'hourly': {'type': 'integer'}, 'max_inventory': {'type': 'integer'}, 'max_keys_per_user': {'type': 'integer'}, 'max_watch_patterns': {'type': 'integer'}, 'allow_account_writes': {'type': 'boolean'}}, 'additionalProperties': False}, 'message': {'type': 'string'}}, 'additionalProperties': False}
list_inventory
List this API key's tracked inventory products. Requires an API key.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'number of products to return'}, 'query': {'type': 'string', 'description': 'optional inventory search'}, 'offset': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'number of products to skip'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['products', 'offset'], 'properties': {'offset': {'type': 'integer'}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'name', 'brand', 'category', 'sku'], 'properties': {'id': {'type': 'integer'}, 'sku': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': 'string'}, 'category': {'type': 'string'}}, 'additionalProperties': False}}, 'nextOffset': {'type': ['null', 'integer']}}, 'additionalProperties': False}
list_recall_notifications
List recall notifications for this API key. unread defaults to true (unread only); pass false for all. Empty for new accounts until a new matching recall is published; not a backfill of check_tracked_products. message is a short plain-text summary. Requires an API key.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'number of notifications to return'}, 'offset': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'number of notifications to skip'}, 'unread': {'type': ['null', 'boolean'], 'description': 'if true, only unread notifications; if false, include read. Default: true (unread only)'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['notifications', 'offset'], 'properties': {'offset': {'type': 'integer'}, 'message': {'type': 'string'}, 'nextOffset': {'type': ['null', 'integer']}, 'notifications': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['recall', 'sentOn', 'read'], 'properties': {'read': {'type': 'boolean'}, 'recall': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'sentOn': {'type': 'string'}, 'message': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
list_watch_patterns
List this API key's recall watch patterns. Requires an API key.
Lecture seule Idempotent
Schéma d’entrée
{'type': 'object', 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['patterns'], 'properties': {'patterns': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['pattern', 'weight'], 'properties': {'weight': {'type': 'integer'}, 'pattern': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
lookup_product
Look up a product by UPC/EAN. Returns found=false when unknown. Does not search recalls.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['upc'], 'properties': {'upc': {'type': 'string', 'description': 'UPC or EAN barcode digits'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['upc', 'found'], 'properties': {'upc': {'type': 'string'}, 'hint': {'type': 'string'}, 'found': {'type': 'boolean'}, 'product': {'type': ['null', 'object'], 'properties': {'sku': {'type': 'string'}, 'upc': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': 'string'}, 'format': {'type': 'string'}, 'category': {'type': 'string'}}, 'additionalProperties': False}, 'branded_food': {'type': ['null', 'object'], 'properties': {'category': {'type': 'string'}, 'gtin_upc': {'type': 'string'}, 'brand_name': {'type': 'string'}, 'brand_owner': {'type': 'string'}, 'ingredients': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}
mark_notification_read
Mark a recall notification as read (default) or unread. Requires an API key.
Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['recall_id'], 'properties': {'read': {'type': ['null', 'boolean'], 'description': 'if true, mark read; if false, mark unread. Default true'}, 'recall_id': {'type': 'string', 'description': 'recall id from list_recall_notifications'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['recall_id', 'read', 'updated'], 'properties': {'read': {'type': 'boolean'}, 'updated': {'type': 'boolean'}, 'recall_id': {'type': 'string'}}, 'additionalProperties': False}
remove_inventory_product
Remove a product from this API key's inventory by id. Requires an API key.
Destructif Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'integer', 'description': 'inventory product id from list_inventory'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['id', 'removed'], 'properties': {'id': {'type': 'integer'}, 'removed': {'type': 'boolean'}}, 'additionalProperties': False}
remove_watch_pattern
Remove a recall watch pattern for this API key. Requires an API key.
Destructif Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['pattern'], 'properties': {'pattern': {'type': 'string', 'description': 'watch pattern to remove'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['pattern', 'removed'], 'properties': {'pattern': {'type': 'string'}, 'removed': {'type': 'boolean'}}, 'additionalProperties': False}
revoke_api_key
Revoke an API key by key_id from list_api_keys. Requires an API key. Revoking the current key will fail subsequent calls.
Destructif Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['key_id'], 'properties': {'key_id': {'type': 'string', 'description': 'key_id from list_api_keys'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['key_id', 'revoked'], 'properties': {'key_id': {'type': 'string'}, 'revoked': {'type': 'boolean'}}, 'additionalProperties': False}
search_product_recalls
Search product recalls by query. Query uses websearch syntax: unquoted words are AND, OR is or, -term excludes, quoted phrases match as a unit (example: Generac Generator -Portable). Optional filters: source (cpsc, fdafoodsafety, FDAMedWatch, usda, nhtsa, canada, costco, target, walmart, openfda), since/until (YYYY-MM-DD), location (country, region, or place, ANDed with the query), offset, limit. Descriptions are truncated and extracted products are capped; use get_product_recall for the full text.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'number of recalls to return, 1-100, default 3'}, 'query': {'type': 'string', 'description': 'websearch query: unquoted words are AND, OR is or, -term excludes, quoted phrases match as a unit. Example: Generac Generator -Portable'}, 'since': {'type': 'string', 'description': 'optional published-on start date YYYY-MM-DD'}, 'until': {'type': 'string', 'description': 'optional published-on end date YYYY-MM-DD'}, 'years': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'optional published window in years (1-50). Ignored when since is set'}, 'offset': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'number of recalls to skip'}, 'source': {'enum': ['cpsc', 'fdafoodsafety', 'FDAMedWatch', 'usda', 'nhtsa', 'canada', 'costco', 'target', 'walmart', 'openfda'], 'type': 'string', 'description': 'optional source filter: cpsc, fdafoodsafety, FDAMedWatch, usda, nhtsa, canada, costco, target, walmart, or openfda. Aliases: FDA and food map to fdafoodsafety; medwatch maps to FDAMedWatch; vehicle, vin, and car map to nhtsa; healthcanada, cfia, and hc-sc map to canada; sams maps to walmart; enforcement, res, and fdaenforcement map to openfda. For more than one source, pass sources.'}, 'sources': {'type': 'array', 'items': {'enum': ['cpsc', 'fdafoodsafety', 'FDAMedWatch', 'usda', 'nhtsa', 'canada', 'costco', 'target', 'walmart', 'openfda'], 'type': 'string'}, 'description': 'optional sources to include (OR). Same values as source', 'uniqueItems': True}, 'location': {'type': 'string', 'description': 'optional country, region, or place; ANDed with the query. USA, Canada, Mexico, EU, and Europe match places in that region. CA is California, not Canada.'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['recalls', 'offset'], 'properties': {'offset': {'type': 'integer'}, 'recalls': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}}, 'nextOffset': {'type': ['null', 'integer']}}, 'additionalProperties': False}
search_product_recalls_by_upc
Search recalls by UPC/EAN or a barcode image URL/data URI/MCP image content. Matches extracted recall UPCs first. Returns found=false when the UPC is unknown.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'upc': {'type': 'string', 'description': 'UPC or EAN barcode digits'}, 'url': {'type': 'string', 'description': 'alias for image_url'}, 'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'number of recalls to return, 1-100, default 3'}, 'offset': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'number of recalls to skip'}, 'barcode': {'type': 'string', 'description': 'alias for upc'}, 'image_url': {'type': 'string', 'description': 'optional HTTPS URL or data:image/...;base64 URI of a barcode image'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['upc', 'found', 'recalls', 'offset'], 'properties': {'upc': {'type': 'string'}, 'hint': {'type': 'string'}, 'found': {'type': 'boolean'}, 'match': {'type': 'string'}, 'offset': {'type': 'integer'}, 'product': {'type': ['null', 'object'], 'properties': {'sku': {'type': 'string'}, 'upc': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': 'string'}, 'format': {'type': 'string'}, 'category': {'type': 'string'}}, 'additionalProperties': False}, 'recalls': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}}, 'confidence': {'type': 'number'}, 'nextOffset': {'type': ['null', 'integer']}}, 'additionalProperties': False}
search_product_recalls_from_image
Identify products in a public HTTPS image URL, data:image/...;base64 URI, or MCP image content part. Local files are not supported. Each product includes match (upc, model, text, category) and confidence. Category matches omit recalls unless include_category_matches=true. Requires an API key or x402; not included in the free anonymous per-IP quota.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'url': {'type': 'string', 'description': 'alias for image_url'}, 'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'number of recalls to return per product, 1-100, default 3'}, 'image_url': {'type': 'string', 'description': 'HTTPS URL or data:image/...;base64 URI of a photo containing products. Local file paths are not supported.'}, 'include_category_matches': {'type': 'boolean', 'description': 'if true, attach keyword recalls for generic items such as cups; default false'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['products', 'recalls'], 'properties': {'recalls': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['product', 'match', 'confidence', 'recalls'], 'properties': {'match': {'type': 'string'}, 'product': {'type': 'object', 'properties': {'sku': {'type': 'string'}, 'upc': {'type': 'string'}, 'name': {'type': 'string'}, 'brand': {'type': 'string'}, 'format': {'type': 'string'}, 'category': {'type': 'string'}}, 'additionalProperties': False}, 'recalls': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}}, 'confidence': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
search_recalls_by_identifier
Search recalls by extracted UPC, lot code, model number, product name, or VIN. VIN is decoded locally to year and make and matched against NHTSA campaigns (not a live NHTSA VIN API). Multiple identifiers are AND-matched on the same product.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'properties': {'upc': {'type': 'string', 'description': 'product UPC or EAN as stored on the recall'}, 'vin': {'type': 'string', 'description': '17-character vehicle identification number. Decoded locally to year and make, then matched against NHTSA campaigns. Does not call NHTSA live.'}, 'limit': {'type': 'integer', 'default': 3, 'maximum': 100, 'minimum': 1, 'description': 'number of recalls to return'}, 'offset': {'type': 'integer', 'maximum': 100, 'minimum': 0, 'description': 'number of recalls to skip'}, 'lot_code': {'type': 'string', 'description': 'lot or batch code as stored on the recall'}, 'model_number': {'type': 'string', 'description': 'model number as stored on the recall'}, 'product_name': {'type': 'string', 'description': 'extracted product name (exact match)'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['recalls', 'offset'], 'properties': {'offset': {'type': 'integer'}, 'recalls': {'type': ['null', 'array'], 'items': {'type': 'object', 'required': ['id', 'source', 'title', 'description', 'url', 'publishedOn'], 'properties': {'id': {'type': 'string'}, 'url': {'type': 'string'}, 'title': {'type': 'string'}, 'source': {'type': 'string'}, 'status': {'type': 'string'}, 'extracted': {'type': ['null', 'object'], 'properties': {'images': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'stores': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'contact': {'type': ['null', 'object'], 'properties': {'emails': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'phones': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'websites': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}, 'products': {'type': ['null', 'array'], 'items': {'type': 'object', 'properties': {'upcs': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'lotCodes': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'packaging': {'type': 'string'}, 'useByDates': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productName': {'type': 'string'}, 'modelNumbers': {'type': ['null', 'array'], 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'locations': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'establishments': {'type': ['null', 'array'], 'items': {'type': 'string'}}, 'productsTruncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': {'type': 'string'}, 'publishedOn': {'type': 'string'}, 'descriptionTruncated': {'type': 'boolean'}}, 'additionalProperties': False}}, 'nextOffset': {'type': ['null', 'integer']}}, 'additionalProperties': False}
signup
Create a Recall Kitchen account and API key from an email. No API key or x402 payment required. Requires accept_terms true (Terms of Service, Privacy Policy, and API Terms at https://recallkitchen.com/terms and https://recallkitchen.com/api-terms). The key is returned once. Unverified accounts have lower rate limits (60 tool calls/hour, 400/day, one key) and can add a few watch patterns. Sign in at https://app.recallkitchen.com with the same email to verify, raise limits, and add inventory. Does not re-issue a key if the email already has an account.
Schéma d’entrée
{'type': 'object', 'required': ['email', 'accept_terms'], 'properties': {'name': {'type': 'string', 'description': 'optional display name'}, 'email': {'type': 'string', 'description': 'email address for the new account'}, 'accept_terms': {'type': 'boolean', 'description': 'must be true: the person agrees to the Terms of Service, Privacy Policy, and API Terms at https://recallkitchen.com/terms'}}, 'additionalProperties': False}
Schéma de sortie
{'type': 'object', 'required': ['user_id', 'email', 'email_verified', 'key_id', 'api_key', 'limits', 'message'], 'properties': {'email': {'type': 'string'}, 'key_id': {'type': 'string'}, 'limits': {'type': 'object', 'required': ['hourly', 'daily', 'max_keys_per_user', 'max_watch_patterns', 'max_inventory', 'allow_account_writes', 'tier'], 'properties': {'tier': {'type': 'string'}, 'daily': {'type': 'integer'}, 'hourly': {'type': 'integer'}, 'max_inventory': {'type': 'integer'}, 'max_keys_per_user': {'type': 'integer'}, 'max_watch_patterns': {'type': 'integer'}, 'allow_account_writes': {'type': 'boolean'}}, 'additionalProperties': False}, 'api_key': {'type': 'string'}, 'message': {'type': 'string'}, 'user_id': {'type': 'string'}, 'email_verified': {'type': 'boolean'}}, 'additionalProperties': False}
Ajouté
give_feedback
1 October 2026 02:44
Modifié
add_inventory_product
1 October 2026 02:44
Modifié
signup
25 September 2026 02:51
Ajouté
signup
17 September 2026 12:40
Ajouté
search_recalls_by_identifier
17 September 2026 12:40
Ajouté
search_product_recalls_from_image
17 September 2026 12:40
Ajouté
search_product_recalls_by_upc
17 September 2026 12:40
Ajouté
search_product_recalls
17 September 2026 12:40
Ajouté
revoke_api_key
17 September 2026 12:40
Ajouté
remove_watch_pattern
17 September 2026 12:40
Ajouté
remove_inventory_product
17 September 2026 12:40
Ajouté
mark_notification_read
17 September 2026 12:40
Ajouté
lookup_product
17 September 2026 12:40
Ajouté
list_watch_patterns
17 September 2026 12:40
Ajouté
list_recall_notifications
17 September 2026 12:40
Ajouté
list_inventory
17 September 2026 12:40
Ajouté
list_api_keys
17 September 2026 12:40
Ajouté
get_product_recall
17 September 2026 12:40
Ajouté
create_api_key
17 September 2026 12:40
Ajouté
check_tracked_products
17 September 2026 12:40
Ajouté
add_watch_pattern
17 September 2026 12:40
Ajouté
add_inventory_product
17 September 2026 12:40