booli-fpx
Query booli.se (Swedish property portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the booli-mcp server — resolve areas, search for-sale and sold listings (slutpriser), and read property detail via one-shot GraphQL calls through a signed-in browser tab. Use when you want Booli data without the MCP, in a script, or on a machine where the MCP isn't installed. Skill: booli-fpx Owner: chrischall Summary: Query booli.se (Swedish property portal) from a shell with the fpx CLI (@fetchproxy/cli) instead of running the booli-mcp server — resolve areas, search for-sale and sold listings (slutpriser), and read property detail via one-shot GraphQL calls through a signed-in browser tab. Use when you want Booli data without the MCP, in a script, or on a machine where the MCP isn't in
Rank
62
Safety
84
Downloads
1.1k
Updated
Oct 11, 2026
Version
2.1.8
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 11, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 11, 2026
- Adoption signal
- 1.1K downloadsadoption · observed Oct 11, 2026
- Latest release
- 2.1.8release · observed Oct 9, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:booli-fpx- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-booli-fpx/snapshot"
Documentation
CLAWHUB
126,786 characters of source documentation, loaded on request.
Extracted files
4 files captured from the source.
SKILL.md
---
name: booli-fpx
description: >-
Query booli.se (Swedish property portal) from a shell with the fpx CLI
(@fetchproxy/cli) instead of running the booli-mcp server — resolve areas,
search for-sale and sold listings (slutpriser), and read property detail via
one-shot GraphQL calls through a signed-in browser tab. Use when you want
Booli data without the MCP, in a script, or on a machine where the MCP isn't
installed.
---
# Booli via fpx (no MCP)
Booli fronts `www.booli.se` — including `/graphql` — with a Cloudflare managed
challenge that 403s any plain `curl`/Node request. `fpx` routes the request
through the user's own signed-in browser tab (the ContextMint Bridge extension),
which has already cleared the challenge, so the same anonymous GraphQL query
succeeds. No Booli login is needed — just a normal open tab.
This is the same data the `booli_*` MCP tools return (money in **SEK**, areas
in **m²**, rooms as a number), reached with one CLI call instead of a running
server.
## One-time setup
```sh
npm install -g @fetchproxy/cli # provides `fpx`
fpx profile add booli --domain booli.se # only the fetch capability is needed
fpx pair -p booli # prints a pair code → approve in ContextMint Bridge
```
Requirements: the **ContextMint Bridge** browser extension installed (from
https://github.com/nullnet-app/contextmint-bridge/releases — Chrome: load the chrome zip
unpacked; Safari isn't available yet — use Chrome for now), with an open
`www.booli.se` tab, and its Chrome **Site access** allowing `booli.se`.
ContextMint Bridge is the fetchproxy extension renamed, same maintainer; source at
https://github.com/nullnet-app/contextmint-bridge (build it, or verify a release zip with its published `.sha256`).
Pairing persists — after the first approval every later `fpx` call reuses it.
## Core call
Every query is a POST of `{"query": "...", "variables": {...}}` to the GraphQL
endpoint. Write the body to a file (a heredoc avoids shell-quoting the GraphQL
string), then send it so stdout is the GraphQL JSON, ready for `jq`:
```sh
cat > /tmp/bq.json <<'JSON'
{ "query": "…", "variables": { … } }
JSON
fpx post-json 'https://www.booli.se/graphql' @/tmp/bq.json -p booli | jq '.data'
```
Ready-to-run query bodies (area lookup, for-sale search, sold search, property
detail) with `jq` recipes are in `references/graphql-queries.md`. Exhaustive
field lists live in the repo at `src/graphql.ts` — the operations here are
compact, live-verified subsets.
## The one rule: resolve the area first
Booli searches take a numeric **area id** (`areaId`), never a place name.
Always resolve the name first, take the `id`, then search:
```sh
printf '{"query":"query($s:String!){areaSuggestionSearch(search:$s){suggestions{id displayName}}}","variables":{"s":"Nacka"}}' > /tmp/a.json
fpx post-json 'https://www.booli.se/graphql' @/tmp/a.json -p booli \
| jq -r '.data.areaSuggestionSearch.suggestions[] | "\(.id)\t\(.displayName)"'
# 76 _meta.json
{
"ownerId": "kn700jq4sjtf2anb0rk3ft4p7n856872",
"slug": "booli-fpx",
"version": "2.1.8",
"publishedAt": 1791588244677
}references/graphql-queries.md
# Booli GraphQL queries for fpx
Ready-to-run bodies for `fpx post-json 'https://www.booli.se/graphql' @file -p booli`.
Each block is the full POST body (`{"query","variables"}`). All field names and
input shapes are live-verified against the endpoint; the exhaustive field
selections live in the repo at `src/graphql.ts` (these are compact subsets).
Endpoint: `https://www.booli.se/graphql` · Method: POST · anonymous.
Introspection is disabled — probe field names by sending a query and reading the
validation errors (that's how these were pinned).
Write the body to a file (heredoc avoids shell-quoting the GraphQL string),
then send it:
```sh
cat > /tmp/bq.json <<'JSON'
{ "query": "…", "variables": { … } }
JSON
fpx post-json 'https://www.booli.se/graphql' @/tmp/bq.json -p booli | jq '.data'
```
Always check for GraphQL errors: `jq '.errors // empty'` (an errors array can
ride in an HTTP-200 body).
Numeric fields come as `FormattedValue { raw, formatted }` — select `{ raw }`
for the number, `{ formatted }` for the display string.
---
## 1. Resolve an area → areaId (do this first)
`search` is free text.
```json
{
"query": "query Areas($s: String!) { areaSuggestionSearch(search: $s) { suggestions { id displayName } } }",
"variables": { "s": "Nacka" }
}
```
```sh
jq -r '.data.areaSuggestionSearch.suggestions[] | "\(.id)\t\(.displayName)"'
```
## 2. Search for-sale listings
`input` is a `SearchRequest`: `areaId` (string, from step 1), `page` (1-based),
`ascending`, `excludeAncestors: true`, `facets: []`, `filters: [{key,value}]`,
`sort` (`""` = newest, else `listPrice` / `listSqmPrice` / `rooms` /
`livingArea` / `rent` / `plotArea` / `published`). `result` mixes `Listing` and
`Project` (new-construction) nodes — take the `... on Listing` ones.
Filter keys (both key and value are strings): `objectType` (`Lägenhet`, `Villa`,
`Kedjehus-Parhus-Radhus`, `Fritidshus`, `Gård`, `Tomt/Mark`), `minRooms`/`maxRooms`,
`minLivingArea`/`maxLivingArea`, `minPlotArea`/`maxPlotArea`,
`minListPrice`/`maxListPrice`, `minListSqmPrice`/`maxListSqmPrice`,
`minConstructionYear`/`maxConstructionYear`, `isNewConstruction` (`1`/`0`).
```json
{
"query": "query SearchForSale($input: SearchRequest) { searchForSale(input: $input) { totalCount pages result { __typename ... on Listing { booliId objectType tenureForm streetAddress descriptiveAreaName url rooms { raw } livingArea { raw } rent { raw } listPrice { raw formatted } listSqmPrice { raw } location { region { municipalityName } } } } } }",
"variables": {
"input": {
"areaId": "76",
"page": 1,
"ascending": false,
"excludeAncestors": true,
"facets": [],
"filters": [
{ "key": "objectType", "value": "Lägenhet" },
{ "key": "minRooms", "value": "3" },
{ "key": "maxListPrice", "value": "6000000" }
],
"sort": ""
}
}
}
```
```sh
jq -r '.data.searchForSale | "total=\(.totalCount) pages=\(.pages)", (.result[] | select(.__typename=="Listinskill-card.md
## Description: Helps agents query public Swedish property listings, sold prices, and property details on Booli through a browser-connected command-line tool. This skill is ready for commercial/non-commercial use. ## Publisher: [chrischall](https://clawhub.ai/user/chrischall) ### License/Terms of Use: MIT-0 ## Use Case: Developers and agents use this skill to look up Swedish areas, search active and sold property listings, and inspect property details without running a separate MCP server. ### Deployment Geography for Use: Global ## Known Risks and Mitigations: Risk: Installing an unverified CLI or browser extension can expose the browser environment. Mitigation: Verify the @fetchproxy/cli package and ContextMint Bridge source or release before installing; limit extension site access to booli.se. Risk: Sensitive personal data in a GraphQL request is sent to Booli. Mitigation: Avoid including sensitive personal data in request bodies unless you intend to send it to Booli. Risk: A successful command can still contain GraphQL errors or too few sold listings for reliable comparisons. Mitigation: Check the response errors and sample count before relying on property results or market summaries. ## Reference(s): - [Booli GraphQL query examples](references/graphql-queries.md) - [ClawHub skill release](https://clawhub.ai/chrischall/skills/booli-fpx) - [ContextMint Bridge source](https://github.com/nullnet-app/contextmint-bridge) - [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases) ## Skill Output: **Output Type(s):** [Shell commands, Configuration guidance, JSON data] **Output Format:** [Markdown guidance with shell commands and GraphQL JSON examples] **Output Parameters:** [1D] **Other Properties Related to Output:** [Property prices are in SEK and areas in m².] ## Skill Version(s): 2.1.8 (source: server-resolved ClawHub release) ## Ethical Considerations: Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/chrischall/skills/booli-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/skills/booli-fpx",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T07:29:50.974Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-booli-fpx/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-booli-fpx/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-11T07:29:50.974Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.1K downloads",
"href": "https://clawhub.ai/chrischall/booli-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/booli-fpx",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T07:29:50.974Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "2.1.8",
"href": "https://clawhub.ai/chrischall/booli-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/booli-fpx",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-09T23:24:04.677Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-booli-fpx/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-booli-fpx/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 2.1.8",
"description": "- Removed the skill-card.md file. - No changes to functionality or documentation other than file cleanup.",
"href": "https://clawhub.ai/chrischall/booli-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/booli-fpx",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-09T23:24:04.677Z",
"isPublic": true
}
]
}Record generated Oct 11, 2026.
