marktplaats-2dehands-mcp
This server provides a Marktplaats/2dehands MCP for searching and inspecting marketplace listings, plus optional saved-search/hunt conveniences, while leaving orchestration and ranking to external fabrics.
Search listings with filters: site (NL/BE), query, category/subcategory, zip/distance, price range, condition, seller type, sort, limit/offset, recency, and category-specific attribute filters.
Fetch full listing details (title, price, description, images, stats) by listing ID.
Fetch seller info: verification status, accepted payment method, and review stats.
List marketplace categories and discover category-specific attribute filters.
Run a bounded "hunt": multiple complementary searches deduplicated by listing ID, with provenance labels (found_by).
Save, list, and run reusable hunts locally; check saved hunts for only new/never-seen matches.
Persist individual searches and check them for new matches (with optional mark-seen behavior).
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@marktplaats-2dehands-mcp search 2dehands for a Trek Emonda road bike under €2000 near Antwerp"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Marktplaats MCP
A lean, stateless MCP provider for public marketplace data from Marktplaats.nl and 2dehands.be.
This repository intentionally stays close to the marketplace/API layer. It exposes retrieval and platform-specific helpers, but does not own deal-hunt orchestration, multi-query fan-out, ranking, persistence, seen-state, refresh logic, or tracker updates.
Those higher-level behaviors belong in consuming fabrics such as the Secondhand Dealhunt Fabric in RT-codes/mcp-hub.
Provider tools
Tool | Purpose |
| Run one filtered marketplace search. |
| Fetch fuller details for one listing. |
| Fetch seller verification/review information. |
| List known marketplace categories. |
| Discover category-specific attribute filters. |
No Marktplaats login or API key is required for these public retrieval tools.
Related MCP server: Begagnad MCP
Architecture boundary
Secondhand Dealhunt Fabric
|
| repeated provider calls
v
Marktplaats MCP
|
+-- search_listings
+-- get_listing_details
+-- get_seller_info
+-- list_categories
+-- get_category_filters
|
v
Marktplaats / 2dehands endpointsThe provider returns marketplace facts. The consuming fabric decides how many searches to run, how to combine them, what has already been seen, and how candidates should be ranked or tracked.
Install
Requires uv.
git clone https://github.com/RT-codes/marktplaats-mcp.git
cd marktplaats-mcp
uv sync
uv run marktplaats-2dehands-mcpOr run directly from GitHub:
uvx --from git+https://github.com/RT-codes/marktplaats-mcp.git \
marktplaats-2dehands-mcpExample
search_listings(
query="RTX 4090",
zip_code="3811",
distance_km=50,
price_to=1500,
sort_by="date",
sort_order="desc",
limit=20
)A normalized result contains a stable listing ID and URL plus marketplace fields such as title, description, price, condition, location, seller metadata and image.
Relationship to upstream
This project originated from the Marktplaats / 2dehands MCP ecosystem and keeps the useful retrieval layer while deliberately avoiding application-level workflow logic.
That makes it suitable as a small provider MCP that can be plugged into different orchestration layers instead of becoming one large opinionated shopping agent by itself.
Available Tools
14 toolscheck_new_matchesB
Run a saved hunt and return only listings not seen before.
Inputs: name (required), mark_seen. Returns: object
check_saved_searchA
Re-run a saved search and return only listings not seen before.
Args: name: The saved search name. mark_seen: If True (default), record the returned IDs as seen so the next call returns only newer ones. Set False for a dry-run.
Inputs: name (required), mark_seen. Returns: object
delete_saved_searchC
Remove a persisted search.
Inputs: name (required). Returns: object
get_category_filtersC
Discover the attribute filters available within a category.
Inputs: site, category, subcategory. Returns: object
get_listing_detailsB
Fetch a listing page and return title, price, description, images, stats.
Args: listing_id: e.g. "m2340580395" (the 'm' prefix is added if missing). site: "marktplaats" or "2dehands".
Inputs: listing_id (required), site. Returns: object
get_seller_infoB
Fetch a seller profile (verification status, payment method, reviews).
Note: the endpoint does not return seller name/id — those are available from the listing response. It only exposes verification flags, the accepted payment method, and aggregated review stats.
Inputs: seller_id (required), site. Returns: object
huntA
Run several complementary Marktplaats searches as one bounded hunt.
Each search is a dict containing normal search_listings arguments plus an
optional human-readable label used for provenance.
Example: [ {"label": "p100 nearby", "query": "Tesla P100", "price_to": 150}, {"label": "cheap workstation", "query": "Dell Precision", "price_to": 120}, ]
Results are deduplicated by Marktplaats listing ID. Every candidate keeps
a found_by list showing which searches independently discovered it.
Hard limits: - maximum 20 searches per hunt - maximum 25 returned listings per individual search
Inputs: searches (required), per_search_limit. Returns: object
list_categoriesB
List the supported main categories and common subcategories.
Same IDs work on both marktplaats.nl and 2dehands.be.
Inputs: site. Returns: object
list_huntsB
List locally saved hunts.
Inputs: no named parameters. Returns: object
list_saved_searchesC
List all persisted searches.
Inputs: no named parameters. Returns: object
run_huntC
Run a previously saved hunt.
Inputs: name (required). Returns: object
save_huntA
Save a reusable named hunt locally.
Inputs: name (required), searches (required), per_search_limit. Returns: object
save_searchA
Persist a search so it can be re-run via check_saved_search.
Args: name: Identifier for the saved search (e.g. "trek-bike-antwerp"). params: Same kwargs as search_listings (must include 'site').
On creation, seen_ids is empty — the first check_saved_search call will return all current matches. To suppress that backfill, call check immediately after saving.
Inputs: name (required), params (required). Returns: object
search_listingsA
Search for listings on marktplaats.nl or 2dehands.be.
Args: site: "marktplaats" (NL, default) or "2dehands" (BE). query: Search query text (required if no category specified). category: Main category name (e.g., "computers en software"). subcategory: Subcategory name (e.g., "laptops", "elektrische fietsen"). zip_code: Postal code for distance filtering. NL: "1016LV". BE: "2000". distance_km: Maximum distance in km (default 1000). Requires zip_code. price_from / price_to: Price range in euros. condition: "new", "as_good_as_new", "used", "refurbished", "not_working". seller_type: "business" / "zakelijk" or "private" / "particulier". sort_by: "date", "price", "optimized", "location". sort_order: "asc" or "desc". limit: 1-100 (default 10). offset: Pagination offset. offered_since_days: Only show items posted within the last N days. attribute_ids: Category-specific filter IDs (use get_category_filters).
Returns: Dict with total_count, returned_count, listings, optional next_offset.
Inputs: site, limit, query, offset, +12 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
There is significant overlap between hunt, run_hunt, check_new_matches, and check_saved_search — all run searches and return listings, with only subtle differences in saved state. The persistent search tools (save_search, list_saved_searches, delete_saved_search, check_saved_search) are fairly distinct, but the hunt variants blur together.
The tool set mixes several conventions: verb_noun (get_listing_details, list_categories), noun-only (hunt), and noun_verb (check_new_matches, check_saved_search). While each name is readable, there is no single predictable pattern.
14 tools is a well-scoped count for a marketplace search and monitoring server. Each tool covers a distinct search or persistence operation, with no obvious bloat.
The surface covers search, detail retrieval, seller info, category discovery, filter discovery, and persistent saved searches with new-match tracking. Core read and monitoring workflows are complete, and no critical CRUD operation is missing.
Maintenance
Related MCP Connectors
Search and browse global classifieds across 80 markets. No auth required for read-only access.
Create, edit, relist and take down Czech and Slovak classified ads from your AI agent.
Search Marktplaats & 2dehands (NL/BE classifieds), vet sellers, compare prices, use your account.
AI marketplace: search, buy, sell across Amazon, eBay, AliExpress. 13 tools.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with New Zealand's largest online marketplace through the Trade Me API. Supports searching listings, managing watchlists, placing bids, making purchases, and accessing marketplace data across all Trade Me categories.6-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search and retrieve listings from Sweden's largest second-hand marketplaces, Blocket and Tradera. Returns unified data including prices, images, seller information, and direct links to listings.9MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to search and view advertisements on Marktplaats.nl with extensive filtering options.521MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read-only access Catawiki auction marketplace data, including searching lots, inspecting items, browsing categories, and exploring auctions.MIT