Unofficial local-first Zé Delivery MCP for catalog, product search and order tracking. Never pays unless ZE_ALLOW_MUTATIONS and explicit_user_intent are both set.
Strong naming conventions (verb_noun pattern, clear action semantics). All 22 tools have descriptions (avg 156 chars, within 10-1024 baseline). Input schemas present with type definitions and enums. Tool annotations (readOnlyHint, destructiveHint) correctly applied. Key gaps: parameter descriptions are sparse or missing for complex objects (e.g., 'bulk_add_to_cart_input' and 'input' params lack field-level documentation); output schemas not documented; error handling descriptions are present but lack recovery guidance (e.g., 'USER_ACTION_REQUIRED' mentioned but not explained as retryable vs fatal).
applyCoupon(couponCode: String!). Dual-gated. Does not checkout.
bulkAddToCart(bulkAddToCartInput). Dual-gated plus fail-closed 18+ confirmation. Does not checkout.
Fail-closed. Needs ZE_ALLOW_MUTATIONS and explicit_user_intent. Guest tokens cannot charge.
What this unofficial MCP can read and which writes stay gated.
Read-only loadCheckout query. Does not run the manageCheckout mutation and does not charge.
clearCartItems. Dual-gated. Does not checkout.
Complex object parameters lack field-level documentation. 'bulk_add_to_cart_input' and 'input' (in ze_complete_checkout, ze_place_order) are typed as 'object' with no nested schema or description of required/optional fields. LLMs cannot infer structure.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'loadCart { cart { id } }') but formal output schema is absent. LLMs cannot plan downstream tool calls or extract fields reliably.
Error recovery guidance incomplete. Descriptions mention 'USER_ACTION_REQUIRED', 'ZE_ALLOW_MUTATIONS', and 'explicit_user_intent' but do not classify errors as retryable, user-fixable, or fatal. Agents cannot determine next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2025-06-18+ | v2 |
completeCheckout needs access token (401 without). Dual-gated plus 18+ confirmation.
Local doctor: token present, mutations off by default, unofficial Zé Delivery GraphQL.
loadCart { cart { id } }. Field names other than cart failed GraphQL validation.
Read-only listCategories on the unofficial public GraphQL. Does not place an order.
Read-only listRootProductGroups (Ofertas, Cervejas, …). Does not place an order.
listPaymentMethods (200 with internal error without a full session). Last-four redacted. Does not charge.
Read-only loadCategory (live 200 with checkout-information-not-found without session).
Read-only loadCheckout. Does not complete payment.
Deletes ~/.ze-mcp/tokens.json. Requires explicit_user_intent.
Past consumer orders. Read-only. Street/phone/GPS redacted.
Fail-closed. Needs ZE_ALLOW_MUTATIONS and explicit_user_intent. Guest tokens cannot charge. Default examples never enable this.
Shows redaction defaults (street/phone/GPS) and that place-order is off unless both gates are set.
loadProduct(id) with category. Read-only.
rateOrder(orderNumber, rating). Requires explicit_user_intent. Does not charge.
Read-only searchProducts(queryTerm) on the unofficial GraphQL. Does not add to cart.
loadOrder(orderNumber). Status only. Does not return GPS polylines or courier phone.
privacy_mode parameter present on 13 tools but never described. LLMs do not know what 'summary', 'structured', 'raw' mean or when to use each mode.
Dual-gate pattern (explicit_user_intent + confirmed_legal_age) documented in descriptions but not formalized as a confirmation-request pattern. No dry-run or explicit confirmation step before irreversible operations.