Neonjelly.io
Neonjelly — Shopify store lists, emails, and competitor tracking for your AI.
What it can do
- Whoami: Return this key's plan, used today, remaining quota, rate limit, and expiry. Does not count against daily quota — call first when the user asks “what's my quota?” If remaining is 0 or trial ex
- Upgrade: Return the paid upgrade URL when trial expired, daily quota is 0, or Signals is blocked. Does not count against quota. Always show the returned URL — never invent a checkout link.
- Resolve Store: Resolve a brand name or URL against 1.37M Shopify storefronts and return up to 5 candidates. On a single hit, also return the full store card — call this before inventing a domain; miss
What data it sees
Do you need an account
No: the server works without sign-in
Neonjelly — Shopify store lists, emails, and competitor tracking for your AI. MCP + API over 1.37M stores. 14-day free trial, no account.
Neonjelly is a remote MCP server + REST API over a catalog of 1.37M Shopify stores. Your AI (Cursor, Claude, ChatGPT, VS Code, Windsurf) can pull store lists with emails, filter by country/category/traffic, follow product/price/traffic change feeds, and check whether a product idea is saturated (seller count + verdict). Connect in one click — a 14-day trial (100 lookups/day, 20/min, one per device and AI client) starts on install, no account or card. Paid plans from $29/mo (Explorer / Operator / Scale) add higher quotas and Signals watches. Indexed by EcomScout.
How to connect
How to connect Neonjelly.io to Claude
The server address to paste into Claude settings:
https://neonjelly--ops-qunq.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect Neonjelly.io to ChatGPT
The server address to paste into ChatGPT settings:
https://neonjelly--ops-qunq.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect Neonjelly.io to Cursor
The server address to paste into Cursor settings:
https://neonjelly--ops-qunq.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (60)
Raw names from tools/list. Only developers need these.
| whoami | Return this key's plan, used today, remaining quota, rate limit, and expiry. Does not count against daily quota — call first when the user asks “what's my quota?” If remaining is 0 or trial expired, call upgrade and open the URL. |
| upgrade | Return the paid upgrade URL when trial expired, daily quota is 0, or Signals is blocked. Does not count against quota. Always show the returned URL — never invent a checkout link. |
| resolve_store | Resolve a brand name or URL against 1.37M Shopify storefronts and return up to 5 candidates. On a single hit, also return the full store card — call this before inventing a domain; missing stores stay not_found. |
| list_playbooks | List composed-tool playbooks by job: store lists, VC, competitor, dropship, outreach, merch. Start here when the user has not named a tool — then call the playbook's first tool. |
| get_examples | Same playbook map as list_playbooks (VC, competitor, dropship, outreach). Prefer list_playbooks on new sessions. |
| brief_market | Return a one-page TAM brief: vertical size, geos, movers, and an optional filtered cohort from 1.37M stores. Pass a vertical; quote catalog counts only — do not invent TAM. |
| cohort_tam | Roll a filtered store cohort into a groupBy table (country, vertical, industry, category). This is not the unfiltered get_countries TAM — use that when no filters apply. |
| find_peers | Find stores in the same vertical, country, and visit band as a target domain, then compare cards. Call resolve_store first if you only have a brand name. |
| diligence_pack | Build an IC memo for one domain: card, growth, traffic, stack roles, bestsellers, changes, and contacts. Includes Signals stats only if that domain is already watched. |
| compare_stacks | Compare 2–8 store app stacks: shared vs exclusive apps, tagged by role (email, support, reviews, subs, ads). Pass hostnames, not brand names. |
| competitor_moves | List catalog store and SKU changes plus vertical movers for one competitor domain. Ads and daily units need a paid Signals watch — do not offer create_signal on trial. |
| overlap_vendors | Find product-vendor overlap and the average price gap between two stores. Use after compare_stacks when you need shared suppliers, not shared apps. |
| screen_dropship | List dropship-flagged stores in a vertical/geo plus their cheapest SKUs. Country is a filter, not a login region — quote the catalog flag, do not invent supplier names. |
| source_map | Group a SKU search by vendor: store count and price min/max across the catalog. Use for sourcing or arbitrage after niche_research names the product. |
| winning_skus | List bestsellers, ≥10% markdowns, and new products for a vertical or one store. Require storeVertical or storeDomain — do not call empty. |
| niche_research | Run semantic product-idea search plus a saturation report and the stores that sell the top hit. q is a product name or category, not a domain — quote seller count and the UNTAPPED→SATURATED verdict. |
| search_product_ideas | Search product names/categories and return ideas with seller count, price, and UNTAPPED→SATURATED verdict — not one-store listings. Prefer niche_research when the user asks “is this saturated?” |
| suggest_product_ideas | Autocomplete product-idea names as the user types. Follow with search_product_ideas or niche_research on the chosen row. |
| trending_product_ideas | List product ideas the catalog marks as heating up. Pair a hit with get_product_research and list_product_sellers — do not invent trend scores. |
| get_product_research | Return the saturation report for one product idea. Copy id from search_product_ideas or niche_research — do not invent seller counts. |
| list_product_sellers | List stores selling a product idea, sorted by traffic or price. Copy id from search_product_ideas — this is who-sells-this, not a single merchant SKU list. |
| product_search | Search cross-store SKUs and return rows plus facets (vendors, types, stores, price band). At least one filter is required. For saturation / who-sells-this-idea, use niche_research. |
| product_intel | Build one SKU memo: card, discount vs compare-at, store, SKU change history, and store bestsellers. Pass domain+handle, or q to resolve first. |
| change_tracker | Return a full change board: unified feed, all 8 product change types, 5 store change types, and Signals SKU changes if watched. Prefer this over calling each change tool separately. |
| price_watch | List price decreases and increases across stores or one merchant. Default minPriceChangePct is 10 — raise it to cut noise. |
| assortment_watch | List new and removed SKUs plus bestseller enter/exit. Filter by storeDomain or productType when the user names a shop or category. |
| get_contacts | Return emails, social URLs, and ESP/support app tells for one store. No phone or owner names in this catalog — pass domain or q. |
| find_outreach | Filter the 1.37M-store catalog, hydrate each row, and keep stores that have an email or Instagram. Caps at 10 (each costs a call) — country is a filter, not a login region. |
| get_upstream_health | Return catalog health JSON and whether auth is required. Use when a lookup fails unexpectedly — not for store research. |
| search_stores | Filter 1.37M Shopify stores into a list (emails/socials live on the card) or roll them up with groupBy. Without groupBy you get store cards; with groupBy you get breakdown rows, not stores. Country is a filter, not a login region. |
| get_store | Return one merchant card: traffic, modeled revenue, rating, apps, and socials. Call resolve_store first if you only have a brand name — missing domains stay not_found. |
| compare_stores | Compare 2–8 store cards side by side (traffic, revenue band, apps, rating). Missing domains land in notFound — do not invent the missing rows. |
| get_store_traffic | Return monthly visits and channel mix for one store. Use after get_store when the user asks how traffic is trending. |
| get_store_products | List SKUs for one merchant with price, vendor, type, and bestseller filters. Prefer this over global search_products when you already have a domain. |
| get_store_apps | List Shopify apps detected on one merchant. Use compare_stacks when the user wants shared vs exclusive apps across several domains. |
| get_store_history | Return daily snapshots: visits, revenue band, rating, and product counts, up to 365 days. Use for growth charts after get_store. |
| get_store_changes | List observation diffs for one store: revenue, visits, products, rating, apps. For a mixed product+store board, prefer change_tracker. |
| search_products | Search SKUs across the 368.9M-product catalog. At least one filter is required. For saturation or who-sells-this-idea, use niche_research. |
| get_product | Return one SKU by store domain plus Shopify handle. Use get_store_products or product_search when you do not yet have the handle. |
| get_product_changes | List price, new, removed, position, and bestseller SKU movements. Filter by storeDomain or productType; default noise floor is minPriceChangePct. |
| get_changes | Return the unified store + product movement feed. Prefer change_tracker when the user wants every change type on one board. |
| search_apps | Search the Shopify App Store catalog by name, category, pricing, or rating. Follow a slug with get_app_stores to see which merchants run it. |
| get_app | Return one Shopify app plus an install-base sample. Copy slug from search_apps, then get_app_stores for the merchant list. |
| get_app_stores | List merchants observed running a Shopify app, sorted by visits. Use for “who uses Klaviyo?” store lists — country filters live on search_stores, not here. |
| get_analytics_overview | Return catalog coverage: store/SKU counts, averages, top verticals and countries. Quote these snapshot figures only — do not invent traffic totals. |
| get_verticals | Return market size by vertical (store counts and averages). Pass countryCode to slice one geo — for a filtered cohort, use search_stores with groupBy=vertical. |
| get_countries | Return unfiltered geo TAM (store counts by country). Pass vertical to slice one market; a filtered cohort belongs on search_stores groupBy=country. |
| get_movers | List stores growing or shrinking on visits or modeled revenue. Defaults: metric/direction any, minPct 5. Quote catalog movers only. |
| create_signal | Paid plans only (trial 403). Create a Signals watch on a competitor domain for ads, units, inventory, and social. Tight watch cap; meters the key. No probe, no scrape. |
| list_signals | Paid plans only (trial 403). List Signals watches stored on this Neonjelly key. Then GET a domain that is already on Signals — do not advertise this on trial. |
| get_signal | Paid plans only (trial 403). Return one signal card. id is a Mongo id or a domain already on Signals. |
| get_signal_stats | Paid plans only (trial 403). Return totals plus store profile for a signal. Domain must already be on Signals. |
| get_signal_sales | Paid plans only (trial 403). Return daily units and variants. Needs ≥2 inventory snapshots on the watch — do not invent unit counts. |
| get_signal_inventory | Paid plans only (trial 403). Return the stock timeline for a watched store. Domain must already be on Signals. |
| get_signal_social | Paid plans only (trial 403). Return follower snapshots for a watched store. Domain must already be on Signals. |
| get_signal_ads | Paid plans only (trial 403). Return the ad library or a slice (overview default). No probe — domain must already be on Signals. |
| get_signal_apps | Paid plans only (trial 403). Return apps observed on a tracked store. Set changes=true for app change history. |
| get_signal_product_changes | Paid plans only (trial 403). Return product movements on a tracked store. Catalog-wide SKU moves use get_product_changes. |
| get_signal_insights | Paid plans only (trial 403). Return the insight feed for one watched domain. Prefer this over list_signal_insights. |
| list_signal_insights | Paid plans only (trial 403). Account-wide insight feed — often empty unless the key owns watches. Prefer get_signal_insights with a domain already on Signals. |