Communitygithub.com

mcllrealestate/agent-skills

AI agent skills for MCLL Real Estate — luxury residences across Thailand, for sale and rent

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add mcllrealestate/agent-skills

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentação

MCLL Real Estate

MCLL (mcllrealestate.com) is a premium Thai real-estate firm. This skill lets an agent search and read its published listings — for sale and for rent, across Bangkok, Phuket, and the islands. Everything here is read-only public data; no key or login is needed.

Pick the access method your runtime supports. MCP and REST return listings; Markdown also renders the area, news, and development pages.

1. MCP server (richest — prefer this)

Streamable-HTTP MCP endpoint: https://mcllrealestate.com/api/mcp Server card: https://mcllrealestate.com/.well-known/mcp/server-card.json

Three tools:

  • search_listings — find listings. Args: type ("sale" | "rent", required), locale (en/fr/th/zh, default en), and optional city, area, propertyType (human names — "Phuket", "Condo"), bedrooms, minPrice, maxPrice (THB), page. Returns { total, page, results: [{ id, title, url, transactionType, city, area, bedrooms, bathrooms, areaSqm, priceThb, image }] } — each result's url ends in a slug you pass to get_listing.
  • get_listing — full detail of one listing. Args: type ("sale"|"rent"), slug (from a search result), locale. Returns price, size, features, coordinates, and a Markdown description.
  • execute — Code Mode. Args: code (JavaScript string). Runs in a Cloudflare sandbox with global mcll.search(args) and mcll.get(args). No open network, filesystem, secrets, or writes. Use return for the JSON-serializable result; top-level await works. Best for comparing, ranking, or computing across many listings in one call.

Example execute code:

const { results } = await mcll.search({ type: "sale", city: "Bangkok", page: 1 });
const details = await Promise.all(
  results.slice(0, 2).map((r) =>
    mcll.get({ type: "sale", slug: r.url.split("/").pop(), locale: "en" }),
  ),
);

return details.map((d) => ({
  title: d.title,
  url: d.url,
  pricePerSqm: d.priceThb && d.areaSqm ? Math.round(d.priceThb / d.areaSqm) : null,
}));

2. REST API (no MCP client needed)

OpenAPI: https://mcllrealestate.com/api/openapi.json

  • SearchGET /api/listings?type=sale|rent&locale=en plus optional filters. Note these filters take ids (UUIDs), not names: city, area, propertyType, bedrooms, bathrooms, priceMin, priceMax, sizeMin, sizeMax, furnished, features, sort, page. Returns { total, page, results }, where each result has the same safe public projection as MCP search: absolute url, public image URL, price fields, city/area names, and no admin-only fields. (For name-based filtering — "condos in Phuket" — use the MCP search_listings tool, which resolves names to ids for you.)
  • DetailGET /api/listings/{type}/{slug}?locale=en → one listing as JSON, with a Markdown description. type is sale or rent; slug comes from a listing URL's last path segment.
# Detail of a known listing (slug from its public URL):
curl -s "https://mcllrealestate.com/api/listings/sale/kamala-cliff-villa?locale=en"

# Search (sale listings, page 1):
curl -s "https://mcllrealestate.com/api/listings?type=sale&locale=en"

3. Markdown content negotiation (any page → clean text)

Send Accept: text/markdown to any listing, area, news, or development URL and MCLL returns a Markdown rendition instead of HTML — far fewer tokens than parsing the page. The home page returns a site overview. Areas, news, and developments are reachable only this way — no MCP tool or REST endpoint covers them; find their URLs in the sitemap.

curl -s -H "Accept: text/markdown" \
  "https://mcllrealestate.com/en/buy/villa/phuket/kamala/kamala-cliff-villa"

Index and static pages have no Markdown rendition and return HTML — use the search API for those.

Typical workflow

  1. Use execute when the user asks for comparison, ranking, or derived metrics across multiple listings.
  2. Otherwise search for what the user wants (search_listings, or GET /api/listings).
  3. Read the result list; pick the relevant listing(s) by title, area, priceThb.
  4. Fetch details for the chosen listing(s) (get_listing, the detail REST route, or Markdown on the listing url).
  5. Answer the user with the listing's facts and link them to the public url.

Discovery and conventions

  • Sitemaps (every URL, per locale): https://mcllrealestate.com/sitemap.xml.
  • API catalog (machine index): https://mcllrealestate.com/.well-known/api-catalog.
  • Site guide for agents: https://mcllrealestate.com/llms-full.txt.
  • Locales: en · fr · th · zh. Unpublished locales fall back to English.
  • Prices are in THB; priceOnRequest: true (or priceThb: null) means the price is not public — say "Price upon enquiry", never a number.
  • Only published listings are returned; there is no auth and nothing is writable here.

Habilidades Relacionadas