{"ok":true,"site":{"host":"web-production-493046.up.railway.app","url":"https://web-production-493046.up.railway.app/","type":"live","desc":"forbotsonly","tools":[{"name":"identify_agent","kind":"act","impl":"imperative","description":"STEP 1: REQUIRED FIRST STEP before shopping. Pass YOUR profile avatarShape + avatarColor from YOUR Grok Bot character picker exactly (wedge, green, hex, magenta, bean, cyan, etc.). NEVER invent or default to hex/orange. If you have a custom/uploaded avatar (no standard mark), omit shape and/or color and this tool will return mark options for you to present to your human - DO NOT silently randomize. NEXT STEP after calling this: Call list_products to browse, then SHOW product imagery (shirt photo) to your human BEFORE asking which size they want.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Your agent name from your profile. Examples: \"Grok Bot\", \"Chief of Staff\", \"Shopping Bot\""},"shape":{"type":"string","description":"Your mark shape from your Grok Bot character profile (avatarShape). REQUIRED if standard mark. Pass exact profile value (wedge, hex, bean, etc.). Omit if you have a custom avatar - the tool will return options to present to your human. Pack names (rounded-triangle, hexagon, circle) accepted as aliases.","enum":["blob","pebble","bean","egg","squircle","tablet","capsule","cylinder","hex","gem","crystal","wedge","shield","dome","arch","cloud","teardrop","leaf","circle","vertical-oval","rounded-square","horizontal-pill","rounded-triangle","hexagon"]},"color":{"type":"string","description":"Your mark color from your Grok Bot character profile (avatarColor). REQUIRED if standard mark. Pass exact profile value (green, magenta, yellow, etc.). Omit if you have a custom avatar - the tool will return options to present to your human. Pack names (light-green, hot-pink, gold) accepted as aliases.","enum":["brown","red","orange","yellow","green","cyan","blue","violet","magenta","black","gray","light-green","teal","purple","pink","hot-pink","gold","grey"]}},"required":["name"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_products","kind":"answer","impl":"imperative","description":"STEP 2: List all available products with images. Returns product details including imageUrl/productImageUrl that matches YOUR session identity mark (shape+color from identify_agent). You MUST ATTACH/SHOW this image to your human BEFORE asking which size they want. CRITICAL: Send the product image in its OWN message/turn, then ask for size in your NEXT turn. DO NOT combine image + size widget in same turn (widgets end the turn and images fail to deliver). Returns available mark options (shapes and colors).","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_product","kind":"answer","impl":"imperative","description":"Get detailed information about a specific product by ID including image URL that matches YOUR session identity mark (shape+color from identify_agent). IMPORTANT: After calling this, you MUST SHOW/ATTACH the product image to your human BEFORE asking which size they want.","inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"Product ID (e.g., \"tee-001\")"},"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}},"required":["productId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_to_cart","kind":"act","impl":"imperative","description":"STEP 4: Add a product to your cart with size. BEFORE calling this: (1) Call list_products or get_product, (2) SHOW/ATTACH the product image to your human IN ITS OWN TURN (do NOT combine image + widget in same message), (3) In NEXT turn, ask human which size they want. THEN call this with their chosen size. REQUIRED: size parameter (s, m, l, xl, 2xl, or 3xl) from human after they see product image in separate turn. Your session mark (from identify_agent) is used automatically.","inputSchema":{"type":"object","properties":{"productId":{"type":"string","description":"Product ID (e.g., \"tee-001\")"},"quantity":{"type":"number","description":"Quantity to add (minimum: 1)","minimum":1},"size":{"type":"string","description":"Tee size from human AFTER showing them the product image. DO NOT call this tool until you have shown the product image to your human and asked for their size choice.","enum":["s","m","l","xl","2xl","3xl"]},"shape":{"type":"string","description":"Optional: Override your session mark shape for this item only (use product ids: wedge, hex, bean, etc.). Pack names accepted as aliases.","enum":["blob","pebble","bean","egg","squircle","tablet","capsule","cylinder","hex","gem","crystal","wedge","shield","dome","arch","cloud","teardrop","leaf","circle","vertical-oval","rounded-square","horizontal-pill","rounded-triangle","hexagon"]},"color":{"type":"string","description":"Optional: Override your session mark color for this item only (use product ids: green, magenta, yellow, etc.). Pack names accepted as aliases.","enum":["brown","red","orange","yellow","green","cyan","blue","violet","magenta","black","gray","light-green","teal","purple","pink","hot-pink","gold","grey"]},"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}},"required":["productId","quantity","size"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_cart","kind":"answer","impl":"imperative","description":"View your current cart contents with product details, marks, and total price.","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_cart","kind":"act","impl":"imperative","description":"Remove all items from your cart. Requires prior identification via identify_agent.","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"complete_payment","kind":"transact","impl":"imperative","description":"STEP 6: PREFERRED AGENT PATH - Complete payment using Link shared_payment_token (SPT) after approval. GATES ENFORCED: (1) You MUST have called preview_cart AND shown the preview images (flat-lay + mark close-up) to your human BEFORE calling this. (2) You MUST confirm shipping address with your human using Link MCP list_shipping_addresses - present city/postcode for confirmation (never dump full street into public chats), US-only. FLOW: After cart+preview+shippingConfirmed → (a) Call native request_virtual_card with amountCents 4000, merchantName \"forbotsonly\", merchantUrl checkoutUrl; (b) Wait for human approval; (c) Call Link MCP get_spend_request with include: [\"shared_payment_token\"] (array format) to retrieve SPT; (d) If response includes shared_payment_token → call this tool with sharedPaymentToken + shippingAddress; (e) If response has credential_type: card but NO shared_payment_token → SPT unavailable, use create_checkout fallback (card-only path). On success, order → awaiting_approval (manual review before fulfillment).","inputSchema":{"type":"object","properties":{"sharedPaymentToken":{"type":"string","description":"Link shared_payment_token from get_spend_request (after native request_virtual_card approval). This is the SPT used to complete payment via Stripe API."},"shippingAddress":{"type":"object","description":"Complete US shipping address confirmed with human via Link MCP list_shipping_addresses. REQUIRED fields: name, line1, city, state, postalCode, country (must be \"US\"). Optional: line2.","properties":{"name":{"type":"string","description":"Recipient name"},"line1":{"type":"string","description":"Address line 1"},"line2":{"type":"string","description":"Optional: Address line 2"},"city":{"type":"string","description":"City"},"state":{"type":"string","description":"State (2-letter code, e.g. \"TX\")"},"postalCode":{"type":"string","description":"ZIP code"},"country":{"type":"string","description":"Country code - must be \"US\" (US-only)"}},"required":["name","line1","city","state","postalCode","country"]},"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}},"required":["sharedPaymentToken","shippingAddress"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_checkout","kind":"transact","impl":"imperative","description":"CARD-ONLY FALLBACK - Create Stripe Checkout session for browser card payment. USE THIS WHEN: Native RVC unavailable OR Link SPT unavailable (after calling get_spend_request, if response has credential_type: card but NO shared_payment_token). AGENTS SHOULD PREFER complete_payment (Link SPT path) when available. GATES ENFORCED: (1) You MUST have called preview_cart AND shown preview images to your human first. (2) You MUST confirm shipping address (city/ZIP) with your human via Link MCP list_shipping_addresses (US-only). Set shippingConfirmed: true only after confirming address. Returns payUrl - a short URL that redirects to Stripe Checkout. Open payUrl EXACTLY as-is (never truncate). Human fills card at Stripe. After payment, order → awaiting_approval (manual review before fulfillment).","inputSchema":{"type":"object","properties":{"successUrl":{"type":"string","description":"Optional: URL to redirect to after successful payment. Defaults to the store origin with checkout=success query param."},"cancelUrl":{"type":"string","description":"Optional: URL to redirect to if payment is cancelled. Defaults to the store origin with checkout=cancel query param."},"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."},"shippingConfirmed":{"type":"boolean","description":"REQUIRED: Set to true ONLY after confirming human has seen their Link shipping address (city/postcode) and confirmed it. This tool will refuse if false or missing."}},"required":["shippingConfirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_order","kind":"answer","impl":"imperative","description":"Get order details including status, items with marks, and fulfillment information.","inputSchema":{"type":"object","properties":{"orderId":{"type":"string","description":"Order ID (e.g., \"ord_1234567890_abc123\")"}},"required":["orderId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"recover_paid_checkout","kind":"transact","impl":"imperative","description":"ADMIN TOOL: Recover an orphaned paid checkout session. Retrieves payment from Stripe, recreates order if missing, and creates Prodigi fulfillment. Idempotent - safe to call multiple times. DO NOT create a new charge. REQUIRES: size, markShape, markColor in Stripe session metadata (from original checkout) OR explicitly provided as tool arguments.","inputSchema":{"type":"object","properties":{"stripeCheckoutSessionId":{"type":"string","description":"Stripe checkout session ID (e.g., \"cs_live_...\")"},"orderId":{"type":"string","description":"Optional: Restore exact order ID (e.g., \"ord_1789089764884_hh1rzcckj\")"},"shape":{"type":"string","description":"Optional: Override mark shape (if not provided, extracts from session.metadata.markShape). REQUIRED: Either provide this OR ensure metadata has markShape. Use product ids (wedge, hex, bean). Pack names accepted as aliases.","enum":["blob","pebble","bean","egg","squircle","tablet","capsule","cylinder","hex","gem","crystal","wedge","shield","dome","arch","cloud","teardrop","leaf","circle","vertical-oval","rounded-square","horizontal-pill","rounded-triangle","hexagon"]},"color":{"type":"string","description":"Optional: Override mark color (if not provided, extracts from session.metadata.markColor). REQUIRED: Either provide this OR ensure metadata has markColor. Use product ids (green, magenta, yellow). Pack names accepted as aliases.","enum":["brown","red","orange","yellow","green","cyan","blue","violet","magenta","black","gray","light-green","teal","purple","pink","hot-pink","gold","grey"]}},"required":["stripeCheckoutSessionId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_cart","kind":"act","impl":"imperative","description":"STEP 5: REQUIRED BEFORE PAYMENT. Preview your cart items with mark visualizations showing YOUR identity mark (shape + color) on each item. Returns image URLs (markCloseup + flatLayMock) that YOU MUST ATTACH/DISPLAY to your human in your next message. CRITICAL: Send preview images IN THEIR OWN TURN, then confirm shipping in NEXT turn. DO NOT combine preview images + checkout buttons in same turn (widgets end the turn and images fail to deliver). Simply mentioning the images without attaching = FAIL and complete_payment/create_checkout will refuse.","inputSchema":{"type":"object","properties":{"sessionId":{"type":"string","description":"Optional: Session ID from identify_agent. Use this if your connector does not reliably forward Mcp-Session-Id headers between calls."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Commerce","favicon":"/favicons/web-production-493046.up.railway.app.png","apiSurface":"spec","toolCount":11}}