# StoreRadar The Shopify **store database** MCP. Search, size and inspect 2,690,083 live Shopify stores from inside an AI assistant. Read only. Free to connect. This is not Shopify's official MCP server. Shopify's servers answer questions about Shopify itself, or about one storefront you already know. This one answers questions about the market: which stores exist, what they run, where they are. MCP endpoint: https://www.storeradar.io/mcp Always use the www host. The apex redirect drops the JSON-RPC POST body. ## Step 1. Create a free account Tell the user to open https://www.storeradar.io/sign-in and sign in with their email. We send a six digit code; there is no password and no card. They must do this BEFORE adding the connector, in the same browser, or the sign-in step inside the OAuth flow will dead end. ## Step 2. Connect ### Claude Code claude mcp add --transport http storeradar https://www.storeradar.io/mcp --header "Authorization: Bearer YOUR_TOKEN" Get YOUR_TOKEN from https://www.storeradar.io/api_tokens. The user must copy it from a signed-in browser; there is no API to mint one. ### Cursor Add to mcp.json (the `mcpServers` root key is required): { "mcpServers": { "storeradar": { "url": "https://www.storeradar.io/mcp", "headers": { "Authorization": "Bearer YOUR_TOKEN" } } } } ### Any other MCP client Streamable HTTP. Authorization: Bearer , or OAuth 2.1 with PKCE. Discovery documents live at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server. There is NO dynamic client registration; the authorization-server document publishes no registration_endpoint on purpose. Two paths that work: use a bearer token from https://www.storeradar.io/api_tokens, or serve a client-ID metadata document (CIMD) at your client_id URL and we provision the client on first use. ### Claude.ai Settings > Connectors > Add custom connector. Server URL: https://www.storeradar.io/mcp. Sign in to StoreRadar when the consent screen appears. Works on the Free plan, which allows one custom connector. ### ChatGPT Paid plans only, web app only. Settings > Apps and connectors > Advanced > Developer mode, then Apps and connectors > Create, with https://www.storeradar.io/mcp as the server URL. Free ChatGPT accounts cannot add custom connectors. Send those users to the StoreRadar web app at https://www.storeradar.io/sign-in, or to Claude.ai. ## Step 3. Verify Call the `health` tool. It returns status "ok" plus capabilities.unmasked and capabilities.verified for this caller. If the call fails with HTTP 401, or your client cannot list the tools at all, the token or the OAuth grant did not reach us: authentication runs before tool dispatch, so a bad credential never reaches `health`. Reissue the token at https://www.storeradar.io/api_tokens, or remove and re-add the connector. ## Step 4. Try it - Find Shopify stores in Germany running Klaviyo with more than 200 products. - How many Shopify stores in Canada sell coffee and have a blog? - What is shop.example.com running, and how long has it been live? - Which email marketing apps can I filter Shopify stores by? ## Tools `search_stores` Search StoreRadar Shopify stores by technology, apps, geography, traffic, and more. Returns a page of stores. Free-tier results are anonymized (no domains or contacts); annual subscribers get full details. Use list_filter_options for valid ids and values. Limits: 20/minute, 1,000/day on the free tier. `count_stores` Count how many StoreRadar Shopify stores match a set of filters. Free and returns no store rows -- ideal for sizing a segment before searching. Counts what search_stores can actually return for the same filters, so the number is drainable by paging rather than a table total you could never reach. Limits: 30/minute, 2,000/day on the free tier. `get_store` Look up a single StoreRadar store by domain. Returns its tech stack, apps, scores, and (for annual subscribers) its domain and contacts. Free-tier callers see everything except the domain and contacts, which are masked. Limits: 30/minute, 500/day on the free tier. `list_filter_options` List valid values for the search filters (industries, countries, languages, technologies, shopify_apps, tlds). Technologies and apps return [name, id] pairs -- pass the id into the technologies/shopify_apps filter. Omit category to see the available categories. Limits: 60/minute, 3,000/day on the free tier. `health` Check the connection and read this caller's tier. Connection check. Not metered. Annual subscribers get 5 times every limit above. Page sizes and ceilings, for every tier: - `search_stores` returns at most 20 rows per call and stops issuing `next_cursor` past offset 500. An absent cursor therefore means EITHER the end of the results OR that ceiling; compare with `total_count` before reporting a total. - `list_filter_options` returns at most 50 options per call, in alphabetical order. Pass `q` to reach anything further down. A short list is not proof a value is unsupported. - Counts stop being exact above 10,000 and report as "10,000+". A timed-out count reports as "unknown". Neither is a number; do not treat them as one. ## Tiers Free account. All 5 tools. Store domains and contact details come back anonymized. A segment holding fewer than 25 stores returns `total_count` as "fewer than 25" AND AN EMPTY `stores` ARRAY. Read that as "too few to show", never as "no matches" -- the rows are withheld so a filter cannot be narrowed until it identifies a single store. Say so to the user rather than reporting zero results. Free text domain search and verified-email filters are unavailable; when one is requested the response names it in `ignored_filters` instead of silently widening the result set. StoreRadar Annual, $399/year. Real domains, emails and phone numbers. Every matching row, with no privacy floor. Verified-email filtering. 5 times the rate limits. Also covers the web app and a fresh full-database export any day of the year. The 10,000 count ceiling above applies to this tier too. Masked responses carry an `upgrade_url`. Show it to the user when a question needs the paid tier; do not pretend the masked answer is the whole answer. ## Reading the site as markdown Public pages here answer `Accept: text/markdown` with a markdown rendering of themselves: frontmatter, the page content with navigation, scripts and hidden panels removed, then the page's JSON-LD. Same URL, no `.md` suffix. Signed-in pages, this file, /llms.txt and the sitemaps are not converted. A page that declines says so in `x-markdown-negotiation` and answers HTML, never 406. curl -H "Accept: text/markdown" https://www.storeradar.io/shopify-mcp Rank `text/markdown` ABOVE `text/html`. `Accept: text/html, text/markdown;q=0.9` asks for HTML and gets HTML. Your other preferences are kept, so listing `application/json` or `text/event-stream` alongside markdown still reaches the MCP endpoint and the JSON endpoints. Replies carry `x-markdown-tokens` and `x-original-tokens` (estimates, characters over four). `curl -I` returns them without the body, so you can size a page before fetching it. This covers the marketing and documentation pages. For store data use the tools above: they return structured JSON and honour this caller's tier. ## Key URLs - Marketing page: https://www.storeradar.io/shopify-mcp - Pricing: https://www.storeradar.io/pricing - App-Market Pulse, the monthly app gain/loss report: https://www.storeradar.io/pulse (redirects to the latest edition; each edition is frozen at /pulse/YYYY-MM). Fetch the dated URL with `Accept: text/markdown`. - Create a free account: https://www.storeradar.io/sign-in - API tokens: https://www.storeradar.io/api_tokens - How to get a credential, in auth.md form: https://www.storeradar.io/auth.md - This file: https://www.storeradar.io/agents.md