troedler

troedler

Enables searching multiple second-hand marketplaces simultaneously from a local command line or AI assistant, providing unified results with pricing insights while respecting each source's terms and robots.txt.

Category
访问服务器

README

troedler

Search several second-hand marketplaces with one query — from your own machine, at your own pace, under your own name.

A trödler works the markets, sifting other people's goods for the one thing worth having. This does that across eBay, classified-ad sites, public-authority auctions and collector marketplaces at once, and tells you where a thing is cheap and where it is not.

It is a command-line tool, a native GNOME/Adwaita app and an MCP server, so you can use it from a shell, from a window, or from an AI assistant. All three render the same results through the same kernel. It runs on GJS via gjsify — TypeScript, no Node runtime required.

$ troedler search Bandsäge --max-price 400 --seller private --explain

eBay (18)
  1. Metabo BAS 318 Bandsäge — gebraucht, funktionsfähig
     289,00 € inkl. Versand  Gebraucht — sehr gut · privat · Versand · 21762 Otterndorf · vor 2 d · unter dem Feld
     https://www.ebay.de/itm/…
     Preisband über 18 Forderungspreise inkl. Versand: 95,00 € … 240,00 € — 315,00 € — 420,00 € … 890,00 €

Zoll-Auktion (5)
  1. 1 Bandsäge Metabo, gebraucht
     150,00 € Auktion  Zustand unbekannt · gewerblich · Abholung · 60326 Frankfurt am Main · endet in 1 h · 17 Gebot(e)
     https://www.zoll-auktion.de/auktion/produkt/…
     Preisband über 5 aktuelle Gebote: 13,00 € … 41,00 € — 65,00 € — 150,00 € … 310,00 €

eBay: 18 Treffer
    Filter beim Anbieter: maxPrice, sellerType
    Filter hier nachgezogen: —
Kleinanzeigen: übersprungen — Nutzungsbedingungen untersagen automatisierten Abruf, siehe docs/quellen/kleinanzeigen.de.md
Zoll-Auktion: 5 Treffer (7 weitere passten und fielen dem Limit zum Opfer)

One band per source, and it names what its numbers are. A current auction bid, a seller's asking price and "cheapest of 191 copies worldwide" are three different kinds of number, and a single band across them computes exact quartiles over nonsense.

What it does

  • One query, every marketplace. Results stay grouped by source, so you can see that a thing costs 40 € on one and 120 € on another — which is the answer you actually wanted.
  • The same thing, side by side. --compare groups the results by product across sources, over the barcode where there is one. A group whose rows one source keeps apart — one barcode, three pressings — is shown as such and gets no single price, because it does not have one.
  • Is this a good price? A median and a quartile band over what is currently on offer, and a coarse verdict per listing. One band per source, over one kind of number, and it says what it left out. It describes the field in front of you; it does not appraise.
  • One offer, read-only. troedler show <quelle>:<id> fetches a single listing in full without touching the local store.
  • Saved searches with alerts. troedler watch run reports only what is new since last time.
  • Watch single offers. Price changes and "it's gone" for the things you are still thinking about.
  • An MCP server, so an assistant can search on your behalf — and can see why a source returned nothing, instead of concluding the item does not exist.

What it will not do

This matters more than the feature list, because it shapes everything else.

troedler runs locally, for one person, and never as a service. There is no hosted crawler, no shared index, no server mode. It reads only what a site's robots.txt permits, at one request at a time with a pause between them, under an honest user agent that says who it is and where to complain. It never logs in, never spoofs a browser, never works around a captcha or a bot wall, and never retries a refusal. When a marketplace says no, that is the answer.

Marketplaces whose terms forbid automated access ship switched off. troedler still offers them — it just will not fetch one for you until you say so: providers enable prints the operator's clause in full and refuses without --acknowledge.

Who carries that is you. troedler is a non-commercial tool that runs on your machine, under your address, for your own search. The terms of a service bind the person using it, so switching a source on means requesting it in your own name and answering for it yourself. The software neither makes that call nor hides what it is: it ships the source off, quotes the sentence you would be going against, records the date you agreed, and then stays out of the way. Even switched on, it keeps every other limit — robots.txt, the pace, the honest user agent, no login, no circumvention.

Nothing about a seller is stored — no names, no ids, no profiles. Phone numbers and e-mail addresses are stripped from listing text while parsing. Images are linked, never downloaded.

Sources

Every source has a record under docs/quellen/ with its robots.txt findings, the relevant terms clause, and the date a human last checked. troedler terms prints the summary and troedler robots <url> answers whether troedler would fetch a given URL and what decides it — the opt-out list, the switch, robots.txt, or, on an official API, the operator's licence. It reports the program that runs, so it makes exactly the requests a real search would make and no others.

Source Access Default Notes
eBay (DE) official Browse API on Free developer keys. Listing data cached ≤6 h by licence.
Discogs official API on Works without a token (25 requests/min; 60 with one).
Booklooker official API on Free API key.
Zoll-Auktion, Justiz-Auktion public HTML on German public-authority auctions; robots.txt fully open.
Quoka public HTML on robots.txt open, terms silent on crawling.
markt.de public HTML off Open robots.txt, but the terms forbid automated access.
kleinanzeigen.de public HTML off Terms forbid automated access; robots.txt also blocks the price, radius, sort and seller filters.

Getting started

gjsify install                              # never npm install — see AGENTS.md
gjsify workspace troedler-cli build         # the CLI and the app
gjsify run app/dist/troedler.gjs.mjs check  # what is configured, what is not

Credentials go in .env (copy .env.example) or your shell. Every one is optional: a source without its key reports itself unconfigured and is skipped — it never fails a search quietly.

The window:

gjsify workspace troedler-cli start:app

Two screens. Suche lays out one panel per source before asking any of them and settles each in place, so a result never appears without the account of where it came from — and a source that was skipped, refused or broke never looks like a source with nothing to offer. Quellen lists every source with its switch; turning on one whose terms forbid automated access puts the operator's clause on screen and asks, because that is a decision for a person and the date lands in the config.

It is a separate bundle from the CLI on purpose: troedler search in a terminal has no business loading GTK.

As an MCP server, point your client at:

{
  "command": "…/node_modules/.bin/gjsify",
  "args": ["run", "…/app/dist/troedler.gjs.mjs", "mcp"],
  "cwd": "…/app"
}

Tools are read-only unless TROEDLER_MCP_ALLOW_WRITE=1 is set, and the server enforces that by dropping any tool that does not declare itself read-only.

Where things are kept

Nothing is ever written inside this repository.

$XDG_CONFIG_HOME/troedler/config.json which sources are on, your defaults
$XDG_DATA_HOME/troedler/index.db saved searches, seen offers, price history
$XDG_CACHE_HOME/troedler/ HTTP cache, TTL-bound per source

troedler cache purge clears the local record; troedler config path prints where everything is.

Contributing, and objecting

If you operate one of these sites and would rather troedler did not read it, open an issue or write to the address in the user agent — the host goes on the opt-out list and out of the next release. No argument, no delay.

Licence: MIT. Part of the werkstatt workspace, alongside postbote and bauplaner.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选