Skip to content

ir.cbest/lighting

by cbest.ir · remote · no sign-in to list tools · v1.0.0 · published by ir.cbest

Iranian lighting supplier directory: products, brands, and a bilingual Persian/English taxonomy.

Changes · 21 high finding

8 tools: 2 change things and 6 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http lighting https://www.cbest.ir/lighting/api/mcp

Findings

Matches of fixed checks, with the text they matched.

1 high
  • The description contains 1 hidden character: zero-width (U+200C).

    Matched text

    description: "...rase onto the canonical taxonomy — «داون<U+200C>لایت توکار», 'trimless plaster frame', '..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

8 tools

Changes things 2Claude Code: ask
  • classify_lighting_termMap any Persian or English lighting phrase onto the canonical taxonomy — «داون[U+200C]لایت توکار», 'trimless plaster frame', 'high bay'.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.

    Findings

    • High

      The description contains 1 hidden character: zero-width (U+200C).

      Matched text

      description: "...rase onto the canonical taxonomy — «داون<U+200C>لایت توکار», 'trimless plaster frame', '..."

      What this check looks for
    Description, as the server wrote itContains invisible characters, shown as [U+…]
    Map any Persian or English lighting phrase onto the canonical taxonomy — «داون[U+200C]لایت توکار», 'trimless plaster frame', 'high bay'. Backed by 522 learned type→category pairs plus rules measured at 95% agreement. Returns null for a phrase that names no category rather than guessing.
  • start_consultationTurn a described need into a link the person opens themselves, where an adviser builds a brief and matches it against suppliers' real stock.No findings

    Why it is in this group

    • The name "start_consultation" says "start": a word for a change.
    Description, as the server wrote it
    Turn a described need into a link the person opens themselves, where an adviser builds a brief and matches it against suppliers' real stock. This is how someone actually reaches a supplier: there are no contact details in this server, and this call does not contact anyone. It stores nothing and it REFUSES any personal data — no name, no number, no email. Describe the project, not the person.
Only reads 6Claude Code: allow
  • compare_brandsWhich suppliers cover a category, with counts, share, and per-facet data coverage.No findings

    Why it is in this group

    • The name "compare_brands" says "compare": a word for reading.
    Description, as the server wrote it
    Which suppliers cover a category, with counts, share, and per-facet data coverage. Coverage describes what each supplier's SOURCE stated, never product quality, and a one-supplier category says so rather than pretending to be a comparison.
  • get_brandOne supplier in full: what they make, the product families they run, and — the field worth the call — doesNotDo, a statement of what they genuinely do NOT make, computed from absen…No findings

    Why it is in this group

    • The name "get_brand" says "get": a word for reading.
    Description, as the server wrote it
    One supplier in full: what they make, the product families they run, and — the field worth the call — doesNotDo, a statement of what they genuinely do NOT make, computed from absence in their product list rather than inferred from their marketing.
  • get_productEvery field on file for one product, by the id search_products returns ('brand/product-slug'), including provenance: whether the fact came from the supplier's own website or from a…No findings

    Why it is in this group

    • The name "get_product" says "get": a word for reading.
    Description, as the server wrote it
    Every field on file for one product, by the id search_products returns ('brand/product-slug'), including provenance: whether the fact came from the supplier's own website or from a page of their PDF catalog, and when it was read.
  • list_brandsEvery supplier on file with what they cover, how complete their data is, and when it was last read.No findings

    Why it is in this group

    • The name "list_brands" says "list": a word for reading.
    Description, as the server wrote it
    Every supplier on file with what they cover, how complete their data is, and when it was last read. No contact details — see the server instructions.
  • list_categoriesThe 20 canonical categories with Persian and English names, product counts, and which suppliers are in each.No findings

    Why it is in this group

    • The name "list_categories" says "list": a word for reading.
    Description, as the server wrote it
    The 20 canonical categories with Persian and English names, product counts, and which suppliers are in each. Small enough to fetch once and reason over the whole market; flags categories that only one supplier covers.
  • search_productsSearch the catalog of real products stocked by the suppliers on file.No findings

    Why it is in this group

    • The name "search_products" says "search": a word for reading.
    Description, as the server wrote it
    Search the catalog of real products stocked by the suppliers on file. Accepts Persian or English. Returns normalized facets (mounting, indoor/outdoor, IP, colour temperature, and wattage/lumen where stated) plus what the query matched on. Colour temperature is returned but is NOT filterable: a fixture is usually sold in several, and the row carries the one its source printed. The response always reports what the filters excluded and why, split into 'not stated in our data' and 'did not match' — a product missing from a result is NEVER evidence that a supplier does not make it; use get_brand's doesNotDo for that.

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.0.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http lighting https://www.cbest.ir/lighting/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__lighting__search_products",
      "mcp__lighting__get_product",
      "mcp__lighting__list_categories",
      "mcp__lighting__list_brands",
      "mcp__lighting__get_brand",
      "mcp__lighting__compare_brands"
    ],
    "ask": [
      "mcp__lighting__classify_lighting_term",
      "mcp__lighting__start_consultation"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as lighting. Review it before you use it.