Read & analyze any kleinanzeigen.de listing from any AI system — MCP server, function-calling schemas, Claude skill & CLI. Dealer detection, damage flags, view counts, price tracking. Zero dependencies.
Server exposes 5 domain-specific tools for analyzing German classifieds listings. Tool naming is clear and action-oriented (read_, compare_, track_). Descriptions are present and reasonably detailed (90-150 chars each), explaining WHAT the tool does and WHEN to use it. However, input schemas are minimal, most tools accept only a single 'url' string parameter with no enum constraints, format validation, or sophisticated schema structure. Output schemas are completely undocumented: the code calls helper functions but does not explicitly document the returned JSON structure (e.g., what fields 'flags', 'rating', 'status' contain; whether results are paginated). Error handling exists but is rudimentary, errors return {'error': <string>, 'url': url} with no recovery guidance or error classification. The read_listing and compare_listings tools return complex objects that would benefit from explicit schema documentation to guide LLM parsing. Overall, the tools solve a real domain problem well, but lack the schema rigor and output documentation expected in production tools.
Compare two or more kleinanzeigen.de listings side by side and detect whether they are likely the same item posted twice. Pass a list of listing URLs.
Get the public view counter (numVisits) of a listing. Many views + an old posting date usually means the item is overpriced or stale — negotiation leverage.
Analyze a single kleinanzeigen.de listing. Returns structured data: title, price, location, category, all attributes, seller type (private/dealer), red flags, a 1-5 rating, status (active/reserved/sold), price reduction, and image URLs. Use this whenever a user shares a kleinanzeigen.de/s-anzeige/... link.
List the seller's other active listings (works for private sellers too) — useful to spot undeclared dealers and to gather local price comparisons.
Record the current price of a listing into a local history store and return the full price series over time. Call repeatedly (e.g. daily) to build a real price curve that Kleinanzeigen itself does not expose.
Output schemas not documented. Tools return complex objects (e.g., read_listing returns {title, price, location, flags[], rating, status, price_reduction, seller_other_ads, images}) but the code does not define or expose these schemas. LLMs cannot plan downstream operations without knowing what fields exist and their types.
Input schemas are minimal and lack validation constraints. All tools accept a bare 'url' string parameter with no format validation (e.g., regex pattern to enforce kleinanzeigen.de/s-anzeige/... URLs), no enum constraints for multi-option parameters, and no explicit min/max for array sizes in compare_listings.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Error handling is generic and does not guide LLM recovery. Errors return {'error': <string>} with no classification (retryable vs. user-fixable vs. fatal). No actionable recovery hints (e.g., 'Invalid URL. Must be a kleinanzeigen.de/s-anzeige/ link.').
compare_listings and track_price lack parameter descriptions. The 'urls' array in compare_listings has no description explaining what happens if fewer than 2 URLs are passed. The tool succeeds silently if there are no duplicates to compare, but this edge case is not documented.
No pagination or result limiting in seller_other_listings. The code caps results at [:20] in the implementation but does not expose this limit in the tool description or schema. Large result sets risk context window exhaustion.
compare_listings returns a 'duplicate_check' boolean only if both items parse successfully. The schema does not document this conditional behavior, LLMs may expect the field to always be present.