Fordeal
REMOTE · FORDEAL.AI
Price comparison for CZ/SK: product prices, shops, digital plans via Streamable HTTP.
Available components
Last scanned (7 hours ago)
Scores higher than 53% of remote servers
Reachable. Last reached 5 Nov 2026.
Category E-commerce
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (cancel_energy_watch). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability71
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 20213 tokens (~315/item across 64 items; 62 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
- Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage95
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 84% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 9 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 64 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 0
- New tool “delete_my_account”, which the server declares destructive security
- New tool “manage_price_watch”, which the server declares destructive security
- New tool “sign_out”, which the server declares destructive security
- Tool “add_to_list” rewrote its description, which is the text the model reads security
- Tool “compare_energy” rewrote its description, which is the text the model reads security
- Tool “digital_price_history” rewrote its description, which is the text the model reads security
- Tool “find_best_price” rewrote its description, which is the text the model reads security
- Tool “list_my_lists” rewrote its description, which is the text the model reads security
- Tool “price_history” rewrote its description, which is the text the model reads security
- Tool “remove_from_list” rewrote its description, which is the text the model reads security
- Tool “save_favorite” rewrote its description, which is the text the model reads security
- Tool “search_products” rewrote its description, which is the text the model reads security
- Schema quality: 18271 → 20213 ▼ functional
- New tool “get_my_profile” functional
- New tool “price_watch_status” functional
- New tool “update_my_profile” functional
- “add_to_list” added an optional parameter “digital_id” cosmetic
- “daily_deals” added an optional parameter “locale” cosmetic
- “price_history” added an optional parameter “locale” cosmetic
- “remove_from_list” added an optional parameter “digital_id” cosmetic
- “save_favorite” added an optional parameter “deliver_to_country” cosmetic
- “search_products” reworded the description of “brand” cosmetic
- “add_to_list” made “product_slug” optional cosmetic
- “remove_from_list” made “product_slug” optional cosmetic
- Tool “add_to_list” changed its title: Add a product to a named list → Add a product or a digital plan to a named list cosmetic
- Tool “remove_from_list” changed its title: Remove a product from a named list → Remove a product or a digital plan from a named list cosmetic
- 4 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.
- 3 Nov 26 0
- Tool “compare_energy” rewrote its description, which is the text the model reads security
- New tool “watch_product_price” functional
- “search_products” reworded the description of “attr” cosmetic
- “search_products” reworded the description of “facets” cosmetic
- 2 Nov 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Oct 26 0
- Stability: unverified → 0.03 ▲ functional
- 30 Oct 26 66
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://fordeal.ai/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=fordeal.ai | CN=YE1,O=Let's Encrypt,C=US | 15 Oct 2026 | 13 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 61df9cbd8d6691f206711da9209dd904ebf |
| SANs: *.fordeal.ai, fordeal.ai | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of fordeal.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 1814, 3799 | 8, 8 | Verified |
| fordeal.ai. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| content-security-policy | default-src 'none'; frame-ancestors 'none' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
| permissions-policy | camera=(), microphone=(), geolocation=() |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://fordeal.ai/mcp | Verified | 200 | |
| http (plaintext) | http://fordeal.ai/mcp | HTTPS enforced | 301 | https://fordeal.ai/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
search_products Search and filter compared products ~1,680
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 total `lowest_total` beside it, with capture time and `price_status` verified | estimate | incomplete), number of shops, best shop and trust label. Give `query` (free text, every word must match; 8 to 14 digits are an EAN, matched exactly) and/or `category` (a slug from GET /api/v1/deals/categories, e.g. letni-pneumatiky, mobilni-telefony), or neither to browse the whole catalogue (the website's /produkty page), or `slugs` (product slugs) to compare named products side by side; then any filters: price_min/price_max, brand, shops, shop_country (e.g. DE for offers from Germany), in_stock, on_sale, free_shipping, min_shop_rating, min_product_rating, attr (key:value pairs); sort price (lowest product price first, the default), price_desc, total (lowest total with shipping, opt-in; or include_shipping=true), total_desc, discount, shops, popular, rating, score, name. Answers at most `limit` products (default 20) from `offset`; `total_matches` counts every match, and `facets: true` adds the brands, shops, price range and attribute values with counts over the whole filtered list. With `query`, `query_match` says how the list answers it (all = every word found; partial = some words were dropped or matched only by typo tolerance; fallback = no product has the words, the list is the closest category's; none = nothing matches) and every product carries `match` (exact | close = another variant | partial = the name lacks some query words, `match_note` names them | fallback = not a match); never present a partial or fallback product as the asked-for item. Next: find_best_price with a product name for the full card with every offer, or price_history with `slug`.
| Name | Type | Req | Description |
|---|---|---|---|
| attr | – | – | Attribute filter as `key:value` pairs (comma-separated in a query string, or repeated). The same key twice means any of its values; different keys must all match. Keys and values are those of `facets… |
| brand | – | – | Brand or brands, matched case-insensitively against the exact brand name. MCP: an array of names (each item is one whole name, commas kept, e.g. ["Euromedia Group, a.s.", "Grada"]). Query string: rep… |
| category | string | – | Category slug (leaf, main category or group). |
| deliver_to_country | string | – | ISO 3166-1 alpha-2 country code, e.g. "CZ". Optional: normally derived from the address. |
| facet_attributes | boolean | – | false = facets without `attributes` (the whole catalogue without a category has about 1 800 attribute keys; the website's /produkty asks without them). |
| facets | boolean | – | 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_stock/on_sale/free_shipping counts and… |
| free_shipping | boolean | – | Only products with free delivery at the shown offer. |
| in_stock | boolean | – | Only products whose shown offer is in stock. |
| include_shipping | boolean | – | Order by the total with shipping to `deliver_to_country` instead of the product price (sort=total). Default false. |
| limit | integer | – | – |
| locale | string | – | BCP 47 locale for human-readable strings, e.g. "en", "cs", "sk". Defaults to the country's default locale. |
| min_product_rating | number | – | Lowest rating of the product itself, 0..1: the shops' own customer reviews and forDeal reviews (0.9 = 90 %). |
| min_shop_rating | number | – | Lowest rating of the shown shop, 0..1 (0.9 = 90 % / 4.5 stars). |
| offset | integer | – | Rows to skip before `limit` (paging). `total` in the answer is the number of matching products before offset and limit, so offset + count < total means there is another page. |
| on_sale | boolean | – | Only products with a shop discount or a measured drop. |
| price_max | number | – | Highest product price in the deliver-to currency (shipping not counted). |
| price_min | number | – | Lowest product price in the deliver-to currency (the shown offer's goods price, shipping not counted). |
| q | string | – | Short name of `query` (the same search; `query` wins when both are given). |
| query | string | – | Free text; every word must appear in the product name. 8 to 14 digits are an EAN (exact match on the product's or an offer's barcode). |
| shop_country | – | – | Country codes of the shops (e.g. DE to see offers from Germany). |
| shops | – | – | Shop slugs (e.g. datart-cz); a product passes when one of them prices it. |
| slugs | – | – | Product slugs (comma-separated or an array): only these products, every filter still applies. The website's product comparison (/produkty/porovnat?p=a,b,c) compares up to 4. |
| sort | string | – | relevance = best match first (the default with `query`; the answer card names the first row), price = lowest product price first (the default without `query`; shipping is shown per product, not count… |
No output schema declared.
No examples provided.
send_contact_message Write a message to Fordeal (the contact form) ~361
The /kontakt form without the website: `name`, `email` (where the answer goes), `topic` general | support | cooperation | privacy and `message` (10 to 4 000 characters). The message goes as one notice to hello@fordeal.ai with the sender as Reply-To; a person answers by e-mail. The sender gets no automatic e-mail (the answer here is the confirmation of receipt, with `id`). The same message twice on one day answers the same id with `duplicate: true`. A shop that wants to be compared uses register_shop; a partner, the media or a creator may use send_cooperation_inquiry for a structured request. Public, no key; five messages a minute per caller.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Where the answer goes; never shown, never mailed by the form itself. | |
| ip_hash | string | – | sha-256 of the sender's address with a daily salt (the website computes it); counts the per-visitor limit. Never stored. |
| locale | string | – | Language of the page the person wrote from (cs, sk, en, …). |
| message | string | yes | The message itself, 10 to 4 000 characters. |
| name | string | yes | Who writes (a name or how to address the person). |
| nickname | string | – | Leave empty (spam trap: a filled value is discarded quietly). |
| topic | string | yes | general = a question about Fordeal, a price or a shop; support = a problem with the website or the account; cooperation = partners, media, creators (shops register on /obchody); privacy = a request a… |
No output schema declared.
No examples provided.
send_cooperation_inquiry Write to Fordeal about cooperation (partners, media, creators) ~521
The cooperation forms (docs/texty/formulare.md 2–4) without the website. `kind` partner (an affiliate network, a feed provider or a technical integration: organization, website, markets as ISO codes, cooperation_type affiliate | feed | integration | other, message = the offer and its terms), media (name, organization = the newsroom, message = the topic or the information needed, optional deadline YYYY-MM-DD and links) or creator (name or channel, website = the main channel, topic = the content's topic and audience, message = the idea, optional links: other channels, media kit). A shop that wants to be compared uses register_shop instead. A person reads every message; the sender gets a confirmation of receipt (not an approval) and the operator one notice. The same message twice within a day answers the first id with duplicate true. Public, no key; five messages a minute per caller. 503 not_available until migration 0065 is applied.
| Name | Type | Req | Description |
|---|---|---|---|
| cooperation_type | string | – | What a partner offers (required for a partner). |
| deadline | string | – | The day the media need an answer by (YYYY-MM-DD). |
| string | yes | Where the confirmation and the answer go; never shown. | |
| ip_hash | string | – | sha-256 of the sender's address with a daily salt (the website computes it); counts the per-visitor limit. Never stored as an address. |
| kind | string | yes | Who writes: partner | media | creator. |
| links | string | – | Documentation, a feed, the article, other channels or a media kit (links as text). |
| locale | string | – | Language of the confirmation (cs, sk, en; others get English). |
| markets | – | – | Markets the offer is about, ISO codes (partner, required): an array or a comma-separated string. |
| message | string | yes | The offer and its terms (partner), the topic or the information needed (media), the idea (creator). |
| name | string | yes | The contact person (partner, media) or the name of the channel (creator). |
| nickname | string | – | Leave empty (spam trap: a filled value is discarded quietly). |
| organization | string | – | The company or network (partner, required), the newsroom or medium (media, required). |
| topic | string | – | The creator's topic and audience (required for a creator). |
| website | string | – | The partner's website or the creator's main channel (required for both). |
No output schema declared.
No examples provided.
set_price_watch Watch the total price of a product ~238
Creates (or resets) the signed-in person's watch of one product (one per product). Fordeal mails the person when the recommended total for `deliver_to_country` (goods + shipping, same meaning as on the website) falls under `target_total`, never twice for one price and at most once a day. Without `target_total` the target is today's total: the mail comes when the price really drops (by the currency's step, e.g. 50 CZK). Today's total is stored as saved_total. Needs the person's access token. Answers the watch as list_my_price_watches shows it.
| Name | Type | Req | Description |
|---|---|---|---|
| deliver_to_country | string | – | ISO 3166-1 alpha-2 country code, e.g. "CZ". Optional: normally derived from the address. |
| locale | string | – | Language of the alert mails. Default: the person's, then the country's. |
| product_slug | string | yes | The product's slug (search_products, find_best_price). |
| target_total | number | – | Mail when the total falls to or under this amount, in the currency of deliver_to_country. Default: today's total. |
No output schema declared.
No examples provided.
share_comparison Share or stop sharing a saved comparison ~116
`shared: true` makes a read-only link (a new random token; an older link stops working); `shared: false` removes the link. The link shows the plans at today's prices and the name, never the owner.
| Name | Type | Req | Description |
|---|---|---|---|
| comparison_id | string | yes | The comparison's id from list_my_comparisons. |
| locale | string | – | BCP 47 locale for human-readable strings, e.g. "en", "cs", "sk". Defaults to the country's default locale. |
| shared | boolean | yes | – |
No output schema declared.
No examples provided.
sign_out Sign the person out (revoke the sessions) ~84
Signs the person out: scope global (default) revokes every session of the account on every device, local only the session of this token. The access token is refused from then on; the person needs a new e-mail sign-in link. Saved favourites, lists and watches stay.
| Name | Type | Req | Description |
|---|---|---|---|
| scope | string | – | global (every device, default) or local (this session). |
No output schema declared.
No examples provided.
trending_new_products The most searched new products today (the home page's first row) ~453
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 shipping at a rated shop, shops, in stock, capture time) plus `trending` with `score`, `parts` (the points of generation, newness, interest, gsc, growth, keyword, seed) and `raw` (model number and its place among the line's generations, days since the family entered the catalogue, decayed interest, Search Console weight, shops that started to list it, variants). A product qualifies when its model number is the newest or the one before in its line (iPhone 18 against iPhone 17), or its model family entered the catalogue in the last 75 days, and someone searched for it, clicked to a shop, found it on Google or a shop started to list it; the score adds model generation 40, newness 10, searches (halved every 7 days over 28 days) and human clicks 25 × log2(1 + n), Search Console 15 × log2(1 + n), new shops 12 × log2(1 + n). Colours and capacities are one card (the cheapest variant); at most 4 cards per category, 3 per brand and 3 per shop. Only products with two or more shops, a rated shop with known shipping and a price in stock; a shop on the ČOI/SOI risk list is never shown. Recomputed by the worker each night; `generated_at` says when, null before the first run. Next: get_product with a product slug for the full comparison.
| Name | Type | Req | Description |
|---|---|---|---|
| deliver_to_country | string | – | ISO 3166-1 alpha-2 country code, e.g. "CZ". Optional: normally derived from the address. |
| limit | integer | – | Cards to return, at most 12 (default 12). |
| locale | string | – | BCP 47 locale for human-readable strings, e.g. "en", "cs", "sk". Defaults to the country's default locale. |
No output schema declared.
No examples provided.
update_list Rename, share or stop sharing a named list ~168
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. The link shows the list's name and products at today's prices, never the owner, the notes or the saved prices. Another id answers not_found.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | The list's id from list_my_lists. |
| locale | string | – | BCP 47 locale for human-readable strings, e.g. "en", "cs", "sk". Defaults to the country's default locale. |
| name | string | – | The list's name, e.g. Narozeniny (1 to 80 characters). |
| shared | boolean | – | – |
No output schema declared.
No examples provided.
update_my_profile Change the signed-in person's profile and settings ~189
Changes only the fields sent: name (at most 40 characters, empty string clears it), locale (language tag of our e-mails, e.g. cs), country (one of the markets of get_my_profile, null clears it), watch_emails (false pauses every active price watch of the account and remembers which; true resumes exactly those, never a watch the person paused themselves). Needs the person's access token. Answers the profile with `changed` (and watches_paused / watches_resumed).
| Name | Type | Req | Description |
|---|---|---|---|
| country | – | – | Market: an ISO country code from get_my_profile.markets. |
| locale | – | – | Language of our e-mails, e.g. cs, sk, en. |
| name | string | – | Shown with the person's reviews; at most 40 characters after trimming. |
| watch_emails | boolean | – | false = pause every price-watch e-mail; true = resume them. |
No output schema declared.
No examples provided.
update_price_watch Pause, resume or change the target of a price watch ~130
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). Only the token's own watches; another id answers not_found.
| Name | Type | Req | Description |
|---|---|---|---|
| locale | string | – | BCP 47 locale for human-readable strings, e.g. "en", "cs", "sk". Defaults to the country's default locale. |
| paused | boolean | – | – |
| target_total | – | – | – |
| watch_id | string | yes | The watch's id from list_my_price_watches. |
No output schema declared.
No examples provided.
verify_shop_domain Prove a shop's domain with a meta tag or a file ~191
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 with the domain and the token from `verification.ownership`. One request to each address with Fordeal's identified bot (www. and the bare host). The answer: ok with the method (meta | file, or already), or `error.code` not_found (no request with this domain and token) | not_verified (neither place carries the token; a CDN cache may take minutes). Proving the domain marks the request as confirmed, like the e-mail link; the operator still decides. Public.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | The shop's domain as registered. |
| token | string | yes | The token from verification.ownership of the registration answer. |
No output schema declared.
No examples provided.
watch_energy_fixation Watch the end of a fixed energy price (e-mail before it ends) ~392
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 from energy_suppliers) or product (current_offer_id from compare_energy products) and the consumption. Double opt-in: the e-mail first gets a confirmation link and nothing else is sent before the person clicks it (an agent cannot confirm for the person). A confirmed watch gets one e-mail 45 days before the end with the offers cheaper for its need (from the official price lists; an estimate). Every mail has a cancel link. Unconfirmed watches are deleted after 7 days, every watch 30 days after its end date. No account, no contract, no commission. At most 5 watches per e-mail. Ask the person for consent before passing their e-mail.
| Name | Type | Req | Description |
|---|---|---|---|
| commodity | string | yes | – |
| country | string | – | CZ (default) |
| current_offer_id | string | – | – |
| distributor | string | – | cez-distribuce | egd | pre-distribuce | gasnet | gas-distribution | ppd: without it the alert is a reminder without prices. |
| string | yes | The person's e-mail (they confirm it themselves). | |
| fixation_end | string | yes | Last day of the fixed price, YYYY-MM-DD. |
| ip_hash | string | – | sha-256 of the visitor's address with a daily salt (the website computes it). |
| locale | string | – | Language of the e-mails: cs | sk | en. |
| mwh | number | – | Yearly consumption MWh (high tariff or all). |
| nt_mwh | number | – | – |
| rate | string | – | Electricity rate, default D02d. |
| supplier_id | string | – | – |
| website | string | – | Leave empty (spam trap). |
No output schema declared.
No examples provided.
watch_product_price Watch the total price of a product without an account (e-mail, double opt-in) ~367
No account (UX-72): the person gives an e-mail and Fordeal mails them when the recommended total for `deliver_to_country` (goods + shipping, the product page's meaning) falls under `target_total` (default: today's total, i.e. any real drop by the currency's step), never twice for one price and at most once a day. Double opt-in: the address first gets only a confirmation link; nothing else is sent before the person clicks it (an agent cannot confirm for the person). Every alert has pause and cancel links that work without signing in (GET/POST /api/v1/price-watches/link). Unconfirmed watches are deleted after 7 days, confirmed ones 365 days after the confirmation. One watch per address and product, at most 20 per address; the answer is the same whether the address is known or not. Ask the person for consent before passing their e-mail. A signed-in person can use set_price_watch instead (no confirmation needed).
| Name | Type | Req | Description |
|---|---|---|---|
| deliver_to_country | string | – | ISO 3166-1 alpha-2 country code, e.g. "CZ". Optional: normally derived from the address. |
| string | yes | The person's e-mail (they confirm it themselves). | |
| ip_hash | string | – | sha-256 of the visitor's address with a daily salt (the website computes it). |
| locale | string | – | Language of the mails. Default: the country's. |
| product_slug | string | yes | The product's slug (search_products, find_best_price). |
| target_total | number | – | Mail when the total falls to or under this amount, in the currency of deliver_to_country. Default: today's total. |
| website | string | – | Leave empty (spam trap). |
No output schema declared.
No examples provided.
How do I install the Fordeal MCP server?
Fordeal is a hosted endpoint at https://fordeal.ai/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · fordeal.ai
claude mcp add --transport http ai-fordeal-price-hunter 'https://fordeal.ai/mcp'
What is the Fordeal MCP server?
Fordeal is an MCP server listed in the public MCP registry as ai.fordeal/price-hunter. Price comparison for CZ/SK: product prices, shops, digital plans via Streamable HTTP. This page covers its hosted endpoint (https://fordeal.ai/mcp).
Is the Fordeal MCP server safe to use?
Fordeal scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Fordeal MCP server expose?
Fordeal exposes 62 tools: compare_internet, search_products, cheaper_abroad, list_shops, find_best_price, and 57 more. Their descriptions and schemas cost roughly 19,653 tokens of context every time the server is loaded.
Does the Fordeal MCP server require authentication?
No. We connected to Fordeal without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Fordeal MCP server still maintained?
Fordeal is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.