Skip to main content

Your AI makelaar — MCP server for Dutch house hunting on funda.nl

Project description

makelaar-mcp

Your AI makelaar — an MCP server for Dutch house hunting on funda.nl, powered by pyfunda.


Requirements

  • Python ≥ 3.11
  • uv

Installation

git clone <repo-url> ~/makelaar-mcp
cd ~/makelaar-mcp
uv sync

Usage

Run tests

uv run pytest

Launch MCP Inspector (interactive testing)

uv run mcp dev src/makelaar_mcp/server.py

Claude Desktop integration

Add the following to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "makelaar": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/makelaar-mcp", "makelaar-mcp"]
    }
  }
}

Restart Claude Desktop after saving.


Tools

search_listings

Search funda.nl for properties.

Parameter Type Default Description
location str | list[str] required City, area, or postcode(s)
offering_type "buy" | "rent" "buy" Sale or rental
price_min int | None None Minimum price in €
price_max int | None None Maximum price in €
area_min int | None None Minimum living area in m²
area_max int | None None Maximum living area in m²
object_type list[str] | None None e.g. ["house", "apartment"]
energy_label list[str] | None None e.g. ["A", "A+"]
radius_km int | None None Radius from postcode/city
sort str "newest" "newest", "price_asc", "price_desc", …
page int 0 Page number (15 results per page)

Returns a list of listings with: id, title, city, price, living_area, price_per_m2, bedrooms, energy_label, url, publication_date.


get_listing

Fetch full details for a single listing.

Parameter Type Description
listing_id str | int tinyId, globalId, or full funda.nl URL

Returns the complete listing dict.


get_price_history

Fetch historical price data for a listing (via Walter Living).

Parameter Type Description
listing_id str | int tinyId, globalId, or full funda.nl URL

Returns a list of entries with: date, price, human_price, status, source.


compare_listings

Fetch 2–10 listings and return them side by side.

Parameter Type Description
listing_ids list[str | int] 2–10 tinyIds, globalIds, or URLs

Returns one row per listing with: tiny_id, title, city, price, living_area, price_per_m2, bedrooms, bathrooms, year_built, energy_label, garden, url.


calculate_dutch_mortgage

Dutch-specific mortgage calculator — annuity & linear, NHG, tax deduction, transfer tax, NIBUD max mortgage.

Parameter Type Default Description
price int required Property asking price in €
gross_annual_income int required Buyer's gross annual income in €
partner_income int | None None Partner's gross annual income (100% counts since 2024)
mortgage_type str "annuity" "annuity" or "linear"
annual_interest_rate_pct float 4.5 Annual interest rate %
loan_term_years int 30 Mortgage term in years
is_first_time_buyer bool False Eligible for startersvrijstelling?
buyer_age int | None None Needed for starter exemption (18-34)
student_debt int 0 Original student debt in €
woz_value int | None None WOZ value in € (defaults to price)

Returns: gross_monthly_payment, net_monthly_payment, monthly_tax_benefit, nhg_eligible, nhg_premium, max_mortgage, transfer_tax_rate, transfer_tax_amount, budget_assessment, and more.


calculate_total_cost

Calculate bijkomende kosten (additional costs that must come from savings).

Parameter Type Default Description
purchase_price int required Property purchase price in €
is_first_time_buyer bool False Eligible for startersvrijstelling?
buyer_age int | None None Needed for starter exemption (18-34)
mortgage_amount int | None None Defaults to 100% of purchase price
use_nhg bool False Include NHG premium?
include_buyer_agent bool False Include aankoopmakelaar costs?
is_investor bool False Investment property (10.4% tax)?

Returns: itemized costs list, total_additional_costs, cash_needed.


Example prompts

Search for apartments in Amsterdam under €400k with energy label A or better
Get the full details for listing 12345678
Calculate a Dutch mortgage for a €450,000 house with €80,000 income, first-time buyer, age 29
What are the total additional costs for buying a €350,000 property with NHG?
Compare listings 11111111 and 22222222

Project structure

makelaar-mcp/
├── pyproject.toml
├── README.md
├── CLAUDE.md
├── FEATURES.md
├── src/
│   └── makelaar_mcp/
│       ├── __init__.py
│       └── server.py       # FastMCP server — 6 tools
└── tests/
    └── test_server.py      # 34 unit tests

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

makelaar_mcp-0.1.0.tar.gz (82.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

makelaar_mcp-0.1.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file makelaar_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: makelaar_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 82.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for makelaar_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7b46cfc3d91dc8bf92e705e0bb5de2cb7b9001656e0c71c797303daad03fe185
MD5 1a6b3632eae4d78772c489be87cb4a2a
BLAKE2b-256 3cf601cc324faa8520554f813a9ca5ec1bc6befe76257ab06395fa2b07df97c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for makelaar_mcp-0.1.0.tar.gz:

Publisher: publish.yml on spyrosavl/makelaar-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file makelaar_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: makelaar_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for makelaar_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 84343fca6dc4ef69f05af5565de85a9c5ed30a08da0f103ffa003f5a553f2f10
MD5 f23f9cac6f48fea8326f449b3a34024f
BLAKE2b-256 d6917ed59ac1cfbb9dcb4c362e806c607352715bd8094a83e1d6be109ef0aaf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for makelaar_mcp-0.1.0-py3-none-any.whl:

Publisher: publish.yml on spyrosavl/makelaar-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page