Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,536Letters: 14Defects: 1,322counted 2 min ago
teppi

Server definition

Hash
sha256:c24745322ae1bdbc22d92335acaee1516a0aef779f736bf46676fbeb98a542df
What it is
What a remote MCP server returned when asked what it offers: 5 tools

The blob, as servednamed by its sha256

{ "instructions": "UK neighbourhood research from government open data. postcode_lookup resolves a postcode to its geography; postcode_report gathers eleven categories of data about it; postcode_compare lines several postcodes up side by side; postcode_search_datasets and postcode_get_dataset cover the 45 underlying sources for anything the report does not answer directly. Every figure states the geography it describes and the period it covers — an LSOA is a neighbourhood of ~1,500 people and Ofcom mobile coverage describes a whole local authority, so read those before treating a number as being about one address. Coverage varies by UK nation and is reported explicitly rather than silently omitted.", "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", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "categories": { "items": { "type": "string" }, "type": "array" }, "caveats": { "items": { "type": "string" }, "type": "array" }, "postcodes": { "items": { "type": "string" }, "type": "array" }, "rows": { "items": { "additionalProperties": false, "properties": { "category": { "type": "string" }, "measure": { "type": "string" }, "values": { "additionalProperties": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "display": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "tone": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "value": { "anyOf": [ { "anyOf": [ { "type": "number" }, { "type": "string" } ] }, { "type": "null" } ] } }, "required": [ "display", "value", "band", "tone", "status" ], "type": "object" }, "propertyNames": { "type": "string" }, "type": "object" } }, "required": [ "category", "measure", "values" ], "type": "object" }, "type": "array" } }, "required": [ "postcodes", "categories", "rows", "caveats" ], "type": "object" } }, { "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", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "api": { "type": "string" }, "api_docs": { "type": "string" }, "category": { "type": "string" }, "coverage": { "type": "string" }, "dataset": { "type": "string" }, "format": { "type": "string" }, "id": { "type": "string" }, "licence": { "type": "string" }, "link": { "type": "string" }, "publisher": { "type": "string" }, "questions": { "items": { "type": "string" }, "type": "array" }, "update_frequency": { "type": "string" } }, "required": [ "id", "dataset", "publisher", "link", "api", "api_docs", "format", "licence", "coverage", "update_frequency", "questions", "category" ], "type": "object" } }, { "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", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "constituency": { "type": "string" }, "country": { "type": "string" }, "deprivation_index": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deprivation_rank": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "latitude": { "type": "number" }, "local_authority": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name", "code" ], "type": "object" }, "longitude": { "type": "number" }, "lsoa": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name", "code" ], "type": "object" }, "msoa": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name", "code" ], "type": "object" }, "national_park": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "output_area": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "police_force": { "type": "string" }, "postcode": { "type": "string" }, "region": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "rural_urban": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "ward": { "additionalProperties": false, "properties": { "code": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name", "code" ], "type": "object" } }, "required": [ "postcode", "latitude", "longitude", "country", "region", "local_authority", "ward", "constituency", "lsoa", "msoa", "output_area", "police_force", "rural_urban", "national_park", "deprivation_rank", "deprivation_index" ], "type": "object" } }, { "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", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "categories": { "items": { "additionalProperties": false, "properties": { "facts": { "items": { "additionalProperties": false, "properties": { "band": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "benchmark": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "display": { "type": "string" }, "geography": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "label": { "type": "string" }, "note": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "period": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "source_id": { "type": "string" }, "tone": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "unit": { "type": "string" }, "value": { "anyOf": [ { "type": "number" }, { "type": "string" } ] } }, "required": [ "label", "value", "display", "source_id" ], "type": "object" }, "type": "array" }, "id": { "type": "string" }, "label": { "type": "string" }, "notes": { "items": { "type": "string" }, "type": "array" }, "status": { "type": "string" }, "summary": { "type": "string" } }, "required": [ "id", "label", "status", "facts", "notes" ], "type": "object" }, "type": "array" }, "country": { "type": "string" }, "local_authority": { "type": "string" }, "postcode": { "type": "string" } }, "required": [ "postcode", "local_authority", "country", "categories" ], "type": "object" } }, { "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", "outputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "additionalProperties": false, "properties": { "count": { "type": "number" }, "datasets": { "items": { "additionalProperties": false, "properties": { "api": { "type": "string" }, "category": { "type": "string" }, "coverage": { "type": "string" }, "dataset": { "type": "string" }, "id": { "type": "string" }, "licence": { "type": "string" }, "publisher": { "type": "string" }, "update_frequency": { "type": "string" } }, "required": [ "id", "dataset", "publisher", "category", "api", "licence", "coverage", "update_frequency" ], "type": "object" }, "type": "array" }, "has_more": { "type": "boolean" }, "next_offset": { "type": "number" }, "offset": { "type": "number" }, "total": { "type": "number" } }, "required": [ "total", "count", "offset", "has_more", "datasets" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:c24745322ae1bdbc22d92335acaee1516a0aef779f736bf46676fbeb98a542df | sha256sum