{"ok":true,"site":{"host":"a11ymcp.vercel.app","url":"https://a11ymcp.vercel.app/demo","type":"live","desc":"Websites expose accessibility capabilities to AI agents, allowing them to adapt live experiences to human needs, verify the result, and complete real tasks.","tools":[{"name":"get_accessibility_capabilities","kind":"answer","impl":"imperative","description":"Returns this site's declared accessibility capabilities (id, status supported|partial, limitations), the needs it cannot currently satisfy (notCurrentlyDeclared), and the commerce task tools. Call FIRST, before auditing, negotiating, or repairing, to learn what the site can adapt. Read-only; no approval required. If a user need appears in notCurrentlyDeclared, do not attempt to remediate it; report it as unsupported.","title":"Get accessibility capabilities","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"get_accessibility_state","kind":"answer","impl":"imperative","description":"Returns live session state: applied remediations, total violation count, last negotiated profile, and commerce task state (cart items, checkout session, order). Call to re-inspect after any failure, before choosing a next action, or to confirm whether remediation is active. Read-only; no approval required.","title":"Get accessibility state","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"inspect_accessibility_tree","kind":"answer","impl":"imperative","description":"Returns the normalized accessibility tree of the storefront (roles, names, focusability) with current violations attached per node. Call when you need node-level detail rather than audit totals, e.g. to explain a specific barrier to the user. Read-only; no approval required. Use the audit tools for category totals.","title":"Inspect accessibility tree","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"negotiate_accessibility_profile","kind":"act","impl":"imperative","description":"Maps the user's accessibility needs against this site's declared capabilities. Returns accepted capabilities (supported, or partial with a stated limitation) and rejected needs with reasons. Call after get_accessibility_capabilities and BEFORE any repair tool. Mutates session state only (stores the profile); does not change the page. No approval required; it only records the negotiated profile. Never call a repair tool for a need this tool rejected.","title":"Negotiate accessibility profile","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"needs":{"type":"array","items":{"type":"string","enum":["keyboard_only","strong_focus","screen_reader_labels","form_support","high_contrast","reduced_motion","large_targets"]},"minItems":1}},"required":["needs"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"audit_keyboard_navigation","kind":"answer","impl":"imperative","description":"Detects interactive elements that are not keyboard focusable and positive-tabindex ordering issues, each tagged blocking|degrading|informational for the checkout task. Call after discovery and before negotiation to quantify keyboard barriers. Read-only; safe to repeat. pass=true with an empty violations array means this category cannot block the task.","title":"Audit keyboard navigation","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"audit_accessible_names","kind":"answer","impl":"imperative","description":"Detects interactive controls that have no accessible name, tagged by task impact. Call after discovery and before negotiation. Read-only; safe to repeat. Pair with repair_accessible_names only if the site declares that capability.","title":"Audit accessible names","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"audit_form_associations","kind":"answer","impl":"imperative","description":"Detects form fields missing labels, placeholder-only labels, and error messages not associated with their field, tagged by task impact. Call before negotiation when the task involves forms. Read-only; safe to repeat.","title":"Audit form associations","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"audit_focus_visibility","kind":"act","impl":"imperative","description":"Probes each focusable control and detects missing visible focus indicators, tagged blocking for keyboard tasks. Supports AbortSignal cancellation. Call before negotiation for keyboard users. Read-only; safe to repeat.","title":"Audit focus visibility","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"repair_accessible_names","kind":"act","impl":"imperative","description":"Applies the site-declared, reversible accessible-name remediation. Requires input.approval=true (explicit user consent); the schema rejects missing or false approval. Precondition: the site must declare the accessible_names capability (check get_accessibility_capabilities). Mutates the live page; reversible via rollback_all_remediations. Verify afterwards with verify_accessibility_profile.","title":"Repair accessible names","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"approval":{"type":"boolean"}},"required":["approval"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"repair_keyboard_navigation","kind":"act","impl":"imperative","description":"Applies the site-declared, reversible keyboard remediation for the size selector (focusability plus Enter/Space/arrow handlers). Requires input.approval=true. Precondition: the site must declare keyboard_navigation. Mutates the live page; reversible via rollback_all_remediations. Verify afterwards with verify_accessibility_profile.","title":"Repair keyboard navigation","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"approval":{"type":"boolean"}},"required":["approval"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"repair_form_associations","kind":"act","impl":"imperative","description":"Applies the site-declared, reversible label and error-association remediation for checkout fields. Requires input.approval=true. Precondition: the site must declare form_association and the checkout form may need to be mounted; if a related call fails with 'not mounted', call begin_checkout first where applicable. Mutates the live page; reversible via rollback_all_remediations.","title":"Repair form associations","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"approval":{"type":"boolean"}},"required":["approval"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"repair_focus_management","kind":"act","impl":"imperative","description":"Applies the site-declared, reversible visible-focus remediation. Requires input.approval=true. Precondition: the site must declare focus_management. Mutates the live page; reversible via rollback_all_remediations. Verify afterwards with verify_accessibility_profile.","title":"Repair focus management","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"approval":{"type":"boolean"}},"required":["approval"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"repair_reduced_motion","kind":"act","impl":"imperative","description":"Applies the site-declared, reversible motion reduction. Precondition: the site must declare the reduced_motion capability; call after negotiate_accessibility_profile accepts it. Requires input.approval=true. On sites that do not declare it, returns success:false with an evidence chain explaining the refusal. Mutates the live page; reversible via rollback_all_remediations.","title":"Repair reduced motion","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"approval":{"type":"boolean"}},"required":["approval"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"verify_accessibility_profile","kind":"act","impl":"imperative","description":"Re-runs the task-critical audits and returns PASS|BLOCKED for the LAST negotiated profile (not every possible audit), plus per-check results with inScope flags and an advisories array for issues outside the negotiated profile. Call after every remediation batch and before proceeding to commerce; also call it to confirm a rollback restored the original state. Read-only; no approval required. If an in-scope check fails, call the matching audit tool for violation details.","title":"Verify accessibility profile","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"rollback_all_remediations","kind":"act","impl":"imperative","description":"Reverts every applied remediation and restores the original experience. Call when the user withdraws consent or to reset between scenarios. Idempotent and safe when nothing is applied. No approval required (it removes changes, never adds them).","title":"Rollback all remediations","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/","/inspector"]},{"name":"search_products","kind":"act","impl":"imperative","description":"Searches the deterministic NOMA catalog and updates the visible results. Call at the start of a purchase task; the returned product ids and sizes are the valid inputs for add_product_to_cart. Mutates UI state only; no approval required.","title":"Search products","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","maxLength":60}},"required":["query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/inspector"]},{"name":"add_product_to_cart","kind":"act","impl":"imperative","description":"Selects a product and size, then adds it to the cart. Preconditions: productId from search_products and variantId within that product's sizes. Returns success:false with a message (and nextAction search_products) for unknown ids instead of throwing. Reversible until checkout; no approval required.","title":"Add product to cart","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"inputSchema":{"type":"object","properties":{"productId":{"type":"string"},"variantId":{"type":"string"}},"required":["productId","variantId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/inspector"]},{"name":"begin_checkout","kind":"transact","impl":"imperative","description":"Creates a checkout session for a non-empty cart and returns the sessionId required by fill_checkout_form and place_order. Precondition: at least one cart item; on an empty cart it fails with nextAction add_product_to_cart. Call before filling the form. No approval required.","title":"Begin checkout","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/inspector"]},{"name":"fill_checkout_form","kind":"transact","impl":"imperative","description":"Fills and validates the active checkout form. Precondition: an active sessionId from begin_checkout; without one it fails with nextAction begin_checkout. On validation failure returns success:false with per-field errors; correct the values and retry. Mutates form state only; no approval required.","title":"Fill checkout form","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"sessionId":{"type":"string"},"values":{"type":"object","properties":{"email":{"type":"string"},"fullName":{"type":"string"},"address":{"type":"string"},"city":{"type":"string"},"postalCode":{"type":"string"}},"required":["email","fullName","address","city","postalCode"],"additionalProperties":false}},"required":["sessionId","values"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/inspector"]},{"name":"place_order","kind":"transact","impl":"imperative","description":"Consequential action: places the order. Precondition: a filled checkout session; call only after the user explicitly confirms. Requires input.confirmation to be the literal true (explicit human confirmation); the schema rejects confirmation:false. Returns the order id on success. A second call for the same session fails with 'Order already placed'.","title":"Place order","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false},"inputSchema":{"type":"object","properties":{"sessionId":{"type":"string"},"confirmation":{"type":"boolean","enum":[true]}},"required":["sessionId","confirmation"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo","/inspector"]},{"name":"submit_accessibility_preferences","kind":"transact","impl":"imperative","description":"Stage the user's accessibility needs on this page so the site can negotiate an accessibility profile. Fills the form; the user submits it.","title":"submit_accessibility_preferences","annotations":{"readOnlyHint":false,"declarative":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"needs":{"type":"array","items":{"type":"string","enum":["keyboard_only","strong_focus","screen_reader_labels","form_support","high_contrast","reduced_motion","large_targets"]},"description":"The accessibility needs to request, as an array of need ids. Only ids this site declares can be satisfied; the rest are rejected with a reason."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/demo","pages":["/demo"]},{"name":"submit_accessibility_preferences","kind":"transact","impl":"declarative","description":"Stage the user's accessibility needs on this page so the site can negotiate an accessibility profile. Fills the form; the user submits it.","inputSchema":{"type":"object","properties":{"needs":{"type":"boolean"}}},"__source":"spec","__declarative":true,"page":"/demo","pages":["/demo"]},{"name":"get_accessibility_capabilities","kind":"answer","impl":"imperative","description":"Returns this site's declared accessibility capability manifest (id, status supported|partial with limitation, and the needs it does not declare). Call FIRST. Read-only; no approval required. Do not attempt to adapt a need that is not declared.","title":"Get accessibility capabilities","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"negotiate_accessibility_profile","kind":"act","impl":"imperative","description":"Maps the user's needs to declared capabilities. Returns accepted (supported|partial) and rejected (with reasons). Call after get_accessibility_capabilities and BEFORE apply_accessibility_adaptation. Records the profile; does not touch the page. No approval required.","title":"Negotiate accessibility profile","annotations":{"readOnlyHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"needs":{"type":"array","items":{"type":"string"},"minItems":1}},"required":["needs"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"audit_accessibility","kind":"act","impl":"imperative","description":"Runs task-scoped DOM audits (keyboard focusability, accessible names, form labels, visible focus) and returns violations tagged blocking|degrading. Read-only; safe to repeat.","title":"Audit accessibility (task-scoped)","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"apply_accessibility_adaptation","kind":"act","impl":"imperative","description":"Applies one site-declared, reversible adaptation. Requires input.approval === true (explicit user consent); missing or false approval is rejected. Precondition: the capabilityId must appear in get_accessibility_capabilities and be accepted by negotiate_accessibility_profile. Mutates the live page; reverse with rollback_accessibility_adaptations.","title":"Apply a declared adaptation","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{"capabilityId":{"type":"string","enum":["accessible_names","keyboard_navigation","focus_visibility","form_labels"]},"approval":{"type":"boolean"}},"required":["capabilityId","approval"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"rollback_accessibility_adaptations","kind":"act","impl":"imperative","description":"Reverts every applied adaptation and restores the original page. Idempotent; safe when nothing is applied. No approval required (it only removes changes).","title":"Roll back all adaptations","annotations":{"readOnlyHint":false,"idempotentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"verify_accessibility_profile","kind":"answer","impl":"imperative","description":"Re-audits and returns PASS|BLOCKED for the LAST negotiated profile only, plus an advisories array for issues outside that profile. Read-only.","title":"Verify the negotiated profile","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"search_catalogue","kind":"answer","impl":"imperative","description":"Search the Vellum Books catalogue and show the results. Read-only and reversible.","title":"search_catalogue","annotations":{"readOnlyHint":false,"declarative":true,"destructiveHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Words to search the catalogue for, e.g. a title, an author, or a subject."}},"required":["query"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"fill_book_order","kind":"transact","impl":"imperative","description":"Fill the Vellum Books checkout form (email, name, shipping address). Does NOT place the order — the customer reviews the values and presses Place order.","title":"fill_book_order","annotations":{"readOnlyHint":false,"declarative":true,"destructiveHint":false},"inputSchema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The customer's email address, used for the order receipt."},"fullName":{"type":"string","description":"The customer's full name as it should appear on the order."},"address":{"type":"string","description":"The full shipping address, including postal code."}},"required":["email","fullName","address"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/partner","pages":["/partner"]},{"name":"search_catalogue","kind":"answer","impl":"declarative","description":"Search the Vellum Books catalogue and show the results. Read-only and reversible.","inputSchema":{"type":"object","properties":{"query":{"type":"string"}},"required":["query"]},"__source":"spec","__declarative":true,"page":"/partner","pages":["/partner"]},{"name":"fill_book_order","kind":"transact","impl":"declarative","description":"Fill the Vellum Books checkout form (email, name, shipping address). Does NOT place the order — the customer reviews the values and presses Place order.","inputSchema":{"type":"object","properties":{"email":{"type":"string","description":"Email address"},"fullName":{"type":"string","description":"Full name"},"address":{"type":"string","description":"Shipping address"}},"required":["email","fullName","address"]},"__source":"spec","__declarative":true,"page":"/partner","pages":["/partner"]}],"category":"Developer Tools","favicon":"/favicons/a11ymcp.vercel.app.ico","apiSurface":"spec","toolCount":32}}