booli-mcp
One-line summary: Read-only access to Booli.se Swedish property data — active listings, sold prices, area lookup, and market statistics — through your signed-in browser session.
Resolve areas (
booli_search_areas): turn a place name (e.g. "Nacka", "Södermalm") into Booliarea_ids for municipalities, districts, and streets.Search for-sale listings (
booli_search_listings): scope byarea_idor free-textlocation, filter by price, SEK/m², rooms, living/plot area, object type (Lägenhet, Villa, etc.), new-construction status, and construction year; sort and paginate viapage/total_count.Get one property (
booli_get_listing): full detail for a residence id (from a/bostad/<id>URL or search result), for active or sold properties.Search sold listings / slutpriser (
booli_search_sold): comparables with achieved final price and over/under-asking %, filterable additionally by sold price and sold date (YYYYMMDD).Compute market stats (
booli_market_stats): median/average sold price, price per m², and average over/under-asking % for an area, with asample_sizewarning for thin data.Diagnose the data path (
booli_healthcheck): reportstransport(direct vs fetchproxy), bridge role/port/version, extension link state (linked / pair pending / disconnected), round-trip time, and a next-step hint.All tools are read-only (no Booli login required), with
compact/fullresponse views; money in SEK, areas in m².
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@booli-mcp Show me sold prices in Göteborg"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
booli-mcp
An MCP server for Booli, the Swedish property portal — search active for-sale listings, sold prices (slutpriser), resolve areas, and compute market statistics, all from Claude.
Developed and maintained by AI (Claude Code). Use at your own discretion and within booli.se's terms of use.
How it works
Booli fronts www.booli.se — including its GraphQL API — with a Cloudflare bot wall that blocks server-side clients. booli-mcp therefore reads Booli's consumer GraphQL API by routing each query through your own signed-in www.booli.se browser tab via the fetchproxy bridge (the ContextMint Bridge browser extension), reusing your Cloudflare-cleared session. No Booli login is required — just a normal page view. All tools are read-only.
BOOLI_TRANSPORT selects the path: auto (default — direct fetch first,
browser-bridge fallback when walled), fetchproxy (always the bridge), or
direct. The fetchproxy fleet shares WS port 37149 (BOOLI_WS_PORT).
Related MCP server: Zillow MCP Server
Setup
Install ContextMint Bridge from its releases page — Chrome: download the chrome zip, unzip it, and load it unpacked at
chrome://extensions(Developer mode). Safari isn't available yet (it will ship inside the ContextMint app, which has no public download), so use Chrome for now. Keep a www.booli.se tab open.ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the
.sha256file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).On the first request, approve the one-time pairing prompt in ContextMint Bridge.
Run
booli_healthcheckto confirm the path is working. Itstransportfield says which leg served the probe (directorfetchproxy) and, once the bridge exists,bridge.session_statesays whether the extension islinked,pair_pending(approve the pair code it names), orextension_disconnected.
Install
// mcp config
{
"mcpServers": {
"booli": {
"command": "npx",
"args": ["-y", "@chrischall/booli-mcp"]
}
}
}Tools
Tool | What it does |
| Resolve a place name to Booli area ids |
| Search active for-sale listings by area + filters |
| Full detail for one property (active or sold) by residence id |
| Search sold listings (slutpriser) with final prices |
| Median/average sold-price statistics for an area |
| Probe the data path and report |
Searches scope by area_id (from booli_search_areas) or a free-text
location. Money is SEK, areas m². See
docs/BOOLI-API.md for the underlying GraphQL API.
Development
npm install
npm test # vitest, no network
npm run build # tsc + esbuild bundleLicense
MIT
Available Tools
6 toolsbooli_get_listingGet a Booli propertyARead-onlyIdempotent
Full detail for one property by its Booli residence id — the number in a booli.se/bostad/ URL, or the residence_id from a search result. Works for both active and sold properties. Read-only.
Inputs: residence_id (required), view.
booli_healthcheckVerify the ContextMint Bridge connection end-to-endARead-onlyIdempotent
Round-trips a small public www.booli.se URL (/graphql) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real www.booli.se-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.
Inputs: no named parameters.
booli_market_statsBooli sold-price market statisticsARead-onlyIdempotent
Aggregate sold-price statistics (median/average final price, price per m², average over/under-asking %) for an area on booli.se. Takes the same scope and filters as booli_search_sold, computed over ONE page of sold results (most recent first by default) — page/pages say which, and total_count is the whole matching set, not the sample. sample_size is the rows on the page; sold_price_count / price_per_sqm_count / price_change_count are the rows that fed each metric. Check them before trusting a thin median. Read-only.
Inputs: page, sort, view, area_id, +18 more.
booli_search_areasResolve a Booli areaARead-onlyIdempotent
Resolve a place name to Booli areas — municipalities, districts, streets — each with its area_id to pass as area_id into booli_search_listings / booli_search_sold. Read-only.
Inputs: query (required), limit.
booli_search_listingsSearch Booli for-sale listingsARead-onlyIdempotent
Search active for-sale property listings on booli.se. Scope by area_id (from booli_search_areas) or a free-text location, and filter by price, rooms, living area, plot, object type, construction year. Paginated by page; check total_count/pages. Read-only.
Inputs: page, sort, view, area_id, +16 more.
booli_search_soldSearch Booli sold listings (slutpriser)ARead-onlyIdempotent
Search sold properties (slutpriser) on booli.se with the achieved final price and over/under-asking % — the comparables for valuation. Scope by area_id or free-text location, filter by sold price, sold date, rooms, area, object type. Paginated by page. Read-only.
Inputs: page, sort, view, area_id, +18 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct purpose: area resolution, active listing search, single-listing detail, sold-comparable search, aggregate stats, and a bridge healthcheck. The descriptions clearly draw boundaries (e.g. market_stats vs search_sold), so an agent can select reliably.
All tools share a consistent booli_ prefix and snake_case, with search_*/get_* following a predictable verb_noun pattern. market_stats and healthcheck deviate from verb_noun but remain clear and readable.
Six tools is well-scoped for a read-only real-estate data server, and each tool earns its place (search, detail, areas, stats, diagnostics). No redundancy or padding.
The surface covers the full read path: area resolution feeds both listing and sold searches, plus single-item detail and aggregated valuation stats. As a read-only server, mutation gaps are expected, though a performance/valuation-history helper would round it out.
Maintenance
Related MCP Connectors
Search SimplyRETS MLS listings and open houses; read listing and market analytics.
Pull property listings, prices, and details from real-estate sites as structured JSON.
Booking.com stays by destination and dates, and full property details, as structured JSON.
Zillow for-sale, for-rent and sold listings, and full property details, as structured JSON.
Related MCP Servers
- FlicenseBqualityNot gradedmaintenanceEnables AI assistants to search and analyze Swedish real estate data from Booli.se using natural language queries. Supports property searches with comprehensive filtering options and location discovery through GraphQL API integration.31-
- AlicenseNot gradedqualityDmaintenanceProvides real-time access to Zillow real estate data, enabling property search, details, Zestimates, market trends, and mortgage calculations via natural language.11 npm56MIT
- AlicenseAqualityCmaintenanceEnables searching Korean apartment listings, market prices, and recent transactions via Naver Real Estate through natural language.26MIT
- AlicenseAqualityDmaintenanceEnables searching and retrieving listings from Sweden's Blocket marketplace, including cars, boats, motorcycles, and general items, without requiring an API key.6MIT