Skip to main content
Glama

Server Details

Live supplement prices per kg, serving or capsule from stores across Europe. Free, no API key.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.7% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
supplementscanner/supplementscanner-mcp
GitHub Stars
0

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation4/5

get_product and list_categories are clearly distinct (single-record lookup vs. category inventory). find_cheapest and search_products overlap in that both can return cheapest-per-unit results, but the descriptions explicitly route the agent (use find_cheapest when the category is known, search_products for free-text/typo-tolerant queries).

Naming Consistency5/5

All four tools follow a clean verb_noun snake_case pattern: find_cheapest, get_product, list_categories, search_products. No mixed conventions or vague verbs.

Tool Count4/5

Four tools is lean but well-matched to a read-only price-comparison service: one for discovery, one for lookup, one for search, one for detail. Nothing feels redundant, though the surface is on the sparse side.

Completeness4/5

Core workflow (discover categories -> find cheapest with filters -> inspect product detail/price history) is fully covered, with buy links closing the loop. Minor gaps exist: no standalone way to list available filters or brands without going through find_cheapest responses.

Available Tools

4 tools
find_cheapestFind cheapest productsA
Read-onlyIdempotent
Inspect

Find the cheapest supplements by normalized price-per-unit within a category (and all its subcategories). This is the primary tool for "what is the cheapest X?" questions. Use list_categories first to pick a valid category_slug. Narrow it with filters (the category page's attribute filters, such as vegan or a form) and brand; every response lists the filters the category offers in available_filters.

NameRequiredDescriptionDefault
brandNoOptional: only this brand, by name or slug as it appears in the results.
limitNoMaximum number of products to return (1-50).
marketNoOptional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected.
filtersNoOptional: only products carrying every one of these attributes, the filters of the category page, e.g. ["is_vegan", "is_lab_tested", "form:powder"]. A boolean attribute is its key; an option is "key:value", one value per key. Every response lists the ids this category offers in available_filters; an id it does not offer is rejected.
category_slugYesThe category to search within, e.g. "whey-protein" or "creatine". Products in every subcategory are included, so a parent slug like "protein-powder" works too. Get valid slugs from list_categories.
in_stock_onlyNoWhen true, only return products currently in stock.

TDQS

A4.3/5.0
Behavior3/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 real value by disclosing that subcategories are included and that responses list available_filters with invalid ids rejected, but says nothing about result ordering ties or pagination behavior.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core purpose, then prerequisites and narrowing options. 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?

For a filtered list tool with full schema coverage and annotations carrying safety, the description covers prerequisite workflow, filtering contract, and response affordance (available_filters) without needing an output schema.

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 coverage is 100%, so all six parameters are already documented in the schema, and much of the description's filter guidance (available_filters, rejected ids) merely restates it. The description adds only modest context, 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?

States a specific verb and resource — finding cheapest supplements ranked by normalized price-per-unit within a category and its subcategories. The 'price-per-unit' normalization detail makes the ranking criterion unambiguous and separates it from get_product/search_products.

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 itself as the primary tool for 'what is the cheapest X?' questions and tells the agent to call list_categories first for a valid slug. It also explains how to narrow results with filters and brand, leaving little inference.

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

get_productGet product detailsA
Read-onlyIdempotent
Inspect

Get full detail for one product by its id: price, normalized unit price, size, bulk/staffel tiers, buy link, and recent price history. Use the id returned by find_cheapest or search_products.

NameRequiredDescriptionDefault
marketNoOptional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected.
product_idYesThe numeric product id, as returned in the `id` field by find_cheapest or search_products.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing the return content (normalized unit price, bulk tiers, buy link, recent price history) — the closest thing to an output schema here. It omits history window length and result limits, keeping it below 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?

Two sentences, zero waste — the returned-field enumeration is front-loaded and the id-provenance note follows. Every clause earns its place.

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 2-parameter read tool with full schema coverage, no output schema and clear annotations, nothing an agent needs is missing: the required id, where to get it, what comes back, and the optional market behavior all resolve.

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%: product_id's numeric origin and the market's accepted values, default, and rejection behavior are all documented in the schema. The description only reinforces that the id comes from find_cheapest or search_products and never mentions market, so it sits at 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 (get) and resource (full detail for one product by id) and then enumerates exactly what detail is returned: price, normalized unit price, size, bulk/staffel tiers, buy link, and recent price history. An agent can distinguish this single-product lookup from find_cheapest and search_products 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 Guidelines4/5

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

"Use the id returned by find_cheapest or search_products" gives a concrete prerequisite and routes the agent through the sibling tools that produce the required id. It does not state any when-not condition or exclusion, so it falls short of a full 5.

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

list_categoriesList categoriesA
Read-onlyIdempotent
Inspect

List the supplement categories that currently hold priced products, each with a live product count, store count, lowest normalized unit price, and its comparison basis (per_kg / per_serving / per_capsule). Use this to discover a valid category_slug for find_cheapest.

NameRequiredDescriptionDefault
marketNoOptional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds real behavioral context beyond them: results are filtered to categories with priced products, counts are live, and prices are normalized with an explicit comparison basis. It stops short of covering pagination, result ordering, or auth/rate-limit behavior, 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?

Two sentences, zero filler. The scope constraint and returned fields come first, and the routing instruction to find_cheapest comes second — front-loaded exactly where an agent needs it.

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 no output schema, the description carries the burden of describing return values and does so field by field, plus explains the filtering rule and downstream use. Minor gaps remain around result ordering and whether the list is bounded, but nothing needed to invoke the tool correctly is missing.

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% — the single optional 'market' parameter is fully documented in the schema with its enum values and nl default. The description never mentions market scoping, so it adds no meaning beyond the schema. Baseline 3 is appropriate when the schema does all the parameter work.

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 (supplement categories) plus the exact scope — only categories that currently hold priced products — and enumerates the returned fields (product count, store count, lowest normalized unit price, comparison basis). An agent can distinguish this from find_cheapest, get_product, and search_products 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?

Explicitly routes the agent: "Use this to discover a valid category_slug for find_cheapest." That names the alternative tool and the condition that selects it, which is exactly the decision an agent needs to make between listing categories and searching products.

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

search_productsSearch productsA
Read-onlyIdempotent
Inspect

Search the whole supplement catalog the way the website's search box does. A product name or brand is matched typo-tolerantly (e.g. "kreatine", "theanin" still match). In markets where the site reads queries, a request described in words, with qualities (vegan, sugar-free, lab-tested, a form, a brand), is answered as that category with those filters, cheapest per unit first, and interpreted_as says how it was read and what could not be applied. Use find_cheapest instead when you already know the category.

NameRequiredDescriptionDefault
limitNoMaximum number of products to return (1-50).
queryYesWhat the user is looking for, in their own words: a product name or brand ("whey isolaat" or "magnesium bisglycinaat"), or a need with its qualities ("vegan eiwitrepen zonder toegevoegde suiker" or "lab-tested creatine powder").
marketNoOptional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected.
category_slugNoOptional: restrict results to this category and all of its subcategories, e.g. "protein-powder". Must be a slug from list_categories; an unknown slug is rejected.
in_stock_onlyNoWhen true, only return products currently in stock.
max_unit_price_centsNoOptional: only return products whose normalized unit price, rounded to whole cents, is at or below this many cents.

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 safety is covered. The description adds genuine context beyond that: typo tolerance in name/brand matching, natural-language interpretation in some markets, cheapest-per-unit ordering, and an interpreted_as field explaining how the query was read. It stops short of describing pagination or result volume behavior.

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?

Three dense sentences with the core purpose front-loaded and the sibling routing at the end. Some clauses (the market-reading caveat) are packed tightly, but no sentence is filler.

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?

For a six-parameter, no-output-schema search tool, the description covers the query contract, the interpretation feedback, the ordering guarantee, and the market caveat. The one gap is that return shape beyond interpreted_as (e.g. what fields each product carries) is unstated, despite there being no output schema to lean on.

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. The description still adds value by explaining the query's own-words semantics with typo-tolerant examples and by noting that stated qualities are turned into category filters, plus the interpreted_as feedback, which is not visible in the schema.

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 (search) and resource (the whole supplement catalog), scopes it as mirroring the website search box, and distinguishes itself from find_cheapest by name. An agent can identify what this does and what it returns without opening the schema.

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

Usage Guidelines4/5

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

Explicitly says to use find_cheapest when the category is already known, which is a real routing rule. It does not cover get_product for when a specific product identity is known, so alternative guidance is complete for one sibling but not all.

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. 2 tool updates
    • Changedfind_cheapest2 fields changed
      • addedInput schema / properties / brand
        Added value: +{
        +  "description": "Optional: only this brand, by name or slug as it appears in the results.",
        +  "type": "string"
        +}
      • addedInput schema / properties / filters
        Added value: +{
        +  "description": "Optional: only products carrying every one of these attributes, the filters of the category page, e.g. [\"is_vegan\", \"is_lab_tested\", \"form:powder\"]. A boolean attribute is its key; an option is \"key:value\", one value per key. Every response lists the ids this category offers in available_filters; an id it does not offer is rejected.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedsearch_products1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"The product name or brand to search for, e.g. \"whey isolaat\" or \"magnesium bisglycinaat\"."New value: +"What the user is looking for, in their own words: a product name or brand (\"whey isolaat\" or \"magnesium bisglycinaat\"), or a need with its qualities (\"vegan eiwitrepen zonder toegevoegde suiker\" or \"lab-tested creatine powder\")."
  2. 4 tool updates
    • Changedfind_cheapest1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedget_product1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedlist_categories1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedsearch_products1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk, at. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
  3. 4 tool updates
    • Changedfind_cheapest1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedget_product1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedlist_categories1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedsearch_products1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es, dk. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
  4. 1 tool update
    • Changedsearch_products1 field changed
      • changedInput schema / properties / max_unit_price_cents / description
        Previous value: -"Optional: only return products whose normalized unit price is at or below this many cents."New value: +"Optional: only return products whose normalized unit price, rounded to whole cents, is at or below this many cents."
  5. 4 tool updates
    • Changedfind_cheapest1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedget_product1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedlist_categories1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
    • Changedsearch_products1 field changed
      • changedInput schema / properties / market / description
        Previous value: -"Optional country market to query: nl, be. Defaults to nl, the market this endpoint answers for. Any other value is rejected."New value: +"Optional country market to query: nl, be, fr, gb, pl, es. Defaults to nl, the market this endpoint answers for. Any other value is rejected."
  6. 4 tool updates
    • First observedfind_cheapest
    • First observedget_product
    • First observedlist_categories
    • First observedsearch_products

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables product search, price comparison, and price history analysis across 6 European marketplaces (DE, AT, GB, FR, IT, ES).
    23
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Real Amazon (US, UK, DE, CA, AU) & Walmart shopping data for AI assistants: ranked product shortlists, current prices, live stock, real ratings, and price/BSR history from a 17M+ product warehouse. Free hosted endpoint, no signup — 30 queries a day.
    18
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables querying live offers and prices from 10 Dutch supermarket chains through a single normalised JSON API. Exposes 26 curated tools, including product search and category lookups, over stdio or authenticated Streamable HTTP.
    20
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.