Skip to content

MCP servers › ai.fordeal › price-hunter

MCP server · registry snapshot 2026-10-30 · last tested 2026-10-30

price-hunter MCP server

Registry name ai.fordeal/price-hunter

Fordeal — the publisher's title

by fordeal.ai · domain (the registry's namespace rule)source link does not open (missing or private)Website ↗

Price comparison for CZ/SK: product prices, shops, digital plans via Streamable HTTP. — the publisher's description

1 of 2 record checks metRead-only · tools listed 2026-10-30version 1.0.0streamable HTTP55 tools

Summary

ai.fordeal/price-hunter is a remote MCP server listed in the official MCP registry at version 1.0.0, under the namespace of the domain fordeal.ai. Its linked repository, github.com/banbosh/fordeal, does not open publicly (missing or private). On 2026-10-30 ProtocolProbe connected to it in read-only mode and read its inventory: 55 tools, 2 resources and 0 prompts.

Record checks

1 of 2 record checks met · 7 do not apply

  • met: Registry entry is active and says how to run it
  • not met: Source repository link opens
  • not applicable: Repository is not archived
  • not applicable: Code pushed to the repository in the 90 days before our check
  • not applicable: Repository publishes a security policy (SECURITY.md)
  • not applicable: Package names its licence with a standard (SPDX) identifier
  • not applicable: The version the registry lists can be installed and is not withdrawn
  • not applicable: npm package carries build provenance (attestation)
  • not applicable: No known critical or high advisory in the package or its dependencies
  • Not ranked by downloads: a remote server publishes no download figure
  • Not ranked by stars: no public GitHub repository

From public records, not a safety rating. Each check with its reason · Is it safe to install?

Operate this server? Correct a fact · README badge · Run the checks yourself

Key facts

Runs
remote (hosted by the publisher)
Transport
streamable HTTP
Your own values
none declared (not a guarantee)
Sign-in
none needed to open a session
Repository
link does not open publicly
Tools
55
Last tested
2026-10-30

Tool list size

37,526 tokens on Claude Opus 5.5

Added to every request that loads this server's tools (55 tools). Counted with Anthropic's token counter on 2026-10-30, from the tool list we read on 2026-10-30. Median across 25,738 counted servers: 2,858 tokens. How it is counted

How a client gets in

Connects without signing in

Read from the server's public metadata on 2026-10-30 (fordeal.ai), in our read-only connection; no tool was called. It may have changed since. How it is read

Tool list at the three APIs

Not sent yet for this version (1.0.0).

Add to your client

Observed fact

This server accepted a session without any credential and lists 16 tools whose name or declaration suggests they change data (cancel_energy_watch, set_price_watch, update_price_watch, delete_price_watch, save_favorite and 11 more). That is our reading of the names; we did not call them. Source: our connection, 2026-10-30.

Worth knowing before you connect it

  • The linked repository does not open publicly, so the code cannot be reviewed through it.

Each line comes from a section below, with its source and date.

How fresh this is

Live-tested
yes, a real session (not a text-only review)
Last tested
2026-10-30
Mode
read-only (no tool calls)
Latest version
1.0.0, published 2026-10-30 (registry, as of the 2026-10-30 snapshot)
First listed version
2026-10-30 (earliest version still in the registry; older removed versions would be earlier)
Registry data
snapshot 2026-10-30
Package and repository
checked 2026-10-30
Engine
mcp-runtime-engine@0.1.0 · sdk@1.32.0

Dead or stale signals

1 found in the records we hold

  • The repository link does not open: GitHub answered HTTP 404 (it does not exist, or it is private). — api.github.com · 2026-10-30 · all servers with this fact

Looked for and not found: deprecated in the registry. Does not apply: listed version cannot be installed or is withdrawn; repository archived; no push in over 365 days. Each line is a dated fact from a public record. It does not say whether the server still works, and a record can change after the date shown.

Changes since the last refresh

New in the registry: not in the list of 2026-10-29, listed on 2026-10-30 with version 1.0.0 (published 2026-10-30).

Source: the official MCP Registry list on 2026-10-29 and on 2026-10-30.

What it is

What does this server offer?

Observed inventory
55tools
2resources
0prompts

None of its 55 tools are described as changing anything. For 55 the reading was uncertain, so no mark is shown.

  • compare_internet

    “Compare provider-level home internet summaries from docs/data/internet.json.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    10 inputs, 1 required
    • countrystringrequired“ISO 3166-1 alpha-2 country code, e.g.”
    • technologystring
    • min_speed_mbpsnumber
    • min_pricenumber
    • max_pricenumber
    • commitment_monthsinteger
    • providerstring
    • sortstring
    • limitinteger
    • offsetinteger
  • search_productson 290 other servers

    “The website's category and search grid for an agent: products with the product price of their shown offer (`lowest_goods`, in the `deliver_to_country` currency; its shipping `lowest_shipping` and the…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    23 inputs
    • querystring“Free text; every word must appear in the product name.”
    • qstring“Short name of `query` (the same search; `query` wins when both are given).”
    • categorystring“Category slug (leaf, main category or group).”
    • slugsstring or array“Product slugs (comma-separated or an array): only these products, every filter still applies.”
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
    • limitinteger
    • offsetinteger“Rows to skip before `limit` (paging).”
    • facetsboolean“true = also answer `facets` over the WHOLE filtered list, not just this page: brands, shops and shop countries with counts, the price range (min/max total), in…”
    • facet_attributesboolean“false = facets without `attributes` (the whole catalogue without a category has about 1 800 attribute keys; the website's /produkty asks without them).”
    • price_minnumber“Lowest product price in the deliver-to currency (the shown offer's goods price, shipping not counted).”
    • price_maxnumber“Highest product price in the deliver-to currency (shipping not counted).”
    • brandstring or array“Brand or brands (comma-separated in a query string).”
    • shopsstring or array“Shop slugs (e.g.”
    • shop_countrystring or array“Country codes of the shops (e.g.”
    • in_stockboolean“Only products whose shown offer is in stock.”
    • on_saleboolean“Only products with a shop discount or a measured drop.”
    • free_shippingboolean“Only products with free delivery at the shown offer.”
    • min_shop_ratingnumber“Lowest rating of the shown shop, 0..1 (0.9 = 90 % / 4.5 stars).”
    • min_product_ratingnumber“Lowest rating of the product itself, 0..1: the shops' own customer reviews and forDeal reviews (0.9 = 90 %).”
    • attrstring or array“Attribute filter as `key:value` pairs (comma-separated in a query string, or repeated).”
    • sortstring“relevance = best match first (the default with `query`; the answer card names the first row), price = lowest product price first (the default without `query`; …”
    • include_shippingboolean“Order by the total with shipping to `deliver_to_country` instead of the product price (sort=total).”
  • cheaper_abroad

    “Products whose cheapest total (goods + shipping + FX to `deliver_to_country`) comes from a shop abroad and beats the cheapest domestic offer, with the saving in the deliver-to currency (`saving_kind:…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
    • limitinteger
  • “The shops whose prices flow today for a delivery country (with their rating 0..1, rating source and trust label) and the shops still waiting for their feed.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input
    • countrystring“ISO 3166-1 alpha-2 country code, e.g.”
  • find_best_priceon 2 other servers

    “Where to buy a product cheapest today: offers ranked by the real product price (converted to the buyer's currency with a dated rate), the shipping to the buyer's country shown as its own value on eve…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    8 inputs, 1 required
    • querystringrequired“Product name, model, EAN, or a product URL.”
    • deliver_to_countrystring“Where the buyer wants delivery (ISO 3166-1 alpha-2).”
    • verified_onlyboolean“Only shops with a customer rating.”
    • sortstring“Order of `offers` and the price `best` is chosen by: product = lowest product price (the default; every offer still carries its shipping and total), total = lo…”
    • include_shippingboolean“Same as sort=total: count shipping in the order (the website's "Zahrnout dopravu").”
    • budgetnumber“Budget in the deliver-to currency; a total above it turns the verdict into buy_alternative.”
    • deepboolean“Let the model weigh the verdict and write the explanation (adds seconds).”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • “The same card as find_best_price and the website's product page /{locale}/p/{product}, for a product id you already hold (`product.slug` / `product.variant.id` from search_products, find_best_price o…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    7 inputs, 1 required
    • productstringrequired“Product slug (the stable product id), e.g.”
    • deliver_to_countrystring“Where the buyer wants delivery (ISO 3166-1 alpha-2).”
    • verified_onlyboolean“Only shops with a customer rating.”
    • sortstring“Order of `offers` and the price `best` is chosen by: product = lowest product price (the default; every offer still carries its shipping and total), total = lo…”
    • include_shippingboolean“Same as sort=total: count shipping in the order (the website's "Zahrnout dopravu").”
    • aiboolean“Also run the shops live and let the model write the verdict (slower).”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • product_variants

    “The variants of one product, each with a stable `id` (its product slug), `current` (true for the one asked for, always listed), storage, size, colour and `color_id`, its lowest total for `deliver_to_…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs, 1 required
    • productstringrequired“Product slug (the stable product id).”
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • price_historyon 40 other servers

    “Daily lowest price of a product across compared shops for up to 365 days (the last point, today, is the product price the product page shows as its main price), plus every current offer with its capt…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 1 required
    • productstringrequired“Product slug or id from find_best_price.”
    • daysinteger“Window in days.”
    • currencystring“Currency of the points.”
    • deliver_to_countrystring“Country whose shown price is the last point (today).”
  • daily_deals

    “Discounts at rated shops today, biggest absolute saving first: with 30 days of our own history for the offer, the discount is measured only against its lowest price in the 30 days before the reductio…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    6 inputs
    • countrystring“Country of the shops.”
    • categorystring“Category slug of any level of the tree, e.g.”
    • min_percentnumber“Only discounts of at least this many percent.”
    • stated_onlyboolean“Kept for compatibility; every row carries a struck price (the offer's 30-day low or, until 30 days of history exist, the shop's stated price), with or without …”
    • limitinteger
    • max_per_shopinteger“Shop diversity: the first 48 rows take the shops in turns, at most this many rows per shop; the rest follows by saving.”
  • “Coupon codes and promotions of compared shops, valid today, from the affiliate network eHUB (refreshed every 3 hours; never from newsletters or e-mails, never a shop on a risk list).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs
    • countrystring“Country of the shops.”
    • limitinteger
  • product_rows

    “The rows the website shows above the full product list (/produkty) for a buyer country, each a list of up to 12 products with the same summary fields as search_products: `deals` (today's price drops;…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
    • datestring“The day the seasonal calendar is read for (default today).”
  • trending_new_products

    “The products the home page's first row shows, found by the data and not by a list of model names: new products people look for, up to 12, each a summary like search_products (total price with shippin…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
    • limitinteger“Cards to return, at most 12 (default 12).”
Show 43 more tools
  • “When an offer on a product page is wrong (the shop's page shows another price, the offer is another variant or product, the link leads to the wrong shop or page, or anything else), file a report: `ki…”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    11 inputs, 3 required
    • kindstringrequired“What is wrong: the price, the variant or product, the category the product is filed under, the shop or link, or something else.”
    • product_slugstringrequired“Product slug (the stable product id).”
    • messagestringrequired“What you saw, e.g.”
    • offer_idstring“The offer the report is about (offer_id in the card).”
    • shop_slugstring“The shop's slug, when known.”
    • emailstring“Where the answer goes.”
    • localestring“Language of the answer.”
    • page_urlstring“The page the report was made on.”
    • user_agent_hashstring“sha-256 of the reporter's user agent (the website computes it); only for spotting floods.”
    • ip_hashstring“sha-256 of the reporter's address with a daily salt (the website computes it); the per-visitor limit of five reports a minute counts by it.”
    • websitestring“Leave empty (spam trap).”
  • report_illegal_content

    “A notice under Article 16 of the Digital Services Act that content on fordeal.ai is illegal (a user review, product information, an offer, an image or anything else).”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    10 inputs, 5 required
    • content_kindstringrequired“What content the notice is about.”
    • page_urlstring“The exact page of the content (Art.”
    • product_slugstring“Product slug when the content is on a product page.”
    • explanationstringrequired“Why the content is illegal (Art.”
    • namestringrequired“The notifier's name (Art.”
    • emailstringrequired“The notifier's e-mail: the confirmation of receipt and the decision go there.”
    • good_faithbooleanrequired“Confirms the bona fide belief that the information is accurate and complete (Art.”
    • localestring“Language of the confirmation.”
    • ip_hashstring“sha-256 of the notifier's address with a daily salt (the website computes it); counts the per-visitor limit.”
    • websitestring“Leave empty (spam trap).”
  • compare_mobile

    “Compare the sourced CZ and SK mobile tariff records in docs/data/mobilni-tarify.json.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    13 inputs, 1 required
    • countrystringrequired“CZ | SK; required so results and currency stay within one market.”
    • operatorstring
    • data_gbnumber“GB of mobile data a month (default 0).”
    • unlimited_callsboolean“Filter to tariffs with unlimited calls (true), or explicitly finite calls (false).”
    • commitment_monthsinteger
    • esimboolean
    • five_gboolean
    • sortstring
    • minutesinteger“Call minutes a month (default 0).”
    • smsinteger
    • no_commitmentboolean“Only tariffs without a contract period.”
    • roaming_eu_gbnumber“EU roaming data needed a month.”
    • limitinteger
  • compare_energyon 1 other server

    “An indicative calculation, not yet checked by an independent expert (verified: false): present the result as an estimate, never as a guaranteed price; show estimate_note (the sentence with the day of…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    23 inputs
    • countrystring“CZ (default).”
    • commoditystring“electricity (default) | gas”
    • distributorstring“Distributor of the place: electricity cez-distribuce | egd | pre-distribuce; gas gasnet | gas-distribution | ppd.”
    • ratestring“Electricity distribution rate, e.g.”
    • mwhnumber“Yearly consumption in MWh (electricity: high tariff or all; default 2.5 electricity, 10 gas).”
    • nt_mwhnumber“Electricity low-tariff consumption a year in MWh (two-tariff rates only).”
    • breakerstring“Electricity main breaker: 1x25 | 3x10 | 3x16 | 3x20 | 3x25 (default) | 3x32 | 3x40 | 3x50 | 3x63.”
    • postcodestring“Postcode of the supply point (e.g.”
    • current_monthlynumber“What the household pays today a month with VAT (the current advance), in the country's currency.”
    • current_offerstring“Id of the household's current product from `products` (energy v2): today's yearly total is then priced from that price list for the same need, and saving_year …”
    • current_vt_pricenumber“Today's commodity price per MWh from the household's bill or price list (electricity: high tariff or all; gas: the gas price).”
    • current_nt_pricenumber“Today's low-tariff commodity price per MWh (two-tariff electricity rates; required when nt_mwh > 0).”
    • current_fee_monthnumber“Today's monthly fee of the supplier (stálá platba).”
    • current_prices_vatstring“Whether current_*_price and current_fee_month include VAT: excluded (default, as price lists state them) | included (as a bill often shows them).”
    • fixationstring“Filter, one of none | 12 | 24 | 36: none = variable price without fixation; 12 / 24 / 36 = fixed price up to 1 / 2 / 3 or more years.”
    • pricingstring“Filter: fixed | variable (price-list products, ranked) | spot (market-price products: listed in not_ranked without a total, never ranked).”
    • greenstring“Filter, true: only products whose price list states electricity of renewable origin (none stated yet).”
    • no_penaltystring“Filter, true: only products whose terms state no fee for leaving (an indefinite term).”
    • sortstring“score (default: forDeal score, highest first) | price (yearly total, lowest first).”
    • comparestring“Comma-separated offer ids (2–3) for a side-by-side comparison in `comparison`.”
    • localestring“Language of estimate_note: cs | sk | en (default en).”
    • householdstring“Household type (energy v3) instead of rate + consumption: electricity byt | chata | bojler | akumulace | elektromobil | tepelne-cerpadlo | elektricke-topeni; g…”
    • limitinteger
  • compare_digital

    “Prices of digital services for a buyer's country, cheapest first, from the providers' official price lists (each row has source_url and verified_on) converted to the buyer's currency by the Czech Nat…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    14 inputs, 1 required
    • categorystringrequired“ai-chat | ai-api | ai-creative | streaming | music | vpn | cloud | office | creative | passwords”
    • usageobject“How the buyer uses the service; omit for the plain price list.”
    • messages_per_monthinteger“Flat form of usage.messages_per_month (REST query strings).”
    • input_tokensinteger“Flat form of usage.input_tokens.”
    • output_tokensinteger“Flat form of usage.output_tokens.”
    • cache_sharenumber“Flat form of usage.cache_share.”
    • batchstring“Flat form of usage.batch (true / false).”
    • images_per_monthinteger“Flat form of usage.images_per_month.”
    • video_seconds_per_monthinteger“Flat form of usage.video_seconds_per_month.”
    • purposestring“ai-chat: what the buyer needs it for.”
    • tierstring“Only plans of this tier: free | basic | pro | max (AI subscriptions and picture/video tools), basic | standard | premium (streaming, music, VPN, cloud).”
    • deliver_to_countrystring“The buyer's country; decides the currency and the local prices (CZ prices for CZ).”
    • currencystring“Override the currency (e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • api_price_breakdown

    “What a month of AI API use costs per bill item for every model we compare (or one provider / chosen models): fresh input, input read from the cache, input written into the cache, output, and the tota…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    11 inputs
    • providerstring“Only this provider's models (Anthropic, OpenAI, Google, DeepSeek, Mistral, xAI, AI21 Labs, Amazon...), case-insensitive.”
    • modelsstring“Comma-separated plan ids from /digital/plans (category ai-api), e.g.”
    • messages_per_monthinteger“Requests a month.”
    • input_tokensinteger“Input tokens of one request.”
    • output_tokensinteger“Output tokens of one request.”
    • cache_sharenumber“Share of the input read from the cache (0-1).”
    • cache_write_sharenumber“Share of the input written into the cache (0-1, with cache_share at most 1).”
    • batchstring“Batch processing at the provider's batch discount, where it offers one.”
    • deliver_to_countrystring“The buyer's country; decides the local currency.”
    • currencystring“Override the local currency.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • digital_price_history

    “Every recorded change of a digital plan's price, newest first: plan_id, verified_on (the day it changed), from and to (price and currency), source (person = confirmed against the official page in our…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs
    • planstring“One plan id from /digital/plans.”
    • limitinteger“At most this many changes (default 100).”
  • compare_energy_from_bill

    “An indicative calculation (verified: false, with estimate_note like compare_energy).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    13 inputs, 3 required
    • commoditystringrequired“electricity | gas”
    • distributorstringrequired“cez-distribuce | egd | pre-distribuce | gasnet | gas-distribution | ppd”
    • ratestring“Electricity distribution rate, e.g.”
    • breakerstring“Main breaker, e.g.”
    • vt_mwhnumberrequired“Consumption in MWh in the billed period: high tariff or all (gas: all).”
    • nt_mwhnumber“Low-tariff consumption in MWh in the billed period.”
    • period_daysinteger“Days of the billed period (default 365).”
    • vt_price_mwhnumber“Supplier's commodity price per MWh without VAT.”
    • nt_price_mwhnumber“Supplier's low-tariff price per MWh without VAT.”
    • fee_monthnumber“Supplier's monthly fee without VAT.”
    • monthly_advancenumber“Monthly advance with VAT (used when the prices are missing).”
    • localestring“Language of estimate_note: cs | sk | en (default en).”
    • limitinteger
  • energy_unit_prices

    “An indicative calculation, not yet checked by an independent expert (verified: false); show estimate_note with the result.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    5 inputs
    • countrystring“CZ (default)”
    • ratestring“Electricity distribution rate, default D02d.”
    • mwhnumber“Yearly electricity consumption for all_in_kwh, default 2.5.”
    • gas_mwhnumber“Yearly gas consumption for all_in_kwh, default 9.”
    • localestring“Language of estimate_note: cs | sk | en (default en).”
  • energy_price_history

    “Development of household electricity and gas prices per kWh (Czechia), as published by Eurostat (semi-annual, all taxes and levies included, the most common consumption band), with the dataset link a…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs
    • countrystring“CZ (default)”
    • commoditystring
  • energy_suppliers

    “Facts from the suppliers' official price lists (verified: false: the yearly calculation built on them is not yet checked by an independent expert; estimate_note gives the sentence and the day of the …”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs
    • countrystring“CZ (default)”
    • idstring“Supplier id from the list, e.g.”
    • localestring“Language of the bill guide steps: cs | sk | en (default en).”
  • estimate_appliance_energy

    “An estimate (verified: false, estimate_note with the day of the prices).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    13 inputs, 1 required
    • kindstringrequired
    • label_kwh_yearnumber
    • kwh_per_100_cyclesnumber
    • washes_per_weeknumber
    • area_m2number
    • heat_need_kwh_m2number
    • sourcestring
    • scopnumber
    • efficiencynumber
    • distributorstring“Distributor area for the price (default: the first area with priced offers).”
    • price_per_kwhnumber“Own price of one kWh with VAT instead of ours.”
    • countrystring“CZ (default)”
    • localestring“Language of estimate_note: cs | sk | en (default en).”
  • watch_energy_fixation

    “A household gives its e-mail and the last day of its fixed electricity or gas price (fixation_end YYYY-MM-DD, today to 5 years ahead); optionally the distributor area, today's supplier (supplier_id f…”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    13 inputs, 3 required
    • emailstringrequired“The person's e-mail (they confirm it themselves).”
    • fixation_endstringrequired“Last day of the fixed price, YYYY-MM-DD.”
    • commoditystringrequired
    • distributorstring“cez-distribuce | egd | pre-distribuce | gasnet | gas-distribution | ppd: without it the alert is a reminder without prices.”
    • ratestring“Electricity rate, default D02d.”
    • mwhnumber“Yearly consumption MWh (high tariff or all).”
    • nt_mwhnumber
    • supplier_idstring
    • current_offer_idstring
    • countrystring“CZ (default)”
    • localestring“Language of the e-mails: cs | sk | en.”
    • ip_hashstring“sha-256 of the visitor's address with a daily salt (the website computes it).”
    • websitestring“Leave empty (spam trap).”
  • energy_watch_status

    “The watch behind a token from a watcher e-mail (the `t` of the link): status pending | confirmed, the end date, the day of the alert, the e-mail masked.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • tokenstringrequired
  • confirm_energy_watch

    “The double opt-in click: the confirmation token from the first watcher e-mail turns the watch on.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • tokenstringrequired
  • cancel_energy_watch

    “Deletes the watch behind a token from any watcher e-mail (confirmation or alert).”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    1 input, 1 required
    • tokenstringrequired
  • insurance_guide

    “An information comparison, not a ranking (prices: false, ranking: false, score: null): Fordeal is not an insurance intermediary, sells no insurance, shows no premium and recommends no policy.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    9 inputs
    • countrystring“CZ (default).”
    • kindstring“Only the insurers of this kind of insurance.”
    • onlinestring“true: only insurers whose official site concludes the asked kind (or any kind) online.”
    • assistancestring“true: only insurers whose site states a nonstop (24/7) assistance line.”
    • appstring“true: only insurers with an official mobile app for clients.”
    • claim_onlinestring“true: only insurers whose site takes a claim report online.”
    • sortstring“name (default) | rating | kinds.”
    • comparestring“Comma-separated insurer ids (2–3) for `comparison`.”
    • localestring“Language of the guide URLs (cs | sk | en …, default cs).”
  • list_my_price_watches

    “Every price watch of the person whose Supabase access token is sent (Authorization: Bearer <token>; an agent API key is refused).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • set_price_watch

    “Creates (or resets) the signed-in person's watch of one product (one per product).”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    4 inputs, 1 required
    • product_slugstringrequired“The product's slug (search_products, find_best_price).”
    • target_totalnumber“Mail when the total falls to or under this amount, in the currency of deliver_to_country.”
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“Language of the alert mails.”
  • update_price_watch

    “Changes one of the signed-in person's watches: `paused: true` stops the mails until `paused: false`; `target_total` sets a new limit (null = any real drop under the saved total).”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    4 inputs, 1 required
    • watch_idstringrequired“The watch's id from list_my_price_watches.”
    • pausedboolean
    • target_totalnumber or null
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • delete_price_watch

    “Deletes one of the signed-in person's watches; no more mails for it.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    1 input, 1 required
    • watch_idstringrequired“The watch's id from list_my_price_watches.”
  • list_my_favoriteson 2 other servers

    “Products (kind product, by slug, with the total saved at that time) and digital plans (kind digital, by plan id) the person saved with the heart, newest first.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    Takes no inputs.

  • save_favoriteon 1 other server

    “Adds a product (kind product, `id` = slug) or a digital plan (kind digital, `id` = plan id from compare_digital or compare_mobile) to the signed-in person's favourites.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • kindstringrequired
    • idstringrequired
  • remove_favoriteon 4 other servers

    “Removes a product or a digital plan from the signed-in person's favourites.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 2 required
    • kindstringrequired
    • idstringrequired
  • list_my_comparisons

    “Comparisons the person saved (2 to 4 digital plans each), newest first, with the page address and, when the person chose to share one, its share link.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • save_comparison

    “Saves 2 to 4 digital plans (plan ids from compare_digital / compare_mobile) as a private comparison in the signed-in person's account.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    3 inputs, 1 required
    • itemsarrayrequired
    • namestring
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • share_comparison

    “`shared: true` makes a read-only link (a new random token; an older link stops working); `shared: false` removes the link.”

    Publisher declares: read-only no · destructive yes · idempotent no · open-world no

    3 inputs, 2 required
    • comparison_idstringrequired“The comparison's id from list_my_comparisons.”
    • sharedbooleanrequired
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • delete_comparison

    “Deletes one of the signed-in person's saved comparisons; its share link stops working.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    1 input, 1 required
    • comparison_idstringrequired“The comparison's id from list_my_comparisons.”
  • list_my_listson 1 other server

    “Every named list of the person whose Supabase access token is sent (Authorization: Bearer <token>; an agent API key is refused), oldest first, each with its products (newest first, the private note a…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • “Creates an empty private list (e.g.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    2 inputs, 1 required
    • namestringrequired“The list's name, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • “Changes one of the signed-in person's lists: `name` renames it; `shared: true` makes a read-only link (a new random token, an older link stops working), `shared: false` removes the link.”

    Publisher declares: read-only no · destructive yes · idempotent no · open-world no

    4 inputs, 1 required
    • list_idstringrequired“The list's id from list_my_lists.”
    • namestring“The list's name, e.g.”
    • sharedboolean
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • “Deletes one of the signed-in person's lists with its products; its share link stops working.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    1 input, 1 required
    • list_idstringrequired“The list's id from list_my_lists.”
  • “Adds a product (by slug) to one of the signed-in person's lists with an optional private note; the product's total for `deliver_to_country` today is kept as saved_total (for "the price changed since …”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    5 inputs, 2 required
    • list_idstringrequired“The list's id from list_my_lists.”
    • product_slugstringrequired“The product's slug (search_products, find_best_price).”
    • notestring or null“A private note to the product (at most 280 characters); never shown on the share link.”
    • deliver_to_countrystring“ISO 3166-1 alpha-2 country code, e.g.”
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • remove_from_liston 2 other servers

    “Removes a product from one of the signed-in person's lists; `removed: false` when it was not there.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    3 inputs, 2 required
    • list_idstringrequired“The list's id from list_my_lists.”
    • product_slugstringrequired
    • localestring“BCP 47 locale for human-readable strings, e.g.”
  • check_shop_feed

    “Before or instead of registering: reads one product feed and answers whether Fordeal can use it.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    8 inputs, 1 required
    • feed_urlstring“The feed's public address (Heureka, Zboží, Google Merchant, Ceneo, Idealo, Árukereső XML or CSV).”
    • feed_contentstring“The feed file as text (XML or CSV), at most 8 MB.”
    • feed_base64string“The feed file's bytes as base64, for a gzip-packed file (.xml.gz).”
    • filenamestring“The file's name, echoed back.”
    • countrystringrequired“The shop's delivery country (ISO code from GET /api/v1/deals/countries): its currency and the shipping the total uses.”
    • domainstring“The shop's host, e.g.”
    • formatstring“The feed format when known; detected from the content otherwise.”
    • preview_itemsinteger“How many items the preview shows (default 6, at most 24).”
  • register_shop

    “One call registers a shop (P01): name, domain, delivery country, contact e-mail, the feed (its address in `feed_url`, or the file in `feed_content` / `feed_base64`), how commission is paid and the ac…”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    14 inputs, 7 required
    • shop_namestringrequired“The shop's name as it should appear in the comparison.”
    • domainstringrequired“The shop's domain or URL, e.g.”
    • countrystringrequired“Delivery country of the shop, ISO 3166-1 alpha-2 from GET /api/v1/deals/countries.”
    • emailstringrequired“Contact e-mail of the shop; it receives the confirmation link and the decision.”
    • feed_urlstring“The product feed (Heureka, Zboží, Google Merchant, Ceneo, Idealo, Árukereső XML or CSV).”
    • feed_contentstring“The feed as a file instead of an address: the XML or CSV text itself (at most 8 MB).”
    • feed_base64string“The feed file's bytes as base64, for a gzip-packed file (.xml.gz, .csv.gz).”
    • feed_filenamestring“The uploaded file's name, kept with its fingerprint.”
    • affiliatestringrequired“How commission is paid: "own" = forDeal's own programme (5 % of the net order value, partner portal), a network name the country lists (ehub, cj, awin, dognet,…”
    • terms_versionstringrequired“The partner terms version being accepted; today 2026-10-09 (the terms are at /partner/smlouva).”
    • accept_termsbooleanrequired“true = the contact accepts the partner terms of the given version.”
    • localestring“Language of the mails (cs, sk, en, …); the country's default language when absent.”
    • notestring
    • websitestring“Leave empty (spam trap: a filled value is discarded quietly).”
  • get_shop_registration

    “What happened to a registration (register_shop answers `id`; the id is the key, nothing else is needed): status diagnosing | received | approved | rejected | active, whether the contact confirmed, th…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • idstringrequired“The request id from the registration answer.”
  • verify_shop_domain

    “After register_shop: publish <meta name="fordeal-verification" content="TOKEN"> on the shop's home page, or the token as the whole content of https://DOMAIN/fordeal-verification.txt, then call this w…”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    2 inputs, 2 required
    • domainstringrequired“The shop's domain as registered.”
    • tokenstringrequired“The token from verification.ownership of the registration answer.”
  • get_shop_feed_diagnostics

    “The report of a compared shop's last feed read (P04): health ok | warn | fail, counts (items, with EAN, price, picture, availability, shipping, category), and coded issues (no_items, items_skipped, f…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • slugstringrequired“The shop's slug from list_shops or GET /api/v1/deals/shops.”
  • list_my_shops

    “The shops whose numbers the signed-in person may read: a contact of a shop in Fordeal's own affiliate programme whose partnership the operator approved and whose domain is proven (`access: partner`; …”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    Takes no inputs.

  • get_shop_statistics

    “How many people Fordeal sent to the shop in a window of UTC days (`from`/`to` YYYY-MM-DD, both included; the last 30 days by default, at most 366): the total, every day (zero days included), per deli…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs, 1 required
    • shopstringrequired“The shop's slug from list_my_shops.”
    • fromstring“First UTC day (YYYY-MM-DD); 29 days before `to` by default.”
    • tostring“Last UTC day (YYYY-MM-DD); today by default.”
  • send_cooperation_inquiry

    “The cooperation forms (docs/texty/formulare.md 2–4) without the website.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    14 inputs, 4 required
    • kindstringrequired“Who writes: partner | media | creator.”
    • namestringrequired“The contact person (partner, media) or the name of the channel (creator).”
    • emailstringrequired“Where the confirmation and the answer go; never shown.”
    • messagestringrequired“The offer and its terms (partner), the topic or the information needed (media), the idea (creator).”
    • organizationstring“The company or network (partner, required), the newsroom or medium (media, required).”
    • websitestring“The partner's website or the creator's main channel (required for both).”
    • marketsarray or string“Markets the offer is about, ISO codes (partner, required): an array or a comma-separated string.”
    • cooperation_typestring“What a partner offers (required for a partner).”
    • topicstring“The creator's topic and audience (required for a creator).”
    • deadlinestring“The day the media need an answer by (YYYY-MM-DD).”
    • linksstring“Documentation, a feed, the article, other channels or a media kit (links as text).”
    • localestring“Language of the confirmation (cs, sk, en; others get English).”
    • ip_hashstring“sha-256 of the sender's address with a daily salt (the website computes it); counts the per-visitor limit.”
    • nicknamestring“Leave empty (spam trap: a filled value is discarded quietly).”
  • send_contact_message

    “The /kontakt form without the website: `name`, `email` (where the answer goes), `topic` general | support | cooperation | privacy and `message` (10 to 4 000 characters).”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    7 inputs, 4 required
    • namestringrequired“Who writes (a name or how to address the person).”
    • emailstringrequired“Where the answer goes; never shown, never mailed by the form itself.”
    • topicstringrequired“general = a question about Fordeal, a price or a shop; support = a problem with the website or the account; cooperation = partners, media, creators (shops regi…”
    • messagestringrequired“The message itself, 10 to 4 000 characters.”
    • localestring“Language of the page the person wrote from (cs, sk, en, …).”
    • ip_hashstring“sha-256 of the sender's address with a daily salt (the website computes it); counts the per-visitor limit.”
    • nicknamestring“Leave empty (spam trap: a filled value is discarded quietly).”

Each quoted sentence is the first sentence of the publisher’s own description. The kind of tool and the “changes data” mark are our AI model’s reading of that description, not something we tested: two differently worded runs had to agree, otherwise no label is shown, and nobody has checked them by hand. A tool without the “changes data” mark is described as only reading, searching or calculating, or the two runs did not agree. No tool was called. Read the publisher’s full description before relying on it. “Publisher declares” lists the hints the server itself sends with the tool (MCP annotations: read-only, destructive, idempotent, open-world); they are the publisher's claims, not checked by us. Inputs are the parameters in the tool's own input schema: name, declared type, whether it is required, and the first sentence of its description. Read 2026-10-30.

How well are its tools described?

Features #4 and #5

How clearly this server's own tool descriptions say what a tool does, and how consistent its tool list is. The first part is an AI model's yes/no reading of each description; the second part is counted. We do not turn it into a grade.

Descriptions

AI reading of each description

No AI reading was available for this server's tools (the two runs did not agree, or the listing was not reviewed).

Counted from the listing

Parameters with a description
83% of 306
Tools with a description
100% of 55
Typical description length
732 characters

The tool set

Counted from the listing

Tools
55
Size of the list
about 27,070 tokens for an agent to load (characters ÷ 4)
Naming
55 of 55 names use snake_case

AI reading: easy to mix up

No pair found.

The AI items cover 0 of 55 tools: for a tool where two differently worded runs disagreed, that item is left out. They were not checked by hand, and no tool was called. “Easy to mix up” means two tools whose names or descriptions overlap without saying how they differ; the AI found none, comparing tools within groups of 40. We do not rate whether the tool set is complete or whether side effects are spelled out, because our AI reading of those was not reliable enough.

How do I add it to my client?

Config from the registry entry

From the remote endpoint (Streamable HTTP)

We connected to this URL on 2026-10-30 (a read-only session: no tool was called).

Add to CursorAn install link in the format Cursor documents, holding the Cursor config below.

Claude Desktop or claude.ai
Settings → Connectors → Add custom connector, then paste:
https://fordeal.ai/mcp
Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
  "mcpServers": {
    "price-hunter": {
      "url": "https://fordeal.ai/mcp"
    }
  }
}
VS Code · .vscode/mcp.json
{
  "servers": {
    "price-hunter": {
      "type": "http",
      "url": "https://fordeal.ai/mcp"
    }
  }
}
VS Code (command line) · Bash or zsh terminal (macOS, Linux)
code --add-mcp '{"name":"price-hunter","type":"http","url":"https://fordeal.ai/mcp"}'
Claude Code
claude mcp add --transport http price-hunter https://fordeal.ai/mcp
Cline · cline_mcp_settings.json (Cline CLI: ~/.cline/data/settings/; in the editor: MCP Servers → Configure → Configure MCP Servers)
{
  "mcpServers": {
    "price-hunter": {
      "type": "streamableHttp",
      "url": "https://fordeal.ai/mcp",
      "disabled": false,
      "autoApprove": []
    }
  }
}
Gemini CLI · ~/.gemini/settings.json, or .gemini/settings.json in a project
{
  "mcpServers": {
    "price-hunter": {
      "httpUrl": "https://fordeal.ai/mcp"
    }
  }
}
OpenAI Codex · ~/.codex/config.toml, or .codex/config.toml in a trusted project
[mcp_servers.price-hunter]
url = "https://fordeal.ai/mcp"
Zed · Zed settings file (command: zed: open settings file)
{
  "context_servers": {
    "price-hunter": {
      "url": "https://fordeal.ai/mcp"
    }
  }
}
Try it in the MCP Inspector · runs on your machine, opens in your browser · Node 22.19+
npx @modelcontextprotocol/inspector@2.11.0 --server-url https://fordeal.ai/mcp --transport http
  • Optional settings the entry also lists (left out above): Authorization.
  • The server runs on the operator's infrastructure; it may ask you to sign in when you first connect.
  • Zed's docs we read on 2026-10-26 describe remote servers by URL and do not name the transport.
  • The MCP Inspector lists the server's tools, resources and prompts; a tool you call there runs for real.

Built from the server's registry entry with each client's documented format (checked 2026-10-14; the Cursor link and the VS Code command 2026-10-19; the MCP Inspector command 2026-10-21; Cline, Gemini CLI, OpenAI Codex and Zed 2026-10-26). Values in < > are yours to fill in; this page never contains a key. Where the server needs a setting the entry does not declare, it can still fail to start.

Does the registry listing match what we found?

Feature #6

The registry checks an entry when it is published (each new version), and nothing re-checks it on a schedule. A difference below is about the listing, not a judgement of the publisher.

Registry saysWe foundResultSource · date
Remote endpoint fordeal.ai/mcpSession openedmatchesour test · 2026-10-30
No credential declared as requiredOpened a session without any credentialmatchesour test · 2026-10-30
Repository github.com/banbosh/fordealDoes not open (not found or private)differsapi.github.com · 2026-10-30

Who made it?

Feature #7 · lineage

Facts about the publisher. We do not turn them into a trust score.

Namespace
ai.fordeal
Repository
github.com/banbosh/fordeal — does not open publicly

Source: the registry entry and api.github.com · 2026-10-30.

Publish this server? Run these checks against it yourself before release, from your own machine: a server the command starts, or your own server at its URL after a one-time proof that you control it: npx protocolprobe-selftest.

Choosing

Record checks

Public records · not a safety rating

1 of 2 record checks met · 7 do not apply

  • Not ranked by downloads: a remote server publishes no download figure
  • Not ranked by stars: no public GitHub repository
  • MetRegistry entry is active and says how to run itActive, with a package or a remote address.
  • Not metSource repository link opensThe linked repository returned HTTP 404: it does not exist or is private.What changes this check: This check opens the repository link in the registry entry. GitHub's documentation describes changing a repository's visibility in its Settings, under Danger Zone, Change visibility. GitHub: setting repository visibility
  • Does not applyRepository is not archivedNo public GitHub repository to read.
  • Does not applyCode pushed to the repository in the 90 days before our checkNo public GitHub repository to read.
  • Does not applyRepository publishes a security policy (SECURITY.md)No public GitHub repository to read.
  • Does not applyPackage names its licence with a standard (SPDX) identifierRemote server: it ships no package.
  • Does not applyThe version the registry lists can be installed and is not withdrawnRemote server: it ships no package.
  • Does not applynpm package carries build provenance (attestation)Remote server: it ships no package.
  • Does not applyNo known critical or high advisory in the package or its dependenciesRemote server: it ships no package.

Read from public records only: the registry entry, npm/PyPI, GitHub and advisory databases, checked 2026-10-30. No tool was called. Only “met” and “not met” are counted, so the total differs between servers; a check that does not apply or that we could not run is listed, never counted against it. It is not a safety rating, and the same rules apply to every server. How each check works · Leaderboards · How we stay neutral

Common questions about ai.fordeal/price-hunter

Answered from the data above

Who publishes ai.fordeal/price-hunter?

The registry ties the namespace ai.fordeal to the domain fordeal.ai; only its owner can publish under it. Its linked repository, github.com/banbosh/fordeal, does not open publicly (missing or private). These are facts from the registry and GitHub, not a rating.

Is ai.fordeal/price-hunter safe to install?

We do not rate servers as safe or unsafe. 1 of its 2 applicable record checks are met (facts from public records, each listed on this page). What the records show: The repository it links to does not open publicly, so its code cannot be inspected through that link. These are facts with their sources on this page, not a safety guarantee, and we did not run its tools.

Does ai.fordeal/price-hunter need an API key or sign-in?

It opened a session without any credential on 2026-10-30. The registry entry declares no required credential; no declaration is not a guarantee.

Has ai.fordeal/price-hunter been security tested?

Partly. 3 of the 14 checks that apply to it were exercised. It accepted a session without any credential and lists tools whose names suggest they change data. We did not call them. ProtocolProbe publishes no security verdict for a named server.

Where is the source code of ai.fordeal/price-hunter?

The registry links to github.com/banbosh/fordeal, but that link does not open publicly, so the code cannot be inspected through it.

Found this page useful?

Anonymous · no sign-in

A quick, anonymous reaction — no account, no email. One per kind from your browser. The tally updates when the page is next refreshed, and it is only a rough count, never a safety rating or a measured number of people.

Compare with another server

Side by side: registry entry, our read-only session, the tools and the 18 classification fields. Same values as each page; no score.

Security testing

What did we test, and what did we leave out?

18 checks · features #1, #2

Open without sign-in

It accepted a session without any credential and lists tools whose names suggest they change data. We did not call them. No security score is given; a check we did not run is never counted as passed.

The 18 checks at a glanceour test · 2026-10-30
  1. Inventory: exercised
  2. Hidden instructions: exercised
  3. Real execution: not run · our policy
  4. Secret leak: not run · nothing to check it against
  5. Internal addresses: not run · our policy
  6. Unconfirmed changes: not run · our policy
  7. Bad input: not run · our policy
  8. Model requests: not run · nothing to check it against
  9. Sensitive questions: not run · nothing to check it against
  10. Folder boundary: not run · our policy
  11. Log leaks: not run · nothing to check it against
  12. Hidden content: exercised
  13. Fake assistant turns: not applicable
  14. Token passthrough: not applicable
  15. Token audience: not applicable
  16. Sign-in redirect: not run · our policy
  17. Consent handling: not testable from outside
  18. Sign-in metadata: not applicable

3 exercised11 not run (reason given)4 not applicable

Each check ends in exactly one state: exercised, not run (with the reason), or not applicable (with the reason). 3 of the 14 checks that apply to it were exercised. We do not publish security-check outcomes for named servers.

Exercised · 3
  • 1Inventory
    tool-list
    Reads the declared tools, resources and prompts.exercised
  • 2Hidden instructions
    description-poisoning
    Looks for hidden instructions in tool descriptions.exercised
  • 12Hidden content
    audience-hiding
    Checks resources that hide content from the user.exercised
Not run, with the reason · 11
  • 3Real execution
    real-execution
    Calls a tool and checks what really happens.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 4Secret leak
    canary-leak
    Plants a fake secret and checks whether it leaks.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 5Internal addresses
    ssrf
    Checks whether a tool can be steered to internal addresses.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 6Unconfirmed changes
    write-without-confirmation
    Checks whether tools that change data act without asking.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 7Bad input
    error-handling
    Sends bad input and watches how the server answers.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 8Model requests
    sampling
    Checks whether the server asks the client's model to act for it.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 9Sensitive questions
    elicitation-sensitive-data
    Checks whether the server asks users for sensitive data.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 10Folder boundary
    root-boundary
    Checks whether the server reaches outside the folders it was given.This check calls the server's tools. ProtocolProbe calls no server's tools for anything it publishes; an operator can run this check on their own server with our self-test command.not run · our policy
  • 11Log leaks
    logging-side-channel
    Checks whether log messages carry data they should not.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 16Sign-in redirect
    open-redirect
    Checks the sign-in redirect for abuse.Testing the sign-in redirect means sending probes to the operator's sign-in service, which we do not do.not run · our policy
  • 17Consent handling
    confused-deputy
    Checks consent handling when one service acts for another.Depends on the operator's own consent screen, which differs per server and cannot be tested from outside.not testable from outside
Does not apply to this server · 4
  • 13Fake assistant turns
    fake-assistant-turn
    Checks prompts that pose as the assistant's own words.The server exposes no prompts.not applicable
  • 14Token passthrough
    token-passthrough
    Checks whether the server forwards a user's token to other services.The server opened a session without sign-in, so there is no token flow to check.not applicable
  • 15Token audience
    token-audience-validation
    Checks whether tokens meant for another service are accepted.The server opened a session without sign-in, so there is no token flow to check.not applicable
  • 18Sign-in metadata
    oauth-url-scheme
    Checks the published sign-in metadata for unsafe URLs.No sign-in (OAuth) metadata is published, so there are no sign-in addresses to check.not applicable

Source: our own test, 2026-10-30, mcp-runtime-engine@0.1.0. Which checks count and why follows our published scoring model.

What happened during the test?

Feature #8

The steps in order, as the test record holds them.

  1. 0 msStarted a read-only session with the server's remote endpoint
  2. 1,406 msConnected after 0 redirects. No credential was sent or needed.
  3. Read the inventory: 55 tools, 2 resources, 0 prompts.
  4. 8,823 msFinished: 3 checks exercised.

Reference

How is it classified?

18 fields

One value per field, each with its source. Fields written by AI models are marked. A field with no value says why.

TopicAI-classified
pending: added in a later update
listed 2026-10-30; not classified yet
Pricing modelAI-classified
pending: added in a later update
the website is not read yet
Programming language
does not apply
no existing GitHub repository
Hosting type
registry · 2026-10-30
MCP capability
resources, tools
our test · 2026-10-30
Transport
streamable HTTP
registry · 2026-10-30
Required credentials
none declared
registry · 2026-10-30 · no declaration is not a guarantee
Package registry
does not apply
remote-only server: no package is shipped, so there is no package registry
Freshness
0–30 days
registry updatedAt · 2026-10-30
Lifecycle status
registry · 2026-10-30
License class
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Integrity hash
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Signature / provenance
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Dependency advisories
does not apply
ships no package, so there are no dependencies to audit
Popularity
does not apply
remote-only server: ships no package, so there is nothing to look up in a package registry
Publisher signals
not stated
no readable GitHub owner to describe
Maintenance
not stated
repository link is dead (HTTP 404), so activity cannot be read
Environment
the publisher's infrastructure
where it runs, from the hosting type · 2026-10-30

“Not stated” means the source did not state it; “does not apply” means it does not apply to this kind of server; “our limit” means our own lookup failed. A linked value opens the directory filtered to the same value.

Cite or correct this page

Sources and corrections

Suggested citation

ProtocolProbe. “ai.fordeal/price-hunter: MCP server record.” Data checked 2026-10-30. https://protocolprobe.com/mcp/servers/ai.fordeal/price-hunter

Figures are valid for the date shown. Our facts on this page are CC BY 4.0: reuse them with a link and the check date. Quoted text (the publisher’s descriptions, website quotes, tool names) is not ours to license.

As JSON: this record in the API · API documentation.

Badge for your README

ProtocolProbe: 1 of 2 record checks met

[![ProtocolProbe](https://protocolprobe.com/api/v1/badge/ai.fordeal/price-hunter)](https://protocolprobe.com/mcp/servers/ai.fordeal/price-hunter)

It shows this server's record-check count: facts from public records, no tool called. It is not a security rating or a pass. It links here and updates after each data reload.

Something wrong, or is this yours?

If a fact here is wrong, tell us and we will re-check it. If you operate this server, you can run our checks on it yourself with the free self-test command; we call no server’s tools ourselves for anything shown here.

Write to hello@protocolprobe.com · corrections log · methodology