# Integra Lens Merch Shop

> Official merchandise for Integra Lens and the Legal Context Protocol, printed to order. For demonstration only. This transaction runs on a test network with test money, and has no value.

This shop sells to agents and to people. Every purchase is a real transaction on Base Sepolia (`eip155:84532`), a test network, paid in its test USDC (`0x036CbD53842c5426634e7929541eC2318f3dCF7e`) to the shop's payee, `0x4F098166790DeaBb92c2Ef4516D8C1ab88A12C6B`: prices are real-life prices, and each cent is paid as one millionth of a USDC. Each purchase has its own agreement, whose SHA-256, H, the payment request carries and the payment is bound to. One checkout stands behind every door, and a payment is presented at the door that asked for it.

## The doors

- **x402 over HTTP:** `https://integra-lens-merch-live.demos.integraledger.net/buy/<offer>` answers `402` with x402 version 2's `PAYMENT-REQUIRED`, which holds the agreement's link; the same request again with `PAYMENT-SIGNATURE` pays it.
- **x402 over MCP:** the tool `buy` at https://integra-lens-merch-live.demos.integraledger.net/mcp, with the payment in `params._meta["x402/payment"]`.
- **UCP's checkout over REST:** `https://integra-lens-merch-live.demos.integraledger.net/checkout-sessions` (UCP 2026-08-25), as the profile at https://integra-lens-merch-live.demos.integraledger.net/.well-known/ucp declares it, paid through the x402 payment handler `com.integraledger.lcp.x402`. Your platform's profile goes in `UCP-Agent`.
- **UCP's checkout over MCP:** the tools `create_checkout`, `get_checkout`, `update_checkout`, `complete_checkout`, `cancel_checkout` and `get_order` at https://integra-lens-merch-live.demos.integraledger.net/mcp, paid through the same handler. Your platform's profile goes in `meta["ucp-agent"]`.
- **MPP:** the `402` of `https://integra-lens-merch-live.demos.integraledger.net/buy/<offer>` also carries MPP's `evm` `charge` challenge (`WWW-Authenticate: Payment …`), with an agreement of its own, for every offer; `Authorization: Payment <credential>` pays it.
- **A2A:** the agent card at `https://integra-lens-merch-live.demos.integraledger.net/.well-known/agent-card.json` (and `/.well-known/agent.json`), in version 0.3 or 1.0 as the `A2A-Version` header asks (none is 0.3); JSON-RPC at `https://integra-lens-merch-live.demos.integraledger.net/a2a`, with the skills `search_catalog`, `get_terms`, `negotiate` and `buy`, paid by x402 over A2A, and UCP's checkout over A2A.
- **AP2 over A2A:** at the same endpoint, a shopping agent under an AP2 mandate sends `{action: "ap2_checkout", offer}` and is answered with AP2's checkout, a `checkout_jwt` this shop signs whose `legalContext` names the agreement and its agreement step; it pays the agreement step, then completes on the task with AP2's Checkout and Payment Mandates and the x402 payment, whose nonce is keccak256 of the Payment Mandate.
- **The kit's own tools** at https://integra-lens-merch-live.demos.integraledger.net/mcp, for an agent with no UCP platform profile: `search_catalog`, `lookup_catalog`, `get_product`, `get_terms`, `negotiate`, `buy`, `test_buy` and `get_purchase`.

## Offers

- [Integra Lens t-shirt](https://integra-lens-merch-live.demos.integraledger.net/products/lens-tee): Heavyweight cotton crew-neck tee with the Integra Lens mark on the chest. White or navy, sizes S to 2XL. $28.00, paid as 0.0028 USDC. Paid when bought (x402 `exact`).
  Delivers: An order for goods, with its number. The order is recorded and the stock is reduced. Nothing is sent. Asks for: name, address, size, colour. Open to negotiation.
  Offer id `lens-tee`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lens-tee, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lens-tee.
  In a UCP checkout: the line's item is `lens-tee`; it asks for name at `$.buyer.first_name`, address at `$.fulfillment`, size at `$['com.integraledger.lcp.with'].size`, colour at `$['com.integraledger.lcp.with'].colour`.
- [LCP t-shirt](https://integra-lens-merch-live.demos.integraledger.net/products/lcp-tee): Heavyweight cotton crew-neck tee with the Legal Context Protocol mark on the chest. White, heather grey or navy, sizes S to 2XL. $28.00, paid as 0.0028 USDC. Paid when bought (x402 `exact`).
  Delivers: An order for goods, with its number. The order is recorded and the stock is reduced. Nothing is sent. Asks for: name, address, size, colour. Open to negotiation.
  Offer id `lcp-tee`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lcp-tee, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lcp-tee.
  In a UCP checkout: the line's item is `lcp-tee`; it asks for name at `$.buyer.first_name`, address at `$.fulfillment`, size at `$['com.integraledger.lcp.with'].size`, colour at `$['com.integraledger.lcp.with'].colour`.
- [Integra Lens mug, 11 oz](https://integra-lens-merch-live.demos.integraledger.net/products/lens-mug): Glossy white ceramic mug with the Integra Lens mark on both sides. Dishwasher and microwave safe. $16.00, paid as 0.0016 USDC. Paid when bought (x402 `exact`).
  Delivers: An order for goods, with its number. The order is recorded and the stock is reduced. Nothing is sent. Asks for: name, address. Open to negotiation.
  Offer id `lens-mug`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lens-mug, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lens-mug.
  In a UCP checkout: the line's item is `lens-mug`; it asks for name at `$.buyer.first_name`, address at `$.fulfillment`.
- [LCP mug, 11 oz](https://integra-lens-merch-live.demos.integraledger.net/products/lcp-mug): Glossy white ceramic mug with the Legal Context Protocol mark on both sides. Dishwasher and microwave safe. $16.00, paid as 0.0016 USDC. Paid when bought (x402 `exact`).
  Delivers: An order for goods, with its number. The order is recorded and the stock is reduced. Nothing is sent. Asks for: name, address. Open to negotiation.
  Offer id `lcp-mug`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lcp-mug, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lcp-mug.
  In a UCP checkout: the line's item is `lcp-mug`; it asks for name at `$.buyer.first_name`, address at `$.fulfillment`.
- [LCP holographic sticker, 3 inch](https://integra-lens-merch-live.demos.integraledger.net/products/lcp-sticker): Three-inch die-cut vinyl sticker with the Legal Context Protocol mark, in rainbow holographic finish. Weatherproof for a laptop or a flask. $5.00, paid as 0.0005 USDC. Paid when bought (x402 `exact`).
  Delivers: An order for goods, with its number. The order is recorded and the stock is reduced. Nothing is sent. Asks for: name, address. Open to negotiation.
  Offer id `lcp-sticker`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lcp-sticker, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lcp-sticker.
  In a UCP checkout: the line's item is `lcp-sticker`; it asks for name at `$.buyer.first_name`, address at `$.fulfillment`.
- [Integra Lens matte sticker, 3 inch](https://integra-lens-merch-live.demos.integraledger.net/products/lens-sticker): Three-inch die-cut vinyl sticker with the Integra Lens mark, in a matte finish. Weatherproof for a laptop or a flask. $4.00, paid as 0.0004 USDC. Paid when bought (x402 `exact`).
  Delivers: An order for goods, with its number. The order is recorded and the stock is reduced. Nothing is sent. Asks for: name, address. Open to negotiation.
  Offer id `lens-sticker`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lens-sticker, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lens-sticker.
  In a UCP checkout: the line's item is `lens-sticker`; it asks for name at `$.buyer.first_name`, address at `$.fulfillment`.
- [LCP logo (SVG)](https://integra-lens-merch-live.demos.integraledger.net/products/lcp-logo): The Legal Context Protocol mark as a vector SVG file, free to download under its own licence. One cent covers the rail's payment anchor; the logo itself costs nothing. $0.01, paid as 0.000001 USDC. Paid when bought (x402 `exact`).
  Delivers: A file, `lcp-logo.svg`, in the answer to the paid request. Its size and SHA-256 are named in the agreement before the payment.
  Offer id `lcp-logo`; buy at https://integra-lens-merch-live.demos.integraledger.net/buy/lcp-logo, paid by x402 or by MPP; test checkout https://integra-lens-merch-live.demos.integraledger.net/test/buy/lcp-logo.
  In a UCP checkout: the line's item is `lcp-logo`.

## Buy over HTTP, with x402

- `POST https://integra-lens-merch-live.demos.integraledger.net/buy/<offer>` with JSON `{"quote"?, "with"?}`; `GET` for an offer that asks for nothing. Unpaid, it answers `402` with `PAYMENT-REQUIRED`: base64 of the `PaymentRequired`.
- Repeat the same request exactly, with `PAYMENT-SIGNATURE`: base64 of the payment. It answers `200` with `PAYMENT-RESPONSE`, or `202` while the payment is sent and not yet confirmed.
- Every `402` declares x402's `payment-identifier` extension, not required: a payment that names itself with an id, sent again, is answered from the first, never paid twice. It carries `offer-receipt`'s signed offer, a JWS (ES256) whose `kid` is the key's method in https://integra-lens-merch-live.demos.integraledger.net/.well-known/did.json; the paid answer's `PAYMENT-RESPONSE` carries the signed receipt.
- `POST https://integra-lens-merch-live.demos.integraledger.net/negotiate/<offer>` with `{"amount", "text", "negotiation"?}`: the same negotiation as the tool.
- The doors' answers and the documents below are signed (RFC 9421, label `sig1`, covering `@status`, `content-digest` and `content-type`, algorithm `ecdsa-p256-sha256`) with the ES256 key whose `kid` the `keyid` names, in `keys[]` of https://integra-lens-merch-live.demos.integraledger.net/.well-known/ucp.
- Every door over HTTP, with the body it takes and what it asks to be paid, is declared in https://integra-lens-merch-live.demos.integraledger.net/openapi.json (OpenAPI 3.1; each offer's door's `x-payment-info`, of the HTTP Payment scheme's discovery draft, names an offer of method `x402` and, where MPP is offered, one of method `evm`, each with the amount in USDC base units, the token, the network and the payee).

## Buy over HTTP, with MPP

- For every offer, the `402` of `https://integra-lens-merch-live.demos.integraledger.net/buy/<offer>` also carries MPP's challenge (the HTTP `Payment` scheme, method `evm`, intent `charge`): `WWW-Authenticate: Payment id="…", realm="…", method="evm", intent="charge", request="…", expires="…", opaque="…"`, for the same amount of the same token to the same payee, on Base Sepolia (chain id 84532).
- The challenge has an agreement of its own. Its `opaque`, base64url of JSON, holds `legalContext`, `lcp:sha256:` and that agreement's H, and `legalContextUrl`, its link; its `id` is base64url of H's 32 bytes, `.`, and its position. Its `request`, base64url of JSON, holds the `amount` in base units, the `currency` (USDC's address), the `recipient` (the payee) and `methodDetails` (`chainId`, `credentialTypes: ["authorization"]`, `decimals`).
- Pay it with `Authorization: Payment <credential>`, base64url of JSON: the challenge echoed whole, `source` (your `did:pkh`), and `payload` `{type: "authorization", from, to, value, validAfter, validBefore, nonce, signature}`, an EIP-3009 `transferWithAuthorization` of the amount to the recipient whose `nonce` is keccak256 of the challenge's `id` and `realm`. An `mppx` client does this unchanged. The answer is `200` with `Payment-Receipt`.
- Pay one of the two challenges, not both. The one paid is claimed; the other expires unpaid. Over MCP, this shop is x402 only.

## Buy over MCP, with x402 and the kit's own tools

- Endpoint: https://integra-lens-merch-live.demos.integraledger.net/mcp, streamable HTTP, MCP revision 2026-07-28, stateless, with no sign-in. Clients of the 2025 revisions are served too.
- `search_catalog`, `lookup_catalog`, `get_product`: the catalogue, as UCP's Catalog capability. `meta["ucp-agent"]` is not required.
- `get_terms`: the terms and conditions of sale, and an offer's terms with their hash.
- `negotiate`: for an offer open to negotiation, propose a price in dollars and cents. At most 4 rounds; an accepted price stands for 10 minutes, for one purchase, under the negotiation's id.
- `buy` `{offer, quote?, with?}`: x402 version 2 over MCP. The first call answers payment required: a result with `isError: true` and the `PaymentRequired` in `structuredContent`. Call `buy` again with the same arguments and the signed payment object in `params._meta["x402/payment"]`. The result holds the delivery and the proof's address, and the receipt in `_meta["x402/payment-response"]`. A payment sent but not yet confirmed is answered as pending, not as an error: ask `get_purchase`, or send the same payment again.
- `test_buy`: the test checkout, below.
- `get_purchase` `{atrHash}`: a purchase's state, what was delivered (its kind, size and SHA-256, never its bytes) and its proof's address. The delivery itself is only in the answer to the paid request.

## Buy over A2A

- The agent card: `GET https://integra-lens-merch-live.demos.integraledger.net/.well-known/agent-card.json` (or `/.well-known/agent.json`, or either under `/a2a`). Send `A2A-Version: 1.0` (or `?A2A-Version=1.0`) for version 1.0's card; without it, or with `0.3`, the card is version 0.3's. The card is signed (a JWS over its RFC 8785 form) with the key in `keys[]`.
- JSON-RPC at `POST https://integra-lens-merch-live.demos.integraledger.net/a2a`, where the method's name says the version: `SendMessage`, `GetTask`, `ListTasks` and `CancelTask` are version 1.0's; `message/send`, `tasks/get` and `tasks/cancel` are version 0.3's. Nothing streams, and no push notifications are sent.
- The skills: `search_catalog`, "Find in the catalogue"; `get_terms`, "Read the terms"; `negotiate`, "Negotiate a price"; `buy`, "Buy an offer". A data part `{"action", …}` names one of `search_catalog`, `lookup_catalog`, `get_product`, `get_terms`, `negotiate`, `buy` and `get_purchase`, with the same arguments as the MCP tool of that name. A data part `{"offer", "quote"?, "with"?}` with no `action` is `buy`; a message in words goes to the seller's agent, which picks one.
- Buying: the task asks for input (`TASK_STATE_INPUT_REQUIRED`, or `input-required` in 0.3) with x402's `PaymentRequired` in its status message's metadata under `x402.payment.required` (x402 over A2A, https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.2), and H and the agreement's link in the task's metadata under `https://lcp.integraledger.com/a2a/legal-context/v1`. Check H as below, then send the signed payment in a second message to the same task, under `x402.payment.payload` with `x402.payment.status: "payment-submitted"`. The completed task carries the delivery, the receipt under `x402.payment.receipts`, and the proof's address.
- UCP's checkout over A2A, as UCP's A2A binding has it: a data part `{"action", …}` naming one of `create_checkout`, `add_to_checkout`, `get_checkout`, `update_checkout`, `complete_checkout` and `cancel_checkout`, the checkout under `a2a.ucp.checkout` and its payment under `a2a.ucp.checkout.payment`, with your platform's profile in `UCP-Agent`. The `contextId` carries the checkout: an action that names no `id` acts on the context's checkout. The profile names the card as the `a2a` transport.

## Check out with UCP, over REST or MCP

- The profile, https://integra-lens-merch-live.demos.integraledger.net/.well-known/ucp (UCP 2026-08-25): the service `dev.ucp.shopping` over `rest` (endpoint https://integra-lens-merch-live.demos.integraledger.net), `mcp` (https://integra-lens-merch-live.demos.integraledger.net/mcp) and `a2a` (the A2A card, https://integra-lens-merch-live.demos.integraledger.net/.well-known/agent-card.json); the capabilities `dev.ucp.shopping.checkout`, `dev.ucp.shopping.order`, `dev.ucp.shopping.discount`, `dev.ucp.shopping.fulfillment`, `dev.ucp.common.payment.terms`, `com.integraledger.lcp.with` and `dev.ucp.common.payment.ap2_mandate`, with the catalogue's; and the payment handler `com.integraledger.lcp.x402` (its declaration's `id` is `lcp_x402`; specification https://lcp.integraledger.com/ucp/x402/2026-10-02), whose `config` names `sandbox`, the network `eip155:84532`, the token `0x036CbD53842c5426634e7929541eC2318f3dCF7e` and the schemes `exact` and `auth-capture`.
- Your platform's profile is required at checkout: send `UCP-Agent: profile="<the URL of your /.well-known/ucp>"` on every REST request, or `meta["ucp-agent"].profile` in every tool's arguments. This shop fetches it, and sends order webhooks to its order capability's `webhook_url`. The catalogue asks for no profile.
- Over REST: `POST https://integra-lens-merch-live.demos.integraledger.net/checkout-sessions` opens a checkout; `GET` and `PUT https://integra-lens-merch-live.demos.integraledger.net/checkout-sessions/<id>` read and update it; `POST https://integra-lens-merch-live.demos.integraledger.net/checkout-sessions/<id>/complete` pays it; `POST https://integra-lens-merch-live.demos.integraledger.net/checkout-sessions/<id>/cancel` cancels it; `GET https://integra-lens-merch-live.demos.integraledger.net/orders/<id>` reads its order. Each request that changes a checkout carries `Idempotency-Key`, a UUID: the same key with another body answers `409`.
- Over MCP: `create_checkout` `{meta, checkout}`, `get_checkout` `{meta, id}`, `update_checkout` `{meta, id, checkout}`, `complete_checkout` `{meta, id, checkout: {payment}}`, `cancel_checkout` `{meta, id}` and `get_order` `{meta, id}`; `complete_checkout` and `cancel_checkout` take `meta["idempotency-key"]`, a UUID. The tools' names do not collide with the kit's own.
- One offer for each checkout, quantity 1: the line's `item.id` is the offer's id, or for a booking a slot variant `<offer>:<slot>`. What an offer asks for goes in UCP's own fields: a name in `buyer.first_name` and `buyer.last_name`, an email in `buyer.email`, a phone number in `buyer.phone_number`, an address as a `shipping` method's selected destination in `fulfillment`; anything else in the checkout's `com.integraledger.lcp.with` member, by its name. What is missing is a `missing` message at its path; a value is at most 1000 characters, and a longer one is `invalid` at its path, never cut. A platform whose profile does not declare the extension an ask needs (`com.integraledger.lcp.with`, or UCP's fulfillment extension for an address) cannot send it: the checkout is `requires_escalation`, with a `requires_buyer_input` message naming the ask, and its `continue_url` is the offer's page, which says how to give it. A checkout opened by a signed request is answered only to requests its platform signs. An agreed price from `negotiate` is a discount code, the negotiation's id, in `discounts.codes`.
- The statuses: `incomplete` while something asked for is missing; `requires_escalation` while the offer asks for something the platform cannot send; `ready_for_complete` once it is priced and sellable, when its agreement is issued; `complete_in_progress` while a payment is sent and not yet confirmed; `completed`, with its `order`, once settled and delivered; `canceled`. Each change of the terms issues a new agreement, with its own H.
- To pay: at `ready_for_complete`, the checkout's `ucp.payment_handlers["com.integraledger.lcp.x402"]` declaration holds as its `config` the x402 `PaymentRequired`: its `extensions.legalContext` holds H and the agreement's link, and its `accepts` the one option, paying the payee on Base Sepolia. The checkout's `links[]` holds `{type: "legal_context", url, title: "lcp:sha256:" + H}`. Check H as below, sign the option as x402 has it signed, and complete with one instrument `{id, handler_id: "lcp_x402", type: "x402", credential: {type: "x402", x402Version: 2, paymentPayload, paymentRequirements}}` in `payment.instruments`. A refused payment is a `payment_failed` message, and the checkout stays open.
- Under AP2 mandates (`dev.ucp.common.payment.ap2_mandate`, when your profile declares it, with a key in its `keys[]`), a platform's agent completes without a person. Every checkout carries `ap2.merchant_authorization`, a detached JWS (ES256, `kid` the key in this profile's `keys[]`) over the RFC 8785 form of the whole checkout without `ap2`. Its `links[]` also hold `{type: "legal_context_agreement", url}`, the agreement step: before you complete, `GET` it and pay its 402, an x402 `exact` payment whose EIP-3009 nonce is H. Then complete with `ap2.checkout_mandate`, an SD-JWT (`<jwt>~`, signed with a key of your profile) whose payload has `vct: "mandate.checkout.1"`, `checkout_jwt` (the merchant authorization with the checkout as its payload) and `checkout_hash` (base64url of its SHA-256), and `exp`; and in the instrument's `credential.token` the payment mandate, an SD-JWT with `vct: "mandate.payment.1"` and `transaction_id` the `checkout_hash`. The EIP-3009 nonce of the payment is keccak256 of the token, as AP2's samples sign it, not H.
- The order: `GET https://integra-lens-merch-live.demos.integraledger.net/orders/<id>` and `get_order` answer UCP's order to the platform whose checkout made it, when the request is signed with that platform's key; anyone else is answered the kit's summary of the delivery. Order webhooks go, signed, to that platform's `webhook_url`.

## Before you sign

- The payment request's `extensions.legalContext.info` holds `value`, the agreement's hash H, and `legalContextUrl`, its link. Fetch the link, hash the exact bytes with SHA-256, and compare with H. Sign only if they match.
- For an offer paid when bought, and for pay later's anchoring payment (x402 `exact`), H is the nonce of the EIP-3009 authorization; for an offer authorised now and collected later (x402 `auth-capture`), H is in the escrow payment's salt. The same offers are offered through MPP too (the `evm` method's `authorization` credential), under an agreement of their own: its challenge's `id` is base64url of its H and the challenge's position, its `opaque` names H, and the EIP-3009 authorization's nonce is keccak256 of the id and the realm.
- An agreement can be paid once, within 15 minutes of its issue.

## The test checkout

`https://integra-lens-merch-live.demos.integraledger.net/test/buy/<offer>` and the tool `test_buy`. A checkout for testing your agent. The hash it advertises has one character changed. An agent that checks signs nothing. Nothing is sold here.

## An agent that signs its requests

This shop reads Web Bot Auth signatures (RFC 9421, tag web-bot-auth, the key named by Signature-Agent) and Visa's Trusted Agent Protocol signatures (tags agent-browser-auth and agent-payer-auth, Visa's key store), and never requires one. There is nothing to register: sign the request and name your key directory in Signature-Agent. What was verified is shown on the purchase's proof page. It is not part of the agreement. An unsigned request is served the same. The algorithms: `ed25519`, `ecdsa-p256-sha256`, `ecdsa-p384-sha384`, `rsa-pss-sha512` and `rsa-v1_5-sha256`.

## After

- Each purchase has a proof page at `https://integra-lens-merch-live.demos.integraledger.net/proof/<H>`, and its record at `https://integra-lens-merch-live.demos.integraledger.net/proof/<H>.json`.

## Documents

- [Terms and conditions of sale](https://integra-lens-merch-live.demos.integraledger.net/terms.md): each offer's terms, with the SHA-256 of their RFC 8785 form.
- [Legal context](https://integra-lens-merch-live.demos.integraledger.net/.well-known/legal-context.json): where the terms are. Its `atrHash` is the terms' hash: the SHA-256 of /terms.md, not an agreement's.
- [UCP profile](https://integra-lens-merch-live.demos.integraledger.net/.well-known/ucp): the services over REST, MCP and A2A, the capabilities, the payment handler, and the app's signing key in `keys[]`.
- [DID document](https://integra-lens-merch-live.demos.integraledger.net/.well-known/did.json): the shop's `did:web:integra-lens-merch-live.demos.integraledger.net`, whose verification method is the same key.
- [Key directory](https://integra-lens-merch-live.demos.integraledger.net/.well-known/http-message-signatures-directory): the same key, as a Web Bot Auth key directory.
- [OpenAPI](https://integra-lens-merch-live.demos.integraledger.net/openapi.json): the doors over HTTP, and what each asks to be paid.
- [ARD and AI Catalog manifest](https://integra-lens-merch-live.demos.integraledger.net/.well-known/ard.json), the same at https://integra-lens-merch-live.demos.integraledger.net/.well-known/ai-catalog.json: one entry each for the MCP server card, the A2A card, the OpenAPI document, the skills index and this file.
- [MCP server card](https://integra-lens-merch-live.demos.integraledger.net/mcp/server-card): the MCP server's name, version and address, before you connect.
- [A2A card](https://integra-lens-merch-live.demos.integraledger.net/.well-known/agent-card.json): the A2A agent, its skills and its extensions.
- [Agent Skills index](https://integra-lens-merch-live.demos.integraledger.net/.well-known/agent-skills/index.json): one skill, [buy-from-integra-lens-merch-shop](https://integra-lens-merch-live.demos.integraledger.net/.well-known/agent-skills/buy-from-integra-lens-merch-shop/SKILL.md), how to buy from this shop; `npx skills add https://integra-lens-merch-live.demos.integraledger.net` installs it.
- [API catalog](https://integra-lens-merch-live.demos.integraledger.net/.well-known/api-catalog): RFC 9727's linkset of the HTTP doors, MCP and A2A, each with what describes it.
- [Connect your agent](https://integra-lens-merch-live.demos.integraledger.net/agents): the same doors, for a person.
- Each offer's page, at `https://integra-lens-merch-live.demos.integraledger.net/products/<offer>`, carries its product as schema.org JSON-LD, named by that address.
