vinted-mcp-server
Click on "Install 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., "@vinted-mcp-serversearch for vintage Levi's jeans under €50"
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.
vinted-mcp-server
A Model Context Protocol (MCP) server for interacting with the Vinted marketplace. Enables AI assistants to search, browse, and discover second-hand items on Vinted.
Features
Search items — Full-text search with filters (price, brand, size, color, condition, sort)
Item details — Full item info including description, photos, seller profile, and condition
User profiles — Seller ratings, reviews, item counts, and activity
User items — Browse all items listed by a specific user
Brand search — Find brand IDs for use in search filters
Rate limiting — Token bucket rate limiter to avoid API bans
Caching — In-memory LRU cache with TTL for fast repeated queries
Retry logic — Exponential backoff for transient errors
Session management — Puppeteer-based with Cloudflare bypass
Token-efficient — Concise markdown responses optimized for LLM consumption
Related MCP server: Saleor MCP Server
Quick Start
Prerequisites
Node.js 20+
Using npx (zero-install)
This server communicates via stdio (JSON-RPC) and is designed to be launched by an MCP client, not run directly in a terminal. Configure it in your MCP client as shown below.
Install from source
git clone https://github.com/Rbillon59/vinted-mcp-server.git
cd vinted-mcp-server
npm install
npm run buildUsage with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"vinted": {
"command": "npx",
"args": ["@rbillon59/vinted-mcp-server"],
"env": {
"VINTED_DOMAIN": "www.vinted.fr"
}
}
}
}{
"mcpServers": {
"vinted": {
"command": "node",
"args": ["/absolute/path/to/vinted-mcp-server/dist/index.js"],
"env": {
"VINTED_DOMAIN": "www.vinted.fr"
}
}
}
}Usage with Claude Code CLI
Add to your Claude Code settings (~/.claude/settings.json or project .mcp.json):
{
"mcpServers": {
"vinted": {
"command": "npx",
"args": ["@rbillon59/vinted-mcp-server"],
"env": {
"VINTED_DOMAIN": "www.vinted.fr"
}
}
}
}Usage with Cursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"vinted": {
"command": "npx",
"args": ["@rbillon59/vinted-mcp-server"]
}
}
}Usage with Docker
docker build -t vinted-mcp-server .
docker run -i --rm -e VINTED_DOMAIN=www.vinted.fr vinted-mcp-serverAvailable Tools
search_items
Search the Vinted catalog with filters.
Parameter | Type | Default | Description |
| string | (required) | Search text (e.g., "nike air max", "robe vintage") |
| number | 1 | Page number |
| number | 20 | Results per page (max: 96) |
| string | "relevance" | Sort: |
| number | — | Minimum price filter |
| number | — | Maximum price filter |
| string | — | Brand IDs (comma-separated) |
| string | — | Size IDs (comma-separated) |
| string | — | Color IDs (comma-separated) |
| string | — | Category IDs (comma-separated) |
| string | — | Condition: |
get_item_details
Get detailed information about a specific item.
Parameter | Type | Description |
| number | The Vinted item ID (from search results) |
Returns: title, price, description, brand, size, condition, colors, seller info (rating, location), photos, stats (views, favorites).
get_user_profile
Get a seller's profile information.
Parameter | Type | Description |
| number | The Vinted user ID (from search results or item details) |
Returns: username, rating, review breakdown, items listed/sold, location, member since, last active.
get_user_items
Browse all items listed by a specific user.
Parameter | Type | Default | Description |
| number | (required) | The Vinted user ID |
| number | 1 | Page number |
| number | 20 | Results per page |
search_brands
Search for brand names and get their IDs for use in search filters.
Parameter | Type | Description |
| string | Brand name to search (e.g., "Nike", "Zara") |
Configuration
Environment Variable | Default | Description |
|
| Vinted domain (e.g., |
| — | Custom Chrome/Chromium path for Puppeteer |
|
| Timeout for Cloudflare challenge resolution (ms) |
Supported Domains
Domain | Country |
| France |
| Germany |
| Spain |
| Italy |
| Netherlands |
| Belgium |
| Poland |
| Portugal |
| Lithuania |
| Czech Republic |
| United Kingdom |
Architecture
src/
index.ts # Entry point, stdio transport
server.ts # MCP server config & tool registration
tools/
search.ts # search_items tool
item.ts # get_item_details tool
user.ts # get_user_profile tool
user-items.ts # get_user_items tool
brands.ts # search_brands tool
api/
client.ts # HTTP client (session, cache, rate limit, retry)
session-provider.ts # Browser-based session (Cloudflare bypass)
browser-utils.ts # Shared Puppeteer/stealth utilities
types.ts # Vinted API response types
utils/
cache.ts # TTL cache with LRU eviction
rate-limiter.ts # Token bucket rate limiter
mcp-error.ts # Shared MCP error response builderReliability Features
Rate limiting: Token bucket (10 req/10s) prevents API bans
Caching: LRU cache (3min TTL, 200 entries max) reduces redundant requests
Retry: Exponential backoff (1s, 2s) on 429/5xx errors
Session recovery: Automatic cookie refresh on 401/403 with request coalescing
Request deduplication: Concurrent identical requests share a single API call
Cloudflare bypass: Puppeteer with stealth plugin for session acquisition
License
MIT
Available Tools
5 toolsget_item_detailsB
Get detailed information about a specific Vinted item including description, photos, seller info, and condition.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | The Vinted item ID (from search results) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It doesn't state whether this is a read operation, what happens if an item is unavailable or deleted, whether authentication is required, or any rate-limit considerations. For a GET-style detail tool it's a modest gap, but with zero annotation coverage the description should provide more.
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, compact sentence that is front-loaded with the purpose and lists the key content areas. No redundancy or filler. Could be slightly more specific but is appropriately concise for the scope of the tool.
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?
The tool is simple (one param, no output schema, no nested objects), and the description covers what the tool retrieves. However, without annotations or behavioral details, the completeness relies on the tool being straightforward. It's adequate for the low complexity but doesn't add the depth that would push it higher.
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 is already documented with type, exclusiveness constraint, and provenance ('from search results'). The description itself doesn't add information about item_id, but the schema fully covers it. Baseline 3 is appropriate since schema does the heavy lifting and the description needs no compensation.
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 verb ('Get detailed information about') with a specific resource ('a specific Vinted item') and names concrete content areas (description, photos, seller info, condition). This is specific enough to distinguish from siblings like search_items (listing/search) and get_user_profile (user-focused).
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 a single-item lookup context but doesn't explicitly state when to use it vs alternatives. It's clear this is for retrieving full details on an already-known item (the item_id param says 'from search results'), but no explicit exclusions or alternative guidance is given. Reasonable but implied usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_itemsB
List items currently for sale by a specific Vinted user/seller.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| order | No | Sort order | newest_first |
| user_id | Yes | The Vinted user ID | |
| per_page | No | Results per page (default: 20, max: 96) |
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 of behavioral disclosure. It doesn't mention pagination behavior, total result counts, whether only active listings are returned, ordering of results by default, potential rate limits, or whether this requires the seller to be public/authenticated. For a read tool with zero annotation coverage, 'currently for sale' hints at status filtering but leaves much undisclosed.
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, efficient sentence that conveys the core purpose without filler. It could arguably add a brief usage note, but the current length is appropriate and front-loaded.
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 listing tool with full schema coverage, the description is functional. However, with no annotations and no output schema, it would benefit from noting pagination/aggregate behavior and the default ordering (newest_first). It's adequate but leaves behavioral details undocumented.
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%, with each of the 4 parameters having a description. The description adds context that the items are 'currently for sale', which implies a listing-status filter, but doesn't add meaning beyond what the schema provides. Baseline 3 is appropriate given full schema coverage.
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 ('List') with a clear resource ('items currently for sale') and identifies the scope ('by a specific Vinted user/seller'). It distinguishes from siblings like search_items (global search) and get_item_details (single item lookup), though it doesn't explicitly name them.
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 clarifies this is for a specific seller's current listings, which implicitly contrasts with the global search_items tool. However, it doesn't explicitly state when-not-to-use or name alternative tools for related tasks like browsing a user's sold/archived items or getting all items across sellers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_profileB
Get a Vinted user's profile including ratings, reviews, number of items, and activity.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The Vinted user ID (from search results or item details) |
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 of behavioral disclosure. It states what data is returned (ratings, reviews, item count, activity) but does not mention authentication requirements, rate limits, whether the user must exist, what happens on error for invalid IDs, or any pagination/truncation behavior for reviews.
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?
Efficient single sentence that packs useful specifics about return content. No wasted words. Could arguably be slightly richer given the behavioral gaps, but as written it is well-structured and front-loaded.
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?
The tool is simple (1 param, no output schema, no nested objects), so the baseline need is modest. The description communicates the return contents adequately. However, without annotations, behavioral details like error handling for nonexistent users or auth requirements are absent, leaving some gaps for a data-fetch tool.
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% and the user_id parameter already has a clear description ('Vinted user ID from search results or item details'). The description adds that this yields profile data but does not add meaning beyond what the schema's parameter description provides. Baseline 3 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?
Clear verb+resource ('Get a Vinted user's profile') with specific detail on content (ratings, reviews, number of items, activity). Distinguishes from sibling tools like get_user_items which fetches user's item listings, and get_item_details which targets individual items.
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 context (fetching a user profile) but does not explicitly state when to use this vs alternatives, or when not to use it. The sibling get_user_items is related but not referenced as an alternative. No explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_brandsA
Search for Vinted brand IDs by name. Use the returned IDs with the brand_ids filter in search_items.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Brand name to search for (e.g., 'Nike', 'Zara') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It states the tool is a read-only lookup that returns IDs, which strongly implies a non-destructive search operation. It also discloses the downstream consumption pattern (feeding into search_items). While it doesn't mention match behavior (partial vs exact, result count/format), the read-only nature is reasonably implied and the integration context is disclosed.
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 waste. It states the purpose and the downstream usage in one compact paragraph. Every word 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 single-parameter lookup tool with no output schema, the description is largely complete: it states the purpose, the parameter usage, and how the result is consumed. It could optionally note whether results are paginated or whether partial matches are supported, but for a simple brand lookup the current level of detail is adequate.
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 schema already fully documents the single 'query' parameter, including a placeholder example ('Nike', 'Zara'). The description adds no additional parameter semantics beyond what the schema documents, 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?
The description uses a specific verb+resource ('Search for Vinted brand IDs by name') and clearly distinguishes itself from siblings: it returns brand IDs, which are meant to be used with the 'brand_ids' filter in search_items. This clearly positions it as a lookup/support tool distinct from the item/user tools among its siblings.
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 explicitly states when to use the tool (searching brand IDs by name) and importantly tells the agent how the output is consumed ('Use the returned IDs with the brand_ids filter in search_items'). This provides clear guidance on the integration point with sibling tools, effectively serving as an explicit usage instruction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_itemsB
Search for items on the Vinted marketplace. Returns a list of items matching the query with prices, brands, sizes, and seller info.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| order | No | Sort order | relevance |
| query | Yes | Search query (e.g., 'nike air max', 'robe vintage') | |
| per_page | No | Results per page (default: 20, max: 96) | |
| price_to | No | Maximum price filter | |
| size_ids | No | Size IDs (comma-separated) | |
| brand_ids | No | Brand IDs (comma-separated) | |
| color_ids | No | Color IDs (comma-separated) | |
| price_from | No | Minimum price filter | |
| status_ids | No | Condition IDs (comma-separated): 6=New with tags, 1=New, 2=Very good, 3=Good, 4=Satisfactory | |
| catalog_ids | No | Catalog/category IDs (comma-separated) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does note the tool 'Returns a list of items' which implies a read-only operation, but it doesn't disclose max page depth, rate limits, result count caps, or pagination behavior beyond what the schema already states. Adequate but not rich.
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 efficient sentence that states purpose and return content in under 25 words with zero wasted text. It's front-loaded with the action verb and resource. Could marginally add sibling differentiation but is otherwise concise.
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 11 parameters and no output schema, the description covers the high-level purpose but misses any guidance on how the filters interact or what the default behavior is. Given good schema coverage and no nested objects, a full 'list' tool with pagination is moderately complex; the description is acceptable but would benefit from noting that filters combine additively or similar.
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%, hitting the >80% baseline for a score of 3. All 11 parameters already have individual descriptions in the schema, so the tool description adds little param-level value. However, the status_ids parameter uses inline-code style for the enum mapping which is already embedded in the schema, so no compensatory info is needed.
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+resource ('Search for items on the Vinted marketplace') and clearly distinguishes its purpose from siblings like get_item_details, get_user_profile, and search_brands. It also summarizes the return set (prices, brands, sizes, seller info), making the tool's scope immediately obvious.
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 gives no guidance on when to use this tool versus its siblings. There's no mention of alternatives (e.g., search_brands for brand lookups, get_item_details for single-item info) or exclusions. Placement of intended use is absent.
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. Dates show when Glama detected each change.
5 tool updates
v0.2.0- First observed
get_item_details - First observed
get_user_items - First observed
get_user_profile - First observed
search_brands - First observed
search_items
TDQS
Each tool targets a clearly distinct resource-action combination: items, users, and brands are well separated, with search_items vs get_item_details vs get_user_items vs get_user_profile all serving unambiguous purposes. The only minor overlap is between search_items and get_user_items, but one is marketplace-wide search and the other lists a specific seller's inventory, making them readily distinguishable.
The naming follows a consistent verb_noun pattern (get_*, search_*) throughout. All tools use snake_case with clear verbs and nouns. The minor inconsistency is that search_items and search_brands use 'search' while the retrievals use 'get', but this is a coherent and predictable convention.
Five tools is at the lower end but reasonable for a read-only marketplace browse server. Each tool has a distinct role and none feels redundant. The count is slightly thin for the full Vinted scope, but arguably appropriate for a focused browsing/search-focused integration.
The tool surface covers core marketplace operations: search items, view item details, and browse user profiles/items. However, there are notable gaps—no ability to filter/favorite/save items, no transaction or purchase workflow, and no ability to search/filter by categories beyond brands. The brand search is a useful supporting tool for search_items.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A Model Context Protocol server for Wix AI tools
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Furgonetka MCP Server is an extension for LLMs (such as Claude) that integrates AI assistants with Poland's most popular courier brokerage platform. The server enables models to interact directly with services from various couriers (including InPost, DPD, DHL, UPS, and Poczta Polska) through a single, unified interface. With this integration, your AI stops just "writing about logistics" and starts actually managing it.
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
Related MCP Servers
- AlicenseCqualityCmaintenanceA Model Context Protocol server enabling product searches across e-commerce platforms, price history tracking, and product specification-based searches using natural language prompts.219MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to interact with Saleor e-commerce data including products, orders, customers, and more.3-
- AlicenseAqualityAmaintenanceEnables AI assistants to search secondhand marketplaces (Facebook Marketplace, eBay, Depop, Poshmark) for used items with filters like price, condition, size, and color.320864MIT
- 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.1238AGPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rbillon59/vinted-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server