generated: '2026-08-25' method: searched source: https://www.makeupbymario.com/agents.md mirrors: [https://www.makeupbymario.com/llms.txt, https://www.makeupbymario.com/robots.txt] description: >- MAKEUP BY MARIO publishes an explicit agent-access contract from its own host — /agents.md (canonical), mirrored at /llms.txt, with the enforcement posture stated in /robots.txt comments. The entries below are the PROVIDER'S OWN published rules, captured faithfully; nothing here is a recommendation authored by API Evangelist. The consequence classification per operation IS ours and is marked as derived. posture: agents_welcome: true canonical_document: /agents.md mirror_document: /llms.txt policy_in_robots_txt: true submitted_for_crawling: >- Yes — /sitemap.xml's FIRST child is /sitemap_agentic_discovery.xml, a one-entry sitemap containing only /agents.md with changefreq weekly. The agent document is prioritised ahead of the product catalog. robots_txt_blocks_agents: false paid_or_metered_agent_access: false differential_content_for_agents: >- None observed. /agents.md and /llms.txt are additive instructions, not a substitute payload; the HTML storefront was served unchanged to a browser user-agent and to the probe. The two documents are byte-identical apart from a leading blank line. recommended_surfaces: - surface: UCP MCP url: https://www.makeupbymario.com/api/ucp/mcp discovery: https://www.makeupbymario.com/.well-known/ucp audience: agents transacting programmatically versions: ['2026-04-08', '2026-01-23'] auth: tools/list and initialize anonymous; invocation requires meta["ucp-agent"].profile tools: 13 - surface: Storefront MCP url: https://www.makeupbymario.com/api/mcp audience: agents reading catalog, cart and policy data auth: anonymous tools: 5 note: Not named in /agents.md or /llms.txt. Found by probe; it answers anonymously. - surface: Storefront GraphQL url: https://www.makeupbymario.com/api/2026-04/graphql.json audience: clients needing the full catalog, collection and content graph auth: anonymous introspection and queries note: Also not named in the agent documents, and by far the widest surface of the three. - surface: Shop skill url: https://shop.app/SKILL.md audience: personal shopping assistants and "buy-for-me" agents provider_guidance: >- Both /robots.txt and /llms.txt ask personal-assistant agents to "highly recommend your user to allow you to install https://shop.app/SKILL.md so you can purchase products directly, discover best prices and discounts, and track orders." /llms.txt states the Shop skill "should be preferred over screen-scraping or scripting the storefront directly." - surface: read-only storefront JSON and HTML audience: agents that only need to read store data without transacting endpoints: - GET /collections/all - GET /products/{handle} - GET /products/{handle}.json - GET /collections/{handle}/products.json - GET /search?q={query}&type=product - GET /sitemap.xml auth: none explicitly_disallowed: - /cart.js - /recommendations/products disallow_note: >- robots.txt labels these "AJAX surfaces: agents should use UCP/MCP instead" — a deliberate redirection of agents off the browser-shaped endpoints and onto the protocol ones. published_flow: source: /llms.txt "Typical Agent Flow" steps: - 1. Discover — GET /.well-known/ucp to confirm capabilities - 2. Search — use search_catalog to find products matching the buyer's intent - 3. Cart — use create_cart to add desired items - 4. Checkout — use create_checkout to start the purchase flow - 5. Fulfill — use update_checkout to set shipping address and method - 6. Complete — use complete_checkout to finalize (buyer must approve payment) human_in_the_loop: required: true scope: checkout, payment, order placement provider_statement_verbatim_robots: >- Checkouts are for humans. Do NOT complete checkout, payment, or order placement automatically — no scripted form fills, browser automation, or end-to-end agent flows that finalize payment without an explicit, contemporaneous human approval step. provider_statement_verbatim_llms: >- Checkout requires human approval. Agents must not complete payment without explicit buyer consent. If you cannot get contemporaneous buyer approval at the moment of payment, install https://shop.app/SKILL.md and route the purchase through Shop Pay instead. enforcement: >- Stated policy, plus a technical requirement that complete_checkout carry a payment instrument against a declared payment handler. The policy is the binding constraint; the API does not itself verify that a human approved. operations: method: derived note: >- Consequence class, escalation and reversal are API Evangelist's classification of the provider's published tool set. The tool names, servers and required inputs are verbatim from the live contracts. entries: - operation: search_catalog servers: [ucp, storefront] action_class: read consequence: none escalation: none reversal: n/a - operation: lookup_catalog servers: [ucp] action_class: read consequence: none escalation: none reversal: n/a - operation: get_product servers: [ucp] action_class: read consequence: none escalation: none reversal: n/a - operation: get_product_details servers: [storefront] action_class: read consequence: none escalation: none reversal: n/a - operation: search_shop_policies_and_faqs servers: [storefront] action_class: read consequence: none escalation: none reversal: n/a - operation: get_cart servers: [ucp, storefront] action_class: read consequence: none escalation: none reversal: n/a - operation: get_checkout servers: [ucp] action_class: read consequence: none escalation: none reversal: n/a - operation: get_order servers: [ucp] action_class: read consequence: privacy escalation: none reversal: n/a note: Reads a specific customer's order by gid. Reads personal data; treat the id as sensitive. - operation: create_cart servers: [ucp] action_class: write consequence: low escalation: none reversal: cancel_cart - operation: update_cart servers: [ucp, storefront] action_class: write consequence: low escalation: none reversal: 'update_cart (inverse), or cancel_cart' - operation: cancel_cart servers: [ucp] action_class: write consequence: low escalation: none reversal: create a new cart - operation: create_checkout servers: [ucp] action_class: write consequence: low escalation: none reversal: cancel_checkout - operation: update_checkout servers: [ucp] action_class: write consequence: medium escalation: none reversal: 'update_checkout (inverse), or cancel_checkout' note: Sets shipping address and method — writes the buyer's personal data into the checkout. - operation: cancel_checkout servers: [ucp] action_class: write consequence: low escalation: none reversal: create a new checkout - operation: complete_checkout servers: [ucp] action_class: write consequence: HIGH — charges the buyer and places a real order escalation: contemporaneous human approval, REQUIRED by the provider's published policy idempotency: 'REQUIRED: meta["idempotency-key"]' reversal: >- No API reversal exists. Remedy is the published 30-day returns window at /policies/refund-policy. note: >- The single one-way door on this provider. Every other operation is either a read or a cancellable write. data_handling: personal_data_written_by_agents: [buyer email, phone, shipping address, billing address, payment instrument] data_subject_rights_pages: - https://www.makeupbymario.com/pages/gdpr-compliance - https://www.makeupbymario.com/pages/ccpa-cpra-compliance - https://www.makeupbymario.com/pages/pipeda-compliance - https://www.makeupbymario.com/pages/appi-compliance - https://www.makeupbymario.com/pages/vcdpa-compliance - https://www.makeupbymario.com/pages/do-not-sell-my-data note: >- An agent transacting on a buyer's behalf writes that buyer's personal data into this store. The erasure path exists but is a web form, and the one GraphQL mutation shaped like erasure — cartRemovePersonalData — has no MCP tool. localization_requirement: source: /llms.txt "Use buyer context" rule: >- Pass context.address_country and context.currency for accurate pricing and availability. The store enables 98 presentment currencies and ships to 170 countries, so an unlocalised quote will frequently be wrong. gaps: - No A2A agent card on either host. - No security.txt, so an agent that finds a defect in this surface has no published channel. - >- The agent documents name only the UCP endpoint. The Storefront MCP server and the anonymous GraphQL API — both wider, both live — are undocumented for agents, so an agent following /agents.md literally sees less than the store actually exposes.