sverige-begagnad-mcp
MCP server that searches Swedish second-hand marketplaces (Blocket and Tradera) for items, with optional Facebook Marketplace support, tailored for the Växjö/Älmhult area.
README
<!-- mcp-name: io.github.tudorgrigoriu90/sverige-begagnad-mcp -->
<div align="center">
🇸🇪 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.
</div>
💬 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.
✨ 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)
- Register (free) at https://api.tradera.com/register.
- Accept the Terms of Use + Logo Terms of Use.
- 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.
<details> <summary>✅ <b>Verify it works (optional)</b></summary>
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.
</details>
🧰 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 |
📍 Geographic scope
Searches default to all of Sweden. Three ways to set the area, in order of precedence:
- Per-search — pass
locationstosearch_blocket(orblocket_locationstosearch_all), e.g.["KRONOBERG", "KALMAR"]. Uselist_blocket_locations()for valid names. - A personal default — set
BLOCKET_LOCATIONSin.envto a comma-separated list of region names. - 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).
<details> <summary>🗺️ <b>Example: my own Växjö / Älmhult setup</b></summary>
Personal scope lives only in .env (gitignored — not a shipped default):
BLOCKET_LOCATIONS=KRONOBERG,KALMAR,JONKOPING,HALLAND,SKANE
</details>
<details> <summary>🤖 <b>Power user: a full weekly "sourcing agent" prompt</b></summary>
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.
</details>
🚫 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
<details> <summary>Maintainer notes</summary>
- 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 buildthentwine upload dist/*. Bumpversioninpyproject.tomlandsrc/sverige_begagnad_mcp/__init__.pyfirst. - Plugin marketplace: the
.claude-plugin/marketplace.json+plugins/dirs make this repo itself the marketplace — no extra hosting. - MCP Registry:
server.jsonis ready; publish with themcp-publisherCLI after the PyPI release (see the Registry publishing guide). </details>
📄 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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。