Skip to main content
Glama
tudorgrigoriu90

sverige-begagnad-mcp

🇸🇪 Sverige Begagnad MCP

Find quality second-hand deals across Sweden — straight from your AI assistant.

An MCP server that lets Claude (or any MCP client) search Blocket, Tradera, Klaravik, and Vinted (plus optional local Facebook Marketplace) for used items worth buying, restoring, and reselling.

PyPI MCP Registry License: MIT Python 3.10+ Tradera API v4 Blocket


💬 What you can ask Claude

Once connected, just talk to it:

🪑 "Find String shelves (String hylla) near Växjö under 1000 SEK."

🛠️ "Search Blocket and Tradera for Festool or Makita tools I could flip for profit."

🔊 "What Bang & Olufsen speakers are on Tradera between 500 and 3000 SEK?"

🚲 "List Blocket categories, then look for quality bikes (Kronan, Crescent) in Skåne."

📈 "Do this week's sourcing sweep for Scandinavian design in Kronoberg and neighbouring counties, ranked by estimated profit."

Claude picks the right tools, applies your filters, and hands back titles, prices, locations, links, and images — from both marketplaces in one go.

Related MCP server: finn-mcp

✨ Features

🔎 Four marketplaces

Blocket + Tradera + Klaravik + Vinted, searched together or separately, normalized into one shape

🎯 Rich filters

Price min/max, category, county (Tradera) · region + category (Blocket)

📍 Location-aware

Every Blocket result carries coordinates + distance for precise radius filtering

🌍 General by default

Searches all of Sweden; scope it to your area via config or per-search

🧭 Discovery tools

List categories, regions, and counties so the agent filters intelligently

🧩 Easy install

One-command Claude Code plugin, uvx, or from source — each user brings their own keys

Tested live

Every source verified end-to-end against the real APIs

📊 Source status

Source

Method

Stability

Tradera

Official REST API (v4)

🟢 Solid — tested live; requires free registration

Blocket

Community package (blocket-api)

🟡 Semi-stable, unofficial — tested live

Klaravik

Internal JSON endpoint

🟡 Unofficial — tested live; auction current-bid prices

Vinted

Internal API (bot-protected)

🟠 Unofficial, most fragile — works best from a residential IP

Facebook Marketplace

Disabled by default

🔴 Risky, local-only — see facebook_client.py


🔑 Get Tradera credentials (required for all install methods)

  1. Register (free) at https://api.tradera.com/register.

  2. Accept the Terms of Use + Logo Terms of Use.

  3. Create an application and copy the numeric App ID and the App Key (GUID secret). You'll supply these as TRADERA_APP_ID / TRADERA_APP_KEY.

Blocket needs no credentials. Facebook Marketplace is off by default.

📦 Installation

Every user runs their own copy with their own Tradera keys — pick whichever method fits your client. uvx-based methods need uv installed (curl -LsSf https://astral.sh/uv/install.sh | sh, or winget install astral-sh.uv on Windows) — no cloning or virtualenv needed.

Option 1 — Claude Code plugin (easiest)

claude plugin marketplace add tudorgrigoriu90/sverige-begagnad-mcp
claude plugin install sverige-begagnad@sverige-begagnad-marketplace

Then export your keys (the plugin passes them through to the server):

export TRADERA_APP_ID=...      # Windows PowerShell: $env:TRADERA_APP_ID="..."
export TRADERA_APP_KEY=...
export BLOCKET_LOCATIONS=      # optional; empty = all of Sweden

Restart Claude Code — you'll have search_blocket, search_tradera, search_all, and more. The plugin runs the server via uvx straight from GitHub.

Option 2 — uvx (Claude Desktop or any MCP client)

Add to your client's MCP config (Claude Desktop: Settings → Developer → Edit Config):

{
  "mcpServers": {
    "sverige-begagnad": {
      "command": "uvx",
      "args": ["sverige-begagnad-mcp"],
      "env": {
        "TRADERA_APP_ID": "...",
        "TRADERA_APP_KEY": "...",
        "BLOCKET_LOCATIONS": ""
      }
    }
  }
}

uvx fetches the published package from PyPI on first run and caches it. Restart the client.

Option 3 — From source (development)

git clone https://github.com/tudorgrigoriu90/sverige-begagnad-mcp
cd sverige-begagnad-mcp
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e .
cp .env.example .env        # then fill in your keys

Point your client at the venv's sverige-begagnad-mcp command (or python -m sverige_begagnad_mcp.server) with cwd set to the repo.

From a source checkout with keys set (in .env or the environment):

# Tradera — official REST API v4 (https://api.tradera.com/v4, header auth)
python -m sverige_begagnad_mcp.tradera_client

# Blocket — unofficial community API
python -c "import asyncio; from sverige_begagnad_mcp.blocket_client import search_blocket; print(asyncio.run(search_blocket('String hylla')))"

Both are tested live. If Tradera's shape ever drifts, the OpenAPI spec is at https://api.tradera.com/openapi.json.


🧰 Tools

Tool

Purpose

search_blocket(query, category?, locations?, max_pages?)

Search Blocket

list_blocket_categories()

Valid category names

list_blocket_locations()

Valid region (län) names

search_tradera(query, category_id?, price_min?, price_max?, county_id?)

Search Tradera

list_tradera_categories()

Category tree → category_id

list_tradera_counties()

County ids for the optional county_id filter

search_klaravik(query)

Search Klaravik auctions (current-bid prices)

search_vinted(query, price_min?, price_max?)

Search Vinted fashion listings

search_facebook_marketplace(...)

Disabled by default (local-only)

search_all(query, blocket_category?, blocket_locations?, tradera_category_id?, price_min?, price_max?)

Blocket + Tradera + Klaravik + Vinted in one call

health_check()

Ping every source and report which are still fetching data

📍 Geographic scope

Searches default to all of Sweden. Three ways to set the area, in order of precedence:

  1. Per-search — pass locations to search_blocket (or blocket_locations to search_all), e.g. ["KRONOBERG", "KALMAR"]. Use list_blocket_locations() for valid names.

  2. A personal default — set BLOCKET_LOCATIONS in .env to a comma-separated list of region names.

  3. Nothing set — all of Sweden.

Blocket's filter is regional (län), not a precise km radius. For a tight "within X min drive" filter, let Claude do the final check per listing — each result includes the ad's text location plus coordinates (lat/lon) and Blocket's own distance. Tradera is national with shipping, so it has no radius concept (there's an optional county_id filter, rarely needed).

Personal scope lives only in .env (gitignored — not a shipped default):

BLOCKET_LOCATIONS=KRONOBERG,KALMAR,JONKOPING,HALLAND,SKANE

Paste this as your instructions to turn the tools into a profit-ranked weekly sweep. It runs many targeted Swedish searches, filters by radius/quality, estimates profit, and returns a ranked shortlist. Tune the brands, region, and thresholds to taste.

ROLE: You are a sourcing assistant for a personal, quality-focused loppis (flip).
Each week, search Blocket and Tradera for second-hand items to buy, minimally
restore, and resell at a profit.

METHOD: Search with SWEDISH terms. Run MANY targeted searches — by BRAND and by
CATEGORY — across both sources; deduplicate. Prices are in SEK.

AREA: within ~35 km straight-line of Växjö (56.88, 14.81) or Älmhult (56.55, 14.14),
computed from each Blocket result's `coordinates`. Tradera ships nationally, so
include shippable Tradera items too.

QUALITY: recognized brand or top craftsmanship (String, Artek, Fritz Hansen, Louis
Poulsen, Iittala, Orrefors, Bang & Olufsen, Braun, Marantz, Bahco, Hilti, Festool,
Makita, Kronan, Crescent…); "bra skick"/"nyskick" or minor cosmetic wear; asking
price clearly below market; only minimal restoration (clean, polish, light sand,
small off-the-shelf parts).

PROFIT: estimate resale value (use web search for comparables if available — do NOT
invent sold prices). Net = resale − (purchase + restoration + pickup/courier), with
stated assumptions (~80 SEK pickup fuel, ~70 SEK courier, 0–150 SEK materials).
Include only items with estimated net profit ≥ 300 SEK. Note that Tradera auction
prices may rise before close.

OUTPUT: ranked by net profit descending, max 15. For each: title + link + location
(distance from Växjö or "ships nationally"), asking vs. estimated market price, net
profit with assumptions, 2–3 restoration steps, and a risk note. End with a 2–3
sentence read on the week's trends. Don't pad with weak candidates.

🚫 Facebook Marketplace — why it's disabled

There is no public API for Facebook Marketplace. The only known methods (session cookies or headless-browser scraping) explicitly violate Facebook's Terms of Service. The src/sverige_begagnad_mcp/facebook_client.py module is intentionally left as a stub, with an explanation of how you could implement it yourself, at your own risk.

🛠️ Maintenance & publishing

  • If a source breaks: Blocket → check https://pypi.org/project/blocket-api/ for a newer version; Tradera → the OpenAPI spec at https://api.tradera.com/openapi.json.

  • PyPI (enables the short uvx sverige-begagnad-mcp): python -m build then twine upload dist/*. Bump version in pyproject.toml and src/sverige_begagnad_mcp/__init__.py first.

  • Plugin marketplace: the .claude-plugin/marketplace.json + plugins/ dirs make this repo itself the marketplace — no extra hosting.

  • MCP Registry: server.json is ready; publish with the mcp-publisher CLI after the PyPI release (see the Registry publishing guide).

📄 License

MIT — each user runs their own copy with their own credentials. Note that Blocket has no official API; this uses an unofficial community package, so treat the Blocket half accordingly.

Available Tools

10 tools
list_blocket_categoriesList Blocket categoriesA

List valid category names to pass into search_blocket()'s category argument.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden of behavioral disclosure. It clearly states that this is a read-only operation (list), which is accurate and sufficient for a tool with no side effects. It doesn't mention pagination or return format, but those are not critical for a simple category-listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single, focused sentence that says exactly what is needed and nothing more. It is front-loaded with the action and resource, making it highly scannable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, output schema present), the description is fully complete. It explains the purpose and usage context, and the output schema handles return-value details. No additional information is needed for an agent to correctly select and invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description has no parameter semantics to add. Per the baseline for no params, this score is appropriate. The schema coverage is vacuously 100%, and there is nothing to elaborate on.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a clear resource ('valid category names') while also specifying the intended consumer (search_blocket's `category` argument). This distinguishes it from sibling tools like list_blocket_locations or list_tradera_categories, making the purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: to obtain category names for passing into search_blocket(). This is a clear usage directive that naturally differentiates it from sibling list tools for other resources or markets. Even without explicit alternatives, the intended context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_blocket_locationsList Blocket regionsA

List valid region (län) names to pass into search_blocket()'s locations argument.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It implies a read-only 'list' operation and notes the output is 'valid' names, which adds some trustworthiness. But it does not disclose any potential limitations, error conditions, or additional behavioral details beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the verb 'List' and delivers all necessary information in a compact form. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with an output schema, the description is complete: it states the purpose, the target use (search_blocket's locations), and the scope (valid region names). No additional context is needed to use this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds semantic value by explaining the output is intended for search_blocket's `locations` parameter, which is useful context beyond the empty input schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists valid region (län) names, explicitly tying them to the `locations` argument of search_blocket(). This distinguishes it from sibling tools like list_blocket_categories and search_tradera.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: these names are to be passed into search_blocket()'s `locations` argument, indicating when to use the tool. However, it does not explicitly mention when not to use it or name alternatives, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tradera_categoriesList Tradera categoriesA

Fetch Tradera's category tree, to find category_id values for search_tradera().

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Fetch' implies a read-only operation, but the description does not explicitly state that it has no side effects, nor does it mention any rate limits or output shape. The behavior is straightforward for a simple listing tool, but the description adds minimal transparency beyond the verb.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that delivers the essential information: what the tool fetches and why. Every word earns its place, and it is front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and the output schema is available (so return values need not be described), the description provides complete context. It states the sole purpose (fetch category tree for IDs) and links it to the dependent tool, search_tradera(). No further information is needed for an agent to use this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, and the input schema is empty, so there are no parameter semantics to explain. The description correctly focuses on the output purpose (category_id values). With zero parameters, the baseline is 4, and the description adds sufficient context about why the tree is fetched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Fetch' and clearly identifies the resource as 'Tradera's category tree'. It further explains the purpose: 'to find category_id values for search_tradera()', which distinguishes it from sibling tools like list_blocket_categories or list_tradera_counties.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool: before calling search_tradera() to obtain category_id values. It does not explicitly name alternatives or provide when-not guidance, but the connection to search_tradera() is a strong usage signal in the context of sibling search tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tradera_countiesList Tradera countiesA

Fetch Tradera's county list (id -> name) for search_tradera()'s optional county_id filter. Tradera is national with shipping, so this is rarely needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It indicates a read operation via 'Fetch' and explains the id->name mapping, but does not explicitly state that it is safe/read-only or describe response behavior beyond what the output schema likely covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that leads with the action and resource, then provides purpose and context. Every word is purposeful; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, output schema exists), the description is fully complete: purpose, use case, and operational context are all covered in one concise sentence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds useful context about the output shape (id -> name), which compensates for the absence of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Fetch Tradera's county list (id -> name)' and explicitly ties it to search_tradera()'s optional county_id filter, distinguishing it from sibling list tools like list_tradera_categories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case ('for search_tradera()'s optional county_id filter') and adds that it is 'rarely needed' because Tradera is national with shipping, giving practical guidance on when to use it without explicitly excluding alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_allSearch all sourcesA

Search Blocket + Tradera + Klaravik + Vinted (+ Facebook Marketplace if enabled) in one call and return combined, normalized results. Use this for the weekly sourcing sweep instead of calling each source separately.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
price_maxNo
price_minNo
blocket_categoryNo
blocket_locationsNo
tradera_category_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full behavioral burden. It discloses that results are combined and normalized, and notes Facebook Marketplace is conditional ('if enabled'). However, it does not mention side effects, rate limits, or whether it is strictly read-only, leaving some gaps for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loads the action, and contains no unnecessary words. Every sentence adds value: the first states what it does, the second states when to use it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values are covered. However, the tool's complexity (aggregating multiple sources with source-specific parameters) is not fully addressed. The description mentions 'combined, normalized results' but doesn't explain how filters are applied per source, which is important for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description does not compensate by explaining any of the six parameters. It doesn't clarify how filters like price_max or source-specific fields (blocket_category, tradera_category_id) apply across the aggregated sources. The agent is left without guidance beyond parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches multiple named sources (Blocket, Tradera, Klaravik, Vinted, and optionally Facebook Marketplace) in one call and returns combined, normalized results. This distinguishes it from sibling tools that each search a single source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends using this tool for the 'weekly sourcing sweep' and mentions it as an alternative to calling each source separately. This gives clear usage context, though it does not explicitly state when NOT to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_blocketSearch BlocketA

Search Blocket.se for second-hand listings. The location filter is REGIONAL (län), not a precise km radius. Pass locations (region names from list_blocket_locations()) to narrow the search; if omitted it uses the BLOCKET_LOCATIONS env default, or all of Sweden if that is unset. Each result includes the ad's text location plus coordinates/distance so you can apply a precise 'within X min drive' filter yourself. Use list_blocket_categories() first if you want to filter by category.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
categoryNo
locationsNo
max_pagesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full responsibility for behavioral disclosure. It honestly reveals a non-obvious limitation: the location filter is by region (län) rather than a precise km radius, and it states what each result contains (coordinates/distance) so the agent can apply its own precise filtering. This is high-value transparency beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each adding distinct value: purpose, location caveat, parameter guidance, and category hint. No fluff, front-loaded with the core action, and well-structured for quick scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the most important behavioral nuances (regional filter, fallback behavior, result contents, category helper), and an output schema exists for return values. However, it does not mention page size or pagination behavior for `max_pages`, and does not explicitly note that results may need dealer filtering, but overall it is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides no descriptions for any parameters (0% coverage). The description adds meaning for `locations` (regional, names from list_blocket_locations) and `category` (use list_blocket_categories), but does not explain `query` (obvious) or `max_pages` (defaults to 2). Since it covers only half the parameters and leaves the numeric control unexplained, it is useful but incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Search Blocket.se for second-hand listings' with a specific verb and resource, clearly differentiating from sibling tools like search_tradera. It also adds the key scoping detail that the location filter is regional, not a precise radius, which helps distinguish its behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance to call list_blocket_categories() and list_blocket_locations() for category/location filtering, and explains the fallback behavior when locations are omitted. It does not explicitly contrast with other search tools (e.g., search_tradera), but the context is clear that this is for Blocket specifically.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_facebook_marketplaceSearch Facebook MarketplaceA

Search Facebook Marketplace. DISABLED BY DEFAULT — this requires an unofficial method that violates Facebook's Terms of Service. Returns an explanatory error unless ENABLE_FACEBOOK_SEARCH=1 is set and the stub in src/facebook_client.py has been implemented. See its docstring.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
locationNo
radius_kmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully explains the behavioral traits: it's disabled by default, violates Facebook's ToS, returns an error unless configured, and points to the stub's docstring for further details. This is exemplary transparency, going far beyond a simple 'searches Facebook Marketplace'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using three sentences to convey the core purpose, the disabled state, and the required setup. Every sentence adds value, and the warning is front-loaded. There is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers the tool's operational state and dependencies, which is useful for understanding its current limitations. However, it omits parameter semantics entirely, which is essential for correct invocation. Given that the output schema exists, return values are not a gap, but the parameter explanations are missing, making the description incomplete for actual use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 3 parameters (query, location, radius_km) with 0% schema description coverage. The description does not mention any of these parameters or their meanings, leaving the agent entirely to guess from parameter names. No compensation is provided for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action as 'Search Facebook Marketplace', which is a specific verb+resource. However, it doesn't distinguish this from sibling search tools like search_vinted or search_tradera, relying on the name alone for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage context by warning that the tool is 'DISABLED BY DEFAULT', requires setting ENABLE_FACEBOOK_SEARCH=1, and implementing a stub. It also states that it returns an explanatory error otherwise. While it doesn't list alternative tools, the warnings clearly indicate when it cannot be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_klaravikSearch KlaravikA

Search Klaravik.se, a Swedish online auction house — strong for undervalued tools, machinery, and house-clearance goods. Prices are the current bid (SEK) and can rise before the auction ends. Swedish search terms work best.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does a good job by noting that prices are current bids and can rise before the auction ends, which is a key behavioral trait. It also discloses that Swedish terms work best, adding useful insight into expected interaction. It doesn't cover every aspect, but it provides meaningful context beyond a generic 'search'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly three sentences, each serving a distinct purpose: identifying the tool, describing the pricing behavior, and providing a language tip. It is front-loaded with the core verb and resource, with no redundant or filler words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple search tool with one parameter and an output schema present, the description covers the essential context: what the tool searches, when it is most useful, how prices behave, and a language tip. It lacks an explicit statement about read-only nature, but that is implied by 'search'. Overall it is nearly complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one parameter, 'query', with no description. The description adds the guidance that 'Swedish search terms work best', which directly informs how to use the query parameter. However, this is a single tip and does not fully compensate for the total lack of schema-level description, so a score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Search' and the specific resource 'Klaravik.se', a Swedish online auction house. It also distinguishes this tool from other marketplace searches by noting it is an auction house, making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: 'strong for undervalued tools, machinery, and house-clearance goods.' It also offers a practical tip that Swedish search terms work best. However, it does not explicitly mention alternatives or exclusions, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_traderaSearch TraderaA

Search Tradera.com (official API) for second-hand listings/auctions. Requires TRADERA_APP_ID and TRADERA_APP_KEY to be configured — register at https://api.tradera.com/ if you haven't.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
county_idNo
price_maxNo
price_minNo
category_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description discloses a key prerequisite (TRADERA_APP_ID and TRADERA_APP_KEY) and registration link, which is valuable. However, it does not describe return format, rate limits, safety, or side effects. Since it's a read-only search, some transparency is implicit, but the description could do more.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose, and includes necessary prerequisite info. Every word earns its place, and there is no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers authentication prerequisites and identifies the resource, but it lacks guidance on parameter usage, search behavior, or integration with list_* sibling tools for category/county IDs. With an output schema present, return values are not required, but the description could still be richer for a 5-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 provides no explanations for the 5 parameters, leaving optional filters like county_id and category_id ambiguous. The only implied param is 'query' from the tool's purpose. It does not point to sibling tools for valid ID lists, which would be helpful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches Tradera.com for second-hand listings/auctions, using a specific verb and resource. It distinguishes itself from sibling tools by naming the platform explicitly (e.g., search_blocket, search_vinted). The mention of 'official API' adds clarification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context implies this tool is for searching Tradera, but it does not explicitly discuss when to use it vs alternatives. No exclusions or alternative tool references are provided, which would have elevated the score. The prerequisite mention is useful but not a usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_vintedSearch VintedB

Search Vinted.se, a second-hand fashion marketplace — good for genuine leather/wool and branded clothing. National (ships anywhere). Unofficial and the most fragile source (bot-protected); may occasionally be rate-limited.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
price_maxNo
price_minNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It explicitly warns that the source is unofficial, bot-protected, fragile, and rate-limited, which is valuable transparency. It does not cover response format but that is handled by the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded purpose, no wasted words. Each clause adds distinct value: what it is, what it's good for, shipping scope, and reliability caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the domain, shipping, and reliability, and an output schema exists, so return values are covered. However, it fails to mention the price-filter options or any query construction details, leaving a gap in the tool's overall usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

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 provides no explanation for the query, price_min, or price_max parameters, leaving the agent without meaningful guidance beyond the property names. This is a complete gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches Vinted.se, a second-hand fashion marketplace, and notes its strengths (leather/wool, branded clothing). It distinguishes from siblings by explicitly naming the source, but does not directly compare to other search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context (good for specific items, ships anywhere, unofficial and fragile) but does not explicitly state when to use this versus alternative marketplace search tools. Exclusionary guidance is absent.

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.

  1. 10 tool updatesv0.2.0
    • First observedlist_blocket_categories
    • First observedlist_blocket_locations
    • First observedlist_tradera_categories
    • First observedlist_tradera_counties
    • First observedsearch_all
    • First observedsearch_blocket
    • First observedsearch_facebook_marketplace
    • First observedsearch_klaravik
    • First observedsearch_tradera
    • First observedsearch_vinted

TDQS

A4.2/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct marketplace or supporting parameter list. The search functions are clearly separated by platform (Blocket, Tradera, Facebook, Klaravik, Vinted), and the list_* helpers are unambiguous. search_all is unique as an aggregator, so no two tools serve the same purpose.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: list_<marketplace>_<entity> for parameter enumeration and search_<marketplace> for queries. The naming is uniformly snake_case and predictable across the entire set.

Tool Count5/5

10 tools is well within the ideal 3–15 range for a multi-source search server. Each tool has a distinct role; the list_* helpers support the search functions, and search_all adds value as a combined query. No redundant or excessive tools exist.

Completeness5/5

The server covers all major Swedish second-hand marketplaces (Blocket, Tradera, Klaravik, Vinted, plus optional Facebook) with search entry points. For each marketplace, the essential search capability is present, and helper functions for categories/locations are included where needed. The combined search_all addresses cross-platform aggregation, leaving no obvious workflow gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that provides access to finn.no, Norway's largest online classifieds marketplace, enabling searches and listing retrieval across used goods, real estate, cars, and jobs.
    2
    6
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    MCP server for finding, comparing, and ranking the cheapest real offers across eBay, Amazon, Craigslist, OfferUp, and Google Shopping, with tax estimation and exact-model filtering.
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for OLX marketplace. Enables AI assistants to search listings, get offer details, track prices over time, and compare offers across OLX Poland and other supported countries.
    44 npm
    4
    MIT