Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,544Letters: 14Defects: 1,324counted just now
teppi

Server definition

Hash
sha256:dcd8628d60ebcab88aed6e76815cdbe39a72c6a34c240ecd4b4154739d084ff2
What it is
What a remote MCP server returned when asked what it offers: 60 tools

The blob, as servednamed by its sha256

{ "instructions": "Neonjelly is ecommerce intelligence for agents over a live catalog of 1.37M Shopify stores and 368.9M SKUs. Prefer composed tools. Call whoami for plan, used today, remaining quota, expiry, and bound AI clients (not metered). Start with list_playbooks. Store lists: search_stores (full catalog filters) or find_outreach (email/Instagram, cap 10). One shop: resolve_store then get_store — never invent a domain. Saturation: niche_research (q is a product name, not a domain). When trial expires, daily quota hits 0, or a tool returns trial_used / quota exceeded / Signals paid-only, call upgrade and show the user the checkout URL (do not invent one). VC: brief_market → find_peers → diligence_pack. Competitor: compare_stacks / competitor_moves / create_signal. Dropship: niche_research / screen_dropship / source_map. Outreach: get_contacts / find_outreach. Merch: niche_research or product_search → change_tracker / price_watch. Track stores via catalog change feeds (products, traffic, revenue). Trial: 14 days, 100/day, 20/min, one per device and AI client — expired trial must purchase, not remint. Signals: create_signal and signal reads are paid only (trial 403). No scrape. No probe. No catalog create/patch/delete. Missing store stays not_found. Do not invent sales or saturation numbers. Do not name third-party data vendors unless the user asks.", "tools": [ { "description": "List new and removed SKUs plus bestseller enter/exit. Filter by storeDomain or productType when the user names a shop or category.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Assortment rows. Max 50.", "maximum": 50, "minimum": 1, "type": "integer" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" }, "storeDomain": { "description": "Limit to one merchant hostname. Example: gymshark.com", "type": "string" } }, "type": "object" }, "name": "assortment_watch", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "minVisits": { "description": "Minimum monthly visits. Example: 10000", "type": "number" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "brief_market", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Optional store hostname without protocol. Example: gruntstyle.com", "type": "string" }, "limit": { "description": "SKU rows. Max 80.", "maximum": 80, "minimum": 1, "type": "integer" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" } }, "type": "object" }, "name": "change_tracker", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "category": { "description": "Store category label from the catalog.", "type": "string" }, "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "groupBy": { "description": "Roll rows into a breakdown table instead of store cards.", "enum": [ "country", "vertical", "industry", "category" ], "type": "string" }, "groupMetric": { "description": "How to aggregate visits/revenue when groupBy is set.", "enum": [ "mean", "median", "max", "min" ], "type": "string" }, "isDropshipper": { "description": "If true, only stores the catalog flags as dropship.", "type": "boolean" }, "minVisits": { "description": "Minimum monthly visits. Example: 10000", "type": "number" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "cohort_tam", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Compare 2–8 store app stacks: shared vs exclusive apps, tagged by role (email, support, reviews, subs, ads). Pass hostnames, not brand names.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domains": { "description": "2–8 store hostnames. Example: [\"gymshark.com\",\"allbirds.com\"]", "items": { "type": "string" }, "maxItems": 8, "minItems": 2, "type": "array" } }, "required": [ "domains" ], "type": "object" }, "name": "compare_stacks", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Compare 2–8 store cards side by side (traffic, revenue band, apps, rating). Missing domains land in notFound — do not invent the missing rows.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domains": { "description": "2–8 store hostnames. Example: [\"gymshark.com\",\"allbirds.com\"]", "items": { "type": "string" }, "maxItems": 8, "minItems": 2, "type": "array" } }, "required": [ "domains" ], "type": "object" }, "name": "compare_stores", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "competitor_moves", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "autoTrack": { "description": "Signals auto-track mode. bestsellers watches top SKUs; none is the card only.", "enum": [ "bestsellers", "none" ], "type": "string" }, "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "create_signal", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "diligence_pack", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "appSlug": { "description": "Shopify app slug. Example: klaviyo-email-marketing", "type": "string" }, "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "limit": { "description": "Max stores to hydrate. Caps at 10 — each costs a catalog call.", "maximum": 10, "minimum": 1, "type": "integer" }, "minVisits": { "description": "Minimum monthly visits. Example: 10000", "type": "number" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "find_outreach", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "limit": { "description": "How many peer stores to return. Default 8, max 25.", "maximum": 25, "minimum": 2, "type": "integer" } }, "required": [ "domain" ], "type": "object" }, "name": "find_peers", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return catalog coverage: store/SKU counts, averages, top verticals and countries. Quote these snapshot figures only — do not invent traffic totals.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_analytics_overview", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return one Shopify app plus an install-base sample. Copy slug from search_apps, then get_app_stores for the merchant list.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "slug": { "description": "Shopify App Store slug. Example: klaviyo-email-marketing", "minLength": 1, "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get_app", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "slug": { "description": "Shopify App Store slug. Example: klaviyo-email-marketing", "minLength": 1, "type": "string" } }, "required": [ "slug" ], "type": "object" }, "name": "get_app_stores", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return the unified store + product movement feed. Prefer change_tracker when the user wants every change type on one board.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Optional store hostname without protocol. Example: gruntstyle.com", "type": "string" }, "entity": { "description": "Limit the unified change feed to products or stores.", "enum": [ "product", "store" ], "type": "string" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" } }, "type": "object" }, "name": "get_changes", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return emails, social URLs, and ESP/support app tells for one store. No phone or owner names in this catalog — pass domain or q.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Optional store hostname without protocol. Example: gruntstyle.com", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" } }, "type": "object" }, "name": "get_contacts", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return unfiltered geo TAM (store counts by country). Pass vertical to slice one market; a filtered cohort belongs on search_stores groupBy=country.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "get_countries", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Same playbook map as list_playbooks (VC, competitor, dropship, outreach). Prefer list_playbooks on new sessions.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_examples", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List stores growing or shrinking on visits or modeled revenue. Defaults: metric/direction any, minPct 5. Quote catalog movers only.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "direction": { "description": "Mover direction. Default any.", "enum": [ "up", "down", "any" ], "type": "string" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "metric": { "description": "Mover metric. Default any.", "enum": [ "visits", "revenue", "any" ], "type": "string" }, "minPct": { "description": "Minimum percent move for movers. Default 5.", "type": "number" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "get_movers", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return one SKU by store domain plus Shopify handle. Use get_store_products or product_search when you do not yet have the handle.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "handle": { "description": "Shopify product handle from the PDP URL. Example: classic-hoodie", "minLength": 1, "type": "string" } }, "required": [ "domain", "handle" ], "type": "object" }, "name": "get_product", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List price, new, removed, position, and bestseller SKU movements. Filter by storeDomain or productType; default noise floor is minPriceChangePct.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "changeType": { "description": "One SKU movement type.", "enum": [ "price_increase", "price_decrease", "new_product", "removed_product", "position_up", "position_down", "best_seller_entered", "best_seller_exited" ], "type": "string" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "minPriceChangePct": { "description": "Minimum absolute price-change percent. Default 10.", "type": "number" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" }, "storeDomain": { "description": "Limit to one merchant hostname. Example: gymshark.com", "type": "string" } }, "type": "object" }, "name": "get_product_changes", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return the saturation report for one product idea. Copy id from search_product_ideas or niche_research — do not invent seller counts.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Product-idea id from search_product_ideas or niche_research.", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_product_research", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return one signal card. id is a Mongo id or a domain already on Signals.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return the ad library or a slice (overview default). No probe — domain must already be on Signals.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "days": { "description": "Lookback window in days for ad slices. Max 365.", "maximum": 365, "minimum": 1, "type": "integer" }, "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "slice": { "description": "Ad library slice. Default overview.", "enum": [ "overview", "ads", "correlation", "revenue", "product-impact", "timeline", "events" ], "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_ads", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return apps observed on a tracked store. Set changes=true for app change history.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "changes": { "description": "If true, return app change history instead of the current stack.", "type": "boolean" }, "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_apps", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return the insight feed for one watched domain. Prefer this over list_signal_insights.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_insights", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return the stock timeline for a watched store. Domain must already be on Signals.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_inventory", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return product movements on a tracked store. Catalog-wide SKU moves use get_product_changes.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_product_changes", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return daily units and variants. Needs ≥2 inventory snapshots on the watch — do not invent unit counts.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "from": { "description": "Inclusive start date YYYY-MM-DD.", "type": "string" }, "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "to": { "description": "Inclusive end date YYYY-MM-DD.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_sales", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return follower snapshots for a watched store. Domain must already be on Signals.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_social", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Paid plans only (trial 403). Return totals plus store profile for a signal. Domain must already be on Signals.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Signal Mongo id or a domain already on Signals. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "get_signal_stats", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_store", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List Shopify apps detected on one merchant. Use compare_stacks when the user wants shared vs exclusive apps across several domains.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_store_apps", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List observation diffs for one store: revenue, visits, products, rating, apps. For a mixed product+store board, prefer change_tracker.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "changeType": { "description": "One store observation-diff type.", "enum": [ "revenue_change", "visits_change", "products_change", "rating_change", "apps_change" ], "type": "string" }, "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_store_changes", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return daily snapshots: visits, revenue band, rating, and product counts, up to 365 days. Use for growth charts after get_store.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "limit": { "description": "Daily snapshot days. Max 365.", "maximum": 365, "minimum": 1, "type": "integer" } }, "required": [ "domain" ], "type": "object" }, "name": "get_store_history", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List SKUs for one merchant with price, vendor, type, and bestseller filters. Prefer this over global search_products when you already have a domain.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "isBestSeller": { "description": "If true, only SKUs currently flagged as bestsellers.", "type": "boolean" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "order": { "description": "Sort direction. Default desc.", "enum": [ "asc", "desc" ], "type": "string" }, "priceMax": { "description": "Maximum listed price in store currency.", "type": "number" }, "priceMin": { "description": "Minimum listed price in store currency.", "type": "number" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" }, "sort": { "description": "SKU sort: price, merchandising position, or last scrape.", "enum": [ "price", "position", "scraped" ], "type": "string" }, "tag": { "description": "Shopify product tag.", "type": "string" }, "vendor": { "description": "Product vendor / supplier name as listed on the storefront.", "type": "string" } }, "required": [ "domain" ], "type": "object" }, "name": "get_store_products", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return monthly visits and channel mix for one store. Use after get_store when the user asks how traffic is trending.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Store hostname without protocol. Example: gruntstyle.com", "minLength": 1, "type": "string" }, "limit": { "description": "Monthly traffic points. Max 120.", "maximum": 120, "minimum": 1, "type": "integer" } }, "required": [ "domain" ], "type": "object" }, "name": "get_store_traffic", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Return catalog health JSON and whether auth is required. Use when a lookup fails unexpectedly — not for store research.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_upstream_health", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "get_verticals", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_playbooks", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "id": { "description": "Product-idea id from search_product_ideas or niche_research.", "minLength": 1, "type": "string" }, "limit": { "description": "Sellers to return. Max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "description": "1-based page. Default 1.", "minimum": 1, "type": "integer" }, "sort": { "description": "Seller list sort: store traffic or SKU price.", "enum": [ "traffic", "price" ], "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "list_product_sellers", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" } }, "type": "object" }, "name": "list_signal_insights", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" } }, "type": "object" }, "name": "list_signals", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Product ideas to return. Max 40.", "maximum": 40, "minimum": 1, "type": "integer" }, "market": { "description": "Keep ideas with this saturation verdict only.", "enum": [ "UNTAPPED", "LOW COMPETITION", "COMPETITIVE", "SATURATED" ], "type": "string" }, "q": { "description": "Product name or category, not a domain. Example: neck fan or yoga mat", "minLength": 2, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "niche_research", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Find product-vendor overlap and the average price gap between two stores. Use after compare_stacks when you need shared suppliers, not shared apps.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domainA": { "description": "First store hostname. Example: gymshark.com", "minLength": 1, "type": "string" }, "domainB": { "description": "Second store hostname. Example: allbirds.com", "minLength": 1, "type": "string" }, "limit": { "description": "Shared-vendor rows to return. Min 5, max 80.", "maximum": 80, "minimum": 5, "type": "integer" } }, "required": [ "domainA", "domainB" ], "type": "object" }, "name": "overlap_vendors", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List price decreases and increases across stores or one merchant. Default minPriceChangePct is 10 — raise it to cut noise.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Change rows. Max 60.", "maximum": 60, "minimum": 1, "type": "integer" }, "minPriceChangePct": { "description": "Minimum absolute price-change percent. Default 10.", "type": "number" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" }, "storeDomain": { "description": "Limit to one merchant hostname. Example: gymshark.com", "type": "string" } }, "type": "object" }, "name": "price_watch", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Build one SKU memo: card, discount vs compare-at, store, SKU change history, and store bestsellers. Pass domain+handle, or q to resolve first.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "domain": { "description": "Optional store hostname without protocol. Example: gruntstyle.com", "type": "string" }, "handle": { "description": "Optional Shopify product handle. Example: classic-hoodie", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" } }, "type": "object" }, "name": "product_intel", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "isBestSeller": { "description": "If true, only SKUs currently flagged as bestsellers.", "type": "boolean" }, "limit": { "description": "SKU rows. Max 80.", "maximum": 80, "minimum": 1, "type": "integer" }, "order": { "description": "Sort direction. Default desc.", "enum": [ "asc", "desc" ], "type": "string" }, "priceMax": { "description": "Maximum listed price in store currency.", "type": "number" }, "priceMin": { "description": "Minimum listed price in store currency.", "type": "number" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" }, "sort": { "description": "SKU sort: price, merchandising position, or last scrape.", "enum": [ "price", "position", "scraped" ], "type": "string" }, "storeDomain": { "description": "Limit to one merchant hostname. Example: gymshark.com", "type": "string" }, "storeVertical": { "description": "Vertical of the selling store. Example: Apparel", "type": "string" }, "tag": { "description": "Shopify product tag.", "type": "string" }, "vendor": { "description": "Product vendor / supplier name as listed on the storefront.", "type": "string" } }, "type": "object" }, "name": "product_search", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "q": { "description": "Brand, product, or free-text query. Example: gymshark or neck fan", "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "resolve_store", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "limit": { "description": "How many dropship-flagged stores to screen. Max 12.", "maximum": 12, "minimum": 1, "type": "integer" }, "minVisits": { "description": "Minimum monthly visits. Example: 10000", "type": "number" }, "priceMax": { "description": "Maximum listed price in store currency.", "type": "number" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "screen_dropship", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "builtForShopify": { "description": "If true, only Built for Shopify apps.", "type": "boolean" }, "category": { "description": "Store category label from the catalog.", "type": "string" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "minRating": { "description": "Minimum store or app rating 0–5. Example: 4.2", "type": "number" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "order": { "description": "Sort direction. Default desc.", "enum": [ "asc", "desc" ], "type": "string" }, "pricingType": { "description": "App Store pricing type filter. Example: free or subscription", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" }, "sort": { "description": "App catalog sort. Default rating.", "enum": [ "rating", "reviews", "name" ], "type": "string" } }, "type": "object" }, "name": "search_apps", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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?”", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "countries": { "description": "ISO-2 country list, comma-separated. Example: US,GB,CA", "type": "string" }, "market": { "description": "Comma verdicts: UNTAPPED,LOW COMPETITION,COMPETITIVE,SATURATED", "type": "string" }, "page": { "description": "1-based page. Default 1.", "minimum": 1, "type": "integer" }, "priceMax": { "description": "Maximum listed price in store currency.", "type": "number" }, "priceMin": { "description": "Minimum listed price in store currency.", "type": "number" }, "q": { "description": "Product name or category, not a domain. Example: neck fan or yoga mat", "minLength": 2, "type": "string" }, "region": { "description": "Optional region label for product-idea search.", "type": "string" }, "trending": { "description": "If true, only ideas marked trending.", "type": "boolean" } }, "required": [ "q" ], "type": "object" }, "name": "search_product_ideas", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Search SKUs across the 368.9M-product catalog. At least one filter is required. For saturation or who-sells-this-idea, use niche_research.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "isBestSeller": { "description": "If true, only SKUs currently flagged as bestsellers.", "type": "boolean" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "order": { "description": "Sort direction. Default desc.", "enum": [ "asc", "desc" ], "type": "string" }, "priceMax": { "description": "Maximum listed price in store currency.", "type": "number" }, "priceMin": { "description": "Minimum listed price in store currency.", "type": "number" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" }, "sort": { "description": "SKU sort: price, merchandising position, or last scrape.", "enum": [ "price", "position", "scraped" ], "type": "string" }, "storeDomain": { "description": "Limit to one merchant hostname. Example: gymshark.com", "type": "string" }, "storeVertical": { "description": "Vertical of the selling store. Example: Apparel", "type": "string" }, "tag": { "description": "Shopify product tag.", "type": "string" }, "vendor": { "description": "Product vendor / supplier name as listed on the storefront.", "type": "string" } }, "type": "object" }, "name": "search_products", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "appSlug": { "description": "Shopify app slug. Example: klaviyo-email-marketing", "type": "string" }, "category": { "description": "Store category label from the catalog.", "type": "string" }, "countryCode": { "description": "ISO-3166 alpha-2 country filter, not a login region. Example: US, GB, IN", "type": "string" }, "groupBy": { "description": "Roll rows into a breakdown table instead of store cards.", "enum": [ "country", "vertical", "industry", "category" ], "type": "string" }, "groupBy2": { "description": "Second breakdown axis. Same values as groupBy. Example: country", "enum": [ "country", "vertical", "industry", "category" ], "type": "string" }, "groupMetric": { "description": "How to aggregate visits/revenue when groupBy is set.", "enum": [ "mean", "median", "max", "min" ], "type": "string" }, "industry": { "description": "Store industry label from the catalog.", "type": "string" }, "isDropshipper": { "description": "If true, only stores the catalog flags as dropship.", "type": "boolean" }, "limit": { "description": "Page size. Default 20, max 100.", "maximum": 100, "minimum": 1, "type": "integer" }, "maxRevenue": { "description": "Maximum modeled monthly revenue in USD. Example: 1000000", "type": "number" }, "maxVisits": { "description": "Maximum monthly visits. Example: 500000", "type": "number" }, "minRating": { "description": "Minimum store or app rating 0–5. Example: 4.2", "type": "number" }, "minRevenue": { "description": "Minimum modeled monthly revenue in USD. Example: 50000", "type": "number" }, "minVisits": { "description": "Minimum monthly visits. Example: 10000", "type": "number" }, "offset": { "description": "Skip this many rows. Pair with limit to page.", "minimum": 0, "type": "integer" }, "order": { "description": "Sort direction. Default desc.", "enum": [ "asc", "desc" ], "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" }, "sort": { "description": "Store list sort. Use stores when groupBy is set.", "enum": [ "visits", "revenue", "rating", "domain", "stores" ], "type": "string" }, "vertical": { "description": "Catalog vertical. Example: Skincare, Apparel, Fashion", "type": "string" } }, "type": "object" }, "name": "search_stores", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Vendor groups to return. Min 5, max 80.", "maximum": 80, "minimum": 5, "type": "integer" }, "priceMax": { "description": "Maximum listed price in store currency.", "type": "number" }, "productType": { "description": "Shopify product type. Example: T-Shirt or Hoodie", "type": "string" }, "q": { "description": "Optional free-text query. Example: hoodie or gymshark", "type": "string" }, "storeVertical": { "description": "Vertical of the selling store. Example: Apparel", "type": "string" }, "vendor": { "description": "Product vendor / supplier name as listed on the storefront.", "type": "string" } }, "type": "object" }, "name": "source_map", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "Autocomplete product-idea names as the user types. Follow with search_product_ideas or niche_research on the chosen row.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "limit": { "description": "Autocomplete rows. Max 15.", "maximum": 15, "minimum": 1, "type": "integer" }, "q": { "description": "Brand, product, or free-text query. Example: gymshark or neck fan", "minLength": 1, "type": "string" } }, "required": [ "q" ], "type": "object" }, "name": "suggest_product_ideas", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "trending_product_ideas", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "upgrade", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "whoami", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } }, { "description": "List bestsellers, ≥10% markdowns, and new products for a vertical or one store. Require storeVertical or storeDomain — do not call empty.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "since": { "description": "Inclusive start date YYYY-MM-DD. Example: 2026-08-01", "type": "string" }, "storeDomain": { "description": "Limit to one merchant hostname. Example: gymshark.com", "type": "string" }, "storeVertical": { "description": "Vertical of the selling store. Example: Apparel", "type": "string" } }, "type": "object" }, "name": "winning_skus", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": true, "description": "JSON object this tool returns. Catalog tools wrap upstream rows; whoami/upgrade return quota fields.", "properties": { "error": { "description": "Set when the call failed. Example: not_found", "type": "string" }, "message": { "description": "Human-readable error or hint", "type": "string" } }, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:dcd8628d60ebcab88aed6e76815cdbe39a72c6a34c240ecd4b4154739d084ff2 | sha256sum