Skip to main content
Glama

💄 khanoumi-mcp

Let your AI agent shop for cosmetics and skin care on Khanoumi. Search makeup, skin and hair care and perfume, compare real prices and shades, filter by skin type, read reviews and catch today's pink-box deals, 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

Khanoumi lists about 67,000 beauty products from 3,200 brands. A search for "sunscreen" mixes sponsored items, out-of-stock products and shades with different prices, and the fees only show up at checkout. Finding the cheapest one you can actually order, and what it costs delivered, means a lot of clicking. An agent with khanoumi-mcp does that in seconds:

You: Cheapest Cinere sunscreen I can order now, delivered in Tehran?

Agent: calls kh_find_cheapest(query="ضد آفتاب سینره") → kh_store_info(topic="delivery")

Total

Product

Price

924,000

کرم ضد آفتاب بی رنگ با SPF45 مناسب آقایان

785,000 (25% off)

926,500

کرم ضد آفتاب بی رنگ Oil Free SPF50 مناسب پوست چرب

787,500 (25% off)

964,000

ضد آفتاب رنگی +SPF60 مات کننده پوست چرب (2 shades)

825,000 (25% off)

Totals include 20,000 packaging and the 119,000 Tehran courier fee. The SPF45 for men is cheapest; if you have oily skin the Oil Free SPF50 costs only 2,500 more. Want me to check which tinted shade is in stock with kh_product?

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

Related MCP server: letu-mcp

What it can do

  • 🔎 Search products by name in Persian or English, with price, discount and stock, sponsored items removed

  • 💸 Find the cheapest in-stock match for a keyword, optionally inside one category

  • 🗂️ Browse any category, brand or campaign sorted by price, popularity or date, with price range and filters

  • 🧴 Filter by skin type, hair type, free-from (paraben, sulfate), key ingredients, color and brand

  • 💋 Read full product details: every shade or size with its own price and stock, sellers, gold price breakdown

  • 💬 Check reviews, similar products and the routine products the shop pairs with an item

  • ⚡ Catch deals: the daily pink box with its countdown, featured rows and the current public discount code

  • 🚚 Know the fees: packaging, shipping, returns and payment rules from the official FAQ, plus beauty guides from the blog

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

Quick start

You need uv. No API key or account.

claude mcp add khanoumi -- uvx khanoumi-mcp

Settings → Developer → Edit Config, then add:

{
  "mcpServers": {
    "khanoumi": { "command": "uvx", "args": ["khanoumi-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": {
    "khanoumi": { "type": "stdio", "command": "uvx", "args": ["khanoumi-mcp"] }
  }
}

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

Then just ask:

  • "Cheapest moisturizer for oily skin under 500,000 Toman, and what do buyers say about it?"

  • "Which shades of the Golden Rose Sheer Bright lipstick are in stock, and do they cost the same?"

  • "What's in today's pink box, and is there a discount code?"

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

How it works

  AI agent  (Claude, Cursor, Copilot, ...)
      │
      │  MCP over stdio
      ▼
  khanoumi-mcp  (runs on your machine)
      │
      │  HTTPS
      └──────▶  www.khanoumi.com   JSON API, FAQ page, blog

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

Tools

Tool

What it does

kh_search

Search by keyword: price, discount, stock, plus matching categories and brands

kh_find_cheapest

Cheapest in-stock matches for a keyword, one flat list sorted by payable price

kh_browse

A category, brand or campaign tag sorted by price / popularity / date, with price range and filters

kh_filters

Sub-categories, brands, colors, skin / hair type and ingredient filters, price range and stock counts of a listing

kh_categories

Category tree with ids, paths and product counts

kh_brands

Find brands and their slugs

kh_deals

Today's pink box and featured deals, biggest discount first, with the countdown and the public discount code

Tool

What it does

kh_product

Price, discount, every shade / size / seller with its own price and stock, rating, attributes, description

kh_reviews

Customer comments, newest first, with verified-buyer flag and photos

kh_similar

Alternatives to a product, or the products the shop pairs with it

Tool

What it does

kh_store_info

Packaging cost, shipping fees and times, returns, payment and guarantee rules from the FAQ

kh_blog_search

Buying guides, routines and ingredient explainers from the Khanoumi magazine

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. final_price is what you pay, price is before discount, discount_pct is a whole percent.

  • Shades can cost different amounts. A product's final_price is its cheapest shade or size; kh_product lists each variant with its own price, stock (in_stock) and maximum quantity per order.

  • Order cost: items + 20,000 packaging + shipping (119,000 Tehran / Alborz courier, 113,000 post to other provinces on 2026-10-06; free for items tagged "ارسال رایگان", shown as FreeShipping in a product's badges). kh_store_info reads the current fees. The exact quote per address needs a login, so it isn't available here.

  • Sponsored items are removed from search and listings, and total counts only real matches. Pages follow on from each other without gaps or repeats, which the site's own pager doesn't manage when ads are on the page.

  • Ratings are 0–5, null when nobody has rated the product yet. Review comments carry no stars.

  • Persian queries match best (کرم آبرسان, رژ لب), but English brand names work too (cerave, golden rose).

FAQ

No, and that's deliberate. It has no login and never touches the cart, order, payment, wishlist, notify-me or review endpoints. The agent finds the best option; you buy it on khanoumi.com.

It keeps only items you can order now whose Persian or English title or brand contains every word of your query (match_all_words: false turns that off). It scans the first 300 results, cheapest first; complete: false in the reply means more matches lie past that, so raise scan (up to 900) or narrow with category_id. kh_search shows everything.

Call kh_filters for the category (for example category_id: 145, moisturizers) and pass the keys you want to kh_browse, e.g. facets: ["facetKey.skin-type:oily"]. Several facets must all match; several brands or colors match any.

The server retries a dropped connection once. If it still fails, check your internet connection. System proxy variables are ignored on purpose; set KHANOUMI_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 khanoumi-mcp

Configuration

Variable

Default

Meaning

KHANOUMI_MCP_PROXY

unset

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

فارسی

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

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

  • قیمت‌ها به تومان است و محصولات تبلیغاتی (اسپانسری) از نتایج حذف می‌شوند.

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

نصب در Claude Code:

claude mcp add khanoumi -- uvx khanoumi-mcp

بعد بپرسید: «ارزان‌ترین کرم آبرسان مناسب پوست چرب زیر ۵۰۰ هزار تومان کدام است و خریداران درباره‌اش چه می‌گویند؟»

Development

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

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

Disclaimer

Unofficial and not affiliated with or endorsed by Khanoumi. It uses the public endpoints of the khanoumi.com website, which can change without notice. Please keep request rates reasonable.

License

MIT

Available Tools

12 tools
kh_brandsFind brandsA
Read-onlyIdempotent

Find brands by name (about 3,200 brands) with their slugs.

Use to get the brand slug for kh_browse / kh_filters brands, e.g. 'simple', 'cerave'.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1.
limitNoBrands per page.
queryNoBrand name, Persian or English, e.g. 'سیمپل' or 'cerave'. Empty = all, A-Z.

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 declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely new context beyond them: the corpus size (~3,200 brands), the nature of the returned value (slugs), and the examples of valid inputs.

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, zero filler, with the purpose and scale front-loaded and the usage/routing instruction second. 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?

An output schema exists, so return-value explanation is unnecessary, and the description covers purpose, scale, and downstream use. It stops short of noting pagination behavior, but the schema already carries defaults and bounds.

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 page/limit/query are already fully documented in the schema (including Persian/English examples and 'empty = all, A-Z'). The description adds no parameter detail beyond the schema, so the baseline of 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+resource ('Find brands by name') and the key return artifact ('with their slugs'), plus dataset scale (~3,200 brands). It also routes the agent to the siblings that consume the output, so it is distinguishable from kh_search/kh_categories 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?

Explicitly says when to use it: to obtain the brand slug for kh_browse / kh_filters `brands`, with concrete examples ('simple', 'cerave'). No explicit when-not or exclusion clause, so it is clear context rather than full routing rules.

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

kh_browseBrowse a category, brand or tagA
Read-onlyIdempotent

List the products of a category, brand(s) or campaign tag with sorting, price range and filters.

Use for "cheapest CeraVe moisturizer", "sunscreens for oily skin under 800,000 Toman", "newest Golden Rose lipsticks", "everything in today's pink box". Pass at least one of category_id (kh_categories), brands (kh_brands) or tag (kh_deals). Filter ids (brands, colors, skin / hair type, free-from, ingredient facets) and the price range come from kh_filters. There is no rating or discount sort: check candidates with kh_product / kh_reviews. Details: kh_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoCollection / campaign tag slug from kh_deals (the part after /tags/), e.g. 'festival-js' (pink box).
pageNoPage number, from 1.
sortNoOrder: popular (the site's default, most visited), cheapest / most_expensive (payable price), newest.popular
limitNoProducts per page (sponsored items are left out).
queryNoOptional keyword inside the listing.
brandsNoBrand slugs from kh_brands / kh_filters (OR), e.g. ['simple', 'cerave'].
colorsNoColor ids from kh_filters (OR), e.g. ['3'] (red).
facetsNoAttribute filter keys from kh_filters, all must match (AND), e.g. ['facetKey.skin-type:oily'].
max_priceNoMaximum payable price in Toman, e.g. 1500000.
min_priceNoMinimum payable price in Toman, e.g. 500000.
category_idNoCategory id from kh_categories or kh_search, e.g. 145 (moisturizers).
in_stock_onlyNoOnly products that can be ordered now.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/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, openWorld, non-destructive), so the description earns credit for adding real behavioral limits: no rating or discount sort exists, and results should be verified via kh_product / kh_reviews. It stops short of describing pagination or result-cap behavior, which a browse tool would benefit from.

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 purpose followed by example queries, then constraints and pointers to sibling tools. Dense but every sentence carries information; the quoted example phrasings are slightly verbose but useful for query matching.

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, and it instead covers the things an agent can't infer: the at-least-one-selector rule, filter provenance, sorting limits, and where to go for verification. Nothing essential is missing for a 12-param read tool.

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 a genuine constraint not expressed in the schema: at least one of category_id, brands or tag must be supplied even though none are marked required. It also clarifies where each filter id must be sourced (kh_filters, kh_deals, kh_categories).

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?

Opens with a specific verb+resource+scope: 'List the products of a category, brand(s) or campaign tag with sorting, price range and filters.' The concrete example queries ('cheapest CeraVe moisturizer', 'sunscreens for oily skin under 800,000 Toman') make the tool's domain unmistakable against siblings like kh_search or kh_product.

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?

Explicitly states the invocation constraint ('Pass at least one of category_id, brands or tag'), names the upstream lookup tools (kh_categories, kh_brands, kh_deals, kh_filters), and rules out alternatives by noting there is no rating or discount sort and directing candidates to kh_product / kh_reviews.

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

kh_categoriesList categoriesA
Read-onlyIdempotent

List Khanoumi's category tree with ids, URL paths and product counts.

Use to get a category_id for kh_browse / kh_filters / kh_find_cheapest. Without a query only levels up to max_level are listed; with a query every level is searched. kh_search also returns the categories matching a keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional filter on the Persian name or English slug, any level, e.g. 'ضد آفتاب' or 'shampoo'.
max_levelNoDeepest level to list when no query is given (1 = top level).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/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, openWorld), so the bar is lower. The description adds real operational context beyond that: without a query only levels up to max_level are returned, while with a query every level is searched, which materially affects 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?

Three tight sentences with no filler; the primary purpose and the routing cue come first, followed by the query/no-query distinction and the alternative tool.

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 and annotations carry the safety profile, so the description need not explain return shapes. What remains — purpose, routing to sibling tools, and query-mode behavior — is fully covered.

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. The description goes further by explaining how the two parameters interact (level truncation only applies in the no-query case; a query searches all levels), which is not stated in the schema itself.

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 (list) and resource (Khanoumi's category tree) and enumerates what it returns: ids, URL paths, product counts. This is clearly distinguishable from siblings like kh_search or kh_browse, which the description positions it against.

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?

Explicitly states the reason to call it (to obtain a category_id for kh_browse / kh_filters / kh_find_cheapest) and names kh_search as the alternative that also surfaces matching categories. It also clarifies the query vs no-query behavior, so an agent knows which mode fits its situation.

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

kh_dealsCurrent deals and discount codesA
Read-onlyIdempotent

List today's featured deals from the Khanoumi home page (the daily pink box "جعبه صورتی" and the other product rows), biggest discount first, plus the public discount code of the current pop-up campaign.

Use for "what's on sale" / "best discounts today". pink_box_ends_in_seconds is the time left in the daily deal box. Each section's tag lists all of its products with kh_browse(tag=...). The voucher code is entered at checkout; its conditions are in voucher.text.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax deals to return.

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 declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds meaningful behavior beyond that: sort order, that pink_box_ends_in_seconds is a countdown, that each section's tag feeds kh_browse, and that the voucher is redeemed at checkout with its terms in voucher.text.

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 usage, then output-field hints; every sentence carries information. It is dense and slightly scattershot in mixing output semantics with usage guidance, but there is 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?

An output schema exists so return shape need not be explained, yet the description still clarifies the non-obvious output fields (pink_box_ends_in_seconds, section tag, voucher.text). Combined with annotations and 100% param coverage, an agent has everything needed to call and interpret it.

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

Parameters3/5

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

Schema description coverage is 100% with a single documented 'limit' parameter (default 30, max 100). The description adds no further semantics about limit, so the baseline 3 applies when the schema carries the whole burden.

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 featured deals from the Khanoumi home page'), covers both the daily pink box and the pop-up campaign voucher, and is clearly distinct from siblings like kh_search or kh_browse. The ordering guarantee ('biggest discount first') further narrows what this tool is.

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 use trigger ('Use for "what's on sale" / "best discounts today"') and routes product-level drill-down to the sibling kh_browse(tag=...). It does not state when to prefer kh_search or kh_find_cheapest over this tool, so the exclusion side is incomplete.

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

kh_filtersFilters of a listingA
Read-onlyIdempotent

List the filters of a category, brand, tag or search: sub-categories, brands, colors and attribute facets (skin type, hair type, free-from, ingredients, gender, ...) with ids and product counts, plus price range and stock counts.

Use before kh_browse: pass brand slugs as brands, color ids as colors, facet keys as facets. Brands are cut to the 40 biggest and each attribute group to 25 values (omitted says how many more); ask for one group to see it all. Prices in Toman. price_range is on the list price before discount (min 0 = out-of-stock items), so its max can be above the dearest payable price.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoCollection / campaign tag slug from kh_deals (the part after /tags/), e.g. 'festival-js' (pink box).
groupNoReturn only attribute groups whose name contains this, in full, e.g. 'نوع پوست' (skin type).
queryNoKeyword, alone or inside the listing.
brandsNoBrand slugs from kh_brands / kh_filters (OR), e.g. ['simple', 'cerave'].
category_idNoCategory id from kh_categories or kh_search, e.g. 145 (moisturizers).

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 cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description goes well beyond them by disclosing truncation behavior (brands cut to the 40 biggest, attribute groups to 25 values, with an `omitted` count) and non-obvious data semantics (prices in Toman, price_range based on list price before discount, min 0 meaning out-of-stock). These are exactly the quirks an agent would otherwise misread.

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 purpose, then progressively adds chaining guidance and gotchas in three tight paragraphs. The first sentence is dense with a long parenthetical enumerating facet types, which is slightly heavier than needed, but no sentence is 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?

An output schema exists, so return values need not be spelled out, yet the description still explains the two most confusing output aspects (truncation with `omitted`, and the list-price basis of price_range). Combined with the annotations, an agent has everything needed to call it 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% and each parameter already carries a description with provenance (tag from kh_deals, brands from kh_brands/kh_filters, category_id from kh_categories), so the schema does the heavy lifting. The description's 'pass brand slugs as brands' restates the same mapping, adding little parameter-level meaning beyond the 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 specific verb and resource ('List the filters of a category, brand, tag or search') and enumerates exactly what comes back: sub-categories, brands, colors, attribute facets, ids, product counts, price range and stock counts. It is clearly distinguishable from siblings like kh_search and kh_browse 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?

Explicitly frames the tool as a precursor: 'Use before kh_browse' and tells the agent how to feed the result forward ('pass brand slugs as brands, color ids as colors, facet keys as facets'). This is a concrete when-and-how-to-use directive rather than an implied one.

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

kh_find_cheapestFind cheapest productA
Read-onlyIdempotent

Find the cheapest in-stock products for a keyword, one flat list sorted by payable price (Toman).

Use when the user wants the lowest price for X. The site sorts in-stock matches by payable price; this drops sponsored items and, by default, loose matches whose title lacks a query word. Narrow with category_id (kh_categories / kh_search). final_price is the cheapest shade: check the chosen shade with kh_product. complete=false: matches go on past scanned, raise scan.

ParametersJSON Schema
NameRequiredDescriptionDefault
scanNoMax search results to scan, cheapest first, 300 per request.
limitNoMax offers to return.
queryYesProduct name or keyword, Persian or English, e.g. 'کرم مرطوب کننده' or 'cerave'.
category_idNoCategory id from kh_categories or kh_search, e.g. 145 (moisturizers).
match_all_wordsNoKeep only products whose Persian or English title or brand contains every word of the query.

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/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds genuine operational behavior not in the annotations: sponsored items are dropped, loose title matches are excluded by default, results are sorted by payable price, and complete=false signals that matches continue past `scanned` and scan should be raised.

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 in the first sentence and then layers usage, filtering, and pagination notes compactly. The terse fragments ('complete=false: matches go on past `scanned`, raise scan') are dense but slightly clipped, costing a little polish rather than content.

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 needn't be explained, and the description covers the non-obvious behavioral quirks (sponsored-filtering, match_all_words default, scan/complete pagination loop). Cross-references to kh_product and kh_categories round out what an agent needs to act.

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 would be 3, but the description earns extra credit by clarifying scan semantics (matches continue past the scanned set on complete=false), the default match_all_words filtering behavior, and that final_price is the cheapest shade to verify with kh_product.

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 (find), resource (cheapest in-stock products), and scope (one flat list sorted by payable price in Toman). It implicitly separates itself from the broader kh_search by emphasizing 'cheapest' and dropping sponsored items, so an agent can route correctly 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 Guidelines4/5

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

'Use when the user wants the lowest price for X' gives a clear triggering intent, and it points to kh_categories/kh_search for narrowing via category_id. It does not state when NOT to use this tool or explicitly contrast alternatives like kh_search for general browsing, so it stops 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.

kh_productProduct detailsA
Read-onlyIdempotent

Get one product's full record: price and discount (Toman), every shade / size / seller variant with its own price, stock and max quantity, rating, brand, category path, attributes (skin / hair type, key ingredients, texture, country) and the description.

Use after kh_search / kh_browse when the user picks a product, or to check that the shade they want is in stock and what it costs. Reviews: kh_reviews. Alternatives: kh_similar. Fees for the order total: kh_store_info.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYesProduct slug from kh_search / kh_browse (e.g. 'golden-rose-sheer-bright-lipstick-112222') or the numeric product id (e.g. '112222').

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 by structured data. The description adds depth about the record's granularity (per-shade/size/seller variant pricing and max quantity), but says nothing about authentication needs, rate limits, or behavior on a missing/ambiguous slug. Adequate but not rich beyond annotations.

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 payload contents, then usage, then sibling routing — a sensible order. The field enumeration is long, and since an output schema exists it partly restates the return shape, but every listed field is genuinely useful for deciding whether to call this tool.

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 annotations covering safety, a 100%-documented single parameter, and an output schema handling return values, the description only needs to establish purpose and routing — which it does. The remaining gap is minor: no guidance on failure modes (invalid slug, product not found).

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 parameter is fully documented there (slug pattern plus numeric id example, including the sibling tools it comes from). The tool description adds no syntax or format detail beyond that, so 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?

Specific verb ('Get one product's full record') plus an enumerated content list: price/discount in Toman, per-variant price/stock/max quantity, rating, brand, category path, attributes, description. This is clearly distinguishable from kh_search (list-level) and kh_reviews (review-level) 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 Guidelines5/5

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

Explicit trigger ('Use after kh_search / kh_browse when the user picks a product, or to check that the shade they want is in stock and what it costs') plus direct routing for adjacent needs: kh_reviews for reviews, kh_similar for alternatives, kh_store_info for order-total fees. Nothing 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.

kh_reviewsProduct reviewsA
Read-onlyIdempotent

Read customer comments on a product, newest first, with a verified-buyer flag and photos.

Use as a quality check before recommending a product. Comments carry no star rating: the product's average rating and rating count are in kh_product.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, from 1, newest first.
limitNoReviews per page.
productYesProduct slug from kh_search / kh_browse (e.g. 'golden-rose-sheer-bright-lipstick-112222') or the numeric product id (e.g. '112222').
with_photosNoOnly reviews that include customer photos.

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 declare readOnly/openWorld/idempotent, so the safety profile is covered. The description adds genuine behavioral context beyond them: default ordering (newest first) and the absence of star ratings, which saves the agent a wasted call expecting rating data.

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, zero waste: the core behavior first, the routing/usage note second. Nothing is repeated from the schema or annotations.

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

Completeness4/5

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

With an output schema present, return-value detail is not needed, and the description covers the key surprises (no ratings, photo filtering, ordering). Pagination behavior and the upper page bound are left to the schema, which is acceptable here.

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 page, limit, product format, and with_photos. The description adds the 'newest first' ordering note, but that is already implied by the page parameter description, so it is baseline territory.

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 ('Read customer comments on a product') plus distinguishing attributes: newest-first ordering, verified-buyer flag, photos. It also carves out what it is not (ratings live in kh_product), though it doesn't differentiate itself from the remaining ten 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?

Gives an explicit situational trigger ('Use as a quality check before recommending a product') and routes the agent to kh_product for ratings and rating counts, which is a real alternative-selection cue. It stops short of stating when-not-to-use it, but the context is clear.

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

kh_similarSimilar and complementary productsA
Read-onlyIdempotent

List alternatives to a product (about 20) or the products the shop pairs with it, with prices and stock.

Use when a product is out of stock or too expensive, or to build a routine / bundle around it. Complementary lists are empty for most products.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNosimilar = alternatives to this product; complementary = products the shop pairs with it (routine).similar
productYesProduct slug from kh_search / kh_browse (e.g. 'golden-rose-sheer-bright-lipstick-112222') or the numeric product id (e.g. '112222').
in_stock_onlyNoOnly products that can be ordered now.

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 a safe, idempotent, non-destructive read, so the bar is lower; the description still adds real behavioral value by disclosing the ~20-item result size and the important caveat that complementary lists are empty for most products. It does not mention pagination or ordering, which keeps it from 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.

Conciseness5/5

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

Three short sentences, front-loaded with the core action and modes followed by usage triggers. No redundant or filler text; every sentence maps to a distinct decision the agent needs to make.

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-value explanation is not needed, and the description still summarizes the payload (prices and stock). Usage conditions, both modes, and the empty-complementary edge case are all covered for a 3-parameter, 1-required 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%, including a documented enum for kind and the slug/id pattern for product, so the schema already carries parameter meaning. The description restates the kind semantics, adding no syntax or format detail beyond it; 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?

Specific verb and resource ('List alternatives to a product... or the products the shop pairs with it') with scope (~20 items) and payload (prices and stock) stated up front. The two modes are clearly distinguished, which separates it from generic siblings like kh_search and kh_find_cheapest.

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?

Explicit when-to-use triggers are given: out-of-stock, too expensive, or building a routine/bundle. It stops short of naming an alternative sibling (e.g. kh_find_cheapest) for the price-shopping case, so routing is strong but not fully closed.

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

kh_store_infoShipping, returns and store rulesA
Read-onlyIdempotent

Get Khanoumi's order rules: packaging cost, shipping fees and times, returns, payment and refunds, authenticity guarantee, pink-box rules, from the official FAQ.

Use for "how much is shipping", "can I return it", "how do I pay", and to compute the true cost of an order: sum(final_price x qty) + packaging_cost + shipping fee from the delivery answers (Tehran / Alborz courier vs post to other provinces; 0 when an item's badges include FreeShipping).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOnly questions or answers containing this, e.g. 'هزینه ارسال'.
topicNoFAQ section: delivery (fees, times), returns, payment, guarantee (authenticity, expiry), order, pink_box, tracking, order_edit, comments, gold, or all (about 80 answers, long: prefer a topic or a query).delivery

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, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds that answers come from the official FAQ and that delivery answers carry the courier/fee breakdown and FreeShipping badge logic, which is useful content context, but it does not mention e.g. result length limits or staleness beyond what the schema already notes.

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 resource and reserves the second paragraph for the when-to-use cases and the cost formula, which earns its place. Slightly weakened by the hard line-break mid-sentence and dense formula, but overall tight and purposeful.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description covers scope, trigger questions and the cost-computation usage. It is essentially complete for a two-parameter FAQ lookup; only minor behavioral detail (result size/staleness) is absent.

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 both the free-text query and the topic enum with its default. The description adds only marginal meaning (that delivery answers distinguish Tehran/Alborz courier from provincial post and can be zero with a FreeShipping badge), which is baseline-adequate but not compensating for any gap.

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 resource (Khanoumi's order rules: shipping, returns, payment, refunds, guarantee, pink-box) drawn from the official FAQ. An agent can immediately distinguish this from product/search siblings like kh_product or kh_search, which return item data rather than policy answers.

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 enumerates triggering questions ("how much is shipping", "can I return it", "how do I pay") and a concrete use case (computing true order cost from delivery answers). It stops short of naming when NOT to use it or routing to a specific sibling, 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedkh_blog_search
    • First observedkh_brands
    • First observedkh_browse
    • First observedkh_categories
    • First observedkh_deals
    • First observedkh_filters
    • First observedkh_find_cheapest
    • First observedkh_product
    • First observedkh_reviews
    • First observedkh_search
    • First observedkh_similar
    • First observedkh_store_info

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation4/5

kh_search, kh_find_cheapest and kh_browse all return product lists, so there is genuine functional overlap, but the descriptions explicitly delineate when to use each ('Use first for price of X', 'Use when the user wants the lowest price', 'Use for cheapest CeraVe moisturizer'). The remaining tools (categories, brands, filters, product, reviews, similar, deals, blog, store info) target clearly distinct resources. Overall the boundaries are well signposted, requiring only careful reading.

Naming Consistency4/5

Every tool uses the same kh_ prefix and snake_case, which is highly predictable. However, the verb style is mixed: some are actions (kh_search, kh_browse, kh_find_cheapest, kh_blog_search) while others are noun-only resources (kh_product, kh_reviews, kh_categories, kh_brands, kh_filters, kh_similar). This is a minor deviation from a single verb_noun pattern but stays readable and consistent in casing.

Tool Count5/5

12 tools is well within the sweet spot for an e-commerce product-discovery domain. Each tool maps to a distinct capability (search, browse, filters, taxonomy lookups, product detail, reviews, alternatives, deals, blog, store policy) and none feels redundant or padded.

Completeness4/5

The surface covers the full discovery lifecycle: keyword search, category/brand browsing, filter discovery, category and brand resolution, detailed product records, reviews, alternatives, daily deals, editorial guides and store policies. Transactional operations (cart, checkout, order placement) are absent, but the server reads as a discovery/information surface rather than a purchasing one, so coverage is close to complete with only minor gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to search beauty products from Korean catalogs (Olive Young, Daiso, e-commerce) and analyze personal skincare routines and ingredient compositions via BeauticsLab.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables LLM agents to search and retrieve live product data from L'Etoile (letu.ru), including honest price breakdowns with Club Card discounts separated, per-city delivery and store stock, ratings and reviews, and seller legal details, via plain HTTP without a browser.
    5
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables LLM agents to retrieve live, honestly-labelled product data from Gold Apple (goldapple.ru), including search with sorting and price windows, category listings, full product variants with guest and signed-in prices, ratings, reviews, and delivery options.
    6
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables 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.
    23
    1
    MIT