DigiSnap-MCP
This MCP server lets you search, retrieve, and compare product data across Digikala and SnappShop for shopping intelligence.
List stores: See registered shopping-store adapters.
Search products: Query Digikala or SnappShop for normalized product results.
Get product details: Fetch normalized details for a specific Digikala or SnappShop product, including variants and offers.
Compare products: Cross-store comparison of identity, variants, specifications, and offers.
Compare offers/prices: Compare normalized offers and prices, including backward-compatible price comparison.
Find best price: Find the lowest comparable offer under explicit filters (seller, rating, warranty, availability).
Find best value: Select an offer using an ordered policy like price, availability, warranty, seller rating, or discount.
Analyze offers: Inspect observed discount, availability, warranty, and seller signals without ranking.
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., "@DigiSnap-MCPfind the best price for iPhone 15 across Digikala and SnappShop"
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.
DigiSnap-MCP
MCP server for comparing products, prices, sellers, availability and specifications across Digikala and SnappShop.
Status
Phase 7 — Remote Streamable HTTP transport for Grok implemented.
Related MCP server: Digikala MCP Server
Registered tools
list_stores— registered adapterssearch_digikala— search normalized Digikala productsget_digikala_product— fetch normalized Digikala detailssearch_snappshop— search normalized SnappShop productsget_snappshop_product— fetch normalized SnappShop details, variants and offerscompare_products— identity, variant, specification and offer comparisoncompare_offers— normalized offer and price comparisoncompare_prices— backward-compatible price comparisonfind_best_price— lowest observed comparable offer with explicit filtersfind_best_value— policy-driven offer selection with explainable reasonsanalyze_offers— expose observed price, discount, seller, warranty and availability signals
Remote MCP / Grok
For local development the server keeps stdio as the default transport.
For a remote deployment, set:
MCP_TRANSPORT=httpThe Streamable HTTP MCP endpoint is exposed at:
https://<public-host>/mcpA lightweight GET /health endpoint is provided for deployment health checks.
xAI Grok supports external MCP servers over Streaming HTTP and SSE. A public HTTPS MCP URL can be registered as a Custom MCP connector.
Cross-store comparison
Phase 4 keeps provider-specific fields inside adapters and compares only canonical models.
The comparison layer provides:
product identity matching with an explainable similarity score
explicit variant mismatch detection
brand/model/title signals
shared specification comparison
explicit specification differences
seller, warranty, condition and availability fields on offers
lowest available offer
absolute and percentage price delta
purchase URLs
currency-safe price deltas: a monetary delta is omitted when the comparable offers use different currencies
missing values remain unknown rather than being inferred
A match is a comparison signal, not an assertion of identity. Consumers can inspect matched, score and reasons before using a cross-store result.
Shopping intelligence
Phase 5 adds provider-neutral intelligence on canonical offers. It does not invent prices, availability or specifications.
find_best_pricefilters normalized offers and compares only offers with the same currency.Seller IDs, minimum seller rating, warranty and availability can be explicit filters.
find_best_valueuses an ordered policy such asprice,availability,warranty,seller_ratingordiscount; there is no hidden composite score.Discount percentages are calculated only when both current and observed regular prices are present.
PriceObservation/PriceHistoryProviderdefine an optional historical-price contract without requiring a storage backend.StockMonitorHookdefines an optional application hook for stock monitoring.
Provider adapters
SnappShop
The adapter targets the public JSON API surface observed at apix.snappshop.ir:
POST /search/v1for product searchGET /products/v2/{product_id}for product details
The upstream API is undocumented and may change. Provider-specific HTTP and payload parsing are isolated in snappshop.py.
Digikala
The Digikala web API is also undocumented and may change. Provider-specific HTTP, endpoint paths and payload parsing are isolated in digikala.py.
Prices are preserved as returned by the upstream payload and currently represented as IRR in the canonical model. No implicit 10x Toman/Rial conversion is performed.
Production hardening
Phase 6 adds bounded retries for transient upstream failures, structured adapter error logging, reproducible CI checks, dependency auditing, compile/import smoke checks, contribution and security documentation, and an MCP client configuration example.
Retries are limited and use exponential backoff; non-transient errors are not retried.
Upstream response bodies, headers, cookies and credentials are not logged.
429remains a rate-limit signal;404remains a not-found signal for SnappShop.CI runs Python 3.11–3.13 tests, Ruff linting, coverage reporting, compilation and smoke import checks, plus
pip-audit.The package is released under the MIT License.
Upstream resilience
Phase 8.4 adds provider-specific pacing, bounded retry/backoff, upstream response classification, short-lived successful GET caching, and cookie persistence for bounded Digikala challenge retries. See docs/upstream-resilience.md.
Development
Requires Python 3.11+.
python -m pip install -e ".[dev]"
pytestRun:
digisnap-mcpRoadmap
Core MCP Server & Architecture — complete
Digikala Adapter — complete
SnappShop Adapter — complete
Cross-Store Product & Offer Comparison — complete
Shopping Intelligence — complete
Production Hardening, CI & Release — complete
Remote Streamable HTTP transport for Grok — complete
Design principles
Store-specific code stays inside adapters.
Comparison operates only on normalized domain models.
Missing upstream data is represented as unknown, never invented.
Product variants remain explicit.
External-store behavior is isolated behind adapter boundaries.
MCP client configuration
See examples/mcp-client.json for a minimal stdio configuration.
Release
Releases use semantic version tags such as v0.6.0. The release candidate must pass the complete CI matrix and dependency audit before tagging.
Available Tools
11 toolsanalyze_offersC
Expose observed discount, availability, warranty and seller signals without ranking.
| Name | Required | Description | Default |
|---|---|---|---|
| store_ids | Yes | ||
| product_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only that the tool does not rank, but says nothing about read-only behavior, permissions, rate limits, or whether it mutates any state.
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, front-loaded sentence with no wasted words. However, its extreme brevity leaves it under-specified for a tool with no annotations and undocumented parameters.
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?
An output schema exists, so return values need not be explained. Still, with no annotations, 0% parameter description coverage, and only minimal usage guidance, the description is not complete enough for an agent to invoke the tool confidently.
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 0%, and the description does not mention product_ids or store_ids at all. Both required parameters are left completely unexplained beyond their bare names in the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Expose') and enumerates the signal types observed (discount, availability, warranty, seller). The phrase 'without ranking' distinguishes it from ranking-oriented siblings like find_best_price and find_best_value, though it does not name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without ranking' implies the tool is for raw signal inspection rather than ranked recommendations, which gives some usage context. However, it does not explicitly state when to use this tool instead of compare_offers, compare_prices, or find_best_value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_offersC
Compare normalized offers across the supplied store products.
| Name | Required | Description | Default |
|---|---|---|---|
| store_ids | Yes | ||
| product_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state whether the operation is read-only (presumably), what "normalized" means, whether results are ranked, or anything about cost, auth, or return behavior. Only the word "Compare" implies a non-mutating intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler or repetition. It is efficient, though its brevity is partly a symptom of under-specification rather than disciplined trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no annotations, and 0% parameter coverage, the description should explain inputs, comparison semantics, and likely output. It delivers none of these, leaving an agent unable to predict what comparing offers actually returns or how it differs from compare_products.
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 0%, so the description must compensate for two undocumented required parameters (product_ids, store_ids). It only vaguely alludes to "store products" without explaining that store_ids and product_ids are arrays, what identifiers are valid, or how the two sets combine during comparison.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Compare") and resource ("normalized offers"), with scope limited to "the supplied store products." However, it does not distinguish the tool from close siblings such as compare_products, compare_prices, or analyze_offers, so an agent cannot tell which comparison tool is appropriate from the description alone.
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?
There is no when-to-use guidance, no exclusions, and no naming of alternatives, despite five sibling tools that also perform comparisons or offer analysis. The phrase "across the supplied store products" hints at scope but gives no condition for selecting this tool over its near-duplicates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_pricesD
Backward-compatible price comparison using the canonical comparison engine.
| Name | Required | Description | Default |
|---|---|---|---|
| store_ids | Yes | ||
| product_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: no mutability, auth requirements, rate limits, or what the comparison returns. 'Backward-compatible' hints at deprecation status but is too vague to count as meaningful disclosure.
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 definition is a single short sentence with no padding, so it is not verbose. However, the brevity comes at the cost of substance — the one sentence is mostly jargon rather than front-loaded operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two required, completely undocumented parameters, no annotations, and no output schema, the description provides essentially no information an agent needs to invoke it correctly. It is inadequate for the tool's complexity.
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?
Both required parameters (product_ids, store_ids) have 0% schema description coverage, and the description says nothing about them — not their format, cardinality, or how they are matched. The description therefore fails to compensate for a complete schema gap.
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 phrase 'price comparison' essentially restates the tool name, and 'using the canonical comparison engine' / 'backward-compatible' are undefined jargon that add no operational meaning. It does not distinguish this tool from siblings like compare_products, compare_offers, or find_best_price, so an agent cannot tell what unique behavior it offers.
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?
There is no explicit when-to-use guidance. 'Backward-compatible' faintly implies a legacy alias that a newer tool supersedes, but it never names that alternative or states the condition under which an agent should pick this one over the several comparison siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_productsC
Compare products across stores, including identity, variants, specs and offers.
| Name | Required | Description | Default |
|---|---|---|---|
| store_ids | Yes | ||
| product_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost none of it. It does not say whether the comparison is read-only, whether both ID arrays must be non-empty, how results are ordered, or what the response shape looks like. The list of included aspects ('identity, variants, specs and offers') is a hint about output content but not a behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the verb and resource front-loaded and no filler. It is efficiently sized, though the trailing enumeration of comparison aspects is slightly compressed rather than informative.
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 annotations, no output schema, and 0% parameter coverage, the description is too thin. An agent knows it compares products but not how to source the required IDs, what constraints apply, or what the comparison result contains beyond a keyword list.
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 0% for both parameters, so the description must compensate and largely does not. 'Products' and 'across stores' loosely imply the product_ids and store_ids arrays, but there is no guidance on ID format, whether IDs must come from a prior search/list call, array size limits, or whether the two arrays are paired or crossed.
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 pairs a specific verb ('compare') with a specific resource ('products') and scopes it ('across stores'), then enumerates the axes of comparison (identity, variants, specs, offers). It is clear what the tool does, though it does not explicitly separate itself from siblings like compare_offers or compare_prices, whose names suggest overlapping territory.
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?
There is no when-to-use guidance, no exclusions, and no mention of alternatives. With siblings such as compare_offers, compare_prices, and analyze_offers available, the agent is left to infer why it would pick this tool over those, which is exactly the ambiguity the description should resolve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_best_priceC
Find the lowest comparable observed offer under explicit filters.
| Name | Required | Description | Default |
|---|---|---|---|
| store_ids | Yes | ||
| seller_ids | No | ||
| product_ids | Yes | ||
| require_warranty | No | ||
| require_available | No | ||
| minimum_seller_rating | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no read-only confirmation, no note on data recency or coverage ('observed' hints at stored data but is unexplained), and no indication of what happens when filters exclude all offers. It is at least not misleading, but the disclosure is thin for a six-parameter lookup 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?
A single front-loaded sentence that states the tool's core behavior with no filler. It is appropriately sized; the brevity is a virtue, though it comes at the cost of detail rather than being densely informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and six undocumented parameters, there are significant gaps: result ranking/tie-breaking is unexplained and 'lowest comparable' is undefined. For a search/selection tool competing against several similar siblings, the definition 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 0% across six parameters, and the description doesn't compensate — 'explicit filters' never explains require_warranty, require_available, minimum_seller_rating, or how product_ids/store_ids/seller_ids interact. An agent must infer the semantics of every filter from bare parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb (find) and a target (lowest comparable observed offer), which conveys the general intent. However, the phrase 'comparable observed offer' is jargon that doesn't clarify what makes offers 'comparable' or 'observed', and nothing distinguishes it from siblings like find_best_value, compare_prices, or compare_offers.
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?
No when-to-use guidance and no alternatives named, despite a sibling cluster that includes find_best_value, compare_prices, and compare_offers — an agent has no basis for choosing among them. 'Under explicit filters' gestures at usage but does not tell the agent when this tool is the right pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_best_valueC
Select an offer using an explicit, ordered policy rather than a hidden score.
| Name | Required | Description | Default |
|---|---|---|---|
| priority | No | ||
| store_ids | Yes | ||
| seller_ids | No | ||
| product_ids | Yes | ||
| require_warranty | No | ||
| require_available | No | ||
| minimum_seller_rating | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It mentions an 'explicit, ordered policy' but never discloses the policy itself, how 'priority' drives ordering, whether the operation is read-only, or what the result contains. For a 7-parameter selection tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is appropriately sized and front-loaded, but its content is abstract rather than informative. It is concise without being clarifying, so it earns only a middling score.
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 7 parameters, 0% schema coverage, no annotations, and no output schema, the description needs to explain behavior and parameters and does neither. The one-sentence description is inadequate for a selection tool with this many filtering and policy knobs.
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 0% across 7 parameters, so the description must compensate and largely does not. 'Ordered policy' hints at the 'priority' parameter but never explains its accepted values or ordering semantics, and require_warranty, require_available, minimum_seller_rating, seller_ids and store_ids receive no clarification.
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 gestures at a verb ('Select an offer') with a mechanism ('explicit, ordered policy'), but never states the resource context — products filtered by store/seller — that the required parameters imply. It does draw a loose contrast with a score-based selector (find_best_price), but an agent cannot confidently tell what this tool returns for the given product_ids and store_ids.
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?
There is no explicit when-to-use guidance and no reference to the many siblings (find_best_price, compare_offers, compare_prices). The phrase 'rather than a hidden score' faintly nudges away from a score-based alternative, but no condition is stated for choosing this tool over the others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_digikala_productC
Get one normalized Digikala product.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses almost nothing: no auth requirements, no rate limits, no error behavior for invalid IDs. 'Normalized' hints at post-processing but is never explained.
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?
One front-loaded sentence with zero waste, but it is under-specified rather than genuinely concise; the brevity comes at the cost of any usable detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description should explain what a 'normalized' product contains and how missing IDs behave. Neither is covered, leaving the agent unable to predict the response.
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 0% for the single product_id string, so the description must compensate and does not — no format, ID source, or example is given. Only the word 'Digikala' hints at the ID's namespace.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (normalized Digikala product), and the marketplace qualifier distinguishes it from get_snappshop_product and search_digikala. The single-item vs. search distinction is only implied by the singular 'one', so it stops short of a 5.
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?
There is no when-to-use guidance, no mention of search_digikala as the alternative for browsing, and no prerequisites. An agent must infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snappshop_productC
Get one normalized SnappShop product with variants and offers.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, yet it discloses only that the result is 'normalized' and includes variants and offers. It says nothing about what happens on an unknown product_id, authentication or rate-limit requirements, or whether the data is cached or live.
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?
One short sentence with no filler, front-loading the verb and resource. Every word 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?
For a single-parameter read tool with no output schema, the description at least tells the agent what comes back (variants and offers), which is genuinely useful. However it omits ID format, failure behavior, and any hint of result structure, leaving an agent with real gaps before calling 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 description coverage is 0% and the single product_id parameter is described nowhere beyond its title. The description does not state the ID's expected format, source, or whether it is a numeric SnappShop ID, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (one normalized SnappShop product) and even enumerates the payload contents (variants and offers), which distinguishes it from list-style siblings like list_stores and search_snappshop. It does not explicitly name get_digikala_product as the analogous-but-different sibling, so it falls short of a 5.
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?
There is no statement of when to use this versus get_digikala_product, search_snappshop, or the compare_* tools. Usage is only inferable from the word 'one' implying a single known product_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_storesA
List currently registered shopping-store adapters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden, but for a zero-parameter listing tool the risk surface is minimal and 'currently registered' implies a live, non-mutating read. It adds no detail on ordering, pagination, or what an adapter entry contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; every word contributes to identifying the resource being listed.
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?
An output schema exists, so return values need not be explained, and with zero inputs the description's obligations are limited. It is adequate, though a brief note on what an 'adapter' represents would help an agent decide when to use 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 tool takes zero parameters, so the schema is trivially complete and there is no parameter semantics for the description to compensate for. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (currently registered shopping-store adapters), which is clear on its own. It does not, however, differentiate itself from the sibling search/get/compare tools beyond the passive 'list adapters' framing.
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?
No guidance on when to call this versus the sibling tools (e.g., to discover which stores are available before searching). No prerequisites or context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_digikalaC
Search Digikala and return normalized products.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it discloses almost nothing: no rate limits, no pagination behavior, no auth requirements. The only hint ('normalized products') gestures at return handling, which the output schema already covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity is partly under-specification rather than disciplined conciseness.
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 output schema covers return values, so that need not be described. However, with no annotations, no parameter documentation, and no usage guidance, the definition is too thin for a search tool competing with multiple sibling search and lookup tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Two parameters (query, limit) with 0% schema description coverage, and the description explains neither. It doesn't state what 'query' accepts, whether 'limit' is a page size or a cap, or how results are ordered, so the schema gap is left entirely unfilled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (Digikala) plus the output shape (normalized products). Naming the platform differentiates it from search_snappshop, but it doesn't clarify how it differs from get_digikala_product or the comparison tools.
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?
No when-to-use guidance, no exclusions, and no routing to alternatives. An agent must guess whether this or get_digikala_product is appropriate for a given query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_snappshopC
Search SnappShop and return normalized products.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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. Saying results are 'normalized' hints at the output shape, but it discloses nothing about pagination, rate limits, authentication, or how the limit interacts with total results. For a search tool with zero annotation coverage, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the verb and store front-loaded and no filler. It is arguably under-specified rather than bloated, which is a completeness problem rather than a conciseness one.
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?
An output schema exists, so return values need not be described, and the operation is a simple search. However, with no annotations, 0% parameter coverage, and no routing guidance among ten siblings, the definition is only minimally adequate for correct 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 description coverage is 0%: neither 'query' nor 'limit' is documented in the schema, and the description explains neither. 'query' is inferable from the tool name, but 'limit' (default 10) is completely unexplained, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (SnappShop), plus what it returns (normalized products). It is distinguishable from search_digikala by the named store, but it does not explicitly contrast itself with that sibling or with get_snappshop_product.
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?
There is no when-to-use guidance, no mention of alternatives (e.g., search_digikala for the other store, get_snappshop_product for a known item), and no prerequisites. The agent must infer usage entirely from the tool name.
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.
11 tool updates
v0.6.0- First observed
analyze_offers - First observed
compare_offers - First observed
compare_prices - First observed
compare_products - First observed
find_best_price - First observed
find_best_value - First observed
get_digikala_product - First observed
get_snappshop_product - First observed
list_stores - First observed
search_digikala - First observed
search_snappshop
TDQS
Scored across 11 tools
The two store-specific search/get tools are clearly distinct, but the comparison cluster (compare_products, compare_offers, compare_prices) and ranking/value tools (find_best_price, find_best_value) have subtle boundaries. Descriptions help distinguish them, but an agent could still hesitate between compare_prices and compare_offers or between the two find_best tools.
All tool names use snake_case with a predictable verb_noun structure, such as search_digikala, get_digikala_product, compare_offers, and find_best_price. Minor variations like search_digikala omitting 'product' are natural and do not break the pattern.
With 11 tools, the set is well-scoped for a multi-store product search and comparison server. Each tool appears to earn its place, covering store listing, per-store search/get, cross-store comparison, and offer analysis without excessive bloat.
The surface covers the read-only shopping comparison lifecycle well: list stores, search and get products per store, compare products/offers/prices, and analyze or select best offers. Minor gaps exist, such as no generic cross-store search tool or store-adapter management, but core workflows are covered.
Maintenance
Related MCP Connectors
Open, verified shop database for AI agents: products, offers, price comparison, trust and coupons.
AI-powered product search, affiliate links, and price negotiation for e-commerce platforms
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
AI shopping comparison — search 50M+ products, compare prices, find deals
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables querying and comparing product prices across different marketplaces with real-time updates. Deployable on Cloudflare Workers with tools for searching products, comparing prices, and retrieving price history.-
- FlicenseAqualityDmaintenanceEnables intelligent product discovery on Digikala (Iran's largest e-commerce platform) with bilingual search, query optimization, price filtering in Toomans, product details, recommendations, and AI-powered semantic search for clothing and accessories.54-
- FlicenseNot gradedqualityBmaintenanceEnables users to compare and get recommendations across multiple supermarket products, combining curated specifications with realtime price and review lookups.-
- AlicenseNot gradedqualityBmaintenanceEnables LLMs to search products, fetch detailed specifications, and browse categories from SnappShop in real-time.MIT