An MCP server that provides access to Facebook Marketplace via direct GraphQL API calls. No browser automation at runtime — speaks Facebook's internal protocol directly.
Facebook's web client makes all Marketplace requests as POST /api/graphql/ with a doc_id (query hash) and variables. This server replays those requests using your existing Facebook session cookies from Chrome.
Think of it like pypush for iMessage — direct protocol, no browser.
- macOS (cookie extraction uses Keychain)
- Google Chrome with an active Facebook login
- Node.js 20+
git clone <this-repo>
cd facebook-marketplace-mcp
npm install
npm run buildclaude mcp add facebook-marketplace -- node /path/to/facebook-marketplace-mcp/dist/index.jsOr add to your Claude Code config manually:
{
"mcpServers": {
"facebook-marketplace": {
"command": "node",
"args": ["/path/to/facebook-marketplace-mcp/dist/index.js"],
"env": {
"CHROME_PROFILE": "Default"
}
}
}
}Search Marketplace by query, location, and filters.
| Parameter | Type | Required | Description |
|---|---|---|---|
query |
string | yes | Search term |
latitude |
number | yes | Latitude of search center |
longitude |
number | yes | Longitude of search center |
radius_km |
number | no | Search radius (default: 50) |
min_price |
number | no | Min price in dollars |
max_price |
number | no | Max price in dollars |
category |
string | no | Category ID |
limit |
number | no | Max results (default: 20) |
Get full details for a specific listing.
| Parameter | Type | Required | Description |
|---|---|---|---|
listing_id |
string | yes | Marketplace listing ID |
Save a search as a monitor to track new listings over time.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | yes | Monitor name |
query |
string | yes | Search term |
latitude |
number | yes | Search center lat |
longitude |
number | yes | Search center lng |
radius_km |
number | no | Radius (default: 50) |
min_price |
number | no | Min price |
max_price |
number | no | Max price |
Check monitors for new listings since last check.
| Parameter | Type | Required | Description |
|---|---|---|---|
monitor_name |
string | no | Check specific monitor, or omit for all |
List all saved monitors.
Delete a saved monitor.
| Env Variable | Default | Description |
|---|---|---|
CHROME_PROFILE |
Default |
Chrome profile directory name |
Facebook rotates their doc_id values on deploys. If searches stop working:
npm install -D playwright
npx playwright install chromium
npm run capture-queriesThis opens a browser, navigates Marketplace, and captures current query IDs. Update src/facebook/queries.ts with the new values.
The server self-rate-limits to 3 requests/minute with random jitter to avoid detection. This means searches take a few seconds.
- macOS only for automatic cookie extraction
- Requires Chrome with active Facebook session
- Facebook ToS — automating Facebook violates their Terms of Service
- Fragile —
doc_idvalues change on Facebook deploys - Rate limited — aggressive use may trigger CAPTCHAs or account flags
- No write operations — search/read only, no messaging or listing creation