{"id":578425,"recorded_at":"2026-10-27T23:16:18.058126Z","observed_at":"2026-10-27T23:16:18.058065Z","subject_kind":"endpoint","subject":"40a29770-6d01-4707-a0ed-ccd999cee026","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":5,"tools":[{"description":"Compare two to five UK postcodes on chosen categories, aligned measure by measure.\n\nFetches each postcode's report concurrently and lines the facts up in a table, so you can answer \"which of these is better connected / quieter / cheaper\" in one call instead of several.\n\nArgs:\n  - postcodes (string[]): 2-5 UK postcodes\n  - categories (string[]): 1-6 of demographics, crime, deprivation, prices, broadband, mobile, noise, transport, amenities, schools, environment\n  - response_format ('markdown' | 'json'): default 'markdown'\n\nReturns:\n  One row per measure with a column per postcode, each cell carrying the value, its band, and the category status for that postcode. Caveats collect anything that makes a row not strictly comparable.\n\nComparability warnings you must respect, and which this tool surfaces:\n  - Deprivation ranks from different UK nations are NOT comparable — different indices over different numbers of areas.\n  - A measure missing for one postcode because the dataset does not cover that nation is not a low score; the cell says \"out_of_coverage\".\n  - Ofcom mobile figures describe a whole local authority, so two postcodes in the same authority will always be identical.\n  - Crime counts describe a 1 km square and depend on each police force submitting data; a very low count can be a gap rather than a quiet street.\n\nExamples:\n  - \"Which has better broadband, SW11 1AA or M1 1AE?\" -> postcodes=[...], categories=[\"broadband\"]\n  - \"Compare these three on crime and schools\" -> categories=[\"crime\",\"schools\"]\n\nDon't use when: you have one postcode (use postcode_report) or want the underlying datasets (use postcode_search_datasets).","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"categories":{"description":"Which categories to compare on. Keep it tight — comparing all eleven across five postcodes produces a very large answer.","items":{"enum":["demographics","crime","deprivation","prices","broadband","mobile","noise","transport","amenities","schools","environment"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"postcodes":{"description":"Two to five UK postcodes to compare, e.g. [\"SW11 1AA\", \"M1 1AE\"]","items":{"maxLength":10,"minLength":5,"type":"string"},"maxItems":5,"minItems":2,"type":"array"},"response_format":{"default":"markdown","description":"'markdown' for a side-by-side table, 'json' for the structured comparison","enum":["markdown","json"],"type":"string"}},"required":["postcodes","categories"],"type":"object"},"name":"postcode_compare"},{"description":"Full registry entry for one dataset, by id.\n\nReturns everything needed to call the source yourself: its home page, machine-readable endpoint, API documentation, format, licence, geographic coverage, update cadence, and the concrete questions it can answer.\n\nArgs:\n  - id (string): registry id, e.g. \"police-street-crime\", \"land-registry-ppd\", \"ea-flood\"\n  - response_format ('markdown' | 'json'): default 'markdown'\n\nExamples:\n  - \"How do I call the police API?\" -> id=\"police-street-crime\"\n  - \"What licence is Price Paid under?\" -> id=\"land-registry-ppd\"\n\nErrors:\n  - Returns the closest matching ids when the id is not found.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"id":{"description":"Registry id, e.g. \"police-street-crime\" — find one with postcode_search_datasets","maxLength":60,"minLength":2,"type":"string"},"response_format":{"default":"markdown","enum":["markdown","json"],"type":"string"}},"required":["id"],"type":"object"},"name":"postcode_get_dataset"},{"description":"Resolve a UK postcode to its geography — coordinates, local authority, ward, constituency, LSOA/MSOA/output area, police force, rural-urban class and deprivation rank.\n\nOne fast call with no downstream data fetching. Use it to check a postcode exists, to get the codes needed for other datasets, or when you only need where somewhere is rather than what it is like.\n\nArgs:\n  - postcode (string): UK postcode, spaces optional\n  - response_format ('markdown' | 'json'): default 'markdown'\n\nReturns:\n  Coordinates, administrative geography, statistical geography codes (LSOA/MSOA/OA — these are the keys most UK open datasets are published against), and the deprivation rank with the index it came from.\n\nExamples:\n  - \"Where is SW11 1AA?\" -> postcode=\"SW11 1AA\"\n  - \"What LSOA covers M1 1AE?\" -> postcode=\"M1 1AE\"\n  - \"Is XY1 2AB a real postcode?\" -> postcode=\"XY1 2AB\" (returns an error with suggestions)\n\nDon't use when: you want data about the area — use postcode_report instead.\n\nNote: deprivation ranks are NOT comparable between UK nations. Each nation ranks its own areas against its own index, over a different number of areas; the index and its size are returned so you do not compare them by mistake.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"postcode":{"description":"A UK postcode, e.g. \"SW11 1AA\"","maxLength":10,"minLength":5,"type":"string"},"response_format":{"default":"markdown","description":"'markdown' to read, 'json' for the structured record","enum":["markdown","json"],"type":"string"}},"required":["postcode"],"type":"object"},"name":"postcode_lookup"},{"description":"Full neighbourhood report for one UK postcode, assembled live from UK government open data.\n\nCovers eleven categories: demographics (Census 2021), crime (data.police.uk), deprivation (IMD/WIMD/SIMD/NIMDM), property prices (HM Land Registry), broadband and 5G (Ofcom), noise (Defra), transport, amenities (OpenStreetMap), schools (DfE register: name, phase and distance only, no Ofsted grades) and planning constraints (Planning Data platform, Environment Agency).\n\nEvery figure carries the geography it describes (a postcode, an LSOA of ~1,500 people, or a whole local authority), the period it covers, and a benchmark where one exists. Read those: a crime count describes a 1 km square, and Ofcom mobile coverage describes an entire local authority, not the street.\n\nArgs:\n  - postcode (string): UK postcode, spaces optional\n  - categories (string[], optional): subset to fetch; omit for all eleven\n  - include_sources (boolean): append publisher and licence per category (default false)\n  - response_format ('markdown' | 'json'): default 'markdown'\n\nReturns:\n  Per category: a status, a one-paragraph summary, the facts (label, value, band, benchmark, geography, period, source id) and any caveats.\n\n  Statuses that are normal rather than failures:\n  - \"out_of_coverage\": the dataset genuinely does not cover this nation. Census tables are England & Wales; police.uk excludes Scotland; Planning Data, Defra noise and the DfE school register are England-only. The reason and the devolved equivalent are given.\n  - \"unavailable\": a pre-built extract has not been generated for this area yet (noise, currently).\n  - \"partial\": some sources answered and some did not; check notes.\n\nExamples:\n  - \"What's SW11 1AA like?\" -> postcode=\"SW11 1AA\"\n  - \"Is the broadband any good at M1 1AE?\" -> postcode=\"M1 1AE\", categories=[\"broadband\",\"mobile\"]\n  - \"Crime and schools near LA23 1AA\" -> postcode=\"LA23 1AA\", categories=[\"crime\",\"schools\"]\n\nErrors:\n  - \"No such postcode\" with suggestions when the postcode does not exist\n  - Terminated postcodes are reported with the year they were withdrawn\n\nNot a survey, valuation or conveyancing search. Check anything decision-critical against the source.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"categories":{"description":"Which sections to fetch. Omit for all eleven. Fetching only what you need is faster and much smaller — e.g. [\"crime\",\"schools\"] for a family-safety question.","items":{"enum":["demographics","crime","deprivation","prices","broadband","mobile","noise","transport","amenities","schools","environment"],"type":"string"},"type":"array"},"include_sources":{"default":false,"description":"Append the publisher and licence of each dataset used (default false)","type":"boolean"},"postcode":{"description":"A UK postcode, with or without a space, e.g. \"SW11 1AA\" or \"m11ae\"","maxLength":10,"minLength":5,"type":"string"},"response_format":{"default":"markdown","description":"'markdown' to read, 'json' for the full structured facts","enum":["markdown","json"],"type":"string"}},"required":["postcode"],"type":"object"},"name":"postcode_report"},{"description":"Search a curated registry of 45 UK open datasets and APIs for property and neighbourhood research.\n\nEach entry records the dataset's home page, its machine-readable endpoint, format, licence, geographic coverage, update cadence, and the concrete questions it can answer. Use it to find the right source for something this server does not report directly — EPC ratings, planning applications, flood risk, council tax bands, bus timetables, air quality, ground stability, land ownership.\n\nArgs:\n  - query (string, optional): free text over name, publisher, category, endpoint and questions\n  - category (string, optional): category prefix, e.g. \"Crime\", \"Transport\", \"Environment\"\n  - limit (number): 1-45, default 10\n  - offset (number): pagination offset, default 0\n  - response_format ('markdown' | 'json'): default 'markdown'\n\nReturns:\n  { total, count, offset, has_more, next_offset, datasets: [{ id, dataset, publisher, category, api, licence, coverage, update_frequency }] }\n\nExamples:\n  - \"Where do I get EPC data?\" -> query=\"EPC\"\n  - \"What flood datasets are there?\" -> query=\"flood\"\n  - \"List every transport source\" -> category=\"Transport\", limit=20\n\nFollow up with postcode_get_dataset for the full entry including API docs and the questions it answers.","inputSchema":{"$schema":"http://json-schema.org/draft-07/schema#","properties":{"category":{"description":"Filter by category prefix, e.g. \"Crime\", \"Transport\", \"Environment\"","maxLength":80,"type":"string"},"limit":{"default":10,"description":"Maximum results (default 10)","maximum":45,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Results to skip, for pagination","maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"description":"Free text matched against dataset name, publisher, category, API endpoint and the questions each dataset answers. Omit to list everything.","maxLength":200,"type":"string"},"response_format":{"default":"markdown","enum":["markdown","json"],"type":"string"}},"type":"object"},"name":"postcode_search_datasets"}]},"body_sha256":"21fac387044309927a9d5e8d322b99734a162cd3d2df26b9a5137dd32c524bc2","prev_id":null,"leaf":"0x6a1d18d5da267ed22016da3073ab77bb2b79c0130dc178a5060560ab90dce583","leaf_text":"{\"body\":\"21fac387044309927a9d5e8d322b99734a162cd3d2df26b9a5137dd32c524bc2\",\"id\":578425,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793142978058065,\"prev\":null,\"subject\":\"40a29770-6d01-4707-a0ed-ccd999cee026\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0x6a1d1a6ebac0f8cdee7e58da9dcfa2c8dddf7ffd2fe1bccc6973877000e7935c","0x778cb2f32f3d7f4d8dc695758da4664639a9ff3906e6ae79bdfce36e44c17876","0x3230cc220042ba3be2abd21f3aa0d6e9d0a67a7e725c82cf96e38099b9a98c33","0x5900d1c07f151da12764e6cd81a65340dcc1695cf382f05fef4cb263014baf57","0xb6fb60f30d4f8c245563b188147e41a2eda31d86dac59763cec1e7a673166f27","0x01649a45ad1959da63920c9b8d8d7dda171851a9191624e9171d9bea5d0608b8","0xbc74cf10f16ca46d6275028b65c1552f42e0d342ef1bdfd0fa61edda3b73db11","0x4dd075076a34e8b6ccf8213357f536ef2f6ce04d779f9e98c74917211311f035","0x8beab0f3ea053c358a50ece7113efbbb08f07884882eef7bce579b8fd3d1956e","0x8292b0c4302eab317dc9442deb7c510d6a5800a9f644e4859ca59b9b2b323e8a","0xf948df558d360ef6260367a5acb11bce86c964cb5608d9fbd474976a57db8d7b","0x1907258a29a881c6f59707e890e9f73f7aff1ace32101f20e208f76e9fac9a60","0x927616fada4e04588c09f6e02e8f6e3a1351bac8355e394da3bd0bf249a5c503","0x3c5462812bd2f841e3d7deefc01555f18262fe5e0d5a7eb155330b7a7cb0388e","0x6f00f0da417f4126951ba8ba9b7962c847e91f5c61364ad9ad47e5f979698a60","0x23cf9bb4337ee8be7fcae368fd69d24c62c11fb45882127b4cd919bb96a19996","0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d","0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}