Skip to main content
Glama

Server Details

Shopify store intelligence: search 700K+ stores by revenue, apps and traffic; ads and emails.

Ownership verified
Status
Healthy
Uptime
58.4% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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 tools
find_similar_storesFind similar storesA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
limitNoMax similar stores to return (default 10). The Free plan returns at most 15 per search.
domainYesThe reference store domain, e.g. "allbirds.com". Normalized automatically.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 profileA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
domainYesStore domain, e.g. "allbirds.com" or "https://www.allbirds.com". Normalized automatically.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 adsA
Read-only
Inspect

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).

NameRequiredDescriptionDefault
limitNoMax creatives to return (default 6, max 24).
domainYesStore domain, e.g. "allbirds.com". Normalized automatically.
platformNoAd platform to fetch actual creatives from. Omit to get the cross-platform presence summary only.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 emailA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
domainYesThe store domain the email belongs to.
emailIdYesAn email id returned by get_store_emails.
includeHtmlNoInclude 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

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)A
Read-only
Inspect

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.

NameRequiredDescriptionDefault
domainYesThe store domain the email belongs to.
emailIdYesAn email id returned by get_store_emails.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 emailsA
Read-only
Inspect

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).

NameRequiredDescriptionDefault
limitNoMax emails to return (default 20, max 100).
domainYesStore domain, e.g. "allbirds.com". Normalized automatically.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 categoriesA
Read-only
Inspect

List the store categories search_stores accepts, each with how many researched stores it holds and its category-page link. Free (not metered).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 technologiesA
Read-only
Inspect

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).

NameRequiredDescriptionDefault
domainYesStore domain, e.g. "allbirds.com". Normalized automatically.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 storesA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
techNoApps/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.
brandNoCarries brand. A brand the store sells (a product vendor name), e.g. Shimano. Whole name, case-insensitive.
limitNoMax stores to return (default 20). The Free plan returns at most 15 per search.
themeNoTheme. Case-insensitive; an unknown value returns the valid values. The base Theme Store theme, even where the store renamed its copy.
hiringNotrue: 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.
countryNoCountry the store is based in: an ISO code or a name, e.g. "US" or "United States".
rankMaxNoTraffic rank upper bound (1 = most popular), e.g. 10000 for stores in the top 10k. Stores with no rank are excluded when set.
rankMinNoTraffic rank lower bound (1 = most popular). Traffic rank blends Tranco with HTTP Archive/CrUX; lower is more popular.
categoryNoStore 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.
currencyNoCurrency. Case-insensitive; an unknown value returns the valid values. The store's own checkout currency, from /meta.json.
enrichedNotrue: 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.
priceMaxNoMaximum 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.
priceMinNoMinimum 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.
techDaysNoLookback for techAdded / techRemoved in days (default 30).
brandsMaxNoMaximum 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.
brandsMinNoMinimum 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.
emailsMaxNoMaximum 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.
emailsMinNoMinimum 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.
onSaleMaxNoMaximum 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.
onSaleMinNoMinimum 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.
techAddedNoApps 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.
topMarketNoA 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".
localesMaxNoMaximum languages. Distinct languages the store publishes its pages in (hreflang) — international expansion.
localesMinNoMinimum languages. Distinct languages the store publishes its pages in (hreflang) — international expansion.
revenueMaxNoMaximum estimated ANNUAL revenue in USD (preliminary figure for unresearched stores).
revenueMinNoMinimum 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.
reviewsMaxNoMaximum 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.
reviewsMinNoMinimum 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.
descriptionNoKeywords 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.
ownBrandMaxNoMaximum 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.
ownBrandMinNoMinimum 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.
productsMaxNoMaximum 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.
productsMinNoMinimum 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.
techRemovedNoApps 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.
trafficTrendNoTraffic 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.
advertisingOnNoAd 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.
reviewRateMaxNoMaximum 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.
reviewRateMinNoMinimum 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.
trackingEmailNotrue: 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

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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. 1 tool update
    • Changedsearch_stores1 field changed
      • changedInput schema / properties / techRemoved / description
        Previous 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. 2 tool updates
    • Changedfind_similar_stores1 field changed
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +50
    • Changedsearch_stores1 field changed
      • changedInput schema / properties / limit / maximum
        Previous value: -100New value: +50
  3. 1 tool update
    • Changedsearch_stores1 field changed
      • addedInput schema / properties / advertisingOn
        Added 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"
        +}
  4. 1 tool update
    • Changedsearch_stores1 field changed
      • changedInput schema / properties / description / description
        Previous 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."
  5. 2 tool updates
    • Changedfind_similar_stores2 fields changed
      • changedInput schema / properties / limit / description
        Previous 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."
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +100
    • Changedsearch_stores2 fields changed
      • changedInput schema / properties / limit / description
        Previous 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."
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +100
  6. 1 tool update
    • Changedsearch_stores5 fields changed
      • addedInput schema / properties / brand
        Added value: +{
        +  "description": "Carries brand. A brand the store sells (a product vendor name), e.g. Shimano. Whole name, case-insensitive.",
        +  "type": "string"
        +}
      • addedInput schema / properties / brandsMax
        Added 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"
        +}
      • addedInput schema / properties / brandsMin
        Added 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"
        +}
      • addedInput schema / properties / ownBrandMax
        Added 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"
        +}
      • addedInput schema / properties / ownBrandMin
        Added 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"
        +}
  7. 1 tool update
    • Changedsearch_stores2 fields changed
      • changedInput schema / properties / emailsMax / description
        Previous 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."
      • changedInput schema / properties / emailsMin / description
        Previous 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."
  8. 1 tool update
    • Changedsearch_stores3 fields changed
      • changedInput schema / properties / description / description
        Previous 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."
      • removedInput schema / properties / foundedMax
        Removed 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"
        -}
      • removedInput schema / properties / foundedMin
        Removed 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"
        -}
  9. 1 tool update
    • Changedsearch_stores19 fields changed
      • removedInput schema / properties / aovMax
        Removed value: -{
        -  "description": "Maximum average order value (USD).",
        -  "minimum": 0,
        -  "type": "number"
        -}
      • removedInput schema / properties / aovMin
        Removed value: -{
        -  "description": "Minimum average order value (USD).",
        -  "minimum": 0,
        -  "type": "number"
        -}
      • changedInput schema / properties / emailsMax / description
        Previous 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."
      • changedInput schema / properties / emailsMin / description
        Previous 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."
      • changedInput schema / properties / foundedMax / description
        Previous 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."
      • changedInput schema / properties / foundedMin / description
        Previous 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."
      • changedInput schema / properties / hiring / description
        Previous 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."
      • changedInput schema / properties / onSaleMax / description
        Previous 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."
      • changedInput schema / properties / onSaleMin / description
        Previous 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."
      • changedInput schema / properties / priceMax / description
        Previous 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."
      • changedInput schema / properties / priceMin / description
        Previous 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."
      • changedInput schema / properties / productsMax / description
        Previous 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."
      • changedInput schema / properties / productsMin / description
        Previous 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."
      • changedInput schema / properties / reviewRateMax / description
        Previous 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."
      • changedInput schema / properties / reviewRateMin / description
        Previous 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."
      • changedInput schema / properties / reviewsMax / description
        Previous 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."
      • changedInput schema / properties / reviewsMin / description
        Previous 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."
      • removedInput schema / properties / shopifyPlan
        Removed 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"
        -}
      • changedInput schema / properties / trackingEmail / description
        Previous 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."
  10. 9 tool updates
    • First observedfind_similar_stores
    • First observedget_store
    • First observedget_store_ads
    • First observedget_store_email
    • First observedget_store_email_html
    • First observedget_store_emails
    • First observedlist_store_categories
    • First observedlist_store_technologies
    • First observedsearch_stores

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    DTC competitor intelligence: catalog snapshots, price history, cross-brand product comparison, and drop/restock detection for 84 Shopify-powered brands. Pay-per-call via Apify.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources