Find cheap broadband deals
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use when the user asks whether their CURRENT broadband bill or plan, or a RENEWAL or retention offer their provider quoted, is expensive, competitive or worth switching from. Compares what they pay against comparable deals actually available at their address and returns a computed verdict with true 24-month savings. Present the verdict and figures verbatim rather than deriving your own. Each alternative's cost_24_months is its true cost over the 24-month comparison window; ask get_deal_details for a specific deal's whole-contract total. Set quote_type to 'renewal_offer' when evaluating a renewal quote.
UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds.
What the user currently pays per month in GBP (or the renewal price quoted to them).
The user's current broadband provider, as they said it, e.g. 'Sky' or 'Virgin Media'.
The user's current download speed in Mbps. If they only know their package name, ask or estimate from the provider's naming (e.g. 'M125' is about 132).
Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user.
'renewal_offer' when the user is evaluating a renewal or retention price their provider quoted; 'current_bill' (default) when it is what they pay today.
The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again.
Tool list last changed Oct 25, 2026.
Use when the user asks whether their CURRENT broadband bill or plan, or a RENEWAL or retention offer their provider quoted, is expensive, competitive or worth switching from. Compares what they pay against comparable deals actually available at their address and returns a computed verdict with true 24-month savings. Present the verdict and figures verbatim rather than deriving your own. Each alternative's cost_24_months is its true cost over the 24-month comparison window; ask get_deal_details for a specific deal's whole-contract total. Set quote_type to 'renewal_offer' when evaluating a renewal quote.
| Argument | Type | Description |
|---|---|---|
| uprn | string | Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user. |
| postcode* | string | UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds. |
| quote_type | string | 'renewal_offer' when the user is evaluating a renewal or retention price their provider quoted; 'current_bill' (default) when it is what they pay today. |
| monthly_bill* | number | What the user currently pays per month in GBP (or the renewal price quoted to them). |
| address_label | string | The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again. |
| current_provider* | string | The user's current broadband provider, as they said it, e.g. 'Sky' or 'Virgin Media'. |
| current_speed_mbps* | number | The user's current download speed in Mbps. If they only know their package name, ask or estimate from the provider's naming (e.g. 'M125' is about 132). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postcode",
"monthly_bill",
"current_speed_mbps",
"current_provider"
],
"properties": {
"uprn": {
"type": "string",
"pattern": "^\\d{6,14}$",
"description": "Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user."
},
"postcode": {
"type": "string",
"maxLength": 10,
"minLength": 5,
"description": "UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds."
},
"quote_type": {
"enum": [
"current_bill",
"renewal_offer"
],
"type": "string",
"description": "'renewal_offer' when the user is evaluating a renewal or retention price their provider quoted; 'current_bill' (default) when it is what they pay today."
},
"monthly_bill": {
"type": "number",
"maximum": 500,
"description": "What the user currently pays per month in GBP (or the renewal price quoted to them).",
"exclusiveMinimum": 0
},
"address_label": {
"type": "string",
"maxLength": 160,
"description": "The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again."
},
"current_provider": {
"type": "string",
"maxLength": 60,
"minLength": 2,
"description": "The user's current broadband provider, as they said it, e.g. 'Sky' or 'Virgin Media'."
},
"current_speed_mbps": {
"type": "number",
"maximum": 10000,
"description": "The user's current download speed in Mbps. If they only know their package name, ask or estimate from the provider's naming (e.g. 'M125' is about 132).",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Use when the user wants broadband deals, offers or packages available where they live. If the user has not picked an address yet, call search_addresses first and offer the list; fall back to postcode-only search when they decline or no addresses are found (the precision field says which you got). Pass address_label alongside uprn once an address is picked. Translate the user's needs into the filter inputs. Present the returned picks and computed costs verbatim: never re-rank, re-filter or recalculate totals yourself. total_contract_cost and effective_monthly_cost already account for intro pricing, post-intro rises and setup fees. After presenting, ask one short follow-up about what matters to them (budget, speed needs, contract length, avoiding price rises) and refine with the filter inputs.
| Argument | Type | Description |
|---|---|---|
| uprn | string | Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user. |
| postcode* | string | UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds. |
| provider | string | Only show deals from this provider, when the user names one. |
| address_label | string | The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again. |
Use when the user asks for more detail about ONE specific deal already returned by another tool: setup costs, price-rise terms, what happens after the intro period and availability at their address. Pass the deal_id from the earlier result, plus the user's postcode, uprn and address_label when known so availability is confirmed at their address. total_contract_cost here is the whole-contract figure over contract_months.
| Argument | Type | Description |
|---|---|---|
| uprn | string | Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user. |
| deal_id* | string | The deal_id from a previous find_broadband_deals or check_if_overpaying result. |
| postcode | string | Pass the user's postcode when known so availability is checked at their address. |
| address_label | string | The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deal_id"
],
"properties": {
"uprn": {
"type": "string",
"pattern": "^\\d{6,14}$",
"description": "Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user."
},
"deal_id": {
"type": "string",
"pattern": "^\\d{1,12}$",
"description": "The deal_id from a previous find_broadband_deals or check_if_overpaying result."
},
"postcode": {
"type": "string",
"maxLength": 10,
"minLength": 5,
"description": "Pass the user's postcode when known so availability is checked at their address."
},
"address_label": {
"type": "string",
"maxLength": 160,
"description": "The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again."
}
},
"additionalProperties": false
}Use when you have a UK postcode and need the exact property (broadband availability differs per property). Ask for the postcode and house number or name in ONE question up front. If the user's message already identifies the property (e.g. '1 Fyfields, SS13 1HJ'), match it against the returned list yourself and proceed straight to the next tool, briefly saying which address you're checking. Only show the numbered list and ask them to pick when the match is ambiguous or they gave postcode only and want precision. Then pass the entry's uprn (never shown to the user) plus its display_address as address_label to the other tools.
| Argument | Type | Description |
|---|---|---|
| postcode* | string | UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postcode"
],
"properties": {
"postcode": {
"type": "string",
"maxLength": 10,
"minLength": 5,
"description": "UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds."
}
},
"additionalProperties": false
}| min_speed_mbps |
| number |
| Minimum download speed in Mbps. Translate needs rather than inventing numbers: two people working from home plus gaming needs about 150, a heavy 4K household about 300, email and browsing about 35. |
| include_satellite | boolean | Include satellite broadband (Starlink). Default false. Set true only if the user asks for satellite broadband or Starlink, or lives somewhere no line is fast enough. Satellite needs a dish and has an upfront cost; say so when you show one. |
| max_monthly_price | number | Budget cap in GBP per month, from phrases like 'under £30'. |
| max_contract_months | integer | Longest contract the user will accept, e.g. 12 for 'no long contracts'. |
| include_mobile_broadband | boolean | Include 4G/5G home broadband and fixed wireless. Default false (deals on a line only). Set true only if the user asks for mobile, 4G, 5G or wireless broadband, or names a mobile provider. |
| exclude_mid_contract_rises | boolean | true when the user says they want no mid-contract price rises. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postcode"
],
"properties": {
"uprn": {
"type": "string",
"pattern": "^\\d{6,14}$",
"description": "Property identifier from search_addresses. Pass it whenever the user has picked an address so results become address-precise instead of postcode-wide. Never show this number to the user."
},
"postcode": {
"type": "string",
"maxLength": 10,
"minLength": 5,
"description": "UK postcode, e.g. 'SS13 1HJ'. When asking, request the postcode and house number or name together in one question rather than two rounds."
},
"provider": {
"type": "string",
"maxLength": 60,
"description": "Only show deals from this provider, when the user names one."
},
"address_label": {
"type": "string",
"maxLength": 160,
"description": "The display_address the user picked from search_addresses, passed back verbatim. Carried into the switch link so the FindBroadband site greets the user with their address instead of asking again."
},
"min_speed_mbps": {
"type": "number",
"maximum": 10000,
"description": "Minimum download speed in Mbps. Translate needs rather than inventing numbers: two people working from home plus gaming needs about 150, a heavy 4K household about 300, email and browsing about 35.",
"exclusiveMinimum": 0
},
"include_satellite": {
"type": "boolean",
"description": "Include satellite broadband (Starlink). Default false. Set true only if the user asks for satellite broadband or Starlink, or lives somewhere no line is fast enough. Satellite needs a dish and has an upfront cost; say so when you show one."
},
"max_monthly_price": {
"type": "number",
"maximum": 500,
"description": "Budget cap in GBP per month, from phrases like 'under £30'.",
"exclusiveMinimum": 0
},
"max_contract_months": {
"type": "integer",
"maximum": 36,
"description": "Longest contract the user will accept, e.g. 12 for 'no long contracts'.",
"exclusiveMinimum": 0
},
"include_mobile_broadband": {
"type": "boolean",
"description": "Include 4G/5G home broadband and fixed wireless. Default false (deals on a line only). Set true only if the user asks for mobile, 4G, 5G or wireless broadband, or names a mobile provider."
},
"exclude_mid_contract_rises": {
"type": "boolean",
"description": "true when the user says they want no mid-contract price rises."
}
},
"additionalProperties": false
}