Skip to main content
kamernet-mcp: find Dutch rooms, studios and apartments from any AI agent

MCP server for Kamernet.nl: search Dutch rooms, studios and apartments from Claude, Cursor, Codex and any AI agent.

CI PyPI Python License: MIT

English | Nederlands


Finding a room in the Netherlands is brutal: good listings get 60+ replies within the hour. kamernet-mcp puts Kamernet, the largest Dutch platform for rooms, studios and apartments, inside your AI agent. The agent searches with your criteria, reads full listings in English and Dutch, ranks them against your budget, and tells you when something new appears.

You:    Find me a furnished room in Utrecht under €900, at least 15 m², and rank
        the top 3 by value for a working professional who needs registration.

Agent:  → search_listings(city="Utrecht", max_rent=900, min_size=15, ...)
        → get_listing(...) ×3
        → score-listing prompt
        Here are the top 3, with deposits, energy labels and red flags…

Quickstart

Requires uv (or plain pip). One command:

claude mcp add kamernet -- uvx kamernet-mcp

Then ask Claude to find you a room. For other clients, use an install badge or unfold yours below.

Install in Cursor Install in VS Code

Claude Code
claude mcp add kamernet -- uvx kamernet-mcp

Or per project, committed to git, in .mcp.json:

{
  "mcpServers": {
    "kamernet": { "command": "uvx", "args": ["kamernet-mcp"] }
  }
}
Claude Desktop

Add to claude_desktop_config.json (Settings → Developer → Edit Config):

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

Use the install badge above, or add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):

{
  "mcpServers": {
    "kamernet": { "command": "uvx", "args": ["kamernet-mcp"] }
  }
}
OpenAI Codex
codex mcp add kamernet -- uvx kamernet-mcp

Or add to ~/.codex/config.toml:

[mcp_servers.kamernet]
command = "uvx"
args = ["kamernet-mcp"]
OpenCode

Add to opencode.json (note OpenCode uses an mcp key, not mcpServers):

{
  "mcp": {
    "kamernet": {
      "type": "local",
      "command": ["uvx", "kamernet-mcp"],
      "enabled": true
    }
  }
}
VS Code (Copilot)

Use the install badge above, or add to .vscode/mcp.json (note VS Code uses a servers key):

{
  "servers": {
    "kamernet": { "type": "stdio", "command": "uvx", "args": ["kamernet-mcp"] }
  }
}
Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "kamernet": { "command": "uvx", "args": ["kamernet-mcp"] }
  }
}
Gemini CLI

Add to ~/.gemini/settings.json:

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

Add to Zed settings.json:

{
  "context_servers": {
    "kamernet": { "command": { "path": "uvx", "args": ["kamernet-mcp"] } }
  }
}
Without uv (plain pip)
pip install kamernet-mcp

Then use kamernet-mcp as the command in any of the configs above.

Tools

Tool What it does
search_listings Search by city with filters: max rent (€), min size (m²), radius (km), property type (room / apartment / studio / anti-squat / student housing), sort order, pagination.
get_listing Full details of one listing: bilingual description, rent + deposit, energy label, registration ("inschrijving") possibility, landlord stats (response rate, member since, verified badges), photos, coordinates.
get_new_listings Stateless monitoring: "what appeared since my last check?" Lets your agent poll without hammering the site.
account_status* Verify the configured Kamernet account can log in.
reply_to_listing* Experimental: sends a reply to a landlord from your account, including Kamernet's applicant questions.

* Only registered when KAMERNET_EMAIL / KAMERNET_PASSWORD are set; see Authenticated tools.

There is also a kamernet://filters resource listing all valid filter values, and a score-listing prompt: a weighted rubric (price, location, quality, privacy, long-term fit) with bilingual deal-breaker detection ("no internationals" / "geen internationals") that your agent uses to rank listings for you.

Configuration

Everything works with zero config. Optional environment variables:

Variable Default Purpose
KAMERNET_EMAIL — Enables authenticated tools.
KAMERNET_PASSWORD — Enables authenticated tools.
KAMERNET_REQUEST_DELAY 1.0 Minimum seconds between requests to kamernet.nl. Values below 1.0 are ignored.
KAMERNET_MAX_REPLIES_PER_SESSION 3 Hard cap on automated replies per server session.
KAMERNET_USER_AGENT transparent UA Identifies this tool to Kamernet, with a link to this repo.

Authenticated tools (experimental)

Searching needs no account. Replying to landlords requires a paid Kamernet premium account (that's Kamernet's paywall, not ours) and browser automation:

uvx --with 'kamernet-mcp[auth]' kamernet-mcp   # or: pip install 'kamernet-mcp[auth]'
playwright install chromium

Set KAMERNET_EMAIL and KAMERNET_PASSWORD in your MCP client's env block. Cookies are cached locally so login happens rarely.

How it works

Kamernet is a Next.js site. Its CSS class names change on every deploy, which is what killed most earlier Kamernet bots. This server skips them and reads the structured __NEXT_DATA__ JSON embedded in each public page: the same data the site renders from, and stable across frontend redesigns.

Politeness is enforced in code: a transparent User-Agent linking to this repo, a minimum 1-second delay between requests, no robots.txt-disallowed endpoints, and no tricks to evade rate limits. PRs that weaken this are rejected.

Development

git clone https://github.com/jasp-nerd/kamernet-mcp
cd kamernet-mcp
uv sync --all-extras
uv run pytest          # 40+ tests, no network needed
uv run ruff check .

Tests run against sanitized snapshots of real Kamernet pages (tests/fixtures/) plus FastMCP's in-memory client, exercising the full MCP protocol without a browser or network. See CONTRIBUTING.md.

Debug interactively with the MCP Inspector:

npx @modelcontextprotocol/inspector uv run kamernet-mcp

Disclaimer

This is an unofficial, personal-use tool. It is not affiliated with, endorsed by, or connected to Kamernet B.V. in any way.

  • Intended for personal, non-commercial use (finding yourself a home). Scraping personal data at scale can violate the GDPR/AVG; the Dutch DPA (Autoriteit Persoonsgegevens) has published guidance on this. Don't harvest, republish or redistribute listing data.
  • You are responsible for complying with Kamernet's terms of service and applicable law.
  • Listing data can be wrong or stale. Verify on kamernet.nl before you decide anything, and never pay a deposit before viewing the room.

License

MIT © 2026 jasp-nerd

Metadata

Release files for kamernet-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kamernet-mcp 0.1.0
File Size Uploaded Provenance
kamernet_mcp-0.1.0.tar.gz 233.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for kamernet-mcp 0.1.0
File Interpreter ABI Platform
kamernet_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 258.4 kB

Release files / kamernet_mcp-0.1.0.tar.gz

Download URL kamernet_mcp-0.1.0.tar.gz
Size 233.8 kB
Tags Source
SHA-256 checksum
How to use checksums
0e4f2c4118d1cca0d0773d8d1a51a50b2bdf8754aacd6098a25f1f44d4a6cea1
BLAKE2b-256 checksum
How to use checksums
346592ee3a7b5a4cf98c081e7baf50fe7c49427d860b8960f9296725ad953931
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / kamernet_mcp-0.1.0-py3-none-any.whl

Download URL kamernet_mcp-0.1.0-py3-none-any.whl
Size 24.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd830e788de04a4f42a04c74d13c300d5ea9ade3cf8815496f36d8fb20bfce6d
BLAKE2b-256 checksum
How to use checksums
59c7d4969dcb094730712d093eb30a2e61971663ddc52201aa76605e567f7987
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for kamernet-mcp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page