Skip to main content
Glama

Lianex — Australian price comparison

Search the cached catalogue by free text

lianex_search
Read-onlyIdempotent

Search cached products using query words and, when recognized, their product category. Category matching can include titles that omit the category word; insufficient category evidence falls back to title matching. An explicit category filter replaces automatic category selection. Cache-only: no live marketplace fetch.

Read result first: not_searched omits products and has_more; miss returns products: []; hit returns ranked products. An offset beyond the result set also returns miss. Check filters.applied and filters.ignored to see which inputs were used.

Exact hits carry match: all_terms. If nothing matches every word of a multi-word search, match: partial marks the closest matches, with matched_terms, dropped_terms and message; the product type stays required and filters never relax. A filter-emptied miss carries emptied_by and retry_url. Words beyond twelve appear in ignored_terms.

Filters apply before selecting a bounded result pool. A filtered request can return products absent from an unfiltered response. Results are ranked again for each request and may change between pages; offset pagination is not a snapshot. No catalogue-wide total is available.

Use compact or fields to reduce returned product fields without changing matching or ordering. Available now: Australia (prices in AUD); other marketplaces are in progress. Use currency with price bounds when you need prices in one currency. Prices are never converted; an unserved currency returns miss with emptied_by, available_regions and retry_url. dedupe keeps the first result for each provider and normalized title, so variants with identical titles can be combined.

Input Schema

NameRequiredDescriptionDefault
qNoSearch words. Matching uses recognized product categories and title words, with a title-match fallback. Without a searchable term the response is not_searched, even if filters are supplied.
sortNobest_match (default), price (cheapest first) or price_desc (most expensive first). Invalid values use best_match and are listed in filters.ignored.
brandNoExact brand, case-insensitive. Products with no stored brand do not match.
limitNoMaximum products per page. Values are clamped to the range 1–50. The response echoes the applied page_size. A non-integer value returns 422.
dedupeNoSet true to keep the first result for each provider and normalized title, using the selected sort order. Off by default. Variants with identical titles may be combined. deduped counts removed rows in the ranked pool before paging.
fieldsNoComma-separated product fields, e.g. title,price,url. Overrides compact; id and permalink are always included. Unknown names are dropped. If none are valid, the full projection is returned and fields appears in filters.ignored.
offsetNoNumber of ranked products to skip. Negative values use zero; invalid values use zero and appear in filters.ignored. Results may change between requests.
compactNoSet true for title, price, currency, condition, permalink and id only. False or empty returns full products. Invalid values are ignored. The applied selection appears in fields.
categoryNoPublished browse slug (mobile-phones) or numeric eBay category ID (9355), not a display name. Replaces automatic category selection. filters.applied echoes the supplied category and resolved ID.
currencyNoISO-4217 currency code. Available now: Australia (prices in AUD); other marketplaces are in progress. Filters to prices stored in that currency and never converts prices. A currency that is not served returns miss with emptied_by, available_regions and retry_url. Use with min_price and max_price.
providerNoAlias for marketplace. Ignored when marketplace is also supplied.
conditionNoOne of new, refurbished or used. Products with no recorded condition do not match. Invalid values are ignored.
max_priceNoMaximum price, parsed like min_price. Available now: Australia (prices in AUD). Supply currency to restrict prices to one currency. A minimum above the maximum yields no matches.
min_priceNoMinimum price in each listing's stored currency. Available now: Australia (prices in AUD). Accepts 1500 or $1,500.00. Supply currency to restrict prices to one currency. Invalid values are ignored.
marketplaceNoMarketplace: ebay, amazon, aliexpress, jbhifi or shein. Stored locale labels such as EBAY_AU are accepted. Takes precedence over provider.
fresher_thanNoOnly products checked since this relative age (7d, 24h, 30m) or ISO-8601 date/time. Times without a timezone use UTC. Invalid values are ignored.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changed
    • addedInput schema / properties / category / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / category / type
      Removed value: -"string"
    • addedInput schema / properties / compact / anyOf
      Added value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / compact / type
      Removed value: -"string"
    • addedInput schema / properties / dedupe / anyOf
      Added value: +[
      +  {
      +    "type": "boolean"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / dedupe / type
      Removed value: -"string"
    • addedInput schema / properties / limit / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "pattern": "^-?[0-9]+$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / limit / type
      Removed value: -"integer"
    • addedInput schema / properties / max_price / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / max_price / type
      Removed value: -"string"
    • addedInput schema / properties / min_price / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / min_price / type
      Removed value: -"string"
    • addedInput schema / properties / offset / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "pattern": "^-?[0-9]+$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / offset / default
      Removed value: -""
    • removedInput schema / properties / offset / type
      Removed value: -"string"
    • changedOutput schema / $defs / SearchHit / description
      Previous value: -"A page of ranked cached products, containing up to page_size results."New value: +"A page of ranked cached products, containing up to page_size results. match says whether they matched every search word (all_terms) or are the closest matches (partial)."
    • addedOutput schema / $defs / SearchHit / properties / dropped_terms
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Present on a partial answer: the search words no returned product matched.",
      +  "title": "Dropped Terms"
      +}
    • addedOutput schema / $defs / SearchHit / properties / ignored_terms
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Present when the search had more than 12 words: the words after the twelfth, which were not used.",
      +  "title": "Ignored Terms"
      +}
    • addedOutput schema / $defs / SearchHit / properties / match
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "all_terms",
      +        "partial"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "all_terms: every returned product matched every search word. partial: no cached product matched every word, so these are the closest matches, ranked by how many words they match; read matched_terms, dropped_terms and message before using them.",
      +  "title": "Match"
      +}
    • addedOutput schema / $defs / SearchHit / properties / matched_terms
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Present on a partial answer: the search words at least one returned product matched.",
      +  "title": "Matched Terms"
      +}
    • addedOutput schema / $defs / SearchHit / properties / message
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Present on a partial answer, or when some search words were not used. Explains how this result differs from an exact match.",
      +  "title": "Message"
      +}
    • changedOutput schema / $defs / SearchMiss / properties / available_regions / description
      Previous value: -"Present with emptied_by: the regions served now (Australia (prices in AUD)), each with its country code, name and currency."New value: +"Present when the emptying filter is a currency that is not served: the regions served now (Australia (prices in AUD)), each with its country code, name and currency."
    • changedOutput schema / $defs / SearchMiss / properties / emptied_by / description
      Previous value: -"Present only when a filter alone guarantees an empty result — today only a currency that is not served: [\"currency\"]. Absent on every other miss."New value: +"Present only when cached products match the search words but a filter removed them all: the filter names, for example [\"price\"] or [\"currency\"]. retry_url repeats the search without them. Absent on every other miss."
    • addedOutput schema / $defs / SearchMiss / properties / ignored_terms
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Present when the search had more than 12 words: the words after the twelfth, which were not used.",
      +  "title": "Ignored Terms"
      +}
    • changedOutput schema / $defs / SearchMiss / properties / retry_url / description
      Previous value: -"Present with emptied_by: this request's path and query without the emptying filter, relative to the API origin."New value: +"Present with emptied_by: this request's path and query without the emptying filter or filters, relative to the API origin."
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Far beyond the read-only/idempotent annotations: it enumerates the result states (not_searched, miss, hit), explains that ranking is recomputed per request and offset paging is not a snapshot, that no catalogue-wide total exists, that prices are never converted and unserved currencies yield miss with emptied_by, and that filters apply before a bounded pool is selected. This is the kind of behavior an agent can only get from the description.

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 'Read result first' instruction and groups content into purpose, result states, filter/paging semantics, and output controls. Dense but nearly every sentence carries operational meaning; only the region-availability note is stated twice (once in prose, once in schema).

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

Completeness5/5

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

For a 16-parameter, zero-required, open-filter search with an output schema, it covers the remaining gaps an agent would hit: result-state handling, filter application order, pagination instability, and empty-result diagnostics. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: category replaces automatic selection, currency must pair with price bounds and is never converted, dedupe keeps first result per provider and normalized title, and terms beyond twelve are ignored. It does not repeat the schema wholesale.

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 ('Search cached products') plus the essential scope qualifier 'Cache-only: no live marketplace fetch', which separates it from any live-fetch sibling. Category-vs-title matching behavior is named concretely.

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 clear when-to-use rules for internal choices: explicit category filter overrides automatic category selection, use compact/fields to shrink payload without changing matching, use currency with price bounds when one currency is needed. It never names sibling tools (e.g. lianex_browse or lianex_products) as alternatives, so routing between tools 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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources