Skip to main content
Glama
marktplaats-2dehands-mcp

marktplaats-2dehands-mcp

by RT-codes

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

search_listings

Run one filtered marketplace search.

get_listing_details

Fetch fuller details for one listing.

get_seller_info

Fetch seller verification/review information.

list_categories

List known marketplace categories.

get_category_filters

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 endpoints

The 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-mcp

Or run directly from GitHub:

uvx --from git+https://github.com/RT-codes/marktplaats-mcp.git \
  marktplaats-2dehands-mcp

Example

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 tools
check_new_matchesB

Run a saved hunt and return only listings not seen before.

Inputs: name (required), mark_seen. 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

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

    B3.4/5.0

    Scored across 14 tools

    Disambiguation3/5

    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.

    Naming Consistency3/5

    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.

    Tool Count5/5

    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.

    Completeness5/5

    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

    ActivityStale
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables 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
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables 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.
      9
      MIT