Hemnet Mcp

io.github.chrischall由 GitHub 账号 chrischall 发布v1.2.0更新于 Nov 7, 2026

Hemnet.se real estate for Claude: search, sold prices, listings & market stats

概览

AI 生成的概览

检索瑞典最大房产门户 hemnet.se,让助手查找在售与已售房源、获取详情和照片、统计市场行情,并做瑞典房贷月供计算。

可以做什么
  • 把地名解析为 Hemnet 位置 id,把街道地址解析为在售房源
  • 按位置、价格区间、房间数、面积、房型和关键词搜索在售房源
  • 获取单套房源完整详情与图库照片链接,并最多 20 套并排比较
  • 搜索已售房源(slutpriser),含成交价、要价与高于或低于要价的百分比,并汇总中位数与均价行情
  • 在本地计算瑞典房贷月供,含摊销与税后金额
  • 对 Hemnet GraphQL 接口与浏览器桥接做健康检查
适用场景
适合研究瑞典房地产市场:用成交价比较为房屋估值、筛选某区域房源、比较候选房源,或估算持有成本。仅针对 hemnet.se,只对瑞典房产有意义。
运行要求
通过 npx hemnet-mcp 在本地运行(需 Node.js)。匿名只读查询无需登录或 API 密钥。若 Hemnet 触发 Cloudflare 验证,默认 HEMNET_TRANSPORT=auto 会改用浏览器桥接,需要 Chrome 中的 ContextMint Bridge 扩展,并用 FETCHPROXY_IDENTITY_DIR、FETCHPROXY_WS_HOST、HEMNET_WS_PORT 配置本地身份与中继端口。
安装前请注意
查询为只读,但浏览器桥接回退会从你自己浏览器中已登录的 hemnet.se 标签页发出同样的查询,并在 FETCHPROXY_IDENTITY_DIR 下保存长期身份密钥对。扩展需以解压方式加载发布包,建议对照公布的校验和核验。项目由 AI 构建与维护,使用须遵守 hemnet.se 的服务条款。房贷计算器只是本地估算,不构成财务建议。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Hemnet Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Hemnet MCP

[CI] [npm] [license]

An MCP server for hemnet.se, Sweden's largest real-estate portal. Search for-sale listings, look up sold prices (slutpriser), pull full listing detail and photos, compute market statistics, resolve addresses, and run a Swedish mortgage calculation — all from Claude.

⚠️ This project is built and maintained by AI (Claude). It reads hemnet.se through its public GraphQL API. Use at your own discretion and within hemnet.se's terms of service.

Highlights

  • No configuration. Hemnet serves its read queries anonymously — no login, no API key. npx hemnet-mcp just works (a browser extension is only needed if Hemnet serves a Cloudflare challenge — see below).
  • Sold prices (slutpriser). Hemnet's signature dataset: achieved final price, asking price, and over/under-asking percentage — the comps an agent needs to value a home.
  • Swedish-native. Money in SEK, areas in m², rooms, bostadsrätt fees (avgift), energy class, and a mortgage model that follows Swedish rules (amorteringskrav, ränteavdrag).
  • Embeddable. Ships as a standalone MCP server and as a library so it can be composed into a larger multi-portal server.

Install

Claude Code / Claude Desktop (npx)

json
{  "mcpServers": {    "hemnet": {      "command": "npx",      "args": ["-y", "hemnet-mcp"]    }  }}

If Hemnet serves a Cloudflare challenge

Hemnet sometimes fronts its GraphQL API with a Cloudflare bot challenge. When that happens the server switches (under the default HEMNET_TRANSPORT=auto) to a browser bridge that sends the same anonymous queries from a www.hemnet.se tab in your own browser — no Hemnet login needed. That needs the ContextMint Bridge extension, installed from its releases: in Chrome, unzip the chrome zip and load it unpacked, then approve the pairing prompt the first time. Safari isn't available yet (it will ship inside the ContextMint app, which has no public download), so use Chrome for now.

ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (https://github.com/chrischall/fetchproxy#extension) points to it. Its source is public at https://github.com/nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).

From source

bash
git clone https://github.com/chrischall/hemnet-mcpcd hemnet-mcpnpm installnpm run buildnode dist/index.js

Tools

ToolWhat it does
hemnet_autocomplete_locationResolve a place name ("Vasastan") to Hemnet location ids — the starting point for search.
hemnet_search_listingsSearch active for-sale listings by location + filters (price SEK, rooms, m², property type, keywords).
hemnet_get_listingFull detail for one listing (price, fee, running costs, m², rooms, tenure, energy class, broker, description, photos).
hemnet_get_listing_photosJust the gallery photo URLs.
hemnet_search_soldSearch sold listings with final price, asking price, and over/under-asking %.
hemnet_get_sold_listingFull detail for one sold listing.
hemnet_get_market_statsMedian/average final price and price-per-m² for a location, over the most recent max_sales sales (default 200).
hemnet_compare_listingsFetch several listings at once for side-by-side comparison.
hemnet_get_by_addressResolve a free-text street address to a live listing.
hemnet_calculate_mortgageLocal Swedish monthly-cost calculator (interest + amortisation + fee, gross & after-tax). No network.
hemnet_healthcheckVerify the Hemnet GraphQL endpoint is reachable. Reports which transport served the probe (transport: direct fetch or the browser bridge, plus the configured HEMNET_TRANSPORT), the bridge's role/port/extension-link state (bridge, once a bridge exists), a classified error.kind (e.g. cloudflare_challenge, session_not_ready) and a next-step hint.

Example flow

1. hemnet_autocomplete_location { query: "Vasastan" }   → location_id 9259702. hemnet_search_listings { location_ids: ["925970"], rooms_min: 2, price_max: 6000000 }   → listing summaries3. hemnet_get_market_stats { location_ids: ["925970"], housing_form_groups: ["APARTMENTS"] }   → median final price, price-per-m²4. hemnet_calculate_mortgage { price: 4695000, interest_rate: 3.9, monthly_fee: 2800 }   → monthly cost, gross and after-tax

Or pass a free-text location to any search tool and it resolves the top hit for you.

Money & units

All output records use numbers: price / final_price / fee_monthly in SEK, living_area_sqm / land_area_sqm in m², rooms as a number. A derived price_per_sqm is always included when price and living area allow it (even when Hemnet omits it, common on houses). The original Hemnet-formatted strings are kept alongside as *_formatted.

Library use

hemnet-mcp is also importable, so it can serve as a Hemnet portal source inside a larger project (e.g. a cross-portal realty orchestrator):

ts
import { createHemnetClient, computeMarketStats } from 'hemnet-mcp';
const hemnet = createHemnetClient();const { cards } = await hemnet.searchSales({ locationIds: ['925970'] }, { limit: 50 });const stats = computeMarketStats(cards.map(formatSaleCard));

The library entry (import … from 'hemnet-mcp') re-exports the client, the normalised record types, the pure derivations (computeMarketStats, calculateSwedishMortgage, money/url helpers), and every tool registrar (registerHemnetTools(server, client) to graft the tools onto your own MCP server).

Development

bash
npm test               # vitest (mocked transport, no network)npm run test:coverage  # 100% coverage enforced on src/**npm run typechecknpm run build

Tests drive every tool and the client through an in-memory fake transport — no live hemnet.se calls. See CLAUDE.md for architecture, the GraphQL quirks, and contribution conventions.

License

MIT

来源:README.md,提交 1c70117

工具

11

hemnet_autocomplete_location

Resolve a place name to Hemnet location ids

Look up Hemnet location ids for a free-text place name (municipality, district, or area). Returns ranked hits with `location_id`, `full_name`, and `parent_full_name`. Feed a `location_id` into hemnet_search_listings / hemnet_search_sold. Read-only.

输入参数limitquery必填

hemnet_search_listings

Search Hemnet for-sale listings

Search active for-sale property listings on hemnet.se by location and optional filters (price band in SEK, rooms, living area in m², property-type groups, keywords). Returns listing summaries with price, fee, m², rooms, price-per-m², and coordinates. Provide `location_ids` (from hemnet_autocomplete_location) or a free-text `location`. Read-only.

输入参数sortlimitoffsetkeywordslocationprice_maxprice_minrooms_maxrooms_minlocation_idsliving_area_maxliving_area_min另有 1 个

hemnet_get_listing

Get a Hemnet for-sale listing by id or URL

Fetch the full detail of a single active for-sale listing by its Hemnet id or a /bostad/ URL. Returns price, monthly fee, yearly running costs, living/land area in m², rooms, tenure, construction year, energy class, broker, description, status labels, coordinates, and gallery photo URLs. For a SOLD listing use hemnet_get_sold_listing instead. Read-only.

输入参数id必填photo_limit

hemnet_get_listing_photos

Get photo URLs for a Hemnet listing

Return the gallery photo URLs for an active for-sale Hemnet listing by id or /bostad/ URL. Read-only.

输入参数id必填limit

hemnet_search_sold

Search Hemnet sold listings (slutpriser)

Search SOLD property listings ("slutpriser") on hemnet.se by location and optional filters. Each result carries the achieved final price, the asking price, and the over/under-asking percentage — the core comps signal for valuation. Provide `location_ids` (from hemnet_autocomplete_location) or a free-text `location`. Read-only.

输入参数sortlimitoffsetkeywordslocationprice_maxprice_minrooms_maxrooms_minlocation_idsliving_area_maxliving_area_min另有 1 个

hemnet_get_sold_listing

Get a Hemnet sold listing by id or URL

Fetch the full detail of a single SOLD listing by its Hemnet id or a /salda/ URL. Returns final price, asking price, price change, m², rooms, tenure, broker, and coordinates. Read-only.

输入参数id必填

hemnet_compare_listings

Compare several Hemnet listings

Fetch and normalise multiple active for-sale Hemnet listings at once (by id or /bostad/ URL) for side-by-side comparison. Up to 20 targets; input order preserved; per-row errors captured. Read-only.

输入参数ids必填

hemnet_get_by_address

Resolve a street address to a Hemnet listing

Resolve a free-text Swedish street address to a live Hemnet for-sale listing. Give the `address` (street + number) and a `location` (city/area/municipality). Returns the matched listing with a `matched: true`, the match `score`, and `matched_via`, or `{ resolved: false }` when nothing matches. Scans up to 500 listings in the location; a miss with `truncated: true` is not definitive — pass price_min/price_max or a smaller location to narrow it. Read-only.

输入参数address必填location必填price_maxprice_min

hemnet_get_market_stats

Hemnet sold-price market statistics

Aggregate median/average statistics from recent SOLD listings for a location (and optional property-type/size filters): median & average final price, median & average price-per-m², and average over/under-asking percentage. The stats cover the most recent `max_sales` sales (default 200, max 500), not necessarily every match — compare `sampled_sales` with `total_matching_sales`. Provide `location_ids` or a free-text `location`. Read-only.

输入参数sortlimitoffsetkeywordslocationmax_salesprice_maxprice_minrooms_maxrooms_minlocation_idsliving_area_max另有 2 个

hemnet_calculate_mortgage

Calculate a Swedish monthly mortgage cost

Local-only Swedish mortgage calculator (all amounts SEK). Returns the monthly cost broken into interest, mandated amortisation (amorteringskrav from LTV, rules as of 1 April 2026), BRF fee (avgift), and operating cost — with both gross and after-tax (ränteavdrag) totals. Provide `down_payment` OR `down_payment_percent` (defaults to the legal 10% minimum). No network call.

输入参数price必填monthly_feedown_paymentinterest_rate必填amortization_rategross_yearly_incomedown_payment_percentmonthly_operating_cost

hemnet_healthcheck

Verify the ContextMint Bridge connection end-to-end

Round-trips a small public www.hemnet.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.hemnet.se-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.

无需输入参数。

版本历史

19
  1. v1.2.0最新Nov 4, 2026
  2. v1.1.15Oct 29, 2026
  3. v1.1.14Oct 20, 2026
  4. v1.1.13Oct 17, 2026
  5. v1.1.12Oct 16, 2026
  6. v1.1.11Oct 10, 2026
  7. v1.1.10Oct 7, 2026
  8. v1.1.9Oct 5, 2026
  9. v1.1.8Oct 3, 2026
  10. v1.1.7Oct 1, 2026
  11. v1.1.6Sep 28, 2026
  12. v1.1.5Sep 25, 2026
  13. v1.1.4Sep 23, 2026
  14. v1.1.3Sep 23, 2026
  15. v1.1.2Sep 21, 2026
  16. v1.1.0Sep 20, 2026
  17. v1.0.0Sep 19, 2026
  18. v0.6.5Sep 17, 2026
  19. v0.6.4Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分