Skip to main content
Glama
Rbillon59

vinted-mcp-server

by Rbillon59

vinted-mcp-server

CI

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 build

Usage 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-server

Available Tools

search_items

Search the Vinted catalog with filters.

Parameter

Type

Default

Description

query

string

(required)

Search text (e.g., "nike air max", "robe vintage")

page

number

1

Page number

per_page

number

20

Results per page (max: 96)

order

string

"relevance"

Sort: relevance, price_low_to_high, price_high_to_low, newest_first

price_from

number

Minimum price filter

price_to

number

Maximum price filter

brand_ids

string

Brand IDs (comma-separated)

size_ids

string

Size IDs (comma-separated)

color_ids

string

Color IDs (comma-separated)

catalog_ids

string

Category IDs (comma-separated)

status_ids

string

Condition: 6=New with tags, 1=New, 2=Very good, 3=Good, 4=Satisfactory

get_item_details

Get detailed information about a specific item.

Parameter

Type

Description

item_id

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

user_id

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

user_id

number

(required)

The Vinted user ID

page

number

1

Page number

per_page

number

20

Results per page

search_brands

Search for brand names and get their IDs for use in search filters.

Parameter

Type

Description

query

string

Brand name to search (e.g., "Nike", "Zara")

Configuration

Environment Variable

Default

Description

VINTED_DOMAIN

www.vinted.fr

Vinted domain (e.g., www.vinted.de, www.vinted.es, www.vinted.it)

PUPPETEER_EXECUTABLE_PATH

Custom Chrome/Chromium path for Puppeteer

BROWSER_TIMEOUT_MS

30000

Timeout for Cloudflare challenge resolution (ms)

Supported Domains

Domain

Country

www.vinted.fr

France

www.vinted.de

Germany

www.vinted.es

Spain

www.vinted.it

Italy

www.vinted.nl

Netherlands

www.vinted.be

Belgium

www.vinted.pl

Poland

www.vinted.pt

Portugal

www.vinted.lt

Lithuania

www.vinted.cz

Czech Republic

www.vinted.co.uk

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 builder

Reliability 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 tools
get_item_detailsB

Get detailed information about a specific Vinted item including description, photos, seller info, and condition.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesThe Vinted item ID (from search results)

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
orderNoSort ordernewest_first
user_idYesThe Vinted user ID
per_pageNoResults per page (default: 20, max: 96)

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_idYesThe Vinted user ID (from search results or item details)

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesBrand name to search for (e.g., 'Nike', 'Zara')

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default: 1)
orderNoSort orderrelevance
queryYesSearch query (e.g., 'nike air max', 'robe vintage')
per_pageNoResults per page (default: 20, max: 96)
price_toNoMaximum price filter
size_idsNoSize IDs (comma-separated)
brand_idsNoBrand IDs (comma-separated)
color_idsNoColor IDs (comma-separated)
price_fromNoMinimum price filter
status_idsNoCondition IDs (comma-separated): 6=New with tags, 1=New, 2=Very good, 3=Good, 4=Satisfactory
catalog_idsNoCatalog/category IDs (comma-separated)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

  1. 5 tool updatesv0.2.0
    • First observedget_item_details
    • First observedget_user_items
    • First observedget_user_profile
    • First observedsearch_brands
    • First observedsearch_items

TDQS

A3.6/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables AI assistants to interact with Saleor e-commerce data including products, orders, customers, and more.
    3
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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.
    123
    8
    AGPL 3.0

Latest Blog Posts

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