Craigslist (craigslist.org) for agents: Search craigslist.org; Craigslist search: posts in a city and category; Read a craigslist.org page by max_price β through Unbrowse's scoped MCP for...
Craigslist as tools for your agent. Unofficial: not affiliated with or endorsed by craigslist.org. Unbrowse compiled these from craigslist.org's own requests: each call replays the site's first-party API server-side and returns a verified result. No scraping of rendered pages, no browser on your side, no craigslist.org API key.
This server is a tool scope holding only craigslist.org: its compiled tools plus the Unbrowse tools that run them, so the agent's tool list stays small and every call stays on craigslist.org.
claude mcp add --transport http craigslist https://unbrowse.ai/mcp/craigslist.org
codex mcp add craigslist --url https://unbrowse.ai/mcp/craigslist.org && codex mcp login craigslist
{"mcpServers":{"craigslist":{"url":"https://unbrowse.ai/mcp/craigslist.org"}}}
The first connect signs in to Unbrowse with OAuth (free tier, only verified results count). For scripts, send Authorization: Bearer $UNBROWSE_API_KEY (key from https://unbrowse.ai/app/keys; keep it in a secret manager, never in config you commit).
If none of the tools below are in this session's tool list, the server is not connected or not signed in: say so and stop. Do not fetch craigslist.org some other way and present it as this skill's result.
sfbay_craigslist_org__render_page β Search craigslist.orgSearch craigslist.org. Inputs: max. Also takes the site's own parameters, each optional (left out, the recorded value is sent): cat (recorded: "apa"). Returns the page's title, readable text and links. Read-only on sfbay.craigslist.org.
max (string, required) β max β what to search for on craigslist.orgcat (string) β optional, e.g. "apa"select (array) β Keep only these parts of the result: dots walk keys, [] maps over a list, a final {a,b} keeps several keys (e.g. "results[].{title,url}"). Unmatched paths come back in selectMissing.{"max":"<max>"}
sapi_craigslist_org__get_search_full β Craigslist search: posts in a city and categoryCraigslist search: posts in a city and category. Inputs: batch; searchPath; query. Also takes the site's own parameters, each optional (left out, the recorded value is sent): cc (recorded: "US"). Returns apiVersion, configId, configTs, data, errors. Read-only on sapi.craigslist.org.
batch (string, required) β batch (typed during βsearchβ)searchPath (string, required) β searchPath (typed during βsearchβ)query (string, required) β query (typed during βsearchβ)cc (string) β optional, e.g. "US"select (array) β Keep only these parts of the result: dots walk keys, [] maps over a list, a final {a,b} keeps several keys (e.g. "results[].{title,url}"). Unmatched paths come back in selectMissing.{"batch":"<batch>","searchPath":"<searchPath>","query":"<query>"}
sfbay_craigslist_org__read_page β Read a craigslist.org page by max_priceRead a craigslist.org page by max_price. Inputs: max_price. Also takes the site's own parameters, each optional (left out, the recorded value is sent): availabilityMode (recorded: 0); cat (recorded: "apa"). Returns the page's title, readable text and links. A large answer comes back as its records at data (as results); pass select for other parts. Read-only on sfbay.craigslist.org.
max_price (string, required)availabilityMode (integer) β optional, e.g. 0cat (string) β optional, e.g. "apa"select (array) β Keep only these parts of the result: dots walk keys, [] maps over a list, a final {a,b} keeps several keys (e.g. "results[].{title,url}"). Unmatched paths come back in selectMissing. Left out on a large answer, its records at data come back as results (the rest is named in projection).{"max_price":"<max_price>"}
Always there too: unbrowse_run (a task on craigslist.org in plain words), unbrowse_inspect, unbrowse_resume, unbrowse_scrape and unbrowse_map (any page on craigslist.org), and the recorded cloud browser unbrowse_browse_open β unbrowse_browse_act β unbrowse_browse_finish. Hosts that reject dotted names show them with _ (unbrowse_run).
status. succeeded carries the verified result. input_required is not a failure: answer the open fields with unbrowse_resume {runId, answers} on the same run.unbrowse_run {task}. It fails with no_capability when nothing is compiled for that yet: do it once with unbrowse_browse_open on craigslist.org β unbrowse_browse_act β unbrowse_browse_finish, which compiles a new tool this server lists next time. Anything off craigslist.org is refused here (not_in_scope): use the general Unbrowse server for that.unbrowse_browse_act with action: "autofill" fills craigslist.org's login from their Unbrowse password manager.succeeded result says. outcome_unknown means a change may have happened: check before retrying. Posting, buying, sending or deleting needs the user's go-ahead.Every tool is also a REST call:
curl -s https://unbrowse.ai/api/v1/sites/sfbay.craigslist.org/call/sfbay_craigslist_org__render_page \
-H "authorization: Bearer $UNBROWSE_API_KEY" -H "content-type: application/json" \
-d '{"max":"<max>"}'
OpenAPI: https://unbrowse.ai/api/v1/sites/sfbay.craigslist.org/openapi.json. Every other site: the general Unbrowse skill (https://github.com/unbrowse-ai/unbrowse) and https://unbrowse.ai/mcp.