Joomil — Swiss Classifieds MCP

io.github.ValmoDev由 GitHub 帳號 ValmoDev 發布v1.0.0更新於 Oct 24, 2026

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

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取商業與電商

概覽

AI 產生的概覽

針對 Joomil.ch 的遠端 MCP 伺服器,讓助理搜尋並讀取瑞士法語區分類廣告平台的公開物件與商品資訊。

可以做什麼
  • 依關鍵字、分類、州、城市或郵遞區號、價格區間、排序與分頁搜尋廣告
  • 把自然語言請求轉成可直接使用的搜尋篩選條件,並附上分類信心分數與提示
  • 讀取單一廣告的完整描述、圖片網址、分類路徑、賣家資訊、到期日與曝光等級
  • 列出平台分類,可依父層篩選以還原階層結構
  • 列出 canton 篩選器接受的州別值與法文標籤
適用情境
適合需要尋找瑞士法語區的二手商品、房地產、車輛、徵才或寵物等分類廣告,或希望由助理瀏覽並彙整 Joomil 廣告的情況。它為唯讀,適合查找與比較,不適合管理廣告。
執行需求
遠端 MCP 端點,不需本機安裝或套件。不需身分驗證、API 金鑰或環境變數。需要能連線至該端點與上游 Joomil.ch API 的網路。
安裝前請注意
唯讀且僅使用公開資料:無法建立、修改或刪除廣告,無法聯絡賣家,也無法存取帳號、訊息或收藏。賣家的電話與電子郵件不會公開。伺服器會依內容政策過濾部分分類。canton 篩選為嚴格列舉,其他拼法會被忽略,可能回傳未篩選的結果。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Joomil — Swiss Classifieds MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.ValmoDev%2Fjoomil/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

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

來源:README.md,提交 345aa48

工具

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.

輸入參數query必填

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.

輸入參數qsortlimitcantoncat_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.

輸入參數id必填

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.

輸入參數parent_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').

無需輸入參數。

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。