Pinoyshki Bakery

Browse Pinoyshki Bakery's menu, check an order against its rules, and get the checkout link.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
97%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~5,918Tokens (tool definitions)
~9.8 KBTypical response size
Significant attention impact (4.62% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "bakery": {
      "url": "https://bot.pinoyshki.com/mcp"
    }
  }
}

Remote endpoints

https://bot.pinoyshki.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_menu(lane, section, only_this_family)

Pinoyshki Bakery's menu with prices and photos, from the bakery's live data. lane 'today' is today's counter menu (what can be ordered on Toast for pickup today or a later day; sold-out items are left off); lane 'catering' is the catalogue for ordering 3 days to a week ahead, with sizes (full-size, bite-size dozen, half dozen). Never quote a price or item that is not in a result.

Input Schema

{
  "type": "object",
  "properties": {
    "lane": {
      "type": "string",
      "enum": [
        "today",
        "catering"
      ],
      "description": "Default 'today'."
    },
    "section": {
      "type": "string",
      "description": "Optional section filter, like 'Pastries' or 'Vegan'. 'Piroshki' and 'Pinoyshki' both show the whole family (pinoyshki are piroshki with Filipino fillings); customers asking for either nearly always want both."
    },
    "only_this_family": {
      "type": "boolean",
      "description": "Only when the customer asked for just piroshki or just pinoyshki: keep the section filter to that word."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "const": "menu"
    },
    "lane": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "sections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Exact item name; use it as-is in check_order."
                },
                "lane": {
                  "type": "string",
                  "enum": [
                    "today",
                    "catering"
                  ]
                },
                "lane_label": {
                  "type": "string"
                },
                "section": {
                  "type": "string"
                },
                "price": {
                  "type": "string",
                  "description": "Price as shown to customers, like '$9.05' or 'Full-Size $9.05 / Bite-Size Dozen $29.00'."
                },
                "price_cents": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "sizes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "size": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      },
                      "price_cents": {
                        "type": "integer"
                      },
                      "price": {
                        "type": "string"
                      }
                    }
                  }
                },
                "available": {
                  "type": "boolean",
                  "description": "False means sold out today."
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "dietary_labels": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "photo": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "allergens": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "type": "string"
                  },
                  "description": "Allergens the bakery lists; null means not listed, never 'none'."
                },
                "allergen_note": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "name",
                "lane",
                "available"
              ]
            }
          }
        },
        "required": [
          "name",
          "items"
        ]
      }
    },
    "closed_weekdays": {
      "type": "array"
    },
    "hours": {
      "type": "object"
    }
  },
  "required": [
    "view",
    "title",
    "sections"
  ]
}
🟢search_menu(query, lane)

Find menu items by a few words (a filling, a pastry, 'vegan', 'ube'), across today's counter menu and catering. Each match comes with its price, a short description, a photo URL and the allergens the bakery lists. If a customer's allergy is not settled by the listed allergens, say so and point them to (206) 322-2820. For a custom cake for any occasion (birthday, anniversary, graduation, shower, retirement, office party), call cake_options instead.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "A few words to look for."
    },
    "lane": {
      "type": "string",
      "enum": [
        "all",
        "today",
        "catering"
      ],
      "description": "Default 'all'."
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "const": "menu"
    },
    "lane": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "sections": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Exact item name; use it as-is in check_order."
                },
                "lane": {
                  "type": "string",
                  "enum": [
                    "today",
                    "catering"
                  ]
                },
                "lane_label": {
                  "type": "string"
                },
                "section": {
                  "type": "string"
                },
                "price": {
                  "type": "string",
                  "description": "Price as shown to customers, like '$9.05' or 'Full-Size $9.05 / Bite-Size Dozen $29.00'."
                },
                "price_cents": {
                  "type": [
                    "integer",
                    "null"
                  ]
                },
                "sizes": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "size": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      },
                      "price_cents": {
                        "type": "integer"
                      },
                      "price": {
                        "type": "string"
                      }
                    }
                  }
                },
                "available": {
                  "type": "boolean",
                  "description": "False means sold out today."
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "dietary_labels": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "photo": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "allergens": {
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "type": "string"
                  },
                  "description": "Allergens the bakery lists; null means not listed, never 'none'."
                },
                "allergen_note": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "required": [
                "name",
                "lane",
                "available"
              ]
            }
          }
        },
        "required": [
          "name",
          "items"
        ]
      }
    },
    "closed_weekdays": {
      "type": "array"
    },
    "hours": {
      "type": "object"
    }
  },
  "required": [
    "view",
    "title",
    "sections"
  ]
}
🟢show_item(name, lane)

One menu item with its photo, description, sizes and prices, and the allergens the bakery lists. Use it when the customer asks what something is or wants to see it. The photo is included in the result. When allergens are not listed or the customer has an allergy, point them to (206) 322-2820.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "The item's name."
    },
    "lane": {
      "type": "string",
      "enum": [
        "today",
        "catering"
      ],
      "description": "Optional: only this menu."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "const": "item"
    },
    "item": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Exact item name; use it as-is in check_order."
        },
        "lane": {
          "type": "string",
          "enum": [
            "today",
            "catering"
          ]
        },
        "lane_label": {
          "type": "string"
        },
        "section": {
          "type": "string"
        },
        "price": {
          "type": "string",
          "description": "Price as shown to customers, like '$9.05' or 'Full-Size $9.05 / Bite-Size Dozen $29.00'."
        },
        "price_cents": {
          "type": [
            "integer",
            "null"
          ]
        },
        "sizes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "size": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "price_cents": {
                "type": "integer"
              },
              "price": {
                "type": "string"
              }
            }
          }
        },
        "available": {
          "type": "boolean",
          "description": "False means sold out today."
        },
        "description": {
          "type": [
            "string",
            "null"
          ]
        },
        "dietary_labels": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "photo": {
          "type": [
            "string",
            "null"
          ]
        },
        "allergens": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "description": "Allergens the bakery lists; null means not listed, never 'none'."
        },
        "allergen_note": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "required": [
        "name",
        "lane",
        "available"
      ]
    },
    "also": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Exact item name; use it as-is in check_order."
          },
          "lane": {
            "type": "string",
            "enum": [
              "today",
              "catering"
            ]
          },
          "lane_label": {
            "type": "string"
          },
          "section": {
            "type": "string"
          },
          "price": {
            "type": "string",
            "description": "Price as shown to customers, like '$9.05' or 'Full-Size $9.05 / Bite-Size Dozen $29.00'."
          },
          "price_cents": {
            "type": [
              "integer",
              "null"
            ]
          },
          "sizes": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "size": {
                  "type": "string"
                },
                "label": {
                  "type": "string"
                },
                "price_cents": {
                  "type": "integer"
                },
                "price": {
                  "type": "string"
                }
              }
            }
          },
          "available": {
            "type": "boolean",
            "description": "False means sold out today."
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "dietary_labels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "photo": {
            "type": [
              "string",
              "null"
            ]
          },
          "allergens": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Allergens the bakery lists; null means not listed, never 'none'."
          },
          "allergen_note": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "name",
          "lane",
          "available"
        ]
      }
    }
  },
  "required": [
    "view",
    "item"
  ]
}
🟢cake_options(guests)

Start here when the customer wants a custom cake for any occasion: a birthday, anniversary, graduation, baby shower, retirement, holiday or office party. Returns the cake sizes and prices (with candles and a card), flavors, the earliest day, what the bakery does not make, photos of past cakes, and how to brainstorm the design with the customer one question at a time. Then order it through check_order with the cake details.

Input Schema

{
  "type": "object",
  "properties": {
    "guests": {
      "type": "integer",
      "minimum": 1,
      "description": "Optional: how many people, to suggest a size."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "const": "cake"
    },
    "title": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "note": {
      "type": "string"
    },
    "sizes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "size": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "price_cents": {
            "type": "integer"
          },
          "price": {
            "type": "string"
          },
          "suggested": {
            "type": "boolean"
          }
        }
      }
    },
    "flavors": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "earliest_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "allowed_dates": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "not_offered": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "photos": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "photo": {
            "type": "string"
          },
          "caption": {
            "type": "string"
          }
        }
      }
    }
  },
  "required": [
    "view",
    "sizes"
  ]
}
🟢check_order(items, channel, fulfillment, date, time, ...)

Check a basket against the bakery's ordering rules BEFORE any checkout. Returns the lane (same day on Toast, or catering on Shopify), the priced lines, the subtotal, any problems, and the dates and times the bakery can serve. Rules it applies: closed Mondays and blocked dates; Toast = only counter-menu items, up to 6 full-size, pickup, today while open or scheduled up to 14 days ahead with a time in that day's hours; catering = 3 days' notice for up to 24 full-size or 4 dozen bite-size (pickup), a week ahead (by Saturday) for anything larger, any delivery and custom cakes; delivery within 15 miles on orders over $100 or with a cake of $75 or more. Show the customer the lines and the subtotal, and never promise a date or time the result did not allow. The customer just says what they want; when the result lists 'Still needed' questions (combo_offer: make it a combo, in combo hours; sold_out_choice: what to do if a piroshki is sold out, for a later day; cake_details: what is still undecided about a custom cake), ask the customer each one in plain words, then check again with their answers.

Input Schema

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "minItems": 1,
      "maxItems": 60,
      "description": "What to order. Use item names exactly as get_menu or search_menu gave them.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Item name from the menu."
          },
          "size": {
            "type": "string",
            "description": "Catering sizes: 'full' (default), 'dozen', 'half dozen' or 'individual' (bite-size). Same-day items are always 'full'."
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500
          },
          "note": {
            "type": "string",
            "description": "Optional note for this line, like a cake inscription."
          },
          "if_unavailable": {
            "type": "string",
            "enum": [
              "closest",
              "remove",
              "cancel"
            ],
            "description": "Toast orders, piroshki and pinoyshki only: what the bakery does if this one is sold out when the order is made. 'closest' (default) swaps in the closest piroshki, 'remove' leaves it out, 'cancel' cancels the order. Worth asking for a scheduled day, since the counter menu changes."
          },
          "backups": {
            "type": "array",
            "maxItems": 3,
            "items": {
              "type": "string"
            },
            "description": "Toast orders, with if_unavailable 'closest': up to 3 counter-menu piroshki or pinoyshki the customer would take instead, in order of preference."
          },
          "combo": {
            "type": "string",
            "enum": [
              "small",
              "large",
              "none"
            ],
            "description": "Toast orders, piroshki and pinoyshki, when the pickup time is in combo hours (Tue to Fri, 11 am to 4 pm): 'small' = fries + a 12oz drink, 'large' = large fries, borscht + a drink, 'none' = the customer said no. check_order offers it (combo_offer) with each item's prices and drinks."
          },
          "combo_drink": {
            "type": "string",
            "description": "The combo's drink, as check_order listed it (like '12oz Coke' or 'Small Juice'). Default: any 12oz soda."
          },
          "cake": {
            "type": "object",
            "description": "Only on the decorated cake (see cake_options): what was decided with the customer. Leave out what is not decided yet.",
            "properties": {
              "guests": {
                "type": "integer",
                "minimum": 1,
                "description": "How many people; picks the size."
              },
              "size": {
                "type": "string",
                "description": "A size from cake_options, like '10-15'."
              },
              "flavor": {
                "type": "string",
                "description": "Vanilla, Chocolate, Red Velvet, Ube, or the custom flavor asked for."
              },
              "recipient": {
                "type": "string",
                "description": "Who it is for (with their age, for a birthday)."
              },
              "occasion": {
                "type": "string"
              },
              "design": {
                "type": "string",
                "description": "The design concept the customer agreed to."
              },
              "inscription": {
                "type": "string",
                "description": "What it says, or 'none'."
              },
              "allergens": {
                "type": "string",
                "description": "Allergies or dietary needs, or 'none'."
              },
              "candles": {
                "type": "boolean"
              },
              "card": {
                "type": "boolean",
                "description": "A card to go with the cake."
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "name",
          "quantity"
        ]
      }
    },
    "channel": {
      "type": "string",
      "enum": [
        "today",
        "catering"
      ],
      "description": "Optional. 'today' = the counter menu on Toast: same day, or a scheduled pickup up to 14 days ahead (up to 6 full-size, pickup only, paid on Toast); 'catering' = ordered 3 or more days ahead, paid on Shopify. Left out, the basket and date decide: catering is preferred from 3 days out when every item is on the catering menu."
    },
    "fulfillment": {
      "type": "string",
      "enum": [
        "pickup",
        "delivery"
      ],
      "description": "Default pickup. Delivery is catering, week-ahead only."
    },
    "date": {
      "type": "string",
      "description": "The date as YYYY-MM-DD ('today' also works). Work it out from the customer's words using today's date in Seattle (Pacific time). If their words could mean two dates, like 'next Friday' said earlier in the same week, ask them which before calling. Needed for catering and for a Toast pickup on a later day."
    },
    "time": {
      "type": "string",
      "description": "12-hour time like '1:00 pm'. Needed for catering and for a Toast pickup on a later day."
    },
    "zip": {
      "type": "string",
      "description": "Delivery ZIP code (delivery is within 15 miles)."
    },
    "utensils": {
      "type": "boolean",
      "description": "Catering: include utensils. Default true."
    },
    "notes": {
      "type": "string",
      "description": "Optional note for the bakery."
    },
    "staff_tip": {
      "type": "integer",
      "minimum": 0,
      "maximum": 50,
      "description": "Toast orders: the tip for the bakery staff in whole dollars, shared by the staff who bake, pack and hand over the order. 0 (the default) unless the customer picks one; offer $1, $3 or $5 or any whole amount."
    }
  },
  "required": [
    "items"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "const": "quote"
    },
    "ok": {
      "type": "boolean",
      "description": "True when the order is allowed as asked."
    },
    "title": {
      "type": "string"
    },
    "channel": {
      "type": [
        "string",
        "null"
      ]
    },
    "lane_label": {
      "type": "string"
    },
    "when": {
      "type": "string"
    },
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "size_label": {
            "type": "string"
          },
          "quantity": {
            "type": "integer"
          },
          "price_cents": {
            "type": [
              "integer",
              "null"
            ]
          },
          "line_cents": {
            "type": "integer"
          },
          "note": {
            "type": "string"
          },
          "photo": {
            "type": [
              "string",
              "null"
            ]
          },
          "if_unavailable": {
            "type": "string",
            "description": "The line's backup choice on Toast, in words."
          },
          "combo": {
            "type": "string",
            "description": "The line's combo upgrade, in words, or empty."
          },
          "cake": {
            "type": "string",
            "description": "The cake's flavor, message and design, in words, or empty."
          }
        },
        "required": [
          "name",
          "quantity"
        ]
      }
    },
    "subtotal_cents": {
      "type": "integer",
      "description": "Before tax, with the staff tip; the checkout page shows the final total."
    },
    "staff_tip_cents": {
      "type": "integer",
      "description": "The tip for the bakery staff, 0 when none."
    },
    "tip_offer": {
      "type": "object",
      "description": "Toast orders: the staff tip choices in whole dollars and the suggested one."
    },
    "problems": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string"
          },
          "soft": {
            "type": "boolean",
            "description": "True when something is still needed (a date, a time) rather than broken."
          }
        }
      }
    },
    "allowed_dates": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "allowed_date_labels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "allowed_dates with weekdays, like 'Fri Oct 2'."
    },
    "date_choices": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Present when the date asked for could mean either of these; ask the customer which."
    },
    "today": {
      "type": "string",
      "description": "Today's date in Seattle, like 'Thursday, September 24'."
    },
    "allowed_times": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "earliest_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "delivery_allowed": {
      "type": [
        "boolean",
        "null"
      ]
    }
  },
  "required": [
    "view",
    "ok",
    "lines",
    "subtotal_cents",
    "problems"
  ]
}
🟢start_checkout(items, channel, fulfillment, date, time, ...)

Only after check_order came back allowed and the customer confirmed the lines and subtotal: checks the same order again and returns the link the customer pays on, on the bakery's own domain. Toast: a Pinoyshki page that shows the order while it finishes the cart on Toast (with the staff tip and the pickup day and time), then takes them to Toast's checkout (good for a week; opened after its pickup time it remakes the cart for the next pickup time). Catering: it checks the order again and opens Shopify's checkout with the date, time and pickup or delivery filled in (good for a week). No payment happens here. If a rule is broken it returns the problems instead of a link.

Input Schema

{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "minItems": 1,
      "maxItems": 60,
      "description": "What to order. Use item names exactly as get_menu or search_menu gave them.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Item name from the menu."
          },
          "size": {
            "type": "string",
            "description": "Catering sizes: 'full' (default), 'dozen', 'half dozen' or 'individual' (bite-size). Same-day items are always 'full'."
          },
          "quantity": {
            "type": "integer",
            "minimum": 1,
            "maximum": 500
          },
          "note": {
            "type": "string",
            "description": "Optional note for this line, like a cake inscription."
          },
          "if_unavailable": {
            "type": "string",
            "enum": [
              "closest",
              "remove",
              "cancel"
            ],
            "description": "Toast orders, piroshki and pinoyshki only: what the bakery does if this one is sold out when the order is made. 'closest' (default) swaps in the closest piroshki, 'remove' leaves it out, 'cancel' cancels the order. Worth asking for a scheduled day, since the counter menu changes."
          },
          "backups": {
            "type": "array",
            "maxItems": 3,
            "items": {
              "type": "string"
            },
            "description": "Toast orders, with if_unavailable 'closest': up to 3 counter-menu piroshki or pinoyshki the customer would take instead, in order of preference."
          },
          "combo": {
            "type": "string",
            "enum": [
              "small",
              "large",
              "none"
            ],
            "description": "Toast orders, piroshki and pinoyshki, when the pickup time is in combo hours (Tue to Fri, 11 am to 4 pm): 'small' = fries + a 12oz drink, 'large' = large fries, borscht + a drink, 'none' = the customer said no. check_order offers it (combo_offer) with each item's prices and drinks."
          },
          "combo_drink": {
            "type": "string",
            "description": "The combo's drink, as check_order listed it (like '12oz Coke' or 'Small Juice'). Default: any 12oz soda."
          },
          "cake": {
            "type": "object",
            "description": "Only on the decorated cake (see cake_options): what was decided with the customer. Leave out what is not decided yet.",
            "properties": {
              "guests": {
                "type": "integer",
                "minimum": 1,
                "description": "How many people; picks the size."
              },
              "size": {
                "type": "string",
                "description": "A size from cake_options, like '10-15'."
              },
              "flavor": {
                "type": "string",
                "description": "Vanilla, Chocolate, Red Velvet, Ube, or the custom flavor asked for."
              },
              "recipient": {
                "type": "string",
                "description": "Who it is for (with their age, for a birthday)."
              },
              "occasion": {
                "type": "string"
              },
              "design": {
                "type": "string",
                "description": "The design concept the customer agreed to."
              },
              "inscription": {
                "type": "string",
                "description": "What it says, or 'none'."
              },
              "allergens": {
                "type": "string",
                "description": "Allergies or dietary needs, or 'none'."
              },
              "candles": {
                "type": "boolean"
              },
              "card": {
                "type": "boolean",
                "description": "A card to go with the cake."
              }
            },
            "additionalProperties": false
          }
        },
        "required": [
          "name",
          "quantity"
        ]
      }
    },
    "channel": {
      "type": "string",
      "enum": [
        "today",
        "catering"
      ],
      "description": "Optional. 'today' = the counter menu on Toast: same day, or a scheduled pickup up to 14 days ahead (up to 6 full-size, pickup only, paid on Toast); 'catering' = ordered 3 or more days ahead, paid on Shopify. Left out, the basket and date decide: catering is preferred from 3 days out when every item is on the catering menu."
    },
    "fulfillment": {
      "type": "string",
      "enum": [
        "pickup",
        "delivery"
      ],
      "description": "Default pickup. Delivery is catering, week-ahead only."
    },
    "date": {
      "type": "string",
      "description": "The date as YYYY-MM-DD ('today' also works). Work it out from the customer's words using today's date in Seattle (Pacific time). If their words could mean two dates, like 'next Friday' said earlier in the same week, ask them which before calling. Needed for catering and for a Toast pickup on a later day."
    },
    "time": {
      "type": "string",
      "description": "12-hour time like '1:00 pm'. Needed for catering and for a Toast pickup on a later day."
    },
    "zip": {
      "type": "string",
      "description": "Delivery ZIP code (delivery is within 15 miles)."
    },
    "utensils": {
      "type": "boolean",
      "description": "Catering: include utensils. Default true."
    },
    "notes": {
      "type": "string",
      "description": "Optional note for the bakery."
    },
    "staff_tip": {
      "type": "integer",
      "minimum": 0,
      "maximum": 50,
      "description": "Toast orders: the tip for the bakery staff in whole dollars, shared by the staff who bake, pack and hand over the order. 0 (the default) unless the customer picks one; offer $1, $3 or $5 or any whole amount."
    },
    "customer_name": {
      "type": "string",
      "description": "Optional: the name the order is for."
    },
    "customer_phone": {
      "type": "string",
      "description": "Optional: a phone number for the bakery."
    },
    "customer_email": {
      "type": "string",
      "description": "Optional: an email for the bakery."
    }
  },
  "required": [
    "items"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "view": {
      "const": "checkout"
    },
    "ok": {
      "type": "boolean",
      "description": "True when the order is allowed as asked."
    },
    "title": {
      "type": "string"
    },
    "channel": {
      "type": [
        "string",
        "null"
      ]
    },
    "lane_label": {
      "type": "string"
    },
    "when": {
      "type": "string"
    },
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "size_label": {
            "type": "string"
          },
          "quantity": {
            "type": "integer"
          },
          "price_cents": {
            "type": [
              "integer",
              "null"
            ]
          },
          "line_cents": {
            "type": "integer"
          },
          "note": {
            "type": "string"
          },
          "photo": {
            "type": [
              "string",
              "null"
            ]
          },
          "if_unavailable": {
            "type": "string",
            "description": "The line's backup choice on Toast, in words."
          },
          "combo": {
            "type": "string",
            "description": "The line's combo upgrade, in words, or empty."
          },
          "cake": {
            "type": "string",
            "description": "The cake's flavor, message and design, in words, or empty."
          }
        },
        "required": [
          "name",
          "quantity"
        ]
      }
    },
    "subtotal_cents": {
      "type": "integer",
      "description": "Before tax, with the staff tip; the checkout page shows the final total."
    },
    "staff_tip_cents": {
      "type": "integer",
      "description": "The tip for the bakery staff, 0 when none."
    },
    "tip_offer": {
      "type": "object",
      "description": "Toast orders: the staff tip choices in whole dollars and the suggested one."
    },
    "problems": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "code": {
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string"
          },
          "soft": {
            "type": "boolean",
            "description": "True when something is still needed (a date, a time) rather than broken."
          }
        }
      }
    },
    "allowed_dates": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "allowed_date_labels": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "allowed_dates with weekdays, like 'Fri Oct 2'."
    },
    "date_choices": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Present when the date asked for could mean either of these; ask the customer which."
    },
    "today": {
      "type": "string",
      "description": "Today's date in Seattle, like 'Thursday, September 24'."
    },
    "allowed_times": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "earliest_date": {
      "type": [
        "string",
        "null"
      ]
    },
    "delivery_allowed": {
      "type": [
        "boolean",
        "null"
      ]
    },
    "url": {
      "type": "string",
      "description": "The link the customer opens to pay. Give it to them as-is."
    },
    "button": {
      "type": "string"
    },
    "pays_on": {
      "type": "string"
    }
  },
  "required": [
    "view",
    "ok",
    "lines",
    "subtotal_cents",
    "url"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools