Yggdrasil
MCP ServersMCP 伺服器 SKILLs技能 PlugIns解決方案 Asgard AI SolutionAsgard AI 方案 Submit Listing申請上架 GitHub
5

591 Real Estate 591 房地產資料

Released已發布
data taiwan

An MCP server to fetch and query real estate listings from 591.com.tw for AI assistants.

591 房地產資料 MCP Server,提供 AI 代理透過自然語言存取相關資料與功能。

Status狀態
released
Category分類
data
Region地區
taiwan
Maintainer維護者
GitHub

Features功能特色

  • 4 ready-to-use tools for sale search, sale detail, rent search, rent detail
  • MCP server (stdio) — plug into Claude Code and start asking questions immediately
  • Natural-language parameter mapping — Chinese region/section names, human-readable filters (e.g. 電梯大樓, 3房, 5_10)
  • Minimal dependenciesfastmcp + requests
  • 4 個現成 tool:售屋搜尋、售屋詳情、租屋搜尋、租屋詳情
  • MCP server(stdio)— 接上 Claude Code 即可開始使用
  • 自然語言參數對應:中文縣市、區域、人類可讀的篩選條件(如 電梯大樓3房5_10
  • 相依輕量:僅需 fastmcp + requests

Quick Start快速開始

Install

pip install mcp-591

Or use uvx (no install needed):

uvx mcp-591

Use with Claude Code

Add the server via the Claude CLI:

claude mcp add --transport stdio 591 -- uvx mcp-591

If you clone the repo locally, the included .mcp.json is auto-detected by Claude Code:

{
  "mcpServers": {
    "591": {
      "command": "uv",
      "args": ["run", "mcp-591"],
      "cwd": "${PWD}"
    }
  }
}

Use with Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "591": {
      "command": "uvx",
      "args": ["mcp-591"]
    }
  }
}

安裝

pip install mcp-591

或使用 uvx(不需安裝):

uvx mcp-591

搭配 Claude Code

透過 Claude CLI 加入:

claude mcp add --transport stdio 591 -- uvx mcp-591

如果你 clone 專案到本地,根目錄的 .mcp.json 會自動被 Claude Code 偵測:

{
  "mcpServers": {
    "591": {
      "command": "uv",
      "args": ["run", "mcp-591"],
      "cwd": "${PWD}"
    }
  }
}

搭配 Claude Desktop

加入 claude_desktop_config.json

{
  "mcpServers": {
    "591": {
      "command": "uvx",
      "args": ["mcp-591"]
    }
  }
}

Available Tools可用工具

search_sale — Search for sale listings

Parameter Type Description
region str (required) County/city name, e.g. 桃園市
section str District, e.g. 中壢區. Omit to search the whole county.
kind str Property type, default 住宅. Options: 住宅 / 店面 / 辦公 / 廠房 / 車位 / 套房 / 土地 / 住辦
shape str Building type: 公寓 / 電梯大樓 / 透天厝 / 別墅
pattern str Room count: 1房 / 2房 / 3房 / 4房 / 5房以上
toilet str Bathroom count: 1衛 / 2衛 / 3衛 / 4衛 / 5衛以上
area str Floor area range (坪): 10_20 / 20_30 / 30_40 / 40_50 / 50_60 / 60_100 / 100_150 / 150_200
age str Building age: _5 (under 5 yrs) / 5_10 / 10_20 / 20_30 / 30_40 / 40_ (40+ yrs)
price_str str Price range in 萬 NTD, e.g. 1000_1500 or 1000_1250,1250_1500
keywords str Free-text search, e.g. 捷運 (MRT)
page_size int Results per page, max 30 (default 30)
first_row int Pagination offset (default 0)

get_sale_detail — Fetch full sale listing details

Parameter Type Description
post_id str Listing ID from a search_sale result

Returns: floor area breakdown (main area / common-area ratio), floor, building age, nearby transit, parking, fitment, mortgage estimate, contact info, and description.

search_rent — Search for rental listings

Parameter Type Description
region str (required) County/city name, e.g. 桃園市
section str District, e.g. 中壢區. Omit to search the whole county.
kind str Room type: 整層住家 / 獨立套房 / 分租套房 / 雅房 / 車位
shape str Building type: 公寓 / 電梯大樓 / 透天厝 / 別墅
pattern str Room count: 1房 / 2房 / 3房 / 4房 / 5房以上
price_str str Monthly rent range in NTD, e.g. 10000_20000
keywords str Free-text search, e.g. 捷運 (MRT)
first_row int Pagination offset (default 0). Use next_first_row from the previous response.

get_rent_detail — Fetch full rental listing details

Parameter Type Description
post_id str Listing ID from a search_rent result

Returns: price, deposit, floor area, floor, building type, layout, address with lat/lng, lease period, move-in date, pet/cooking/gender policies, facilities, contact info, and description.


search_sale — 搜尋售屋列表

參數 型別 說明
region str(必填) 縣市,例如 桃園市
section str 區域,例如 中壢區,省略則搜尋整個縣市
kind str 物件類型,預設 住宅,可選:住宅 / 店面 / 辦公 / 廠房 / 車位 / 套房 / 土地 / 住辦
shape str 建物型態:公寓 / 電梯大樓 / 透天厝 / 別墅
pattern str 格局:1房 / 2房 / 3房 / 4房 / 5房以上
toilet str 衛浴數:1衛 / 2衛 / 3衛 / 4衛 / 5衛以上
area str 坪數區間:10_20 / 20_30 / 30_40 / 40_50 / 50_60 / 60_100 / 100_150 / 150_200
age str 屋齡:_5(5年內)/ 5_10 / 10_20 / 20_30 / 30_40 / 40_(40年以上)
price_str str 價格區間(萬),例如 1000_15001000_1250,1250_1500
keywords str 關鍵字,例如 捷運
page_size int 每頁筆數,最大 30(預設 30)
first_row int 分頁 offset(預設 0)

get_sale_detail — 取得售屋物件詳情

參數 型別 說明
post_id str 物件 ID,來自 search_sale 結果的 post_id 欄位

回傳包含:坪數細項(主建物 / 公設比)、樓層、屋齡、交通、停車、裝潢、貸款試算、聯絡資訊、備註等。

search_rent — 搜尋租屋列表

參數 型別 說明
region str(必填) 縣市,例如 桃園市
section str 區域,例如 中壢區,省略則搜尋整個縣市
kind str 物件類型:整層住家 / 獨立套房 / 分租套房 / 雅房 / 車位
shape str 建物型態:公寓 / 電梯大樓 / 透天厝 / 別墅
pattern str 格局:1房 / 2房 / 3房 / 4房 / 5房以上
price_str str 月租金區間(元),例如 10000_20000
keywords str 關鍵字,例如 捷運
first_row int 分頁 offset(預設 0),使用上一頁回傳的 next_first_row

get_rent_detail — 取得租屋物件詳情

參數 型別 說明
post_id str 物件 ID,來自 search_rent 結果的 post_id 欄位

回傳包含:租金、押金、坪數、樓層、建物型態、格局、地址與座標、租期、入住時間、寵物 / 開伙 / 性別限制、提供設備、聯絡資訊、備註等。


Development開發

Setup from Source

Requires Python 3.14+ and uv.

git clone https://github.com/asgard-ai-platform/mcp-591.git
cd mcp-591
uv sync --dev

Run the client directly (debugging)

# Search 桃園市中壢區
uv run python -m mcp_591.client 桃園市 中壢區

# With filters: shape pattern toilet area age
uv run python -m mcp_591.client 桃園市 中壢區 電梯大樓 3房 2衛 30_40 _5

Argument order: <county> [district] [shape,...] [pattern,...] [toilet,...] [area] [age]. Pass an empty string "" to skip an intermediate argument.

Run Tests

# Unit tests (no network, uses fixtures)
uv run pytest

# Integration tests (hits the real 591 API)
uv run pytest -m integration

Test layout

tests/
├── fixtures/
│   ├── search_sale.json   # Captured sale search response
│   ├── sale_detail.json   # Captured sale detail response
│   ├── search_rent.json   # Captured rent search response
│   └── rent_detail.json   # Captured rent detail response
├── test_server.py         # Unit tests: filtering and tool logic
└── test_integration.py    # Integration tests (skipped by default)

To refresh fixtures (requires network):

uv run python -c "
import json
from mcp_591.client import Client591
c = Client591()
json.dump(c.search_sale(region_id=6, section_ids=[67], kind=9, page_size=5),
          open('tests/fixtures/search_sale.json', 'w'), ensure_ascii=False, indent=2)
json.dump(c.get_sale_detail(19708683),
          open('tests/fixtures/sale_detail.json', 'w'), ensure_ascii=False, indent=2)
json.dump(c.search_rent(region_id=6, section_ids=[67], kind=1),
          open('tests/fixtures/search_rent.json', 'w'), ensure_ascii=False, indent=2)
json.dump(c.get_rent_detail(21103645),
          open('tests/fixtures/rent_detail.json', 'w'), ensure_ascii=False, indent=2)
"

從原始碼設定

需要 Python 3.14+ 與 uv

git clone https://github.com/asgard-ai-platform/mcp-591.git
cd mcp-591
uv sync --dev

直接執行 client(除錯用)

# 搜尋桃園市中壢區
uv run python -m mcp_591.client 桃園市 中壢區

# 加入篩選:型態 格局 衛浴 坪數 屋齡
uv run python -m mcp_591.client 桃園市 中壢區 電梯大樓 3房 2衛 30_40 _5

參數順序:<縣市> [區域] [型態,...] [格局,...] [衛浴,...] [坪數] [屋齡],空字串 "" 可跳過中間參數。

執行測試

# 單元測試(不打 API,使用 fixture)
uv run pytest

# 整合測試(打真實 591 API)
uv run pytest -m integration

測試結構

tests/
├── fixtures/
│   ├── search_sale.json   # 售屋搜尋結果 fixture
│   ├── sale_detail.json   # 售屋詳情 fixture
│   ├── search_rent.json   # 租屋搜尋結果 fixture
│   └── rent_detail.json   # 租屋詳情 fixture
├── test_server.py         # 單元測試:filter / tool 邏輯
└── test_integration.py    # 整合測試(default 跳過)

更新 fixture(需要網路):

uv run python -c "
import json
from mcp_591.client import Client591
c = Client591()
json.dump(c.search_sale(region_id=6, section_ids=[67], kind=9, page_size=5),
          open('tests/fixtures/search_sale.json', 'w'), ensure_ascii=False, indent=2)
json.dump(c.get_sale_detail(19708683),
          open('tests/fixtures/sale_detail.json', 'w'), ensure_ascii=False, indent=2)
json.dump(c.search_rent(region_id=6, section_ids=[67], kind=1),
          open('tests/fixtures/search_rent.json', 'w'), ensure_ascii=False, indent=2)
json.dump(c.get_rent_detail(21103645),
          open('tests/fixtures/rent_detail.json', 'w'), ensure_ascii=False, indent=2)
"

Contributing貢獻

Contributions are welcome. Please open an issue or submit a pull request.

歡迎開 issue 或送 pull request。

License授權

MIT — see LICENSE.

MIT — 詳見 LICENSE

Usage ExamplesUsage Examples

You: 幫我搜尋青埔周邊 10 年內的大樓,總價控制在 1200 萬左右

Claude calls search_sale with the inferred parameters:

{
  "region": "桃園市",
  "section": "中壢區",
  "shape": "電梯大樓",
  "age": "5_10",
  "price_str": "1000_1400",
  "keywords": "青埔"
}

Claude: 青埔周邊 1,0001,400 萬、10 年內電梯大樓,共找到 5年內 135 筆、510年 146 筆,以下整理 CP 值較高的物件:...


使用者: 幫我搜尋青埔周邊 10 年內的大樓,總價控制在 1200 萬左右

Claude 自動推導參數並呼叫 search_sale

{
  "region": "桃園市",
  "section": "中壢區",
  "shape": "電梯大樓",
  "age": "5_10",
  "price_str": "1000_1400",
  "keywords": "青埔"
}

Claude: 青埔周邊 1,0001,400 萬、10 年內電梯大樓,共找到 5年內 135 筆、510年 146 筆,以下整理 CP 值較高的物件:...


Tags標籤

real-estatetaiwanlistings

Related MCP Servers相關 MCP 伺服器