{
  "markdown": "# booli-mcp\n\nAn MCP server for [Booli](https://www.booli.se), the Swedish property\nportal — search active for-sale listings, sold prices (slutpriser),\nresolve areas, and compute market statistics, all from Claude.\n\n> Developed and maintained by AI (Claude Code). Use at your own discretion\n> and within booli.se's terms of use.\n\n## How it works\n\nBooli fronts www.booli.se — including its GraphQL API — with a Cloudflare\nbot wall that blocks server-side clients. booli-mcp therefore reads Booli's\nconsumer GraphQL API by routing each query through **your own signed-in\nwww.booli.se browser tab** via the fetchproxy bridge (the Transporter\nextension), reusing your Cloudflare-cleared session. No\nBooli login is required — just a normal page view. All tools are read-only.\n\n`BOOLI_TRANSPORT` selects the path: `auto` (default — direct fetch first,\nbrowser-bridge fallback when walled), `fetchproxy` (always the bridge), or\n`direct`. The fetchproxy fleet shares WS port `37149` (`BOOLI_WS_PORT`).\n\n## Setup\n\n1. Install the Transporter (fetchproxy) browser extension and keep a\n   **www.booli.se** tab open.\n2. On the first request, approve the one-time pairing prompt in Transporter.\n3. Run `booli_healthcheck` to confirm the path is working. Its `transport`\n   field says which leg served the probe (`direct` or `fetchproxy`) and,\n   once the bridge exists, `bridge.session_state` says whether the\n   Transporter extension is `linked`, `pair_pending` (approve the pair code\n   it names), or `extension_disconnected`.\n\n## Install\n\n```jsonc\n// mcp config\n{\n  \"mcpServers\": {\n    \"booli\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@chrischall/booli-mcp\"]\n    }\n  }\n}\n```\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `booli_search_areas` | Resolve a place name to Booli area ids |\n| `booli_search_listings` | Search active for-sale listings by area + filters |\n| `booli_get_listing` | Full detail for one property (active or sold) by residence id |\n| `booli_search_sold` | Search sold listings (slutpriser) with final prices |\n| `booli_market_stats` | Median/average sold-price statistics for an area |\n| `booli_healthcheck` | Probe the data path and report `transport` (direct / fetchproxy, the `BOOLI_TRANSPORT` mode) and, once the bridge is up, `bridge` (role, port, extension link `session_state`, pending pair code) with a next-step hint |\n\nSearches scope by `area_id` (from `booli_search_areas`) or a free-text\n`location`. Money is SEK, areas m². See\n[`docs/BOOLI-API.md`](docs/BOOLI-API.md) for the underlying GraphQL API.\n\n## Development\n\n```\nnpm install\nnpm test          # vitest, no network\nnpm run build     # tsc + esbuild bundle\n```\n\n## License\n\nMIT\n",
  "bytes": 2669,
  "sha": "478639296ccbd0ea585260d6a1b7b099f5b31191cc7cc9492c706a97ebb9f8b7",
  "repo_slug": "chrischall/booli-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_chrischall_booli_mcp_d7157600/readme"
}