marktplaats-mcp
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-mcpzoek naar laptops max 500 euro"
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 Server
Een MCP (Model Context Protocol) server voor het zoeken en bekijken van advertenties op Marktplaats.nl. Hiermee kan je AI-assistenten zoals Claude toegang geven tot Marktplaats.
Features
Zoeken - Zoek advertenties met uitgebreide filters (prijs, afstand, conditie, categorie, etc.)
Categorie filters - Filter op categorie-specifieke attributen zoals RAM, schermgrootte, merk, framehoogte, etc.
Advertentie details - Bekijk volledige beschrijvingen, alle afbeeldingen en kenmerken
Verkoper info - Bekijk verkoper beoordelingen en verificatiestatus
Categorieën - Blader door alle Marktplaats categorieën
Related MCP server: marktplaats-mcp
Installatie
Je kan op 2 manieren installeren: via uvx of handmatig.
uvx
claude mcp add --transport stdio marktplaats -- uvx git+https://github.com/PonClick/marktplaats-mcp marktplaats-mcpof voeg toe in .claude.json:
"mcpServers": {
"marktplaats": {
"type": "stdio",
"command": "uvx",
"args": [
"git+https://github.com/PonClick/marktplaats-mcp",
"marktplaats-mcp"
],
"env": {}
}
}Handmatige installatie
Git clone en pip install.
# Clone de repository
git clone https://github.com/PonClick/marktplaats-mcp.git
cd marktplaats-mcp
# Installeer met pip
pip install -e .Voeg toe aan je Claude Desktop configuratie (
~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"marktplaats": {
"command": "marktplaats-mcp"
}
}
}Gebruik
Beschikbare Tools
search_listings
Zoek advertenties met filters:
query- Zoektermcategory/subcategory- Categorie filterzip_code- Postcode voor afstanddistance_km- Maximum afstandprice_from/price_to- Prijsrangecondition- Conditie (new, used, as_good_as_new, etc.)attribute_ids- Categorie-specifieke filters (gebruikget_category_filters)
get_listing_details
Haal volledige advertentie details op inclusief:
Volledige beschrijving
Alle afbeeldingen
Kenmerken
Statistieken (views, bewaard)
get_seller_info
Verkoper informatie:
Naam en verificatiestatus
Gemiddelde beoordeling
Aantal reviews
list_categories
Bekijk alle beschikbare categorieën.
get_category_filters
Haal beschikbare filters op voor een categorie, bijvoorbeeld:
Laptops: RAM, schermgrootte, processor, SSD/HDD
Fietsen: Merk, framehoogte, elektrisch
Voorbeelden
Zoek een laptop met 16GB RAM
search_listings(
subcategory="laptops",
price_to=500,
attribute_ids=[12103] # 16GB RAM
)Zoek elektrische Gazelle fietsen
search_listings(
query="gazelle",
subcategory="elektrische fietsen",
condition="used"
)Credits
Basis library: marktplaats-py door @jensjeflensje - Bedankt voor het bouwen van de uitstekende Python library voor Marktplaats!
Open Source
Dit project is volledig open source en aangeboden door lessClick AI.
Licentie
MIT License - Zie LICENSE voor details.
Disclaimer
Dit is een onofficieel project en is niet geassocieerd met Marktplaats.nl. Gebruik op eigen risico en respecteer de gebruiksvoorwaarden van Marktplaats.
Available Tools
5 toolsget_category_filtersA
Get available filter options for a specific category (like RAM, brand, screen size, etc.).
Args: category: Main category name (e.g., "computers en software") subcategory: Subcategory name (e.g., "laptops")
Returns: Available filters with their IDs that can be used in search_listings
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| subcategory | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state that this is a read-only operation, confirm no side effects, or mention any authentication or rate-limit considerations. The verb 'Get' suggests a read, but the description remains silent on behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a clear purpose statement, an Args section, and a Returns section. It is front-loaded and every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, no nested objects) and the presence of an output schema, the description covers the essential purpose, parameter meaning, and usage context. The main gap is the absence of behavioral disclosure (e.g., read-only nature) because there are no annotations, but otherwise it is sufficient to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by describing both parameters as 'Main category name' and 'Subcategory name' with concrete examples ('computers en software', 'laptops'). It doesn't clarify optionality or interaction between the two, but the added meaning is substantial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('available filter options') with clear scope ('for a specific category') and concrete examples (RAM, brand, screen size). It does not explicitly differentiate from sibling tools like list_categories, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by noting the returned filters 'can be used in search_listings', which gives workflow context but does not state when to call this tool versus alternatives or any prerequisites. This is implied usage rather than explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listing_detailsB
Get full details of a specific listing including complete description and all images.
Args: listing_id: The listing ID (e.g., "m2340580395")
Returns: Full listing details including description, images, attributes, and seller info
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Get' implies a read-only operation and it does disclose the shape of the payload (description, images, attributes, seller info), but it says nothing about error behavior for an invalid ID, rate limits, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence, followed by compact Args/Returns blocks. No filler, though the Returns section partly restates what the output schema already provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained in depth. However, for a lookup tool that depends entirely on a valid identifier, the description omits how to source that ID and what happens on failure, leaving a workflow gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is documented only as a bare string titled 'Listing Id'. The description compensates by supplying a concrete ID format example ('m2340580395'), which is the one piece of meaning the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieves full details of a specific listing, including description and images. This clearly distinguishes it from the search-oriented sibling search_listings, though it never names that sibling or any other explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies you need a listing_id but never says when to reach for this tool versus search_listings or get_seller_info, nor how to obtain a valid ID. No prerequisites or exclusions are stated, leaving the agent to infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seller_infoB
Get detailed information about a seller including ratings and verification status.
Args: seller_id: The seller's numeric ID
Returns: Seller profile with ratings, verification status, and statistics
| Name | Required | Description | Default |
|---|---|---|---|
| seller_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose that this is a read that returns a seller profile with ratings, verification status, and statistics, but says nothing about authentication requirements, rate limits, or what happens for an unknown seller_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence. The 'Args/Returns' blocks are slightly padded and the Returns line partly duplicates the output schema, but the overall size is appropriate for a simple getter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema that documents the return shape, the description supplies enough to call it correctly. Missing only edge-case behavior such as invalid or missing seller IDs, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that seller_id is the seller's numeric ID, which clarifies the bare integer property. Only one parameter exists, so there is little room for further semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (seller info) and enumerates the payload (ratings, verification status, statistics). The resource is naturally distinct from the listing/category siblings, though the description never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_listing_details. Retrieval intent is implied by the verb 'Get' and the single ID argument, but nothing tells the agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesB
List all available main categories and common subcategories on Marktplaats.
Returns: Dictionary with main categories and subcategories
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, but it does disclose the return shape (a dictionary of main categories and subcategories), which helps an agent plan. It says nothing about read-only nature, authentication, or rate limits, though for a zero-parameter enumeration tool the behavioral risk is low.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the purpose front-loaded and no filler. The 'Returns:' clause is partly redundant with the existing output schema, which slightly dilutes it but does not hurt readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema, the description is close to sufficient, but it omits any routing guidance against get_category_filters, which is the one thing an agent actually needs to choose correctly among the sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing parameter-specific to document; the baseline for 0 params is 4. The description cannot add parameter meaning beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('main categories and common subcategories') scoped to Marktplaats, so the agent knows exactly what it returns. However, it never distinguishes itself from the close sibling get_category_filters, which also deals with categories and could easily be confused with this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no alternative tool is named, even though get_category_filters is an obvious candidate an agent might pick instead. Usage is only inferable from the tool name and the word 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_listingsA
Search for listings on Marktplaats.nl.
Args: query: Search query text (required if no category specified) category: Main category name (e.g., "computers en software", "fietsen en brommers") subcategory: Subcategory name (e.g., "laptops", "elektrische fietsen") zip_code: Dutch postal code for distance calculations (e.g., "1016LV"). Required for distance filtering! distance_km: Maximum distance in kilometers (default: 1000). Only works with zip_code. price_from: Minimum price in euros price_to: Maximum price in euros condition: Item condition: "new", "as_good_as_new", "used", "refurbished", "not_working" seller_type: Filter by seller type: "business" (zakelijk, for VAT invoices) or "private" (particulier) sort_by: Sort method: "date", "price", "optimized", "location" sort_order: Sort order: "asc" or "desc" limit: Number of results (1-100, default: 10) offset: Pagination offset offered_since_days: Only show items posted within the last X days attribute_ids: List of attribute filter IDs (use get_category_filters to find these) extract_specs: Try to extract hardware specs (RAM, storage, CPU) from descriptions (for laptops/tablets) compact: Return minimal response format (~75% smaller). Omits description, image, links. Use get_listing_details(id) for full info. Seller: B=business, P=private. Condition: N=new, Z=as good as new, G=used, R=refurbished, D=defect.
Returns: Dictionary with total_count, returned_count, and list of listings
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| compact | No | ||
| sort_by | No | optimized | |
| category | No | ||
| price_to | No | ||
| zip_code | No | ||
| condition | No | ||
| price_from | No | ||
| sort_order | No | asc | |
| distance_km | No | ||
| seller_type | No | ||
| subcategory | No | ||
| attribute_ids | No | ||
| extract_specs | No | ||
| offered_since_days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses compact mode's ~75% smaller payload and exactly what it omits (description, image, links), plus the coded abbreviations (B/P seller, N/Z/G/R/D condition) an agent must decode. It omits any note on rate limits or authentication, which keeps it short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and each Args entry is a single tight line. The compact-mode paragraph is dense but every sentence adds decoding value, so there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter search tool with an output schema, the description documents all inputs plus the compact return format and cross-references to sibling tools. Return values are only briefly summarized, but the output schema covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry all 17 parameters — and it does, defining each with examples, defaults (limit 1-100 default 10, distance_km default 1000), allowed enum-like values for condition/seller_type/sort_by/sort_order, and dependency constraints. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (listings) scoped to Marktplaats.nl, making the domain unambiguous. It does not explicitly distinguish itself from sibling get_listing_details at the top level, though it does reference that sibling later in the compact note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives conditional guidance inline: query is 'required if no category specified', distance_km 'Only works with zip_code', and attribute_ids points to get_category_filters. It also routes to get_listing_details for full info when using compact mode. No explicit when-not-to-use-this-tool statement, but the conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
get_category_filters - First observed
get_listing_details - First observed
get_seller_info - First observed
list_categories - First observed
search_listings
TDQS
Scored across 5 tools
Each tool targets a clearly distinct resource and action: search_listings for queries, get_listing_details for a single listing, get_seller_info for sellers, list_categories for the taxonomy, and get_category_filters for filter discovery. No two tools overlap in purpose.
All names follow a consistent snake_case verb_noun pattern (search_, get_, list_), with predictable pluralization of list-resources. No mixed conventions or vague verbs.
Five tools is well-scoped for a browsing-focused server; each earns its place and supports a distinct step in the search workflow (discover categories/filters, search, inspect listing, inspect seller).
The read-only search surface covers the full browsing lifecycle: category discovery, filter discovery, searching, listing details, and seller info. It lacks any write/favorite/messaging operations, though those may be intentionally out of scope for a search server.
Maintenance
Related MCP Connectors
Search and browse global classifieds across 80 markets. No auth required for read-only access.
Live kleinanzeigen.de search, ad, seller, category and location data for AI clients
Search and retrieve job postings on Nationale Vacaturebank, the largest Dutch jobs site (read-only).
Search Marktplaats & 2dehands (NL/BE classifieds), vet sellers, compare prices, use your account.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read-only access Catawiki auction marketplace data, including searching lots, inspecting items, browsing categories, and exploring auctions.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to search and monitor Dutch and Belgian classifieds (Marktplaats and 2dehands) for listings, seller profiles, and categories.845 PyPI4MIT
- AlicenseAqualityBmaintenanceRead-only MCP server for Marktplaats.nl (Dutch classifieds) that lets agents search listings and read price, specs, condition, delivery, location, and seller details.38 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to search willhaben.at marketplace listings and retrieve full ad details, using filters for category, condition, size, color, pattern, brand, and more.3MIT