Troubleshooting
Three checks that isolate the layer
Work out which of three things is broken before anything else. They have different fixes and look identical from the chat window.
- Does the client list the server?
/mcpin Claude Code, Settings → MCP in Cursor, the tools icon in Claude. Not listed means the client config is the problem — the server has not been reached. - Does it show 5 tools? Listed with zero tools means it was reached and the credential was not accepted.
- Does a question get a real answer? Ask "are my bundles showing on the storefront right now?". A refusal here is the server talking.
A fourth check, from the app side: open Settings → Integrations and read Last used on the connection. Still Never used means nothing has ever reached the server, whatever the client shows.
Signing in fails
Every message below ends the flow safely — nothing is granted. Start again from your AI client rather than reopening the old link.
| Message | Means | What to do |
|---|---|---|
| This sign-in did not start in this browser | The flow was started somewhere else, or the browser dropped the cookie | Start again, in one browser, from your own client settings |
| This sign-in expired or was already used | More than 30 minutes passed, or the link was opened twice | Start again |
| This sign-in was for a different store | The domain you typed and the store you signed into do not match | Retype the .myshopify.com domain, and sign into that store |
| AOV Bundle is not installed on that store | Right domain, wrong store — or the app is uninstalled | Install the app, or check the domain |
| This sign-in link could not be verified | The return from Shopify was altered in transit | Start again; if it repeats, contact support |
| Unknown client | Your client's registration is gone | Remove the connector and add it again |
| This connector asked to return to an unregistered address | The connector changed its return address after registering | Remove the connector and add it again |
| This request did not come from the consent page | The approval did not come from the page you were shown | Start again from your client, and do not use a link someone sent you |
"This sign-in did not start in this browser" is a security check doing its job. The flow is bound to the browser that opened it, so a consent link forwarded by someone else cannot be used to grant them access to your store. If you did not start this yourself, that is the message telling you so — do not try to work around it.
It is also what you get from an ordinary browser setting: a private window that discards cookies, a strict tracking-protection mode, or starting in one browser and finishing in another. Complete the whole flow in one normal window.
The server does not appear in the client
Claude Desktop was not fully quit. Closing the window is not quitting on macOS. Quit from the menu or with Cmd+Q, then reopen.
Node.js is missing. Only when connecting through mcp-remote — it needs Node.js 18 or newer.
A space after the colon. mcp-remote setups only, and the most common mistake:
Authorization:${AUTH} has no space after the colon. A space breaks how the bridge splits its
arguments, and the only symptom is a server that will not connect.
The JSON is invalid. One trailing comma and the whole file is ignored, including every other server in it. Paste it into a JSON validator before blaming the connection.
The config file was replaced rather than added to. If other MCP servers vanished at the same time, this is what happened.
The server appears, but no tools
The server was reached and the credential was refused. Ask a question and read the refusal.
| Refusal says | Means | What to do |
|---|---|---|
| Unauthorized | The token was not accepted — see below | Check the header first |
| Rate limit exceeded | More than 60 calls in one minute | Wait about a minute |
| Method Not Allowed | The client sent GET; only POST is valid | A client-side problem — check the transport is HTTP, not SSE |
Unauthorized covers more than a revoked token. The same response is returned when the client
sends no token at all, when the token is unknown, when it has been revoked, and when the app is no
longer installed on the store. That is deliberate: telling the difference would let someone use this
endpoint to work out which tokens are real.
So before you create a replacement, rule out the case a new token cannot fix. Check, in this order:
- Is the
Authorizationheader actually present in the client's config, withBearerand a single space? - Is the app still installed on the store? Uninstalling revokes every connection, and reinstalling does not restore them.
- Was the connection revoked in Settings → Integrations? The list shows what exists.
Only after those three is minting a new token the right move. Revoking is not reversible, so a connection destroyed on a wrong guess does not come back.
"Create connection" is greyed out
You are at the limit of 5 tokens created by hand. Revoke one in the connections list to free a slot.
Connections made by signing in do not count against those five, but they do appear in the same list — which is why the count can look wrong. The card's own "N of 5 connections used" is the number that decides whether the button is enabled.
The token was accepted but the answers are wrong
Answers are about a different store. You have two stores connected and both configs name the
server aov-bundle. AI clients key their list by name, so the second silently replaced the first.
Give each store a distinct name, remove both entries, and add them back.
Revenue does not match the dashboard. Check currency in the result. Analytics are reported in
USD regardless of the currency your store sells in, and the date range defaults to the last 30
days when none is given.
"You have 10 offers" and you have more. get_offers defaults to a limit of 10 and says nothing
about it. Ask again with a higher limit.
An offer reads as expired and nobody expired it. Check get_plan_status. On a capped plan,
reaching the cap switches offers off automatically — see
Why did my offers stop mid-month?.
Revenue is reported as zero. Ask whether that was a real zero. When the analytics warehouse
cannot be reached the tool returns analytics_unavailable instead of zeros, so that an outage is
never reported as a bad month — but an assistant can still summarise past it.
The widget is fine and the assistant says it is not
get_setup_status reads your live theme. If you have been editing a draft or a duplicate theme,
the answer is about the published one, which is the right answer to the shopper's question and not
to yours.
Publish the theme you are working on, or read the themeId in the result and check which theme that
actually is.
Reporting a problem
Include:
- The client, and which way you connected — signed in, or a token
- The exact refusal message, read back from the assistant
- The connection name and its Last used value, from Settings → Integrations
- What you asked
Never include the token itself, in a ticket, a screenshot, or a chat log. Support cannot read it back either — the server holds only a fingerprint. If a token has appeared anywhere it should not have, revoke it and create a new one.