Undercart
Server Details
Shopify store intelligence: search 700K+ stores by revenue, apps and traffic; ads and emails.
- Status
- Healthy
- Uptime
- 58.4% over 21 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 9 tools
Most tools target clearly distinct resources: search across the catalog, a store profile, similar stores, ads, emails, technologies, categories. The one real overlap is get_store_email vs get_store_email_html — the latter is described as an 'internal companion' widget backend, which an agent could easily pick in place of the former. Tech-stack data also appears inside get_store and again in list_store_technologies, though the descriptions distinguish depth/timeline.
Every tool is snake_case and verb-first (get_/find_/list_/search_), with get_store_* forming a predictable family. Plural/singular is used meaningfully: get_store_emails lists, get_store_email fetches one. The only wrinkle is get_store_email vs get_store_email_html, but the naming itself still points to the relationship.
Nine tools is well within the sweet spot and each covers a distinct facet of Shopify store intelligence (search, profile, ads, emails, tech, categories, lookalikes). No tool feels like filler, and the surface isn't padded with per-field getters.
Read-only coverage of the domain is strong: discovery, profile, competitive lookalikes, ads, email capture, tech stack, and filter taxonomy. Gaps are minor but real — no product-catalog or review-detail retrieval despite review/brand filters in search, and no comparison or bulk/batch store lookup. Agents can work around these via search_stores and get_store.
Available Tools
9 toolsfind_similar_storesFind similar storesARead-onlyInspect
Find Shopify stores similar to a given store: same category and a 0.5x-2x window on annual revenue (the estimate, or the preliminary range's figure for a store not yet researched). Useful for competitive sets and lookalikes. Returns an error if the domain is unknown. Uses search credits like search_stores.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max similar stores to return (default 10). The Free plan returns at most 15 per search. | |
| domain | Yes | The reference store domain, e.g. "allbirds.com". Normalized automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), yet the description still adds real behavioral context: the revenue estimate vs. preliminary-range fallback for un-researched stores, an explicit error on unknown domains, and credit consumption. It stops short of describing result ordering or what an empty result set looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the matching definition, then usage, then failure/credit conditions. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description covers the match criteria, the unknown-domain failure, and the credit cost, which is most of what an agent needs. It leaves the return shape (list of store records, presumably) implicit, which is a minor gap for a read-only lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so 'domain' and 'limit' (default 10, max 15 on Free, hard cap 50) are fully documented in the schema already. The description adds the semantic of what counts as 'similar' for the matching revenue figure, but nothing about the domain normalization or limit behavior, so the baseline 3 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Find Shopify stores similar to a given store') and immediately defines the matching rule: same category plus a 0.5x-2x annual-revenue window. That specificity separates it from get_store (single lookup) and search_stores (keyword search) without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for competitive sets and lookalikes' gives a use context, and 'Uses search credits like search_stores' hints at a cost relationship with a sibling. However, it never states when to prefer this over search_stores, nor any exclusion such as what happens for a domain that is known but has no close matches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storeGet store profileARead-onlyInspect
Get the intelligence profile for a single Shopify store by domain: revenue estimate (annual before monthly), order estimates, Shopify plan, category, country, founding year, product catalog stats, full technology stack, advertising presence, traffic rank and year-on-year trend, top markets, and social profiles. If Undercart hasn't researched the store yet, this call starts that research and waits for it (usually 15-30 seconds); if it needs longer, the answer carries research.status "researching" with retryAfterSeconds — call get_store again for the same domain after that many seconds (free). A Shopify store Undercart doesn't track yet is added the same way; a domain that isn't a Shopify store returns an error saying so. Research has a daily allowance per account; past it, the answer has public-web data only (enriched: false, see dataNote). Names the site a redirecting domain now lands on. On a capped plan (Free) the first time a store is opened in a month uses 5 of the account's monthly store lookups; opening it again that month is free, whether on Undercart or through any tool.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Store domain, e.g. "allbirds.com" or "https://www.allbirds.com". Normalized automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description goes well beyond that by disclosing the on-demand research kickoff and wait behavior, retryAfterSeconds semantics, the non-Shopify error, daily research allowance, the enriched:false fallback with dataNote, redirect naming, and the monthly store-lookup quota mechanics on capped plans.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core purpose (what profile data is returned) before moving to research/retry behavior, error cases, and quota rules. Every sentence carries needed information, though the single long paragraph is heavier than ideal and could be broken into clearer sub-clauses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and does so thoroughly: it lists the returned profile fields, explains the research/retry flow, the non-Shopify error, the enriched:false fallback, and the quota model. An agent has enough information to call it and interpret both normal and edge-case responses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, and the schema already states that the domain is normalized automatically. The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get the intelligence profile for a single Shopify store by domain. It enumerates the profile contents (revenue, orders, plan, tech stack, ads, traffic, etc.), which implicitly and clearly differentiates it from the narrower siblings get_store_ads, get_store_email, and get_store_emails, as well as from search_stores/find_similar_stores.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly explains the context of use (single store by domain), what happens when the store hasn't been researched (starts research and waits 15-30s), the retryWithAfterSeconds pattern, the error for non-Shopify domains, and quota consumption. It does not explicitly name alternative sibling tools, but the usage conditions are otherwise explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_adsGet store adsARead-onlyInspect
The store's advertising activity: per-platform ad presence (active, ad count, estimated monthly spend) and, when a platform is specified, the actual ads currently in that platform's public ad library — headline, body copy, CTA, landing page, first/last seen, and a link to the ad in the library. Each creative carries publicly-fetchable undercart.co imageUrl/videoUrl links serving the actual media (valid ~1 day), which show the ad itself. Creative lookups are cached ~1 day. A store with enriched: false has no ad data yet. Metered like get_store (once per store per month).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max creatives to return (default 6, max 24). | |
| domain | Yes | Store domain, e.g. "allbirds.com". Normalized automatically. | |
| platform | No | Ad platform to fetch actual creatives from. Omit to get the cross-platform presence summary only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld/destructive annotations, it discloses several non-obvious traits: imageUrl/videoUrl links expire in ~1 day, creative lookups are cached ~1 day, stores with enriched: false return no ad data, and calls are metered once per store per month. These are exactly the cost, freshness, and data-availability caveats an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the data domain, then the conditional creative mode, then freshness/metering caveats — every sentence carries information. It is dense and slightly run-on in the first sentence, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and delivers: it enumerates returned fields, explains the two response modes, and covers caching, link expiry, enriched:false emptiness, and metering. An agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces that omitting platform changes the return shape and that limit bounds creatives, but this largely restates the schema's own platform and limit descriptions rather than adding format or constraint detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource (store advertising activity) and precisely enumerates both return modes: cross-platform presence (active, ad count, estimated monthly spend) and per-platform creatives with named fields. It distinguishes itself from siblings by noting it is "metered like get_store", signalling a different data domain than get_store_email or list_store_technologies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditional usage: specify platform to get actual creatives, omit it for the presence summary only, and it names the metering sibling get_store for cost comparison. It stops short of explicit when-not-to-use guidance against the other eight siblings, so it is clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_emailRead one marketing emailARead-onlyInspect
One captured marketing email, by store domain and email id from get_store_emails: the plain-text body, plus — only when includeHtml is true — the sanitized HTML source (htmlBody) for re-rendering the email visually for the user, e.g. as an artifact. Free (not metered) — the get_store_emails call that produced the id already counted the store.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The store domain the email belongs to. | |
| emailId | Yes | An email id returned by get_store_emails. | |
| includeHtml | No | Include the email's sanitized HTML source (htmlBody). Only set when re-rendering the email visually — it's a large blob of raw HTML; the plain-text body is better for reading. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only, non-destructive, non-open-world safety profile, so the bar is lower. The description adds genuinely useful context beyond that: the call is free/not metered, the HTML payload is a large raw blob that is sanitized, and the plain-text body is preferable for reading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource being fetched, then the return content, then the billing note. Dense but every clause carries information; the em-dash-heavy phrasing is slightly harder to scan but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly describes what comes back (plain-text body, optional htmlBody) and covers all three parameters. The only shortfall is that it never addresses how this differs from get_store_email_html, leaving sibling selection partly ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value for includeHtml — what it returns (htmlBody), when to enable it (visual re-rendering/artifact), and the size/tradeoff warning — plus it reinforces emailId's provenance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific retrieval action on a specific resource ('One captured marketing email, by store domain and email id') and identifies the sibling that produces the id (get_store_emails). An agent can distinguish this single-item fetch from the list-producing sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the precondition (the id comes from get_store_emails) and gives a when-to-use rule for includeHtml ('only set when re-rendering the email visually'). It does not, however, acknowledge the closely related sibling get_store_email_html, which an agent might otherwise consider an alternative — the one obvious routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_email_htmlEmail HTML (for the email-viewer widget)ARead-onlyInspect
Internal companion to get_store_email used by the email-viewer widget: returns one captured email's sanitized, image-rewritten HTML, with no plain-text body.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The store domain the email belongs to. | |
| emailId | Yes | An email id returned by get_store_emails. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/destructive/openWorld, but the description adds real behavioral detail beyond them: the HTML is sanitized, images are rewritten, and no plain-text body is included. This tells an agent what the payload actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the key fact (returns HTML) and immediately qualifies scope (sanitized, image-rewritten, no plain text). No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well, stating the HTML-only nature and the sanitization/rewriting transformations. For a simple two-param read tool with readOnly annotations, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (domain, emailId) are already documented in the schema, including that emailId comes from get_store_emails. The description adds no parameter meaning beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns one captured email's sanitized, image-rewritten HTML. It differentiates itself from get_store_email by noting it is a companion that emits HTML and omits the plain-text body. The distinction is clear at a high level, though it doesn't spell out what get_store_email itself returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'used by the email-viewer widget' and 'Internal companion to get_store_email' implies the rendering context in which to use it, but there is no explicit when-to-use/when-not-to-use guidance or named alternative condition. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_store_emailsGet store marketing emailsARead-onlyInspect
Marketing/newsletter emails Undercart has captured from a store: subject, sender, snippet, extracted discount codes, and received date, newest first, plus the store's emails-per-week cadence. Each email's full body is available from get_store_email by id. Returns an error if the domain is unknown. Metered like get_store (once per store per month).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max emails to return (default 20, max 100). | |
| domain | Yes | Store domain, e.g. "allbirds.com". Normalized automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (read-only, closed-world, non-destructive), and the description adds genuinely useful behavior beyond them: newest-first ordering, an unknown-domain error, and metering semantics ('once per store per month'). These are the details an agent needs to decide whether to spend a call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The payload description is front-loaded and every clause adds information (fields, ordering, follow-up tool, error, metering). It is slightly dense/run-on in the opening sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so by listing the returned fields and their ordering. Combined with the error and cost notes, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so domain normalization and the limit default/max are already documented in the schema. The description adds no parameter-level syntax or constraints beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (marketing/newsletter emails captured from a store) and enumerates exactly what comes back: subject, sender, snippet, discount codes, received date, plus cadence. It is clearly distinguishable from get_store_email (single email body by id) and get_store.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent to the sibling for a follow-up need ('Each email's full body is available from get_store_email by id') and flags failure conditions ('Returns an error if the domain is unknown'). It does not explicitly frame when a different tool should be used instead of this one, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_store_categoriesList store categoriesARead-onlyInspect
List the store categories search_stores accepts, each with how many researched stores it holds and its category-page link. Free (not metered).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: it is free/not metered and returns each category with a store count and category-page link. It does not discuss pagination or ordering, but for a no-parameter list tool this is solid extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with the core action and resource front-loaded, followed by output content and cost. Every clause adds useful information and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description supplies the missing return-value shape (categories, store counts, category-page links), ties the output to search_stores, and notes the cost model. In combination with the annotations, an agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema description coverage is 100%, so the schema has no parameter semantics to explain. Per the baseline for a zero-parameter tool, a 4 is appropriate; the description does not need to add parameter meaning and correctly avoids doing so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List the store categories') and immediately ties it to the sibling tool search_stores by saying these are the categories it accepts. It also states what each returned item includes, so the agent can distinguish this from search_stores without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The relationship to search_stores implies the tool is used to discover valid category values before searching, but there is no explicit when-to-use statement, no exclusions, and no direct comparison to alternatives like find_similar_stores or get_store. The 'Free (not metered)' note is useful cost context but does not function as usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_store_technologiesList store technologiesARead-onlyInspect
List the detected technology and app stack for a single Shopify store by domain, grouped by category (e.g. Email Marketing, Reviews, Subscriptions, Analytics), including the Shopify plan. Each app has a status (active; not_seen = missing from the latest look, which is not proof it was removed; removed = two separate reads missed it), when it was first seen (sinceOrEarlier: it was already there the first time we looked) and last seen — dates are YYYY-MM-DD, or YYYY-MM from a monthly crawl. The same timeline as the store's Tech tab. For a store with enriched: false these are the apps HTTP Archive's public crawl saw. Returns an error if the domain is unknown. Metered like get_store (once per store per month).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Store domain, e.g. "allbirds.com". Normalized automatically. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a safe read, yet the description adds substantial behavior the agent could not infer: status semantics (active, not_seen meaning not proof of removal, removed meaning two separate reads missed it), sinceOrEarlier semantics, date formats (YYYY-MM-DD or YYYY-MM), the enrichment caveat, and the error condition for unknown domains. Cost/metering behavior is also disclosed, which directly affects whether an agent should call it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense single paragraph, front-loaded with purpose and grouping before the status/date semantics. Every sentence carries information (status meanings, date formats, enrichment caveat, metering), though the run-on structure across semicolons and em-dashes makes it slightly harder to scan than an itemized form would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description adequately conveys the return shape: technologies grouped by category, each with status, first-seen and last-seen values, plus the store plan. Combined with error and metering notes, an agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, so the schema already documents the domain format and automatic normalization. The description only restates that the lookup is by domain and adds no syntax or format detail beyond the schema. Baseline 3 is appropriate when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (detected technology/app stack) scoped to a single store by domain, with the grouping (by category) and the Shopify plan included. It is clearly distinguishable from siblings like get_store or get_store_ads, which cover different data about the same store.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the usage context explicit: one store per call, by domain, errors on unknown domains, and metered like get_store (once per store per month). It also clarifies the enriched:false case (HTTP Archive public crawl data). It stops short of naming a sibling alternative for related needs, but no exclusion is needed here since siblings answer different questions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_storesSearch Shopify storesARead-onlyInspect
Search Undercart's Shopify store catalog with the store explorer's filters: keywords in the store's own description, category, country, annual revenue, traffic rank and trend, top market, catalog size and price, brands carried (distinct product vendors, own-brand share, a brand the store sells), reviews and review velocity, share on sale, theme, hiring, languages, email cadence, the ad platform a store advertises on (advertisingOn: meta / google / tiktok), and apps installed / added / removed. All filters AND together. The catalog, review, hiring and email filters are only known for the few thousand stores Undercart has researched in depth, so any of them limits the search to those; leave them out to search the whole catalog of ~700k. For multi-brand resellers (stores selling brands they don't own) filter on brandsMin (e.g. 20) and ownBrandMax (e.g. 20), not on description phrases like "top brands" or "authorized dealer", which most resellers' descriptions don't contain. Returns concise store profiles ranked by estimated revenue (annual before monthly): category, country, product count, traffic rank and trend, and top detected apps. Example: beauty stores doing over $10M/yr that use Klaviyo and added Gorgias in the last 90 days. On a capped plan (Free) each search uses 5 of the account's monthly search credits, and repeating an identical search that month is free, so prefer one well-filtered search over many narrow ones.
| Name | Required | Description | Default |
|---|---|---|---|
| tech | No | Apps/technologies the store runs now, e.g. "Klaviyo" or "Klaviyo, Gorgias" (comma-separated: the store must run every one). Case-insensitive; a term that isn't an exact app name matches every app name containing it. | |
| brand | No | Carries brand. A brand the store sells (a product vendor name), e.g. Shimano. Whole name, case-insensitive. | |
| limit | No | Max stores to return (default 20). The Free plan returns at most 15 per search. | |
| theme | No | Theme. Case-insensitive; an unknown value returns the valid values. The base Theme Store theme, even where the store renamed its copy. | |
| hiring | No | true: only stores matching "Hiring now". Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Has a careers page — the cheapest proxy for a team that is growing. | |
| country | No | Country the store is based in: an ISO code or a name, e.g. "US" or "United States". | |
| rankMax | No | Traffic rank upper bound (1 = most popular), e.g. 10000 for stores in the top 10k. Stores with no rank are excluded when set. | |
| rankMin | No | Traffic rank lower bound (1 = most popular). Traffic rank blends Tranco with HTTP Archive/CrUX; lower is more popular. | |
| category | No | Store category. Forgiving match ("beauty" resolves to "Beauty & Cosmetics"); when nothing matches, the result lists the valid categories. Canonical values: Fashion & Apparel, Beauty & Cosmetics, Health & Wellness, Food & Beverage, Home & Garden, Electronics, Sports & Outdoors, Pets, Jewelry & Accessories, Toys & Games, Books & Media, Art & Crafts, Automotive, Baby & Kids, Office & School, Other. | |
| currency | No | Currency. Case-insensitive; an unknown value returns the valid values. The store's own checkout currency, from /meta.json. | |
| enriched | No | true: only stores Undercart has researched in depth, which carry a revenue estimate, ads, captured emails, social and catalog data. Omit to search the whole catalog; the rest carry public-web data only (apps, description, country, traffic rank) and a preliminary revenue range. | |
| priceMax | No | Maximum avg product price (USD). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| priceMin | No | Minimum avg product price (USD). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| techDays | No | Lookback for techAdded / techRemoved in days (default 30). | |
| brandsMax | No | Maximum brands carried. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Distinct brands (product vendors) in the catalog. 1 is a store selling only its own brand; a multi-brand reseller carries dozens to hundreds. | |
| brandsMin | No | Minimum brands carried. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Distinct brands (product vendors) in the catalog. 1 is a store selling only its own brand; a multi-brand reseller carries dozens to hundreds. | |
| emailsMax | No | Maximum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured per week, averaged since we subscribed or over the last 30 days, whichever is shorter. | |
| emailsMin | No | Minimum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured per week, averaged since we subscribed or over the last 30 days, whichever is shorter. | |
| onSaleMax | No | Maximum catalog on sale (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of the catalog currently discounted. | |
| onSaleMin | No | Minimum catalog on sale (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of the catalog currently discounted. | |
| techAdded | No | Apps the store ADDED within the last techDays days (comma-separated, each must match). Only reflects Undercart's own re-crawls, so it covers stores crawled more than once. | |
| topMarket | No | A country among the store's top 3 markets for Chrome traffic (where its visitors are, not where it is based): an ISO code or a name, e.g. "DE" or "Germany". | |
| localesMax | No | Maximum languages. Distinct languages the store publishes its pages in (hreflang) — international expansion. | |
| localesMin | No | Minimum languages. Distinct languages the store publishes its pages in (hreflang) — international expansion. | |
| revenueMax | No | Maximum estimated ANNUAL revenue in USD (preliminary figure for unresearched stores). | |
| revenueMin | No | Minimum estimated ANNUAL revenue in USD, e.g. 10000000 for $10M/yr. A store Undercart hasn't researched yet is filtered on its preliminary, popularity-based figure. | |
| reviewsMax | No | Maximum total reviews. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| reviewsMin | No | Minimum total reviews. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| description | No | Keywords that must ALL appear in the store's own description (its site meta description), in any order — e.g. "yoga pants leggings" finds Alo Yoga. Case-insensitive substring match per keyword (a keyword of up to 4 letters must start a word, so "tabi" doesn't match "cantabil"); common stop words are ignored. Wrap a run in double quotes for an exact phrase, e.g. '"made in italy"'. It reaches products and positioning that no category value covers. | |
| ownBrandMax | No | Maximum own-brand share (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of products sold under the store's own name. Near 0% is a reseller of other brands; near 100% is a DTC brand. | |
| ownBrandMin | No | Minimum own-brand share (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of products sold under the store's own name. Near 0% is a reseller of other brands; near 100% is a DTC brand. | |
| productsMax | No | Maximum product count. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| productsMin | No | Minimum product count. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| techRemoved | No | Apps the store REMOVED within the last techDays days (comma-separated, each must match). Only reflects Undercart's own re-crawls, so it covers stores crawled more than once. | |
| trafficTrend | No | Traffic trend. One of: Rising, Steady, Falling. Chrome UX Report: the last 3 months' worldwide rank against the same months a year earlier. Only a whole-bucket move (e.g. Top 50k → Top 10k) counts. | |
| advertisingOn | No | Ad platform the store has ads on right now, per its public ad library: "meta" (Facebook/Instagram), "google" (Google Ads / Shopping) or "tiktok". A counted presence, not a pixel on the site. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. | |
| reviewRateMax | No | Maximum review velocity. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Observed new reviews per day between the last two comparable crawls. | |
| reviewRateMin | No | Minimum review velocity. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Observed new reviews per day between the last two comparable crawls. | |
| trackingEmail | No | true: only stores matching "We capture their email". Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Subscribed to their newsletter AND receiving mail — email intelligence is flowing. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnly/destructive annotations, it discloses key behavior: all filters AND together, many filters restrict results to the few thousand deeply researched stores, results are ranked by estimated revenue, and Free-plan searches consume credits with free identical repeats.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core search purpose and remains dense rather than padded across 39 parameters. The long filter inventory is useful but could be structured more scannably; still, almost every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 39-parameter search tool with no output schema, it covers result shape and ranking, filter interaction, coverage limitations, example usage, and credit implications. An agent has enough context to invoke it correctly without opening sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds useful cross-parameter semantics such as AND behavior, omit-to-broaden guidance, and the reseller-specific brandsMin/ownBrandMax strategy. It does not separately explain every parameter, but it meaningfully enriches the most strategically important ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching Undercart's Shopify store catalog with the store explorer's filters. It clearly distinguishes this from get_store-style siblings by describing catalog-wide search, filtering, and ranked results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance, including omitting sparse filters to search the full ~700k catalog, using brandsMin/ownBrandMax for resellers instead of description phrases, and preferring one well-filtered search over many narrow ones due to credit costs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
search_stores1 field changed- changed
Input schema / properties / techRemoved / descriptionPrevious value: -"Apps the store REMOVED within the last techDays days (comma-separated, each must match)."New value: +"Apps the store REMOVED within the last techDays days (comma-separated, each must match). Only reflects Undercart's own re-crawls, so it covers stores crawled more than once."
2 tool updates
- Changed
find_similar_stores1 field changed- changed
Input schema / properties / limit / maximumPrevious value: -100New value: +50
- Changed
search_stores1 field changed- changed
Input schema / properties / limit / maximumPrevious value: -100New value: +50
1 tool update
- Changed
search_stores1 field changed- added
Input schema / properties / advertisingOnAdded value: +{ + "description": "Ad platform the store has ads on right now, per its public ad library: \"meta\" (Facebook/Instagram), \"google\" (Google Ads / Shopping) or \"tiktok\". A counted presence, not a pixel on the site. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog.", + "type": "string" +}
1 tool update
- Changed
search_stores1 field changed- changed
Input schema / properties / description / descriptionPrevious value: -"Keywords that must ALL appear in the store's own description (its site meta description), in any order — e.g. \"yoga pants leggings\" finds Alo Yoga. Case-insensitive substring match per keyword; common stop words are ignored. Wrap a run in double quotes for an exact phrase, e.g. '\"made in italy\"'. It reaches products and positioning that no category value covers."New value: +"Keywords that must ALL appear in the store's own description (its site meta description), in any order — e.g. \"yoga pants leggings\" finds Alo Yoga. Case-insensitive substring match per keyword (a keyword of up to 4 letters must start a word, so \"tabi\" doesn't match \"cantabil\"); common stop words are ignored. Wrap a run in double quotes for an exact phrase, e.g. '\"made in italy\"'. It reaches products and positioning that no category value covers."
2 tool updates
- Changed
find_similar_stores2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max similar stores to return (default 10, max 50)."New value: +"Max similar stores to return (default 10). The Free plan returns at most 15 per search." - changed
Input schema / properties / limit / maximumPrevious value: -50New value: +100
- Changed
search_stores2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max stores to return (default 20, max 50)."New value: +"Max stores to return (default 20). The Free plan returns at most 15 per search." - changed
Input schema / properties / limit / maximumPrevious value: -50New value: +100
1 tool update
- Changed
search_stores5 fields changed- added
Input schema / properties / brandAdded value: +{ + "description": "Carries brand. A brand the store sells (a product vendor name), e.g. Shimano. Whole name, case-insensitive.", + "type": "string" +} - added
Input schema / properties / brandsMaxAdded value: +{ + "description": "Maximum brands carried. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Distinct brands (product vendors) in the catalog. 1 is a store selling only its own brand; a multi-brand reseller carries dozens to hundreds.", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / brandsMinAdded value: +{ + "description": "Minimum brands carried. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Distinct brands (product vendors) in the catalog. 1 is a store selling only its own brand; a multi-brand reseller carries dozens to hundreds.", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / ownBrandMaxAdded value: +{ + "description": "Maximum own-brand share (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of products sold under the store's own name. Near 0% is a reseller of other brands; near 100% is a DTC brand.", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / ownBrandMinAdded value: +{ + "description": "Minimum own-brand share (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of products sold under the store's own name. Near 0% is a reseller of other brands; near 100% is a DTC brand.", + "minimum": 0, + "type": "number" +}
1 tool update
- Changed
search_stores2 fields changed- changed
Input schema / properties / emailsMax / descriptionPrevious value: -"Maximum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured in the last 28 days, per week."New value: +"Maximum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured per week, averaged since we subscribed or over the last 30 days, whichever is shorter." - changed
Input schema / properties / emailsMin / descriptionPrevious value: -"Minimum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured in the last 28 days, per week."New value: +"Minimum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured per week, averaged since we subscribed or over the last 30 days, whichever is shorter."
1 tool update
- Changed
search_stores3 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Keywords that must ALL appear in the store's own description (its site meta description), in any order — e.g. \"yoga pants leggings\" finds Alo Yoga. Case-insensitive substring match per keyword; common stop words are ignored. Wrap a run in double quotes for an exact phrase, e.g. '\"made in italy\"'. Use this for a product/positioning search that no category value covers."New value: +"Keywords that must ALL appear in the store's own description (its site meta description), in any order — e.g. \"yoga pants leggings\" finds Alo Yoga. Case-insensitive substring match per keyword; common stop words are ignored. Wrap a run in double quotes for an exact phrase, e.g. '\"made in italy\"'. It reaches products and positioning that no category value covers." - removed
Input schema / properties / foundedMaxRemoved value: -{ - "description": "Maximum founded year (a year). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog.", - "minimum": 0, - "type": "number" -} - removed
Input schema / properties / foundedMinRemoved value: -{ - "description": "Minimum founded year (a year). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog.", - "minimum": 0, - "type": "number" -}
1 tool update
- Changed
search_stores19 fields changed- removed
Input schema / properties / aovMaxRemoved value: -{ - "description": "Maximum average order value (USD).", - "minimum": 0, - "type": "number" -} - removed
Input schema / properties / aovMinRemoved value: -{ - "description": "Minimum average order value (USD).", - "minimum": 0, - "type": "number" -} - changed
Input schema / properties / emailsMax / descriptionPrevious value: -"Maximum emails per week. Marketing emails we captured in the last 28 days, per week."New value: +"Maximum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured in the last 28 days, per week." - changed
Input schema / properties / emailsMin / descriptionPrevious value: -"Minimum emails per week. Marketing emails we captured in the last 28 days, per week."New value: +"Minimum emails per week. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Marketing emails we captured in the last 28 days, per week." - changed
Input schema / properties / foundedMax / descriptionPrevious value: -"Maximum founded year (a year)."New value: +"Maximum founded year (a year). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / foundedMin / descriptionPrevious value: -"Minimum founded year (a year)."New value: +"Minimum founded year (a year). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / hiring / descriptionPrevious value: -"true: only stores matching \"Hiring now\". Has a careers page — the cheapest proxy for a team that is growing."New value: +"true: only stores matching \"Hiring now\". Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Has a careers page — the cheapest proxy for a team that is growing." - changed
Input schema / properties / onSaleMax / descriptionPrevious value: -"Maximum catalog on sale (percent, 0-100). Share of the catalog currently discounted."New value: +"Maximum catalog on sale (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of the catalog currently discounted." - changed
Input schema / properties / onSaleMin / descriptionPrevious value: -"Minimum catalog on sale (percent, 0-100). Share of the catalog currently discounted."New value: +"Minimum catalog on sale (percent, 0-100). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Share of the catalog currently discounted." - changed
Input schema / properties / priceMax / descriptionPrevious value: -"Maximum avg product price (USD)."New value: +"Maximum avg product price (USD). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / priceMin / descriptionPrevious value: -"Minimum avg product price (USD)."New value: +"Minimum avg product price (USD). Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / productsMax / descriptionPrevious value: -"Maximum product count."New value: +"Maximum product count. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / productsMin / descriptionPrevious value: -"Minimum product count."New value: +"Minimum product count. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / reviewRateMax / descriptionPrevious value: -"Maximum review velocity. Observed new reviews per day between the last two comparable crawls."New value: +"Maximum review velocity. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Observed new reviews per day between the last two comparable crawls." - changed
Input schema / properties / reviewRateMin / descriptionPrevious value: -"Minimum review velocity. Observed new reviews per day between the last two comparable crawls."New value: +"Minimum review velocity. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Observed new reviews per day between the last two comparable crawls." - changed
Input schema / properties / reviewsMax / descriptionPrevious value: -"Maximum total reviews."New value: +"Maximum total reviews. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - changed
Input schema / properties / reviewsMin / descriptionPrevious value: -"Minimum total reviews."New value: +"Minimum total reviews. Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog." - removed
Input schema / properties / shopifyPlanRemoved value: -{ - "description": "Shopify plan. Case-insensitive; an unknown value returns the valid values. Only detectable when the storefront says so, or for Plus — most stores read as unknown.", - "type": "string" -} - changed
Input schema / properties / trackingEmail / descriptionPrevious value: -"true: only stores matching \"We capture their email\". Subscribed to their newsletter AND receiving mail — email intelligence is flowing."New value: +"true: only stores matching \"We capture their email\". Only known for stores Undercart has researched in depth — a few thousand of the ~700k in the catalog — so setting it limits results to those. Omit it to search the whole catalog. Subscribed to their newsletter AND receiving mail — email intelligence is flowing."
9 tool updates
- First observed
find_similar_stores - First observed
get_store - First observed
get_store_ads - First observed
get_store_email - First observed
get_store_email_html - First observed
get_store_emails - First observed
list_store_categories - First observed
list_store_technologies - First observed
search_stores
Related MCP Connectors
Shopify store intelligence: traffic, revenue, products, competitors, trends across 1M+ stores.
Shopify store and ad intelligence: traffic, best sellers, apps, live Meta ads and weekly breakouts.
Search, count and inspect 2.6M+ live Shopify stores by apps, tech stack, theme and country.
Weekly data on 600k+ Shopify stores: launches, best sellers, prices, apps and similar stores.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceDTC competitor intelligence: catalog snapshots, price history, cross-brand product comparison, and drop/restock detection for 84 Shopify-powered brands. Pay-per-call via Apify.-

com.storeinspect/mcpofficial
AlicenseNot gradedqualityBmaintenanceEnables AI clients to search Shopify stores and contacts by market, traffic, revenue, apps, pixels, themes, ads, or contact availability, enrich known domains, preview matching contacts, and reveal selected contact details after approval via OAuth.MIT- AlicenseNot gradedqualityBmaintenanceEnables AI agents to discover new and pre-launch Shopify stores from public CT logs and RDAP data, and to check any list of domains for Shopify usage with registration dates and store metadata.MIT
- AlicenseNot gradedqualityDmaintenanceSearches and analyzes competitor ads and content across Meta, Google, Instagram, TikTok, and YouTube with AI-powered creative analysis and cross-platform brand discovery.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.