merch-connector
Supports Google Gemini as an AI provider for analyzing scraped e-commerce data through the same analysis tools.
Allows local AI models to be used via Ollama for executing analysis tools, providing offline or privacy-focused operation.
Enables OpenAI models (or OpenAI-compatible endpoints) for AI-powered analysis of product listings and storefront data.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@merch-connectorscrape product listings on example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
merch-connector
An MCP server that gives AI agents eyes on any e-commerce storefront.
Scrape product listings, extract facets, badges, sort options, and B2B signals; run AI-powered merchandising audits; compare two storefronts side-by-side; detect what changed between visits; and build persistent memory about sites — all through the Model Context Protocol.
Why merch-connector?
E-commerce merchandising analysis is manual, repetitive, and fragmented. A merchandiser might spend hours clicking through competitor sites, checking if filters work, comparing product grids, and noting what's changed. AI agents can do this work — but they can't see storefronts the way shoppers do.
merch-connector bridges that gap. It gives any MCP-compatible AI agent (Claude, custom agents, etc.) the ability to:
Browse any storefront with a stealth headless browser that handles bot protection
Extract structured product data, facets, performance metrics, and page structure
Analyze merchandising quality through five expert personas or a full roundtable debate
Remember site quirks across sessions so the agent gets smarter over time
Track changes across visits — new products, price moves, facet/sort changes
Related MCP server: FakeStore MCP
Quick start
npx merch-connectorThe server communicates over stdio and is designed to be launched by an MCP client, not run standalone.
Configuration
Add to your Claude Desktop claude_desktop_config.json or Claude Code .mcp.json:
{
"mcpServers": {
"merch-connector": {
"command": "npx",
"args": ["-y", "merch-connector"],
"env": {
"ANTHROPIC_API_KEY": "your_key_here"
}
}
}
}To enable Firecrawl (bypasses bot-protected sites like Ferguson/Akamai) or pass any other env vars, add them to the env block:
"env": {
"ANTHROPIC_API_KEY": "your_key_here",
"FIRECRAWL_API_KEY": "fc-..."
}Or install globally: npm install -g merch-connector
Environment variables
Variable | Required | Description |
| One of these | Anthropic Claude API key |
| One of these | Google Gemini API key |
| One of these | OpenAI or OpenAI-compatible API key |
| No | Base URL for OpenAI-compatible endpoint. Defaults to |
| No | Force |
| No | Override default model. Required when using Ollama. |
| No | Set |
| No | Enables Firecrawl as a fallback scraper in |
| No | Custom path for site memory files. Default: |
| No | AI tool timeout in ms. Default: |
| No | Path to NDJSON log file. If set, every server log entry is appended. |
| No | Connect to an external Lightpanda/Chrome CDP endpoint instead of launching Puppeteer's bundled Chromium. Server-side optimization only — standard npx users can ignore this. |
You only need an API key for AI-powered tools (ask_page, merch_roundtable, analyze_products). Scraping tools work without one.
Using Ollama (local models)
{
"mcpServers": {
"merch-connector": {
"command": "npx",
"args": ["-y", "merch-connector"],
"env": {
"MODEL_PROVIDER": "ollama",
"MODEL_NAME": "qwen2.5:14b",
"OPENAI_BASE_URL": "http://localhost:11434/v1"
}
}
}
}AI analysis tools degrade gracefully if no provider is configured — scraping still works, analysis returns an error instead of crashing.
Tools
Tool | Description | Needs AI key? |
| Primary scraping tool. One-pass audit payload — products, facets, screenshots, performance, trust signals, navigation, data quality, analytics, and PDP samples in a single call | No |
| Run persona analysis on pre-scraped data. Pass a products/facets JSON payload (from | Yes |
| Three expert personas analyze in parallel, then a moderator synthesizes consensus (results stream as each persona completes) | Yes |
| Scrape a page and ask any question about it in plain language | Yes |
| Structured side-by-side diff of two URLs: facet gaps, trust signals, sort options, B2B mode, performance | No |
| Scrape a single product detail page — description fill rate, image count, reviews, spec table, cross-sell modules, CTA text, price | No |
| Sample PDPs from a category page using spread/random/top strategy | No |
| Execute one or more search/click actions in sequence, then extract the result | No |
| Read/write persistent notes and learned data about any domain | No |
| Reset stored cookies and page cache for a domain | No |
| Persist a roundtable run as a structured eval record with convergence score | No |
| Retrieve eval history for a domain or all domains | No |
| Retrieve recent server log entries from the in-memory buffer, filterable by level or tool name | No |
| (Deprecated — use | No |
Examples
acquire
Pull everything needed for a full storefront audit in one call
{
"url": "https://www.zappos.com/women/CK_XARC81wHAAQHiAgMBAhg.zso",
"pdp_sample": 2
}Returns the complete audit payload: products with trust signals, facets, sort, navigation structure, data quality scores, analytics platform detection, performance timings, desktop + mobile screenshots, and 2 sampled PDPs — ready for the plugin to score.
ask_page
"Recommend facet changes for this laptop category page"
{
"url": "https://www.insight.com/en_US/shop/category/notebooks/store.html",
"question": "Recommend facet changes?"
}Brand/Manufacturer — Most glaring omission. 50 products span 6+ brands (HP, Lenovo, Apple, Microsoft, Dell, Crucial). B2B buyers with vendor agreements need this as facet #1.
Price range buckets are misaligned. "Below $50" (2 items) signals category contamination — confirmed by a Crucial RAM stick appearing in laptop results. Clean up category mapping and re-bucket starting at $500.
merch_roundtable
The roundtable scrapes once, then runs three AI analyses in parallel followed by a moderator synthesis:
Floor Walker — reacts as a real shopper ("I can't find Dell laptops without scrolling through 50 products")
Auditor — evaluates Trust/Guidance/Persuasion/Friction ("0% facet detection rate, title normalization at 70%")
Scout — identifies competitive gaps ("every competitor in B2B tech has brand filtering as facet #1")
Moderator — synthesizes consensus, surfaces disagreements, produces prioritized recommendations
B2B Auditor automatically substitutes for Auditor when B2B signals are detected.
Personas
Five expert lenses for merchandising analysis. Use individually via ask_page or merch_roundtable.
Persona | Role | Voice |
Floor Walker | A shopper visiting for the first time | First-person, casual, instinctive — "I don't know what button to click" |
Auditor | Compliance analyst with a framework | Metric-driven, precise — "Fill rate is 82%, 3/10 titles lack brand prefix" |
Scout | VP of Merchandising at a competitor | Strategic, comparative — "This is table-stakes for the category" |
B2B Auditor | Procurement buyer evaluating a vendor | Process-driven — scores steps-to-PO, spec completeness, pricing transparency, self-serve viability |
Conversion Architect | CRO specialist mapping the purchase funnel | Analytical, hypothesis-driven — "checkout button is below the fold on mobile, estimated −8% conversion" |
Each persona returns score (0–100), severity (1–5), findings[] (3–5 concrete observations), and uniqueInsight — the one thing only that lens would catch.
Architecture
MCP Client (Claude, etc.)
|
| stdio (JSON-RPC)
|
merch-connector (Node.js MCP server)
|
+-- acquire.js One-pass audit entry point; Puppeteer-first waterfall (Firecrawl fallback for WAF-blocked sites)
+-- scraper.js Puppeteer + stealth plugin, structure detection, PageFingerprint
+-- analyzer.js Multi-provider AI (Anthropic / Gemini / OpenAI), 5 personas
+-- network-intel.js XHR interception, 35-platform fingerprint, dataLayer/GA4 parsing
+-- site-memory.js Persistent per-domain JSON store + change detection snapshots
+-- eval-store.js JSONL eval index + full run storage, convergence scoring
+-- prompts/ Persona prompt files (floor-walker, auditor, scout, b2b-auditor, conversion-architect)Scraping: Puppeteer with stealth plugin bypasses bot detection. Two-pass heuristic structure detection finds product grids on unknown sites. Extracts products, facets, trust signals (ratings, badges, stock warnings), performance timing, and screenshots. Firecrawl integration (
FIRECRAWL_API_KEY) provides LLM-based extraction as a primary path for bot-protected sites.Network intelligence: Intercepts XHR/fetch during page load to fingerprint the commerce stack (Algolia, Bloomreach, SFCC, Shopify, Elasticsearch, and 30+ more). When a high-confidence match is found, extracts product and facet data directly from the API response — bypassing DOM parsing failures on enterprise storefronts.
Analysis: Three-provider AI — Anthropic uses
tool_choiceforcing for structured JSON; Gemini usesresponseSchema; OpenAI-compatible uses function calling with a JSON-prompt fallback. Dynamic imports load only the needed SDK.ask_pageuses Haiku-class models for fast Q&A; persona analysis uses Sonnet-class.Personas: Five expert lenses.
merch_roundtableruns Floor Walker, Auditor, and Scout in parallel then passes results to a moderator that synthesizes consensus and disagreements. B2B Auditor auto-substitutes for Auditor when B2B mode is detected.Memory: Auto-learns site patterns on every scrape. Normalized snapshots enable change detection across visits — price moves, new/removed products, facet/sort changes. Manual notes persist across sessions.
Evals: Two-tier storage — compact JSONL index (100 runs/domain) + full run JSON (10/domain). Convergence score (0–100) measures inter-persona agreement. Dedup hashing prevents double-saves.
Development
git clone https://github.com/grahamton/merchGent.git
cd merchGent
npm install
cp .env.example .env # fill in at least one AI API keyRunning tests
npm test # scrape-only (no API key needed)
npm run test:audit # full merchandising audit
npm run test:persona # single persona (floor_walker)
npm run test:roundtable # all 3 personas + moderator
node test/smoke.js --b2b # B2B validation: Insight.com laptops + b2b_auditor
node test/smoke.js --ask "question" # ask anything about a page
node test/smoke.js --url https://... # override default URL
node test/protocol.js # MCP protocol compliance (no browser/API key needed)MCP Inspector
npx @modelcontextprotocol/inspector -- node bin/merch-connector.jsOpens a browser UI where you can call any tool interactively.
Tool reference
acquire
One-pass audit payload. The primary tool in v2 — replaces the multi-step scrape_page + analysis workflow. Returns everything the audit pipeline needs in a single call.
Parameter | Required | Description |
| Yes | Full URL to acquire |
| No | Number of PDP samples to include (0–5, default 2). Auto-selects median-priced + premium (80th percentile) products. |
Returns:
page— title, metaDescription, pageType, breadcrumb, h1commerce— mode (B2B/B2C/Hybrid), platform, priceTransparency, loginRequiredproducts[]— normalized with trust signals, B2B/B2C indicators, description qualityfacets[],sort— filter panel and sort statenavigation— hasFilterPanel, filterPanelPosition, hasStickyNav, breadcrumbPresenttrustSignals— ratingsOnCards, freeShippingPromised, returnPolicyVisible, urgencyMessagingdataQuality— descriptionFillRate, ratingFillRate, priceFillRateanalytics— platform detection, GTM containers, ecommerce tracking status, productImpressionsFiringperformance— fcp, lcp, cls, domContentLoaded, loadCompletepdpSamples[]— sampled PDP detail pagesscreenshots— desktop + mobile base64 JPEGwarnings[]— structured quality flags with severityscraper—"firecrawl"or"puppeteer"(which path was used)
scrape_page
(Deprecated — use acquire) Raw structured extraction. Returns products (title, price, stock, CTA, description, B2B/B2C signals, trust signals), facets/filters, sort options, B2B mode + conflict score, page metadata, performance timing, data layers, interactable elements, and PageFingerprint. On repeat visits, also returns a changes diff.
Parameter | Required | Description |
| Yes | Full URL to scrape |
| No | Pagination pages to follow (1–5, default 1) |
| No | Max products per page (default 10) |
| No | Include base64 JPEG desktop screenshot (default false) |
| No | Also capture a 390×844 (iPhone 14) mobile screenshot (default false) |
Trust signals per product: star rating, review count, sale badge + text, best seller flag, stock warning ("Only 3 left"), sustainability label, raw badge texts.
compare_storefronts
Scrape two URLs concurrently and return a structured diff. No AI call — pure structural analysis.
Parameter | Required | Description |
| Yes | First URL (your site or baseline) |
| Yes | Second URL (competitor or variant) |
| No | Max products per page (default 10) |
Returns: product count delta, facet gap analysis (onlyInA / onlyInB / shared count), trust signal coverage per site, sort option gaps, B2B mode + conflict score for each, performance delta (FCP + full load).
interact_with_page
Execute one or more search/click actions in sequence, then extract the resulting page.
Parameter | Required | Description |
| Yes | Full URL to load |
| One of these | Array of |
| One of these | Single action shorthand: |
| Depends | CSS selector (required for click) |
| Depends | Text to type (required for search) |
| No | Include screenshot of result |
Multi-step example: [{ "action": "search", "value": "laptop" }, { "action": "click", "selector": ".filter-in-stock" }]
ask_page
Scrape + AI Q&A. The model sees full product data, facets, performance, and a screenshot. Supports Anthropic (Haiku), Gemini, and OpenAI-compatible providers.
Parameter | Required | Description |
| Yes | Full URL to scrape and ask about |
| Yes | Plain language question |
| No | Pagination pages (default 1) |
| No | Max products per page (default 10) |
merch_roundtable
Multi-persona analysis with moderator synthesis. Floor Walker, Auditor, and Scout run in parallel — each result is streamed as a notifications/message as it completes. B2B Auditor auto-substitutes for Auditor when B2B signals are detected.
Parameter | Required | Description |
| Yes | Full URL to analyze |
| No | Pagination pages (default 1) |
| No | Max products per page (default 10) |
Returns: perspectives (each persona's typed result), debate.consensus, debate.disagreements, debate.finalRecommendations (with impact + endorsing personas).
site_memory
Persistent per-domain memory. Auto-accumulates on every scrape.
Parameter | Required | Description |
| Yes |
|
| Depends | Any URL on the domain (required for read/write/delete) |
| No | Text note to append (with write) |
| No | Custom field name (with write) |
| No | Value for the field (with write + key) |
clear_session
Reset cookies and cached page data for a domain.
Parameter | Required | Description |
| Yes | Any URL on the domain to clear |
save_eval
Persist the most recent roundtable or audit run as a structured eval record. Reads from the session persona cache — no data round-trip through the model. Must call merch_roundtable on the same URL first.
Parameter | Required | Description |
| Yes | URL of the run to save (must match a cached session) |
| No | Optional free-text annotation |
Returns: eval ID, convergence score (0–100 inter-persona agreement), top concerns per persona, moderator summary excerpt, dedup hash.
list_evals
Retrieve eval history for a domain or all domains.
Parameter | Required | Description |
| No | Filter to a specific domain. Omit to return all domains with eval history. |
get_logs
Retrieve recent server log entries from the in-memory circular buffer (500 entries).
Parameter | Required | Description |
| No | Filter by level: |
| No | Filter by tool name (e.g. |
| No | Max entries to return (default 50) |
History
v2.0.14 — Ollama local provider support + graceful no-AI degradation
Ollama support:
MODEL_PROVIDER=ollamaroutes through the OpenAI-compatible API athttp://localhost:11434/v1— no API key required;MODEL_NAMEselects the local modelGraceful degradation:
ask_pageandmerch_roundtablenow return raw scrape data + a setup hint when no AI provider is configured, instead of throwinghasProvider()export: callers can gate on AI availability before invoking analysisDocs:
.env.exampleandCLAUDE.mdupdated with Ollama configuration examples
v2.0.13 — Layered data quality model + Firecrawl schema refinement
Data quality model:
acquirenow returnsdataQuality.overall.usabilityTier(full/degraded/minimal/failed) anddataQuality.dimensionswith graded description tiers (empty,spec,thin,rich), separating extraction confidence from site qualityCommerce-mode-aware warnings:
generateWarnings()uses B2C/B2B/Hybrid threshold maps; new codes:LOW_DESCRIPTION_FILL_CRITICAL,DESCRIPTIONS_SPEC_ONLY,RATINGS_ABSENT,PRICING_INCONSISTENT,EXTRACTION_CONFIDENCE_LOW,FACETS_MINIMALFirecrawl schema:
description→cardSubtitleinternally with visual hierarchy cues + few-shot examples; remapped back todescriptionin the payload (no breaking change)Fixed: Puppeteer
extractionConfidencefalse positive whenstructureConfidenceis null — now falls back to product-count + priceFillRate signals
v2.0.12 — MCP-026: stabilize Firecrawl product description extraction
MCP-026:
descriptionfield in FirecrawlEXTRACT_SCHEMAnow carries a JSON Schema annotation explaining what to look for (subtitle text, attribute summaries, model/color/finish specs visible on the card);acquireWithFirecrawl()also passes an explicitpromptto the extract call — eliminates non-deterministic empty-description runs caused by the LLM not knowing category cards carry spec text rather than marketing copy
v2.0.11 — MCP-020/023/024/025: breadcrumb heuristic, Hybrid detection, star rating guard, PDP timeout
MCP-024:
starRatingguard added — values above 5 are discarded (review count bleed);ratingElnow preferscontentattribute (schema.org) before falling back toaria-label/innerTextMCP-020:
getBreadcrumb()gets two new fallback passes —data-testidbreadcrumb variants (React/Next.js), then a URL-depth heuristic overnav a/header aelements to recover multi-level paths like Ferguson's 4-level hierarchyMCP-023:
PRO_TRADE_PATTERNextended withare you a pro,pro login,become a pro;hasProTradeCta()now checkspageText,page.h1, andpage.title; Firecrawl path falls back to testing fullraw.contentwhen nav items are sparseMCP-025: Per-PDP
AbortSignal.timeout(12000)added to Firecrawl PDP path — 12s cap per PDP keeps totalacquirewall time under 60s (Claude Desktop client limit); timed-out PDPs fall through to Puppeteer fallback
v2.0.10 — MCP-017–023: data extraction gaps and Firecrawl routing
MCP-017: PDP sub-scrapes now route through Firecrawl first (bypasses WAF/Akamai); fall back to Puppeteer per-URL;
PDP_SAMPLES_BLOCKEDwarning emitted when all PDPs failMCP-018/023:
freeShippingPromisednow checkstrustBadges[]in addition tob2cIndicators;commerce.modeupgraded B2C→Hybrid when Pro/Trade pricing CTAs are detected in page interactables or nav itemsMCP-019/021: New warnings —
FACETS_INCOMPLETEwhen Firecrawl returns fewer than 4 facets;PERFORMANCE_UNAVAILABLE(info) when Firecrawl is active scraperMCP-020/022: Breadcrumb selector expanded to capture
span/li/schema.org elements with dedup + separator filtering;ratingFillRatenow requiresrating > 0(zero-star no longer counted as filled)
v2.0.9 — Bot-block resilience: blocked/blockType/fallbackSuggestions
acquirenow surfaces block state explicitly: top-levelblocked(bool) andblockType(WAF|TIMEOUT|EMPTY_RENDER) are set wheneverFIRECRAWL_FAILED,LOW_CARD_CONFIDENCE, orNO_PRODUCTS_FOUNDwarnings are present — skill layer can branch without parsingwarnings[]fallbackSuggestions[]: three pre-computed search strings (site:, keyword,cache:) derived from the input URL, ready to pass to a search fallback workflowBlocked responses skip the cache — retries after stealth changes or a different entry point always get a fresh scrape attempt
v2.0.8 — MCP-002: facet extraction for Shopify/Allbirds filter patterns
Strategy 2 expanded: candidate selector list now includes
form[action*="filter"],[class*="FilterPanel"],[class*="filter-panel"]and similar patterns that Headless Shopify storefronts use — previously missed because filters weren't insideaside/nav/sidebarelementsStrategy 3 added: dedicated
<details>-based extractor for Shopify filter groups (Allbirds and similar) where each facet is a standalone<details>with a<summary>label and checkbox inputs — no shared sidebar container required
v2.0.7 — MCP-016: acquire silent timeout fix + progress logging
Silent hang fixed: Firecrawl mobile screenshot call had no timeout — bot-blocked URLs caused the entire
acquirehandler to freeze indefinitely with zero log output; addedtimeout: 30000to the mobile scrape callProgress logging:
acquirenow emitssendLogentries at every major step (Firecrawl start/complete, Puppeteer start/complete, PDP sampling start/complete, cache hit) so timeouts are diagnosable fromget_logssendLogwired into acquire: passed viasessionOpsfromindex.js— no circular dependency, no architectural change
v2.0.6 — Fix acquire screenshot crash when using Firecrawl
Root cause: Firecrawl returns
screenshotas a CDN URL, not base64; the MCP SDK's base64 validator rejected it, crashing everyacquirecall whenFIRECRAWL_API_KEYis setFix:
acquirehandler now detects URL-format screenshots, fetches and converts to base64 before sending as MCP image content items
v2.0.5 — Fix dotenv stdout corruption on startup
MCP JSON-RPC broken by dotenv v17: dotenv v17.3+ prints a
[dotenv@17.x]banner to stdout by default; on a stdio transport this corrupted the JSON-RPC stream before the first message was parsedFix: Added
quiet: trueto the user config fallbackloadEnvcall inindex.js— both dotenv calls are now silent on startup
v2.0.4 — Fix acquire field truncation
Root cause of missing fields: Screenshot base64 was included in the JSON text payload AND as a separate image content item — the duplicate filled the MCP token budget before
performance,trustSignals,analytics,navigation,dataQuality,pdpSamples, andwarningsappeared in the serialized outputFix: Screenshots are now stripped from the JSON text and sent only as image content items; all 7 structured fields are now fully visible to the MCP client on every acquire call
v2.0.3 — MCP-013 API key fix + user config fallback
MCP-013 root cause:
plugin.jsonwas explicitly settingANTHROPIC_API_KEY=""andFIRECRAWL_API_KEY="", overriding system env vars before they reached the server — fixed in plugin v0.5.1User config fallback: Server now loads
~/.merch-connector/.envas a fallback for any env var that is absent or empty, so API keys survive npx cache clears and work regardless of how the launcher passes env varsDeduped imports: Merged
fsimport consolidation inindex.jsstartup block
v2.0.2 — MCP-014 acquire field fixes
trustSignals.avgRating: Renamed fromavgRatingAcrossProductsto match the field name the plugin audit command expects — was causing silent scoring failures on every acquire callWarning severity values: Remapped from
"high"/"medium"/"low"to"error"/"warn"across allwarnings[]entries to match the plugin's expected enum
v2.0.1 — Model alias fix + full multi-provider ask_page
MCP-013: Replaced retired
claude-3-5-sonnet-latestalias withclaude-sonnet-4-6across all Anthropic calls — fixesask_page,merch_roundtable, and all persona analysis tools that were returning 404 errorsask_page multi-provider: Added full Gemini and OpenAI-compatible implementations (were placeholder stubs). Anthropic path now uses Haiku-class model for fast, cost-effective Q&A; all persona analysis continues to use Sonnet.
MCP-015 docs:
FIRECRAWL_API_KEYdocumented in README and CLAUDE.md; configuration example updated with env passthrough pattern
v2.0.0 — acquire tool: one-pass v2 architecture
New
acquiretool: Single call replaces the 6–8 stepscrape_page+ analysis workflow — returns products, facets, screenshots, performance, trust signals, navigation, data quality, PDP samples, analytics, andwarnings[]in one payloadFirecrawl integration: LLM extraction via Firecrawl as primary scraper with automatic Puppeteer fallback;
scraperfield reports which path was used and any fallback reasonaudit_storefrontretired: Returns a hard error directing callers toacquire;scrape_pagemarked deprecated with log warningProtocol tests updated: 34/34 passing;
acquirein tool list,audit_storefrontabsent,scrape_pagedeprecation asserted
v1.9.2 — MCP-002 & MCP-005 fixes, roundtable refactor, B2B persona routing
MCP-002: Restored
extractFacetsGenericfallback +hasFacetStructurestructural scoring bonus (+20); added nested wrapper key support (response.*,data.*) and wired generic extraction as a fallback inextractFromBestApi— "Unknown Facet" no longer appears when XHR data is availableMCP-005: Mobile screenshots now dismiss OneTrust, Cookiebot, and TrustArc consent overlays before capture; blank-image threshold raised to 20 KB to reliably reject consent-blocked frames
Roundtable refactor: Collapsed per-provider per-persona duplicates into generic dispatch functions (~1000 lines removed);
merch_roundtableauto-substitutes the B2B auditor persona when B2B signals are detected
v1.9.1 — Bug fixes from Cowork plugin QA sweep
CSS selector safety:
compare_storefrontsno longer crashes on Tailwind JIT arbitrary-value class names — all class-to-selector conversions now useCSS.escape()Paint timing: FCP and first-paint captured via pre-navigation
PerformanceObserver— no longer returns 0 on SPA category pagesMobile screenshot: renders in a fresh browser page with UA + viewport set before navigation, fixing blank white screen on UA-gated SPAs
PDP
pageType: URL pattern signals (/product/,/p/,/buy/product/,/pdp/) now take priority over DOM product-count heuristics, fixing misclassification on PDPs with related-product carouselsAI timeout resilience:
audit_storefrontandmerch_roundtablecap the product payload sent to AI at 20 items, reducing prompt size and inference timescrape_pdpprice extraction: falls back to CTA button text when no dedicated price element is found;hasReviewsandspecTable.presentnow require count > 0Facet resolution: "Unknown Facet" placeholders replaced with real names from intercepted XHR when a search API is detected
get_category_sample: error response now includesreasonandsuggestionwhen no product URLs are found
v1.9.0 — PDP sampling, smarter facets, B2B fingerprint depth
scrape_pdptool: dedicated PDP scraper returning description fill rate, image count, review schema, spec table, cross-sell modules, CTA text, and primary/sale prices — purpose-built for single product pagesget_category_sampletool: scrapes a category page and runsscrape_pdpin parallel on a spread/random/top selection of products — one call for a multi-PDP spot checkFacet detection hardened: Strategy 1 now skips parent containers that wrap multiple filter groups (fixes the "all filters collapsed into one facet" bug on obfuscated-class sites like Zappos); Strategy 2 replaced with heading-to-heading tree walker so filter groups segment correctly regardless of CSS class names
B2B fingerprint depth: three new fingerprint fields —
contractPricingVisible,loginRequired,accountPersonalization;audit_storefrontnow uses a dedicatedAUDIT_TIMEOUT_MS(default 240s); PageSpeed Insights Core Web Vitals available viainclude_pagespeed: trueonscrape_page
v1.8.0 — Persona architecture v2
PA-2 Fingerprint context injection: every persona now receives a
## Page Intelligence (pre-scan)block prepended to its prompt — pageType, platform, commerceMode, trust signal inventory, top risks, and recommended personas — so the AI orients before reading raw product dataPA-4 Unified base schema: all personas return
score(0–100),severity(1–5),findings[](3–5 observations),uniqueInsight— enabling structured cross-persona comparisonPA-5 Smart auto-selection:
audit_storefrontacceptspersona: "auto"—selectPersonas(fingerprint)picks the best-fit lens based on pageType and commerceModePA-6 Conversion Architect: new CRO persona maps funnel stages, catalogs friction inventory, identifies top drop-off risk, generates A/B hypotheses with estimated lift ranges
Perf: roundtable log entries no longer embed full result objects —
get_logspayload reduced ~95% for cached re-runs
v1.7.0 — PageFingerprint + synchronous moderator
PA-3 Synchronous moderator:
merch_roundtablenow awaits the moderator synthesis before returning —debate.consensusanddebate.finalRecommendations[]are guaranteed in the tool responsePA-1 PageFingerprint: every scrape result now includes a
fingerprintfield with no extra AI call —pageType,platform,commerceMode,priceTransparency,trustSignalInventory,discoveryQuality,funnelReadiness,topRisks[],recommendedPersonas[]Category contamination detector:
scrape_pagereturnscontamination: { detected, suspectCount, suspects[] }when off-category products appear in resultsget_logstool + file logging: retrieves recent server log entries from an in-memory buffer (500 entries), filterable by level and tool name; setMERCH_LOG_FILEfor NDJSON file logging
v1.6.4
save_eval now works with all tool types, not just merch_roundtable. Convergence score returns null (not 0) for single-persona runs. Auto-detects toolName from whichever persona cache slots are populated.
v1.6.3 — Eval store
Two new tools (save_eval, list_evals) add persistent run tracking. Convergence score (0–100) measures inter-persona agreement on top concerns. Two-tier storage: compact JSONL index (100/domain) + full run JSON (10/domain). Dedup hashing prevents double-saving identical runs.
v1.6.2
Roundtable personas now run in parallel via Promise.all, cutting wall-clock time from ~90s to ~30s. Persona results are written to cache the moment each resolves, so a retry after a timeout picks up where it left off.
v1.6.0 — Network Intelligence Layer
Every scrape_page call now intercepts XHR/fetch responses and fingerprints the commerce stack from 35 platform signatures: Elasticsearch, Algolia, Coveo, Lucidworks Fusion, Bloomreach, Searchspring, SFCC, SAP Hybris, Shopify, Bazaarvoice, and more. When a high-confidence API match is found (≥70%), products and facets are extracted directly from the API response. Deep dataLayer/digitalData parsing surfaces GA4 events, GTM container IDs, A/B experiment assignments, and user segments. Discovered API endpoints are persisted to site memory so the discovery pass only runs once per domain.
v1.5.0 — Scraper expansion
Per-product trust signals (ratings, badges, stock warnings), sort order detection, b2bMode + b2bConflictScore, change detection on repeat visits. New compare_storefronts tool. Multi-step interact_with_page actions array. Optional mobile screenshot. Roundtable streams each persona result as it completes.
v1.4.0
10-minute in-memory page cache. ask_page, audit_storefront, and merch_roundtable reuse recent scrape results, cutting latency in half. Configurable TOOL_TIMEOUT_MS.
v1.3.0
OpenAI-compatible provider support (OpenAI, Groq, Together AI, any OpenAI-compatible endpoint). OPENAI_VISION=true for multimodal models.
v1.2.0
Complete rewrite — lean MCP server replacing the original React + Express UI. Four expert personas, roundtable mode, persistent site memory, dual AI provider support (Anthropic + Gemini).
v1.0.0
Original React + Express application with Gemini-powered merchandising analysis.
License
MIT
Available Tools
14 toolsacquireA
Acquire a complete structured payload from a storefront page in a single crawl. Returns products, facets, sort options, desktop + mobile screenshots, performance metrics, aggregated trust signals, analytics tracking summary, data quality fill rates, navigation structure, and automatically sampled PDP details — all in one call. Use this as the primary entry point for any storefront audit. The payload is designed for offline analysis: call acquire once, then analyze against the returned data with no further live site calls. Always scrapes with Puppeteer first (free, bundled, captures analytics and network events). Falls back to Firecrawl automatically only when Puppeteer is blocked (0 products + FCP=0) and FIRECRAWL_API_KEY is set — Firecrawl costs money per call and is reserved for WAF-protected sites. A warnings[] array flags data quality issues automatically (LOW_CARD_CONFIDENCE, MOBILE_RENDER_FAILED, FCP_ZERO, ECOMMERCE_TRACKING_GAP, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full http/https URL of the category or listing page to acquire. | |
| pdp_sample | No | Number of PDPs to automatically sample and include in pdpSamples[] (default 2, max 5, set 0 to skip). Picks one mid-range and one premium product by price. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses the scraping engine order (Puppeteer first, Firecrawl fallback), cost implications, offline-analysis design, and the warnings[] array with specific quality flag examples. This exceeds expectations.
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 yet front-loaded with a clear summary, then usage guidance, fallback details, and warnings. Each sentence earns its place, but the length and single-paragraph structure make it slightly less scannable than ideal; a 5 would require tighter organization.
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 tool with no output schema, the description lists the major data categories returned (products, screenshots, metrics, trust signals, etc.) and mentions warnings[] for quality issues. It does not specify the exact payload format, but given the breadth of the tool, the description is largely complete; minor absence of return-type detail prevents a 5.
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% and both parameters have detailed descriptions. The tool description does not add meaningful parameter-specific semantics beyond referencing 'automatically sampled PDP details', which the schema already covers. Baseline 3 is appropriate.
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 uses a specific verb ('Acquire') and resource ('complete structured payload from a storefront page'), immediately clarifying the tool's core function. It further distinguishes itself from sibling tools by declaring itself 'the primary entry point for any storefront audit'.
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 description explicitly tells when to use this tool ('Use this as the primary entry point'), when not to rely on alternatives ('designed for offline analysis'), and provides conditional guidance for the Firecrawl fallback ('only when Puppeteer is blocked... and FIRECRAWL_API_KEY is set'), including that Firecrawl is reserved for WAF-protected sites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_productsA
Run full persona analysis on pre-scraped product data without making any live site requests. Accepts products[], facets[], and page metadata as JSON, computes a page fingerprint, then runs the selected persona (or full roundtable if persona is "auto" or unset). Use this to re-analyze acquire payloads offline, or to analyze data from external sources (CSV exports, internal APIs, DTC Research server handoffs). Requires an AI provider (ANTHROPIC_API_KEY, GEMINI_API_KEY, or Ollama) to be configured.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Source URL for context/logging. Defaults to "offline:input". | |
| title | No | Page title for context. | |
| facets | No | Filter/facet objects: [{ name, type, optionCount, options: [{ label }] }]. | |
| persona | No | "auto" or omitting runs the full roundtable (fingerprint-driven). Specify a name to run a single persona. | |
| b2b_mode | No | Override B2B/B2C classification. If omitted, inferred from product signals. | |
| products | Yes | Array of product objects. Each needs at minimum: title (string), price (string|number). Optional: description, rating, reviewCount, badges, stockStatus, imageCount, trustSignals (object), b2bIndicators (string[]), b2cIndicators (string[]). | |
| b2b_conflict_score | No | B2B/B2C conflict score (0–100). If omitted, inferred from products. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses key behavioral traits: no live network requests, requires configured AI provider keys, computes a page fingerprint, and runs either a single persona or full roundtable. It also clarifies the 'auto' behavior. This is good disclosure for a complex analysis tool, though it does not mention side effects or return format, which would be helpful.
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 two sentences, front-loaded with the core purpose and key constraints. It packs in the input format, behavior, use cases, and requirements without unnecessary filler. Every phrase earns its place, making it concise and well-structured.
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?
The tool has 7 parameters, no output schema, and no annotations. The description covers its purpose, inputs, behavior, use cases, and prerequisites thoroughly. The only notable gap is the absence of information about the return value or result structure, but given the tool's clear analysis function and the lack of an output schema, this is a minor omission. Overall, it is sufficiently complete for an agent to understand when and how to invoke it.
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. The description adds some context (e.g., 'computes a page fingerprint' to explain the persona selection), but it largely mirrors what the schema already describes for products, facets, and persona. No additional parameter-level details beyond the schema are provided, which is acceptable given the schema's thoroughness.
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 opens with a specific verb and resource: 'Run full persona analysis on pre-scraped product data.' It clearly distinguishes this from live-scraping siblings like scrape_pdp and acquire by emphasizing 'without making any live site requests.' The mention of offline analysis and persona roundtables makes the tool's purpose unmistakable and differentiates it from other tools in the list.
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 description provides explicit use cases: 're-analyze acquire payloads offline' and 'analyze data from external sources (CSV exports, internal APIs, DTC Research server handoffs).' It also states a prerequisite (AI provider configuration). However, it does not explicitly name an alternative tool for live-scraping scenarios, though siblings like scrape_pdp imply those cases. This is clear context but lacks an explicit 'if you need live data, use X instead' statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_pageA
Ask any natural language question about a storefront page. The AI sees the full product data, facets, performance metrics, and a screenshot. If scrape_page was called on this URL within the last 10 minutes, the cached data is reused — no re-scrape. Use this for ad-hoc questions like "which products are on sale?", "can users filter by size?", "what's the average price?", or "is this page fast enough?". Tip: for slow or local AI models, call scrape_page first, then ask_page — the scrape will be reused.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full http/https URL to scrape and ask about. | |
| depth | No | Pages of pagination to scrape first (default 1). | |
| question | Yes | Your question about the page, in plain language. | |
| max_products | No | Max products per page (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses caching behavior (10-minute reuse), what data the AI sees (product data, facets, performance metrics, screenshot), and a practical usage tip. No side effects or contradictions are present.
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 slightly long but every sentence adds value: what it does, what the AI sees, caching, use cases, and a tip. It is well-structured and front-loaded with the core purpose, though it could be trimmed slightly without losing essential info.
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?
Given no output schema and no annotations, the description adequately covers the tool's behavior, data exposure, caching, and ideal use cases. It does not mention error handling or edge cases, but for a query tool with 4 parameters and no output schema, it is sufficiently 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 coverage is 100%, so each parameter is already described. The description adds some context by explaining that the AI sees full product data and that a cached scrape may be reused, but it does not elaborate on depth or max_products beyond the schema. Baseline 3 is appropriate.
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 clearly states a specific verb ('Ask') and resource ('storefront page'), and differentiates from siblings like scrape_page and interact_with_page by emphasizing natural language ad-hoc questions. It also lists concrete example questions, making the tool's purpose unmistakable.
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 description provides clear usage context with example questions and a performance tip about calling scrape_page first. However, it does not explicitly state when not to use this tool or compare it to alternatives like analyze_products, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_sessionA
Clear the stored session for a domain — wipes both cookies and cached page data. Use this to start fresh (e.g., test logged-out vs logged-in experience, or force a fresh scrape).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Any URL on the domain to clear (e.g., "https://www.zappos.com"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the destructive behavior of wiping cookies and cached data, and notes the domain scope. It doesn't mention irreversibility or session storage details beyond cookies/cache, but for a simple tool this is adequate.
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 two sentences: first states the purpose and mechanics, second gives usage examples. Every word earns its place with no redundancy or 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 one-parameter, no-output-schema tool, the description is complete. It covers what the tool does, what it affects, and when to use it. No additional context is needed.
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% with a clear parameter description. The tool description adds value by clarifying that any URL on the domain works, not just the exact homepage, and provides an example. This goes beyond the schema's basic description.
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 clearly states the tool's function with a specific verb and resource: 'Clear the stored session for a domain' and specifies exactly what is wiped (cookies and cached page data). This distinguishes it from sibling tools like scrape_pdp or interact_with_page.
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 description explicitly says 'Use this to start fresh' and provides concrete example use cases (testing logged-out vs logged-in, forcing a fresh scrape). It lacks explicit when-not-to-use guidance or alternative tool references, 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.
compare_storefrontsA
Scrape two storefront URLs and return a structured side-by-side diff: product count delta, facet gaps (what site B has that A doesn't and vice versa), trust signal coverage (ratings, reviews, badges), sort option gaps, B2B mode, and performance delta. Reuses cached page data if either URL was scraped in the last 10 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| url_a | Yes | First storefront URL (your site or baseline). | |
| url_b | Yes | Second storefront URL (competitor or variant). | |
| max_products | No | Max products per page. Default: 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the tool scrapes URLs, discloses caching behavior ('reuses cached page data if either URL was scraped in the last 10 minutes'), and lists the exact outputs. This goes well beyond what a minimal description would provide and gives the agent a strong basis for predicting side effects and performance.
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 three sentences, front-loaded with the primary action, and uses compact list-style phrasing for the diff components. Every sentence earns its place, and the caching note is efficiently integrated into the final sentence. There is no fluff or redundancy.
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?
Despite the absence of an output schema, the description enumerates all major return components, covering product count, facets, trust signals, sort options, B2B mode, and performance. It also mentions caching behavior and the default product count context. This is sufficient for an agent to understand what the tool produces and how it behaves, even without an output schema.
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%, with clear descriptions for url_a, url_b, and max_products. The tool description adds overall context about the diff output but does not add meaningful parameter-level semantics beyond what the schema already provides. A baseline of 3 is appropriate because the schema handles parameter explanation fully.
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 opens with a specific verb ('Scrape') and a clear resource ('two storefront URLs'), then enumerates the exact comparison dimensions returned (product count delta, facet gaps, trust signal coverage, sort option gaps, B2B mode, performance delta). This clearly distinguishes it from sibling tools like scrape_pdp or scrape_page, which focus on individual pages rather than side-by-side storefront comparisons.
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 description makes the use case explicit: comparing two storefront URLs and receiving a structured diff. It does not explicitly state when not to use it or name alternatives, but the detailed output summary and the caching note imply a comparison workflow that is distinct from the sibling scraping tools. It provides clear context without exclusions, which fits a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_sampleA
Sample a set of PDPs from a category page. Scrapes the category page (or uses cached data), picks product URLs based on a sampling strategy, then calls scrape_pdp on each in parallel. Useful for PDP spot-checks without manual URL selection. Strategies: "spread" (low/mid/high price tiers), "random" (random selection), "top" (first N products).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Category page URL to sample PDPs from. | |
| count | No | Number of PDPs to sample. Default: 2, max: 5. | |
| strategy | No | Sampling strategy. Default: "spread". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behaviors: scraping category page with caching ('or uses cached data'), strategy-based URL selection, and parallel calls to scrape_pdp. It also explains the three strategies in detail. This goes beyond the schema and gives the agent a clear picture of the tool's execution model.
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 concise and well-structured: it opens with the primary purpose, explains the workflow, states the use case, and lists strategies. Each sentence earns its place, with no unnecessary filler. The density of useful information is high.
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 tool with three parameters, full schema coverage, and no output schema, the description is comprehensive. It covers what the tool does, how it works, when to use it, and parameter semantics. It doesn't describe return values, but given the tool's simplicity and the sibling scrape_pdp's likely role, this is a minor gap. Overall, it's complete enough for reliable selection and invocation.
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. The description adds value by explicitly defining the strategy enum values ('spread' as low/mid/high price tiers, 'random', 'top' as first N products). This is not present in the schema descriptions, enhancing the agent's understanding of how to choose a strategy.
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 clearly states the tool's purpose: 'Sample a set of PDPs from a category page.' It distinguishes this from sibling tools like scrape_pdp by describing its multi-step workflow (scrape category page, pick URLs, call scrape_pdp in parallel). The verb 'sample' is specific and differentiates from direct scraping.
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 description says it's 'Useful for PDP spot-checks without manual URL selection,' which provides clear context for when to use it. It doesn't explicitly name alternatives or exclusions, but the mention of calling scrape_pdp implies it's a higher-level alternative. This meets the 'clear context, no exclusions' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_logsA
Retrieve recent server log entries from the in-memory buffer (last 500 entries). Returns entries newest-first. Filter by level or tool name. Useful for reviewing roundtable notification streams, debugging tool calls, and capturing logs that are hard to copy from the MCP Inspector UI.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | No | Filter by tool name (e.g. "merch_roundtable", "audit_storefront"). Omit for all tools. | |
| level | No | Filter by log level. Omit to return all levels. | |
| limit | No | Max entries to return (default: 50, max: 500). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the in-memory buffer nature, the 500-entry cap, newest-first ordering, and filter capabilities. While it doesn't mention side effects or permissions, it is a read-only operation and the details provided offer sufficient transparency.
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 concise, front-loaded sentences. The first sentence gives the core functionality, the second explains ordering/filtering, and the third provides practical use cases. No wasted words.
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 three optional parameters and no output schema, the description explains the return order and buffer limits, but could say a bit more about the structure of each log entry. Still, it provides enough for an agent to understand the tool's scope and purpose.
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 baseline is 3. The description confirms filtering by level or tool name, matching the schema, but does not add extra semantic detail beyond what the parameter descriptions already provide.
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 clearly states the action ('Retrieve'), the resource ('server log entries from the in-memory buffer'), and specific constraints (last 500 entries, newest-first). It distinguishes this tool from its web-scraping siblings by focusing on server logs, a unique function.
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?
Provides clear context for when to use the tool ('reviewing roundtable notification streams, debugging tool calls, capturing logs...'). No explicit exclusions or alternatives, but the use cases are specific and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interact_with_pageA
Execute one or more search/click actions on a storefront page in sequence, then return the resulting page data. Accepts a single action or an array for multi-step flows (e.g. search → filter → click). Session cookies are carried over automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full http/https URL to load. | |
| value | No | Text to type for single-action shorthand. | |
| action | No | Single-action shorthand. Ignored when "actions" array is provided. | |
| actions | No | Ordered list of actions to execute. Use this for multi-step flows. | |
| selector | No | CSS selector for single-action shorthand. | |
| include_screenshot | No | Include a base64 JPEG screenshot of the result page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load. It discloses that actions are executed sequentially, session cookies carry over automatically, and it returns page data. However, it does not explain the shape of the returned data, failure behavior, or any side effects beyond cookie handling, leaving notable transparency gaps for a stateful interaction tool.
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?
Two sentences, front-loaded with the primary action and result, then a brief note on modes and cookies. Every word earns its place with no redundancy.
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?
The tool has no output schema, so the description must clarify return values. 'Return the resulting page data' is vague about the format. It also omits error handling and any prerequisites beyond the URL. For a 6-parameter tool with nested action objects, this is under-specified.
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 the single-action vs. array distinction and gives a concrete example, but this does not add substantially beyond what the schema already explains for each parameter.
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 uses a specific verb ('Execute'), specifies the resource ('storefront page'), and defines the scope ('search/click actions in sequence'). It clearly distinguishes itself from sibling tools like scrape_page by emphasizing interaction (actions) rather than passive extraction.
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 provides clear context for when to use this tool: for single or multi-step interactions, with an example flow ('search → filter → click'). However, it does not explicitly mention when not to use it or name alternatives, so it falls short of full exclusions guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_evalsA
List saved eval runs from the eval store. If a URL or domain is provided, returns the eval history for that domain (newest first) with convergence scores, top concerns, and moderator summaries. If no URL is provided, returns a summary of all domains with saved evals. Use this to track trends, compare runs before/after changes, or retrieve a full run ID for deeper inspection.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Any URL on the domain to list evals for. Omit to list all domains. | |
| limit | No | Max records to return (default: 10). | |
| run_id | No | A specific eval run ID to retrieve the full run details (including complete persona outputs). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does that by specifying output details (newest first, convergence scores, top concerns, moderator summaries) and the full-run retrieval behavior via run_id. It could add more about pagination or rate limits, but the core behavior is clearly disclosed.
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 three sentences with no fluff. It leads with the primary purpose, then explains the branching behavior, then gives application use cases. Every sentence earns its place.
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?
The tool is simple (3 optional params, no output schema), and the description covers all functional branches: with URL, without URL, and using run_id for deep inspection. It also lists what the returned data contains, making it complete for an agent to invoke 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?
The schema covers 100% of parameters, so the baseline is 3. The description adds meaningful context beyond the schema: it clarifies that url filters by domain, run_id retrieves 'complete persona outputs', and limit controls record count. This enriches parameter understanding enough to warrant a 4.
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 clearly states the tool 'List saved eval runs from the eval store', which is a specific verb+resource combination. It distinguishes itself from siblings like save_eval and get_logs by focusing on the eval store and the conditional behavior (per-domain history vs. all domains).
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 description provides explicit when-to-use guidance: 'If a URL or domain is provided, returns... If no URL is provided, returns...' and includes example use cases like tracking trends and comparing runs. It does not mention when not to use it or name alternatives, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merch_roundtableA
[EXPERIMENTAL] Run a multi-perspective merchandising analysis using three expert personas (Floor Walker, Auditor, Scout) that independently evaluate the page, then debate their findings to produce a consensus. The Floor Walker reacts as a real shopper, the Auditor evaluates against a structured framework, and the Scout analyzes competitive positioning. A moderator then synthesizes all three views into prioritized recommendations with endorsements from each persona. Reuses cached page data if scrape_page was called on the same URL within the last 10 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL of the page to analyze. | |
| depth | No | Pages of pagination to follow (1-5, default 1). | |
| max_products | No | Max products to extract per page (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure. It explains the multi-step process (independent evaluation, debate, synthesis) and the 'EXPERIMENTAL' status. It also discloses the caching behavior with scrape_page. This provides substantial insight beyond a simple 'analyzes the page' statement, though it does not explicitly state side-effect-free behavior or referential details like timeout or rate limits.
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 well-structured paragraph with front-loaded purpose, followed by persona details, process, and caching behavior. Each sentence adds informative value, though it is slightly longer than necessary. For a complex tool, this level of detail is justified, and it remains concise overall.
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?
Given the tool's complexity, the description covers the key contextual elements: personas, process, output (prioritized recommendations with endorsements), and cache reuse. There is no output schema, so the description's mention of the output format partially compensates. Missing details about edge cases (e.g., invalid URL) or auth are not critical for an experimental analysis tool. It is reasonably 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% for all three parameters, so the baseline is 3. The description adds no additional meaning beyond the schema; it does not elaborate on how 'depth' or 'max_products' affect the analysis, nor does it clarify the 'url' parameter beyond its schema definition. The description relies on the schema for parameter semantics.
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 clearly states the tool's specific verb and resource: 'Run a multi-perspective merchandising analysis' with three named personas. It distinguishes from siblings by describing the unique multi-persona debate and consensus process, and the output of prioritized recommendations. This is a specific, non-tautological purpose.
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 description provides clear context for when to use the tool: for a multi-perspective merchandising analysis. It also hints at the relationship with scrape_page by mentioning cache reuse. However, it does not explicitly contrast with sibling tools like ask_page or compare_storefronts, nor does it state when not to use it. Clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_evalA
Save the current roundtable or audit persona results for a URL to the eval store. Reads persona results from the session cache — call merch_roundtable or audit_storefront first on the same URL. Returns an eval ID, a convergence score (0–100 measuring how much the three personas agreed on their top concerns), and the storage path. Evals persist across sessions in ~/.merch-connector/evals/ (up to 100 compact records + 10 full runs per domain). Use list_evals to review history and track whether findings are consistent across runs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL that was analyzed. Must match a URL with cached persona results in this session. | |
| note | No | Optional note to attach (e.g., "baseline before redesign", "post-holiday restock"). | |
| save_full_run | No | Save the full persona outputs as a JSON file (default: true). Set false for a compact-only record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully takes on the transparency burden. It discloses that the tool reads from session cache, returns an eval ID with a convergence score, and details persistence behavior (storage path, 100 compact records + 10 full runs per domain). This goes beyond simple 'saves data' and gives the agent a clear model of side effects and persistence.
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 three sentences, each earning its place: purpose/prerequisite, return values, and persistence/history guidance. It is front-loaded with the primary action, avoids redundancy, and maintains a logical flow from what the tool does to how to use it. No filler is present.
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?
Given the tool's moderate complexity and lack of annotations/output schema, the description is remarkably complete. It covers prerequisites, return values, storage semantics, limits, and relationship to a sibling tool. An agent could invoke save_eval correctly and understand the consequences without external documentation.
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?
The input schema already has 100% coverage with clear descriptions for all three parameters (url, note, save_full_run), so the baseline is 3. The description adds no substantial parameter-level detail beyond what the schema provides; it only contextualizes the overall workflow. It does not repeat or enhance the schema's parameter explanations.
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 opens with a clear verb-resource pairing: 'Save the current roundtable or audit persona results for a URL to the eval store.' This distinguishes save_eval from sibling tools like list_evals (which reviews history) and merch_roundtable (which produces the results). It accurately states the tool's core function without ambiguity.
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 description explicitly states the prerequisite: 'call merch_roundtable or audit_storefront first on the same URL.' It also directs users to list_evals for reviewing history, creating a clear when-to-use versus alternative-tool distinction. This gives concrete context for when save_eval is appropriate and what must occur before invoking it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_pageA
[DEPRECATED — use acquire instead] Extract raw structured data from any storefront URL without running AI analysis. Returns product catalog (title, price, stock, CTA, description, B2B/B2C signals), facets/filters, page metadata, performance timing, data layer contents, and interactable elements. Also intercepts XHR/fetch network responses to fingerprint the commerce platform (Algolia, Elasticsearch, SFCC, Shopify, etc.), extract structured product and facet data directly from APIs when confidence is high, and parse dataLayer/digitalData ecommerce events (GA4, GTM, Adobe, Segment). Results are cached for 10 minutes — calling audit_storefront or ask_page on the same URL afterward will reuse this data. Session cookies are managed automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full http/https URL to scrape. | |
| depth | No | Pages of pagination to follow (1 = current page only, max 5). Default: 1. | |
| max_products | No | Max products to extract per page. Default: 10. | |
| include_pagespeed | No | Fetch real Core Web Vitals from PageSpeed Insights API (adds ~5s). Default: false. | |
| mobile_screenshot | No | Also capture a 390×844 (iPhone 14) mobile viewport screenshot. Returned as a second image. Default: false. | |
| include_screenshot | No | Set true to include a base64 JPEG screenshot. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses network interception, caching behavior, automatic session cookie management, and the absence of AI analysis. This is rich behavioral context beyond the raw schema.
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 dense paragraph, but it is front-loaded with the deprecation notice and every sentence adds meaningful detail. A bit long, but appropriate given the tool's complexity and lack of an output 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?
Given high complexity, no output schema, and no annotations, the description is remarkably complete. It covers return categories, caching, session handling, platform fingerprinting, and deprecation, leaving little ambiguity about what the tool does and its side effects.
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. The description does not add parameter-level explanation, but it provides domain context about what the scraped data will contain. Since each parameter is already fully documented in the schema, 3 is appropriate.
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 clearly states the tool extracts raw structured data from storefront URLs without AI analysis, enumerates the returned data categories, and explicitly marks the tool as deprecated with a direct alternative. This distinguishes it from siblings like scrape_pdp and acquire.
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 deprecation notice explicitly directs users to use 'acquire instead', providing a clear when-not-to-use instruction. It also notes that results are cached and reused by audit_storefront or ask_page, giving additional context for downstream usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_pdpA
Scrape a product detail page (PDP) and return PDP-specific signals: title, description fill rate, image count, review presence and count, review schema (ld+json), spec table, cross-sell modules, CTA text, primary and original prices, badge texts, and performance timing. Use this instead of scrape_page when the target is a single product page.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full http/https URL of the PDP to scrape. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the output signals including performance timing, but does not explicitly state read-only behavior, potential failure modes, or any side effects. This is adequate but not comprehensive.
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?
Two sentences, direct, no filler. The first sentence states purpose and lists outputs; the second provides usage guidance.
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 single-parameter tool with no output schema, the description covers the purpose, key outputs, and usage distinction. It lacks explicit return structure but is reasonably 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?
The schema has one param 'url' with a clear description, and schema coverage is 100%. The description adds context that the URL should be a PDP, but parameters are well-documented in the schema, so baseline 3 is appropriate.
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 uses the specific verb 'scrape' and identifies the resource as 'product detail page (PDP)', listing concrete signals returned. It explicitly distinguishes from sibling scrape_page by naming it and stating when to use this alternative.
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 description explicitly states 'Use this instead of scrape_page when the target is a single product page,' providing a clear alternative and condition. This satisfies the 'when/when-not/alternatives' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site_memoryA
Read, write, or list persistent memory about websites. Memory auto-accumulates on every scrape (structure, performance, facets). Use this to add custom notes ("this site needs 5s wait for lazy load", "products use .wat-product-tile selector", "requires login cookies for pricing"). Memory persists across sessions and server restarts.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Optional key to set a specific field (e.g., "waitTime", "customSelector"). Used with "write". | |
| url | No | Any URL on the domain (required for read/write/delete). | |
| note | No | A note to add when action is "write". Will be appended to existing notes. | |
| value | No | Value for the key. Used with "write" when "key" is provided. | |
| action | Yes | "read" a domain's memory, "write" a note, "list" all remembered sites, or "delete" a domain's memory. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses important behaviors: memory persists across sessions and restarts, and it auto-accumulates on every scrape. This adds context beyond the schema, though it could further describe what happens on delete or how reads are returned.
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 two sentences plus examples, with the main action front-loaded. Every sentence adds information: purpose, auto-accumulation, persistence, and realistic usage examples. No filler or redundancy.
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?
The tool has multiple actions (read/write/list/delete) and no output schema. The description explains the overall concept but does not specify return values or action-specific behavior (e.g., what 'read' returns or what 'list' outputs). This is a notable gap for a multi-action tool, though the schema's action descriptions partially fill it.
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?
The schema already covers all parameters (100% coverage), so the baseline is 3. The description adds value by giving example keys ('waitTime', 'customSelector') and note content, which clarifies how 'key' and 'note' might be used in practice. This pushes it above baseline.
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 clearly states the tool's function: 'Read, write, or list persistent memory about websites.' It uses specific verbs and a specific resource, and the examples (wait time, custom selectors, login cookies) make the purpose concrete. While 'delete' is omitted from the verb list, the core purpose is unmistakable and distinguishes it from sibling tools focused on scraping and interaction.
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 description provides explicit usage scenarios with 'Use this to add custom notes' and concrete examples. It also notes that memory auto-accumulates, implying it's the place for persistent data. However, it does not mention when not to use the tool or compare against alternatives, so it stops short of a 5.
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.
14 tool updates
v2.1.0- First observed
acquire - First observed
analyze_products - First observed
ask_page - First observed
clear_session - First observed
compare_storefronts - First observed
get_category_sample - First observed
get_logs - First observed
interact_with_page - First observed
list_evals - First observed
merch_roundtable - First observed
save_eval - First observed
scrape_page - First observed
scrape_pdp - First observed
site_memory
TDQS
Scored across 14 tools
Most tools have clear, distinct purposes with explicit guidance (e.g., acquire is the primary entry point, scrape_pdp is for PDPs, scrape_page is deprecated). However, some analytical tools (merch_roundtable, analyze_products, ask_page) have overlapping functionality, though descriptions clarify input sources.
Tool names generally follow a verb_noun snake_case pattern (scrape_pdp, compare_storefronts, list_evals). A few exceptions like 'acquire', 'site_memory', and 'merch_roundtable' deviate slightly, but the overall pattern remains consistent and readable.
With 14 tools, the server is well-scoped for its purpose, covering scraping, analysis, interaction, comparison, memory, and evaluation. Each tool earns its place, and the count is within the optimal range.
The server covers the full workflow: acquire data, scrape specific products, interact, compare, ask questions, analyze offline, and save/list evals. Minor gaps include no explicit delete for evals or memory, but these are not critical to the core functionality.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
Hosted MCP for e-commerce: live product catalog, stock, and pricing for AI agents.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Shopping MCP for AI agents: search, compare, Amazon buy links. Auto-register.
Related MCP Servers
- AlicenseCqualityCmaintenanceA Model Context Protocol server enabling product searches across e-commerce platforms, price history tracking, and product specification-based searches using natural language prompts.219MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with a complete e-commerce application, providing authentication, product browsing, and shopping cart management through standardized MCP tools.-
- FlicenseNot gradedqualityDmaintenanceA proof of concept MCP server that gives AI agents business context for e-commerce operations including orders, inventory, logistics, returns, claims, and payments.1-
- AlicenseAqualityDmaintenanceMCP server for the Cart e-commerce intelligence API, enabling AI agents to search stores, products, ads, and suppliers, and analyze market trends.157 npmMIT