Skip to content

Buy from ChatGPT with Atta

Atta runs an MCP server at /api/mcp. Add its URL to ChatGPT as a connector, sign in, pick a workspace and allow it. ChatGPT can then search products, build a cart, check stock and place orders as you. A purchase that needs approval is parked as a request for the approvers instead of being refused or skipped.

Updated November 6, 2026 · By

What ChatGPT can do through Atta

ChatGPT gets the same tools as Atta's own chat agent, under the same names, so one entry in the risk table decides a tool whichever way the call arrives.

ToolWhat it does
searchProducts, getProductSearch the workspace's suppliers, with store and brand preferences applied
viewCart, addToCartRead and build the cart
viewBudgetBudget left, the approval cap and the workspace's mode
listRequests, openRequestSee purchase requests and open one
checkStockItems on hand per location and restock status
trackShipmentsInbound shipments and transfers, and whether they're late
findInvoicesE-invoices sent and received and the purchase each is matched to
listOrdersOrders and their status
checkoutPlaces the order, through the approval policy

Linked stores and the open web aren't offered over MCP. A linked store needs a paired device in the loop.

What happens at checkout

ChatGPT has no approval card that Atta can wait on, so the policy maps like this:

  • auto runs the checkout. The anomaly signals run first, and the undo window is waited out, as for an auto checkout in the Atta chat.
  • deny is refused with the policy's sentence.
  • ask parks the checkout as a request. It's the same row, chain and resume as a parked chat checkout. When the last step is answered, Atta places the order under the requester's scope, for the approved amount and lines only.

ChatGPT's own confirmation prompt doesn't count as approval, since Atta can't see who clicked it.

You, in ChatGPT: order two of the standing desks from the shortlist

ChatGPT: Checkout returned: this needs approval. I've opened request R-218 for $1,180.00. It's with Dana.

The amount comes from the cart, never from what the model types. The per-order cap, the budget and the approval rules all apply. The per-conversation cap does not, since MCP has no conversation. A cart write that would need approval is refused with a pointer to the app, because a parked cart write would be a request nothing resumes.

Text a store wrote comes back wrapped as untrusted data, and the server's instructions say what that means.

Setting it up

  1. Open ChatGPT's connector settings and add a custom MCP connector.
  2. Enter the URL https://<your-host>/api/mcp. No client id or secret is needed. The client registers itself.
  3. Sign in to Atta on the consent page that opens. It names the redirect host so a client that claims to be ChatGPT but sends codes elsewhere shows up.
  4. Pick the workspace it will shop in and press Allow.

The grant shows in Settings, then MCP access, as a connected app. Revoke it there and the refresh token dies with it. An access token lives one hour, and refresh tokens rotate and expire 30 days after last use.

A client that can set headers can use a token from Settings, then MCP access, as Authorization: Bearer smcp_... instead.

Who ChatGPT acts as

A grant acts as one member of one workspace. The role is read from membership on every call, so a person who leaves the workspace loses access without anyone revoking the grant. Requests are limited to 240 a minute per token.

Questions

Can ChatGPT spend money without approval?

No. A checkout goes through the same policy as in Atta. Within your limit it can run; above it, the checkout becomes a request for the approvers and nothing is paid until the last step is answered.

Does ChatGPT see my other workspaces?

No. You choose one workspace on the consent page. The grant acts as you in that workspace only.

Do I need an API key?

No. ChatGPT connects with OAuth, and you sign in to Atta. A token from Settings is for clients that can set headers.

How do I disconnect it?

Revoke the connected app in Settings, then MCP access. It stops working on the next call and the refresh token is revoked with it.

Related