Skip to main content
Glama

snappshop-mcp: Snapp! Shop MCP server for AI agents

Let your AI agent shop around on Snapp! Shop (اسنپ‌شاپ). An unofficial, read-only MCP server for Snapp! Shop, the Snapp marketplace in Iran: search products, compare every seller's price in Toman, filter by specs, read buyer reviews and catch today's flash sales, all from Claude, Cursor or Copilot.

PyPI Python CI MCP Registry License: MIT

Install in Cursor Install in VS Code

For AI agents · Why · What it can do · Quick start · Tools · How it works · Good to know · FAQ · Configuration · فارسی · Development


For AI agents

  • What: unofficial MCP server (model context protocol) for Snapp! Shop (snappshop.ir), a marketplace of many shops and pharmacies in Iran: electronics, phones, health and beauty, home, fashion. Queries in Persian match best; prices in Toman.

  • Install: uvx snappshop-mcp or claude mcp add snappshop -- uvx snappshop-mcp. Transport: stdio. Needs uv (Python 3.10+).

  • Auth: none, no API key or account (it uses the guest session the site gives every visitor). Snapp! Shop only accepts Iranian IPs: run it from Iran without a VPN, or set SNAPPSHOP_MCP_PROXY to an HTTP proxy that exits in Iran. System proxy settings are ignored.

  • Access: read-only. No login, basket, orders or payment, so no confirmation is needed before calling any tool. All 13 tools carry readOnlyHint: true.

  • Tools: 13: ss_search, ss_suggest, ss_filters, ss_categories, ss_category, ss_brand, ss_product, ss_compare, ss_reviews, ss_similar, ss_seller, ss_promotions, ss_collection. Typical sequence: ss_search -> ss_product (all sellers, cheapest first) -> ss_reviews. Browsing: ss_categories -> ss_filters -> ss_category.

  • Ids: product_id (digits) goes to ss_product and ss_compare; id (6 characters) to ss_reviews and ss_similar; seller_id to ss_seller; collection_id to ss_collection.

  • Units: prices in Toman, for delivery to Tehran, as the site shows them.

  • Use when: comparing prices, sellers, specs and reviews of products sold in Iran, or watching flash sales.

  • Do not use when: the user wants to order or pay, or is outside Iran with no Iranian IP or proxy (the site answers HTTP 403).

  • Output: compact JSON. Null and empty fields are omitted (a missing rating = not rated). Lists are 12 items per page; the site caps a list at 10,000 items. Reviewer names are left out.

  • Machine-readable: server.json and the iran-mcp catalog once the server is listed there.

Related MCP server: DigiSnap-MCP

Why

Snapp! Shop sells one product through many sellers at different prices, warranties and delivery terms. Finding the best offer means opening product pages one by one. An agent with snappshop-mcp reads them all in seconds:

You: Who sells the Samsung Galaxy A07 (64 GB) cheapest on Snapp! Shop, and with what warranty?

Agent: calls ss_search(query="Galaxy A07 64") → ss_product(product="25751584")

Price (Toman)

Seller

Colour

Warranty

44,600,000

دیجی لند سانا

سبز

گارانتی ۱۸ ماهه شرکتی

44,770,000

سام پلاس

بنفش

گارانتی ۱۸ ماهه هماهنگ (داریا همراه)

45,500,000

ویراوین

سبز

گارانتی ۱۸ ماهه شرکتی

12 sellers in total, rating 4.3 from 370 ratings. Want the reviews with ss_reviews?

Real tool output from 2026-11-04; prices and stock change all the time. Prices are in Toman.

What it can do

  • Search products by name, with price range, brand, spec, colour, stock, discount and fast-delivery filters

  • Compare sellers: every offer of a product with price, discount, stock, warranty, delivery method and seller rating

  • Compare products side by side: price, rating and only the specs that differ

  • Browse the category tree, brand pages and seller pages; ss_filters shows the real filters of a list

  • Read reviews with scores, pros and cons, and find similar products

  • Catch deals: flash sales with end times, campaign pages and every product in a promotion

  • Read-only by design: no login, no basket, no orders, no payment

Example prompts:

  • "Cheapest Samsung phone in stock, with 256 GB storage and a black colour."

  • "Compare the Xiaomi Poco X7 Pro and the Galaxy A56: what differs in the specs?"

  • "Which seller of this magnesium supplement has the lowest price, and what do buyers say?"

  • "What flash sales end tonight on Snapp! Shop?"

  • ارزان‌ترین گوشی سامسونگ موجود با حافظه ۲۵۶ گیگابایت را پیدا کن.

  • فروشنده‌های این محصول را با قیمت و گارانتی مقایسه کن.

  • امروز چه فروش ویژه‌هایی در اسنپ‌شاپ هست؟

Quick start

You need uv and an Iranian IP address (Snapp! Shop blocks foreign IPs; see FAQ). No API key or account.

claude mcp add snappshop -- uvx snappshop-mcp

Settings → Developer → Edit Config, then add:

{
  "mcpServers": {
    "snappshop": { "command": "uvx", "args": ["snappshop-mcp"] }
  }
}

Click Install in Cursor above, or add the Claude Desktop block to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).

Click Install in VS Code above, or add to .vscode/mcp.json:

{
  "servers": {
    "snappshop": { "type": "stdio", "command": "uvx", "args": ["snappshop-mcp"] }
  }
}
codex mcp add snappshop -- uvx snappshop-mcp

Or in ~/.codex/config.toml:

[mcp_servers.snappshop]
command = "uvx"
args = ["snappshop-mcp"]

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "snappshop": { "command": "uvx", "args": ["snappshop-mcp"] }
  }
}

Add the Claude Desktop block to ~/.codeium/windsurf/mcp_config.json.

It's a standard stdio MCP server: run uvx snappshop-mcp, or pip install snappshop-mcp and run snappshop-mcp.

Tools

All tools are read-only. Lists return 12 items per page (page starts at 1).

Tool

What it does

ss_search

Find products by name; filters: price range, brands, specs, colours, in stock, discounted, fast delivery; sort

ss_suggest

Popular search phrases for a prefix, with popularity scores

ss_filters

Price range, colours, brands and spec filters (with options) of a category or a search

ss_categories

Category paths: the top level, or the children of one

ss_category

Products of a category or category-brand page, with the same filters as ss_search

ss_brand

Products of a brand page

ss_product

Specs, rating and every seller's offer (price, discount, stock, warranty, delivery, seller rating), cheapest first

ss_compare

2-4 products side by side: price, rating, seller count and the specs that differ

ss_reviews

Buyer reviews: score, text, pros and cons, votes, date; with total and pages

ss_similar

Similar products, or accessories sold with the product

ss_seller

Products of one seller, with the seller's name and score

ss_promotions

Flash sales (with end times), carousels and campaign pages; links to the tool that opens each

ss_collection

Every product of one promotion from ss_promotions

Filters use names, not ids: specs=["حافظه داخلی=256 گیگابایت"], colors=["مشکی"]. Call ss_filters first to see what a category offers.

How it works

The server calls the same JSON API (apix.snappshop.ir) that the Snapp! Shop web app uses, with the guest token the site hands to every visitor. Requests go out with a Chrome TLS fingerprint and the headers the site's own frontend sends, so they look like normal browsing. One shared HTTP client caches reads for 60 seconds, limits concurrency, retries timeouts and server errors, and refuses any host except apix.snappshop.ir.

Nothing is stored and nothing is sent anywhere else. There is no login: the server cannot see or change an account.

Good to know

  • Iranian IPs only. From abroad the site answers HTTP 403 ("turn off your VPN"). Use an Iranian connection or SNAPPSHOP_MCP_PROXY.

  • Prices are Toman, as the site shows them, for delivery to Tehran. Stock and prices move during the day.

  • Totals are capped at 10,000 by the site and can differ by one or two between calls.

  • A phrase nothing matches falls back to unrelated products, so check the titles.

  • Top-level categories (such as mobile) have no product list: pick a subcategory from ss_categories.

  • Reviewer names are not returned.

FAQ

Does it need an API key or an account? No. It uses the guest session every visitor gets.

Can it buy something or add to the basket? No. It is read-only by design.

Why do I get HTTP 403? The site only answers Iranian IPs. Run the server from Iran without a VPN, or set SNAPPSHOP_MCP_PROXY to an HTTP proxy that exits in Iran.

Is this the same as snapp-mcp? No. snapp-mcp covers Snappfood (restaurants) and SnappMarket (groceries); this server covers the Snapp! Shop marketplace.

Which language should I ask in? Persian matches best because titles and specs are Persian; English brand and model names work too.

How do I filter a phone by storage? Call ss_filters(path="mobile/samsung"), then ss_category(path="mobile/samsung", specs=["حافظه داخلی=256 گیگابایت"]).

Configuration

Variable

Required

Default

Meaning

SNAPPSHOP_MCP_PROXY

no

unset

HTTP proxy for every request, e.g. http://user:pass@host:port. A comma-separated list is used one at a time: the next proxy takes over when one is blocked (403/429) or cannot connect

فارسی: سرور MCP اسنپ‌شاپ

snappshop-mcp یک سرور MCP غیررسمی و فقط‌خواندنی برای اسنپ‌شاپ (بازار آنلاین اسنپ با هزاران فروشنده و داروخانه) در ایران است. این سرور به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد در اسنپ‌شاپ جستجو کند، قیمت و گارانتی همهٔ فروشنده‌های یک کالا را مقایسه کند، مشخصات و نظرات خریداران را بخواند و فروش ویژه‌های فعال را پیدا کند.

  • فقط خواندنی است: وارد حساب نمی‌شود، سبد خرید نمی‌سازد و سفارش ثبت نمی‌کند.

  • قیمت‌ها به تومان هستند، همان‌طور که سایت نشان می‌دهد.

  • روی سیستم خود شما اجرا می‌شود و به هیچ سرور واسطی داده نمی‌فرستد.

  • نیازی به کلید API یا حساب کاربری ندارد.

نصب در Claude Code:

claude mcp add snappshop -- uvx snappshop-mcp

بعد بپرسید: «ارزان‌ترین گوشی سامسونگ موجود با حافظهٔ ۲۵۶ گیگابایت کدام است و کدام فروشنده ارسال سریع دارد؟»

نکته: سرور باید روی سیستمی با IP ایران و بدون VPN اجرا شود، چون اسنپ‌شاپ درخواست‌های خارج از ایران را مسدود می‌کند. اگر ناچار به VPN هستید، متغیر SNAPPSHOP_MCP_PROXY را روی یک پروکسی HTTP با خروجی ایران بگذارید.

عبارت‌های پرجستجو: اسنپ‌شاپ، خرید آنلاین، مقایسه قیمت، قیمت گوشی، مقایسه فروشنده، گارانتی، فروش ویژه، تخفیف، دستیار هوش مصنوعی، سرور MCP فارسی.

Development

git clone https://github.com/sepehr071/snappshop-mcp && cd snappshop-mcp
uv sync
uv run python -m pytest            # offline, against recorded responses
uv run python -m pytest -m live    # real API (needs an Iranian IP)
uv run ruff check .

Tools live in src/snappshop_mcp/shop.py; each is a typed async function with a docstring that tells the agent when to use it. Issues and PRs are welcome, especially new tools and fixes for API changes.

Releases: bump the version in pyproject.toml and server.json, then push a v* tag. GitHub Actions tests, publishes to PyPI and the MCP Registry, and creates the GitHub Release.

  • iran-mcp: catalog of all Iranian-service MCP servers

  • snapp-mcp: Snappfood and SnappMarket (restaurants and groceries)

  • digikala-mcp: Digikala product search and prices

  • torob-mcp: price comparison across Iranian shops

  • basalam-mcp: handmade and local products on Basalam

Disclaimer

Unofficial and not affiliated with or endorsed by Snapp. It is read-only: it only reads the public endpoints of the snappshop.ir web app, which can change without notice. Please keep request rates reasonable.

Author

Built and maintained by Sepehr Radmard (سپهر رادمرد). Connect on LinkedIn or follow @sepehr071 on GitHub for more MCP servers for Iranian websites, all listed in iran-mcp. If this saves you time, a star on the repo helps other people find it.

License

MIT

If this saves you clicks, a star helps others find it.

Available Tools

13 tools
ss_brandBrand pageA
Read-onlyIdempotent

List the products of one brand page on Snapp! Shop.

Use when you know the brand slug (it is in brand links on the site); for a brand inside a category use ss_category.

NameRequiredDescriptionDefault
pageNoPage number, 12 items per page, starting at 1.
slugYesBrand slug from a site URL snappshop.ir/brand/<slug>, e.g. 'samsung'.
sortNoOrder of the list; the site default (no value) is its own relevance order.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, open-world, idempotent, and non-destructive behavior, so the safety profile is fully covered elsewhere. The description adds the useful detail that the brand slug comes from site links, but it does not add much about pagination, rate limits, or return behavior beyond the schema.

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 two tight sentences, front-loaded with the core action and followed by the key usage constraint. Every sentence adds routing or scope information.

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?

For a simple read-only list tool with rich parameter descriptions and full safety annotations, the definition covers purpose, slug source, and the main sibling alternative. It does not describe the shape of returned product results, but no output schema exists and the remaining gaps are minor.

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%, and the schema already documents slug format, page size, and sort values. The description only reinforces where the slug comes from; it does not add new meaning for page or sort beyond what the schema provides.

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: list products of one brand page on Snapp! Shop. It also distinguishes this from ss_category by explaining that category-scoped brand browsing belongs to the other tool.

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 explicitly says to use this tool when the brand slug is known, notes where slugs come from, and routes category-specific brand lookups to ss_category. That is clear when-to-use guidance with a named alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_categoriesCategoriesA
Read-onlyIdempotent

List Snapp! Shop categories as path values that ss_category accepts.

Call with no argument for the top-level categories, then again with one of their paths for the subcategories and brand pages below it.

NameRequiredDescriptionDefault
parentNoA category path such as 'mobile' to list what is under it; empty lists the top-level categories.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety needs no restating. The description usefully adds the hierarchical drill-down behavior and mentions brand pages appearing below categories, but says nothing about recursion depth limits, result-set size, or what happens with an invalid path.

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?

Two sentences with zero filler; the identity of the output ('`path` values') comes first and the iterative usage pattern follows. Nothing needs trimming or reordering.

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?

For a single-optional-parameter read tool with no output schema, the description covers what it returns, how to call it, and how to walk the hierarchy. The only real gap is whether traversal bottoms out at the subcategory/brand-page level or continues deeper.

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% and the `parent` property already documents the empty-string/null top-level case with an example. The description adds a little meaning by implying the parent value must be a path previously returned by this same tool, but it repeats the schema's own 'no argument' semantics rather than extending them. Baseline 3 is appropriate.

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 and resource ('List Snapp! Shop categories') and specifies the returned shape as `path` values, explicitly tying that output to the sibling ss_category. An agent can distinguish this from ss_search, ss_suggest, and ss_filters without reading any 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?

Gives an explicit call pattern: invoke with no argument for top-level, then again with a returned path for subcategories and brand pages. This implicitly sequences the tool before ss_category, though it never states exclusions (e.g., don't use this to search by keyword), so routing is clear but not fully disambiguated from all siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_categoryCategory productsA
Read-onlyIdempotent

List the products of one Snapp! Shop category or category-brand page, with sort, price, spec and colour filters.

Use after ss_categories; ss_filters shows the spec names. A top-level path such as 'mobile' has no product list: pick a subcategory.

NameRequiredDescriptionDefault
pageNoPage number, 12 items per page, starting at 1.
pathYesCategory path from ss_categories, one or two parts, e.g. 'mobile/samsung' or 'health-beauty/vitamins'.
sortNoOrder of the list; the site default (no value) is its own relevance order.
specsNoSpec filters as 'filter=option', by name or id, e.g. ['حافظه داخلی=256 گیگابایت']. One option per filter; names come from ss_filters.
colorsNoColour names or ids from ss_filters, e.g. ['مشکی'].
expressNoOnly products with fast delivery.
in_stockNoOnly products that can be bought now.
max_priceNoHighest price in Toman (not Rial).
min_priceNoLowest price in Toman (not Rial).
discountedNoOnly products with a discount.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior. The description adds a non-obvious behavioral constraint: top-level category paths return no product list, so subcategories are required. It does not discuss pagination, rate limits, or return shape, but the annotations cover the safety profile.

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 two sentences with no filler. The main purpose is front-loaded, followed by prerequisites and the important top-level path caveat.

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?

For a 10-parameter read-only listing tool with full schema coverage and no output schema, the description supplies purpose, dependencies, and the critical path constraint. It omits return shape and pagination details, though the schema documents page size and item count.

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%, with detailed per-parameter descriptions for page size, price currency, sort options, spec format, colour format, and boolean filters. The description restates the filter categories and points to ss_filters for spec names, but adds little beyond the already-rich schema. Baseline 3 is appropriate.

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: 'List the products of one Snapp! Shop category or category-brand page,' with the filter scope explicitly named. It also distinguishes its role from ss_categories and ss_filters by referencing them as prerequisite/helper tools.

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 usage context: use after ss_categories, and ss_filters shows spec names. It also provides a concrete exclusion: a top-level path such as 'mobile' has no product list, so the agent must pick a subcategory. It does not explicitly compare against siblings like ss_search for non-category product discovery, but the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_collectionCollection productsA
Read-onlyIdempotent

List every product of one promotion collection (flash sale, carousel, 'see all' list) from ss_promotions.

NameRequiredDescriptionDefault
idYesCollection id (6 characters) from ss_promotions: a flash sale or carousel.
pageNoPage number, 12 items per page, starting at 1.
sortNoOrder of the list; the site default (no value) is its own relevance order.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already cover read-only, idempotent, non-destructive, and open-world behavior; the description adds the collection-source dependency and supported collection types. It does not clarify paginated retrieval, and "every product" could imply an exhaustive single response despite the schema specifying 12 items per page.

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 single sentence is compact, front-loaded with the operation, and uses parenthetical examples efficiently. There is no filler or redundant explanation of the three parameters.

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?

Together with the complete schema and safety annotations, the description supplies enough context for a straightforward collection-listing call. Its completeness is limited by the lack of explicit pagination or exhaustiveness guidance and any sibling-selection guidance, especially with no output schema to clarify result granularity.

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%, and id, page, and sort already document their formats, defaults, and constraints. The description largely repeats the id's origin and collection types, with "see all" list as only a small addition, so the high-coverage baseline 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?

"List every product" identifies the operation and resource, while "one promotion collection" and the examples establish precise scope. Naming ss_promotions as the source also distinguishes it from the general search, category, and product siblings.

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?

The description establishes a clear workflow: obtain a promotion collection from ss_promotions, then list its products. It does not explain when to prefer ss_search, ss_category, or ss_product, so the guidance is contextual rather than exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_compareCompare productsA
Read-onlyIdempotent

Compare 2-4 products side by side: price, rating, seller count and the specs that differ.

Use after ss_search to choose between candidates. specs lists only rows whose values differ, in product order.

NameRequiredDescriptionDefault
productsYes2-4 products: numeric product_id, 'snp-<digits>' or URL.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's job is to add behavior — and it does, disclosing that `specs` is filtered to rows whose values differ and returned in product order. That is non-obvious output semantics an agent could not infer. It does not discuss failure modes such as an invalid or missing product id, which keeps it below 5.

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?

Two sentences with zero filler. The returned fields come first, the workflow guidance and the non-obvious filtering rule follow — properly front-loaded.

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 only one parameter, no nested objects and no output schema, the description carries the burden of describing the result — and it does list the compared fields and the differing-spec rule. It leaves the response's exact shape (how products are keyed, what happens with 2 vs 4 products) unspecified, a minor gap for this complexity level.

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 the schema already documents the id formats, the 2-4 bounds and the array type. The description only reiterates the 2-4 range and adds the ordering note ('in product order'), which is marginal added meaning. Baseline 3 is appropriate.

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 and resource (compare products side by side) plus the exact dimensions returned (price, rating, seller count, differing specs). An agent can distinguish this from ss_search or ss_product without opening any 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?

Explicitly positions the tool in a workflow: 'Use after ss_search to choose between candidates.' That names the prerequisite sibling clearly. It stops short of saying when not to use it (e.g., single-product lookups belong to ss_product), so it is strong context rather than complete routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_filtersList filtersA
Read-onlyIdempotent

Show the filters Snapp! Shop offers for a category or search: price range, colours, brands and spec filters.

Give path or query. Use the names in specs / colors / brands of ss_category and ss_search.

NameRequiredDescriptionDefault
pathNoCategory path such as 'mobile/samsung' (from ss_categories).
queryNoOr a search phrase, as in ss_search.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds the useful fact that the response enumerates the available filter dimensions (price range, colours, brands, specs), which matters because there is no output schema. It omits edge behavior such as unexpected results for an unknown category path or precedence when both inputs are given.

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?

Two short sentences: capability and output content first, then the input requirement and the cross-tool naming hint. Nothing is padded and nothing important is buried.

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?

For a simple two-parameter read-only lookup with no output schema, the description covers what the tool returns and how to supply inputs. The only meaningful gap is the undefined behavior when both or neither of path/query are passed.

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 both parameters are already documented, and the description repeats some of that (path from ss_categories, query as in ss_search). It does add one genuinely new constraint: the inputs are alternatives ("Give `path` or `query`"), which the schema does not encode since both are nullable with no oneOf.

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?

"Show the filters Snapp! Shop offers for a category or search" names a specific verb (show/list) and resource (filters), then enumerates what the filters cover (price range, colours, brands, spec filters). An agent can distinguish it from ss_category and ss_search, which return products rather than filter metadata, though the description never explicitly frames that contrast.

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?

"Give `path` or `query`" plus the pointer to reuse names from specs/colors/brands of ss_category and ss_search gives clear invocation and chaining guidance. It stops short of explicit exclusions or precedence rules (what to do if both or neither are supplied), so it is clear context rather than full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_productProduct detailA
Read-onlyIdempotent

Get one product: specs, rating, and every seller's price, stock and delivery.

Offers are sorted cheapest first. id in the answer feeds ss_reviews and ss_similar. Prices are Toman.

NameRequiredDescriptionDefault
productYes`product_id` from ss_search / ss_category (digits), 'snp-<digits>' or a snappshop.ir product URL.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds crucial behavioral information not covered by annotations or schema. It specifies that offers are sorted 'cheapest first,' and informs the agent that the returned 'id' is intended to feed downstream tools like ss_reviews and ss_similar.

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 highly efficient, front-loading the primary value proposition and then systematically adding technical and operational constraints (sorting, currency, downstream usage) in logical sequence.

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?

Despite not having an output schema, the description provides sufficient context on the tool's data structure by listing retrieved attributes (specs, rating, price, stock, delivery) and crucial operational details like pricing currency and downstream ID usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description significantly enhances the parameter schema by detailing the acceptable formats for the `product` input. It clarifies that the input can be a standard ID, a specific 'snp-<digits>' format, or a full snappshop.ir product URL.

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 immediately specifies the tool's function: to retrieve details, specs, ratings, pricing, stock, and delivery for a single product. It clearly positions itself as a detailed retrieval function distinct from search or category discovery siblings.

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?

While it doesn't explicitly list sibling exclusion criteria, it clearly defines the tool's scope by focusing on retrieving 'one product' rather than searching for them. The structure implies usage when a specific product identifier or URL is known.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_promotionsPromotionsA
Read-onlyIdempotent

Show what Snapp! Shop is promoting: flash sales with end times, carousels, campaign pages and top products.

Each product section has a collection_id for ss_collection (all its products). Slugs appear in links on the site.

NameRequiredDescriptionDefault
pageNo'home', or 'campaign/<slug>' (e.g. campaign/supermarket), 'landing/<slug>' (e.g. landing/mother-and-baby), 'collection/<slug>' (e.g. collection/flagship-phone).home

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish a safe, read-only, idempotent operation, while the description adds useful result behavior: flash sales include end times, product sections expose downstream `collection_id` values, and slugs can be found in site links. It does not cover freshness or empty-page behavior, but those omissions are modest for this simple discovery tool.

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 front-loads the tool's purpose and then gives two compact integration details. Every phrase contributes either scope, output context, or invocation guidance without repetition.

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 read-only tool with one optional, fully documented parameter, the description and schema together provide enough information to select a page, understand the promotional content, and continue to `ss_collection`. Although there is no output schema, the description adequately summarizes the important returned elements and identifiers.

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?

The schema already fully documents the optional `page` parameter, including its default, supported patterns, and examples. The statement that slugs appear in site links adds practical guidance for discovering the `<slug>` values needed to invoke non-default pages.

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 uses a specific verb and resource—showing what Snapp! Shop is promoting—and concretely identifies flash sales, carousels, campaign pages, and top products. The `collection_id` handoff to `ss_collection` also helps distinguish its promotional-discovery role from the sibling collection tool.

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 provides clear context for browsing promotions and directs the agent to `ss_collection` when it needs all products from a product section. It does not explicitly state when not to use the tool or contrast it with search and category siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_reviewsProduct reviewsA
Read-onlyIdempotent

Read buyers' reviews of a product: score, title, text, pros and cons, helpful votes and date.

Reviewer names are left out. Use to check quality complaints before recommending a product.

NameRequiredDescriptionDefault
idYesProduct `id` (6 characters) from ss_search or ss_product, not the numeric product_id.
pageNoPage number, 10 reviews per page.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, idempotent, read-only, open-world read, so the burden is light. The description adds genuinely useful context beyond them: reviewer names are omitted (anonymized data), and the exact shape of each review record is disclosed even though no output schema exists. It does not mention review volume, sorting, or result totals.

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?

Two short sentences, front-loaded with what the tool returns and followed by when to use it. Every clause carries information; nothing is repeated from the schema or annotations.

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 field enumeration is exactly what an agent needs to know what comes back, and the anonymization note and paging are covered. It leaves minor gaps around total review counts and any ordering of results, which matters somewhat for a paged list.

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%: the `id` parameter already documents the 6-character format and its provenance from ss_search/ss_product, and `page` documents the 10-per-page paging with min/max bounds. The description adds no meaning beyond this, so the baseline of 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?

The description gives a specific verb and resource ('Read buyers' reviews of a product') and enumerates the returned fields (score, title, text, pros/cons, helpful votes, date), which makes the scope unambiguous. It stops short of naming sibling tools such as ss_product or ss_similar to explain the boundary, so it is clear but not fully sibling-differentiated within the description text itself.

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?

'Use to check quality complaints before recommending a product' supplies a concrete decision context for reaching for this tool rather than product metadata tools. There are no explicit exclusions or stated alternatives, so the guidance is clear but one-sided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_sellerSeller productsA
Read-onlyIdempotent

List the products one seller (فروشنده) offers on Snapp! Shop.

Use to see what else a pharmacy or shop sells after reading its offer in ss_product.

NameRequiredDescriptionDefault
pageNoPage number, 12 items per page, starting at 1.
sortNoOrder of the list; the site default (no value) is its own relevance order.
seller_idYes`seller_id` (6 characters) from an offer in ss_product.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so safety is covered. The description adds only the scoping idea ('one seller'), saying nothing about result volume, pagination behavior, or whether unavailable products are included.

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?

Two sentences, both earning their place: the first defines the operation and scope, the second routes the agent from ss_product. Purpose is front-loaded with zero filler.

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?

For a simple read-only 3-parameter list tool with fully described parameters and explicit annotations, the description covers what an agent needs to select and call it. Only the shape of returned items is unstated, which is a minor gap given no output schema exists.

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%: page size/limits, sort enums and their default, and the seller_id source are all documented in the schema. The description implies seller_id comes from an ss_product offer but adds no syntax or format detail beyond the schema.

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 and resource ('List the products one seller offers on Snapp! Shop') and explicitly differentiates from the sibling ss_product by framing this as the follow-up step after reading an offer there.

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?

Gives a clear usage context ('after reading its offer in ss_product') that tells an agent when this tool fits rather than ss_product. It stops short of naming alternatives for broader product discovery (ss_search, ss_category) or stating exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_similarSimilar productsB
Read-onlyIdempotent

Find alternatives to a product that Snapp! Shop shows under 'similar products'.

Use to compare prices of close substitutes. Items have the same fields as ss_search.

NameRequiredDescriptionDefault
idYesProduct `id` (6 characters) from ss_search or ss_product.
kindNo'similar' = other products like this one; 'accessories' = what is sold with it (cases, glass).similar
category_idYes`category_id` from ss_product.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds a useful data-shape note ('Items have the same fields as ss_search') but says nothing about result volume, ordering, or whether an empty list is possible for a product with no substitutes.

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?

Two short sentences, front-loaded with the action and the data-shape note placed second where it belongs. No redundant restatement of the title or parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 'same fields as ss_search' pointer does meaningful work in place of one. Still, for a lookup tool in an open-world catalog, it omits anything about result size, pagination, or empty-result behavior, leaving a real gap for an agent planning a call.

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%, including a documented enum for `kind`, so the schema carries parameter meaning on its own. The description adds no extra semantics about `id` or `category_id` beyond what the schema states; 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 ('Find alternatives to a product') and anchors it to a concrete surface ('similar products' section of Snapp! Shop). It implicitly distinguishes itself from ss_search by tying its results back to that tool's field set, though it never names the closest sibling (ss_compare) to contrast with.

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?

'Use to compare prices of close substitutes' gives an intended context, which is better than nothing. But there is no when-not guidance and no mention of ss_compare, the obvious sibling for comparison tasks, so an agent must infer the boundary between the two on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ss_suggestSearch suggestionsA
Read-onlyIdempotent

Complete a search phrase the way the site's search box does, most searched first.

Use to find the popular wording before ss_search. Returns terms with a popularity score.

NameRequiredDescriptionDefault
queryYesStart of a search phrase.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds genuinely new behavior: results are ordered by search popularity and the payload contains `terms` with a `score`. It does not discuss limits on how many suggestions are returned, but the added context is real.

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?

Two tight sentences with zero filler; the ordering semantics come first and the sibling routing second. Nothing could be removed without losing information.

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 usefully discloses the return shape (`terms` plus popularity `score`). For a one-parameter read-only tool this is close to complete; only result-count or truncation behavior is left unstated.

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% and the single parameter is already documented as 'Start of a search phrase', so the description only restates the prefix nature of the input via the search-box analogy. Baseline 3 is appropriate since 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 (complete a phrase) and resource (search phrase/autocomplete), plus the ordering rule 'most searched first'. This is clearly distinct from ss_search, which returns actual results rather than phrase completions.

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?

'Use to find the popular wording before ss_search' names the sibling alternative and the sequencing condition that selects it. It stops short of stating when not to bother (e.g., when the user already has exact wording), so it is strong but not exhaustive.

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. 13 tool updatesv0.1.0
    • First observedss_brand
    • First observedss_categories
    • First observedss_category
    • First observedss_collection
    • First observedss_compare
    • First observedss_filters
    • First observedss_product
    • First observedss_promotions
    • First observedss_reviews
    • First observedss_search
    • First observedss_seller
    • First observedss_similar
    • First observedss_suggest

TDQS

A3.9/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct roles, and descriptions helpfully state sequencing (ss_categories → ss_category, ss_search → ss_product/ss_reviews). The main hazard is the near-identical pair ss_categories vs ss_category, plus several product-listing tools (ss_search, ss_category, ss_brand, ss_collection, ss_similar) that an agent must read descriptions to separate. Boundaries are clear once read, but the naming alone doesn't disambiguate.

Naming Consistency4/5

All tools share a uniform ss_ prefix and lowercase snake_case (with multiword names like ss_similar, ss_filters), so the pattern is highly predictable. The only deviation is mixing noun-only names (ss_product, ss_brand) with verb names (ss_search, ss_suggest, ss_compare), which is minor for a read-only browsing server.

Tool Count5/5

13 tools is squarely in the well-scoped range and each one covers a distinct facet of shopping discovery: navigation, search, suggestion, product detail, reviews, substitutes, sellers, filters, brands, collections, promotions, comparison. No tool feels redundant or padded.

Completeness4/5

For a read-only product-discovery server the surface is strong: browse, search, autocomplete, detail, reviews, alternatives, sellers, filters, brands, promotions and comparison are all present. Gaps are minor — no cart/order or account operations, and resolving a brand slug (needed for ss_brand) relies on site links or crawling categories rather than a dedicated lookup.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    B
    maintenance
    Enables AI clients to search, fetch and cross-compare products, prices, sellers, offers, availability and specifications between Digikala and SnappShop, with tools for finding the best price or best-value offer using explicit filters and explainable reasoning. It also supports remote Streamable HTTP deployment so the same capabilities can be registered as a custom connector in clients such as Grok.
    11
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to search Snappfood restaurants and SnappMarket stores across Iran, compare true order costs including packaging and delivery, read menus, minimum orders, ETAs and reviews, and surface live flash deals. All operations are read-only, with no login, basket, ordering or payment access.
    21
    395 PyPI
    37
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to compare prices across Iranian online and in-person shops, inspect each seller's offer with warranty and installment details, review roughly a year of price history, score deals, and find the cheapest shop for a whole basket. It is read-only, requires no account or API key, and runs locally for Claude, Cursor or Copilot.
    26
    105 PyPI
    1
    MIT