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 yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:dcd8628d60ebcab88aed6e76815cdbe39a72c6a34c240ecd4b4154739d084ff2 | sha256sum