Joomil — Swiss Classifieds MCP

io.github.ValmoDevPublished by GitHub account ValmoDevv1.0.0Updated Oct 24, 2026

Search Swiss classifieds on Joomil.ch — top marketplace in French-speaking Switzerland since 2007.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingBusiness & Commerce

Overview

AI-generated overview

Remote MCP server for searching Joomil.ch, a Swiss French-speaking classifieds marketplace, letting an assistant find and read public listings.

What you can do
  • Search listings by keyword, category, canton, city or postal code, price range, sort order and pagination
  • Turn a free-text request into ready-to-use search filters, with a category confidence score and warnings
  • Read a single listing's full description, image URLs, category path, seller details, expiry date and boost level
  • List marketplace categories, optionally by parent, to reconstruct the hierarchy
  • List the canton values accepted by the canton filter, with French labels
When to use it
Useful when someone wants to find second-hand goods, property, vehicles, jobs or animals for sale in French-speaking Switzerland, or wants an assistant to browse and summarize Joomil listings. It is read-only, so it suits discovery and comparison rather than managing ads.
Requirements
A remote MCP endpoint; no local installation or package needed. No authentication, API key or environment variable is required. Network access to the endpoint and the upstream Joomil.ch API is needed.
Before you install
Read-only and public data only: it cannot create, edit or delete listings, contact sellers, or access accounts, messages or favorites. Seller phone numbers and email addresses are not exposed. Some categories are filtered out by the server per content policy. The canton filter is a strict enum, so other spellings are ignored and can return unfiltered results.

Installation

In SourceWeft

  1. Open Joomil — Swiss Classifieds MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.ValmoDev%2Fjoomil/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "joomil-swiss-classifieds": {
      "type": "http",
      "url": "https://joomil-mcp.snowy-surf-deec.workers.dev/mcp"
    }
  }
}

README

joomil-mcp

MCP server for Joomil.ch — Switzerland's leading French-speaking classifieds marketplace, active since 2007.

Browse and search 45,000+ active listings across 34 categories: real estate, vehicles, jobs, animals, electronics, fashion and more — all from Switzerland's French-speaking regions (Romandie).

Tools

ToolDescription
suggest_filtersInfer search_classifieds filters from a natural-language query
search_classifiedsSearch listings with filters: keyword, category, canton (strict enum), location, price range, sort, pagination
get_classifiedGet full details of a listing by ID: description, images, vendor, expiry date
get_categoriesList active categories with hierarchy via parent_id
get_cantonsList the canton values supported by the canton filter (API-specific spellings)

Quick Start

This is a remote MCP server — no local installation required.

Endpoint: https://joomil-mcp.snowy-surf-deec.workers.dev/mcp

Claude Desktop

Add to ~/.claude/claude_desktop_config.json:

json
{  "mcpServers": {    "joomil": {      "command": "npx",      "args": ["mcp-remote", "https://joomil-mcp.snowy-surf-deec.workers.dev/mcp"]    }  }}

Cursor

Add to your MCP settings:

json
{  "joomil": {    "url": "https://joomil-mcp.snowy-surf-deec.workers.dev/mcp"  }}

Example Prompts

  • "Trouve-moi une voiture automatique à moins de 10'000 CHF dans le canton de Vaud."
  • "Cherche un appartement 3 pièces à Sion."
  • "Quelles catégories d'électronique propose Joomil ?"
  • "Montre-moi les annonces de canapés vintage en Valais."
  • "Cherche des offres d'emploi dans l'hôtellerie à Neuchâtel."

Tip for agents: call get_cantons before filtering by canton — the API uses non-obvious spellings (e.g. Bern not Berne, Geneve not Genève/Geneva). For free-text user requests, call suggest_filters first, then pass the returned filters object to search_classifieds.

API Reference

suggest_filters

ParameterTypeDescription
querystringNatural-language search request, e.g. appartement 3 pièces à Sion

Returns a ready-to-use filters object for search_classifieds, plus a category confidence score and warnings when matching is uncertain. Category metadata is cached briefly by the MCP layer to avoid refetching the category tree for every suggestion.

Useful examples:

User requestTypical suggested filters
Tesla Model 3 moins de 25'000 CHFq: "Tesla Model 3", cat_id: 101, price_max: 25000, sort: "price_asc"
vélo budget 1.5k CHFq: null, category in sport/leisure, price_max: 1500, sort: "price_asc"
appartement 3 pièces à Sionq: "3 pièces", cat_id: 10255, location: "Sion"
voiture entre 10'000 et 20'000 CHFcat_id: 101, price_min: 10000, price_max: 20000
Golf GTI dans le canton de Vaudq: "Golf GTI", cat_id: 101, canton: "Vaud"
canapé vintage à Lausanneq: "vintage", cat_id: 10022, location: "Lausanne"
iPhone 14 à Genèveq: "iPhone 14", cat_id: 10127, location: "Genève"
json
{  "query": "appartement 3 pièces à Sion",  "filters": {    "q": "3 pièces",    "cat_id": 10255,    "canton": null,    "location": "Sion",    "price_min": null,    "price_max": null,    "sort": "recent",    "limit": 20  },  "category": {    "id": 10255,    "name": "Appartements",    "url": "https://www.joomil.ch/annonces/immobilier/locations/appartements/10255",    "parent_id": 339,    "confidence": 0.82,    "reason": "requête immobilière appartement"  },  "confidence": 0.74,  "warnings": [],  "next_step": "Call search_classifieds with the filters object. Adjust q or cat_id if the result set is too broad."}

search_classifieds

ParameterTypeDescription
qstringFull-text search (title + description)
cat_idnumberCategory ID — includes subcategories
cantonenumStrict enum — see get_cantons. Geneve, Vaud, Valais, Fribourg, Neuchatel, Jura, Bern, Argovie, Zurich, Lucerne, Bale-Ville, Etranger
locationstringCity name or postal code (partial match)
price_minnumberMinimum price in CHF
price_maxnumberMaximum price in CHF
sortenumrecent (default, newest first), price_asc, price_desc, views (most viewed)
limitnumberResults per page (1–50, default 20)
offsetnumberPagination offset — use next_offset from previous response

Tool responses include a short human-readable summary followed by compact serialized JSON in content for MCP backward compatibility. Full data is also returned in structuredContent with results, total, limit, offset, has_more, next_offset, and filtered_out (items removed from the current page by MCP-side category restrictions).

Result shape (each item):

json
{  "id": 366872, "title": "Maison avec étangs",  "price": { "amount": 237977.5, "currency": "CHF" },  "location": { "city": "Saint Eugène", "postal_code": "71320", "canton": "Geneve", "country": "FR" },  "category": { "id": 10261, "name": "Maisons & Villas", "url": "https://..." },  "url": "https://www.joomil.ch/annonce/.../366872",  "created_at": "2026-06-26T22:17:11+02:00",  "has_picture": true,  "seller": { "name": "jpclair", "certified": false }}

get_classified

ParameterTypeDescription
idnumberListing ID (from search results or listing URL)

Returns full listing details, including complete description, images, category path, expiry date, boost level, and seller details.

get_categories

ParameterTypeDescription
parent_idnumberOptional — omit for all, 0 for root categories, or any category ID for its children

get_cantons

No parameters. Returns the canton values accepted by search_classifieds' canton filter, with their French labels:

json
{  "cantons": [    { "name": "Geneve", "label_fr": "Genève", "code": "GE", "region": "Romandie" },    { "name": "Bern", "label_fr": "Berne", "code": "BE", "region": "Suisse alémanique" }  ],  "total": 12}

Always pass the name field (not label_fr nor code) to the canton filter.

Data

  • Source: Joomil.ch public REST API
  • Coverage: 45,000+ active listings, 34 top-level categories, 190,000+ registered users
  • Location: Switzerland (French-speaking regions — Romandie)
  • Language: French
  • Update frequency: Real-time
  • Authentication: None required

Limitations

This MCP server is read-only and uses public data only.

  • No write operations: cannot create, edit, or delete listings; cannot contact sellers.
  • No authentication: no user accounts, no messages, no favorites, no saved searches.
  • No seller contact: phone numbers and email addresses are not exposed — use the listing url to open Joomil.ch directly.
  • No posting: publishing an ad must be done on joomil.ch.
  • Restricted categories: Erotique (28), Rencontres & Amitié (14000), Voyance & Astrologie (651), and their descendants are filtered out by the MCP layer per content policy. The underlying PHP API remains available for direct use.
  • Canton filter is strict: only the values returned by get_cantons are accepted. Other spellings (Berne, Genève, Geneva, GE, VD...) are silently ignored by the upstream API and would return all listings instead of a filtered set — the strict enum here prevents that.
  • Currency: all prices are in CHF. Listings may have price.amount: null (price on request) or 0 (free).
  • Upstream errors: Joomil API failures are returned as MCP tool errors with isError: true.

Deploy Your Own

bash
git clone https://github.com/Valmo-Sarl/joomil-mcpcd joomil-mcpnpm installnpx wrangler loginnpm run deploy

License

MIT

Source: README.md at commit 345aa48

Tools

5

suggest_filters

Suggest Filters

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.

Parametersqueryrequired

search_classifieds

Search Classifieds

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.

Parametersqsortlimitcantoncat_idoffsetlocationprice_maxprice_min

get_classified

Get Classified

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.

Parametersidrequired

get_categories

Get Categories

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.

Parametersparent_id

get_cantons

Get Cantons

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').

Takes no parameters.

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.