{"$comment":"AimoPilot's own discovery manifest (not a standard). Standard entry points: /.well-known/api-catalog (RFC 9727), /.well-known/jwks.json (RFC 7517), /llms.txt.","name":"AimoPilot","description":"Open ordering gateway for AI purchasing agents. Any company's agent orders from the wholesaler carrying a signed mandate that says what it may buy; anything beyond the mandate needs a human sign-off. Plain code, not a model, checks every order.","interfaces":{"mcp":{"url":"https://0.0.0.0:8080/api/mcp","transport":"streamable-http","protocolVersions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26","2024-11-05","2024-10-07"],"serverInfo":{"name":"aimopilot","title":"AimoPilot","version":"1.0.0"},"tools":[{"name":"read_mandate","title":"Read my mandate","readOnly":true,"humanInput":false},{"name":"submit_need","title":"Start an order from the buyer's need","readOnly":false,"humanInput":false},{"name":"respond_to_concerns","title":"Pass on the buyer's answer to a mistake check","readOnly":false,"humanInput":true},{"name":"answer_questions","title":"Pass on the buyer's answers to AimoPilot's questions","readOnly":false,"humanInput":true},{"name":"choose_option","title":"Choose an option and get its fixed-price quote","readOnly":false,"humanInput":false},{"name":"get_intake_step","title":"Read where an order stands","readOnly":true,"humanInput":false},{"name":"read_kitchen_memory","title":"Read what AimoPilot remembers about this kitchen","readOnly":true,"humanInput":false},{"name":"place_order","title":"Place an order against a quote","readOnly":false,"humanInput":false},{"name":"get_order","title":"Read an order","readOnly":true,"humanInput":false},{"name":"list_orders","title":"List this organisation's orders","readOnly":true,"humanInput":false},{"name":"withdraw_order","title":"Take back an order","readOnly":false,"humanInput":false},{"name":"explain","title":"Explain what happened and why","readOnly":true,"humanInput":false},{"name":"get_order_timeline","title":"An order's whole timeline","readOnly":true,"humanInput":false},{"name":"find_products","title":"Look up products, prices and availability","readOnly":true,"humanInput":false},{"name":"find_alternatives","title":"Rank alternatives: good, better, best","readOnly":true,"humanInput":false},{"name":"open_request","title":"Open a purchase request","readOnly":false,"humanInput":false},{"name":"search_products","title":"Search product master data","readOnly":true,"humanInput":false},{"name":"check_availability","title":"Live price and availability for a short list","readOnly":true,"humanInput":false},{"name":"request_quote","title":"Get a fixed-price quote","readOnly":false,"humanInput":false},{"name":"list_offers","title":"List the wholesaler's offers to this kitchen","readOnly":true,"humanInput":false},{"name":"accept_offer","title":"Accept an offer: start an ordinary order","readOnly":false,"humanInput":false},{"name":"decline_offer","title":"Decline an offer","readOnly":false,"humanInput":false},{"name":"mute_offers","title":"Stop a kind of offer, or every offer","readOnly":false,"humanInput":false},{"name":"watch_orders","title":"What may not arrive, and how recurring orders drift","readOnly":true,"humanInput":false},{"name":"answer_watch","title":"Answer a watch finding or a held renewal","readOnly":false,"humanInput":false},{"name":"set_auto_renew","title":"Switch auto-renew for a recurring order","readOnly":false,"humanInput":false},{"name":"line_up_backup","title":"Line up a backup for a product with a poor delivery record","readOnly":false,"humanInput":false},{"name":"menu_ideas","title":"Dish ideas this kitchen can buy","readOnly":true,"humanInput":false},{"name":"plan_dish","title":"Plan a dish: on hand, to order, cannot get","readOnly":false,"humanInput":false},{"name":"plan_seasonal_menu","title":"Plan a menu around what is in season","readOnly":false,"humanInput":false},{"name":"plan_event_menu","title":"Plan a booking at short notice","readOnly":false,"humanInput":false},{"name":"order_menu","title":"Order a planned menu","readOnly":false,"humanInput":false}],"humanInput":{"tools":["respond_to_concerns","answer_questions"],"how":"These calls carry the human buyer's own answer (a mistake confirmation, a clarifying answer). If the client declares the MCP elicitation capability (2026-07-28), AimoPilot asks the buyer directly with an input_required elicitation/create form; otherwise the agent relays the question and passes the buyer's answer. Marked in tools/list with _meta[\"dock/humanInput\"] (AimoPilot's own key, not a standard)."}},"rest":{"baseUrl":"https://0.0.0.0:8080/api/v1","openapi":"https://0.0.0.0:8080/api/v1/openapi.json"}},"ordering":{"start":{"mcp":"submit_need","rest":"POST /api/v1/intake"},"summary":"Start every order from a structured need. AimoPilot checks it against the kitchen's history for likely mistakes, asks the buyer at most two typed questions, offers option cards with pros and cons, and quotes the chosen one at a fixed price. Each reply is a step with a state and the next call. The lower-level search, availability and quote calls stay available for follow-up.","states":["needs_confirmation","needs_input","options_ready","quoted","no_options","cancelled"],"humanOnly":["Confirming or correcting a likely mistake","Answering a clarifying question","Signing off an order above the mandate (on the approver's own phone, never through MCP)"]},"authentication":{"summary":"Present the mandate your organisation signed for you, and your agent id, on every call. Same credential for MCP and REST. No OAuth, no AimoPilot account.","headers":{"Authorization":"Bearer <mandate JWS>  (or: Mandate <mandate JWS>)","Dock-Agent-Id":"<the agent id the mandate names>"},"mandate":{"format":"JWT (RFC 7519), compact JWS (RFC 7515), alg Ed25519 (RFC 8037, RFC 9864)","typ":"mandate+jwt","aud":"dock","claims":{"iss":"buyer organisation id","sub":"agent id","jti":"mandate id","nbf":"valid from","exp":"valid until","mandate":"the limits; schema at #/components/schemas/Mandate in the OpenAPI document"},"issuedBy":"The buyer organisation signs with its own key. AimoPilot holds only the organisation's public key, registered when the organisation is onboarded.","schema":"https://0.0.0.0:8080/api/v1/openapi.json#/components/schemas/Mandate"},"approvals":"Orders above the mandate go to a human approver named in the mandate, on their own device. Agents cannot approve."},"verification":{"jwksUri":"https://0.0.0.0:8080/.well-known/jwks.json","summary":"Quotes and order confirmations are compact JWS signed by the wholesaler. Verify them offline with the published keys; match the JWS `kid` header to a key.","signedObjects":[{"typ":"quote+jws","what":"Fixed-price quote: lines, prices, delivery dates, expiry."},{"typ":"order+jws","what":"Order confirmation (receipt): what was bought at what price, who authorised it, and the audit-ledger head at commit time."}]},"policy":{"rules":["mandate_agent","mandate_window","quote_binding","quote_expiry","quote_replay","order_matches_quote","category_allowed","required_attributes","forbidden_allergens","nutrition_rules","required_certificates","recall_hold","delivery_deadline","substitution_rule","substitute_price","weekly_budget","per_order_limit","order_splitting","human_confirmation","approver_authority"],"liveLookup":{"maxProductsPerCall":10,"perAgent":{"windowMinutes":60,"maxCalls":60,"maxDistinctProducts":150,"appliesTo":"MCP"}},"refusals":"Every refusal is { error: { code, rule, message, details } }; `rule` is one of `rules` or live_lookup_limit, quote_availability, quote_signature, approver_identity, intake_sequence (a step out of order), human_input (needs the buyer's own answer first)."},"docs":{"llmsTxt":"https://0.0.0.0:8080/llms.txt","apiCatalog":"https://0.0.0.0:8080/.well-known/api-catalog","guide":"https://0.0.0.0:8080/docs/connect-an-agent","all":"https://0.0.0.0:8080/docs"}}