Skip to main content
Glama
yusi20006-max

DigiSnap-MCP

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 adapters

  • search_digikala — search normalized Digikala products

  • get_digikala_product — fetch normalized Digikala details

  • search_snappshop — search normalized SnappShop products

  • get_snappshop_product — fetch normalized SnappShop details, variants and offers

  • compare_products — identity, variant, specification and offer comparison

  • compare_offers — normalized offer and price comparison

  • compare_prices — backward-compatible price comparison

  • find_best_price — lowest observed comparable offer with explicit filters

  • find_best_value — policy-driven offer selection with explainable reasons

  • analyze_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=http

The Streamable HTTP MCP endpoint is exposed at:

https://<public-host>/mcp

A 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_price filters normalized offers and compares only offers with the same currency.

  • Seller IDs, minimum seller rating, warranty and availability can be explicit filters.

  • find_best_value uses an ordered policy such as price, availability, warranty, seller_rating or discount; there is no hidden composite score.

  • Discount percentages are calculated only when both current and observed regular prices are present.

  • PriceObservation / PriceHistoryProvider define an optional historical-price contract without requiring a storage backend.

  • StockMonitorHook defines 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/v1 for product search

  • GET /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.

  • 429 remains a rate-limit signal; 404 remains 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]"
pytest

Run:

digisnap-mcp

Roadmap

  1. Core MCP Server & Architecture — complete

  2. Digikala Adapter — complete

  3. SnappShop Adapter — complete

  4. Cross-Store Product & Offer Comparison — complete

  5. Shopping Intelligence — complete

  6. Production Hardening, CI & Release — complete

  7. 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 tools
analyze_offersC

Expose observed discount, availability, warranty and seller signals without ranking.

ParametersJSON Schema
NameRequiredDescriptionDefault
store_idsYes
product_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
store_idsYes
product_idsYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
store_idsYes
product_idsYes

TDQS

D1.7/5.0
Behavior1/5

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.

Conciseness3/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
store_idsYes
product_idsYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
store_idsYes
seller_idsNo
product_idsYes
require_warrantyNo
require_availableNo
minimum_seller_ratingNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
priorityNo
store_idsYes
seller_idsNo
product_idsYes
require_warrantyNo
require_availableNo
minimum_seller_ratingNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 11 tool updatesv0.6.0
    • First observedanalyze_offers
    • First observedcompare_offers
    • First observedcompare_prices
    • First observedcompare_products
    • First observedfind_best_price
    • First observedfind_best_value
    • First observedget_digikala_product
    • First observedget_snappshop_product
    • First observedlist_stores
    • First observedsearch_digikala
    • First observedsearch_snappshop

TDQS

C2.8/5.0

Scored across 11 tools

Disambiguation3/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables 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.
    5
    4
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables users to compare and get recommendations across multiple supermarket products, combining curated specifications with realtime price and review lookups.
    -