Skip to main content
Glama

Find products

search_products
Read-onlyIdempotent

Find products businesses sell, by words or a barcode (GTIN, EAN, UPC, ISBN), brand and part number, place, price, currency and stock. Each comes with offers: one business's price as last checked, and its own door to order through. Prices are never converted. A barcode is one product per multipack: single units and a pack of them are apart, and a pack's offer gives its price per unit too. A business's variants of one product, when its catalogue groups them, are one product with one place (variants). Read the price at the business's door and order there; this server takes no orders or payments. Pages of up to 20: pass next_cursor as cursor.

Input Schema

NameRequiredDescriptionDefault
mpnNoThe maker's part number, with brand.
gtinNoA barcode: GTIN-8, -12, -13 or -14, EAN, UPC or ISBN, in any length or with (01) in front. Checked, and it replaces query.
nearNoOnly offers of businesses within radius_km of this point, each with its distance.
brandNoThe maker's brand, with mpn: that exact part.
limitNoUp to 20; 10 when left out.
orderNopublished (the default): each offer in its business's place in the directory's published order. price: lowest price as sold first (a pack's whole price), with currency. nearest: nearest first, with near.
queryNoA few words from the product's name, brand or description, like "moka pot". Every word must match, ignoring capitals and accents.
cursorNonext_cursor from the previous page, with the same arguments.
domainNoOnly this business's products: its domain.
countryNoOnly businesses in this country: ISO 3166-1 alpha-2, like PT.
currencyNoOnly offers in this currency (ISO 4217, like EUR). Prices are never converted.
ships_toNoOnly businesses that say they deliver to this country: ISO 3166-1 alpha-2.
conditionNoOnly offers in one of these conditions: any when left out.
has_inboxNoEvery offer here comes from a business's own inbox: false leaves nothing.
multipackNoOnly products of this many identical units sold together: 1 for single units, 12 for packs of 12. Any when left out.
price_maxNoAt most this price as sold (a pack's whole price), in the currency's minor unit. Needs currency.
price_minNoAt least this price as sold (a pack's whole price, not its price per unit), in the currency's minor unit (cents for EUR, yen for JPY). Needs currency.
availabilityNoOnly offers with one of these: in_stock and on_sale (available, its stock not counted) when left out.

Output Schema

NameRequiredDescriptionDefault
noteYes
orderYes
rulesYes
productsYes
next_cursorYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / near / properties / lat / description
      Added value: +"The point's latitude."
    • addedInput schema / properties / near / properties / lng / description
      Added value: +"The point's longitude."
  2. Changed1 schema field changed
    • addedOutput schema / properties / products / items / properties / variants
      Added value: +{
      +  "minimum": 1,
      +  "type": "integer"
      +}
  3. Changed9 schema fields changed
    • addedInput schema / properties / multipack
      Added value: +{
      +  "description": "Only products of this many identical units sold together: 1 for single units, 12 for packs of 12. Any when left out.",
      +  "maximum": 10000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / order / description
      Previous value: -"published (the default): each offer in its business's place in the directory's published order. price: lowest first, with currency. nearest: nearest first, with near."New value: +"published (the default): each offer in its business's place in the directory's published order. price: lowest price as sold first (a pack's whole price), with currency. nearest: nearest first, with near."
    • changedInput schema / properties / price_max / description
      Previous value: -"At most this, in the currency's minor unit. Needs currency."New value: +"At most this price as sold (a pack's whole price), in the currency's minor unit. Needs currency."
    • changedInput schema / properties / price_min / description
      Previous value: -"At least this, in the currency's minor unit (cents for EUR, yen for JPY). Needs currency."New value: +"At least this price as sold (a pack's whole price, not its price per unit), in the currency's minor unit (cents for EUR, yen for JPY). Needs currency."
    • addedOutput schema / properties / products / items / properties / multipack
      Added value: +{
      +  "maximum": 10000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / products / items / properties / offers / items / properties / multipack
      Added value: +{
      +  "maximum": 10000,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / products / items / properties / offers / items / properties / unit_price
      Added value: +{
      +  "properties": {
      +    "currency": {
      +      "pattern": "^[A-Z]{3}$",
      +      "type": "string"
      +    },
      +    "value": {
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "value",
      +    "currency"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / products / items / properties / offers / items / required
      Previous value: -[
      -  "id",
      -  "offered_by",
      -  "name",
      -  "gtin",
      -  "price",
      -  "tax",
      -  "availability",
      -  "condition",
      -  "where",
      -  "checked_at",
      -  "order"
      -]New value: +[
      +  "id",
      +  "offered_by",
      +  "name",
      +  "gtin",
      +  "multipack",
      +  "price",
      +  "tax",
      +  "availability",
      +  "condition",
      +  "where",
      +  "checked_at",
      +  "order"
      +]
    • changedOutput schema / properties / products / items / required
      Previous value: -[
      -  "key",
      -  "gtin",
      -  "name",
      -  "own",
      -  "offers_count",
      -  "offers"
      -]New value: +[
      +  "key",
      +  "gtin",
      +  "multipack",
      +  "name",
      +  "own",
      +  "offers_count",
      +  "offers"
      +]
  4. Changed36 schema fields changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / title
      Removed value: -"MCP search_products: arguments"
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / description
      Added value: +"Every field is described in this tool's outputSchema at https://network.surfingdog.ai/.well-known/mcp/server-card.json."
    • removedOutput schema / properties / next_cursor / description
      Removed value: -"Pass it as cursor, with the same arguments, for the next page; null on the last."
    • removedOutput schema / properties / note / description
      Removed value: -"Prices are each business's as this network last checked them; the door's price is the one that counts."
    • removedOutput schema / properties / products / items / properties / key / description
      Removed value: -"gtin:<14 digits> for a barcode, offer:<id> for a business's own product."
    • removedOutput schema / properties / products / items / properties / name / description
      Removed value: -"As the business of its first offer wrote it."
    • removedOutput schema / properties / products / items / properties / offers / description
      Removed value: -"Its first offers, up to 3, in the order asked."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / availability / description
      Removed value: -"in_stock, out_of_stock, or on_sale (available, its stock not counted; never a discount). Never a count."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / brand / description
      Removed value: -"As the business wrote it."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / checked_at / description
      Removed value: -"When this network last confirmed the business's catalogue."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / gtin / description
      Removed value: -"The barcode, as 14 digits; null for a product with none."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / id / description
      Removed value: -"This network's id of the offer."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / image_url / description
      Removed value: -"A picture of it, where the business keeps it."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / name / description
      Removed value: -"As the business wrote it."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / offered_by / description
      Removed value: -"The business that offers it, in this network's words."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / offered_by / properties / country / description
      Removed value: -"ISO 3166-1 alpha-2."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / offered_by / properties / distance_km / description
      Removed value: -"Searches near a point only."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / offered_by / properties / domain / description
      Removed value: -"The business's own domain, where its inbox is."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / offered_by / properties / name / description
      Removed value: -"As the business wrote it."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / offered_by / properties / standing / description
      Removed value: -"Its standing in the directory, in words, as get_business gives it."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / order / description
      Removed value: -"The business's own door: read the price that counts there with read_first, then order with then; over HTTP, the same at rest."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / order / properties / openapi / description
      Removed value: -"The door's OpenAPI description."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / order / properties / product_id / description
      Removed value: -"The product's id at the business's door."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / order / properties / rest / description
      Removed value: -"Over HTTP: GET {rest}/products?ids={product_id} reads the price that counts, and POST {rest}/orders orders."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / price / description
      Removed value: -"As this network last checked it, in the currency's minor unit."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / price / properties / currency / description
      Removed value: -"ISO 4217."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / tax / description
      Removed value: -"Whether the price includes tax, as the business said: unknown when it said nothing."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / url / description
      Removed value: -"The product's page, on the business's own site."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / where / description
      Removed value: -"Where it is offered: pickup when the business says it takes collection in person, and the countries it says it delivers to."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / where / properties / ships_to / description
      Removed value: -"ISO 3166-1 alpha-2 codes, or * for anywhere."
    • removedOutput schema / properties / products / items / properties / offers_count / description
      Removed value: -"How many businesses offer it in this search."
    • removedOutput schema / properties / products / items / properties / own / description
      Removed value: -"A business's own product: no barcode it shares with another business's."
    • removedOutput schema / properties / rules / description
      Removed value: -"The rules that make the published order."
    • removedOutput schema / title
      Removed value: -"MCP search_products: structuredContent"
  5. Added

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, it discloses non-obvious behavior: results bundle offers with last-checked prices and business doors, prices are never converted, multipack and variant grouping rules apply, and pagination uses next_cursor. It also clearly states the server cannot take orders or payments.

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

Conciseness4/5

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

The description is dense but front-loaded, and every sentence carries operational meaning about results, pricing, multipacks, variants, or pagination. It could be broken into bullets for readability, but it is not padded.

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 an 18-parameter search tool with an output schema and full schema descriptions, the description supplies the key result-shape and caveat information an agent needs. The remaining filter details are adequately covered by the schema.

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 schema already documents all 18 parameters. The description still adds cross-parameter meaning, especially barcode replacing query, pack-level pricing versus per-unit price, variant grouping, and cursor pagination.

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?

The description opens with a specific verb and resource ('Find products businesses sell') and enumerates search dimensions such as words, barcode, brand/mpn, place, price, currency, and stock. It does not explicitly route to sibling tools such as search_businesses or get_offers, so it is clear but lacks explicit sibling differentiation.

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

Usage Guidelines3/5

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

It gives clear context for searching products and notes that the server takes no orders or payments, implying it is for discovery rather than transaction. However, it never names alternatives or says when to use get_offers/search_businesses instead, so usage is implied rather than explicitly comparative.

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