mcpField
J
Joomil — Swiss Classifieds MCP

Joomil — Swiss Classifieds MCP

Remote
github.com/Valmo-SarlBusiness & Marketing0Updated 18w ago
Repository

About Joomil — Swiss Classifieds MCP

Joomil is a read-only MCP server for searching public classified listings from Joomil.ch in French-speaking Switzerland. It supports natural-language filter suggestions, listing details, and category and canton lookups.

Key features

  1. 01Suggest search filters from natural language
  2. 02Search listings by keyword and location
  3. 03Retrieve full listing details
  4. 04Browse categories and canton values

Use cases

  1. 01Find vehicles within a CHF budget
  2. 02Search housing by city and room details
  3. 03Browse electronics and other categories
  4. 04Look up public job listings by region

MCP support

The remote MCP server exposes tools for searching listings, retrieving listing details, suggesting filters, and looking up categories and cantons. It uses Joomil.ch's public REST API and is read-only.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://joomil-mcp.snowy-surf-deec.workers.dev/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Tools

5
ParameterTypeRequiredDescription
querystringYesNatural-language search request, e.g. 'appartement 3 pièces à Sion' or 'Tesla Model 3 moins de 25000 CHF'.

Details

From the project 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:

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

Add to your MCP settings:

{
  "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"
{
  "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):

{
  "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:

{
  "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

git clone https://github.com/Valmo-Sarl/joomil-mcp
cd joomil-mcp
npm install
npx wrangler login
npm run deploy

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.