Wallapop MCP Server
This server provides an unofficial interface to Wallapop marketplace, enabling product search/scanning, listing and seller details, category browsing, and authenticated actions like favorites, saved searches, chat, and offers.
Search and scan products with filters (keywords, category, price, location/radius, sort) and pagination; scan dedupes results and flags suspicious listings.
Get full listing details and seller profiles (rating, sold/published counts, registration date, location).
List the marketplace category tree with ids.
Check server health, auth status, and browser-fallback availability.
Authenticated tools: favorite/unfavorite listings, manage saved searches, list conversations, view/send messages, and make purchase offers (with pickup-radius enforcement and estimated total cost).
Uses API, SSR scraping, and browser automation fallbacks for resilience.
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., "@Wallapop MCP Serversearch for vintage cameras under 200 euros in Barcelona"
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.
Wallapop MCP Server
Hybrid, unofficial MCP server for the Wallapop marketplace, built in TypeScript.
HTTP primary: reverse-engineered calls to the private
api.wallapop.comv3 endpointsSSR fallback:
__NEXT_DATA__scraping ofes.wallapop.compages (item details, seller profiles)Playwright fallback: off-screen headed browser as last resort (Wallapop's CDN blocks headless Chrome)
Authentication: optional email/password or browser-cookie import for favorites, saved searches, chat and offers (token refresh + session persistence)
Unofficial and unaffiliated. Uses Wallapop's undocumented API, which can change or block traffic at any time — use at your own risk, keep request volume low, and respect their Terms of Service.
Tools
Tool | Auth | Description |
| – | Keyword search with category / price / location / radius / sort filters, cursor pagination ( |
| – | Multi-query keyword scan with dedupe, price filtering and scam-flagging (shippable listings) |
| – | Full listing detail: description, condition, price, images, views, favorites, seller, shipping |
| – | Seller profile by id or web slug: rating (0–100), sold/published counts, registration date, location |
| – | Marketplace category tree with ids |
| – | Health / auth / browser-fallback status |
| required | Favorites by numeric id, web slug or item URL (API + browser fallback) |
| required | Saved search alerts |
| required | Chat inbox: other user, item, unread count, last message |
| required | Full message history of a conversation |
| required | Send a chat message (real-time channel) |
| required | Send a purchase offer (EUR) — seller gets it in chat and can accept/reject. Blocks in-person-only listings outside your pickup radius and reports the real total (offer + Wallapop protection + shipping) |
Related MCP server: Bazos-MCP
Quick start
git clone <this-repo>
cd WallpopMCP
npm install
npm run build
cp .env.example .env # fill in your keys (see Configuration)
npm run smoke # live sanity check against the APIConnect to an MCP client
# Claude Code (stdio)
claude mcp add wallapop -- node /absolute/path/to/WallpopMCP/dist/index.js# Inspector (browse tools interactively)
npm run inspectorConfiguration (.env, see .env.example)
Variable | Purpose |
| Enable auth tools (favorites, saved searches, chat, offers) |
| Optional JSON array of browser cookies ( |
| Default search location (Barcelona center) |
| Token/cookie persistence (default |
| Min delay between API calls (default 600) |
| Search results cap, 1–200 (default 200) |
| Your pickup location — |
| Wallapop protection fee % (≈8–10) and shipping fee (≈3–5) used to report the real total of an offer |
|
|
Note:
WALLAPOP_EMAIL/WALLAPOP_PASSWORDmay fail for accounts with MFA or Keycloak flows — in that case export cookies from a logged-in browser intoWALLAPOP_COOKIES_FILE(a JSON array of cookie objects) and the server will use them directly.
How it works
Search (two-step API flow)
GET /api/v3/search/components→search_idGET /api/v3/search/section(40 items/page) →meta.next_pageJWT; the server packssearch_id+ cursor into an opaquenextPagetoken so clients just pass it back.
Chat & offers
Messages are sent through the real-time channel (PubNub) and also land in the inbox API (
/bff/messaging/inbox) — both verified end-to-end.Offers are created via
POST /api/v3/delivery/buyer/offerswith a client-generated offer id; sellers receive them in the conversation.
Authentication
Tries
POST /api/v3/access/login→ stores access/refresh tokens + cookies to the session file, refreshes viaPOST /api/v3/access/refreshwhen the JWT is about to expire.Falls back to an automated browser login; MFA challenges are detected and surfaced as an error (complete it manually, then export cookies to
WALLAPOP_COOKIES_FILE).
Fallback chain
API request with browser-like headers, UA rotation, exponential back-off on 429, and
X-Signatureretry on 403SSR HTML scraping (
es.wallapop.com/item/...,/user/...) — richer data for sellers (ratings, counters)Off-screen headed Chrome via Playwright (captures
api.wallapop.comXHR responses) — Wallapop's CDN blocks headless mode, so never useWALLAPOP_BROWSER=chromiumwithout manual browser downloads;autoprefers installed Chrome/Edge
Notes and known limits
search_productsprice filtering (minPrice/maxPrice) and radius filtering (distance_in_km) are API-side parameters.favorite_listing/unfavorite_listinguse best-effort endpoint candidates — verify with your account; endpoints change.Item
conditionis only reliably available viaget_listing(search results usually omit it).Some sellers disable offers —
make_offersurfaces a 409 error in that case.
License
MIT — see LICENSE. Unofficial project, not affiliated with or endorsed by Wallapop.
Available Tools
6 toolsget_listingGet full listing detailsA
Get detailed information about a single Wallapop listing: description, condition, price, images, location, views, favorites, seller id, shipping options. Accepts the numeric listing id, a web slug, or a full item URL. Falls back to server-side rendering when the API fails.
| Name | Required | Description | Default |
|---|---|---|---|
| itemId | Yes | Listing id (numeric string), web slug, or full item URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It adds a useful behavioral detail: 'Falls back to server-side rendering when the API fails,' which is beyond the schema. However, it does not explicitly state that this is a read-only operation (though 'get' implies it) or mention any side effects, rate limits, or authentication requirements. The fallback is a positive addition, but coverage remains moderate.
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?
The description is two sentences, front-loaded with the core purpose and then quickly covering input variations and fallback behavior. Every sentence adds value with no repetition or fluff. It is appropriately sized for the tool's simplicity.
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?
Given the low complexity (single parameter, no output schema), the description is nearly complete. It lists the returned data fields, specifies accepted input formats, and mentions a fallback mechanism. It doesn't cover error cases or example responses, but for a straightforward fetch operation, this is sufficient. Slight deduction for not explicitly stating what happens on not-found or invalid input.
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%, so the parameter `itemId` is fully described in the schema as 'Listing id (numeric string), web slug, or full item URL.' The description simply repeats this information ('Accepts the numeric listing id, a web slug, or a full item URL') without adding new semantics. Baseline for high coverage is 3, and no extra value is provided beyond the schema.
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?
The description clearly states the tool's purpose: 'Get detailed information about a single Wallapop listing' and enumerates the specific fields (description, condition, price, images, etc.). This distinguishes it from siblings like get_seller, which focuses on seller data, and search_products, which is for searching. The verb 'get' and resource 'listing' are unambiguous.
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 description implies when to use this tool (when you need details of a single listing) and even provides flexible input formats (numeric id, slug, or URL). It does not explicitly exclude alternatives or mention when NOT to use it, but the context from sibling names and the clear purpose give sufficient guidance. The fallback note also hints at reliability handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sellerGet seller informationA
Get a Wallapop seller profile by numeric user id (from a listing) or by web slug (e.g. 'sergiof-462579195'): rating, review count, sold/published counts, registration date, location.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | Seller numeric id or web slug |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the burden of explaining behavior. It clearly states the output fields (rating, review count, etc.) and the two accepted input formats Dropdown. It does not mention errors or side effects, but for a get operation, this is adequate.
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?
The description is a single sentence that packs all essential info: what, how, and what you get. No fluff.
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?
Provides clear input and output details, but lacks any error handling or edge cases; still complete for typical usage.
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 'reference' is described in both the schema and the description, specifying it can be a numeric id or web slug, which is fully unambiguous.
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?
The description clearly states the tool gets a Wallapop seller profile using a numeric user id or web slug, and lists the specific fields returned (rating, counts, dates, location). This is specific to the seller resource and clearly differentiates from siblings like get_listing and search_products.
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 description explains the input format (numeric id or slug) and what to expect from the output, giving clear context for when to use this tool. It does not explicitly mention alternatives or when not to use it, but the scope is clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList Wallapop categoriesA
List all marketplace top-level categories with ids and subcategories.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states that it returns top-level categories with ids and subcategories, indicating a read-only operationhol, but it doesn't describe the exact structure or any potential variations, which is a minor gap.
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?
The description is a single concise sentence that efficiently conveys the tool's purpose. It loses a point for not being front-loaded with the action, but it's clear and to the point.
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?
Given that the tool has no parameters, no output schema, and the description provides a clear indication of what is returned (categories with ids and subcategories), the description is adequate. It could have mentioned whether the subcategories are nested or a flat list, but the description's level of detail is sufficient for an agent to use the tool correctly.
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 schema has zero parameters, and the schema coverage is 100%, so there are no parameters, and the description adds that it's a simple read operation. Since there are no parameters, the description explains the return format (ids and subcategories, which is the purpose, but it might be a simple operation. This is a simple read-only and the description. This is a simple read-only, but I'm not the memory of the context, but the schema covers all the 0 parameters and the description is clear, but it is a simple description. The description doesn't need to explain parameters beyond that, and it doesn't add much beyond the schema, but the schema itself is empty, so the description is the main source of parameter semantics, which it handles by describing what the tool returns, but not in terms of parameters. With 0 parameters, the baseline is 4 because there are no parameter details to provide, but the description could have mentioned the output format or usage. The description does state the output includes ids and subcategories, which is helpful for the agent knowing what to expect, so a 4 is appropriate.
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?
The description clearly states the tool lists all marketplace top-level categories with ids and subcategories, which is specific and distinguishes it from the sibling tools (search_products, get_listing, etc.).
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 description implies that this tool is used to obtain the full category tree, which is useful before searching or scanning. It doesn't explicitly mention when not to use it, but the purpose is clear in the context of the other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_productsScan multiple searches for phone candidatesA
Runs several keyword searches (default nationwide radius) and dedupes results, keeping only in-range, shippable listings and flagging suspicious ones (scam wording or book-slug retitled listings). Returns compact candidate list, ready for get_listing/verify.
| Name | Required | Description | Default |
|---|---|---|---|
| queries | Yes | Keyword/price-range combos to scan (deduped across queries) | |
| distanceKm | No | Search radius in km (default 1500 = all Spain) | |
| maxResultsPerQuery | No | Max results per query (default 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden and does a good job: it discloses deduplication, default nationwide radius, filtering to in-range/shippable listings, and suspicious-item flagging. It does not explicitly state that no data is modified, but 'scan' and 'returns compact candidate list' strongly imply a read-only pipeline.
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 cover the entire behavior without wasted words. The description is front-loaded with the core action and then provides filtering details and the downstream purpose.
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?
Given the tool's moderate complexity, no annotations, and no output schema, the description is complete enough: it states input behavior, filtering logic, output type, and downstream usage. It does not detail edge cases, but the essential context for selecting and invoking the tool is present.
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 schema already documents all parameters. The description adds modest value by explaining the default nationwide radius and the purpose of deduplication, which aligns with the queries array, but it does not add meaningful syntax or format details beyond the schema.
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?
The description uses a specific verb and resource: 'Runs several keyword searches' for phone candidates, and clearly distinguishes itself from a basic search by mentioning deduplication and filtering. It also differentiates from siblings by explicitly stating the output is ready for get_listing/verify.
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 description implies when to use this tool: when multiple keyword/price searches are needed and results should be deduped and filtered into a candidate list. It names downstream tools (get_listing/verify) but does not explicitly contrast with search_products or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsSearch Wallapop listingsA
Search Wallapop for products with optional filters: category, price range, location (latitude/longitude), radius, sort order. Paginate with the nextPage cursor returned. Reserved listings are filtered out. Returns up to maxResults listings (default 40, capped at 200).
| Name | Required | Description | Default |
|---|---|---|---|
| orderBy | No | Sort order | |
| keywords | Yes | Search keywords, e.g. 'iphone 15 pro' | |
| latitude | No | Search origin latitude (defaults to Barcelona center) | |
| maxPrice | No | Maximum price in EUR | |
| minPrice | No | Minimum price in EUR | |
| nextPage | No | Opaque pagination cursor from a previous search call | |
| longitude | No | Search origin longitude (defaults to Barcelona center) | |
| categoryId | No | Restrict to a category, see list_categories | |
| distanceKm | No | Search radius in km | |
| maxResults | No | Max results to return (default 40, capped 200) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that reserved listings are filtered out and that results are limited to maxResults (default 40, cap 200). It does not state whether the operation is read-only or mention authentication/rate limits, but for a search tool this is largely implicit. Slight deduction for missing explicit read-only declaration.
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?
The description is concise, consisting of two sentences that efficiently list filters, pagination, reserved-listings behavior, and result limits. No redundancy or unnecessary detail; well-structured for quick understanding.
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?
Despite having 10 parameters, the description, combined with the schema, covers all essential aspects: how to search (filters), pagination (nextPage cursor), data handling (reserved listings filtered out), and result limits. It does not mention error handling or authentication, but for a search tool these are typically standard and not required for completeness. The description is sufficient for a developer to use the tool effectively.
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 schema already provides clear descriptions for each parameter (e.g., latitude defaults to Barcelona center, maxPrice in EUR). The tool description adds context by grouping them as 'optional filters' and noting pagination via nextPage, but does not significantly expand on individual parameter meanings. Since schema coverage is 100% and descriptions are self-explanatory, the added value is moderate.
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?
The description clearly states the tool searches Wallapop for products with optional filters, using the specific verb 'Search' and resource 'Wallapop products'. It distinguishes from sibling tools like get_listing (single item) and scan_products (likely broader scan) by focusing on filtered 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?
The description provides concrete usage guidance: mentions optional filters, pagination via nextPage cursor, reserved listings being filtered out, and maxResults default/cap. It does not explicitly differentiate from alternatives like scan_products, but the filter and pagination details give clear context for when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusGet MCP server health and auth statusA
Returns whether the server is configured for public or authenticated use, whether a session is loaded, and whether browser fallback is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what information is returned (config, session, browser fallback) but does not disclose any side effects, read-only nature, or operational details. As a status check, it is likely read-only, but this is not stated. There is no mention of whether it performs network calls, requires auth, or has any side effects.
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?
The description is a single, concise sentence that efficiently lists the three key pieces of information returned. No waste; every clause adds value.
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?
While the description is adequate for a zero-parameter status tool, it does not provide any context about the response structure or how the status should be interpreted. For a health/auth status tool, an agent might benefit from knowing what 'browser fallback' means or how to act on the status, but the description meets the minimum viable level.
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 has zero parameters, which is fully disclosed by the empty schema. Since there are no parameters to describe, the description does not need to add parameter semantics. The baseline for 0 params is 4, and there is no missing information.
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?
The description clearly states what the tool does: returns server configuration status (public/authenticated), session load state, and browser fallback availability. It is specific about the resource (server status) and the information returned, distinguishing it from sibling tools which operate on products, listings, sellers, and categories.
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?
No guidance is provided on when to use this tool versus the sibling tools. It is implied that this is a diagnostic/utility tool, but the description does not explicitly state when an agent should check server status (e.g., before auth-dependent operations, to verify availability). The sibling tools are all product/catalog-related, so differentiation is clear, but the description lacks usage context.
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.
6 tool updates
v0.1.0- First observed
get_listing - First observed
get_seller - First observed
list_categories - First observed
scan_products - First observed
search_products - First observed
server_status
TDQS
Scored across 6 tools
Most tools are clearly distinct: search_products, get_listing, get_seller, list_categories, and server_status each target a different resource or action. The main ambiguity is between search_products and scan_products, though scan_products is clearly positioned as a specialized multi-keyword search with deduplication.
The naming pattern is largely consistent: search_products, get_listing, get_seller, list_categories, and scan_products all follow verb_noun naming. server_status breaks the pattern slightly by using a noun phrase instead of a get_ or status_ verb, but it is still readable and predictable.
Six tools is well-scoped for a marketplace browsing/searching MCP server. Each tool covers a meaningful capability without bloat, and the count feels appropriate for the server's purpose.
The core browsing flow is covered: search listings, get listing details, get seller profiles, and list categories. Minor gaps exist such as not being able to list a seller's active listings or perform authenticated actions, but those are not necessarily core to this server's stated scope.
Maintenance
Related MCP Connectors
Official SerpApi MCP server for Google, Bing, and other search engines.
Unofficial read-only MCP server for VeryChic hotel offers
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
Related MCP Servers
- AlicenseBqualityAmaintenanceMCP server for automating Xianyu (Goofish) marketplace operations: publish, manage items, handle IM messages, and more via CLI or AI agents.417463 PyPI206Apache 2.0
- AlicenseAqualityDmaintenanceMCP server for interacting with Bazos.cz, Bazos.sk, Bazos.at, and Bazos.pl. Supports searching ads, retrieving ad details, and fetching user ratings.328 npm2AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server for Vinted search and analysis that provides tools to search listings, fetch item details, inspect seller profiles, compare prices across countries, and surface trending items.69 npm10AGPL 3.0
- FlicenseBqualityCmaintenanceRead-only MCP server for WhatsApp Web allowing listing chats and reading recent messages, without sending or mutating WhatsApp state.36 npm-