← The evidence ledger
Evidence row 578425
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 40a29770-6d01-4707-a0ed-ccd999cee026
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 21fac387044309927a9d5e8d322b99734a162cd3d2df26b9a5137dd32c524bc2
- Leaf
- 0x6a1d18d5da267ed22016da3073ab77bb2b79c0130dc178a5060560ab90dce583
What was observed
{
"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"
}
]
}What the leaf hashes
{"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"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).
- 0x6a1d1a6ebac0f8cdee7e58da9dcfa2c8dddf7ffd2fe1bccc6973877000e7935c
- 0x778cb2f32f3d7f4d8dc695758da4664639a9ff3906e6ae79bdfce36e44c17876
- 0x3230cc220042ba3be2abd21f3aa0d6e9d0a67a7e725c82cf96e38099b9a98c33
- 0x5900d1c07f151da12764e6cd81a65340dcc1695cf382f05fef4cb263014baf57
- 0xb6fb60f30d4f8c245563b188147e41a2eda31d86dac59763cec1e7a673166f27
- 0x01649a45ad1959da63920c9b8d8d7dda171851a9191624e9171d9bea5d0608b8
- 0xbc74cf10f16ca46d6275028b65c1552f42e0d342ef1bdfd0fa61edda3b73db11
- 0x4dd075076a34e8b6ccf8213357f536ef2f6ce04d779f9e98c74917211311f035
- 0x8beab0f3ea053c358a50ece7113efbbb08f07884882eef7bce579b8fd3d1956e
- 0x8292b0c4302eab317dc9442deb7c510d6a5800a9f644e4859ca59b9b2b323e8a
- 0xf948df558d360ef6260367a5acb11bce86c964cb5608d9fbd474976a57db8d7b
- 0x1907258a29a881c6f59707e890e9f73f7aff1ace32101f20e208f76e9fac9a60
- 0x927616fada4e04588c09f6e02e8f6e3a1351bac8355e394da3bd0bf249a5c503
- 0x3c5462812bd2f841e3d7deefc01555f18262fe5e0d5a7eb155330b7a7cb0388e
- 0x6f00f0da417f4126951ba8ba9b7962c847e91f5c61364ad9ad47e5f979698a60
- 0x23cf9bb4337ee8be7fcae368fd69d24c62c11fb45882127b4cd919bb96a19996
- 0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d
- 0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585
- 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
- Day root
- 0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
- Chained
- 0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
- Published
- On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4