Skip to main content
Glama
sepehr071

digikala-mcp

by sepehr071

🛍️ digikala-mcp

Let your AI agent shop around on Digikala. Search Iran's largest online store, compare every seller's offer, check a product's price history, read reviews and Q&A, and catch today's Incredible Offers, all from Claude, Cursor or Copilot.

PyPI Python CI MCP Registry License: MIT

Install in Cursor Install in VS Code

Quick start · What it can do · Tools · FAQ · فارسی


Why

Digikala lists the same phone many times: different colors, memory sizes, bundles and a dozen sellers per listing, with prices that move every day. Sorting by "cheapest" puts phone cases first. Finding the real cheapest offer, and whether today's price is a good one means a lot of clicking. An agent with digikala-mcp does it in three calls:

You: Cheapest Samsung Galaxy A07 on Digikala, and is now a good time to buy?

Agent: calls dk_find_cheapest(query="samsung a07") → dk_product(product_id=20109389) → dk_price_history(product_id=20109389)

Price

Model

Seller

42,503,600

Galaxy A07 64 GB / 4 GB

Digikala (same-day delivery in Tehran)

44,518,000

Galaxy A07 64 GB / 4 GB + 25 W charger

Sepahan Hamrah Yaghout

46,811,800

Galaxy A07 128 GB / 4 GB

Digikala

The 64 GB model is cheapest at 42,503,600, sold by Digikala itself; the next seller asks 42,918,000. But it's not a great moment: the black one sold for 34,499,000 yesterday and 33,200,000 at its lowest this month. Today's best offer is about 23% above yesterday's, so waiting may pay off.

Real tool output from 2026-10-03; prices change all the time. Prices are in Toman.

Related MCP server: BopMarket MCP Server

What it can do

  • 🔎 Search the whole catalogue in Persian or English, with price, brand, feature (OS, storage, ...), color, seller and fast-delivery filters; every result says whether its title really matches

  • 💸 Find the real cheapest match, with accessories filtered out, and every seller's offer for a product

  • 🏆 Best picks for a budget, ranked by a rating weighted by how many buyers rated it, with the reasoning shown

  • 📋 Re-check a shortlist of up to 10 products in one call: price, cheapest offer, stock, distance from the 30-day low

  • 📈 Judge a price with about 30 days of daily price history and the 30-day low

  • 🗂️ Browse categories, brands, sellers and best sellers, sorted by price, sales, views, newest or buyers' pick

  • ⭐ Check quality with reviews, pros/cons, buyer Q&A and seller reputation

  • ⚡ Catch deals: Incredible Offers and supermarket (Digikala Fresh) discounts

  • 🧾 Extras: spec comparison, installment plans, Digikala Plus shipping plans, live gold and coin prices

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

Quick start

You need uv. No API key or account.

claude mcp add digikala -- uvx digikala-mcp

Settings → Developer → Edit Config, then add:

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

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

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

{
  "servers": {
    "digikala": { "type": "stdio", "command": "uvx", "args": ["digikala-mcp"] }
  }
}

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

Then just ask:

  • "Cheapest AirPods-style earbuds under 3 million Toman with at least 4 stars?"

  • "Compare the Galaxy A07 64 GB and 128 GB. Is the bigger one worth the difference?"

  • "Is this seller reliable? CGDG9"

  • ارزان‌ترین شیر کم‌چرب در سوپرمارکت دیجی‌کالا چند است؟

How it works

  AI agent  (Claude, Cursor, Copilot, ...)
      │
      │  MCP over stdio
      ▼
  digikala-mcp  (runs on your machine)
      │
      │  HTTPS
      └──────▶  api.digikala.com   products, sellers, deals, Fresh supermarket

digikala-mcp runs locally and calls the same public endpoints the digikala.com web app uses. There's no hosted server in between, no API key, and nothing about you is sent anywhere else.

Tools

Product ids are the number in a digikala.com/product/dkp-<id>/ link. Every list returns compact product cards: id, title, brand, price, discount, stock, seller, rating and the product link.

Tool

What it does

dk_search

Search by words with sort, price, brand, feature, color and seller filters; flags loose title matches

dk_find_cheapest

Cheapest in-stock real matches for a query, accessories dropped, one list

dk_best_for_budget

Best-rated real matches under a budget, rating weighted by number of ratings

dk_suggest

Autocomplete: better keywords, category codes and brand ids

dk_filters

Filter options of a category or search: features (OS, storage, ...), colors, brands, sellers, price range

dk_categories

Find category codes and main-category ids

dk_category_products

Browse a category with sort and the same filters, optionally one brand

dk_brand_products

Browse a brand's products

dk_seller

A seller's rating, on-time shipping, cancellations, returns and products

dk_deals

Incredible Offers or supermarket deals, biggest discount first

dk_best_sellers

Current best sellers, overall or per main category

dk_fresh_search

Search or browse Digikala Fresh, the supermarket

Tool

What it does

dk_product

Price, stock, specs and every seller's offer (color, warranty, shipping), cheapest first

dk_shortlist

Re-price up to 10 products at once: price, cheapest offer, stock, rating, distance from the 30-day low

dk_price_history

About 30 days of daily prices per color, with low and high

dk_reviews

Customer reviews with stars, pros/cons and verified-buyer flag

dk_questions

Customer questions with their top answers

dk_similar

Similar products, e.g. cheaper alternatives

dk_compare

2-4 products side by side: the specs that differ, plus the shared ones

dk_installments

Digipay credit-line offers for a product (credit amount, monthly repayment, months)

Tool

What it does

dk_plus_plans

Digikala Plus membership plans (free shipments) and benefits

dk_gold_prices

Live 18k gold price per gram (daily and ~3-month change) and gold coin prices

dk_location

Address → coordinates, or coordinates → address with Digikala city/province ids

All tools are annotated readOnlyHint: true and return compact structured JSON, so they don't flood the agent's context.

Good to know

  • Prices are in Toman. The Digikala API answers in Rial; every tool divides by 10 so numbers match the website. Gold and coin prices are already Toman.

  • Ratings are 0–5, like the site (the API's 0–100 divided by 20); null means not rated yet. Review stars are 1–5.

  • Persian and English queries both work (گوشی سامسونگ, airpods pro). Category and brand codes are English slugs (mobile-phone, samsung).

  • sort=cheapest on a text search shows accessories first; that's how Digikala ranks it. Use dk_find_cheapest for "cheapest X".

  • Search always returns something, even for nonsense words (Digikala's search is semantic). dk_search marks each result match: all / some / none (with the missing words), and dk_find_cheapest and dk_best_for_budget keep only titles that contain every query word.

  • Filters by feature: dk_filters(category_code="mobile-phone") lists ids like operating system → Android, then dk_category_products(attributes={2226: [19239]}) filters on them.

  • The 30-day low ignores one-day dips. dk_shortlist compares today's price with the lowest price that held on two days in a row (low_30d), because Digikala's own 30-day low (lowest_one_day_30d, dk_product's lowest_price_30d) can be a single day of one color. dk_price_history gives both per color.

  • Prices move several times an hour on popular listings with many sellers; re-check right before buying.

  • Answers are cached for 2 minutes, so an agent repeating a call doesn't hit Digikala again; prices can lag the site by that much.

  • Groceries come from the supermarket store: dk_product shows its price, which can differ from the main-store price in search results.

  • Shipping cost is only calculated at checkout (login). dk_product shows how each offer ships, and dk_plus_plans the free-shipping plans.

FAQ

Usually not: in testing the API answered from a foreign (Turkish) exit. If every tool fails with "refused the request (HTTP 403)", set DIGIKALA_MCP_PROXY to an HTTP proxy with an Iranian exit. (A 403 from just one call usually means an unknown category or brand code.) Normal system proxy variables are ignored on purpose.

No, and that's deliberate. It has no login and never calls the cart, checkout, payment, or review/question posting endpoints; it only reads public data. The agent finds the best option; you tap buy on the site.

Digikala lists products that are out of stock, coming soon or discontinued. They have no current offer, so there's no price. Searches use in_stock_only: true by default.

Use the full path to uvx (where uvx on Windows, which uvx on macOS/Linux) as command.

npx @modelcontextprotocol/inspector uvx digikala-mcp

Configuration

Variable

Default

Meaning

DIGIKALA_MCP_PROXY

unset

HTTP proxy for every request, e.g. http://user:pass@host:port

فارسی

digikala-mcp به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می&zwnj;دهد در دیجی&zwnj;کالا جستجو کند، قیمت همه فروشندگان یک کالا را مقایسه کند، تاریخچه قیمت، نظرات و پرسش&zwnj;وپاسخ&zwnj;ها را بخواند و پیشنهادهای شگفت&zwnj;انگیز را پیدا کند.

چه کارهایی می&zwnj;کند

  • جستجو به فارسی یا انگلیسی، با فیلتر قیمت، برند، ویژگی (سیستم عامل، حافظه و ...)، رنگ، نوع فروشنده و ارسال سریع؛ کنار هر نتیجه می&zwnj;گوید عنوانش واقعاً با جستجو جور است یا نه.

  • ارزان&zwnj;ترین کالای واقعی را پیدا می&zwnj;کند (لوازم جانبی مثل قاب و کابل را کنار می&zwnj;گذارد) و پیشنهاد همه فروشندگان یک کالا را از ارزان به گران نشان می&zwnj;دهد.

  • بهترین انتخاب با بودجه شما: کالاها را بر اساس امتیازی رتبه&zwnj;بندی می&zwnj;کند که تعداد امتیازدهنده&zwnj;ها را هم در نظر می&zwnj;گیرد، تا یک کالای ۵ ستاره با ۳ رأی از کالای ۴٫۶ ستاره با ۹۰۰ رأی جلو نزند.

  • تاریخچه قیمت حدود ۳۰ روز گذشته و کمترین قیمت ماه، برای اینکه بدانید الان وقت خرید است یا نه.

  • بررسی دوباره فهرست منتخب: قیمت، موجودی و فاصله تا کمترین قیمت ماه تا ۱۰ کالا با یک درخواست.

  • کیفیت: نظرات خریداران با نقاط قوت و ضعف، پرسش&zwnj;وپاسخ&zwnj;ها، و کارنامه فروشنده (ارسال به&zwnj;موقع، لغو، مرجوعی).

  • تخفیف&zwnj;ها: شگفت&zwnj;انگیزها، پرفروش&zwnj;ها و تخفیف&zwnj;های سوپرمارکت (دیجی&zwnj;کالا فرش).

  • بیشتر: مقایسه مشخصات فنی، طرح&zwnj;های دیجی&zwnj;کالا پلاس، قیمت لحظه&zwnj;ای طلا و سکه.

نکته&zwnj;ها

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

  • همه قیمت&zwnj;ها به تومان است و امتیازها مثل سایت از ۵.

  • روی سیستم خود شما اجرا می&zwnj;شود، کلید API لازم ندارد و به هیچ سرور واسطی داده نمی&zwnj;فرستد.

  • پاسخ&zwnj;ها تا ۲ دقیقه نگه داشته می&zwnj;شوند؛ قیمت ممکن است همین&zwnj;قدر از سایت عقب باشد.

نصب (اول uv را نصب کنید). در Claude Code:

claude mcp add digikala -- uvx digikala-mcp

در Claude Desktop، Cursor و بقیه برنامه&zwnj;ها همان تنظیم بخش Quick start را بگذارید.

نمونه پرسش&zwnj;ها

  • «ارزان&zwnj;ترین گوشی سامسونگ A07 کدام است و الان قیمتش خوب است؟»

  • «بهترین هدفون بی&zwnj;سیم تا ۳ میلیون تومان چیست؟»

  • «گوشی اندرویدی با ۲۵۶ گیگ حافظه که خود دیجی&zwnj;کالا می&zwnj;فروشد، از ارزان به گران.»

  • «این سه لپ&zwnj;تاپ را مقایسه کن و بگو کدام ارزش خرید دارد.»

  • «امروز چه شگفت&zwnj;انگیزی برای هدفون هست؟»

Development

git clone https://github.com/sepehr071/digikala-mcp && cd digikala-mcp
uv sync
uv run pytest            # offline, against recorded responses
uv run pytest -m live    # real API
uv run ruff check .

The live tests can also run on GitHub (Actions → Live → Run workflow). They are not scheduled: from GitHub's US runners Digikala times out on a few calls each run, while the same tests pass from an Iranian connection.

Tools live in src/digikala_mcp/catalog.py, product.py and services.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.

Disclaimer

Unofficial and not affiliated with or endorsed by Digikala. It uses the public endpoints of the digikala.com web app, which can change without notice. Please keep request rates reasonable.

License

MIT

Available Tools

23 tools
dk_best_for_budgetBest picks for a budgetA
Read-onlyIdempotent

Rank the best-rated in-stock products within a budget, with the reasoning shown.

Ranks by a weighted rating: a product's rating pulled toward the average of the candidates until it has about 20 ratings, so a 5.0 from 3 buyers does not beat a 4.6 from 900. Ties go to the cheaper one. For a query only titles with every query word count, and accessories are dropped. Use for "best X under Y Toman"; then dk_product on a pick for every seller's price, dk_reviews for what buyers say.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax picks to return.
pagesNoResult pages to scan, 20 products each.
queryNoWhat to buy, e.g. 'هدفون بی سیم' or 'گوشی سامسونگ'.
max_priceYesBudget in Toman, e.g. 20000000 for 20 million Toman.
min_priceNoSkip anything cheaper, in Toman. Default for a query: a floor that drops accessories.
min_ratingsNoSkip products with fewer ratings than this.
category_codeNoOr a category code instead of a query, e.g. 'mobile-phone' (from dk_suggest).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses the shrinkage ranking algorithm (rating pulled toward candidate average until ~20 ratings), the cheaper-wins tie-break, the all-query-words-in-title match rule, and that accessories are dropped. This is exactly the non-obvious behavior an agent needs to trust and interpret the output.

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?

Three dense sentences, front-loaded with purpose, then algorithm, then usage/follow-ups. No filler, though the middle sentence packs several rules together and reads slightly heavy.

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?

An output schema exists so return format need not be described; annotations cover safety. Purpose, ranking behavior, query semantics, and downstream tool routing are all present, leaving nothing an agent needs to invoke this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains that min_price defaults to a floor that drops accessories when a query is present, and clarifies the query-title matching semantics that govern how 'query' behaves.

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?

Specific verb ('rank') plus resource ('best-rated in-stock products') plus scope ('within a budget'), and the ranking criterion is stated. An agent can distinguish this from dk_best_sellers and dk_find_cheapest 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?

Gives an explicit trigger phrase ('best X under Y Toman') and routes follow-ups (dk_product for seller prices, dk_reviews for buyer sentiment). It lacks an explicit when-not / alternative-tool condition (e.g., vs. dk_best_sellers or dk_find_cheapest), so it stops short of a 5.

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

dk_best_sellersBest sellersA
Read-onlyIdempotent

List Digikala's current best-selling products, overall or in one main category.

Returns the main categories with their ids too, for a second call with category_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax products to return.
category_idNoMain category id from dk_categories (no arguments) or this tool's `categories`, e.g. 1 for mobile. Leaf ids are rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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, which covers the safety profile. The description adds that main categories with ids come back in the response, a useful behavioral detail, but says nothing about result ordering, pagination, or truncation behavior at the limit cap.

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 with the primary action and scope stated first and the follow-up workflow second; nothing is redundant and no filler is present.

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 an output schema present, return values need not be explained, and the description does the extra job of flagging the category-id handoff. It is nearly complete, though it never clarifies that results are ranked by sales volume or what happens to limit behavior, which are minor gaps for a 2-param read tool.

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

Parameters3/5

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

Schema description coverage is 100%, so both limit and category_id are already fully documented in the schema, including the leaf-id rejection rule and the example id. The description only restates the overall-vs-one-category notion, adding no syntax or format detail beyond structured data.

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 (list Digikala's current best-selling products) plus the scope axis (overall or one main category), which sets it apart from leaf-level tools like dk_category_products. No sibling is named explicitly, so an agent still has to infer the boundary versus dk_deals or dk_search.

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 second sentence describes a concrete two-step workflow: read the returned main categories and their ids, then call again with category_id. It does not state when to prefer this over dk_category_products, dk_deals, or dk_search, so exclusions are missing but usable context is present.

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

dk_brand_productsBrowse a brandA
Read-onlyIdempotent

List a brand's products on Digikala with sort and price filters (Toman), plus the brand id for brand_ids.

For one brand inside one category use dk_category_products with brand_code instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the results.relevance
max_priceNoHighest price in Toman, e.g. 50000000.
min_priceNoLowest price in Toman, e.g. 10000000 for 10 million Toman.
brand_codeYesBrand code: usually the lowercase English brand name (as in digikala.com/brand/<code>/, or dk_product's brand_code), e.g. 'samsung' or 'xiaomi'.
in_stock_onlyNoOnly products that can be bought now.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/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 only adds that prices are in Toman; it says nothing about pagination limits or result caps beyond what the schema already states. Adequate but thin beyond the annotations.

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 with zero filler; the core capability is front-loaded and the routing caveat follows immediately. Every clause earns its place.

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?

An output schema exists, so return values need no explanation, and annotations cover safety. Scope, filters, currency and the sibling alternative are all present, leaving nothing an agent needs to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the schema (page size, sort enum, price bounds, brand_code format, stock filter). The description reinforces the Toman currency for the price filters but adds no syntax or semantics the schema lacks. Baseline 3 applies when the schema does the heavy lifting.

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 a brand's products on Digikala') plus the facets it supports (sort and price filters). It explicitly separates itself from the closest sibling by name, so an agent can distinguish it from dk_category_products without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives an explicit routing rule: for one brand inside one category, use dk_category_products with brand_code instead. That names the alternative and the condition that selects it, which is exactly the when-to-use guidance an agent needs.

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

dk_categoriesFind categoriesA
Read-onlyIdempotent

Find category codes for dk_category_products and main-category ids for dk_best_sellers.

With query: categories whose Persian name or English code contains it (Persian finds more: 'لپ تاپ' finds the laptop leaf 'notebook-netbook-ultrabook', 'laptop' does not). With parent_id: its children. With neither: the top-level (main) categories. A category with subcategories mixes in accessories: list its children with parent_id and browse the product leaf.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax categories to return.
queryNoWords in the category name or code, e.g. 'هدفون' or 'laptop'.
parent_idNoList the sub-categories of this category id.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover read-only/idempotent safety. The description adds a critical nuance: the Persian vs English search coverage difference and the accessory-mixing behavior in parent categories, which go beyond annotations. It doesn't discuss limits or output structure (though output schema exists), so not perfect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the output types then describes modes cleanly. It's not overly long, but the parenthetical about Persian and the final caution sentence could be tighter. Still, every sentence provides useful information.

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

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description fills the remaining gaps: the relationship to sibling tools, the parameters' effects, and the accessory caveat. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds real semantic value: it explains what each parameter does in terms of the result set (query matches name/code, parent_id lists children, neither returns top-level), and gives a concrete example of Persian vs English behavior. This goes beyond the schema's simple descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific artifact this tool produces (category codes for dk_category_products and main-category ids for dk_best_sellers), which explicitly connects it to sibling tools and distinguishes it from dk_search, dk_suggest, etc. The purpose is concrete and actionable.

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 explains the three modes (query, parent_id, neither) and gives a behavioral caveat about mixed accessories. It doesn't explicitly compare against siblings like dk_search or dk_suggest, so it's slightly short of the top score, but the mode explanations are strong guidance.

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

dk_category_productsBrowse a categoryA
Read-onlyIdempotent

List the products of one category with sort and filters (price in Toman, brand, features, stock).

Use for "cheapest laptops" (category 'notebook-netbook-ultrabook'), "best-selling Xiaomi phones" (brand_code='xiaomi') and similar browsing. For "256 GB Android phones" get the attribute and value ids from dk_filters(category_code=...) first. The API ignores text queries here.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the results.relevance
colorsNoColor ids from dk_filters, e.g. [1].
brand_idsNoBrand ids from dk_product's brand_id or dk_brand_products' brand.id, e.g. [18] Samsung, [1662] Xiaomi.
max_priceNoHighest price in Toman, e.g. 50000000.
min_priceNoLowest price in Toman, e.g. 10000000 for 10 million Toman.
attributesNoFeature filters from dk_filters: {attribute id: [value ids]}, e.g. {2226: [19239]} for Android phones. Values of one attribute are OR'ed, attributes are AND'ed.
brand_codeNoOnly this brand: its English slug, e.g. 'xiaomi' or 'lenovo' (dk_product's brand_code).
seller_typeNoOnly offers from Digikala itself, official brand sellers, trusted sellers or rural (roosta) sellers.
category_codeYesCategory code from dk_categories, dk_suggest or dk_product, e.g. 'mobile-phone'.
fast_deliveryNoOnly items with fast (Jet) delivery.
in_stock_onlyNoOnly products that can be bought now.
ready_to_shipNoOnly items already in Digikala's warehouse (ship sooner).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare the read-only, idempotent, open-world, non-destructive safety profile. The description adds useful behavioral context beyond them: currency is Toman, text queries are ignored, and attribute filters require IDs from dk_filters. It does not add deeper details such as pagination behavior or rate limits, but with annotations covering safety that is acceptable.

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 short and front-loaded: it starts with the core action, then gives examples, then the dk_filters prerequisite, then the text-query caveat. Every sentence adds distinct routing or prerequisite information with no 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?

Given the 13-parameter schema, full parameter descriptions, an output schema, and rich annotations, the description supplies everything an agent needs for correct selection and invocation. Return values are handled by the output schema, and parameter details are handled by the input schema, so no critical context is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 13 parameters fully. The description mentions filter categories and gives a couple of examples such as category_code='notebook-netbook-ultrabook' and brand_code='xiaomi', but it does not add syntax or constraints beyond what the schema provides. 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 products of one category, with sort and filters. It also distinguishes the tool from text search by noting that the API ignores text queries here, and gives concrete browsing examples, so an agent can identify the tool's role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit use cases ('cheapest laptops', 'best-selling Xiaomi phones'), an exclusion ('API ignores text queries here'), and a prerequisite/alternative route for attribute filtering ('get the attribute and value ids from dk_filters(category_code=...) first'). This is close to complete routing guidance.

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

dk_compareCompare productsA
Read-onlyIdempotent

Compare 2-4 products side by side: price and rating, then the spec rows where they differ.

values in each specs row follow the order of products; null means the product has no such spec. Rows where every product has the same value are folded into same_specs ("group / name" -> value). Works best for products of the same category. Unknown ids are left out and listed in missing_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idsYes2-4 product ids of the same kind, e.g. [20109389, 20110013].

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: null means a missing spec, identical rows are folded into `same_specs`, and unknown ids are dropped and reported in `missing_ids`.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action in the first clause, then dense but useful detail about the return semantics. Two short paragraphs, no filler, though the second paragraph is tightly packed.

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, yet the description still clarifies the key semantic conventions (ordering, nulls, folding, missing ids). The only gap is absence of explicit alternative-tool routing.

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% for the single parameter, so baseline is 3. The description adds meaning by stating that `values` follow the order of `products`, which tells the agent that input ordering is preserved and significant.

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 with scope: 'Compare 2-4 products side by side: price and rating, then the spec rows where they differ.' An agent can tell this is a multi-product comparison rather than a single-product lookup, though no sibling (e.g. dk_similar, dk_product) is named to sharpen the boundary.

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?

'Works best for products of the same category' implies when the tool is appropriate, and the 2-4 bound is stated. However, there is no explicit when-to-use/when-not guidance and no routing to alternatives such as dk_product for a single item.

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

dk_dealsCurrent dealsA
Read-onlyIdempotent

List today's Incredible Offers (flash deals), biggest discount first, in-stock only.

Each product has discount_pct, price_before_discount and deal_ends (Tehran time). Use for "best discounts right now". With store='supermarket' it lists Digikala Fresh deals.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the deals.biggest_discount
queryNoOptional words to narrow the deals, e.g. 'هدفون' or 'شیر'.
storeNo'digikala' for Incredible Offers, 'supermarket' for Digikala Fresh grocery deals.digikala
max_priceNoHighest price in Toman, e.g. 50000000.
min_priceNoLowest price in Toman, e.g. 10000000 for 10 million Toman.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and open-world. The description adds meaningful context beyond annotations: ranking rule (biggest discount first), in-stock filtering, returned fields (discount_pct, price_before_discount, deal_ends), timezone (Tehran), and store-specific behavior. It doesn't disclose pagination size or sort overrides, but the annotations lower the bar and the description meaningfully supplements them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the key action and scope, then field-level detail, then a use-case cue. No filler; each sentence contributes relevant 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?

Given annotations and a 100%-covered schema plus an output schema, the description is nearly complete. It covers ranking, filtering, returned fields, timezone, and store variants. Minor gaps remain around pagination and sort override interactions, but the essentials for correct invocation are present.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are already documented in the schema. The description reinforces the store semantics and note about Tehran time, but adds little beyond the schema. Baseline 3 is appropriate given the schema's completeness.

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 today's Incredible Offers (flash deals)'), and adds discriminating scope: biggest discount first, in-stock only. An agent can distinguish this from dk_search (general search) and dk_find_cheapest (price-focused) without opening the 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 a clear usage trigger ('Use for "best discounts right now"') and a store variant condition. It does not explicitly name which sibling to use for non-deal searches, but the implicit contrast with dk_search is reasonable. Lacks explicit when-not-to-use guidance.

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

dk_filtersFilter optionsA
Read-onlyIdempotent

List the filters Digikala offers for a category or a search: features, colors, sellers, price range.

Returns attributes (operating system, storage, connection type, ...) with their values as {value title: value id}; an attribute with more than 15 values only has value_count: call again with attribute_id for its values. Also colors as {title: id}, seller types, the price range in Toman, and the brands as {code: id} (category only) or the categories the search spans as {code: title} (query only). Pass the ids to dk_category_products or dk_search (attributes={attribute id: [value ids]}, colors=[...], seller_type=..., brand_ids=[...]).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoSearch words instead of a category, e.g. 'هدفون بی سیم'.
brand_codeNoWith category_code: only this brand, e.g. 'samsung'.
attribute_idNoReturn only this attribute with all its values, e.g. 2251 (phone storage).
category_codeNoCategory code from dk_suggest or dk_categories, e.g. 'mobile-phone'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds real behavioral detail beyond that: truncated attributes expose only value_count and require a second call with attribute_id, and the return shape differs by mode (brands for category, categories for query).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose before the return-shape detail, and every sentence carries operational information (value truncation, downstream id passing). It is dense and paragraph-heavy, but no sentence is redundant with the schema.

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

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not document return values, yet it does so usefully enough to explain the truncation/re-call loop and the mode-dependent outputs. Coverage of inputs, outputs, and follow-up actions is sufficient for correct invocation.

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 description coverage is 100%, so the baseline is 3, but the description adds conditional semantics the schema does not: brand_code is category-only, the query mode returns spanned categories rather than brands, and attribute_id is the documented remedy for the value_count truncation.

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 filters Digikala offers for a category or a search') and enumerates the filter families returned (features, colors, sellers, price range). It also names the downstream siblings (dk_category_products, dk_search), so an agent can place it precisely among the 22 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?

Clearly routes the agent: 'Pass the ids to dk_category_products or dk_search' with the exact argument shapes, and gives the re-call procedure when an attribute exceeds 15 values. It lacks an explicit statement of when to prefer category_code vs query or what to do if neither is supplied, but the practical usage path is unambiguous.

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

dk_find_cheapestFind cheapest productA
Read-onlyIdempotent

Find the cheapest in-stock products that really match a query, one flat list sorted by price.

Scans the most relevant search results (not the whole catalogue, which is full of cheap accessories), keeps those whose title contains every query word (if none does: any query word, with a note), drops "suitable for ..." accessories, and sorts them by the current buy-box price in Toman. Use for "cheapest X". Then call dk_product on the winner: another seller may offer it for less.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax products to return.
pagesNoRelevance pages to scan, 20 products each.
queryYesProduct name or words, Persian or English, e.g. 'گوشی سامسونگ' or 'airpods pro'.
max_priceNoHighest price in Toman, e.g. 50000000.
min_priceNoSkip anything cheaper than this, in Toman. Default: a quarter of the median price of the top matches (ignoring max_price), which drops accessories.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent and non-destructive, so the bar is low, yet the description adds substantial non-obvious behavior: the scan is deliberately bounded to relevance pages because the full catalogue is 'full of cheap accessories', matching requires all query words in the title with a documented fallback (any word, flagged with a `note`), 'suitable for ...' accessories are dropped, and sorting uses the buy-box price in Toman.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core capability and the follow-up recommendation are front-loaded and every clause carries information, but the single dense paragraph of matching mechanics is slightly run-on and would read faster as a short list of the filtering rules.

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?

An output schema exists, so return values need no explanation, and the description covers the non-obvious parts an agent needs: bounded scanning, word-matching rules with fallback, accessory filtering, price semantics in Toman, and the recommended next call. Nothing material is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds design intent the schema lacks: it explains why only the most relevant search pages are scanned (tying to `pages`) and why a min-price floor exists (dropping cheap accessories), reinforcing the min_price default documented in 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 with scope qualifiers ('cheapest in-stock products that really match a query, one flat list sorted by price'), which is clearly distinguishable from dk_search, dk_deals and dk_best_sellers. An agent can select this tool from the name plus the first sentence alone.

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 trigger phrase ('Use for "cheapest X"') and a follow-up action with its rationale ('Then call dk_product on the winner: another seller may offer it for less'), which routes a multi-step workflow. It stops short of naming when not to use it (e.g. vs dk_deals or dk_search), so it is clear context without exclusions.

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

dk_gold_pricesGold and coin pricesA
Read-onlyIdempotent

Get Digikala's live 18k gold price per gram and gold coin prices, in Toman.

gold18_day_change_pct is the change since the previous daily point; gold18_period_change_pct, low and high cover the ~3-month chart. Coins' change_pct is as Digikala shows it (its period is not documented). Coins with price null are not for sale right now.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds real behavioral context beyond that: the period semantics of gold18_day_change_pct vs gold18_period_change_pct/low/high, and critically that a null coin price means 'not for sale right now'. That null-value meaning is not something annotations would convey.

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?

Three sentences, front-loaded with the core purpose and scope, then field semantics. Every sentence carries information. The second sentence is dense with field names, but nothing is filler or redundant.

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 structure needn't be spelled out. The description nonetheless supplies interpretation rules (change_pct period undocumented for coins, null = unavailable) that an agent needs to read the output correctly. Missing only explicit usage/routing guidance and any freshness/cadence note beyond 'live'.

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?

Zero parameters, so by the rubric this is a baseline 4. The description does define the meaning of returned fields (day vs period change, null price semantics), which is beyond the no-parameter schema and helps interpretation, though these are response fields rather than inputs.

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: 'Get Digikala's live 18k gold price per gram and gold coin prices, in Toman.' No sibling tool in the list deals with gold/coins, so it is trivially distinguishable from dk_search, dk_product, dk_price_history etc. An agent knows exactly what this returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent infers 'call this for gold/coin prices' from the purpose statement. There is no explicit when-to-use or when-not-to-use guidance, nor a pointer to dk_price_history as the historical alternative for other assets. The implicit '~3-month chart' reference hints at the covered window but does not route the agent anywhere.

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

dk_installmentsInstallment plansA
Read-onlyIdempotent

Get the Digipay credit-line offers available when buying a product, in Toman.

Each plan is a fixed credit line (credit_amount), repaid in months installments of monthly_repayment; it is not sized to the product price (the credit can be larger), so do not present it as "this product for X a month". Get the price from dk_product. How the credit and the price combine at checkout is unconfirmed. Needs Digipay approval. An unknown id gives no plans; check it with dk_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYesDigikala product id, the number in 'dkp-<id>' (from dk_search etc.), e.g. 20109389.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare a safe, idempotent, read-only, open-world call; the description adds substantial non-obvious behavior: plans are fixed credit lines not sized to price, unknown ids yield no plans, Digipay approval is required, and the credit/price interaction at checkout is unconfirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then layers caveats and routing in short sentences that each carry weight. It is slightly dense with caveats, but nothing is filler or redundant.

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

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value exposition is unnecessary, and the description still covers the interpretive caveats an agent needs (fixed credit line, approval gating, empty result on bad id, unconfirmed checkout combination). Nothing material is missing for correct invocation.

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 product_id parameter is fully documented in the schema (format, example, 'dkp-<id>' origin). The description adds behavioral meaning ('an unknown id gives no plans') but nothing about parameter format beyond what the schema supplies, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Get the Digipay credit-line offers available when buying a product' — with the unit (Toman). It clearly distinguishes itself from sibling pricing tools like dk_price_history and dk_product by naming the credit-line semantics.

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 routes the agent to dk_product for the product price and to validate a product id, which is actionable guidance. It does not, however, state when to prefer this over the similarly-named dk_plus_plans sibling, leaving one plausible alternative unaddressed.

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

dk_locationFind locationA
Read-onlyIdempotent

Turn an address into coordinates, or coordinates into an address with Digikala's city_id and state_id.

Pass address + city, or lat + long. Product prices are the same everywhere; location only matters for delivery options shown at checkout.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude, to describe a point instead (Iran: ~25 to ~40).
cityNoPersian city name; without it most addresses find nothing, e.g. 'تهران' or 'مشهد'.
longNoLongitude, with lat.
addressNoAddress or landmark in Persian, e.g. 'میدان ونک'. Latin text matches poorly.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld/idempotent/non-destructive, so safety is covered. The description adds genuinely useful behavioral context beyond them: that prices are location-independent and location only affects checkout delivery options, which tells the agent when calling this is worthwhile. It does not cover error behavior or matching fallbacks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose, then the invocation rule, then the relevance caveat. No filler or restatement of the name.

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?

An output schema exists, so return values need not be explained, and all four parameters are fully documented in the schema. Combined with the usage rule and relevance caveat, nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds the mutual-exclusivity/pairing rule for the two modes (address+city vs lat+long), which the flat schema does not express, so it earns above baseline.

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 precise verb+resource pair ('turn an address into coordinates, or coordinates into an address') and names the concrete domain artifacts returned (city_id, state_id). It is clearly distinguishable from every sibling, which are all search/product/review 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?

Explicitly tells the agent which parameter combinations are valid ('Pass address + city, or lat + long') and when this tool is relevant ('location only matters for delivery options shown at checkout'). It does not name alternative tools or state exclusions, so it falls short of a 5.

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

dk_plus_plansDigikala Plus plansA
Read-onlyIdempotent

List Digikala Plus membership plans (free shipments) with their price in Toman and benefits.

Use when shipping cost matters: Plus members get a number of free deliveries per month (jet = same-day Tehran/Karaj, fresh = supermarket). Exact shipping fees are only shown at checkout.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare this as a safe, idempotent, open-world read. The description adds genuinely new behavioral context: the meaning of 'jet' (same-day Tehran/Karaj) and 'fresh' (supermarket), and the caveat that exact shipping fees only appear at checkout.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the usage cue and caveats in two tight sentences. No filler, though the parenthetical detail about jet/fresh adds length that could be trimmed if space were at a premium.

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 zero parameters and an output schema present, the description does not need to explain return values; it covers purpose, benefits, and the checkout-fee caveat. Sufficient for an agent to call it correctly, with only minor room for extra routing detail.

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 per the rubric the baseline is 4. There is nothing further for the description to disambiguate on the parameter side.

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 Digikala Plus membership plans') plus the returned content (price in Toman and benefits). No sibling tool covers Plus memberships, so it is clearly distinguishable from the search/category/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?

'Use when shipping cost matters' gives a concrete triggering condition and explains why (free deliveries per month). It stops short of naming alternatives or when-not-to-use cases, so it is strong context without full routing guidance.

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

dk_price_historyPrice historyA
Read-onlyIdempotent

Get about 30 days of daily buy-box prices (Toman) per color/variant, with lowest and highest.

Use to answer "is this a good price right now?". lowest_2_days is the lowest price that held on two days in a row; lowest can be a one-day dip. Days are Jalali (YYYY/MM/DD); days when the variant was not for sale are left out. An unknown id gives no variants; check it with dk_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYesDigikala product id, the number in 'dkp-<id>' (from dk_search etc.), e.g. 20109389.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish it as a read-only, idempotent, non-destructive, open-world operation. Beyond that, the description discloses the time window, currency, per-variant granularity, the distinction between lowest and lowest_2_days, Jalali date format, omission of days when a variant was not for sale, and unknown-id behavior.

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 definition is front-loaded with the core capability, then layers in the key nuances. Every sentence contributes either scope, usage context, or an edge case, with no filler.

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

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a rich output schema and full annotation coverage, the description still supplies the essential behavioral details an agent needs: date format, currency, variant granularity, what lowest vs. lowest_2_days means, and how missing sale days are handled.

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 fully documents product_id, so the baseline is 3. The description adds meaningful parameter behavior by stating that an unknown id yields no variants and suggesting validation via dk_product, which is useful context 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?

The description states a specific verb and resource: it retrieves roughly 30 days of daily buy-box prices per color/variant, with lowest and highest values. It distinguishes the tool from siblings by focusing on historical price evaluation and explicitly routes id validation to dk_product.

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 a clear use case — answering "is this a good price right now?" — and explains how to handle an unknown id by checking with dk_product. It does not explicitly name alternatives or when not to use it, so it falls just short of full routing guidance.

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

dk_productProduct details and offersA
Read-onlyIdempotent

Get one product's price, stock, rating, specs and every seller's offer (cheapest first).

Each offer is one color/size from one seller, with price in Toman, stock_left (only shown when low), warranty, seller rating 0-5 and shipping (ships_by: 'digikala', 'jet' = same-day in Tehran/Karaj, 'seller'; free_shipping when the seller ships free). lowest_price_30d is Digikala's own figure and can be a one-day dip of one color; dk_price_history (lowest_2_days) is steadier. Exact shipping cost is only known at checkout. Grocery items come from the supermarket store (store='supermarket'): its price can differ from the main-store price that dk_search, dk_compare and dk_price_history show.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_offersNoMax seller offers to return, cheapest first.
product_idYesDigikala product id, the number in 'dkp-<id>' (from dk_search etc.), e.g. 20109389.
include_specsNoInclude the specification table.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds substantial behavior: exact offer field meanings (price in Toman, stock_left only shown when low, seller rating 0-5, ships_by values decoded, free_shipping), the caveat that lowest_price_30d can be a one-day dip, and that exact shipping cost is only known at checkout.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and returned-field inventory are front-loaded, and virtually every sentence carries non-obvious information (enum meanings, price-source caveats). Some sentences are densely run-on (the ships_by clause), which slightly hurts readability but wastes little space.

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

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not explain return values, yet it goes further by decoding offer fields and flagging cross-tool price discrepancies. Combined with the annotations, an agent has everything needed to call this correctly and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100%, so product_id, max_offers and include_specs are already documented in the schema; baseline 3 applies. The description adds no further parameter guidance (e.g. it never mentions the 50-offer cap or the specs toggle), so it does not exceed 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 ('Get one product's price, stock, rating, specs and every seller's offer') with scope qualifiers ('cheapest first'). It even differentiates itself from siblings by naming dk_search, dk_compare and dk_price_history, so an agent can tell the detailed single-product view apart from the search/compare 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?

Clear context is implied throughout: this is the per-product detail tool, and the caveat that grocery items' prices differ from what dk_search/dk_compare/dk_price_history show tells the agent which source wins for supermarket items. There is no explicit 'use this instead of X when Y' routing statement, so it falls short of a 5.

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

dk_questionsProduct questions and answersA
Read-onlyIdempotent

Read customers' questions about a product and up to 2 answers each (answered_by: buyer, seller, ...).

20 questions per page; long texts are cut to 300 characters. Use for practical doubts (compatibility, size, registration).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the questions.most_answered
product_idYesDigikala product id, the number in 'dkp-<id>' (from dk_search etc.), e.g. 20109389.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds real behavioral detail: answer-count cap, the answered_by taxonomy, 20 items per page, and 300-character truncation of long texts. These caveats materially affect how an agent interprets results.

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, zero waste, with the core function and result shape front-loaded before the pagination/truncation caveats and the usage hint. Every clause earns its place.

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 an output schema present, return values need not be described, and the description still covers pagination, truncation and answer limits. Only minor gaps remain (empty-result behavior, no cross-reference to dk_reviews), which is enough for a 4 but not a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's page-size note actually corrects the schema's mislabeled '20 products per page' to 20 questions per page, but it adds nothing about the sort enum or the product_id format beyond what the schema already documents.

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 (read) and resource (customers' questions about a product) and even bounds the payload ('up to 2 answers each'). It doesn't explicitly name the sibling it differs from (dk_reviews), but an agent can still tell it apart by the resource noun.

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: 'Use for practical doubts (compatibility, size, registration).' That is concrete when-to-use guidance. It stops short of stating when-not-to-use or pointing at dk_reviews/dk_product as alternatives, so it isn't a 5.

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

dk_reviewsProduct reviewsA
Read-onlyIdempotent

Read customer reviews of a product: stars 1-5 (null = no stars given), text, pros/cons, verified buyer flag.

20 per page. The overall rating (0-5) is in dk_product. Long texts are cut to 300 characters. An unknown id gives no reviews; check it with dk_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the reviews.most_helpful
product_idYesDigikala product id, the number in 'dkp-<id>' (from dk_search etc.), e.g. 20109389.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuinely new behavior: page size of 20, long texts truncated at 300 characters, null meaning "no stars given", and empty results for unknown ids. These are exactly the traits that would otherwise surprise a caller.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with what is returned, then pagination/truncation limits, then the error-handling hint. No filler and no repetition of the schema.

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 paginated list tool with a full output schema and complete annotation coverage, the description supplies everything an agent still needs: what comes back, how much per page, truncation, and what an empty result implies.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, and the description adds value by clarifying the page size ("20 per page"), which usefully corrects the schema's mislabeled "20 products per page" text on the page parameter. It says nothing extra about the sort enum values beyond the schema's own ordering description.

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 ("Read customer reviews of a product") and enumerates the returned fields (stars, text, pros/cons, verified buyer flag). It also distinguishes itself from the sibling dk_product by noting that the overall rating lives there rather than here.

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 concrete routing rule for the failure case: an unknown id returns no reviews, so validate it with dk_product first, and it redirects the agent to dk_product for the aggregate rating. It stops short of stating when to prefer this over other sibling tools (e.g., dk_questions for Q&A), but the context it does give is actionable.

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

dk_sellerSeller profile and productsA
Read-onlyIdempotent

Get a marketplace seller's reputation (rating 0-5, on-time shipping, cancellations, returns) and products.

Use before recommending an offer from a seller you don't know. Percentages are the share of good orders (100 = never late / never cancelled / never returned).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the results.best_selling
seller_codeYesSeller code from dk_product offers or a product card, e.g. 'CGDG9'.
in_stock_onlyNoOnly products that can be bought now.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare this as a safe, read-only, idempotent, non-destructive operation, so the safety profile is fully covered. The description adds valuable clarification about the reputation metric semantics ('Percentages are the share of good orders (100 = never late / never cancelled / never returned)'), which is not in annotations and helps interpret results. It does not discuss output schema details, but the presence of an output schema lessens that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: first sentence states what the tool does, second gives usage guidance, third clarifies metric semantics. It could be slightly more efficient, but every sentence earns its place.

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?

Given annotations cover safety and an output schema exists, the description provides sufficient context for correct invocation: it clarifies the meaning of the reputation metrics, which is neither in annotations nor schema. It doesn't explain pagination or sorting behavior, but the schema covers those parameters. Complete enough for an agent to call correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (page, sort, seller_code, in_stock_only) are fully documented in the schema. The description adds no parameter-specific syntax or constraints beyond what the schema already provides, so 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 ('Get a marketplace seller's reputation ... and products') and enumerates the reputation facets (rating 0-5, on-time shipping, cancellations, returns). This is clearly distinguishable from sibling tools like dk_product, dk_best_sellers, or dk_reviews, which target products or reviews rather than seller profiles.

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?

Provides explicit context for use ('Use before recommending an offer from a seller you don't know'), which tells the agent when to reach for this tool. It does not, however, name alternative siblings or state when NOT to use it (e.g., when the seller is already known), leaving some guidance implicit.

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

dk_shortlistRe-check a shortlistA
Read-onlyIdempotent

Re-price up to 10 products in one call: today's price, cheapest offer, stock, rating and 30-day low.

Use to refresh a list the user is watching or deciding between, or to check a saved product is still in stock. cheapest_offer can be lower than price (the site's featured offer). low_30d is the lowest price of the last 30 days that held on two days in a row (any color), and vs_30d_low_pct how far today's price sits above it (0 = at the low). lowest_one_day_30d is Digikala's own figure, which can be a one-day dip of one color. For specs side by side use dk_compare; for the daily curve dk_price_history.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idsYes1-10 product ids, e.g. [20109389, 20110013].

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further by clarifying output-field semantics that are easy to misread: cheapest_offer can undercut price, low_30d requires a two-day hold, and lowest_one_day_30d is Digikala's own one-day-dip figure. This is genuine added context beyond structured fields, though it stops short of describing rate limits or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The primary action and scope are front-loaded in the first sentence, with usage and field semantics following. The explanation of the three low-price fields is dense but earns its place by preventing misreading; a little tightening could still be done.

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

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't re-document return values, and with annotations covering safety it covers selection, usage context, sibling routing, and the semantic traps in the returned metrics. Nothing an agent needs to call this correctly is missing.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage and schema-level min/max constraints, so baseline is 3. The description's 'up to 10 products in one call' merely restates maxItems=10 and adds no new syntactic 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?

The description opens with a precise verb+resource+scope: 'Re-price up to 10 products in one call', then enumerates exactly what it returns (price, cheapest offer, stock, rating, 30-day low). It is immediately distinguishable from siblings like dk_compare and dk_price_history, which it names explicitly.

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 states both when to use it 'to refresh a list the user is watching or deciding between, or to check a saved product is still in stock' and when not to, routing specs side-by-side to dk_compare and the daily curve to dk_price_history. Nothing about tool selection is left to inference.

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

dk_similarSimilar productsA
Read-onlyIdempotent

List products similar to one product (same kind, other models and brands).

Use sort='cheapest' for cheaper alternatives. Compare two or more with dk_compare.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1 (20 products per page).
sortNoOrder of the results.relevance
product_idYesDigikala product id, the number in 'dkp-<id>' (from dk_search etc.), e.g. 20109389.
in_stock_onlyNoOnly products that can be bought now.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description adds only the scoping sense of "similar" and the cheapest-sort trick, but says nothing about result volume or pagination behavior beyond what the schema states.

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 with zero filler; the core purpose leads and the two routing hints follow. 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?

An output schema exists, so return values need no explanation, and annotations carry the safety profile. What remains unaddressed is how this tool relates to the overlapping sibling dk_find_cheapest and how paging behaves in practice, leaving a small ambiguity for the agent.

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 description coverage is 100%, so the baseline is 3, but the description goes beyond the schema by attaching intent to a specific enum value: sort='cheapest' yields cheaper alternatives. That is genuine semantic value the bare "Order of the results" schema text does not convey.

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 products similar to one product") and immediately disambiguates the fuzzy word "similar" as "same kind, other models and brands." It also names the sibling to use instead for comparison (dk_compare), so an agent can place it against alternatives without reading schemas.

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 actionable routing: use sort='cheapest' for cheaper alternatives, and use dk_compare to compare two or more products. It lacks explicit when-not guidance (e.g., versus dk_search, dk_find_cheapest, or dk_category_products for browsing a category), so the alternative space is only partially mapped.

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

dk_suggestSearch suggestionsA
Read-onlyIdempotent

Autocomplete a vague or partial query into better search words, categories and brands.

Use when the user's words are unclear or misspelled, then call dk_search with a suggested keyword, or dk_category_products with a suggested category code.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesPartial text, e.g. 'samsung' or 'هدفون'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered without the description. The description adds only that the tool normalizes partial/misspelled input into keywords, categories and brands, which is mildly useful but not rich behavioral context.

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 core action and followed by the usage condition and next steps. There is minor blank-line padding but no wasted clauses.

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-parameter read tool with an output schema, the description supplies everything needed to decide to call it and what to do with the result. Return-value details are correctly left to the output schema.

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 single 'query' parameter is documented in the schema with examples and length bounds. The description adds the notion of a 'vague or partial' query, but no syntax or format detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Autocomplete') and the transformation applied to the resource (a vague/partial query into search words, categories and brands). It also names the sibling tools it feeds into (dk_search, dk_category_products), so an agent can distinguish its role from those search tools without opening a 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 a clear triggering condition ('when the user's words are unclear or misspelled') and routes the agent to the correct follow-up call with the suggested output type. No explicit when-not-to-use case is given, so it falls short of full 5-level guidance, but the context is unambiguous.

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. 5 tool updatesv0.2.1
    • Addeddk_best_for_budget
    • Changeddk_category_products5 fields changed
      • addedInput schema / properties / attributes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      },
        +      "maxProperties": 10,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Feature filters from dk_filters: {attribute id: [value ids]}, e.g. {2226: [19239]} for Android phones. Values of one attribute are OR'ed, attributes are AND'ed.",
        +  "title": "Attributes"
        +}
      • addedInput schema / properties / colors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "maxItems": 10,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Color ids from dk_filters, e.g. [1].",
        +  "title": "Colors"
        +}
      • addedInput schema / properties / fast_delivery
        Added value: +{
        +  "default": false,
        +  "description": "Only items with fast (Jet) delivery.",
        +  "title": "Fast Delivery",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / ready_to_ship
        Added value: +{
        +  "default": false,
        +  "description": "Only items already in Digikala's warehouse (ship sooner).",
        +  "title": "Ready To Ship",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / seller_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "digikala",
        +        "official",
        +        "trusted",
        +        "roosta"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only offers from Digikala itself, official brand sellers, trusted sellers or rural (roosta) sellers.",
        +  "title": "Seller Type"
        +}
    • Addeddk_filters
    • Changeddk_search5 fields changed
      • addedInput schema / properties / attributes
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": {
        +        "items": {
        +          "type": "integer"
        +        },
        +        "type": "array"
        +      },
        +      "maxProperties": 10,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Feature filters from dk_filters: {attribute id: [value ids]}, e.g. {2226: [19239]} for Android phones. Values of one attribute are OR'ed, attributes are AND'ed.",
        +  "title": "Attributes"
        +}
      • addedInput schema / properties / colors
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "integer"
        +      },
        +      "maxItems": 10,
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Color ids from dk_filters, e.g. [1].",
        +  "title": "Colors"
        +}
      • addedInput schema / properties / fast_delivery
        Added value: +{
        +  "default": false,
        +  "description": "Only items with fast (Jet) delivery.",
        +  "title": "Fast Delivery",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / ready_to_ship
        Added value: +{
        +  "default": false,
        +  "description": "Only items already in Digikala's warehouse (ship sooner).",
        +  "title": "Ready To Ship",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / seller_type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "digikala",
        +        "official",
        +        "trusted",
        +        "roosta"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Only offers from Digikala itself, official brand sellers, trusted sellers or rural (roosta) sellers.",
        +  "title": "Seller Type"
        +}
    • Addeddk_shortlist
  2. 20 tool updatesv0.1.0
    • First observeddk_best_sellers
    • First observeddk_brand_products
    • First observeddk_categories
    • First observeddk_category_products
    • First observeddk_compare
    • First observeddk_deals
    • First observeddk_find_cheapest
    • First observeddk_fresh_search
    • First observeddk_gold_prices
    • First observeddk_installments
    • First observeddk_location
    • First observeddk_plus_plans
    • First observeddk_price_history
    • First observeddk_product
    • First observeddk_questions
    • First observeddk_reviews
    • First observeddk_search
    • First observeddk_seller
    • First observeddk_similar
    • First observeddk_suggest

TDQS

A3.9/5.0

Scored across 23 tools

Disambiguation3/5

Many product-discovery tools (dk_search, dk_category_products, dk_brand_products, dk_fresh_search, dk_find_cheapest, dk_best_for_budget, dk_best_sellers, dk_deals, dk_similar) overlap in returning product lists. The descriptions do a good job explaining when to use each and cross-referencing, but an agent still faces several plausible choices for a broad product query.

Naming Consistency4/5

All tool names use a consistent dk_ prefix and snake_case, which is predictable. However grammatical patterns vary (verb phrases like dk_find_cheapest, noun phrases like dk_price_history, adjective_noun like dk_best_sellers), so there is no strict verb_noun convention.

Tool Count3/5

23 tools is heavy for the core shopping-research purpose, sitting in the 16-25 borderline range. The broad domain (search, categories, product detail, reviews, price history, sellers, deals, Fresh, gold, location) explains some breadth, but several discovery tools feel like variants that could be consolidated.

Completeness4/5

The surface covers product discovery, detail, pricing history, reviews, Q&A, seller reputation, deals, Fresh, and location well. Gaps remain around transactional operations (cart, checkout, orders) and account-level features, but for a research-focused MCP it is largely complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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 AI agents to query SoloTodo's product catalog, compare specs and prices, analyze price history, detect inflated offers, and review buyer evaluations through natural language.
    -