marktplaats-2dehands-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MARKTPLAATS_2DEHANDS_CACHE_DIR | No | Override cache directory for category data fetched from the live API. Defaults to ~/.cache/marktplaats-2dehands-mcp/categories-{site}.json. | |
| MARKTPLAATS_2DEHANDS_STATE_DIR | No | Override directory for saved-search state. Defaults to ~/.local/share/marktplaats-2dehands-mcp/saved_searches.json. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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. |
| 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 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 Hard limits: - maximum 20 searches per hunt - maximum 25 returned listings per individual search |
| 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". |
| 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. |
| list_categoriesB | List the supported main categories and common subcategories. Same IDs work on both marktplaats.nl and 2dehands.be. |
| get_category_filtersC | Discover the attribute filters available within a category. |
| save_huntA | Save a reusable named hunt locally. |
| list_huntsB | List locally saved hunts. |
| run_huntC | Run a previously saved hunt. |
| check_new_matchesB | Run a saved hunt and return only listings not seen before. |
| 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. |
| list_saved_searchesC | List all persisted searches. |
| delete_saved_searchC | Remove a persisted search. |
| 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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.