Wallapop MCP Server
Wallapop MCP Server
为 Wallapop 市场构建的混合型非官方 MCP 服务器,使用 TypeScript 编写。
HTTP 主通道:对私有
api.wallapop.comv3 端点进行逆向工程调用SSR 回退:抓取
es.wallapop.com页面中的__NEXT_DATA__(商品详情、卖家资料)Playwright 回退:最后手段是使用屏幕外的有头浏览器(Wallapop 的 CDN 会阻止无头 Chrome)
身份验证:可选邮箱/密码或浏览器 Cookie 导入,用于收藏、已保存搜索、聊天和出价(令牌刷新 + 会话持久化)
非官方且与 Wallapop 无关联。使用 Wallapop 未记录的 API,该 API 可能随时更改或阻止流量——请自行承担使用风险,保持较低的请求量,并遵守其服务条款。
工具
工具 | 认证 | 描述 |
| – | 关键词搜索,支持类别 / 价格 / 位置 / 半径 / 排序筛选,游标分页( |
| – | 多关键词扫描,支持去重、价格筛选和诈骗标记(可配送商品) |
| – | 完整商品详情:描述、成色、价格、图片、浏览量、收藏数、卖家、配送 |
| – | 按 id 或网页 slug 获取卖家资料:评分(0–100)、已售/在售数量、注册日期、位置 |
| – | 带 id 的市场类别树 |
| – | 健康 / 认证 / 浏览器回退状态 |
| 必需 | 按数字 id、网页 slug 或商品 URL 收藏/取消收藏(API + 浏览器回退) |
| 必需 | 已保存的搜索提醒 |
| 必需 | 聊天收件箱:对方用户、商品、未读数、最后一条消息 |
| 必需 | 某个会话的完整消息历史 |
| 必需 | 发送聊天消息(实时通道) |
| 必需 | 发送购买出价(EUR)——卖家会在聊天中收到,并可接受/拒绝 |
Related MCP server: Bazos-MCP
快速开始
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 API连接到 MCP 客户端
# Claude Code (stdio)
claude mcp add wallapop -- node /absolute/path/to/WallpopMCP/dist/index.js# Inspector (browse tools interactively)
npm run inspector配置(.env,参见 .env.example)
变量 | 用途 |
| 启用认证工具(收藏、已保存搜索、聊天、出价) |
| 可选:从已登录会话导出的浏览器 Cookie 的 JSON 数组( |
| 默认搜索位置(巴塞罗那市中心) |
| 令牌/Cookie 持久化(默认 |
| API 调用之间的最小延迟(默认 600) |
| 搜索结果上限,1–200(默认 200) |
|
|
注意:对于启用 MFA 或 Keycloak 流程的账户,
WALLAPOP_EMAIL/WALLAPOP_PASSWORD可能会失败——在这种情况下,请从已登录的浏览器中将 Cookie 导出到WALLAPOP_COOKIES_FILE(一个 Cookie 对象的 JSON 数组),服务器将直接使用它们。
工作原理
搜索(两步 API 流程)
GET /api/v3/search/components→search_idGET /api/v3/search/section(每页 40 条)→meta.next_pageJWT;服务器将search_id+ 游标打包成一个不透明的nextPage令牌,客户端只需将其传回即可。
聊天与出价
消息通过实时通道(PubNub)发送,同时也会进入收件箱 API(
/bff/messaging/inbox)——两者均已端到端验证。出价通过
POST /api/v3/delivery/buyer/offers创建,使用客户端生成的出价 id;卖家会在会话中收到。
身份验证
尝试
POST /api/v3/access/login→ 将访问/刷新令牌 + Cookie 存储到会话文件中,当 JWT 即将过期时通过POST /api/v3/access/refresh刷新。回退到自动化浏览器登录;检测到 MFA 挑战时会作为错误提示(请手动完成,然后将 Cookie 导出到
WALLAPOP_COOKIES_FILE)。
回退链
API 请求,使用类似浏览器的请求头、UA 轮换、429 时指数退避,以及 403 时
X-Signature重试SSR HTML 抓取(
es.wallapop.com/item/...、/user/...)——为卖家提供更丰富的数据(评分、计数)通过 Playwright 使用屏幕外的有头 Chrome(捕获
api.wallapop.com的 XHR 响应)——Wallapop 的 CDN 会阻止无头模式,因此切勿在未手动下载浏览器的情况下使用WALLAPOP_BROWSER=chromium;auto优先使用已安装的 Chrome/Edge
注意事项与已知限制
search_products的价格筛选(minPrice/maxPrice)和半径筛选(distance_in_km)是 API 侧参数。favorite_listing/unfavorite_listing使用尽力而为的候选端点——请用你的账户验证;端点会变化。商品的
condition只能通过get_listing可靠获取(搜索结果通常会省略它)。部分卖家会禁用出价——此时
make_offer会返回 409 错误。
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
Your own WhatsApp as an MCP server: read, search and send from any MCP client.
Official SerpApi MCP server for Google, Bing, and other search engines.
MCP server for Muovi, Argentina's trust-first local services marketplace: find pros, draft tasks.
Related MCP Servers
- AlicenseBqualityAmaintenanceMCP server for automating Xianyu (Goofish) marketplace operations: publish, manage items, handle IM messages, and more via CLI or AI agents.17259 PyPI297Apache 2.0
- AlicenseAqualityBmaintenanceMCP server for interacting with Bazos.cz, Bazos.sk, Bazos.at, and Bazos.pl. Supports searching ads, retrieving ad details, and fetching user ratings.3240 npm4AGPL 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.116 npm17AGPL 3.0
- FlicenseBqualityDmaintenanceRead-only MCP server for WhatsApp Web allowing listing chats and reading recent messages, without sending or mutating WhatsApp state.312 npm-