Facebook Marketplace Mcp
#Facebook Marketplace MCP Server
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.
#How It Works
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.
#Prerequisites
- macOS (cookie extraction uses Keychain)
- Google Chrome with an active Facebook login
- Node.js 20+
#Installation
git clone <this-repo> cd facebook-marketplace-mcp npm install npm run build
#Setup with Claude Code
claude mcp add facebook-marketplace -- node /path/to/facebook-marketplace-mcp/dist/index.js
Or 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" } } } }
#Tools
#search_listings
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_listing
Get full details for a specific listing.
| Parameter | Type | Required | Description |
|---|---|---|---|
listing_id |
string | yes | Marketplace listing ID |
#monitor_search
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
Check monitors for new listings since last check.
| Parameter | Type | Required | Description |
|---|---|---|---|
monitor_name |
string | no | Check specific monitor, or omit for all |
#list_monitors
List all saved monitors.
#delete_monitor
Delete a saved monitor.
#Configuration
| Env Variable | Default | Description |
|---|---|---|
CHROME_PROFILE |
Default |
Chrome profile directory name |
#Updating GraphQL Queries
Facebook rotates their doc_id values on deploys. If searches stop working:
npm install -D playwright
npx playwright install chromium
npm run capture-queries
This opens a browser, navigates Marketplace, and captures current query IDs. Update src/facebook/queries.ts with the new values.
#Rate Limiting
The server self-rate-limits to 3 requests/minute with random jitter to avoid detection. This means searches take a few seconds.
#Limitations
- 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