# booli-mcp [Health: Active]

**Category:** 🏠 Real Estate  
**Repository:** https://github.com/chrischall/booli-mcp  
**GitHub Stars:** 4  
**npm Downloads (last month):** 2498  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/booli-mcp

## Description
Booli.se real estate for Claude: search listings, sold prices, areas & market stats

## Tools
Capabilities this server exposes over MCP:

- **booli_search_areas** — 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.
- **booli_search_listings** — 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.
- **booli_get_listing** — Full detail for one property by its Booli residence id — the number in a booli.se/bostad/<id> URL, or the `residence_id` from a search result. Works for both active and sold properties. Read-only.
- **booli_search_sold** — 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.
- **booli_market_stats** — 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.
- **booli_healthcheck** — 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.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "booli-mcp": {
    "command": "npx",
    "args": ["-y","@chrischall/booli-mcp"],
    "env": {
      "BOOLI_TRANSPORT": "",
      "BOOLI_WS_PORT": ""
    }
  }
}
```

**Requires environment variables:** `BOOLI_TRANSPORT`, `BOOLI_WS_PORT` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What booli-mcp does

booli-mcp exposes Booli.se property data as read-only MCP tools. It covers both current and historical market research: active listings, completed sales, individual property records, area resolution, and sold-price statistics.

The main search flow starts with `booli_search_areas`, which converts a place name into Booli area IDs. Those IDs can then scope listing and sales searches. Queries may also use a free-text location. Monetary values are expressed in SEK, and property areas use square metres.

## How it works

Booli’s consumer GraphQL API is protected by a Cloudflare bot wall that can prevent ordinary server-side requests. booli-mcp supports a browser-mediated route through the ContextMint Bridge extension. The bridge sends requests through an open `www.booli.se` browser tab and reuses that tab’s Cloudflare-cleared session.

`BOOLI_TRANSPORT` controls request routing:

- `auto` tries direct access first and uses the browser bridge if access is blocked.
- `fetchproxy` always uses the bridge.
- `direct` uses direct requests only.

No Booli account login is required for the normal page view described by the project, but the browser-bridge path requires an open Booli tab and a one-time pairing approval.

## Setup and configuration

Install the server through an MCP client using the following stdio configuration:

```json
{
  "mcpServers": {
    "booli": {
      "command": "npx",
      "args": ["-y", "@chrischall/booli-mcp"]
    }
  }
}
```

For bridge fallback, install ContextMint Bridge from its Chrome release, load the unpacked extension with Chrome’s Developer mode, and keep a `www.booli.se` tab open. Approve the pairing prompt on the first request. Safari is not available for this setup.

The bridge fleet uses WebSocket port `37149` by default. Set `BOOLI_WS_PORT` to use another port. Run `booli_healthcheck` after setup to inspect the selected transport and bridge state.

## Tools and capabilities

- `booli_search_areas` resolves a place name into Booli area IDs.
- `booli_search_listings` searches active for-sale properties using an area and filters.
- `booli_get_listing` returns full details for a property identified by residence ID, whether active or sold.
- `booli_search_sold` searches completed sales and their final prices.
- `booli_market_stats` reports median and average sold prices for an area.
- `booli_healthcheck` checks the data path and reports transport and bridge details, including pairing state and a next-step hint.

## Limitations and notes

All tools are read-only. The browser route depends on the ContextMint Bridge extension, an available Booli tab, and a successful pairing. The health check can distinguish direct access from bridge access and can report states such as linked, pairing pending, or disconnected. Use Booli’s data within its terms of use.

_Full upstream README: https://allmcps.com/mcp/booli-mcp/readme_

