facebook-marketplace
Provides tools for searching and analyzing Facebook Marketplace listings: raw filtered searches, full listing details with photos, like-for-like price comparison with deal scoring and scam flags, suggested opening offers, saved watches with target prices, new-listing/price-drop checks, and local price history. Supports Hebrew and English titles and ILS pricing, with optional login for more results and seller names.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@facebook-marketplacefind me the best used PS5 in Tel Aviv"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Facebook Marketplace deal finder (MCP server + Claude skill)
Search Facebook Marketplace from Claude, compare prices like-for-like, flag scams, suggest opening offers, and watch for new listings and price drops. Built for Israel (Hebrew + English titles, ₪), works anywhere.
MCP server (
dist/index.js): 8marketplace_*tools, registered in Claude Code asfacebook-marketplace.Skill
marketplace-deals(skills/marketplace-deals/, install into~/.claude/skills/): the buying workflow (queries → baseline → compare → photo check → report → watch).CLI (
dist/cli.js): the same engine without an AI, for Windows Task Scheduler.
How it works
A dedicated Playwright Chromium profile (~/.fb-marketplace-mcp/profile, not your everyday Chrome) loads Marketplace pages at human pace (2.5–5 s jitter, one tab, no parallelism). Listings are read from Facebook's embedded Relay JSON (marketplace_listing_title, listing_price, …) rather than the DOM, so extraction does not depend on the UI language. Item pages select the focal listing by id, so the "related listings" rail cannot pollute details or photos.
Logged out, each search page returns about 24 listings, so marketplace_compare sweeps every query variant × sort order (relevance, cheapest, newest) and merges: typically 100+ unique listings from 6 pages. Logging in (optional, once) adds scroll pagination and seller names.
Built on lessons from jdcodes1/facebook-marketplace-mcp (macOS-only Chrome cookie extraction; per the car-hunter fork, its GraphQL doc_id search started returning empty listings), the car-hunter fork (switched to embedded-JSON parsing, focal-object detail fix) and weimar-torres-herrera/facebook-marketplace-mcp (Playwright persistent profile; DOM parsing with six known defects). Ideas reimplemented, no code copied.
Related MCP server: Facebook Marketplace MCP
Tools
Tool | Use |
| Login state, config, DB size |
| Opens a window; you log in (credentials are never typed by Claude) |
| One raw search with filters (price, condition, days, sort) |
| Full detail + photos returned as images for Claude to inspect |
| The main tool: sweep, relevance filter, like-for-like groups ( |
| Save / list / remove a watch with a target price |
| New listings, price drops, target hits since the last check |
| Local price history per listing or by title |
Scam / quality flags: too cheap vs a tight group or a supplied reference price, deposit / prepayment, parts / broken / iCloud-locked, replica, jailbroken, "accessory for X", buy requests ("מחפש"), placeholder prices (₪1, ₪123), sold/pending, few photos, far pickup-only, reposts.
Setup
Requires Node.js 22.13+ (uses the built-in node:sqlite).
git clone https://github.com/ido6/facebook-marketplace-deals.git
cd facebook-marketplace-deals
npm install
npx playwright install chromium
npm run build
claude mcp add --scope user facebook-marketplace -e FBMP_LOCATION=telaviv -- node "/absolute/path/to/facebook-marketplace-deals/dist/index.js"Install the skill by copying skills/marketplace-deals/ into ~/.claude/skills/ (Windows: %USERPROFILE%\.claude\skills\). Start a new Claude Code session so the tools and skill load, then ask e.g. "find me the best used PS5 in Tel Aviv".
Optional login (more results, seller names): ask Claude to run marketplace_login, or node dist/cli.js login.
Configuration (env)
Variable | Default | |
|
| City name (English/Hebrew), slug, or numeric id |
| – | Your location, for distance scoring |
|
|
|
|
| |
|
| Keep them; human pace is the point |
|
| Page-load cap per compare |
|
| Profile, SQLite DB, reports |
Locations: Facebook has vanity slugs only for some cities (telaviv, jerusalem, beersheba, ashdod, netanya, raanana, rehovot, modiin, eilat); others are mapped to numeric city ids in src/browser/urls.ts (Petah Tikva, Rishon, Ramat Gan, Holon, Herzliya, Kfar Saba, …). For any other city, open Marketplace, set the location, and copy the number from facebook.com/marketplace/<id>/. An unknown slug fails fast with that hint.
CLI
node dist/cli.js compare "iphone 13 pro" "אייפון 13 פרו" --location "Tel Aviv" --min 800 --exclude כיסוי --report
node dist/cli.js check-watchesExit code 2 = Facebook session expired / security check (run login); 1 = other error.
Development
npm test # vitest, fixtures captured from the live site
npm run typecheck
npm run buildsrc/core is pure (no I/O) and fixture-tested; src/browser is the only Playwright code; stdout belongs to MCP, so logs go to stderr (src/log.ts).
Limits and risk
Automating Facebook is against its Terms of Service. This tool is read-only, slow by design, and uses no stealth tricks; the account risk is low but not zero. Heavy use can trigger security checks.
Facebook changes its payload occasionally. Extraction keys off stable JSON field names; if results go empty, save a fresh search page's HTML and turn it into a fixture with
node scripts/sanitize-fixture.mjs raw.html test/fixtures/new.html(strips tokens, real ids, seller data, photo URLs and exact coordinates; never commit raw pages), then run the tests.Prices are asking prices, not sold prices. Benchmarks need several listings per variant; thin variants fall back to tier-level or overall medians (
benchmark.level).Messaging sellers and paying stay with you: Claude only drafts messages.
License
MIT. Not affiliated with or endorsed by Meta. Use it for your own shopping, at your own risk.
Available Tools
8 toolsmarketplace_check_watchesA
Re-run saved watches and report only what changed since each one's last check: new listings, price drops, target-price hits. The first check of a watch sets a baseline.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | One watch; omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply openWorldHint=true, so the description carries the behavioral load and does it well: it discloses delta semantics (only changes since last check are reported) and the baseline rule for a watch's first run. It stops short of mentioning auth requirements or rate limits, but the core behavioral contract is unusually clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and the return categories, with the baseline caveat placed last where it belongs. No filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what comes back, which an agent needs. Minor gaps remain around authentication and whether the tool blocks or returns immediately, but for a one-parameter read tool the coverage is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'name' parameter is already documented as 'One watch; omit for all.' The description adds no syntax or naming details beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Re-run') and resource ('saved watches') and enumerates the exact output categories: new listings, price drops, target-price hits. This distinguishes it clearly from sibling marketplace_watch (which creates watches) and marketplace_search (ad-hoc queries).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'saved watches' implies a watch must exist first, and 'omit for all' scopes the operation, but the description never names when to prefer this over marketplace_watch or marketplace_status, nor states prerequisites such as being logged in despite the marketplace_login sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_compareA
Find the best-priced listings for a product and benchmark the market. Sweeps every query variant × sort order, merges, drops irrelevant/sold/reposted listings, groups like-for-like (e.g. 'pro · 256GB'), computes price stats per variant, ranks deals (price vs variant, price drops, recency, condition, distance), opens the top few for details, flags scams (too cheap, prepayment, parts/broken, buy requests, placeholder ₪1 prices) and suggests an opening offer. Pass several query variants: Hebrew + English + model spellings, e.g. ['iphone 13', 'אייפון 13']. Takes about 5-8 s per page; default 3 sorts per query, capped at 12 pages.
| Name | Required | Description | Default |
|---|---|---|---|
| sorts | No | Default ['relevance','price_asc','newest']. | |
| top_n | No | ||
| exclude | No | Drop titles containing these words (e.g. ['case','כיסוי']). | |
| queries | Yes | ||
| home_lat | No | ||
| home_lng | No | ||
| location | No | Israeli city name in English or Hebrew (Tel Aviv, ירושלים, Petah Tikva, Holon, Beersheba...), a Marketplace slug, or the numeric id from a Marketplace URL. Default: telaviv. | |
| max_price | No | ||
| min_price | No | Also useful to cut accessories and placeholder prices. | |
| radius_km | No | ||
| conditions | No | ||
| enrich_top | No | ||
| must_include | No | Every title must contain these words (e.g. ['pro']). | |
| export_report | No | Also write CSV + HTML reports and return their paths. | |
| reference_price | No | Known fair USED price from outside Marketplace; enables vsReferencePct and a scam check. | |
| days_since_listed | No | Only listings from the last N days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply readOnlyHint=false and openWorldHint=true; the description adds substantial behavior: dedupe/sold/reposted filtering, like-for-like grouping, price stats, scam heuristics, and latency/page caps. It does not explain why the tool is flagged non-read-only (report/file export as a side effect), leaving one inconsistency in the safety profile unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded: the pipeline and output are stated first, then invocation guidance and constraints. The single run-on sentence is long but every clause carries distinct behavioral information; minor structural cost only.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 16-param tool with no output schema, the description covers the analysis outputs (price stats, ranked deals, scam flags, opening offer) and operational limits well. It omits mention of the export_report side effect and doesn't describe result shape in detail, but is largely sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 16 parameters and only ~50% schema description coverage, the description compensates for some gaps (queries as multi-variant Hebrew/English strings, sorts default and page cap) but is silent on location, radius_km, conditions, price bounds, must_include/exclude, and enrichment depth. Partial compensation against a substantial coverage gap, so a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States precise verbs and resource: finds best-priced listings, benchmarks the market, and enumerates the full analysis pipeline (merge, dedupe, group, rank, enrich, scam-flag, offer suggestion). Clearly differentiated from siblings like marketplace_search and marketplace_price_history, which do single narrow jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete invocation guidance: pass several query variants with a Hebrew+English example, default 3 sorts per query, cap of 12 pages, and 5-8s per page timing. It never explicitly names when to prefer marketplace_search or marketplace_price_history instead, so it stays at 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_listingARead-only
Full detail for one listing: description, condition, exact pickup area, delivery options, all photos. Set include_photos to SEE the real photos (check the item matches the title, spot stock photos, damage, serial numbers).
| Name | Required | Description | Default |
|---|---|---|---|
| listing | Yes | Listing id or Marketplace item URL. | |
| include_photos | No | How many photos to return as images. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real behavioral value: photos are returned as actual images only when include_photos is set, and it flags why that matters (verifying the item matches the title, detecting stock photos or damage).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, no filler. The returned-field list is front-loaded and the actionable advice about include_photos follows immediately, so the agent gets the important guidance without scrolling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by enumerating the main returned fields and explaining photo behavior. Minor gaps remain (no mention of error/not-found behavior or cost of requesting six images), but for a single-item read tool this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by explaining the intent behind include_photos ('to SEE the real photos') rather than just restating that it controls image count, which meaningfully guides the agent to set it above the default 0.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Full detail for one listing') and enumerates exactly what the payload contains: description, condition, pickup area, delivery options, photos. This clearly separates it from sibling lookup tools like marketplace_search or marketplace_compare, which operate over many listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a genuine when-to-use for include_photos ('to SEE the real photos... spot stock photos, damage, serial numbers'), which implies pre-purchase inspection. However, it never says when to prefer this tool over marketplace_search, marketplace_compare, or marketplace_price_history, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_loginA
Open a visible browser window on Facebook so the USER can log in by hand (Claude never types credentials). Waits until login completes or the timeout passes. Optional: search works logged out.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_minutes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden well: it discloses the visible window, that Claude never types credentials, and that the call blocks until login completes or timeout. It omits what happens on timeout/failure and whether the session persists for later marketplace tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and credential-handling caveat. Minor redundancy in the trailing 'Optional: search works logged out' note, which is compressed to the point of slight ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, single-parameter tool with no annotations or output schema, the description covers behavior and security posture but not the outcome on failure or whether the authenticated session carries over to sibling tools like marketplace_watch or marketplace_search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter has 0% schema coverage, so the description should compensate. It mentions 'the timeout passes', implying timeout_minutes governs the wait, but gives no units, range, or default, leaving the schema's min/max/default undocumented in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: opening a visible Facebook browser window for manual user login. It is clearly distinct in intent from the search/listing/watch siblings, though it never names an alternative to contrast against explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when the tool is needed (hand login by the user) and a useful negative hint that search works logged out, implying this is not always required. It stops short of naming which sibling tools do or do not require a session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_price_historyARead-only
Local price history recorded by earlier searches: one listing's price changes (by id/URL) or past listings whose title matches some text. Useful for 'has this dropped?' and 'what did these go for last month?'.
| Name | Required | Description | Default |
|---|---|---|---|
| listing | No | ||
| title_contains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so safety is covered. The description adds the genuinely non-obvious behavioral fact that results come from locally recorded earlier searches, implying coverage depends on prior activity and may be empty. It does not say what happens when no history exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the source-of-data caveat front-loaded before the two retrieval modes. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, no-output-schema tool the description need not explain return values, and it covers both modes adequately. But it leaves open the interaction between the two optional parameters and the empty-history case, which an agent would need to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry the load: it does map 'listing' to a single listing by id/URL and 'title_contains' to title text matching. However, it omits the format of the id/URL, and since both parameters are optional it never explains precedence or what happens when both (or neither) are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (local price history) and the two retrieval modes (single listing's price changes by id/URL, or past listings matching a title). The phrase 'recorded by earlier searches' distinguishes it from live-lookup siblings like marketplace_search and marketplace_listing, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete trigger questions ('has this dropped?', 'what did these go for last month?') that map directly to the two parameter modes, so an agent can tell when to call it. It stops short of stating when NOT to use it or which sibling to prefer for live data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_searchARead-only
Raw Marketplace search for one query. Use for quick looks; for price comparison or 'find me the best deal' use marketplace_compare instead. Write queries the way local sellers write titles (Hebrew and/or English).
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevance | |
| query | Yes | ||
| location | No | Israeli city name in English or Hebrew (Tel Aviv, ירושלים, Petah Tikva, Holon, Beersheba...), a Marketplace slug, or the numeric id from a Marketplace URL. Default: telaviv. | |
| max_price | No | ||
| min_price | No | ||
| radius_km | No | ||
| conditions | No | ||
| max_results | No | ||
| days_since_listed | No | Only listings from the last N days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and open-world profile is covered. The description adds one genuinely useful behavioral note: write queries in the native style of local sellers (Hebrew/English). However, it says nothing about pagination, result ordering defaults, rate limits, or that location defaults to telaviv. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded purpose, then routing, then a practical query hint. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, no-output-schema tool with a 22% schema coverage, the description covers purpose and routing well but is thin on parameter guidance and behavioral details like default location and result counts. Adequate but leaving clear gaps an agent would need to infer from schema enums.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 22%, so most of the 9 parameters lack schema documentation. The description only addresses query syntax (native seller style, Hebrew/English), leaving sort, location, price bounds, radius, condition, max_results, and days_since_listed undocumented by description. It adds one useful point but does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Raw Marketplace search for one query') and explicitly contrasts itself with marketplace_compare, naming the condition that selects the sibling. An agent can distinguish this from marketplace_listing, marketplace_compare, or marketplace_price_history without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('quick looks') and when-not-to-use with the named alternative ('for price comparison or find me the best deal use marketplace_compare instead'). This is textbook routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_statusARead-only
Check whether the Marketplace browser session is logged in, plus the active configuration. Call first if other tools fail.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating call, so the bar is lower. The description adds that it reports login state and the active configuration, but says nothing about what 'active configuration' contains, whether the check can be slow, or what a logged-out result implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose and followed immediately by the routing hint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of explaining what comes back, and it does so at a high level (login state + configuration). It is sufficient for a simple diagnostic, though it could note what a failure result looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to clarify beyond what the empty schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and two concrete resources (login state, active configuration), and the diagnostic framing clearly separates it from siblings like marketplace_login and marketplace_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Call first if other tools fail' gives an explicit trigger condition for using this tool, which is exactly the routing guidance an agent needs. It lacks a when-not statement, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplace_watchB
Save, list or remove a watch: a saved comparison that marketplace_check_watches re-runs to report NEW listings, PRICE DROPS and hits at or below a target price.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| action | Yes | ||
| exclude | No | ||
| queries | No | ||
| location | No | Israeli city name in English or Hebrew (Tel Aviv, ירושלים, Petah Tikva, Holon, Beersheba...), a Marketplace slug, or the numeric id from a Marketplace URL. Default: telaviv. | |
| max_price | No | ||
| min_price | No | ||
| conditions | No | ||
| must_include | No | ||
| target_price | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses that watches are re-run to report new listings, price drops, and target-price hits, but omits authentication needs, persistence behavior, what remove actually deletes, and what list returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the actions and then defines the resource. It is dense but contains no filler, though it prioritizes purpose over operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no annotations, no output schema, and very low schema description coverage, the description is insufficient. It gives the purpose and the check_watches relationship but not enough detail for an agent to invoke add, list, and remove correctly across all parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 10%, and the description does not explain the action enum, name, queries, exclude, must_include, conditions, or price-bound parameters. It only loosely references a target price concept, leaving most of the 10 parameters semantically undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific set of verbs (save, list, remove) and a clear resource (a watch), then defines what a watch is. It explicitly connects to the sibling tool marketplace_check_watches, so an agent can distinguish managing watches from running checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage by saying a watch is a saved comparison that marketplace_check_watches re-runs. However, it does not state when to add vs list vs remove, prerequisites for each action, or when not to use this tool versus other marketplace siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
marketplace_check_watches - First observed
marketplace_compare - First observed
marketplace_listing - First observed
marketplace_login - First observed
marketplace_price_history - First observed
marketplace_search - First observed
marketplace_status - First observed
marketplace_watch
TDQS
Scored across 8 tools
Most tools have distinct roles (status, login, listing detail, price history). The overlapping pairs — search vs. compare (both retrieve listings) and watch vs. check_watches (two halves of the watch feature) — are explicitly delineated in their descriptions, steering an agent to the right choice, so ambiguity is minor rather than real.
All tools consistently use the marketplace_ snake_case prefix, which is predictable and readable. The only slight deviation is that some use noun forms (status, listing, watch, price_history) while others use verbs (search, compare, login, check_watches), but the pattern is uniform enough not to confuse.
Eight tools is well-scoped for a Marketplace browser-automation server. Each tool earns its place: session handling, search, detail fetch, comparison, watch management, and price history — no redundancy or filler.
The surface covers the full browse/monitor workflow: login, search, detail, benchmark comparison, watch save/list/remove plus re-check, and price history. Minor gaps exist (no tool for contacting a seller or saving an individual listing outside a watch), but core deal-finding workflows are complete.
Maintenance
Related MCP Connectors
Search Facebook Marketplace, inspect listings and analyze deals. Paid Spottable Pro/Max required.
Track prices and deals: watch a shop page, get target alerts, see price history. Data stays local.
Used-Mac market: quality-gated listings with deep links, asking-price stats, trust checks, alerts.
Real-time Amazon prices, product search, 90-day history, AI forecasts, and price drop alerts.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents like claude.ai to search online marketplaces (e.g., Facebook Marketplace) through your own logged-in browser, returning structured listings and details.-
- FlicenseAqualityBmaintenanceEnables searching Facebook Marketplace listings from Claude using your existing Facebook session without a browser.72-
- AlicenseBqualityCmaintenanceEnables Claude to monitor Facebook Marketplace car and motorcycle listings, score them against custom criteria, and analyze accumulated listing history to reveal time-on-market, price trends, and sale triggers.9MIT
- FlicenseAqualityCmaintenanceEnables searching, retrieving details, and monitoring Facebook Marketplace listings through direct GraphQL API calls using existing Chrome session cookies, with support for saved searches and price/location filters.71-