🤖 MCP
Authentication

Authentication

There are two ways to connect, and which one you use is decided by your AI client rather than by you. Hosted clients sign in. Desktop and terminal clients send a key.

Sign-inAPI key
ClientsChatGPT, Claude on the webClaude Code, Codex, Cursor, Claude Desktop, ChatGPT desktop
Addresshttps://upsell.avada.io/oauth/mcphttps://upsell.avada.io/mcp
CredentialNone to copy or storeA key beginning aov_mcp_
Sent asHandled by the clientAuthorization: Bearer aov_mcp_…
Access levelYou choose it while approvingYou choose it while creating
Rate limit60 requests per minute, per connection60 requests per minute, per connection
RequiresA paid plan, re-checked on every requestA paid plan, re-checked on every request

Both routes end at the same place: a connection in Settings → MCP connectors, with its own access level, its own last-used time, and its own revoke button.

⚠️

The two addresses are not interchangeable. A hosted client pointed at /mcp has nowhere to put a credential and fails on its first call; a key-based client pointed at /oauth/mcp is asked to sign in and cannot. Use the address the app shows for the client you picked.

Access levels

Every connection carries exactly one, whichever route made it.

LevelShown asThe assistant can
ReadRead onlyRead this store's data only
WriteRead and writeAlso turn campaigns on and off, and edit them
ManageRead, write, and deleteAlso delete campaigns, through the confirmed deletion workflow

A connection starts at Read only unless you deliberately choose otherwise, and the level is enforced on the server: a read-only connection is never offered the write tools at all.

Changing the level later

You do not need to reconnect. On the connections list, each connection has its own controls:

  • Enable write access — read-only connection gains create, edit and status changes
  • Enable deletion access — a write connection also gains deletion
  • Disable deletion access — back to read and write
  • Make read-only — back to reading only

Raising a level asks you to confirm first, because every copy of that connection gains the new permission at once.

Your AI client reads the tool list when it connects, so it will not notice new tools until it reconnects. After raising a level, restart the client — you do not have to re-approve or paste the key again.

Connect by signing in

This is the route for ChatGPT and Claude on the web. Nothing is copied or stored by you.

  1. In AOV.ai Free Gift, go to Settings → MCP connectors and pick your AI app.
  2. Copy the Connection URL shown there and add it in the AI app as a custom connector.
  3. Start the connection in the AI app. It shows a one-time code such as QLB5-FEAX.
  4. Type that code back into the app and click Preview request. You see which app is asking and where it returns to.
  5. Choose the access level, then Approve.

The AI app finishes the handshake by itself within a few seconds. Until it does, the connection shows as Waiting; the list refreshes on its own, so there is no need to reload the page.

The code
Length8 characters, shown grouped as ABCD-1234
Valid for10 minutes
UsesOne. A code that has been approved or denied cannot be used again
⚠️

Only approve a request you just started yourself. The preview names the app and the address it returns to — if either is unfamiliar, Deny. A denied request cannot be revived; the AI app has to start a new one.

Connect with a key

This is the route for Claude Code, Codex, Cursor, Claude Desktop and ChatGPT desktop.

  1. In AOV.ai Free Gift, go to Settings → MCP connectors and pick your client.
  2. Copy the Server address shown there. You will need it alongside the key.
  3. Type a Connection name — use the name of the tool you are connecting, for example Claude Desktop. It is only there to tell connections apart. 1–40 characters.
  4. Choose the Access level.
  5. Click Create key.

The key appears once, with a ready-to-paste setup snippet underneath. Copy the snippet for your tool, then follow Install a client.

⚠️

The key is displayed only at this moment. The server stores a fingerprint of it, not the key, so it cannot be shown again — not by you, and not by support. Put it in a password manager before you close the banner.

If you try to reuse the name of a connection that is still active, the field shows an error and Create key stays disabled. Names have to be distinct so that revoking the right one later is unambiguous.

Where the key goes

Your client sends it as a bearer token on every call:

Authorization: Bearer aov_mcp_your_key_here

The word Bearer, a single space, then the key. A missing prefix produces a refusal that reads like a bad key rather than a bad request, which is a confusing hour to lose. The setup snippets in the app already include it.

Nothing is ever sent in a URL. The key belongs in the Authorization header only.

Reading the connections list

Each connection shows its app icon, a name, its badges, and when it was last used.

BadgeMeans
ActiveThe connection works
WaitingApproved, but the AI app has not finished connecting yet
RevokedTurned off, and will never work again
Read only · Read and write · Read, write, and deleteIts access level

Last-used time is not a live session. AI clients do not hold a socket open to the server — they call it when they need something and then go quiet. Recent use is the only evidence available, so an assistant sitting idle for twenty minutes still reports an old timestamp while remaining perfectly usable.

Revoke, and delete

Revoke stops the connection working. It takes effect on the very next call, it cannot be undone, and it affects only that connection — every other one keeps working. Revoke when a key may have leaked, when you stop using a tool, or when a laptop leaves your control.

Delete appears only on a connection that is already revoked. It removes the row from the list. It does not stop anything — revoking already did that — it just keeps the list readable once you have a few spent connections.

This key does not work anywhere else

Free Gift issues keys for two separate surfaces, and they are deliberately not interchangeable:

PrefixSurfaceFor
aov_mcp_/mcpAI clients
aov_sk_/store-api/v1Your own scripts and integrations

A key minted for one is refused by the other. Paste an aov_mcp_ key into a REST integration and it is turned down as the wrong surface, rather than quietly becoming a second credential you have to track. Revoking one surface never disturbs the other.

Keeping a connection safe

  • Never paste a key into a chat, an issue, a commit, or a screenshot.
  • Keep it out of shared config files and anything that reaches a repository. Where a client supports it, put it in an environment variable rather than inline — the Claude Desktop snippet does this.
  • Use one named connection per tool. Shared credentials make the connections list meaningless and turn revoking into a choice between breaking everything and breaking nothing.
  • Grant the lowest level that does the job. A tool you are still evaluating has no business holding delete access, and lowering a level later takes one click.
  • Revoke rather than reuse. Creating a replacement takes a few seconds.

Reading an authentication error

Your assistant will read the refusal back to you in plain language. Each one is specific about what to do, and in particular about what not to do.

Message saysMeansAction
No key was sentThe client is not passing the header at allFix the client config. Do not revoke your key — it is not the problem
This connection was revokedIt was turned off in the appMake a new connection
This connection is read-onlyThe assistant tried to change somethingEnable write access for it, then restart the client
Not included in your current planThe store is no longer on a paid planUpgrade; the same connection resumes working
This is a Store API keyAn aov_sk_ key was used on /mcpCreate an AI connection key instead
The app is no longer installedThe store uninstalled Free GiftReinstall. Revoking and re-minting will not help
Hit its limit of 60 requests per minuteToo many calls in one minuteWait about a minute

Full symptom-by-symptom detail is in Troubleshooting.

Related

Product
Install AppWebsiteAvada Apps
Resources
DocumentationFAQPrivacy Policy
Company
Avada GroupContact
© 2026 Avada Group. All rights reserved.