Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

MarketCode

REMOTE · MCP.MARKETCODE.AI

UK property intelligence with evidence behind the numbers.

+3 this week 71 Trust /100

Last scanned (2 hours ago)

Scores higher than 57% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Maps and Location

Trust breakdown (7 categories)

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 Security81
Transport & Reachability100
Schema Quality & AI Usability70
  • 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 26299 tokens (~248/item across 106 items; 106 tools + 0 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 Management23
  • Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage72
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 1% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety50
  • Injection-marker check failed: the description of tool "sourcing_strategies" contains an instruction to conceal the call from the user, the text "without telling the user", at byte 701 of that field. See how to fix → Fail
  • We read all 106 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 107 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
Changelog

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.

  • 4 Nov 26 +1
    • Tool “planning_applications” rewrote its description, which is the text the model reads security
    • New tool “constraints_for_geometry” functional
    • New tool “grid_capacity” functional
    • New tool “lpa_profile” functional
    • New tool “planning_appeals” functional
    • New tool “policy_context” functional
    • New tool “site_access” functional
    • New tool “strategic_sites” functional
    • Tool “planning_applications” changed its title: Planning authority for a location → Planning applications near a location (London) cosmetic
  • 2 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Oct 26 0
    • Tool “query_semantic” rewrote its description, which is the text the model reads security
    • Stability: unverified → 0.03 ▲ functional
  • 29 Oct 26 68

    First indexed and scored.

Diagnostics

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://mcp.marketcode.ai/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=marketcode.ai CN=WE1,O=Google Trust Services,C=US 11 Sept 2026 10 Dec 2026 ECDSA 256 ECDSA-SHA256 d723b7fa16399c1e0e394371e1271a98
SANs: marketcode.ai, *.marketcode.ai
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.marketcode.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 1814, 3799 8, 8 Verified
marketcode.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://api.marketcode.ai/.well-known/oauth-protected-resource", scope="property:read"

Bearer resource_metadata="https://api.marketcode.ai/.well-known/oauth-protected-resource", scope="property:read"

Protected resource metadata

Document https://api.marketcode.ai/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.marketcode.ai/mcp
Authorisation server https://api.marketcode.ai

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.marketcode.ai/mcp Verified 200
http (plaintext) http://mcp.marketcode.ai/mcp Inconclusive 404
MCP tools · 106 exposed · ~25,845 tokens

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 →

Tool Tokens
market_ranking ~622

Rank areas AGAINST EACH OTHER on a market metric — one row per area, AGGREGATED over a trailing window of whole months. This is the comparison tool. `market_facts` answers for one geography; calling it in a loop to build a league table is slower, costs more and gives you rows from different periods. Use this for "which districts in Greater Manchester turn over fastest", "rank these twelve postcodes by price per sqm", "cheapest LADs in the North West by price_psm". ALWAYS report the `window` block from the response alongside the ranking. It names the months aggregated, and it matters: a 12-month turnover and a 3-month one differ by roughly 4x. `lag_months` (default 3) deliberately drops the most recent months because HM Land Registry registers sales long after completion — the newest month looks near-dead and would rank registration lag rather than liquidity. turnover_rate is exact — it is sales over stock, recomputed at this grain. Price, rent and yield are weighted means of the underlying medians, so describe them as indicative, not as medians. `min_stock` (default 50) skips areas with too few dwellings for a rate to mean anything: one sale in a 2-dwelling district is a turnover of 0.5, which otherwise tops the table. Where a returned area still has a small `stock_count`, say so rather than presenting its rate as comparable. Scope it EITHER by `parent_area_code` (every child of that area, e.g. every district in a county) OR by an explicit `area_codes` allowlist. `area_type` is the grain: "Postcode District" (default) or an administrative type such as "Local Authority District". `sort` defaults to turnover_rate, the liquidity measure — sales as a share of the stock that could have sold. Do NOT sort on gross_yield or days_on_market: they are 0% populated, so every row ties as NULL and the "ranking" is arbitrary order. Populated metrics are sales_pri…

NameTypeReqDescription
area_codes–––
area_type–––
asset_class–––
bedroom_band–––
hmo–––
lag_months–––
limit–––
metrics–––
min_stock–––
order–––
parent_area_code–––
sort–––
window_months–––

Structured output declared, but exposes no named fields.

No examples provided.

market_volume_ranking ~112

Rank postcode districts by transaction volume or median price over a trailing window — "the busiest districts in Greater London last year", "the priciest districts in SW". Restrict the candidate set with county ("GREATER LONDON") or area ("SW"); omit both to rank nationally. UK only. Free.

NameTypeReqDescription
area–––
county–––
limitinteger––
monthsinteger––
order_bystring––

Structured output declared, but exposes no named fields.

No examples provided.

market_volume_series ~324

Monthly transaction VOLUME for a postcode district, postcode area or county — every registered sale, 1995 to present, oldest month first. Use this, not `market_facts`, for "how many sales" questions. `market_facts` reads the area_facts cube, whose count is a UPRN-matched sample that runs 17-66% short of the registry; this reads HMLR price paid directly. Conversely use `market_facts` for price/rent/yield by asset class and bedroom band, which this does not break down. Provide exactly one of district ("SW11", or a full postcode, which is truncated), area ("SW") or county ("GREATER LONDON"). `district` is a POSTCODE district, not a borough — "NW1", not "Camden". `start` and `end` are months: "2024-06" or "2024-06-01", either accepted. Metrics default to txn_count + median_price. Prices are category A only — a median including repossessions is not a market median. ALWAYS check `provisional_from` in the response before reading a trend: HM Land Registry registers sales months after completion, so the trailing months are incomplete and will rise. UK only. Free.

NameTypeReqDescription
area–––
county–––
district–––
end–––
metrics–––
start–––

Structured output declared, but exposes no named fields.

No examples provided.

market_yields ~212

Gross rental yield for an area and bedroom band on two bases, by month, with n: `gross_yield_asking` (12 × the month's median asking rent ÷ the median asking price of sale listings in the same area, band and month — different properties) and `gross_yield_avm_median` (the median, over rent listings matched to a property, of 12 × asking rent ÷ our valuation of that property; `gross_yield_avm_n` behind it). Both rest on ASKING rents, not achieved ones. Null where a month is too thin to publish — say so rather than averaging around it. `latest` is the most recent month with a figure. The basis sentence comes with it. UK only. Free.

NameTypeReqDescription
area_codestring––
area_typestring––
bedroom_bandstring––
monthsinteger––

Structured output declared, but exposes no named fields.

No examples provided.

mixed_use_buildings ~102

Buildings holding BOTH residential and commercial units — the conversion and permitted-development cohort. Hard to source elsewhere: it is a property of the building's unit mix, not an attribute of any single property. UK only. Costs 30 credits (30p).

NameTypeReqDescription
area_idstringyes–
limitinteger––
min_commercialinteger––
min_residentialinteger––

Structured output declared, but exposes no named fields.

No examples provided.

mortgage_rates ~125

Average UK mortgage rates from the Bank of England: 2-year fixed, 3-year fixed at 75% LTV, and the standard variable rate. This is the BoE's published market average — an input to an appraisal, not a quote. It carries no applicant, product or lender, so do not present it as a rate someone can get. Pair it with a yield figure or an appraisal (`site_appraisal`) rather than quoting it alone. No parameters: it is one national series. Free.

Input schema present but exposes no named parameters.

Structured output declared, but exposes no named fields.

No examples provided.

owner_profile ~160

What the Land Registry shows for one proprietor: titles held, company status, country of incorporation, directors and PSCs where known. Give a company number for an EXACT match. A name is a fuzzy substring search — company names repeat across unrelated entities, so a name-matched result is a candidate set, NOT a portfolio, and the response says which kind you got. Report it that way. `n_distinct_titles` is the holding count; `n_rows` is higher because one title appears on several ownership rows over time. UK only. Costs 25 credits (25p).

NameTypeReqDescription
company_number–––
limitinteger––
name–––

Structured output declared, but exposes no named fields.

No examples provided.

ownership_by_company ~65

Titles held by a company, by Companies House number. Useful for mapping a landlord's or developer's portfolio. England & Wales only. Costs 15 credits (15p).

NameTypeReqDescription
company_numberstringyes–
limitinteger––

Structured output declared, but exposes no named fields.

No examples provided.

ownership_by_title ~46

Registered proprietor(s) for an HMLR title number. England & Wales only. Costs 15 credits (15p).

NameTypeReqDescription
title_numberstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

parcel_lookup ~319

One land parcel in full: its INSPIRE id, title number and OS id, area and land use, the registered proprietor where a title links, the units standing on it, plot utilisation, and every constraint flag. Address it by `parcel_id`, `inspire_id`, `title_number` or `uprn` — whichever handle you have. Use `land_assembly` instead when you want the neighbours. CONSTRAINTS ARE THREE-VALUED. `in_zone`, `checked_false` and `not_checked` are three different answers, and a parcel with unchecked flags is UNASSESSED, not unconstrained. Never report an unchecked flag as clear. Plot coverage is built footprint over parcel area: a ground-plane measure that says nothing about storeys, so it is not a density. The unbuilt ground it implies is an upper bound before any constraint, access or amenity test — not a developable area, and not a capacity. Restrictive covenants read `not_available`: the register holds them per title and the title-to-parcel link is partial. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
inspire_id–––
parcel_id–––
title_number–––
uprn–––

Structured output declared, but exposes no named fields.

No examples provided.

planning_appeals ~140

Planning Inspectorate appeal decisions in an authority: case reference, the council's application reference, appeal type and procedure, site address, development type, decision and date. England, decided from October 2021 (the Inspectorate's open casework). Filter by decision and ISO dates. Matched to the authority; matching to a site boundary comes with the national planning register. Free.

NameTypeReqDescription
decided_from–––
decided_to–––
decisions–––
limitinteger––
location–––
lpa_code–––
postcode–––

Structured output declared, but exposes no named fields.

No examples provided.

planning_applications ~124

Planning applications near a location, from the register we hold: the reference, proposal, type, decision and dates of each, nearest first. COVERAGE IS LONDON (the London authorities, GLA Planning London Datahub); outside London an empty list is NOT a clean planning history. For appeals use `planning_appeals`; for allocations use `strategic_sites`. Give either `postcode` or `location` as "lat,lng". UK only. Free.

NameTypeReqDescription
location–––
postcode–––

Structured output declared, but exposes no named fields.

No examples provided.

planning_check ~199

The planning designation checks you choose, for one location, in one call. `checks` is any of: article_4, brownfield, ancient_woodland, heritage_at_risk, tpo, aqma, scheduled_monument, sssi, agricultural_land, flood_risk, green_belt, listed_buildings, aonb, national_park, conservation_area — omit it for all fifteen. Each check reports its own result, and one that could not be read says `status: unknown` rather than disappearing. Use `planning_designations` for the fixed bundle of thirteen; use this when you need SSSI or agricultural land grade, or only two or three checks. Give either `postcode` or `location` as "lat,lng". UK only. Free.

NameTypeReqDescription
checks–––
location–––
postcode–––

Structured output declared, but exposes no named fields.

No examples provided.

planning_designations ~107

Every planning designation affecting a location, in one call: conservation area, listed building, green belt, AONB, national park, flood zone, Article 4, brownfield, ancient woodland, heritage at risk, TPO, AQMA and scheduled monument. Give either `postcode` (full UK postcode) or `location` as "lat,lng". UK only. Free.

NameTypeReqDescription
location–––
postcode–––

Structured output declared, but exposes no named fields.

No examples provided.

planning_precedents ~392

What happened to applications like this one nearby — the planning precedent record. Give a point (`lat`/`lon`) or an `lpa_code`, optionally narrowed by `application_types` (substrings of the authority's own type labels, e.g. ["Householder"]). Returns the approval RATE with its denominator, the median days to a decision, a breakdown by application type, and recent examples with their outcomes and links. TWO DENOMINATORS, AND THEY ARE NOT THE SAME. The rate is over approvals plus refusals only. The decision time is over the much smaller set of applications carrying BOTH a received and a decision date — about 13% of the register. Quote each with its own n; never present the timing sample as though it were the rate's. IT IS A RATE, NOT A PROBABILITY. It says what a committee did nearby, not what it will do with this proposal. Do not convert it into a chance of approval. Withdrawals, advisory outcomes (observations on another authority's application, and confirmations that consent was not required) and undecided applications are counted separately and excluded from the denominator — they appear under `excluded_from_rate`. COVERAGE IS LONDON. The official register is the 35 Greater London authorities; elsewhere this returns nothing, which is a coverage gap and NOT a quiet planning history. Say so rather than implying the site is unprecedented. UK only. Costs 10 credits (10p).

NameTypeReqDescription
application_types–––
examplesinteger––
lat–––
lon–––
lpa_code–––
radius_minteger––
yearsinteger––

Structured output declared, but exposes no named fields.

No examples provided.

plot_utilisation ~138

Land parcels by size and how much of them is built on. Set `max_built_coverage` to 0.2 to find largely undeveloped plots. Parcels with NO measured coverage are excluded when you set a ceiling, rather than counted as empty — unknown coverage is not evidence of a vacant plot. Coverage is measured on about 41% of parcels. UK only. Costs 30 credits (30p).

NameTypeReqDescription
area_idstringyes–
limitinteger––
max_built_coverage–––
min_area_m2number––

Structured output declared, but exposes no named fields.

No examples provided.

policy_context ~274

The planning policy picture for a site: the adopted and emerging local plan with stage and dates, the local plan policies whose areas cover the site (reference, name, theme, a text extract, the share of the site), the settlement position (inside, outside or straddling a settlement boundary, with the distance to its edge), neighbourhood plans and the green belt review rating of the parcel. Policies are DIGITISED from the council's own layers and documents: quote the policy reference and source, not our wording. Each layer says its coverage; `not_held` means we hold no boundary for that authority, NOT that the site is outside a settlement. Give exactly ONE scope: `location` ("lat,lng"), `postcode`, `area_geojson` (a red line, GeoJSON in WGS84, at most 150 km² and 64 vertices), `land_id` or `lpa_code` (GSS, e.g. E07000240); anything else is refused before any read and nothing is charged. UK only. Free.

NameTypeReqDescription
area_geojson–––
land_id–––
location–––
postcode–––
themes–––

Structured output declared, but exposes no named fields.

No examples provided.

property_comps ~206

Comparable sales in the same building or block. Preserve original price, sale date, UPRN and `attrs_source`. Backfilled/modelled floor areas are estimates: their derived price per square metre is not directly observed. An EPC room count is not automatically a bedroom count. Review anomaly and category flags; they do not prove distress or justify silently removing lower contrary sales. Aggregate flags on duplicate identity/date/price tuples. Verify combined-unit/building-parent demises before treating them as flat comparables. Repeated sales of one unit are correlated evidence. Report selection and rejection reasons before applying adjustments. UK only. Costs 30 credits (30p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
max_backfillsinteger––
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_energy_retrofit ~305

The energy picture for one property: current rating against the certificate's own potential, the points and letter bands available, the fabric and heating the assessor recorded, and MEES. MEES IS A LEGAL BAR, NOT A VALUATION NOTE. An F or G cannot lawfully be let on a new or continuing tenancy in England and Wales without a registered exemption. Report it as a constraint on what the owner may do, not as a discount to apply. A band letter is a RANGE — G spans 19 SAP points, D spans 13 — and the range is on the response. A null gap means unknown, never "already at potential". `recommended_measures` reads `not_available` (gap G3): the assessor's own improvement list with indicative costs is published by MHCLG in a file we do not load. Do NOT substitute a generic list of retrofit measures — it would read as this property's assessment. No pound figure is put on the uplift either; the elasticity is local and contested and we have not estimated one. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_flood_risk ~71

Environment Agency surface-water flood risk for a property. UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_history ~101

Sold-price history for a property, with per-sale detail. Use `transactions_by_uprn` instead if you only need the raw HMLR rows. UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
max_drilldownsinteger––
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_lease ~202

Registered leases linked to this UPRN, with the selected longest-expiry record and up to ten alternatives, exact register property descriptions, title/record identifiers, source/link limitations and computed remaining term. UPRN linkage does not verify the legal demise: a garage, parking or sibling title must not establish the flat lease. Compare descriptions and disclose truncated/unavailable alternatives. Short-term flags are research prompts, not legal advice or proof of mortgage eligibility. The AVM does not adjust for a short term. `status: no_lease` means none was found; it does not independently prove freehold tenure. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_lease_batch ~120

`property_lease` for up to 100 properties in one call, per-item outcomes (ok | no_lease | not_found | error) in input order. Charged per property answered — the sum of the single calls, never more. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnsarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

property_lookup ~165

Full property record for a UPRN, grouped into tiers: identity, property, energy, building, land, risk, designations, infrastructure, ownership, provenance. Up to ~300 fields — null fields are omitted, so a typical urban flat returns fewer than a rural site with designations on it. `provenance` carries the `<field>_source` and `<field>_confidence` siblings, so you can trust individual cells and not just rows. UK only. Costs 25 credits (25p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_media ~368

Photographs, floorplans, EPC graphs and brochures for a property, from the listings we have crawled. Narrow with `types` — a comma-separated list of `image`, `floorplan`, `epc`, `brochure`, `virtual_tour`. EVERY LINK IS OURS AND EVERY LINK EXPIRES. Do not store them; call this again when you need fresh ones, and set `ttl_seconds` to match how long the surface you are building keeps them on screen. The portal's own URL is never returned, so a saved response cannot turn into a hotlink later. COVERAGE IS UNEVEN AND THE COUNTS TELL YOU. We hold the actual files for floorplans and brochures only, and for a minority of those; everything else — including all photographs — is a link that redirects to the source. `n_held_by_us` against `n_redirected` says which is which for this property, and `delivery` says it per item. Do not describe a property as having no photographs when the answer is `no_media`: about a third of listings never resolve to a UPRN, so that is as often a matching gap as an absence. Each item carries the portal and host it came from — useful when a user asks where a picture is from, and when one source turns out to be bad. UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
ttl_secondsinteger––
types–––
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_planning_history ~213

Planning history AT this property: applications linked to the unit or its building — each with decision, dates, appeal, CIL liability, development type and `match_level` (`unit`, `building`, or `nearby` within 25 m when nothing is linked) — a summary (approved / refused / withdrawn / pending), what needs consent here from the designation flags read three-valued (`applies` against `unchecked`), the LPA, and `coverage`: official planning data covers the 33 London boroughs today, so `status: not_covered` outside London is a different answer from `no_applications`, and is not charged. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_planning_history_batch ~135

`property_planning_history` for up to 100 properties in one call, per-item outcomes (ok | no_applications | not_covered | not_found | error) in input order. Charged per property answered — the sum of the single calls, never more; not_covered rows are free. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnsarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

property_reconcile ~189

Cross-source property facts with provenance and unresolved attributes. Review floor area, bedrooms and tenure with the user before a valuation. `ml_primary` and `imputed` are predictions, not measurements; a warehouse value is not automatically declared. `eligible_as_primary: false` marks context only: EPC habitable rooms are not bedrooms, occupier tenure is not legal tenure, and price-derived areas are not measurements. The AVM back- series is scaled from its headline, not independent corroboration. Keep user confirmations labelled as user-supplied and unknown facts unknown. UK only. Costs 15 credits (15p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_rental_estimate ~312

What this property would let for, and on what basis. Always quote the basis: `unit_asking` is the property's OWN live rental listing (an asking rent, not an achieved one); `area_asking` is the median asking rent for its bedroom band in its postcode district — a locality statistic applied to one property, so quote the p25–p75 range with it rather than the median alone. `unit_hedonic`, a per-unit model, does not exist (gap G1). THE YIELD IS GROSS: annual rent over our valuation, before voids, management, maintenance, insurance, ground rent or service charge. A net yield is materially lower and we do not publish one — do not present the gross figure as what an investor keeps. The LHA block is the local housing allowance for the property's broad rental market area. That is a HOUSING BENEFIT CAP, not a market rent: it is the floor for a supported tenancy and usually below the market median. The shared-room rate is included for an HMO room-by-room comparison. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
beds–––
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_report ~247

Everything we hold about one property, as one document — summary, the registered lease, the risk report with every flag three-valued, a rental estimate with its basis, the energy picture, and the planning decisions nearby. One price for the composition, cheaper than the sections bought separately. CHECK `sections_degraded` BEFORE SUMMARISING. A section that could not answer degrades in place and names the KIND of absence — `not_found`, `no_certificate`, `not_available` with its gap, or `error` — and those call for different things being said. Report what did not answer rather than describing the document as complete. Each section is the standalone tool of the same name with the same receipts; nothing is computed differently because it is inside a report. UK only. Costs 25 credits (25p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
include_precedentsboolean––
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_risk_report ~252

What this property is in, and whether we actually checked: every designation and hazard flag THREE-VALUED with its source — flood (zone, historic flooding, defences, rivers-and-sea band, surface water), coal (high-risk area, past mining, surface hazard distance), heritage (listed, conservation area, scheduled monument, registered park, battlefield, World Heritage), environmental (AONB, national park, green belt, SSSI, NNR, ancient woodland, nutrient neutrality, SAC, Ramsar, LNR), planning (Article 4, TPO, brownfield register) and infrastructure (nearest substation distance, voltage and demand headroom, nearest renewable project). `true` and `checked_false` are verdicts; `defaulted_false` and `not_checked` are not — say which when you report it. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

property_risk_report_batch ~114

`property_risk_report` for up to 100 properties in one call, per-item outcomes (ok | not_found | error) in input order. Charged per property answered — the sum, never more. UK only. Costs 5 credits (5p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnsarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

property_summary ~129

One-call summary of a property: what it is, what building it belongs to, and the headline attributes. Once you have the UPRN this is the first call to make for a specific property — it usually answers the question on its own, and `property_report` composes the rest. UK only. Costs 20 credits (20p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

query_semantic ~214

Run a governed query against the semantic layer: choose an entity, then the metrics, dimensions and filters you want. Aliases are resolved to physical columns by the registry, so this cannot reach anything the semantic model does not expose. The result includes the generated SQL. Bounded and self-describing. UK only. Costs 50 credits (50p). You are charged if the query reaches the warehouse and then times out or errors there; a rejected query is free, and so is one that matches no rows. Filter area facts on the `analytics_area_id` from area_resolve; they are monthly, so a year ("2025") or quarter is widened to its months.

NameTypeReqDescription
dimensions–––
entitystringyes–
filters–––
joins–––
limitinteger––
metrics–––
order_by–––
period–––
select–––

Structured output declared, but exposes no named fields.

No examples provided.

retrofit_candidates ~139

Properties in an area with the most improvement headroom, ranked by potential efficiency. Defaults to the sub-standard bands E, F and G. A targeting tool: it returns a list to act on, not a fact about one property. Combine with `fuel='gas'` for the fossil-heated cohort that carries the largest retrofit case. `area_id` is the marts area id from `area_resolve`. UK only. Costs 30 credits (30p).

NameTypeReqDescription
area_idstringyes–
bands–––
fuel–––
limitinteger––

Structured output declared, but exposes no named fields.

No examples provided.

search_entities ~408

Bounded public search using the versioned SearchQuery. Criteria are validated by the server; sorting and pagination use the same eligibility as the map. All Entities returns separate groups. No graph inference or unknown evidence changes eligibility. QUERY SHAPE — `query` is one object: {"entity": "land", "geography": {"kind": "area", "id": "Kettering"}, "criteria": {"parcel_area": {"min": 5000, "max": 9000}}, "sort": "<a sort key>"} `geography` is {"kind": "area", "id": <area UUID, code or exact name>} or {"kind": "polygon", "geometry": <GeoJSON Polygon>}. Refinements go in `criteria`, an object keyed by refinement (not a list, not `filters`/`refinements`). `limit` and `cursor` are arguments of this tool, not of the query. Families (`query.entity`): Assets — `properties`, `buildings`, `land`, `listings`; Activity — `transactions` (HM Land Registry completed sales matched to a property) and `planning_applications` (official publishers only); Markets — `market_profiles` (one record per area × residential bedroom cohort with the selected `measure`'s latest value and observed trend; open one with `market_profile`). `market_facts` remains for existing observation ids but is superseded by `market_profiles`. Call `entity_search_capabilities` for each family's refinements and sorts. Free.. Actors — `owners` (companies that own homes in the place, ranked by holdings; companies only, signed-in account required, not the shared preview) and `agents` (estate and letting agents by listing activity in a trailing window). Owners and agents are searched on their own, not inside All Entities.

NameTypeReqDescription
cursor–––
limitinteger––
query–yes–

Structured output declared, but exposes no named fields.

No examples provided.

search_summary ~407

Counts and statistics over EXACTLY what `search_entities` would match: how many records, grouped by a field, with min, median, mean and max of up to three numeric fields. Use it for "how many", "what share", "median floor area" and "price by type" questions instead of paging through records. `query` is the same object `search_entities` takes (entity, geography, criteria). Summaries cover `properties`, `buildings`, `land` and `listings`. `group_by` is one choice field of that family and `measures` are its range fields; `entity_search_capabilities` lists them under `summary.families`. For example properties: group_by asset_subtype / asset_class / tenure / epc, measures bedrooms / floor_area; listings: group_by property_type / channel / auction / new_home, measures price / bedrooms / floor_area; buildings (a postcode district or a drawn area): group_by tenure / epc, measures footprint / storeys / units; land: group_by tenure, measures parcel_area / built_coverage. Example: {"query": {"entity": "listings", "geography": {"kind": "area", "id": "SW11"}, "criteria": {"transaction": ["sale"]}}, "group_by": "property_type", "measures": ["price"]}. A measure's `count` is the records that have a value for it; missing values are never zero. Groups come largest first, `top` of them (max 50), each with its `share` of the total. No record identities are returned: open records with `search_entities`. Too wide a place (a region) or too slow a summary is refused with what to narrow. Transaction counts by area: `market_volume_series`. Free.

NameTypeReqDescription
group_by–––
measures–––
query–yes–
topinteger––

Structured output declared, but exposes no named fields.

No examples provided.

site_access ~110

The nearest bus stops, rail stations, metro or tram stops, ferry terminals and open schools to a site, straight-line in metres, with names and NaPTAN or school references. A school catchment is not a distance, and the school's phase is not held. England (stops GB where published). Free.

NameTypeReqDescription
kinds–––
land_id–––
location–––
per_kindinteger––
postcode–––

Structured output declared, but exposes no named fields.

No examples provided.

site_appraisal ~802

Everything known about ONE site, assembled and judged — the site dossier. Give a `uprn` (from address_resolve or address_autocomplete) or a `land_id` (from sourcing_search). Returns in one call what would otherwise be six: * `site` — the land parcel: area, land use, built coverage, and the boundary as GeoJSON you can put straight on a map * `valuation` — our AVM against the last recorded sale, with gain and years held * `ownership` — the registered proprietor, type, company number * `energy` — the latest EPC * `auction_history` — every appearance, matched on address as well as UPRN, and whether it ever sold * `designations` — LIVE checks: conservation area, green belt, AONB, national park, flood risk, listed buildings * `signals` — the judgement READ `signals` FIRST. It is why this exists rather than being six calls. Each entry names what fired it and carries its evidence: repeat auction failure with the guide-to-estimate ratio, long_held with the nominal gain, mees_unlettable with the EPC band (F and G cannot legally be let), under_built with the plot coverage, corporate_owner with the company number. A site with nothing to say returns `signal: "none"` explicitly. ABSENCE IS A REAL ANSWER, NOT AN ERROR. No registered proprietor means the polygon-to-title backfill has not reached this parcel — it covers about 44% — not that the land is unregistered. No EPC, no auction history and no valuation are all normal, and each says so in its own block. A designation check that FAILS is reported as UNKNOWN, never as absent. Do not tell a user a site is unconstrained on the strength of a failed check. A SCHEME PRICES THE BUILD. Pass `scheme_gia_m2` (and `scheme_units` for a cost per unit) and you get a `scheme` block: build cost from the published construction index times the regional factor, with on-costs. You must supply…

NameTypeReqDescription
include_designationsboolean––
include_precedentsboolean––
land_id–––
precedent_radius_minteger––
rate_gbp_m2–––
rate_period–––
regionstring––
scheme_gia_m2–––
scheme_units–––
sectorstring––
uprn–––

Structured output declared, but exposes no named fields.

No examples provided.

solar_potential ~150

Roof characteristics for solar screening: footprint area, roof shape and material, building height, and whether panels are already present. Returns NO generation estimate, deliberately. Pitch, orientation and shading are not in the warehouse, and a kWp figure derived from footprint alone would read as a yield forecast without being one. Report the usable roof area as a screening figure and say what it excludes. UK only. Costs 20 credits (20p). Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnsarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

sourcing_commercial ~435

Rated commercial stock in a local authority, filtered by sector and rateable value — the commercial sourcing lane. Each row carries its rateable value, an income-basis value, the freeholder where a title links, and any auction history. NO £/m² IS PUBLISHED and you should not compute one. The VOA's measured area is not loaded, and dividing a hereditament-level rateable value by the twin's unit-level floor area gives nonsense — it produced £235,301/m² on a Westminster office before it was removed. `lad_code` is REQUIRED and is the only scope: this is the one indexed way into the twin for a bounded set of hereditaments. Use `area_resolve` to turn a place name into a GSS code. RATEABLE VALUE IS NOT RENT. It is the VOA's estimate of annual rental value at the rating list's antecedent valuation date (1 April 2024 for the 2026 list). Do not quote it as passing rent or as income. `income_basis_value` divides that RV by the district's own commercial auction yield, so it is an arithmetic conversion anchored to local evidence, not a valuation — and it reads `not_available` where the district has no auction yield evidence, because a default yield would produce a number that looks like a valuation. Report the yield and the number of lots behind it. One rating list is loaded (2026), so there is no RV trajectory per property, no measured floor area from the VOA, and no vacancy signal. UK only. Costs 10 credits (10p).

NameTypeReqDescription
lad_codestringyes–
limitinteger––
max_rv–––
min_rv–––
offsetinteger––
scat_codes–––
sectors–––
single_hereditamentboolean––
with_ownerboolean––

Structured output declared, but exposes no named fields.

No examples provided.

sourcing_live_listings ~441

What is on the market RIGHT NOW in these postcode districts, each listing enriched against our own record of the property: asking price against our valuation (`asking_vs_avm_pct`, `discount_to_avm_gbp`), £/m², gross yield on both the asking and valuation bases, unexpired lease years, EPC with its retrofit gap, the designation flags, days listed, the agent, and a plain-language `signals` list. A drawn UK polygon can scope the search; pass postcode_districts=[] to resolve its districts. At most 64 corners, 150 km² and 20 districts. Only listings with located properties inside the boundary match. Tenure accepts freehold or leasehold. Tenure, EPC ratings and minimum gross yield filter before pagination. Yield uses recorded asking monthly rent annualised against the asking or auction guide price. Unknown rent/price cannot satisfy a yield filter. There is NO total — a district holds far more archived listings than live ones, so counting them costs seconds while the page costs milliseconds. Read `has_more` and page with `offset`; never tell a user how many listings exist, only how many you fetched. A listing enriches only where the portal's own UPRN match landed on a unit we hold; `enrichment.n_with_valuation` says how many of the rows that was, and the rest carry the listing's fields with null comparisons. UK only. Costs 10 credits (10p).

NameTypeReqDescription
area_geojson–––
auction_onlyboolean––
channelstring––
epc_in–––
limitinteger––
max_beds–––
max_price–––
min_beds–––
min_gross_yield_pct–––
min_price–––
new_homes–––
offsetinteger––
postcode_districtsarrayyes–
tenure–––

Structured output declared, but exposes no named fields.

No examples provided.

sourcing_offmarket_owners ~282

Who owns the stock in an area, ranked as an approach list: units held here, total value and equity, average and longest years held, how many of their units are on a short lease or already on the market, company status, and the signals behind the rank. Pass a `strategy` to rank the owners of only the units that preset points at — the owners of short-lease flats in a borough, say. COMPANIES ONLY, by construction: owners are grouped by company number, so units held by private individuals have no group to appear in. They are counted under `not_itemised` and never listed, and you must not attempt to identify them by other means. Report the `scope.share_itemised` figure so the user knows what fraction of the area the list covers. `national_portfolio` reads `not_available`: only the in-area holding is known, and it is not the owner's whole book — do not present it as one. UK only. Costs 10 credits (10p).

NameTypeReqDescription
lad_code–––
limitinteger––
min_unitsinteger––
postcode_district–––
strategy–––
strategy_overrides–––

Structured output declared, but exposes no named fields.

No examples provided.

sourcing_owners ~128

Resolve registered owners for parcels returned by `sourcing_search`. Uses the bulk HM Land Registry corporate and overseas ownership registers, so it names companies, public bodies and overseas entities. Individually owned titles are not in the bulk data and come back unresolved — that is a gap in the free register, not a failed lookup, and naming an individual requires a paid per-title purchase which this tool does not make. UK only. Costs 25 credits (25p).

NameTypeReqDescription
assetstring––
parcel_idsarrayyes–

Structured output declared, but exposes no named fields.

No examples provided.

sourcing_search ~1,157

Find land parcels, property units or buildings matching search criteria — the sourcing tool. Give a `location` (place name, area code or postcode district) or a `bbox`. AREA LIMIT: one scan covers at most 150 km². A whole town or local authority (Harrogate, Cheltenham, Farnham, most boroughs) is usually larger and is refused with `area_too_large`, which lists the postcode districts covering it. Search a large place district by district: pass one postcode district per call as `location` ("HG1", then "HG2"), or a `bbox` no more than 0.5° on a side. Nothing is charged for a refused area. STRATEGY MODE (preferred). Pass a `strategy` key from `sourcing_strategies` with `lad_code` or `postcode_district`, and the search runs the published preset: its filters, its ranking, and a `score_components` breakdown on every row saying which term earned what. Override any published filter with `strategy_overrides` — `{"min_yield_pct": 8}` — or pass null for a key to switch that filter off. An unknown key is rejected rather than ignored. `listing_state` restricts to on- or off-market units; page with `cursor` from `next_cursor`. Strategy mode ignores the legacy filters below. Filter land by use class and `max_built_coverage` (built footprint as a share of plot, so 0.2 finds substantially empty plots), units by type, bedrooms, EPC band and tenure, and either by owner — `min_years_owned` is the usual off-market signal, and `owner_types` separates companies from public bodies. Returns parcels with ownership attached where the bulk register knows it. For land or units, use sourcing_owners to resolve a specific set afterwards. PARKS, HEATHS, RAILWAYS, CEMETERIES AND UTILITY LAND ARE EXCLUDED BY DEFAULT. The scan is ordered by parcel size, and the largest parcels in any area are its open spaces — unfiltered, a Camden search returned Regent's Park, Hampstead Heath, a ce…

NameTypeReqDescription
area_geojson–––
assetstring––
bbox–––
company_status–––
cursor––STRATEGY MODE ONLY: `next_cursor` from the previous page. Inventory pages use `offset`.
epc_in–––
exclude_owner_types–––
include_undevelopableboolean––
lad_code––STRATEGY MODE scope (GSS code, e.g. E09000032). Without a strategy, pass the code as `location` instead.
landuse–––
limitinteger––
listing_state––STRATEGY MODE ONLY, units only: restrict to on- or off-market units. Rejected without `strategy`. For what is on the market now use `sourcing_live_listings`.
location–––
max_area_m2–––
max_beds–––
max_built_coverage–––
max_floor_area_m2–––
max_floors–––
max_unexpired_years–––
max_units–––
min_area_m2–––
min_beds–––
min_floor_area_m2–––
min_floors–––
min_rlv–––
min_score–––
min_units–––
min_years_owned–––
offset–––
opportunities_onlyboolean––
owner_types–––
postcode_district––STRATEGY MODE scope (e.g. SW11). Without a strategy, pass it as `location`.
property_types–––
require_ownerboolean––
strategy––A preset key from `sourcing_strategies`. Turns on strategy mode.
strategy_overrides––STRATEGY MODE ONLY. Values for the preset's own filter keys.
tenure–––

Structured output declared, but exposes no named fields.

No examples provided.

sourcing_strategies ~197

The nine sourcing strategies as data — read this BEFORE running `sourcing_search` in strategy mode. Each preset publishes its thesis, its filters (every key overridable, with the default and the unit), its ranking components with weights and scales, the feature columns it reads, the data gaps that limit it, and its version. Pass `area` as a local-authority GSS code (E09000032) to get `data_ready` per strategy for that authority: `ready`, `partial`, `not_ready` or `unknown`, with the coverage share behind the verdict. A `partial` verdict is usable — say the share when you report the results. Do not run a preset over an authority marked `not_ready` without telling the user what is missing. UK only. Free.

NameTypeReqDescription
area–––

Structured output declared, but exposes no named fields.

No examples provided.

strategic_sites ~358

Local plan site allocations, broad locations, land availability assessment (SHLAA/HELAA/LAA) sites and call-for-sites submissions, in an authority or near a site (`radius_m`, up to 10 km). Each site carries the council's own reference, units and area AS PUBLISHED beside our calculated area, its status and the council's wording for it, the plan and stage, the delivery timescale, notes, and provenance with the source page. `laa_positive` is the council's "suitable, available, achievable" view. COVERAGE: built from council and GLA GIS layers and plan documents, authority by authority. Where we hold nothing for an authority the answer says coverage `none`, which is NOT "no sites". The council's figures beat ours. Give exactly ONE scope: `location` ("lat,lng"), `postcode`, `area_geojson` (a red line, GeoJSON in WGS84, at most 150 km² and 64 vertices), `land_id` or `lpa_code` (GSS, e.g. E07000240); anything else is refused before any read and nothing is charged. UK only. Free.

NameTypeReqDescription
area_geojson–––
cursor–––
include_geometryboolean––
kinds–––
land_id–––
limitinteger––
location–––
lpa_code–––
min_area_ha–––
min_units–––
radius_minteger––
statuses–––
uses–––

Structured output declared, but exposes no named fields.

No examples provided.

subject_transaction_anchor ~167

The property's own last registered sale carried by the published repeat-sales index to its latest settled month: the price paid, the date, the index factor applied and the anchored value. Where a property has sold, this is the strongest single piece of evidence a valuation has. When no published series can carry the sale the factor and the anchored value are null and the anchor is diagnostic, never carried at 1.0. Returns an empty anchor when no registered sale is linked to the UPRN. UK only. Free. Keyed on a UPRN, not an address: call `address_autocomplete` (free) to narrow, then `address_resolve` to get one.

NameTypeReqDescription
uprnintegeryes–

Structured output declared, but exposes no named fields.

No examples provided.

supply_demand ~155

Supply and demand for an area in one call: live stock today (count, median days on market, new-home count) and the monthly flow — listings added and reduced, reduction share, new-home share, agent concentration, asking-to-sold on the registry-matched subset and days to completion. Read the basis sentences: the flow count is the never-reduced cohort; the live-stock series began 2026-09-05 and is forward-only. UK only. Free.

NameTypeReqDescription
area_codestring––
area_typestring––
bedroom_bandstring––
channelstring––
monthsinteger––

Structured output declared, but exposes no named fields.

No examples provided.

time_adjustment ~298

The factor that carries a price paid in a past month to the latest SETTLED month of the published repeat-sales house-price index: the postcode district's own series, else its local authority's, else the national series; forecast months are never used. Returns `factor`, the two index levels (`index_level_from`, `index_level_to`), `basis` (repeat_sales_district | repeat_sales_lad | repeat_sales_national), `current_period` (the month carried to, which trails the calendar by the registry's lag) and provenance. `status` is ok or index_unavailable: a price no published series covers has a null factor, never a stand-in 1.0. A factor of exactly 1.0 is real (a price from that month or later; see `reason`). The same carry the valuation applies to each comparable and to the property's own last sale. `postcode` is a full UK postcode or a district; `from_date` is YYYY-MM-DD; `lookback_years` (1–20) only sets how much of `monthly_series` comes back. UK only. Free.

NameTypeReqDescription
from_datestringyes–
lookback_yearsinteger––
postcodestringyes–
property_type–––

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the MarketCode MCP server?

MarketCode is a hosted endpoint at https://mcp.marketcode.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 · mcp.marketcode.ai

# add to Claude Code
claude mcp add --transport http ai-marketcode-marketcode 'https://mcp.marketcode.ai/mcp'
Common questions

What is the MarketCode MCP server?

MarketCode is an MCP server listed in the public MCP registry as ai.marketcode/marketcode. UK property intelligence with evidence behind the numbers. This page covers its hosted endpoint (https://mcp.marketcode.ai/mcp).

Is the MarketCode MCP server safe to use?

MarketCode scores 71 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 MarketCode MCP server expose?

MarketCode exposes 106 tools: entity_search_capabilities, lookup_entities, ask_question, search_entities, search_summary, and 101 more. Their descriptions and schemas cost roughly 25,845 tokens of context every time the server is loaded.

Does the MarketCode MCP server require authentication?

Yes. MarketCode asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the MarketCode MCP server still maintained?

MarketCode 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.