asalbanoo-mcp
An unofficial, read-only MCP server that lets an AI agent search, compare and inspect cosmetics and skin-care products on the Iranian shop Asal Banoo (asalbanooshop.com).
Search products by keyword in Persian or English, with sort, price range and in-stock filter (
ab_search).Find the cheapest in-stock match whose title contains every query word (
ab_find_cheapest).Browse a category or brand (or the whole shop) sorted by price, date, popularity or rating, with price and attribute filters (
ab_browse).Discover filters (volume, hair/skin type, gender, origin) with counts for a category or brand (
ab_filters).List categories (~70) and brands (~250) with slugs and product counts (
ab_categories,ab_brands).See current deals — everything discounted and in stock, biggest discount first (
ab_deals).Read one product's details: price, discount, stock, every size/color variant, brand, rating, key facts and images (
ab_product).Read customer reviews and questions with star breakdown and the shop's answers (
ab_reviews).Get shop policies and FAQ: delivery times, returns, wallet, branches, contact info (
ab_shop_info).Read the shop's blog: care guides and product comparisons, list and full text (
ab_blog_posts,ab_blog_post).Prices are in Toman; it is read-only, needs no API key, and cannot log in, use a cart, place orders or post reviews.
Reads the shop's public WordPress REST endpoints (alongside its listing pages and quick-view fragments) to retrieve cosmetics and skin-care product data, such as product listings, prices, stock and categories, for Asal Banoo's storefront.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@asalbanoo-mcpcheapest in-stock anti-dandruff shampoo under 2 million Toman and its rating"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
asalbanoo-mcp: Asal Banoo MCP server for AI agents
Let your AI agent shop for cosmetics and skin care on Asal Banoo (عسل بانو). An unofficial, read-only MCP server for asalbanooshop.com, an Iranian online shop for skin care, hair care, make-up and perfume: search products, find the cheapest in-stock match, compare sizes and prices, read reviews and catch discounts, from Claude, Cursor or Copilot.
For AI agents · Why · What it can do · Quick start · Tools · How it works · Good to know · FAQ · Configuration · فارسی · Development
For AI agents
What: unofficial MCP server (model context protocol) for Asal Banoo (asalbanooshop.com, عسل بانو), an Iranian skin care, hair care, make-up and perfume shop with branches in Bandar Abbas. Queries work in Persian and English.
Install:
uvx asalbanoo-mcporclaude mcp add asalbanoo -- uvx asalbanoo-mcp. Transport: stdio. Needs uv (Python 3.10+).Auth: none, no API key or account. Optional
ASALBANOO_MCP_PROXYsets an HTTP proxy (or a comma-separated list) for requests to asalbanooshop.com; system proxy settings are ignored.Access: read-only. It cannot log in, use a cart, place orders or post reviews, so no confirmation is needed before calling any tool.
Tools: 12, all prefixed
ab_. Start withab_find_cheapest,ab_search,ab_productorab_deals. Typical sequence:ab_find_cheapest->ab_product->ab_reviews. Take a product'sidfromab_searchorab_browseand pass it asproduct_idtoab_productandab_reviews. Category and brand slugs forab_browsecome fromab_categoriesandab_brands.Units: prices in Toman.
final_priceis what the buyer pays,priceis before discount,discount_pctis a whole percent, ratings are 1-5 ornull. In product lists, null fields are left out: nopricemeans it equalsfinal_price, nodiscount_pctmeans 0, noratingmeans no reviews. Review texts are cut at 400 characters (full_text=trueonab_reviewsreturns them whole).Use when: the user compares cosmetics and skin care prices, sizes, stock, reviews or current discounts on Asal Banoo, or wants the shop's care guides and delivery rules.
Do not use when: the user wants to buy something (no cart or checkout), needs a shipping fee (the shop shows it only at checkout), or asks about another shop.
Machine-readable:
server.json, and the catalog of all Iranian MCP servers at iran-mcp (TOOLS.md, servers.json, llms.txt).
Related MCP server: digikala-mcp
Why
Asal Banoo (عسل بانو) lists about 3,500 skin, hair, make-up and perfume products, and a search for
"sunscreen" mixes in eye creams, sold-out items and products that only mention sunscreen in their
description. Finding the cheapest one you can actually order, in the size you want, means paging
through listings and opening product pages. An agent with asalbanoo-mcp does that in seconds:
You: Cheapest sunscreen I can order now?
Agent: calls
ab_find_cheapest(query="ضد آفتاب")→ab_product(product_id=28470)
Price
Product
Note
427,300
ضد آفتاب دور چشم آیسول
eye area, untinted; the tinted one (432,200) is sold out
499,800
ضدآفتاب دور چشم فتوتیپیک SPF30 درماتیپیک
eye-area, rating 1.5
599,800
ضد آفتاب پوست خشک درماتیپیک Hydra
face, dry skin, 5 tints up to 899,800
The two cheapest are for the eye area. For the face, the Dermatypique Hydra is listed from 599,800 Toman, but only its Light Beige tint is in stock, at 899,800. Want me to check its reviews with
ab_reviews?
Real tool output from 2026-10-06; prices change all the time. Prices are in Toman.
What it can do
Search products by name in Persian or English, with price, discount, stock and rating
Find the cheapest in-stock match whose title really contains your words
Browse any category or brand sorted by price, date, popularity or rating, with price range, volume and hair/skin type filters
Read product details: every size/color with its own price and stock, key facts (volume, skin type, origin), reviews with the shop's answers
Catch deals: everything discounted right now, biggest discount first
Get advice from the shop's care guides and comparisons, plus delivery, return and wallet rules
Read-only by design: no login, no cart, no orders, no reviews posted
Example prompts:
"Cheapest anti-dandruff shampoo between 1 and 2 million Toman, and which one has the best reviews?"
"How much is the 1000 ml Roverhair Detox shampoo, and is it in stock?"
"Vichy Mineral 89 or Clinique Moisture Surge for oily skin?"
"Which Asal Banoo products are discounted the most today?"
تخفیف‌های امروز عسل بانو روی ضد آفتاب چیه؟
ارزان‌ترین شامپو ضد شوره موجود در عسل بانو کدومه؟
نظر خریداران درباره سرم ویتامین سی چیه؟
Quick start
You need uv. No API key or account.
claude mcp add asalbanoo -- uvx asalbanoo-mcpSettings → Developer → Edit Config, then add:
{
"mcpServers": {
"asalbanoo": { "command": "uvx", "args": ["asalbanoo-mcp"] }
}
}Click Install in Cursor above, or add the Claude Desktop block to ~/.cursor/mcp.json (or .cursor/mcp.json in a project).
Click Install in VS Code above, or add to .vscode/mcp.json:
{
"servers": {
"asalbanoo": { "type": "stdio", "command": "uvx", "args": ["asalbanoo-mcp"] }
}
}codex mcp add asalbanoo -- uvx asalbanoo-mcpOr in ~/.codex/config.toml:
[mcp_servers.asalbanoo]
command = "uvx"
args = ["asalbanoo-mcp"]Add to ~/.gemini/settings.json:
{
"mcpServers": {
"asalbanoo": { "command": "uvx", "args": ["asalbanoo-mcp"] }
}
}Add the Claude Desktop block to ~/.codeium/windsurf/mcp_config.json.
It's a standard stdio MCP server: run uvx asalbanoo-mcp, or pip install asalbanoo-mcp and run asalbanoo-mcp.
Tools
All 12 tools are prefixed ab_ and annotated readOnlyHint: true. They return compact JSON, so they don't flood the agent's context.
Tool | What it does |
| Search by keyword: price, discount, stock, rating, with sort and price range |
| Cheapest in-stock matches for a keyword, one flat list (titles must contain every word) |
| A category, brand or the whole shop sorted by price / date / popularity / rating, with price range and filters |
| Volume, hair/skin type, gender and origin filters of a category or brand, with counts |
| Product categories (about 70) with slugs and product counts |
| Brands (about 250) with slugs and product counts |
| Everything discounted and in stock, biggest discount first |
Tool | What it does |
| Price, discount, stock (exact count when low), every size/color variant, brand, rating, key facts |
| Customer reviews and questions with star breakdown and the shop's answers |
Tool | What it does |
| FAQ, terms, about and contact pages as text: delivery (outside Bandar Abbas Post Pishtaz 7-10 working days; Bandar Abbas courier, next day before 13:00), returns, wallet, branches |
| Skin and hair care guides and comparisons, newest first |
| One guide as plain text, with the products and categories it links to |
How it works
AI agent (Claude, Cursor, Copilot, ...)
│
│ MCP over stdio
▼
asalbanoo-mcp (runs on your machine)
│
│ HTTPS
└──────▶ asalbanooshop.com listing pages, quick-view fragments, WordPress RESTasalbanoo-mcp runs locally and calls the same public pages and endpoints the asalbanooshop.com website uses.
There's no hosted server in between, no API key, and nothing about you is sent anywhere else.
The shop has no public product API: prices come from listing cards, the product quick view and the site's live search, so the server parses that HTML with the Python standard library. Requests go out through a Chrome-impersonating client, at most 2 at a time with a little jitter. It solves the site's small cookie challenge (HTTP 418) automatically, retries timeouts, dropped connections, 429 and 5xx up to twice, and keeps the category and brand lists for an hour. It only reads.
Good to know
Prices are in Toman.
final_priceis what you pay,priceis before discount,discount_pctis a whole percent. The site's structured data is in Rial; the server doesn't use it for prices.Images: every product has
image(absolute, percent-encoded https URL);ab_productalso hasimages(gallery). To download one yourself send a browserUser-Agent: plain python/httpx gets HTTP 403 from the site's WAF.Sizes and colors: a product with variants is listed at its cheapest variant (
final_price) up tomax_price, with the biggest variant discount asdiscount_pct;ab_productgives each variant's price, stock andmax_qty.Delivery: outside Bandar Abbas only by Post Pishtaz, 7-10 working days. In Bandar Abbas by courier, next day when ordered before 13:00, or pick up in the two branches. The shipping fee is shown only at checkout and is not published.
Stock:
in_stockmeans orderable online now;stock_statusshows the exact count when few are left ("فقط 2 عدد در انبار موجود است"). When nothing in stock matches,ab_searchaddsout_of_stock_matchesso a sold-out brand isn't mistaken for one the shop never carried.Ratings are 1-5,
nullwhen nobody has reviewed the product yet. Review dates are Jalali (for example1405-07-13).Persian queries match best (
شامپو,ضد آفتاب), but English brand names work too (vichy,la roche). There is no separate autocomplete tool:ab_searchcovers the site's header live search.Search also matches descriptions, so check titles;
ab_find_cheapestfilters on titles for you.Privacy: review authors' contact details are never extracted or returned.
Rate limits: none seen at about one request per second. The site's
robots.txtdisallows the listing query parameters for crawlers, so please keep request rates low.What it does not do: no login, cart, checkout, coupons, wallet, wishlist, posted reviews or contact forms; no shipping fee (not published); no other shops.
FAQ
Asal Banoo doesn't publish an official API for agents. asalbanoo-mcp is an unofficial MCP server that reads the
public pages and endpoints of asalbanooshop.com and exposes them as 12 read-only tools.
No, and that's deliberate. It has no login and never touches the cart, checkout, wallet, wishlist or review endpoints. The agent finds the best option; you buy it on asalbanooshop.com.
The site's search also matches product descriptions, so ab_find_cheapest keeps only in-stock items whose title
contains every word of your query (match_all_words: false turns that off). It scans the 150 cheapest in-stock
results by default; complete: false in the reply means more lie past that, so raise scan (up to 300).
Install the server once (see Quick start), then ask in plain language, in Persian or English. In Claude Code
the install is claude mcp add asalbanoo -- uvx asalbanoo-mcp.
Toman. The site's structured data uses Rial, but the server reads the Toman prices shown on the pages.
It is unofficial and free (MIT). It is read-only, needs no account or API key, and runs on your machine with no hosted server in between.
The site answers new visitors with a small cookie challenge (HTTP 418); the server solves it automatically and
retries timeouts, dropped connections, 429 and 5xx up to twice. Requests use a Chrome TLS and header profile. If the
site serves a browser check instead, install asalbanoo-mcp[browser] and run patchright install chromium; the server
then clears it in a headless browser. If it still fails, check your internet connection. System proxy variables are
ignored on purpose; set ASALBANOO_MCP_PROXY if you need a proxy.
Use the full path to uvx (where uvx on Windows, which uvx on macOS/Linux) as command.
npx @modelcontextprotocol/inspector uvx asalbanoo-mcpConfiguration
Variable | Default | Meaning |
| unset | Optional HTTP proxy URL for asalbanooshop.com requests, e.g. |
فارسی: سرور MCP عسل بانو
asalbanoo-mcp یک سرور MCP غیررسمی برای فروشگاه اینترنتی عسل بانو (asalbanooshop.com) است؛ فروشگاه ایرانی محصولات مراقبت از پوست، مراقبت از مو، آرایشی و عطر. این سرور به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد در عسل بانو جستجو کند، ارزان‌ترین محصول موجود را پیدا کند، قیمت حجم‌ها و رنگ‌های مختلف را مقایسه کند، نظرات و پاسخ مشاوران را بخواند و تخفیف‌های روز را ببیند.
چه کارهایی می‌کند
جستجوی محصول به فارسی یا انگلیسی، مثلاً شامپو، ضد آفتاب، سرم، کرم مرطوب‌کننده یا برند (مثل vichy).
ارزان‌ترین محصول موجود با قیمت، تخفیف و موجودی.
مرور دسته‌ها و برندها با فیلتر حجم، نوع پوست و مو و بازه قیمت.
جزئیات محصول: قیمت هر حجم و رنگ، موجودی، ویژگی‌ها، نظرات خریداران و پاسخ فروشگاه.
تخفیف‌های روز به ترتیب بیشترین تخفیف.
مقالات و راهنماها: مراقبت از پوست و مو، مقایسه محصولات، شرایط ارسال و بازگشت کالا.
نکته‌ها
فقط خواندنی است: وارد حساب نمی‌شود، سبد خرید نمی‌سازد، سفارش ثبت نمی‌کند و نظر نمی‌فرستد. خرید را خودتان در سایت انجام می‌دهید.
قیمت‌ها به تومان است.
هزینه ارسال در سایت منتشر نشده و فقط هنگام پرداخت نمایش داده می‌شود.
کلید API لازم نیست و روی سیستم خود شما اجرا می‌شود و به هیچ سرور واسطی داده نمی‌فرستد.
نصب (اول uv را نصب کنید). در Claude Code:
claude mcp add asalbanoo -- uvx asalbanoo-mcpدر Claude Desktop، Cursor و بقیه برنامه‌ها همان تنظیم بخش Quick start را بگذارید.
نمونه پرسش‌ها
«ارزان‌ترین شامپو ضد شوره بین ۱ تا ۲ میلیون تومان کدام است و نظر خریداران درباره‌اش چیست؟»
«تخفیف‌های امروز عسل بانو روی ضد آفتاب چیست؟»
«ضد آفتاب پوست چرب موجود در عسل بانو چند است؟»
برای جستجو کافی است محصول یا برند را به فارسی یا انگلیسی بنویسید، مثلاً «ضد آفتاب» یا «vichy».
Development
git clone https://github.com/sepehr071/asalbanoo-mcp && cd asalbanoo-mcp
uv sync
uv run ruff check . && uv run ruff format --check .
uv run python -m pytest -q # offline, against recorded responses
uv run python -m pytest -m live -q # real asalbanooshop.com
uv buildTools live in src/asalbanoo_mcp/catalog.py, product.py and content.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 site 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.
Related servers
iran-mcp: catalog of all Iranian-service MCP servers
Khanoumi MCP server for cosmetics and skin care prices and shades
Shopino MCP server for fashion across thousands of Iranian shops
Banimode MCP server for fashion prices and sizes on Banimode
Digikala MCP server for products and prices on Digikala
Torob MCP server for comparing prices across Iranian shops
If this saves you clicks, a star helps others find it.
Disclaimer
Unofficial and not affiliated with or endorsed by Asal Banoo. It is read-only and uses the public pages and endpoints of the asalbanooshop.com website, which can change without notice. Please keep request rates reasonable.
Author
Built and maintained by Sepehr Radmard (سپهر رادمرد). Connect on LinkedIn or follow @sepehr071 on GitHub for more MCP servers for Iranian websites, all listed in iran-mcp. If this saves you time, a star on the repo helps other people find it.
License
Available Tools
12 toolsab_blog_postRead a blog postARead-onlyIdempotent
Read one blog post as plain text, plus the products and categories it links to.
Use after ab_blog_posts to answer care questions from the shop's own guides. Linked products can be looked up with ab_search (by name) and categories browsed with ab_browse (slug).
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post id from ab_blog_posts, e.g. 791485. | |
| max_chars | No | Cut the text after this many characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety and idempotency are covered. The description adds that output is plain text with linked products/categories, which is meaningful behavioral context. However with no output schema, more detail on return structure and the truncation behavior would help.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus a routing sentence, front-loaded with the core operation. Every clause earns its place by pointing to the source tool and follow-up tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param read tool with full schema coverage and rich annotations, the description covers purpose, sequencing, and how to use the linked data. It does not explain the maximum text length or truncation behavior beyond the schema, but the overall picture is complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both post_id (source and example) and max_chars (truncation semantics, default and range) are fully documented in the schema. The description adds no format or syntax detail beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) and resource (one blog post), plus its scope: plain text with linked products and categories. It also references the sibling ab_blog_posts as the source of post ids. It is clear, though it doesn't explicitly contrast against other read tools like ab_product.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the sequencing context: use after ab_blog_posts to answer care questions. It names the right follow-up tools for the linked data (ab_search by name, ab_browse by slug). No explicit when-not-to-use is given, but the workflow guidance is concrete and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_blog_postsBlog posts and care guidesARead-onlyIdempotent
List Asal Banoo blog posts (skin and hair care guides, routines, "X vs Y" comparisons), newest first.
Use for advice questions ("best moisturizer for oily skin", "Vichy or Clinique?"): find a matching post, then read it with ab_blog_post.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1, newest first. | |
| limit | No | Posts per page. | |
| query | No | Optional keyword, e.g. 'ضد آفتاب' or 'پوست چرب'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world behavior, so the safety profile is covered. The description adds the newest-first ordering and the list-then-read pattern, which is useful, but says nothing about pagination limits (100 pages, 30 max per page) or the shape of returned post objects. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler: the first defines the resource and ordering, the second defines when to use it and the follow-up tool. Front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with full schema coverage and rich annotations, the description covers purpose, ordering, and the list-then-read workflow. It does not describe return payload or pagination behavior, but no output schema exists and those gaps are minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents page, limit, and query with constraints and an example. The description mentions 'newest first' which reinforces the ordering of page, but adds no further syntax or format detail. Baseline 3 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (Asal Banoo blog posts), enumerates the content types covered (care guides, routines, comparisons), and specifies ordering (newest first). An agent can distinguish this listing tool from the singular ab_blog_post reader without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the use case (advice questions), gives concrete example queries, and prescribes a two-step workflow: find a matching post here, then read it with ab_blog_post. That routing between the sibling tools is exactly what an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_brandsList brandsARead-onlyIdempotent
List brands (about 250) with slugs and product counts, biggest first.
Use to get the brand slug for ab_browse / ab_filters. The Latin slug usually matches better than Persian spellings ('vichy', 'la-roche-posay').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max brands, biggest first. | |
| query | No | Optional filter on the Persian name or Latin slug, e.g. 'graph' or 'ویشی'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real context beyond them: the ~250 total size, the biggest-first ordering, and the recommendation to match on Latin slugs rather than Persian spellings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what the tool returns and what it is for; every clause carries information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still names the returned fields (slug, product count) and the ordering, and the limit/query behavior lives in a fully documented schema. It stops short of describing pagination or whether the ~250 total is ever truncated by limit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the note that the Latin slug usually matches better than Persian spellings directly improves how the optional `query` filter should be constructed, beyond the schema's own examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List brands') and immediately qualifies the result set: ~250 entries, returned with slugs and product counts, ordered biggest first. An agent knows exactly what it gets and how it differs from a generic listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use to get the brand slug for ab_browse / ab_filters', which names the downstream siblings that consume this output. No when-not guidance (e.g. when ab_categories would be the better list tool), 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.
ab_browseBrowse a category or brandARead-onlyIdempotent
List products of a category or brand (or the whole shop) with sort, price range, stock and attribute filters.
Use for "cheapest shampoo for oily hair", "Graph brushes under 800,000 Toman". Pass a category slug (ab_categories), a brand slug (ab_brands), both, or neither; filters come from ab_filters. Details: ab_product; reviews: ab_reviews.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1. | |
| sort | No | Order of the listing. 'default' puts in-stock items first (relevance for a search). | default |
| brand | No | Brand slug from ab_brands, e.g. 'graph' or 'la-roche-posay'. | |
| limit | No | Products per page. | |
| filters | No | Attribute filters from ab_filters: attribute -> values (any of them matches), e.g. {'bulk': ['250-میلی-لیتر'], 'hair': ['چرب']}. | |
| category | No | Category slug from ab_categories, e.g. 'hair-shampoo' or 'sunscreen'. | |
| max_price | No | Maximum current price in Toman, e.g. 2000000. | |
| min_price | No | Minimum current price in Toman, e.g. 1000000. | |
| on_sale_only | No | Only discounted items. | |
| in_stock_only | No | Only items that can be ordered now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile thoroughly (readOnly, idempotent, openWorld, non-destructive), lowering the bar. The description adds useful behavioral context that listings default to in-stock-first ordering, but does not disclose pagination limits, how the maxProperties=5 filter cap behaves, or result-count semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in the first sentence, followed by examples and then sibling routing in a compact three-block layout. Slightly dense but every element (examples, slug provenance, routing) earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, all-optional browse tool with no output schema and rich annotations, the description covers purpose, examples, input provenance and sibling routing adequately. Minor gaps remain around pagination behavior and how multiple filters compose, but nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema by naming the upstream tools that supply valid category, brand and filter values. It does not explain how category+brand combine or how filters interact with the price range, so it does not reach a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List products of a category or brand') plus the scope of filters, and gives concrete query examples. It partially distinguishes itself by routing to ab_product and ab_reviews, but never explains how it differs from ab_search or ab_find_cheapest, even though the example 'cheapest shampoo for oily hair' overlaps heavily with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage examples and the key routing rule that slug inputs must come from ab_categories, ab_brands and ab_filters, which tells the agent the correct call sequence. It stops short of stating when to prefer ab_search or ab_find_cheapest instead, so the most important boundary for this tool 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.
ab_categoriesList categoriesARead-onlyIdempotent
List product categories (about 70) with slugs and counts.
Use to get a category slug for ab_browse / ab_filters. parent = parent category id (0 = top level); count includes out-of-stock products.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional filter on the Persian name or slug, e.g. 'شامپو' or 'sun'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful data semantics the annotations cannot convey: the list is ~70 entries and the count includes out-of-stock products. No pagination or ordering note, but the set is small enough that this matters little.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core sentence is front-loaded and dense with useful facts (verb, resource, scale, return fields), and the routing sentence follows immediately. The trailing 'parent'/count line is partially wasted because 'parent' maps to nothing in the schema, costing it a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only listing tool with no output schema and rich annotations, the description covers scope, purpose, return fields, and routing to consumers. The only blemish is the orphaned 'parent' reference, which is a minor documentation inconsistency rather than a missing capability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single 'query' parameter, so the baseline is 3. The description's parameter line instead describes 'parent = parent category id (0 = top level)', a parameter that does not exist in the schema, which is stale or mismatched text rather than added meaning; the 'count includes out-of-stock' note is the only real semantic addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with useful scope: 'List product categories (about 70) with slugs and counts.' The cardinality and the returned fields (slugs, counts) tell an agent exactly what it gets. It does not directly contrast itself with the close peer ab_brands, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to get a category slug for ab_browse / ab_filters' names the downstream tools and the reason to call this one, which is real routing guidance. It omits any when-not condition (e.g. when ab_brands or ab_search is the better choice), so it falls short of full alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_dealsCurrent dealsARead-onlyIdempotent
List discounted in-stock products, biggest discount first.
Use for "what's on sale" / "discounted sunscreens"; optionally one category slug from ab_categories. Ranks the first 300 deals: complete=false means more exist (see total).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max deals to return. | |
| category | No | Category slug from ab_categories, e.g. 'hair-shampoo' or 'sunscreen'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's value-add is the truncation behavior: ranking is limited to the first 300 deals and complete=false signals more exist, with total available. That is genuinely useful non-obvious behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses: what it lists and how it ranks, when to use it, and the pagination caveat. Leading sentence front-loads the essential behavior with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly surfaces the one return-value detail an agent needs (complete flag and total) that would otherwise be invisible. Filtering, ranking, and result-size behavior are all covered for a simple two-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents both parameters, including the category slug source (ab_categories) and the example slugs plus the limit bound. The description's category guidance therefore largely repeats structured data rather than adding new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List), resource (discounted in-stock products) and scope/ordering (biggest discount first), which separates it from siblings like ab_find_cheapest (cheapest) and ab_search (general query). An agent can pick this tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete user-intent triggers ("what's on sale" / "discounted sunscreens") and notes the category filter is optional and single-valued. It does not explicitly name a competing sibling or state when NOT to use it, which keeps it 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.
ab_filtersFilters of a category or brandARead-onlyIdempotent
List the attribute filters of a category or brand (volume, hair/skin type, gender, origin) with in-stock counts.
Use before ab_browse for a size or type: pass {attribute: [value, ...]} as its filters.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Brand slug from ab_brands, e.g. 'graph' or 'la-roche-posay'. | |
| category | No | Category slug from ab_categories, e.g. 'hair-shampoo' or 'sunscreen'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuine context beyond that: the response carries in-stock counts and the returned attributes are directly reusable as ab_browse filters. Pagination/rate-limit behavior is not mentioned, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first defines the resource and its output fields, the second front-loads the workflow directive. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must characterize the return, and it does so by naming the attribute dimensions and in-stock counts plus the filter format to reuse downstream. Minor gaps remain around overall response structure and any pagination, so not a full 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both brand and category slugs are fully documented in the schema (including source tools and patterns). The description adds the return-shape convention {attribute: [value, ...]} but no new parameter-level detail, matching the baseline 3 for schema-dominant definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (attribute filters of a category or brand), and enumerates the concrete attribute kinds returned (volume, hair/skin type, gender, origin) plus the in-stock counts. This lets an agent distinguish it from ab_categories/ab_brands (which list the taxonomies themselves) and from ab_browse (which consumes the filters).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool relative to a sibling: 'Use before ab_browse for a size or type,' and even shows the pass-through form {attribute: [value, ...]}. It does not clarify when to supply brand versus category, nor any exclusions, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_find_cheapestFind cheapest productARead-onlyIdempotent
Find the cheapest in-stock products for a keyword, one list sorted by price (Toman).
Use for the lowest price of X. Only titles containing every query word are kept by default
(the site search also matches descriptions). Check ab_product for the size you need.
complete=false means more in-stock matches lie past scanned: raise scan.
| Name | Required | Description | Default |
|---|---|---|---|
| scan | No | How many in-stock search results to scan, cheapest first. | |
| limit | No | Max offers to return. | |
| query | Yes | Product name or keyword, Persian or English, e.g. 'شامپو ضد شوره' or 'la roche posay'. | |
| match_all_words | No | Keep only titles that contain every word of the query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive. The description adds real behavioral context beyond them: default word-matching on titles only, that site search also matches descriptions, and crucially the meaning of complete=false and the need to raise 'scan' to reach more matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then usage and mechanics in short sentences. Slightly choppy line breaks and an unlabeled 'scanned' reference cost it a bit, but there is little wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully sketches the return shape (a price-sorted list) and the coverage signal (complete/scanned). It omits any mention of currency edge cases or empty-result behavior, but is otherwise sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining result ordering (price, in Toman) and the interplay between 'scanned' and complete=false, which the schema fields alone do not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Find the cheapest in-stock products for a keyword, one list sorted by price (Toman).' The scope (in-stock, price-sorted, single list) clearly separates it from a general search, but no sibling is named to make the distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('Use for the lowest price of X') and routes to an alternative ('Check ab_product for the size you need'). It stops short of stating when NOT to use it or naming ab_search as the general-purpose counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_productProduct detailsARead-onlyIdempotent
Get one product: price/discount (Toman), stock (exact count when low), every size/color variant with its own price and stock, brand, categories, rating, key facts (volume, expiry, skin/hair type, origin), image(s).
Use after ab_search / ab_browse when the user picks a product. Reviews: ab_reviews.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | Asal Banoo product id from ab_search / ab_browse, e.g. 6963. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds useful value by disclosing return detail, notably 'exact count when low' for stock, which is a non-obvious behavior. It doesn't discuss failure modes (e.g., invalid product_id) or formatting, but is strong enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: first front-loads the returned fields, second gives usage context and the review alternative. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A read-only, single-parameter lookup documented rich enough for an agent to call correctly; return fields are enumerated though no output schema exists. Minor gap: no mention of behaviour when the id doesn't exist, but the core is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: product_id is fully documented with source, type, range, and example. The description adds no parameter syntax details beyond referencing where to obtain the id, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get one product') and then enumerates precisely what is returned (price/discount, stock, variants, brand, rating, facts, images). Clearly distinguished from siblings, which are search/browse/review tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('after ab_search / ab_browse when the user picks a product') and routes related needs to a named sibling ('Reviews: ab_reviews'). This is a complete when-to-use and alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_reviewsProduct reviewsARead-onlyIdempotent
Read customers' reviews and questions about a product (newest first) with the shop's answers.
Use as a quality check, or for the shop's skin/hair advice (staff answer questions with a
recommended product). rating is null for a question; verified_buyer marks a confirmed purchase.
Dates are Jalali (1405-07-13). Texts are cut at 400 chars (ending …) unless full_text=true. count and star_counts
cover all reviews on the page; truncated=true means more than limit exist.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max reviews to return, newest first. | |
| full_text | No | Return full review and reply texts, not 400-char cuts. | |
| product_id | Yes | Asal Banoo product id from ab_search / ab_browse, e.g. 6963. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations: discloses 400-char truncation with the '…' marker and the full_text escape hatch, Jalali date format, rating=null meaning a question rather than a review, verified_buyer semantics, and the fact that count/star_counts cover the whole page while truncated=true signals more than `limit` exist. These are behavioral traits the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first clause and packs semantic details into compact parentheticals with no filler. It is dense and slightly telegraphic, but every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing the return shape — rating, verified_buyer, count, star_counts, truncated, and the truncation marker — which is close to complete. It omits error behavior for an invalid product_id and any pagination path beyond a single limit, both minor gaps for a read tool with strong annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), and the description adds genuine meaning on top of it: it ties full_text to the truncation rule and explains that the returned count/star_counts aggregates describe the page rather than the whole catalog. The exact limit semantics and product_id sourcing are largely left to the schema, which already documents them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reads customer reviews and questions for a given product, with the shop's replies, newest first. That distinguishes it from siblings like ab_product and ab_search, which cover product data and discovery rather than user-generated review content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete use cases — quality check, and extracting the shop's skin/hair advice from staff answers. It does not explicitly name an alternative tool or state when not to use it, but the stated contexts are clear enough to route an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_searchSearch productsARead-onlyIdempotent
Search products by keyword: price, discount, stock and rating of each match.
Use first for "price of X" / "do you have X". Matching is broad (title and description), so check titles. Cheapest match: ab_find_cheapest; a category or brand: ab_browse; one product's variants: ab_product. out_of_stock_matches counts sold-out matches when none is in stock.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1. | |
| sort | No | Order of the listing. 'default' puts in-stock items first (relevance for a search). | default |
| limit | No | Products per page. | |
| query | Yes | Product name or keyword, Persian or English, e.g. 'شامپو ضد شوره' or 'la roche posay'. | |
| max_price | No | Maximum current price in Toman, e.g. 2000000. | |
| min_price | No | Minimum current price in Toman, e.g. 1000000. | |
| in_stock_only | No | Only items that can be ordered now. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, non-destructive, so the safety profile needs no restating. The description adds genuine behavioral context beyond them: matching is broad and spans title and description (so titles must be inspected rather than trusted as exact hits), and out_of_stock_matches is only populated when nothing is in stock. A return-field caveat like that is exactly the value-add expected at this bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely dense with no filler: purpose first, then routing alternatives, then the one non-obvious return detail. Every clause carries information an agent would otherwise have to discover by trial.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partly compensates by naming the returned fields per match and the out_of_stock_matches counter. Combined with 100% schema coverage across 7 parameters, an agent has enough to invoke correctly; only the full response envelope (pagination fields, result array name) is left implicit, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (page, sort, limit, query, min_price, max_price, in_stock_only) is documented in-schema with units, defaults, and bounds. The description adds only the notion of keyword matching, not new parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Search products by keyword') and immediately names what each match returns (price, discount, stock, rating), so the agent knows both the action and the payload shape. It is clearly separable from ab_find_cheapest, ab_browse, and ab_product, all of which are named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('Use first for "price of X" / "do you have X"') plus three named alternatives with the exact condition that selects each: cheapest match → ab_find_cheapest, category/brand → ab_browse, one product's variants → ab_product. Routing is fully determined without opening other schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ab_shop_infoShop policies and FAQARead-onlyIdempotent
Read one of the shop's policy pages as plain text: FAQ as question/answer pairs, other pages as text.
Use for "how long does delivery take", "do you ship with Tipax", "can I return it", "where is the shop".
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | 'faq' (delivery times, shipping, originality, wallet, returns), 'terms' (cancellation, returns, delivery rules), 'about' (the shop, branches), 'contact' (phone, address, hours). | faq |
| full_text | No | Return the whole page text, not the first 8000 chars. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnly, idempotent, openWorld, non-destructive), so the description's added value is the disclosure that output shape varies by topic: FAQ comes back as Q/A pairs while other pages come back as text. That is genuine behavioral context beyond the annotations, though it says nothing about truncation or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, purpose front-loaded, and the example queries earn their place by directly aiding tool selection. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries some return-value burden and does so partially by describing the FAQ-vs-text output shapes; the topic semantics live in the schema. For a simple read-only lookup tool this is nearly complete, with only the missing truncation/default behavior as a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the topic enum with per-value meanings plus the full_text truncation note are all in the schema, so the schema does the heavy lifting. The description adds no syntax or format detail about the parameters themselves, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one of the shop's policy pages as plain text') and even specifies the return shape (FAQ as question/answer pairs, other pages as text). It is clearly distinct from the product/search-oriented siblings, but never names a sibling or explicitly contrasts scope, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger phrases ('how long does delivery take', 'do you ship with Tipax', 'can I return it', 'where is the shop') that map cleanly to the enum topics, which is strong context for routing. It does not name an alternative tool or state when NOT to use it (e.g. product questions should go to ab_search), so it falls short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.3.0- Changed
ab_blog_post4 fields changed- removed
Input schema / properties / max_chars / titleRemoved value: -"Max Chars" - removed
Input schema / properties / post_id / titleRemoved value: -"Post Id" - removed
Input schema / titleRemoved value: -"ab_blog_postArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_blog_postDictOutput", - "type": "object" -}New value: +null
- Changed
ab_blog_posts5 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / page / titleRemoved value: -"Page" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / titleRemoved value: -"ab_blog_postsArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_blog_postsDictOutput", - "type": "object" -}New value: +null
- Changed
ab_brands4 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / titleRemoved value: -"ab_brandsArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_brandsDictOutput", - "type": "object" -}New value: +null
- Changed
ab_browse13 fields changed- removed
Input schema / properties / brand / titleRemoved value: -"Brand" - removed
Input schema / properties / category / titleRemoved value: -"Category" - removed
Input schema / properties / filters / titleRemoved value: -"Filters" - removed
Input schema / properties / in_stock_only / titleRemoved value: -"In Stock Only" - changed
Input schema / properties / limit / defaultPrevious value: -24New value: +20 - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / max_price / titleRemoved value: -"Max Price" - removed
Input schema / properties / min_price / titleRemoved value: -"Min Price" - removed
Input schema / properties / on_sale_only / titleRemoved value: -"On Sale Only" - removed
Input schema / properties / page / titleRemoved value: -"Page" - removed
Input schema / properties / sort / titleRemoved value: -"Sort" - removed
Input schema / titleRemoved value: -"ab_browseArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_browseDictOutput", - "type": "object" -}New value: +null
- Changed
ab_categories3 fields changed- removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / titleRemoved value: -"ab_categoriesArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_categoriesDictOutput", - "type": "object" -}New value: +null
- Changed
ab_deals5 fields changed- removed
Input schema / properties / category / titleRemoved value: -"Category" - changed
Input schema / properties / limit / defaultPrevious value: -30New value: +20 - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / titleRemoved value: -"ab_dealsArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_dealsDictOutput", - "type": "object" -}New value: +null
- Changed
ab_filters4 fields changed- removed
Input schema / properties / brand / titleRemoved value: -"Brand" - removed
Input schema / properties / category / titleRemoved value: -"Category" - removed
Input schema / titleRemoved value: -"ab_filtersArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_filtersDictOutput", - "type": "object" -}New value: +null
- Changed
ab_find_cheapest6 fields changed- removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / match_all_words / titleRemoved value: -"Match All Words" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / scan / titleRemoved value: -"Scan" - removed
Input schema / titleRemoved value: -"ab_find_cheapestArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_find_cheapestDictOutput", - "type": "object" -}New value: +null
- Changed
ab_product3 fields changed- removed
Input schema / properties / product_id / titleRemoved value: -"Product Id" - removed
Input schema / titleRemoved value: -"ab_productArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_productDictOutput", - "type": "object" -}New value: +null
- Changed
ab_reviews5 fields changed- added
Input schema / properties / full_textAdded value: +{ + "default": false, + "description": "Return full review and reply texts, not 400-char cuts.", + "type": "boolean" +} - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / product_id / titleRemoved value: -"Product Id" - removed
Input schema / titleRemoved value: -"ab_reviewsArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_reviewsDictOutput", - "type": "object" -}New value: +null
- Changed
ab_search9 fields changed- removed
Input schema / properties / in_stock_only / titleRemoved value: -"In Stock Only" - removed
Input schema / properties / limit / titleRemoved value: -"Limit" - removed
Input schema / properties / max_price / titleRemoved value: -"Max Price" - removed
Input schema / properties / min_price / titleRemoved value: -"Min Price" - removed
Input schema / properties / page / titleRemoved value: -"Page" - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / sort / titleRemoved value: -"Sort" - removed
Input schema / titleRemoved value: -"ab_searchArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_searchDictOutput", - "type": "object" -}New value: +null
- Changed
ab_shop_info4 fields changed- added
Input schema / properties / full_textAdded value: +{ + "default": false, + "description": "Return the whole page text, not the first 8000 chars.", + "type": "boolean" +} - removed
Input schema / properties / topic / titleRemoved value: -"Topic" - removed
Input schema / titleRemoved value: -"ab_shop_infoArguments" - changed
Output schema / (root)Previous value: -{ - "additionalProperties": true, - "title": "ab_shop_infoDictOutput", - "type": "object" -}New value: +null
12 tool updates
v0.1.0- First observed
ab_blog_post - First observed
ab_blog_posts - First observed
ab_brands - First observed
ab_browse - First observed
ab_categories - First observed
ab_deals - First observed
ab_filters - First observed
ab_find_cheapest - First observed
ab_product - First observed
ab_reviews - First observed
ab_search - First observed
ab_shop_info
TDQS
Scored across 12 tools
The four product-discovery tools (ab_search, ab_browse, ab_find_cheapest, ab_deals) overlap in that they all return product lists, but descriptions explicitly disambiguate when to use each (keyword vs category/brand vs lowest price vs discounts) and cross-reference each other. Remaining tools (product detail, reviews, blog, policy pages, taxonomy lookups) have clearly distinct purposes.
Every tool uses the same 'ab_' prefix plus snake_case verb/noun naming (ab_search, ab_product, ab_blog_posts, ab_shop_info) with a predictable pattern throughout. No mixing of conventions or verb styles.
Twelve tools is well within the sweet spot and each one earns its place, covering distinct resource facets (search, browse, filters, taxonomy, deals, detail, reviews, content, policy). No redundancy or filler.
The read-only product-discovery and advice-surface is thorough: product lookup, variants, reviews, taxonomy, filters, deals, blog guides, and shop policies are all covered. Minor gaps exist (e.g. no direct comparison or cross-sell tool), but agents have solid workarounds for the stated purpose.
Maintenance
Related MCP Connectors
Public K-beauty catalog, product search, and latest-offers tools with canonical product facts.
Read-only fashion and beauty product search across popular online shops, any price, any language.
AI-powered commerce API for luxury skincare shopping. Enables AI agents to search products, browse collections, manage shopping carts, and generate checkout URLs for the Regenique Elegance Shopify store.
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to search beauty products from Korean catalogs (Olive Young, Daiso, e-commerce) and analyze personal skincare routines and ingredient compositions via BeauticsLab.-
- AlicenseAqualityAmaintenanceEnables AI agents to search Digikala's catalogue, compare every seller's offers and prices, review ~30 days of price history, read customer reviews and Q&A, and surface current deals, all through read-only tools.23743 PyPI36MIT
- AlicenseAqualityAmaintenanceEnables AI agents to search Khanoumi's cosmetics, skin and hair care and perfume catalog, compare prices, shades, stock and reviews, and find daily deals. It also surfaces store info such as packaging, shipping and return fees, all read-only with no login or ordering.12410 PyPI2MIT
- AlicenseAqualityAmaintenanceEnables AI agents to search a catalog of roughly 960,000 fashion products across about 10,000 Iranian online and Instagram shops, comparing prices and discounts, checking per-color and per-size stock, browsing categories and curated listings, and finding similar items at other shops. It also lets agents assess shop trust signals such as ratings and buyer surveys, surface flash sales and discount codes, and read blog style guides, all read-only with no login or ordering.14428 PyPI2MIT