Skip to main content
Glama
spinnerich
by spinnerich

geizhals-mcp

A small MCP server that lets an assistant search geizhals.de and look up shop prices for a product. I built it to stop tabbing back and forth to the browser while comparing hardware prices.

It exposes two tools:

  • search_products(query, limit=15) – full-text product search; returns the lowest price, number of offers and the product URL for each hit.

  • get_product(product) – takes a product URL or id and lists the individual shop offers (cheapest first) with the price range.

Install

git clone https://github.com/spinnerich/geizhals-mcp
cd geizhals-mcp
uv sync          # or: pip install -e .

Related MCP server: kuantokusta-mcp

Wiring it into a client

For Claude Code, one command does it (point it at wherever you cloned the repo):

claude mcp add geizhals -- uv --directory /path/to/geizhals-mcp run geizhals-mcp

Add --scope user to make it available in every project, or -e KEY=value to set any of the variables below. claude mcp list shows it's registered.

For Claude Desktop, add this to claude_desktop_config.json:

{
  "mcpServers": {
    "geizhals": {
      "command": "uv",
      "args": ["run", "geizhals-mcp"]
    }
  }
}

Or run it directly to test: uv run geizhals-mcp.

Configuration

A few environment variables, all optional:

Variable

Default

Purpose

GEIZHALS_DOMAIN

geizhals.de

Use geizhals.at or geizhals.eu for other regions.

GEIZHALS_MIN_DELAY

1.0

Minimum seconds between requests.

GEIZHALS_IMPERSONATE

chrome

curl_cffi browser profile used for the TLS handshake.

Caveats

Geizhals has no public API, so this reads the normal website. The site is behind Cloudflare, which is why the requests go through curl_cffi with a browser TLS fingerprint – a plain HTTP client just gets a 403. Because there's no API the parsing is tied to the current page layout and may need a nudge when they change things.

Keep the request rate sane (the default delay is there for a reason) and use this for your own price checks, not for hammering their servers.

Available Tools

2 tools
get_productA

Look up offers for a single product.

Accepts a geizhals product URL or a numeric product id and returns the individual shop offers (cheapest first) plus the price range and, when available, the recent price history.

ParametersJSON Schema
NameRequiredDescriptionDefault
productYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description must provide behavioral traits. It discloses that results include shop offers (sorted cheapest first), price range, and price history. This is good transparency, though it could mention pagination or limits.

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?

The description is two sentences long, front-loaded with the action, and every word provides value. No extraneous information.

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?

Given the presence of an output schema (indicated true), the description adequately explains input and key output aspects. It covers input format and return values (offers, price range, history). A mention of the output schema reference would slightly improve completeness.

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?

The single parameter 'product' has 0% schema coverage, meaning the schema provides no description. The description adds critical meaning: it accepts a geizhals product URL or numeric product ID, which is essential for correct invocation.

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?

The description clearly states it looks up offers for a single product using a URL or numeric ID. It distinguishes itself from the sibling tool search_products, which implies searching for products.

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?

The description explicitly states it is for a single product, but does not provide explicit when-not-to-use guidance or alternative tool references. However, the context is clear enough for an agent to infer usage.

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

search_productsA

Search geizhals.de for products by name or keyword.

sort is one of "relevance" (default), "price_asc" or "price_desc". min_price/max_price narrow the results to a price range in euro.

Returns a list of matching products with their lowest price, number of offers and the product page URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo
sortNorelevance
min_priceNo
max_priceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses that the tool returns a list of matching products with lowest price, number of offers, and page URL, but does not mention any side effects, rate limits, or additional behavioral traits. Since annotations are absent, the description carries the burden but lacks detail like whether it's read-only.

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?

The description is 4 lines, well-structured, and front-loaded with the purpose. Every sentence adds value: purpose, sort options, price range, and return structure. No redundant or unnecessary text.

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?

Given the complexity (5 params, has output schema, sibling tool), the description covers the main aspects: purpose, key parameters, and return value. It lacks explanation for 'limit', but with the output schema clarifying return fields, it is mostly complete.

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 0%, so the description must add meaning. It explains 'sort' (relevance/price_asc/price_desc) and 'min_price'/'max_price' (euro range). 'query' is implied by 'search by name or keyword', but 'limit' is not described, leaving some parameter semantics incomplete.

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?

The description clearly states the tool searches geizhals.de for products by name or keyword, which is a specific verb and resource. It distinguishes from the sibling tool 'get_product' which likely retrieves a single product's details.

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?

The description provides context on using sort and price range parameters but does not explicitly state when to use this tool versus the sibling 'get_product' or any conditions for not using it. The guidance is implied but not explicit.

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 updatesv0.1.0
    • First observedget_product
    • First observedsearch_products

TDQS

A4/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one for searching products by keyword, the other for retrieving detailed offers for a specific product. No overlap or ambiguity.

Naming Consistency5/5

Both tools follow the verb_noun pattern (search_products, get_product), which is consistent and predictable.

Tool Count3/5

Only two tools for a price comparison service seems minimal. While the core workflow is covered, additional tools for categories or price history would enhance the surface.

Completeness3/5

Missing features like category browsing, price alerts, or multiple product comparison. However, the basic search and detail retrieval are present.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to search products and retrieve detailed information from Galaxus and Digitec, including prices, specifications, and price history.
    5
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables product search and discovery on Galaxus and Digitec, with tools for searching, browsing, comparing, and looking up prices and specifications.
    7
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that lets an LLM search Geizhals, a leading German/DACH price-comparison site, for the cheapest offers on new products.
    2
    MIT