marktplaats-2dehands-mcp
This server lets an AI agent search, hunt, and monitor Marktplaats.nl / 2dehands.be listings without login or API keys.
Single search — run one filtered marketplace search (
search_listings) with query, category, subcategory, price range, condition, seller type, location/distance, sorting, and pagination.Multi-query hunts — run up to 20 complementary searches at once (
hunt), deduplicated by listing ID withfound_byprovenance.Saved hunts — persist reusable named hunt packs (
save_hunt,list_hunts,run_hunt) and track seen listings.New-match detection — get only listings not seen in earlier checks (
check_new_matches).Listing & seller details — fetch full listing info (
get_listing_details) and seller verification/payment/review info (get_seller_info).Category discovery — list categories (
list_categories) and category-specific attribute filters (get_category_filters).Legacy saved searches — save, list, delete, and re-check single-query searches (
save_search,list_saved_searches,delete_saved_search,check_saved_search).Bounded, agent-safe output — hard fan-out/result limits and a compact candidate payload designed for LLM semantic ranking.
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-mcpsearch 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
An agent-oriented MCP server for searching and monitoring Marktplaats.nl (and the inherited 2dehands.be support).
Instead of only exposing a single marketplace search, this version adds multi-query hunts: an AI agent can turn one shopping goal into several complementary searches, merge the results, remove duplicates, remember what it has already seen, and later ask for only the genuinely new listings.
Good for things like:
finding a specific laptop without trusting one exact search phrase
hunting for gaming-PC bargains across complete systems, GPUs and vague titles
monitoring a saved search over time
giving an AI a compact candidate pool it can rank semantically
No Marktplaats login or API key is needed for the public search tools.
Why this version exists
The upstream project already provided a solid MCP retrieval layer for Marktplaats and 2dehands. This wrapper keeps that useful base and adds a more agent-native hunting workflow on top.
User goal
↓
Agent invents several purposeful searches
↓
hunt(...)
↓
bounded Marktplaats searches
↓
deduplicate by listing ID
↓
found_by provenance
↓
compact candidate pool
↓
agent ranks the best matchesA saved hunt can then continue later:
save_hunt
↓
run_hunt
↓
check_new_matches
↓
only listings the agent has not seen beforeRelated MCP server: Begagnad MCP
Main tools
Tool | What it does |
| Run one filtered marketplace search. |
| Run up to 20 complementary searches and deduplicate the combined results. |
| Save a reusable named hunt locally. |
| List saved hunts and their seen-listing counts. |
| Re-run a saved hunt. |
| Return only listings not seen on earlier checks. |
| Fetch fuller details for one candidate. |
| Fetch seller information. |
| List known marketplace categories. |
| Inspect category-specific filters. |
The inherited single-query saved-search tools are still available too.
What is different from the upstream MCP?
The original gjoris/marktplaats-2dehands-mcp is a general Marktplaats / 2dehands MCP with normal search, listing details, category helpers, saved searches and optional account-oriented functionality.
This version focuses on goal-driven marketplace hunting:
one
huntcan run many complementary searches at onceevery hunt has hard fan-out / result limits so an agent cannot explode the context window
results are deduplicated by stable listing ID
found_byshows which different searches discovered the same listingnamed hunt packs can be saved and reused
seen listing IDs are remembered locally
check_new_matchesreturns only genuinely unseen adsthe returned candidate payload is intentionally compact for LLM ranking
account/login tools are not exposed in the lean MCP surface
In short:
Upstream:
"Let an AI search Marktplaats."
This version:
"Give an AI a shopping goal, let it search several clever ways,
merge the evidence, remember what it saw, and come back later
with only the new interesting listings."Install into any MCP-capable agent
This is a standard stdio MCP server. If your agent/client can launch an MCP command, it can usually use this server.
Option A — run directly from GitHub with uvx
Install uv first, then:
uvx --from git+https://github.com/RT-codes/marktplaats-mcp.git \
marktplaats-2dehands-mcpGeneric MCP configuration
Most stdio-capable MCP clients use a configuration shaped roughly like this:
{
"mcpServers": {
"marktplaats": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/RT-codes/marktplaats-mcp.git",
"marktplaats-2dehands-mcp"
]
}
}
}The exact settings screen or config-file location differs per agent, but the important part is always the same:
command: uvx
args: --from git+https://github.com/RT-codes/marktplaats-mcp.git marktplaats-2dehands-mcp
transport: stdioOption B — local clone
git clone https://github.com/RT-codes/marktplaats-mcp.git
cd marktplaats-mcp
uv sync
uv run marktplaats-2dehands-mcpThen point your MCP client at the local command. For example:
{
"mcpServers": {
"marktplaats": {
"command": "uv",
"args": [
"--directory",
"/path/to/marktplaats-mcp",
"run",
"marktplaats-2dehands-mcp"
]
}
}
}Quick single-search example
search_listings(
query="MacBook Air M2",
price_to=800,
sort_by="date",
sort_order="desc",
limit=10
)Distance filtering needs a postcode:
search_listings(
query="RTX 4070 gaming pc",
zip_code="3511",
distance_km=50,
price_to=1000,
limit=10
)Example 1 — MacBook bargain hunt
Prompt to the agent
Find me a good used MacBook for under €700. Prefer M1 or newer, but also check vague or badly titled listings that might be bargains.
What the agent might summarize
16 searches → 91 raw matches → 58 unique listings
Top candidates
1. MacBook Air M2 2022 — €675
Found by: macbook-m2, macbook-air, apple-laptop
2. MacBook Pro M1 16GB — €620
Found by: macbook-m1-16gb, macbook-pro
3. "Apple laptop 2021" — €490
Found by: vague-apple-bargainThose numbers and listings are illustrative — the real output depends on what is currently for sale.
What the technical MCP call can look like
{
"per_search_limit": 10,
"searches": [
{
"label": "macbook-m2",
"query": "MacBook M2",
"price_to": 700
},
{
"label": "macbook-m1-16gb",
"query": "MacBook M1 16GB",
"price_to": 700
},
{
"label": "macbook-air",
"query": "MacBook Air",
"price_to": 700
},
{
"label": "vague-apple-bargain",
"query": "Apple laptop",
"price_to": 700
}
]
}And a compact candidate returned by hunt is shaped roughly like:
{
"id": "m1234567890",
"title": "MacBook Air M2 2022",
"description": "Very good condition, battery still strong...",
"price": "€ 675.00",
"price_cents": 67500,
"condition": "used",
"location": {
"city": "Utrecht",
"distance_km": null
},
"link": "https://link.marktplaats.nl/m1234567890",
"found_by": [
"macbook-m2",
"macbook-air"
],
"found_by_count": 2
}The important bit is that the agent does not need to trust one search phrase. It can search several angles and reason over one deduplicated result set.
Example 2 — gaming PC value hunt
Prompt to the agent
Find me the best gaming PC under €900. GPU value matters more than RGB or a fancy case. Check normal gaming-PC listings, complete PCs with RTX cards, workstations with gaming GPUs, and vague titles that might hide a bargain.
What the agent might summarize
14 searches → 108 raw matches → 73 unique listings
Top candidates
1. Ryzen 7 + RTX 4070 PC — €850
Strongest overall gaming value.
2. "Game computer Nvidia" with RTX 3080 — €650
Weak title, unusually good GPU for the price.
3. Dell Precision + RTX 3070 — €575
Found through both workstation and RTX searches.
One candidate was discovered independently by 4 searches.Again, this is an illustrative result rather than a snapshot of current listings.
What the technical MCP call can look like
{
"per_search_limit": 10,
"searches": [
{
"label": "gaming-pc",
"query": "gaming pc",
"price_to": 900
},
{
"label": "rtx-4070-pc",
"query": "RTX 4070 pc",
"price_to": 900
},
{
"label": "rtx-3080-pc",
"query": "RTX 3080 computer",
"price_to": 900
},
{
"label": "workstation-gpu",
"query": "Dell Precision RTX",
"subcategory": "desktops",
"price_to": 900
},
{
"label": "vague-nvidia-pc",
"query": "computer Nvidia",
"subcategory": "desktops",
"price_to": 900
}
]
}A technical hunt response contains summary counters plus the deduplicated candidates:
{
"search_count": 5,
"successful_searches": 5,
"failed_searches": 0,
"raw_result_count": 50,
"unique_count": 34,
"duplicates_removed": 16,
"candidates": [
{
"id": "m0987654321",
"title": "Ryzen 7 Gaming PC RTX 4070",
"price": "€ 850.00",
"price_cents": 85000,
"found_by": [
"gaming-pc",
"rtx-4070-pc"
],
"found_by_count": 2
}
],
"errors": []
}The MCP deliberately does not decide what is a good gaming PC. Retrieval stays broad; the calling agent performs the semantic ranking.
Saved hunts and “what is new?”
A useful hunt can be saved once:
save_hunt(
name="gaming-pc-under-900",
per_search_limit=10,
searches=[
{"label": "gaming", "query": "gaming pc", "price_to": 900},
{"label": "4070", "query": "RTX 4070 pc", "price_to": 900},
{"label": "workstation", "query": "Dell Precision RTX", "price_to": 900}
]
)Run it whenever you want:
run_hunt(name="gaming-pc-under-900")Or ask only for listings that have not appeared in earlier checks:
check_new_matches(name="gaming-pc-under-900")The first check records the currently discovered listing IDs. Later checks can therefore return only genuinely unseen candidates.
Hunt safety bounds
Hunts are intentionally bounded for agent use:
maximum 20 searches per hunt
maximum 25 requested results per individual search
one failed search does not abort the other searches
results are deduplicated before they are returned to the agent
This makes it practical to let an LLM generate an adventurous search portfolio without giving it unlimited fan-out.
Local state
Saved hunts live at:
~/.local/share/marktplaats-2dehands-mcp/saved_hunts.jsonLegacy saved searches live at:
~/.local/share/marktplaats-2dehands-mcp/saved_searches.jsonYou can override the state directory with:
MARKTPLAATS_MCP_STATE_DIRThe inherited MARKTPLAATS_2DEHANDS_STATE_DIR remains supported as a fallback.
Backend note
Search currently uses the internal Adevinta / Marktplaats JSON search endpoint behind the website. It does not currently require an API key, login, headless browser or proxy for public search.
That endpoint is undocumented and may change. The retrieval code is deliberately kept behind a small internal layer so the transport can be repaired without redesigning the public MCP tool interface.
Credits & origin
This project would not exist without the work it builds on.
Primary upstream
gjoris/marktplaats-2dehands-mcp — MIT licensed.
That project provided the base MCP server, Marktplaats / 2dehands retrieval layer, category tooling, listing-detail support and saved-search foundation that this repository was adapted from.
Earlier formatting / parsing work
The upstream project credits listing-formatting helpers and related parsing work to:
PonClick/marktplaats-mcp — MIT licensed, © 2026 lessClick AI.
This repository preserves that attribution because parts of the inherited implementation still derive from that work.
Additions in this repository
The RT-codes/marktplaats-mcp version adds the agent-oriented hunt layer, including:
bounded multi-query hunts
cross-search deduplication
found_byprovenancereusable saved hunt packs
persistent seen-listing memory
new-match detection
a compact candidate payload designed for LLM ranking
a lean search-focused MCP surface
Thank you to the upstream maintainers for making the original work available under MIT.
License
MIT — see LICENSE.
Available Tools
14 toolscheck_new_matchesB
Run a saved hunt and return only listings not seen before.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| mark_seen | 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. It discloses that only unseen listings are returned, which suggests a stateful 'seen' mechanism. However, it omits what happens to the seen state (e.g., marking listings as seen by default), any side effects, or rate limits, leaving significant behavioral gaps.
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?
A single, efficient sentence that front-loads the core action and outcome. It earns its place but could benefit from slightly more detail given the lack of annotations and schema descriptions.
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 needn't be explained. However, with no annotations and 0% schema coverage, the description should do more to cover parameter semantics and side effects. It is adequate but leaves clear gaps for correct invocation.
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 explain the parameters. It only mentions 'run a saved hunt' (implying 'name') and 'seen before' (implying 'mark_seen'), but does not clarify that 'mark_seen' defaults to true or what the parameter does. Most parameter meaning is left to inference from titles.
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 ('Run a saved hunt'), and clarifies the output scope ('return only listings not seen before'). It's distinguishable from siblings like run_hunt, but the description doesn't explicitly say how it differs from that tool, leaving a small ambiguity.
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 the tool is used to check for new matches from a saved hunt, but it doesn't specify when to use this versus run_hunt or check_saved_search. No explicit when-not or alternative tool guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| mark_seen | 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 present, the description carries the full burden and does disclose the key non-obvious trait: mark_seen=True persists returned IDs as seen, mutating state that affects subsequent calls, and False gives a dry-run. It omits any note on permissions or what happens to deleted/expired saved searches, but the critical side effect is surfaced.
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?
One sentence of purpose followed by a compact Args block; every line earns its place and the core behavior is front-loaded. Slightly verbose line-wrapping on mark_seen, but no 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?
An output schema exists, so the description rightly does not explain return values. It covers the tool's novelty filter and state-mutation semantics; the only gap is routing guidance relative to similar siblings (check_new_matches, run_hunt).
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, documenting both required 'name' and the optional 'mark_seen' with its default and exact behavioral consequence. Nothing beyond what's stated is needed to call it correctly.
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?
Specific verb+resource: 'Re-run a saved search and return only listings not seen before' — an agent immediately knows it re-executes a stored search with a novelty filter. It does not, however, distinguish itself from the sibling check_new_matches, which sounds like it could serve a similar role.
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?
Usage is implied rather than stated: the tool presumes a saved search already exists (created via save_search). The description gives one conditional instruction ('Set False for a dry-run') but never says when to prefer this over check_new_matches, run_hunt, or search_listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_saved_searchC
Remove a persisted search.
| Name | Required | Description | Default |
|---|---|---|---|
| name | 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 and does not meet it. "Remove" implies a mutation, but it never says the deletion is permanent/irreversible, whether a confirmation is needed, what happens if the name doesn't exist, or whether any permission is required.
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?
One short, front-loaded sentence with no filler. It is efficient, though its brevity here reflects under-specification rather than disciplined concision.
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 needn't be explained, but for a destructive tool with zero annotations the description is too thin: no irreversibility warning, no auth note, no failure mode, and no help interpreting the single undocumented parameter.
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 single required parameter "name" has 0% schema description coverage, and the description does not compensate at all — it never clarifies whether name is the saved search's identifier, a label, or a case-sensitive match. A destructive operation keyed on an unexplained name is a real gap.
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 and resource ("Remove a persisted search"), which is more precise than the bare name. It does not, however, differentiate itself from siblings like save_search, list_saved_searches, or check_saved_search, so an agent must infer the division of labor from the names alone.
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 guidance on when to use this tool versus list_saved_searches or check_saved_search, and no stated precondition (e.g., the search must already be saved). The agent gets no signal about when this is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_category_filtersC
Discover the attribute filters available within a category.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | marktplaats | |
| 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 whole burden. It implies a read/discovery operation but never states that it is side-effect free, whether it is cached, or what happens when category/subcategory are omitted (both default to null).
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?
A single, front-loaded sentence with no filler; the verb and the object of discovery come first.
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 described. However, with no annotations and completely undocumented parameters, the definition leaves the calling contract underspecified for a 3-parameter tool.
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?
All three parameters (site, category, subcategory) have 0% schema description coverage, and none are explained in the description. Defaults such as site='marktplaats' and nullable category/subcategory are left for the agent to interpret, so the description fails to compensate for the coverage gap.
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 ('Discover') and resource ('the attribute filters available within a category'), which is clearly distinct from siblings like list_categories or get_listing_details. It stops short of explicitly naming those siblings as alternatives, but an agent can tell what this tool returns.
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 context, no prerequisite (e.g. needing a known category id), and no mention of how this differs from list_categories. The agent must infer the workflow entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | marktplaats | |
| 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?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return fields, but omits whether authentication is needed, rate limits, error behavior for invalid IDs, and whether this is a read-only operation. For a fetch tool with zero annotation coverage this is a gap.
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 purpose and return fields, followed by a compact args block. No wasted sentences, though the args formatting is informal.
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 the description needn't explain return types; it still lists the fields, which is a slight redundancy but harmless. Parameter coverage is complete and the purpose is clear. The main gap is usage context against siblings, but for a simple detail-fetch this is close to complete.
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 gives a concrete example for listing_id and explains the 'm' prefix normalization, and it enumerates the valid values for site. Both parameters are documented with enough detail to call the tool correctly.
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 (Fetch) and resource (listing page) and enumerates the returned fields, so the agent knows exactly what this tool retrieves. It does not explicitly distinguish itself from siblings like search_listings or hunt, though the singular 'listing page' implies detail-fetch versus search.
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 guidance on when to use this versus search_listings or the hunt tools. The agent must infer that this is a detail lookup, but there are no stated conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | marktplaats | |
| 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 burden, and it usefully discloses a negative behavioral trait: the endpoint does not return seller name/id and only exposes verification flags, payment method, and aggregated review stats. It says nothing about auth requirements, rate limits, error behavior, or that this is a read-only lookup.
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?
Purpose is front-loaded in the first sentence and the caveat follows in a compact second sentence. No filler, though the parenthetical and note could be tightened into one line.
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-value detail is not required, and the description adds the non-obvious negative caveat. However, with 0% parameter coverage and no annotations, the missing param and safety context leaves it only minimally adequate for calling 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% with two parameters, so the description must compensate. It only indirectly alludes to seller id via the listing-response note and never explains the 'site' parameter or its 'marktplaats' default, leaving both parameters semantically undocumented.
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+resource ('fetch a seller profile') and enumerates the payload contents (verification status, payment method, reviews). It does not name or differentiate from siblings like get_listing_details, so it lands at 4 rather than 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?
No explicit when-to-use, when-not-to-use, or alternative selection guidance. The note that name/id come from the listing response hints at a workflow but never says when to call this tool versus the listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| searches | Yes | ||
| per_search_limit | 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 it does disclose real behavior: deduplication by Marktplaats listing ID, the found_by provenance list, and hard limits (max 20 searches, max 25 listings per search). It does not clarify whether the hunt is persisted or has side effects (the existence of save_hunt/run_hunt makes this ambiguity meaningful), nor does it state read-only status or request cost.
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-loads the purpose, then example, then hard limits as a scannable list; each block earns its place. Slightly verbose around the example/limits but nothing is filler.
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 structure needn't be explained, and the description covers the nested searches argument and result semantics (dedup, found_by) adequately. The remaining gap is the unclear relationship to save_hunt/run_hunt, which an agent needs in order to choose correctly among these siblings.
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 well for the complex searches parameter: it explains that each entry is a dict of search_listings arguments plus an optional label, and provides a concrete two-element example. The per_search_limit parameter is not named directly, though the stated 25-listing cap gives implied bounds on it.
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 clear verb and resource: 'Run several complementary Marktplaats searches as one bounded hunt,' which distinguishes it from the single-search sibling search_listings. However, it never differentiates itself from run_hunt or save_hunt, leaving an agent to guess how 'hunt' relates to those near-identical siblings.
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?
Usage is implied by 'several complementary searches as one bounded hunt' and the multi-search example, so an agent can infer it is for batching related queries. But there is no explicit when-to-use rule and no named alternative (e.g., why pick this over run_hunt or individual search_listings calls), which matters given the crowded hunt-related sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesB
List the supported main categories and common subcategories.
Same IDs work on both marktplaats.nl and 2dehands.be.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | marktplaats |
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 full burden. It's clearly a read-only list operation, but the description doesn't state that explicitly or describe rate limits, caching, or pagination. It mentions the same IDs work on both sites, which is useful cross-site context, but nothing about behavior beyond that.
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?
Very concise, two short sentences. Front-loaded with the main purpose. The second sentence about IDs working across sites is useful but could be integrated more clearly. No wasted words.
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?
With an output schema present, return values needn't be explained. However, for a reference tool with no annotations and an undocumented parameter, the description is minimal. It doesn't explain what 'main categories and common subcategories' look like or how to use them, nor does it clarify the site parameter's effect. Adequate but incomplete.
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% and there's 1 parameter ('site' with default 'marktplaats'). The description mentions 'marktplaats.nl and 2dehands.be' which implies the site parameter controls platform, but it doesn't map the parameter values to the domains or explain the default. This adds marginal value but leaves the parameter's enum/usage ambiguous.
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 (categories/subcategories) with clear scope. Distinguishes itself from siblings like get_category_filters which presumably returns filters for a category, and from search_listings. The description makes it clear this is a reference/list 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?
No explicit when-to-use guidance or alternatives are named. The description implies it's a reference tool for discovering categories before searching, but it doesn't say when to use it vs get_category_filters or search_listings. No prerequisites or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_huntsB
List locally saved hunts.
| 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 full behavioral burden, and it discloses almost nothing: no read-only confirmation (only implied by 'List'), no note on auth, ordering, or size of the result set. With zero annotation coverage, this is a real gap even for a simple read tool.
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?
A single front-loaded sentence with no filler, which is appropriate for this trivial tool. It is efficient but so brief that it leaves the sibling ambiguity unaddressed.
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, and there are no parameters to document, which keeps the required scope small. However, with no annotations and no clarification of how 'hunts' differ from 'saved searches', the definition is only minimally complete.
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 per the rubric the baseline is 4. There is nothing parameter-related the description could add, and the empty schema is consistent with the description.
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 gives a specific verb (List) and resource (locally saved hunts), so an agent knows exactly what the tool returns. It does not, however, distinguish itself from close siblings such as list_saved_searches or the hunt/run_hunt family, leaving the 'hunts vs searches' boundary implicit.
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?
Naming it a lister implies the usage context, and 'locally saved' hints that this reads persisted state rather than running a live search. There is no explicit when-to-use statement or exclusion versus list_saved_searches, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_searchesC
List all persisted searches.
| 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 full behavioral burden, yet it says nothing about read-only safety, result ordering, pagination, or authorization scope. Beyond confirming the operation is a listing, it discloses no 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?
A single short sentence with no filler and the key concept front-loaded. It is appropriately sized for a zero-parameter listing tool, though it borders on under-specification rather than tight editing.
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?
With 0 parameters and an output schema covering return values, the tool's complexity is low, so the minimal description is nearly sufficient. It still omits any hint of ordering, auth scope, or relation to the sibling saved-search tools, leaving a modest 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?
The tool takes zero parameters, so there is nothing for the description to clarify and the baseline of 4 applies. Schema coverage is 100% but empty, and the description correctly implies a no-argument call.
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?
"List all persisted searches" gives a clear verb and resource, so an agent knows the operation is a read of stored searches. However, "persisted" is essentially a paraphrase of "saved" in the name, and nothing distinguishes it from siblings like list_hunts or check_saved_search. It is minimally viable rather than specifically differentiated.
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 guidance on when to use this versus check_saved_search, list_hunts, or save_search/delete_saved_search. The agent must infer the retrieval role purely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_huntC
Run a previously saved hunt.
| Name | Required | Description | Default |
|---|---|---|---|
| name | 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 yet discloses almost nothing beyond the verb. It doesn't say whether running a hunt mutates state, triggers notifications, is long-running, or what happens if the named hunt doesn't exist.
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?
A single front-loaded sentence with no wasted words. It is efficient, though arguably terse to the point of under-specification rather than optimally concise.
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?
The output schema covers return values, so that need not be described. However, with zero annotations, an undocumented parameter, and no usage context, the description leaves an agent without enough information to invoke this confidently relative to its siblings.
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% and the single parameter 'name' is unexplained. The description implies 'name' identifies the saved hunt, but adds no format, matching rules, or case-sensitivity details to compensate for the undocumented 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?
The description states a specific verb+resource pair ("Run a previously saved hunt") that is distinguishable from siblings like save_hunt and list_hunts. It does not explicitly contrast itself with the bare 'hunt' tool or explain what a hunt is, but the purpose is immediately clear.
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 guidance, no prerequisites (e.g., the hunt must already exist), and no pointers to alternatives such as list_hunts to discover a name or save_hunt to create one first. The agent must infer the workflow entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_huntA
Save a reusable named hunt locally.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| searches | Yes | ||
| per_search_limit | 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 bears full responsibility for behavioral disclosure. It states 'locally', which hints at storage scope, but it doesn't disclose persistence behavior, whether saving overwrites existing hunts with the same name, or return/error behavior. An output schema exists, so return format is partly covered, but mutation semantics remain opaque.
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?
One short sentence with zero waste, front-loading the action and object. No filler or repetition.
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 mutation tool with 3 params, no annotations, and a 0% schema coverage, the description is minimally adequate but missing critical context: what a hunt is versus a search, overwrite behavior, and parameter meanings. The output schema covers return values, but the input and behavioral aspects are underspecified.
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%, and the description adds no parameter information. All three parameters (name, searches, per_search_limit) are undocumented beyond their titles. The description does not compensate for this gap, though the parameter names are partially self-explanatory.
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 clear verb+resource: 'Save a reusable named hunt locally.' The agent can distinguish this from sibling save_search (saves a search, not a hunt) at a high level. However, it does not clarify what a 'hunt' is or how it differs from a 'saved search' beyond the noun.
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 word 'reusable' implies the purpose (create a saved collection for future use), but the description provides no explicit when-to-use guidance or alternatives. With siblings like save_search and run_hunt, the agent must infer the relationship without help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| params | 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, and it discloses a genuinely non-obvious state trait: seen_ids starts empty, so the first check_saved_search backfills all current matches, plus the workaround to suppress it. It omits idempotency/overwrite behavior on duplicate names and any auth or rate-limit context.
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 purpose leads, followed by per-argument notes and the one non-obvious behavioral caveat. Every sentence carries information an agent needs; nothing is restated from the schema.
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 are covered elsewhere, and the description adds the creation-time semantics that matter for correct invocation. Only the duplicate-name/overwrite contract and prerequisite for the delegated 'params' shape are missing.
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 gives the name format ('trek-bike-antwerp'), states that params mirrors search_listings kwargs, and flags the required 'site' key. It still leaves the full param vocabulary to the agent's knowledge of search_listings rather than enumerating it.
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 ('Persist a search') and immediately names the sibling that consumes it ('re-run via check_saved_search'). An agent can distinguish this from search_listings (transient) and list_saved_searches without opening any schema.
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?
Clearly establishes the use case (persist for later re-running) and links the required params to search_listings, giving the agent a concrete pattern to follow. It does not state exclusions (e.g., when to prefer save_hunt instead) or whether an existing name errors versus overwrites.
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 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.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | marktplaats | |
| limit | No | ||
| query | No | ||
| offset | 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 | ||
| 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 reasonably well: it discloses defaults (limit 10, distance 1000), cross-parameter constraints (distance_km requires zip_code), pagination shape (next_offset) and the return dict contents. It omits anything about rate limits, error behavior, or result ordering guarantees, which keeps it out of the top band.
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 one-line summary followed by a tight, scannable Args list where each line maps to one parameter; for a 16-parameter tool this is appropriately sized. The 'Returns:' block lightly duplicates the existing output schema, but it is one sentence and does not bloat the definition.
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, and the description nonetheless summarizes it. Combined with full per-parameter documentation at zero schema coverage and explicit inter-parameter conditions, an agent has everything needed to call this 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 is the only source of parameter meaning, and it documents all 16 parameters: allowed site values, per-site zip formats ('1016LV' vs '2000'), the five condition enums, seller_type aliases (business/zakelijk, private/particulier), sort_by options, and limit bounds. This is exactly the compensation the low schema coverage demands.
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 ('Search for listings') plus the exact marketplaces (marktplaats.nl, 2dehands.be), which is more specific than a generic search tool. However it never distinguishes itself from sibling search-like tools such as hunt, save_search, or check_saved_search, so an agent must infer that this is the ad-hoc/one-shot search.
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?
Usage is implied through conditional notes, e.g. 'query: required if no category specified' and 'attribute_ids: use get_category_filters', which is genuinely useful routing. But there is no explicit when-to-use/when-not statement relative to hunt, save_search, or check_saved_search, so guidance is only partial.
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.
14 tool updates
v1.2.1- First observed
check_new_matches - First observed
check_saved_search - First observed
delete_saved_search - First observed
get_category_filters - First observed
get_listing_details - First observed
get_seller_info - First observed
hunt - First observed
list_categories - First observed
list_hunts - First observed
list_saved_searches - First observed
run_hunt - First observed
save_hunt - First observed
save_search - First observed
search_listings
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.
AI marketplace: search, buy, sell across Amazon, eBay, AliExpress. 13 tools.
Read-only product discovery, merchant trust, shipping and returns for SVV-Schatzoekers.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
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.5-
- FlicenseNot gradedqualityFmaintenanceEnables 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.8-
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to search and view advertisements on Marktplaats.nl with extensive filtering options.16MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to read-only access Catawiki auction marketplace data, including searching lots, inspecting items, browsing categories, and exploring auctions.MIT