MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Knowledge & memory

Close Knit

Neighbourhood and home evidence for England, London in depth: prices, rents, schools, crime, travel.

Checks passed
15 / 22

0 failed · 7 not measured

Median response
242 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
33

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Responded

The server completed its last measured handshake. This is an observation, not a guarantee.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
103
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
402

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 253 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name close-knit.

  • Pass
    Lists tools

    tools/list returned 33 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 242 ms over 2 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 252 ms over 2 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    2 of 2 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Pass
    Stable tool list

    No tool was removed and no required parameter was added in the last 30 days.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    212 of 212 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Pass
    Source repo linked

    A repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-09T15:13:17.693402Z, within 180 days.

  • Not measured
    Open-source licence

    The GitHub licence lookup has not returned an OSI result yet.

Start using Close Knit

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http close-knit https://getcloseknit.com/mcp

Capabilities

Tools 33

assess_listing

Check one listing the user found against local evidence: asking price vs the same home type's recorded £/m² (with floor area or a bedroom-based ballpark) or median price, the LSOA then its MSOA (all types only as indicative-only), typicalPrice, a flood line, turnover, growth, the local authority's official HPI, costs (stamp duty on the asking price, the council tax by band), crime with its offence mix, noise, schools (state and independent counts), planning rules (home: conservation, Article 4, listed buildings), listed buildings recorded at or near the postcode (listedNearby), the IMD decile, and the questions to ask the agent (lease, service charge, EWS1, listing). Not a valuation.

Discovered
build_watch_spec

Turn a finished search into a watch: portal searches per postcode district, filters, a state file path for de-duplication and a ready prompt for a scheduled task in the user's Claude that reports only new listings. Stateless: nothing is stored on Close Knit.

Discovered
describe_data

The map of Close Knit's data; call it first, and whenever you are unsure of a metric, path or category name. No arguments: a summary (themes with metric counts and 2-3 headline metrics, Census in one line, places in one line, the entity kinds). theme='crime' lists that theme's metrics: unit, levels, period, coverage (England or London only), better end, what each measures and is not (name the metric you use; say when it differs from the question). query='trees' finds metrics with ranked within, source, own-row levels and England and region refs, paths, place categories and brands by words. kind='place' lists place categories with counts and brands; kind='school' the school measures; kind='lsoa' (or msoa, lad, rgn, pc, uprn, sector) the sections and select paths of that kind; kind='custom' the place presets; kind='ranking' the saved rankings for query(saved:); kind='guide' the site's guide articles, read with get(ids: ['guide:crime']).

Discovered
evaluate_custom_criterion

Moved: use query(saved: "custom:<preset>"). Answers until 2026-11-30.

Discovered
fetch

For deep research: one search result by id as text with its page url to cite (an area: every section's headline facts, caveats, sources; a guide: its article). In chat prefer get.

Discovered
find_areas

Shortlist neighbourhoods in England (London in depth) for a household: budget, bedrooms, weighted priorities (crime, station access, price level, official deprivation decile, noise, disorder, energy rating, leasehold share, good primaries) and optional stations or local authorities to live near (regions narrows to English regions, e.g. ['london']; with no regions, stations or boroughs all of England is searched). Returns areas in one order (orderedBy): tier (every must met, then unverified), budget band (within, stretch, over, unknown), then standing 0-100 (with property_type every within-budget area first); present them in that order, never by score (mapScore, the map's colour). meets ('4 of 5') and aheadBecause explain it; budgetLabel says the budget in words ('within budget' only for the type's own figure); factor values with a typed fact (quality measured, modelled, estimate or unknown; range; verifyUrl), typicalPrice (the median recent sale), estimatedPrice and budgetFit (with property_type the type's own figure, priceBasis says which; else a ballpark for the bedroom count), postcode districts and website links. A deal-breaker needs must true (a range or place without it only ranks); tier unverified (mustStatus unknown, verified false, tierReasons) marks a must on an estimate, National Rail beside the routed lines or modelled minutes inside the margin: open the factor's fact.verifyUrl or check that journey on the web before calling it met; a must on a coverage gap leaves the area out (gapLeftOut). A ranked criterion an area has no data for (no crime is published for Greater Manchester) counts as half a fit and is named in that area's notScored: say so. Pass rejected areas in exclude_area_ids when refining after the user's feedback (LSOA, MSOA or local authority ids). The first tool for 'where should we live?'; rank_areas_by_metric sorts by one metric only, match_areas scores a ready preference-profile.v2, search_areas only turns names into ids. Answers big to small. value.levels holds up to 3 lists for the user's scope (London: boroughs, neighbourhoods, then value.areas; England: regions, local authorities, then areas). Each list ranks the whole scope at its own level and has at most 5 items. fits/total = areas in the group that meet every must within budget (share = fits/total in %). Lead with the level the user asked about, then drill down with boroughs=[id]. value.standouts names top areas inside groups that rank low: always mention one. value.nearby is one group just outside the scope that scores higher: one sentence at most. Each item's f holds facts as [value, rating 1-10 within factScope]. value.defs says once what each key counts, its unit, period, level, reference (ref, the scope median) and source. Quote a rating with its value and ref ('crime 8/10: 44 vs London 78 per 1,000'), never alone. Name a neighbourhood by near and outcode ('around Highams Park station, E4'). detail='full' adds every fact; get_area_overview has the rest.

Discovered
find_similar_areas

Neighbourhoods like one the user liked (crime, deprivation, income, price level and station access percentiles), optionally only cheaper ones (cheaper_by_percent lower £/m², crime no more than 10 points worse) and within max_budget for bedrooms: 'like this but cheaper / elsewhere'.

Discovered
get

Everything about 1-10 things by typed id: uk:lsoa:E01…, uk:msoa:E02…, uk:lad:E09…, uk:rgn:E12…, sector:e17-4, pc:E17 4PP, uprn:<digits>, school:<URN>, place:osm:n123 (search_places finds ids from names), or a guide article, guide:crime, in a call of its own (describe_data(kind: 'guide') lists them): the page's text, how a figure is made and what it cannot say. No select: a summary and an index of sections. select takes plain dotted paths (safety.rate, layers.air-no2, flood, rents); an unknown path answers didYouMean and the valid paths. sections='all' gives every section's headline facts; sections=['layers'] the headline map layers (Census only with theme or query); detail='full' adds series by year. Two or more ids add a compare view: a row per fact with each id's value and who leads. An unknown id among others is its own entry in errors; the rest are answered. Each item has nav (up, inside, nearby, act) and the site page url. Figures equal the site's pages; flags as on the site.

Discovered
get_address_history

Moved: use get(["uprn:…"], select: ["history"]). Answers until 2026-11-30.

Discovered
get_area_evidence_pack

Moved: use get([id], sections: ["pack"]). Answers until 2026-11-30.

Discovered
get_area_metric

Moved: use get([id], select: ["layers.<metric>"]). Answers until 2026-11-30.

Discovered
get_area_overview

Moved: use get([id]). Answers until 2026-11-30.

Discovered
get_commute

Door-to-door minutes from one neighbourhood to the user's places on a weekday morning, by public transport (R5 on TfL timetables), bike (at the speed Santander Cycles riders reach; checked against TfL), car (typical morning traffic, no parking) and walking, each with a range. Places within 1.5 km of a commute hub (King's Cross, Bank, Canary Wharf, Oxford Circus…) are routed through it; others in Greater London get a straight-line estimate (estimate: true); places outside Greater London, and every place from a neighbourhood outside London (the routing is London only), get straight-line estimates in every mode, long trips at a main-line speed (estimate: true, reason 'outside-routing'). A neighbourhood served by National Rail only also gets a rail estimate (modes.rail, estimate: true). Example routes start at the neighbourhood's MSOA centre (origin); one far from the headline minutes is representative: false and lists its lines only. Journeys over 120 minutes are not timed (minutes null, capped: true). A place takes latitude/longitude or center [longitude, latitude] from search_places; quote estimate minutes as estimates. Each mode's confidence: 'timetable' (TfL), 'routed' (London streets) or 'approximate' (straight-line estimates). googleMapsUrl opens Google Maps' own route for the user to check: its time, leaving now, not ours.

Discovered
get_flood_risk

Moved: use get([pc | uprn | id], select: ["flood"]). Answers until 2026-11-30.

Discovered
get_home_prices

Moved: use get(["uprn:…"]). Answers until 2026-11-30.

Discovered
get_listing_search_links

Pre-filtered searches on Rightmove, Zoopla, OnTheMarket (and OpenRent for rentals) for the postcode districts of shortlisted areas, filtered by bedrooms, price and property_type (house, flat, bungalow). Links only: open them on the user's behalf to read listings; Close Knit itself never fetches or stores listings.

Discovered
get_market_depth

Moved: use get([id], select: ["market"]). Answers until 2026-11-30.

Discovered
get_nearby_sales_summary

Moved: use get(["uprn:…"], select: ["nearby-sales"]). Answers until 2026-11-30.

Discovered
get_places

The places themselves (2.58 m: shops, gyms, cafes, parks, pubs, GPs, ... in 234 categories) near a typed id or {lat, lon} (radius_m 100-3000) or inside an area, by category (describe_data(kind: 'place') lists them) and brand (PureGym, Waitrose). Each: name, category, brand, metres, walk minutes (straight line, an estimate), its LSOA and sources. ODbL attribution; the full places.csv download link. Places of worship are never listed.

Discovered
get_rent_levels

Moved: use get([id], select: ["rents"]). Answers until 2026-11-30.

Discovered
list_custom_presets

Moved: use describe_data(kind: "custom"). Answers until 2026-11-30.

Discovered
list_metrics

Moved: use describe_data(). Answers until 2026-11-30.

Discovered
list_school_measures

Moved: use describe_data(kind: "school"). Answers until 2026-11-30.

Discovered
match_areas

Score every area against a household's ordered criteria (preference-profile.v2: budget, ranges on any map layer, places, where zones, own criteria; must = filter). Returns a match-pack.v2 with the best top_n (default 20, max 100) areas as a list with score, rank and percentile per area, its top 2 reasons and 2 weakest criteria, the bottom 10, and per-criterion components (value, fit, in/edge/out) as evidence for the listed areas only. Whole-coverage counts (scored, unscored, excluded, and excludedBy per unmet must) cover every area; mapUrl opens the full map for the search. Set analyticsConsent true only if the user agreed to store an anonymised profile summary; the tool works identically with false. Takes a ready profile (built by you or exported from the site); for a conversational home search use find_areas, which builds the profile from plain answers and adds ballpark prices.

Discovered
open_shared_search

Open a search the user shared from the Close Knit site (a link with #profile=v1., v2. or v3.): their budget, priorities, places (gym, work, schools…), liked and ruled-out areas and private notes, re-ranked now with the same shortlist as find_areas. Use it when the user pastes such a link or says 'discuss my search'.

Discovered
query

Analyse many areas or schools with a JSON query (never SQL). kind='area' (default): level lsoa, msoa, lad or rgn; scope england, london, a region or typed area ids; filters by value {metric, min, max}, percentile in scope {metric, pct_min}, vs the scope's reference {metric, vs: above}, change over N years {metric, change: {years, min}}, places inside {places: {category, brand, min}} or within_m; sort by a metric, a group stat {stat: median, metric} or deviation; above the metric's carrier level rows are groups: each metric is the group's own figure (its own row where the metric holds one at the level: crime, crime-<category>, green-share, gross-yield; official where the publisher gives the council's or region's; else the weighted mean of all its areas; items[].method says which), with median, p25-p75, best tenth, count and fit share of the passing areas when asked, and group_filters filter them. defs say what each metric measures and is not, with England and region refs. kind='school' ranks schools (phase, ofsted, measure, near). saved='metric:<id>' or 'custom:<preset>' runs a named ranking (describe_data(kind: 'ranking')). Pages of 10 (next.release flags moved rows) and a CSV download link. A London-only metric with an England scope is the coverage error with a hint; people metrics (Census) are never filtered or ranked.

Discovered
rank_areas_by_metric

Moved: use query(saved: "metric:<id>"). Answers until 2026-11-30.

Discovered
rank_schools

Moved: use query(kind: "school"). Answers until 2026-11-30.

Discovered
rate_answer

Rate a Close Knit answer by its callId (none: the last answer): rating 1-5, what was good, what was bad or missing, the fix you would want. Use it for the last answer in a conversation; earlier ones go in the next call's rate_previous. It describes the answer, never the user. Stored for 90 days with the call's intent summary, tool, client name and the conversation's one-way tag, contact details and full postcodes removed, no IP address or user agent.

Discovered
search

For deep research: areas, postcodes, schools, stations and parks (as their area) and guide articles by words; results [{id, title, url}], read one with fetch. In chat prefer find_areas, search_places, get, query.

Discovered
search_areas

Moved: use search_places(q). Answers until 2026-11-30.

Discovered
search_places

Resolve a place the user mentions (station, borough, neighbourhood, postcode, street) to ids. Station lookup forgives spelling (Kings Cross, St James Park, Elephant and Castle) and knows London codes and nicknames (KX, TCR, LST, E&C, ally pally). Returns stations (osm:…, with TfL modes, lines and zone; twin stations such as Hammersmith are listed apart) for find_areas.near_stations, local authorities (uk:lad:…; London's boroughs) for find_areas.boroughs, areas (with ladId) and addresses for get (typed ids: uk:lsoa:…, pc:…, uprn:…) and assess_listing, and venues (a pool, gym or sports centre by name, with latitude/longitude to pin as a place). best is the likeliest meaning: a venue named exactly so, then a town, city or council named exactly so above a stop that only shares the name; 'Liverpool St' is the station. A street found only outside the town typed gives best null, reason town-mismatch and candidates with their towns: ask which. query is an alias of q.

Discovered
send_feedback

Send feedback about Close Knit to the team: a bug, missing or wrong data, an idea, or what worked. Call it only after the user agrees: show them the message first. Describe the product and what happened, never the person: no names, contact details, addresses, family, budget or other personal circumstances. Kept 12 months, e-mail addresses and phone numbers removed; no reply channel: the answer gives an id, the changelog names ids fixed. Other tools' intent summaries and answer ratings: 90 days.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected253 ms33
Connected231 ms33