{
  "markdown": "<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/jasp-nerd/marktplaats-mcp/main/assets/banner.svg\" alt=\"marktplaats-mcp: search Marktplaats and 2dehands from any AI agent\" width=\"760\">\n</p>\n\n<p align=\"center\">\n  <b>English</b> | <a href=\"https://github.com/jasp-nerd/marktplaats-mcp/blob/main/README.nl.md\">Nederlands</a> | <a href=\"https://github.com/jasp-nerd/marktplaats-mcp/blob/main/README.fr.md\">Français</a>\n</p>\n\n# marktplaats-mcp\n\n**marktplaats-mcp** is an MCP server that lets Claude, Cursor, Codex, opencode and every other MCP client search Marktplaats and 2dehands, the Dutch and Belgian second-hand classifieds. Find bargains, vet sellers, browse categories and monitor new listings in plain language.\n\n<p align=\"center\">\n  <a href=\"https://pypi.org/project/marktplaats-mcp/\"><img src=\"https://img.shields.io/pypi/v/marktplaats-mcp.svg\" alt=\"PyPI version\"></a>\n  <a href=\"https://pypi.org/project/marktplaats-mcp/\"><img src=\"https://img.shields.io/pypi/pyversions/marktplaats-mcp.svg\" alt=\"Python versions\"></a>\n  <a href=\"https://github.com/jasp-nerd/marktplaats-mcp/blob/main/LICENSE\"><img src=\"https://img.shields.io/badge/License-MIT-yellow.svg\" alt=\"License: MIT\"></a>\n  <a href=\"https://github.com/jasp-nerd/marktplaats-mcp/actions/workflows/ci.yml\"><img src=\"https://github.com/jasp-nerd/marktplaats-mcp/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"></a>\n  <a href=\"https://pypi.org/project/marktplaats-mcp/\"><img src=\"https://img.shields.io/pypi/dm/marktplaats-mcp.svg\" alt=\"Downloads\"></a>\n  <a href=\"https://github.com/astral-sh/ruff\"><img src=\"https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json\" alt=\"Ruff\"></a>\n</p>\n\n## ✨ Features\n\n- 🔍 **Powerful search**: free text, categories, price range, condition, distance from a postal code, recency, sorting\n- 🇳🇱🇧🇪 **Two marketplaces, one server**: marktplaats.nl (Netherlands) and 2dehands.be (Belgium) via a `site` parameter\n- 📄 **Full listing details**: complete description, all photos, view and favorite counts, listing age\n- 🛡️ **Seller vetting**: verified bank account, identity and phone, review score\n- 🔔 **New-listing monitoring**: poll for ads placed after a timestamp with a stateless cursor\n- 🧠 **Built for LLMs**: compact token-efficient output, paid promotions filtered out, structured results, pagination hints\n- 🔁 **Resilient**: retries with exponential backoff, jitter and `Retry-After` handling\n- 🔓 **No account, no API key**\n\n## 🚀 Quickstart\n\nThe only prerequisite is [uv](https://docs.astral.sh/uv/) (`brew install uv` or `curl -LsSf https://astral.sh/uv/install.sh | sh`).\n\n**Claude Code**, one command:\n\n```bash\nclaude mcp add marktplaats -- uvx marktplaats-mcp\n```\n\nThen ask: *\"Search Marktplaats for an OLED TV under €400 near 3011 AB.\"*\n\n<p align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/jasp-nerd/marktplaats-mcp/main/assets/trailer-crt.gif\" alt=\"marktplaats-mcp trailer: an AI agent searches for a racefiets and vets the seller, rendered as a retro CRT terminal session\" width=\"800\">\n</p>\n\n## 🌐 Use on claude.ai (no install)\n\nYou can skip the terminal entirely. A hosted copy of this server runs at `https://marktplaats-mcp.jaspnerd.dev/mcp`, ready to plug into [claude.ai](https://claude.ai) in your browser or the Claude mobile app. Custom connectors work on every Claude plan, including Free.\n\n1. Open [claude.ai](https://claude.ai) and go to **Settings → Connectors**.\n2. Click **Add custom connector**.\n3. Paste `https://marktplaats-mcp.jaspnerd.dev/mcp` as the URL and click **Add**. No account or key needed.\n4. Ask Claude: *\"Search Marktplaats for an OLED TV under €400 near 3011 AB.\"*\n\nThe hosted endpoint runs the same code as the PyPI package, rate-limited per client. If you'd rather have requests come from your own machine, install it locally below.\n\n## 📦 Install in your favorite client\n\nEvery config runs the same stdio server via `uvx marktplaats-mcp`.\n\n<details>\n<summary><b>Claude Desktop</b></summary>\n\nAdd to `claude_desktop_config.json` (macOS: `~/Library/Application Support/Claude/`, Windows: `%APPDATA%\\Claude\\`), then fully restart Claude Desktop:\n\n```json\n{\n  \"mcpServers\": {\n    \"marktplaats\": {\n      \"command\": \"uvx\",\n      \"args\": [\"marktplaats-mcp\"]\n    }\n  }\n}\n```\n\nIf Claude Desktop can't find `uvx`, use the absolute path (`which uvx`, e.g. `/Users/you/.local/bin/uvx`).\n</details>\n\n<details>\n<summary><b>OpenAI Codex CLI</b></summary>\n\nAdd to `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.marktplaats]\ncommand = \"uvx\"\nargs = [\"marktplaats-mcp\"]\n```\n\nOr: `codex mcp add marktplaats -- uvx marktplaats-mcp`\n</details>\n\n<details>\n<summary><b>opencode</b></summary>\n\nAdd to `opencode.json`:\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"marktplaats\": {\n      \"type\": \"local\",\n      \"command\": [\"uvx\", \"marktplaats-mcp\"],\n      \"enabled\": true\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Cursor</b></summary>\n\nAdd to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project):\n\n```json\n{\n  \"mcpServers\": {\n    \"marktplaats\": {\n      \"command\": \"uvx\",\n      \"args\": [\"marktplaats-mcp\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>VS Code / GitHub Copilot</b></summary>\n\nAdd to `.vscode/mcp.json` (note the `servers` key and explicit `type`):\n\n```json\n{\n  \"servers\": {\n    \"marktplaats\": {\n      \"type\": \"stdio\",\n      \"command\": \"uvx\",\n      \"args\": [\"marktplaats-mcp\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Windsurf</b></summary>\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"marktplaats\": {\n      \"command\": \"uvx\",\n      \"args\": [\"marktplaats-mcp\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Gemini CLI</b></summary>\n\nAdd to `~/.gemini/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"marktplaats\": {\n      \"command\": \"uvx\",\n      \"args\": [\"marktplaats-mcp\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>JetBrains IDEs (AI Assistant / Junie)</b></summary>\n\nSettings → Tools → AI Assistant → Model Context Protocol (MCP) → Add:\n\n```json\n{\n  \"mcpServers\": {\n    \"marktplaats\": {\n      \"command\": \"uvx\",\n      \"args\": [\"marktplaats-mcp\"]\n    }\n  }\n}\n```\n</details>\n\n## 🧰 Tools\n\n| Tool | What it does |\n|---|---|\n| `search_listings` | Search with query, category, price range, condition, distance, recency, sorting and pagination |\n| `get_listing_details` | Full ad: complete description, all images, view and favorite counts, listing age |\n| `get_seller_profile` | Trust signals: verified bank, identity and phone, review score and count |\n| `list_categories` | Browse the category tree (names + ids) used for filtering |\n| `check_new_listings` | Newest-first monitoring with a stateless cursor: returns only ads placed after `since` |\n\nAll five tools are read-only and carry the matching MCP annotations, so clients skip the confirmation prompts.\n\n### Example prompts\n\n- *\"Find a second-hand iPhone 15 under €600 in as-good-as-new condition, sorted by price.\"*\n- *\"Search 2dehands for a bakfiets within 20 km of postcode 2000 Antwerpen.\"*\n- *\"Is seller 12345 trustworthy? Check their profile.\"*\n- *\"Check for new 'vintage lamp' listings since my last check and summarize the interesting ones.\"*\n\n## ❓ FAQ\n\n**Does this need a Marktplaats account or API key?**\nNo. It uses the same public JSON endpoints the website itself uses.\n\n**Is this an official Marktplaats product?**\nNo. This is an independent open source project with no ties to Marktplaats or Adevinta. The underlying API is undocumented and may change. The server backs off politely on rate limits; keep your own usage reasonable.\n\n**Why do I sometimes see fewer results than the limit?**\nPaid promotions (DAGTOPPER/TOPADVERTENTIE) are filtered out by default. Pass `include_sponsored=true` if you want them.\n\n**Which Python versions are supported?**\n3.10 and up. CI tests 3.11 through 3.13 on Linux, macOS and Windows.\n\n## 🗺️ Roadmap\n\n- Persistent saved searches with price-drop detection\n- Notifications (Discord/Telegram/ntfy via Apprise)\n- Authenticated tools (your messages, favorites and bids)\n- Docker image + Docker MCP Catalog\n\n## 🤝 Contributing\n\nPRs welcome. See [CONTRIBUTING.md](https://github.com/jasp-nerd/marktplaats-mcp/blob/main/.github/CONTRIBUTING.md) for the dev setup: `uv sync --all-groups`, then `uv run pytest`.\n\nThis project reuses proven ideas from [marktplaats-py](https://github.com/jensjeflensje/marktplaats-py), [marktplaats-monitor](https://github.com/jasp-nerd/marktplaats-monitor), [marktplaats-2dehands-mcp](https://github.com/gjoris/marktplaats-2dehands-mcp) and [PonClick/marktplaats-mcp](https://github.com/PonClick/marktplaats-mcp). Details in [THIRD_PARTY_NOTICES.md](https://github.com/jasp-nerd/marktplaats-mcp/blob/main/THIRD_PARTY_NOTICES.md).\n\n## 📄 License\n\n[MIT](https://github.com/jasp-nerd/marktplaats-mcp/blob/main/LICENSE) © 2026 jasp-nerd\n\n---\n\n<sub>mcp-name: io.github.jasp-nerd/marktplaats-mcp</sub>\n",
  "bytes": 8949,
  "sha": "553bd42cc667e17b93afcc0086257365fdf78f062f242ec64691ea2ed2041efc",
  "repo_slug": "jasp-nerd/marktplaats-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_jasp_nerd_marktplaats_mcp_d4eac00a/readme"
}