内容
# Hemnet MCP
[](https://github.com/chrischall/hemnet-mcp/actions/workflows/ci.yml)
[](https://www.npmjs.com/package/hemnet-mcp)
[](LICENSE)
一个适用于 **[hemnet.se](https://www.hemnet.se)** 的 MCP 服务器,这是瑞典最大的房地产门户网站。搜索待售列表,查找已售价格(*slutpriser*),获取完整的列表详情和照片,计算市场统计数据,解析地址,并运行瑞典抵押贷款计算器 — 所有这些都来自 Claude。
> ⚠️ 该项目 **由 AI(Claude)构建和维护**。它通过 Hemnet 公开的 GraphQL API 读取 hemnet.se 的数据。请自行承担风险,并遵守 hemnet.se 的服务条款。
## 亮点
- **无需配置。** Hemnet 提供匿名读取查询服务 — 无需登录,无需 API 密钥,无需浏览器扩展。`npx hemnet-mcp` 直接可用。
- **已售价格(slutpriser)。** Hemnet 的特色数据集:已成交的最终价格,报价价格,以及与报价价格的百分比 — 这些是代理商评估房屋价值所需的比较数据。
- **本地化。** 货币使用 SEK,面积单位为 m²,房间数量,`bostadsrätt` 费用(avgift),能源等级,以及遵循瑞典规则的抵押贷款模型(amorteringskrav,ränteavdrag)。
- **可嵌入。** 作为独立的 MCP 服务器和库提供,以便可以将其组合成更大的多门户服务器。
## 安装
### Claude 代码 / Claude 桌面版(npx)
```json
{
"mcpServers": {
"hemnet": {
"command": "npx",
"args": ["-y", "hemnet-mcp"]
}
}
}
```
### 从源码安装
```bash
git clone https://github.com/chrischall/hemnet-mcp
cd hemnet-mcp
npm install
npm run build
node dist/index.js
```
## 工具
| 工具 | 功能描述 |
| --- | --- |
| `hemnet_autocomplete_location` | 将地名(`"Vasastan"`)解析为 Hemnet 地点 ID — 搜索的起点。 |
| `hemnet_search_listings` | 按地点 + 过滤器(价格 SEK,房间数量,面积,房产类型,关键词)搜索活跃的待售列表。 |
| `hemnet_get_listing` | 获取一个列表的完整详情(价格,费用,运营成本,面积,房间数量,产权,能源等级,经纪人,描述,照片)。 |
| `hemnet_get_listing_photos` | 获取相册照片 URL。 |
| `hemnet_search_sold` | 搜索 **已售** 列表,包括最终价格,报价价格,以及与报价价格的百分比。 |
| `hemnet_get_sold_listing` | 获取一个已售列表的完整详情。 |
| `hemnet_get_market_stats` | 获取某个地点的中位/平均成交价格和每平方米价格。 |
| `hemnet_compare_listings` | 一次获取多个列表以进行并排比较。 |
| `hemnet_get_by_address` | 将自由文本街道地址解析为实时列表。 |
| `hemnet_calculate_mortgage` | 本地瑞典月度成本计算器(利息 + 摊销 + 费用,税前和税后)。无需网络连接。 |
| `hemnet_healthcheck` | 验证 Hemnet GraphQL 端点是否可达。 |
### 示例流程
```
1. hemnet_autocomplete_location { query: "Vasastan" }
→ 地点 ID 925970
2. hemnet_search_listings { location_ids: ["925970"], rooms_min: 2, price_max: 6000000 }
→ 列表摘要
3. hemnet_get_market_stats { location_ids: ["925970"], housing_form_groups: ["APARTMENTS"] }
→ 中位成交价格,每平方米价格
4. hemnet_calculate_mortgage { price: 4695000, interest_rate: 3.9, monthly_fee: 2800 }
→ 月度成本,税前和税后
```
或者,将自由文本 `location` 传递给任何搜索工具,它将为您解析最佳匹配。
## 货币 & 单位
所有输出记录均使用 **数字**:`price` / `final_price` / `fee_monthly` 单位为 SEK,`living_area_sqm` / `land_area_sqm` 单位为 m²,`rooms` 为数字。当价格和面积允许时,始终包含派生的 `price_per_sqm`(即使 Hemnet 省略了它,这在房屋中很常见)。原始 Hemnet 格式的字符串与 `*_formatted` 一起保留。
## 库使用
hemnet-mcp 也可以导入,因此可以用作较大项目中的 Hemnet *门户源*(例如,跨门户房地产协调器):
```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));
```
库入口(`import … from 'hemnet-mcp'`)重新导出客户端,规范化的记录类型,纯派生(`computeMarketStats`,`calculateSwedishMortgage`,货币/URL 帮助程序),以及每个工具注册器(`registerHemnetTools(server, client)` 将工具移植到您自己的 MCP 服务器)。
## 开发
```bash
npm test # vitest(模拟传输,无网络连接)
npm run test:coverage # 强制 100% 覆盖率 src/**
npm run typecheck
npm run build
```
测试通过内存中的伪传输驱动每个工具和客户端 — 无需调用 hemnet.se。有关架构,GraphQL 怪癖和贡献约定的详细信息,请参见 `CLAUDE.md`。
## 许可证
MIT