{"server":"io.github.ValmoDev/joomil","count":5,"tools":[{"name":"get_cantons","title":null,"description":"List the Swiss cantons supported by Joomil's `canton` filter. Returns the exact `name` value to pass to search_classifieds, plus a readable French label. Call this before filtering by canton — the API values are non-obvious (e.g. 'Bern' not 'Berne', 'Geneve' not 'Genève' or 'Geneva').","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"output_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["cantons","total"],"properties":{"total":{"type":"number"},"cantons":{"type":"array","items":{"type":"object","required":["name","label_fr","code","region"],"properties":{"code":{"type":["string","null"]},"name":{"type":"string"},"region":{"type":"string"},"label_fr":{"type":"string"}},"additionalProperties":false}}},"additionalProperties":false},"annotations":{"title":"Get Cantons","readOnlyHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:55:26.711Z"},{"name":"get_categories","title":null,"description":"List active categories of the Joomil.ch marketplace. Returns a flat list with parent_id for hierarchy reconstruction. Omit parent_id for all categories, use parent_id=0 for root categories only, or pass a specific ID to get direct children of that category.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"parent_id":{"type":"integer","minimum":0,"description":"Filter to direct children of this category ID. Omit for all categories. Use 0 for root categories only."}},"additionalProperties":false},"output_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["categories","total"],"properties":{"total":{"type":"number"},"categories":{"type":"array","items":{"type":"object","required":["id","name","url","parent_id"],"properties":{"id":{"type":"number"},"url":{"type":"string"},"name":{"type":"string"},"ad_count":{"type":"number"},"allow_ads":{"type":"boolean"},"parent_id":{"type":"number"}},"additionalProperties":true}}},"additionalProperties":false},"annotations":{"title":"Get Categories","readOnlyHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:55:26.711Z"},{"name":"get_classified","title":null,"description":"Get full details of a single classified ad on Joomil.ch by its numeric ID. Returns complete description, all images URLs, category breadcrumb (full_path), vendor info (name, certified status, pro company), expiry date and boost level. Use search_classifieds first to find relevant listing IDs.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"integer","description":"Numeric listing ID — visible in the URL and in search_classifieds results","exclusiveMinimum":0}},"additionalProperties":false},"output_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","title","description","price","location","category","url","created_at","has_picture","seller","images","expires_at","boost"],"properties":{"id":{"type":"number"},"url":{"type":"string"},"boost":{"type":["number","null"]},"price":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":["number","null"]},"currency":{"type":"string","const":"CHF"}},"additionalProperties":false},"title":{"type":"string"},"images":{"type":"array","items":{"type":"string"}},"seller":{"type":"object","required":["name","certified","type","company"],"properties":{"name":{"type":["string","null"]},"type":{"enum":["pro","private"],"type":"string"},"company":{"type":["string","null"]},"certified":{"type":"boolean"}},"additionalProperties":false},"category":{"anyOf":[{"type":"object","required":["id","name","url","path"],"properties":{"id":{"type":"number"},"url":{"type":"string"},"name":{"type":"string"},"path":{"type":["string","null"]}},"additionalProperties":false},{"type":"null"}]},"location":{"type":"object","required":["city","postal_code","canton","country"],"properties":{"city":{"type":["string","null"]},"canton":{"type":["string","null"]},"country":{"type":["string","null"]},"postal_code":{"type":["string","null"]}},"additionalProperties":false},"created_at":{"type":["string","null"]},"expires_at":{"type":["string","null"]},"description":{"type":["string","null"]},"has_picture":{"type":"boolean"}},"additionalProperties":false},"annotations":{"title":"Get Classified","readOnlyHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:55:26.711Z"},{"name":"search_classifieds","title":null,"description":"Search classified ads on Joomil.ch — Switzerland's leading French-speaking classifieds marketplace (since 2007). Returns a paginated list of public listings with title, description (truncated to 300 chars), price, location, category and vendor info. All parameters are optional — call with no arguments to browse the latest listings. Use get_classified to fetch full details of a specific listing.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string","description":"Full-text search query (searches title and description)"},"sort":{"enum":["recent","price_asc","price_desc","views"],"type":"string","description":"Sort order: recent (newest first, default), price_asc, price_desc, views"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Results per page (1–50, default 20)"},"canton":{"enum":["Geneve","Vaud","Valais","Fribourg","Neuchatel","Jura","Bern","Argovie","Zurich","Lucerne","Bale-Ville","Etranger"],"type":"string","description":"Swiss canton filter — strict enum. Use get_cantons for the official list. WARNING: values are API-specific (e.g. 'Bern' not 'Berne', 'Geneve' not 'Genève'/'Geneva'). Supported: Geneve, Vaud, Valais, Fribourg, Neuchatel, Jura, Bern, Argovie, Zurich, Lucerne, Bale-Ville, Etranger."},"cat_id":{"type":"integer","description":"Category ID filter — includes subcategories automatically. Use get_categories to browse available categories.","exclusiveMinimum":0},"offset":{"type":"integer","minimum":0,"description":"Pagination offset. Use next_offset from previous response to get next page."},"location":{"type":"string","description":"City name or postal code (NPA) — partial match"},"price_max":{"type":"number","minimum":0,"description":"Maximum price in CHF (inclusive)"},"price_min":{"type":"number","minimum":0,"description":"Minimum price in CHF (inclusive)"}},"additionalProperties":false},"output_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["results","total","limit","offset","has_more","next_offset","filtered_out"],"properties":{"limit":{"type":"number"},"total":{"type":"number"},"offset":{"type":"number"},"results":{"type":"array","items":{"type":"object","required":["id","title","price","location","category","url","created_at","has_picture","seller"],"properties":{"id":{"type":"number"},"url":{"type":"string"},"price":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":["number","null"]},"currency":{"type":"string","const":"CHF"}},"additionalProperties":false},"title":{"type":"string"},"seller":{"type":"object","required":["name","certified"],"properties":{"name":{"type":["string","null"]},"certified":{"type":"boolean"}},"additionalProperties":false},"category":{"anyOf":[{"type":"object","required":["id","name","url"],"properties":{"id":{"type":"number"},"url":{"type":"string"},"name":{"type":"string"}},"additionalProperties":false},{"type":"null"}]},"location":{"type":"object","required":["city","postal_code","canton","country"],"properties":{"city":{"type":["string","null"]},"canton":{"type":["string","null"]},"country":{"type":["string","null"]},"postal_code":{"type":["string","null"]}},"additionalProperties":false},"created_at":{"type":["string","null"]},"description":{"type":"string"},"has_picture":{"type":"boolean"}},"additionalProperties":false}},"has_more":{"type":"boolean"},"next_offset":{"type":["number","null"]},"filtered_out":{"type":"number"}},"additionalProperties":false},"annotations":{"title":"Search Classifieds","readOnlyHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:55:26.711Z"},{"name":"suggest_filters","title":null,"description":"Infer search_classifieds filters from a natural-language query. Use this before search_classifieds when the user mentions a category, location, canton or price in free text. Returns a ready-to-use filters object, a category confidence score and warnings for uncertain matches.","input_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"query":{"type":"string","minLength":1,"description":"Natural-language search request, e.g. 'appartement 3 pièces à Sion' or 'Tesla Model 3 moins de 25000 CHF'."}},"additionalProperties":false},"output_schema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query","filters","category","confidence","warnings","next_step"],"properties":{"query":{"type":"string"},"filters":{"type":"object","required":["q","cat_id","canton","location","price_min","price_max","sort","limit"],"properties":{"q":{"type":["string","null"]},"sort":{"enum":["recent","price_asc","price_desc","views"],"type":"string"},"limit":{"type":"number"},"canton":{"anyOf":[{"enum":["Geneve","Vaud","Valais","Fribourg","Neuchatel","Jura","Bern","Argovie","Zurich","Lucerne","Bale-Ville","Etranger"],"type":"string"},{"type":"null"}]},"cat_id":{"type":["number","null"]},"location":{"type":["string","null"]},"price_max":{"type":["number","null"]},"price_min":{"type":["number","null"]}},"additionalProperties":false},"category":{"anyOf":[{"type":"object","required":["id","name","url","parent_id","confidence","reason"],"properties":{"id":{"type":"number"},"url":{"type":"string"},"name":{"type":"string"},"reason":{"type":"string"},"parent_id":{"type":"number"},"confidence":{"type":"number"}},"additionalProperties":false},{"type":"null"}]},"warnings":{"type":"array","items":{"type":"string"}},"next_step":{"type":"string"},"confidence":{"type":"number"}},"additionalProperties":false},"annotations":{"title":"Suggest Filters","readOnlyHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-19T18:55:26.711Z"}],"next_cursor":null,"next_actions":[{"action":"get_connection","description":"Connection block to call these tools","href":"/v1/servers/io.github.ValmoDev%2Fjoomil/connection?target=mcpServers","arguments":{"name":"io.github.ValmoDev/joomil","target":"mcpServers"}},{"action":"get_server","description":"Full descriptor with trust and connectability","href":"/v1/servers/io.github.ValmoDev%2Fjoomil","arguments":{"name":"io.github.ValmoDev/joomil"}}]}