Skip to main content
Glama
googlarz

Vinted MCP and CLI Server

πŸ›οΈ Vinted MCP & CLI Server

Give your AI assistant access to Vinted β€” search, compare prices, and track sellers across 19 countries.

npm version CI License: MIT Node β‰₯18


The idea

Vinted has no public API. This package bridges that gap β€” it lets AI assistants talk directly to Vinted via the Model Context Protocol.

Connect it to Claude, Cursor, or any MCP-compatible assistant and just ask:

"Find me a North Face jacket under €60 in Germany, good condition or better"

"Compare prices for Air Jordan 1s across France, Italy and the UK"

"What is seller #123456 currently selling? Anything under €20?"

The AI figures out which filters to use, calls Vinted, and gives you a real answer β€” no searching, no filtering, no tabs.

Also ships as a CLI tool and TypeScript library for direct use.


Related MCP server: qontoctl

What is this?

An MCP server, CLI tool, and TypeScript library for the Vinted secondhand marketplace. No official API β€” it bootstraps a session cookie from the public catalog page and calls the private JSON API the Vinted web app uses internally.

  • πŸ€– MCP server β€” plug into Claude, Cursor, or any AI assistant with MCP support

  • πŸ–₯️ CLI tool β€” pipe results, watch for new listings, compare prices from your terminal

  • πŸ“¦ TypeScript library β€” import opSearch, opCompare, etc. directly in your code


Install

npm install -g @googlarz/vinted-client

Or run without installing:

npx -y -p @googlarz/vinted-client vinted search "levis 501"

CLI Quick Start

# Search (JSON by default)
vinted search "levi's 501" --country fr

# Pretty table
vinted search "levi's 501" --country de --output table

# Filter by price, brand, condition
vinted search "adidas samba" \
  --price-min 20 --price-max 80 \
  --brand adidas \
  --condition new_with_tags,very_good \
  --output table

# Watch for new listings every 30s (minimum 5)
vinted search "air jordan 1" --watch 30

# Walk all pages and collect up to 500 results
vinted search "vintage denim" --all --max-items 500

# Get a specific item (ID or URL)
vinted item 1234567
vinted item https://www.vinted.fr/items/1234567

# Seller profile + active listings
vinted seller 987654
vinted seller-items 987654 --output table

# Cross-country price comparison (6 countries by default)
vinted compare "north face jacket" --output table

# Browse category tree
vinted categories --query shoes --output table

# Look up brand IDs
vinted brands "stone island"

# What's trending right now
vinted trending --country fr --output table

# Resolve size labels to IDs, or let search do it for you
vinted sizes M L XL --country de
vinted search "levi 501" --size M,L
vinted search "levi 501" --size-ids 206,207,208

# Filter by color (name auto-resolved)
vinted search "north face jacket" --color black --country fr

# Cross-country compare with filters (size M only)
vinted compare "adidas samba" --size-ids 103 --all-countries --output table

# Seller due-diligence
vinted feedback 987654 --country fr --output table

# Browse colors and size groups
vinted colors --output table
vinted size-groups --output table

Commands

Command

Description

search <query>

Search listings with full filter support

item <id|url>

Get full item detail

seller <id>

Seller profile

seller-items <id>

Items a seller has for sale

feedback <id>

Seller/buyer reviews (paginated)

compare <query>

Price comparison across countries with optional filters

brands <query>

Look up brand IDs by name

categories

Browse the category tree

colors

List all color options with IDs

size-groups

List all size groups with IDs

sizes <labels...>

Resolve size labels ("M", "42") to numeric IDs

trending

Newest / trending listings

debug

Inspect session cookie names (--show-cookie to print values)

Global flags

Flag

Description

--output json|table

Output format (default: json)

--country <cc>

Country code (see below)

--proxy <url>

HTTP/HTTPS proxy (also: VINTED_PROXY_URL)

--no-cache

Disable response cache

Search flags

Flag

Description

--price-min / --price-max

Price range

--brand <names>

Brand names (auto-resolved to IDs)

--brand-ids <ids>

Comma-separated brand IDs

--category-id <n>

Category ID (vinted categories to browse)

--size <labels>

Size labels (auto-resolved to IDs, e.g. --size M,L or --size 42,43)

--size-ids <ids>

Comma-separated size IDs (vinted sizes M L to resolve)

--color-ids <ids>

Comma-separated color IDs (vinted colors to browse)

--color <names>

Color names (auto-resolved to IDs, e.g. --color black,white)

--condition <list>

new_with_tags, new_without_tags, very_good, good, satisfactory

--sort <s>

relevance, price_low_to_high, price_high_to_low, newest_first

--all

Walk pages and collect all results

--max-items <n>

Cap for --all (default 1000)

--watch [interval]

Poll every N seconds for new listings (default 60s, minimum 5s)

Result limits. Vinted serves search results in fixed pages of 96, so --limit only truncates a page, and at most 960 results are reachable per query. Search results carry the listing's brand, size and condition as Vinted displays them (localised to the country site, e.g. "Très bon état") and the seller's numeric ID but not the username — use vinted item <id> or vinted seller <id> for that. Vinted's catalog has no date filter, so there is no --date-from/--date-to; use --sort newest_first.


Supported Countries

fr de uk it es nl pl pt be at lt cz sk hu ro hr fi dk se


MCP Server

Drop Vinted into any MCP-compatible AI assistant (Claude, Cursor, etc.).

Setup β€” Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "vinted": {
      "command": "npx",
      "args": ["-y", "-p", "@googlarz/vinted-client", "vinted-mcp"]
    }
  }
}

Setup β€” Claude Code

claude mcp add vinted -- npx -y -p @googlarz/vinted-client vinted-mcp

MCP Tools

Tool

Description

search_items

Search with full filter support (brand, size, color, condition, price)

search_all_items

Like search_items but auto-paginates and returns all results

get_new_items

Newest listings for a query; pass the previous latestId as afterId to get only what is new

get_item

Item detail by ID or URL

get_seller

Seller profile

get_seller_items

Active listings for a seller

get_seller_feedback

Paginated buyer/seller reviews with star ratings

compare_prices

Multi-country price stats (median, mean, stdDev, min, max) with filters

get_trending

Trending / newest listings

search_brands

Brand lookup β€” returns IDs for use in filters

get_categories

Category tree β€” returns IDs for use in filters

get_colors

All color options with hex codes and IDs

get_size_groups

All size groups with IDs (Women's, Men's, Shoes, Kids…)

resolve_size_ids

Resolve size labels ("M", "42", "XL") to numeric filter IDs

resolve_color_ids

Resolve color names ("black", "navy blue") to numeric filter IDs

Brand, size and color names passed to search_items, search_all_items, get_new_items and compare_prices are resolved automatically. If none of the names resolve the call fails (rather than silently searching unfiltered); if only some do, the result includes a warnings array. Browser mode for get_item is not available to MCP callers β€” the server operator enables it with VINTED_BROWSER=1.

MCP over HTTP

By default the server speaks stdio. For a network transport:

VINTED_MCP_TRANSPORT=http VINTED_MCP_TOKEN=choose-a-long-random-secret npx -y -p @googlarz/vinted-client vinted-mcp
# listens on http://127.0.0.1:3001/mcp β€” send `Authorization: Bearer <token>`

Without VINTED_MCP_TOKEN the server only accepts loopback Host headers and rejects browser (Origin) requests, and it refuses to bind to a non-loopback VINTED_MCP_HOST. Set a token whenever the port is reachable by anything you don't fully trust.

MCP Prompts

Built-in prompt templates for common workflows β€” use them from any MCP-compatible client:

Prompt

Arguments

Description

find-bargains

query, country?, maxPrice?

Find items priced below the median β€” highlights potential deals

seller-check

sellerId, country?

Due-diligence check β€” profile, reviews, listings

price-comparison

query

Rank all countries by median price, recommend cheapest market

wardrobe-hunt

brand, size?, color?, country?

Brand + size + color search with auto-resolved IDs

Example prompts once connected:

"Find me Nike Air Max 95s under €70 in Germany, size 43, very good condition"

"Compare prices for a North Face puffer jacket across France, Germany and Italy"

"Is seller #987654 trustworthy? Check their reviews and listings."

"Find black Levi's 501 jeans size 32 β€” use the wardrobe-hunt prompt"


Library Usage

import { VintedClient, opSearch, opCompare, opSearchAll, opGetNewItems } from '@googlarz/vinted-client';

const client = new VintedClient();

// Basic search
const results = await opSearch(client, {
  query: 'levi\'s 501',
  country: 'de',
  priceMax: 50,
  condition: ['very_good', 'good'],
  sortBy: 'price_low_to_high',
});

console.log(results.items);

// Collect all pages concurrently (3-page prefetch window)
const all = await opSearchAll(client, {
  query: 'vintage band tee',
  country: 'uk',
  maxItems: 300,
});

// Multi-country price comparison (report.failed lists countries that errored)
const report = await opCompare(client, {
  query: 'air jordan 1 retro',
  countries: ['fr', 'de', 'uk', 'it'],
});

// Poll for new listings: keep the cursor between calls
let cursor: number | undefined;
const fresh = await opGetNewItems(client, { query: 'air jordan 1', country: 'fr', afterId: cursor });
cursor = fresh.latestId ?? cursor;

Client options

const client = new VintedClient({
  proxyUrl: 'http://proxy:8080',   // or VINTED_PROXY_URL env var
  cacheTtlMs: 60_000,              // response cache TTL (0 = disable)
  rateLimitPerSec: 3,              // requests/sec per country
  rateLimitBurst: 6,               // burst capacity
  timeoutMs: 20_000,               // per-request timeout
});

How it works

Vinted has no public API. This library:

  1. Bootstraps a session by hitting vinted.{cc}/catalog and capturing the auth cookies the Vinted frontend sets (one bootstrap per country, shared by concurrent requests).

  2. Reads search results from the catalog page. Vinted removed its JSON catalog endpoint; the server-rendered /catalog page embeds the result list in its Next.js payload, which is parsed here. Sellers, feedback, brands, colors and sizes still come from the private JSON API (/api/v2/...).

  3. Re-bootstraps automatically on 401 β€” tokens expire, the library recovers silently.

  4. Rate-limits per country with a token bucket (configurable burst + refill) to avoid 429s.

  5. Caches responses with LRU+TTL β€” 60s for search results, 1h for static data like categories (kept in a separate cache so searches cannot evict it). Identical concurrent requests share one network call.

  6. Falls back to HTML scraping for item pages blocked by DataDome (JSON-LD + regex extraction).

  7. Prefetches 3 pages concurrently in opSearchAll to maximise throughput within the rate-limit budget.


Proxy support

If Vinted blocks your IP (common on cloud VMs and CI), set a proxy:

VINTED_PROXY_URL=http://user:pass@proxy:8080 vinted search "nike"
# or
vinted search "nike" --proxy http://user:pass@proxy:8080

Standard HTTPS_PROXY / HTTP_PROXY env vars are also respected.


Environment variables

Variable

Description

VINTED_PROXY_URL

HTTP/HTTPS proxy URL

VINTED_CACHE_TTL_MS

Cache TTL in ms (default 60000)

VINTED_RATE_LIMIT_PER_SEC

Requests per second per country (default 3)

VINTED_RATE_LIMIT_BURST

Token bucket burst size (default 6)

VINTED_BROWSER

Set to 1 to use stealth browser for item detail (at most 2 browsers run at once)

VINTED_MCP_TRANSPORT

http to serve MCP over HTTP instead of stdio

VINTED_MCP_TOKEN

Bearer token required by the HTTP transport (mandatory for non-loopback hosts)

VINTED_MCP_HOST / VINTED_MCP_PORT / VINTED_MCP_PATH

HTTP bind address (default 127.0.0.1), port (3001) and path (/mcp)


Requirements

  • Node.js β‰₯ 18

  • Optional: playwright + puppeteer-extra-plugin-stealth for --browser / VINTED_BROWSER=1 mode


License

MIT Β© googlarz


Available Tools

15 tools
compare_pricesA

Compare prices for a search query across multiple Vinted country sites simultaneously. Returns median, mean, stdDev, min, max, and sample count per country along with the local currency. Supports the same brand/size/color/condition filters as search_items for precise cross-country comparisons. Useful for finding the cheapest market or understanding cross-border price gaps.

NameRequiredDescriptionDefault
brandNoBrand names; automatically resolved to IDs
limitNoNumber of listings to sample per country. Higher values give more accurate statistics (max 96).
queryYesItem to compare prices for, e.g. "Levi 501 jeans" or "iPhone 14 case"
sizeIdsNoSize IDs to filter by (from resolve_size_ids)
brandIdsNoNumeric brand IDs to filter by (from search_brands)
colorIdsNoColor IDs to filter by (from get_colors)
conditionNoItem condition filter
countriesNoList of country codes to compare. Defaults to ["fr","de","it","es","nl","pl"] if omitted.
categoryIdNoCategory ID from get_categories

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It helpfully enumerates the return shape (median, mean, stdDev, min, max, sample count, local currency), but says nothing about the cost profile of fanning out to as many as 19 countries or any rate/perf implications.

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?

Three front-loaded sentences with no filler; the core action and scope come first. There is mild redundancy between "precise cross-country comparisons" and "cross-border price gaps," which keeps it just short of a 5.

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 9-parameter tool with no output schema and no annotations, the description does solid work: it explains the aggregate return values, the filter parity with search_items, and the analytical purpose. Minor gaps remain around sampling cost and defaults, but an agent has enough to call it correctly.

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 all nine parameters are already documented in the schema, making 3 the baseline. The description adds a useful cross-reference (same filters as search_items) but no parameter-level syntax or format detail beyond that.

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?

States a specific verb (compare), resource (prices), and scope (across multiple Vinted country sites simultaneously). An agent can immediately distinguish this from search_items, which surfaces listings rather than aggregate statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the use case ("finding the cheapest market or understanding cross-border price gaps") and cross-references search_items for the shared filter set. It lacks an explicit when-not condition, but the context is clearly established.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_categoriesA

Fetch the full Vinted category tree for a country. Returns a flat list of all categories and subcategories with their numeric IDs, names, parent IDs, and item counts. Pass a categoryId to search_items or search_all_items to restrict results to a department (e.g. women's clothing, men's shoes, electronics). Results are cached for 1 hour.

NameRequiredDescriptionDefault
queryNoOptional keyword filter on category name, e.g. "shoes" or "dress"
countryNoCountry site to fetch categories for (category IDs are consistent across countries)fr

TDQS

A4/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 burden. It discloses caching behavior (1 hour) and the return structure. However, it does not mention idempotency, rate limits, or authentication requirements. The description adds value beyond the schema but lacks some behavioral depth.

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?

The description is two sentences, front-loaded with the main action, and every sentence adds value. It efficiently explains purpose, usage, and caching without unnecessary detail.

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?

The description covers the tool's purpose, return fields, caching, and integration with sibling tools. Given the simple input schema and no output schema, it provides sufficient context for an agent to use the tool correctly. Minor gaps like error handling are not critical.

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?

Input schema has 100% coverage with clear descriptions for country and query. The description does not add new semantic information about the parameters beyond what is in the schema. According to the guidelines, baseline is 3 when coverage is high, and the description does not enhance it further.

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 tool fetches the full Vinted category tree for a country, listing the return fields (IDs, names, parent IDs, item counts). It is specific and distinguishes from sibling tools like search_brands or get_size_groups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to get categories for a country) and how to use the output (pass categoryId to search_items/search_all_items). It does not explicitly state when not to use it or list alternatives, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_colorsA

Fetch the complete list of Vinted color options available as search filters. Returns every color with its numeric ID, display name, hex color code, short code (e.g. "BLACK"), and sort order. Pass the returned IDs to search_items.colorIds or search_all_items.colorIds to restrict results to specific colors. Results are cached for 1 hour β€” color catalogues change rarely.

NameRequiredDescriptionDefault
countryNoVinted country site to query (color catalogues are shared across countries)fr

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden. It discloses that results are cached for 1 hour and color catalogues change rarely, and describes the exact return fields (numeric ID, display name, hex code, short code, sort order).

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?

The description is four sentences, each earning its place: purpose, output details, usage, caching policy. No filler, well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple fetch tool with one parameter and no output schema, the description fully covers purpose, output structure, usage guidance, and caching behavior. It leaves no gaps.

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% for the only parameter (country), so baseline is 3. The description does not add new detail beyond what the schema already provides about the country parameter; it only restates shared-country info from the schema.

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 'Fetch the complete list of Vinted color options' with a specific verb and resource, and it distinguishes itself from sibling tools like get_categories or get_size_groups by focusing exclusively on color data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells users to pass the returned IDs to search_items.colorIds or search_all_items.colorIds, showing when to use this tool vs others. It also mentions caching behavior but does not include explicit when-not-to-use statements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_itemA

Fetch complete item details by Vinted item ID (with country) or by a direct Vinted item URL. Returns title, price, currency, brand, size, condition, full description, all photo URLs, creation date, item URL, favourite count, and seller username/ID. Automatically falls back to HTML scraping when the JSON API is unavailable.

NameRequiredDescriptionDefault
urlNoFull Vinted item URL, e.g. "https://www.vinted.fr/items/5678901234-nike-air-max". Country is inferred from the URL automatically.
itemIdNoNumeric Vinted item ID, e.g. 5678901234
countryNoCountry site (required when using itemId; inferred automatically when url is provided)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does disclose a meaningful trait: automatic fallback to HTML scraping when the JSON API is unavailable, which sets reliability expectations. It omits rate-limit, error, and permission behavior, so not a full 5.

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?

Three tight sentences: retrieval modes first, then return fields, then the scrape-fallback caveat. Every sentence earns its place with no redundancy.

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?

There is no output schema, so enumerating the returned fields (title, price, currency, brand, size, condition, description, photos, seller, etc.) is genuinely valuable. Combined with the input-mode and fallback notes, the definition is nearly complete; only failure/limit behavior is unaddressed.

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 all three parameters are already documented in the schema, including the country-required-with-itemId rule. The description restates the two modes but adds no syntax or format detail beyond what the schema provides, so 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?

States a specific verb and resource ('Fetch complete item details') plus the two lookup modes (item ID with country, or direct URL), which cleanly separates it from search_items and compare_prices. An agent knows exactly what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear invocation context: country is required with itemId but inferred from a URL, so the agent knows how to call either mode. It stops short of stating when to prefer this over siblings such as search_items or compare_prices (e.g., used to expand a search hit into full details).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_new_itemsA

Fetch the most recently listed items for a search query (newest first). To monitor a search, call it repeatedly and pass the previous response's latestId as afterId β€” only items listed since then are returned (truncated: true means more than perPage arrived; raise perPage or poll more often). Supports the same filters as search_items (brand, category, size, color, price, condition).

NameRequiredDescriptionDefault
sizeNoSize labels, e.g. ["M"]; automatically resolved to IDs
brandNoBrand names; automatically resolved to IDs
colorNoColor names, e.g. ["black"]; automatically resolved to IDs
queryYesSearch keywords to monitor, e.g. "Nike Air Max 90 size 42"
afterIdNoReturn only items with an ID greater than this (use latestId from the previous call). Omit on the first call.
countryNoVinted country site to monitorfr
perPageNoNumber of newest items to inspect, 1–96
sizeIdsNoSize IDs to filter by
brandIdsNoNumeric brand IDs from search_brands
colorIdsNoColor IDs to filter by
priceMaxNoMaximum price in local currency
priceMinNoMinimum price in local currency
conditionNoItem condition filter
categoryIdNoCategory ID from get_categories

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations the description carries the full burden, and it does disclose useful behavior: newest-first ordering, incremental semantics via afterId, the truncated flag, and polling guidance for perPage. It also reveals response shape (latestId) despite no output schema. It omits auth requirements and hard rate limits, which keeps it below 5.

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?

Three sentences with no filler, and the core monitoring pattern is front-loaded right after the purpose statement. The nested parentheticals around truncated/perPage make it slightly dense to parse, but every clause is load-bearing.

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 14-parameter tool with no annotations and no output schema, the description covers the essentials an agent needs: the polling contract, the incremental cursor, the truncation signal, and the shared filter set. Left uncaptured are authentication expectations and the shape of individual item objects, which is a minor gap given the sibling tools likely define item structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description adds real meaning on top: it explains the intended afterId value (latestId from the previous call), the perPage/toggle-polling tradeoff, and which filter groups (brand, category, size, color, price, condition) are shared with search_items.

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?

States a specific verb and resource β€” fetch the most recently listed items for a search query, newest first β€” and its monitoring/afterId semantics differentiate it from search_items, which it names as the source of the same filter set. An agent can tell what this tool returns and how it differs from the general search sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete when-to-use workflow: call repeatedly to monitor a search, passing the previous response's latestId as afterId, and notes that truncated:true means raising perPage or polling more often. It does not state when NOT to use it (e.g. one-off lookups should use search_items), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sellerA

Fetch a seller's public profile by their numeric user ID. Returns username, active listing count, feedback reputation score (0–1 float), total feedback count, country code, and profile URL. Use get_seller_feedback to read review texts and star ratings, and get_seller_items to browse their listings.

NameRequiredDescriptionDefault
countryNoCountry site where the seller is registeredfr
sellerIdYesNumeric Vinted user ID, visible in profile URLs: vinted.fr/member/12345-username

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses returned fields but does not mention read-only nature, authorization requirements, or rate limits. Adequate but lacks behavioral context beyond output.

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 concise sentences. Purpose and alternatives are front-loaded. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description lists all return fields: username, active listing count, feedback score (0–1 float), total feedback count, country code, profile URL. Complete for a profile fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%. Description adds value by explaining that sellerId is 'Numeric Vinted user ID, visible in profile URLs' and that country has a default of 'fr'. Provides useful context beyond schema.

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 starts with a clear verb+resource: 'Fetch a seller's public profile by their numeric user ID.' It also lists the specific fields returned, and distinguishes from siblings by naming get_seller_feedback and get_seller_items.

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?

Explicitly states when to use this tool (fetch profile) and directs to alternatives for reviews and listings: 'Use get_seller_feedback to read review texts and star ratings, and get_seller_items to browse their listings.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_seller_feedbackA

Fetch paginated buyer and seller feedback reviews for a Vinted user. Each entry includes the review text, star rating (1–5), feedback type (1=negative, 2=neutral, 3=positive), reviewer username, timestamp, and the associated item ID. Use this to assess seller trustworthiness and reliability before making a purchase.

NameRequiredDescriptionDefault
pageNoPage number starting at 1
limitNoReviews per page, 1–100
countryNoCountry site where the seller is registeredfr
sellerIdYesNumeric Vinted user ID (visible in profile URLs: vinted.fr/member/12345-username)

TDQS

A4/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 burden. It mentions 'paginated' and describes the output fields, but it does not disclose error handling, rate limits, or authentication requirements. This is adequate but not thorough.

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: first defines the tool's action and output, second provides the use case. It is front-loaded and every sentence is informative with no fluff.

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?

Given there is no output schema, the description adequately lists the return fields. It is fairly complete for a list tool, though it could mention pagination limits or ordering. Sibling tools are distinct enough.

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 baseline is 3. The description does not add additional parameter meaning beyond what the schema already provides; it focuses on output fields. No extra value for parameters.

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 'Fetch paginated buyer and seller feedback reviews for a Vinted user' with a specific verb and resource. It lists the fields included, making the output clear. It distinguishes itself from siblings like get_seller and get_seller_items by focusing on feedback.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a concrete use case: 'Use this to assess seller trustworthiness and reliability before making a purchase.' It does not explicitly mention when to avoid using it or alternative tools, but the context is clear enough for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_seller_itemsA

List all items currently for sale by a specific seller, paginated. Returns the same fields as search_items (title, price, brand, size, condition, photo URL, item URL). Useful for browsing a seller's full catalogue after finding them via search_items or get_seller.

NameRequiredDescriptionDefault
pageNoPage number starting at 1
limitNoItems per page, 1–100
countryNoCountry site where the seller is registeredfr
sellerIdYesNumeric Vinted user ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must cover behavioral traits. It mentions pagination and dynamic data ('currently for sale'), but lacks details on auth needs, rate limits, or nondestructive nature.

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 concise sentences with no wasted words, front-loaded with the primary purpose.

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?

With complete schema coverage and no output schema, the description sufficiently explains the tool's return structure (same as search_items) and pagination. Additional details about pagination behavior are not necessary given the schema.

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 description adds marginal value by noting the return fields match search_items. Parameters are adequately explained in the schema.

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 'list' and resource 'items for sale by a specific seller', includes pagination, and distinguishes from siblings by specifying it returns the same fields as search_items.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description explicitly mentions it is useful after finding a seller via search_items or get_seller, but does not provide explicit when-not-to-use or alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_size_groupsA

Fetch all Vinted size groups with their constituent size IDs and labels. Returns a list of size groups (e.g. "Women's clothing", "Men's shoes", "Kids 2–8 yrs") β€” each containing the group ID, caption, description, and an array of sizes with numeric IDs and display titles (e.g. "XS", "42", "12 UK"). Pass individual size IDs from the sizes array to search_items.sizeIds or search_all_items.sizeIds to filter listings to an exact size. Results are cached for 1 hour.

NameRequiredDescriptionDefault
countryNoVinted country site to query (size catalogues are shared across countries)fr

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full burden of behavioral disclosure. It states that results are cached for 1 hour, which is a key behavioral trait. No contradictions are present. The score reflects good transparency but a slight gap (e.g., no mention of rate limits or potential errors).

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?

The description is tightly written with no wasted words. It front-loads the purpose, explains the output structure, provides usage guidance, and mentions cachingβ€”all in a compact paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description thoroughly explains the return structure (list of groups with IDs, captions, descriptions, and array of sizes with numeric IDs and display titles). It also explains how to use the output, making it fully complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema coverage is 100%, so the parameter descriptions are already present. The description adds useful context: 'size catalogues are shared across countries', which goes beyond the schema. This extra insight warrants a 4.

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 starts with 'Fetch all Vinted size groups with their constituent size IDs and labels', which is a specific verb+resource combination. It clearly identifies the tool's purpose and distinguishes it from sibling tools like get_categories or get_colors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to use the output by passing size IDs to search_items.sizeIds or search_all_items.sizeIds. It provides clear context but does not explicitly state when not to use this tool or mention alternatives, which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_color_idsA

Resolve color names (e.g. "black", "white", "navy") to numeric Vinted color IDs for use in search_items.colorIds and search_all_items.colorIds. Matching is case-insensitive and also works with Vinted's internal color codes (e.g. "BLACK", "NAVY_BLUE"). Alternatively, pass color names directly to search_items.color[] and they will be resolved automatically.

NameRequiredDescriptionDefault
colorsYesColor names to resolve, e.g. ["black", "white", "navy"]
countryNoVinted country site to query (color catalogues are shared across countries)fr

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses case-insensitive matching, acceptance of Vinted internal codes, and that color catalogues are shared across countries. It does not disclose what happens on unknown/invalid color names, whether matching returns partial results, or the shape of the resolved output.

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?

Three tight sentences with zero filler: purpose first, matching behavior second, alternative last. Every sentence earns its place and the key routing information is front-loaded.

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?

No output schema and no annotations, so the description must stand alone for a two-param resolution tool. It covers purpose, accepted inputs, and the alternative path well, but leaves the return value format (e.g., a name-to-ID mapping) and failure behavior to inference.

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 both parameters are already documented in the schema, including the country enum and default. The description reinforces usage of the colors parameter but adds no format, validation, or error semantics beyond what the schema and its enum already state.

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?

States a specific verb+resource (resolve color names to numeric Vinted color IDs) and names the exact downstream parameters it feeds (search_items.colorIds / search_all_items.colorIds). This clearly separates it from search_items, get_colors, and resolve_size_ids 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?

Explicitly tells the agent when to call this tool (to obtain numeric color IDs) and names a concrete alternative path: passing color names straight to search_items.color[] where they resolve automatically. The routing decision is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_size_idsA

Resolve human-readable size labels (e.g. "M", "42", "XL", "12 UK") to numeric Vinted size IDs suitable for use in search_items.sizeIds and search_all_items.sizeIds. Returns matched IDs with the group they belong to (e.g. "Women's clothing"), and a list of any labels that could not be resolved. Because "M" or "42" appear in multiple size groups (women's, men's, kids'), multiple IDs may be returned per label β€” pass them all to sizeIds to cast a wide net, or filter by group name if you need a specific category.

NameRequiredDescriptionDefault
sizesYesSize labels to resolve, e.g. ["M", "L"] or ["42", "43"] or ["XS", "S", "M"]
countryNoVinted country site to query (size catalogues are shared across countries)fr

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no output schema, the description carries the full disclosure burden and does well: it describes the return payload (matched IDs with their group, plus a list of unresolvable labels) and the one-to-many mapping behavior. It does not mention auth needs, rate limits, or error semantics, which keeps it from a 5.

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?

Purpose and downstream destination are front-loaded, with the ambiguity caveat last. Four sentences, all carrying information, though the final 'Because "M" or "42"...' sentence is dense and could be tightened.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter read tool with no output schema, the description covers purpose, downstream usage, the shape of the return value (matched IDs + group + unresolved list), and the one-to-many behavior an agent must anticipate. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining why the 'sizes' array can map to multiple IDs per label (labels recur across women's/men's/kids' groups) and by naming the group dimension used for filtering, adding real interpretive value.

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?

States a specific verb+resource ('Resolve human-readable size labels ... to numeric Vinted size IDs') and names the exact downstream consumers (search_items.sizeIds, search_all_items.sizeIds). It is clearly distinguishable from the sibling resolve_color_ids and the search_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete downstream guidance ('pass them all to sizeIds to cast a wide net, or filter by group name if you need a specific category') and explains the ambiguity condition that produces multiple results. It lacks an explicit 'when not to use this / use X instead' clause, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_all_itemsA

Search Vinted listings and automatically paginate through all results, returning up to maxItems items in a single call. Use this instead of search_items when you need comprehensive results β€” e.g. "find all Nike shoes under €30" or "list every item in size M from this brand". Pages are fetched concurrently for speed. Returns the same item fields as search_items.

NameRequiredDescriptionDefault
sizeNoSize labels to filter by, e.g. ["M", "L"]. Automatically resolved to IDs.
brandNoBrand names; automatically resolved to IDs
colorNoColor names to filter by, e.g. ["black", "white"]. Automatically resolved to IDs.
queryYesSearch keywords
sortByNoSort order
countryNoVinted country site to searchfr
sizeIdsNoNumeric size IDs. Prefer size[] for label-based lookup.
brandIdsNoNumeric brand IDs from search_brands
colorIdsNoNumeric color IDs. Prefer color[] for name-based lookup.
maxItemsNoMaximum total items to collect across all pages (default 200, max 1000)
maxPagesNoMaximum number of pages to fetch regardless of maxItems
priceMaxNoMaximum price in local currency
priceMinNoMinimum price in local currency
conditionNoItem condition filter
categoryIdNoCategory ID from get_categories

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose meaningful beyond-schema behavior: it paginates automatically, fetches pages concurrently for speed, and returns the same item fields as search_items. It does not cover failure modes, rate limits, or auth, which is a modest gap for a read-only tool.

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?

Three tight sentences, front-loaded with what the tool does, then the routing rule with examples, then the concurrency note. Every sentence earns its place with no filler.

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?

Covers the essentials for a 15-parameter paginating search tool: pagination semantics, the maxItems bound, and field parity with search_items stand in for a missing output schema. Missing only operational caveats (errors, rate limits) that a heavy auto-paginating tool with no annotations arguably warrants.

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 all 15 parameters are already documented. The description only restates the maxItems ceiling behavior, adding little beyond what the schema provides. Baseline 3 applies when the schema does the heavy lifting.

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?

States a specific verb+resource (search Vinted listings) and the defining behavior (auto-paginate all results up to maxItems). It explicitly names and differentiates itself from the sibling search_items, so an agent can choose between them without inspecting schemas.

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?

Gives an explicit routing rule β€” 'Use this instead of search_items when you need comprehensive results' β€” plus concrete examples ('find all Nike shoes under €30', 'list every item in size M from this brand'). The alternative and the condition that selects it are both named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_brandsA

Search Vinted's brand catalogue by keyword. Returns matching brands with their numeric IDs, slugs, total item counts, and favourite counts. Pass the returned IDs to search_items.brandIds, or use search_items.brand[] to pass names and have them resolved automatically.

NameRequiredDescriptionDefault
limitNoMaximum number of brand results to return
queryYesBrand name keyword to search for, e.g. "Nike" or "Levi"
countryNoCountry site to query (brand catalogues are shared across countries)fr

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description bears full burden. It explains the output structure but does not disclose read-only nature, rate limits, or authentication requirements. As a search tool, it is likely safe, but the description could be more explicit about behavioral traits.

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 concise sentences with front-loaded purpose. No wasted words. Effectively communicates the tool's action and additional integration guidance.

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?

Given no output schema, the description covers return fields adequately. Parameters are fully documented. Lacks behavioral disclosures (read-only, errors) but for a simple search tool, the completeness is sufficient.

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%, providing full parameter definitions. The description adds usage context (output integration) but does not enhance parameter semantics beyond the schema. Baseline score of 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?

The description clearly states the tool searches Vinted's brand catalogue by keyword and lists the specific return fields (IDs, slugs, counts). It also differentiates by showing how to use the output with search_items, making it distinct from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on using the returned IDs with search_items.brandIds or brand[] for automatic resolution. This implies when to use the tool, but lacks explicit exclusion or comparison to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_itemsA

Search Vinted second-hand listings with rich filters across 19 country sites. Returns a paginated list of items β€” each with title, price, currency, brand, size, condition, photo URL, item URL, favourite count, and seller info. Use get_categories to discover valid categoryId values and search_brands to resolve brand names to IDs. For comprehensive multi-page results use search_all_items instead.

NameRequiredDescriptionDefault
pageNoPage number starting at 1
sizeNoSize labels to filter by, e.g. ["M", "L"] or ["42", "43"]. Automatically resolved to IDs via resolve_size_ids. Use instead of sizeIds when you know the label but not the ID.
brandNoBrand names to filter by, e.g. ["Nike", "Adidas"]. Automatically resolved to IDs via search_brands.
colorNoColor names to filter by, e.g. ["black", "white"]. Automatically resolved to IDs via get_colors.
queryYesSearch keywords, e.g. "Nike Air Max 90" or "levi 501 jeans"
sortByNoSort order for results. Defaults to relevance.
countryNoVinted country site to search (fr, de, uk, it, es, nl, pl, pt, be, at, lt, cz, sk, hu, ro, hr, fi, dk, se)fr
perPageNoResults to return, 1–96. Defaults to 20. Vinted serves fixed pages of 96, so this only truncates a page; at most 960 results are reachable per query.
sizeIdsNoNumeric size IDs. Prefer the size[] parameter for label-based lookup.
brandIdsNoNumeric Vinted brand IDs from search_brands. Prefer the brand[] parameter for name-based lookup.
colorIdsNoNumeric color IDs. Prefer the color[] parameter for name-based lookup.
priceMaxNoMaximum price in the local currency of the selected country
priceMinNoMinimum price in the local currency of the selected country
conditionNoItem condition filter; multiple values are OR-ed together
categoryIdNoCategory ID from get_categories (e.g. 4 = women's clothing, 5 = men's clothing, 1231 = women's shoes)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It usefully enumerates the return fields (compensating for the absent output schema) and notes results are paginated, but says nothing about rate limits, auth/permission needs, or the practical result cap handled only in the schema.

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?

Three sentences, zero filler, and front-loaded: purpose and scope first, return contents second, routing guidance last. Every sentence 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 15-parameter search tool with no output schema, the description covers purpose, return fields, and sibling routing well. It stops short of documenting pagination limits and currency/price semantics, which live only in the schema.

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 every parameter is already documented in the schema. The description adds only the generic phrase 'rich filters' and no filter syntax or format details beyond what the schema provides, making the baseline 3 correct.

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?

States a specific verb and resource ('Search Vinted second-hand listings') plus scope ('rich filters across 19 country sites') and return shape. It explicitly distinguishes itself from search_all_items, so an agent can route without opening the schema.

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?

Names concrete alternatives with the condition that selects them: get_categories for categoryId, search_brands for brand names, and search_all_items for multi-page results. This is explicit when-to-use guidance rather than inference.

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.

  1. 7 tool updatesv1.6.3
    • Changedcompare_prices7 fields changed
      • addedInput schema / properties / brand
        Added value: +{
        +  "description": "Brand names; automatically resolved to IDs",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / brandIds
        Added value: +{
        +  "description": "Numeric brand IDs to filter by (from search_brands)",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / categoryId
        Added value: +{
        +  "description": "Category ID from get_categories",
        +  "type": "integer"
        +}
      • addedInput schema / properties / colorIds
        Added value: +{
        +  "description": "Color IDs to filter by (from get_colors)",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / condition
        Added value: +{
        +  "description": "Item condition filter",
        +  "items": {
        +    "enum": [
        +      "new_with_tags",
        +      "new_without_tags",
        +      "very_good",
        +      "good",
        +      "satisfactory"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / countries / description
        Previous value: -"List of country codes to compare. Defaults to all 19 Vinted countries if omitted."New value: +"List of country codes to compare. Defaults to [\"fr\",\"de\",\"it\",\"es\",\"nl\",\"pl\"] if omitted."
      • addedInput schema / properties / sizeIds
        Added value: +{
        +  "description": "Size IDs to filter by (from resolve_size_ids)",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
    • Changedget_item1 field changed
      • removedInput schema / properties / browser
        Removed value: -{
        -  "default": false,
        -  "description": "Use headless browser for retrieval. Requires optional Playwright deps; only needed for items blocked by bot detection.",
        -  "type": "boolean"
        -}
    • Addedget_new_items
    • Addedresolve_color_ids
    • Addedresolve_size_ids
    • Changedsearch_all_items4 fields changed
      • addedInput schema / properties / color
        Added value: +{
        +  "description": "Color names to filter by, e.g. [\"black\", \"white\"]. Automatically resolved to IDs.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / colorIds / description
        Previous value: -"Color IDs to filter by. Use get_colors to discover all available color IDs."New value: +"Numeric color IDs. Prefer color[] for name-based lookup."
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Size labels to filter by, e.g. [\"M\", \"L\"]. Automatically resolved to IDs.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / sizeIds / description
        Previous value: -"Size IDs to filter by"New value: +"Numeric size IDs. Prefer size[] for label-based lookup."
    • Changedsearch_items8 fields changed
      • addedInput schema / properties / color
        Added value: +{
        +  "description": "Color names to filter by, e.g. [\"black\", \"white\"]. Automatically resolved to IDs via get_colors.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / colorIds / description
        Previous value: -"Color IDs to filter by (e.g. [1] for black, [3] for white). Use get_colors to discover all available color IDs and their names."New value: +"Numeric color IDs. Prefer the color[] parameter for name-based lookup."
      • changedInput schema / properties / country / description
        Previous value: -"Vinted country site to search (fr, de, uk, pl, es, nl, be, it, pt, cz, sk, hu, ro, lt, lv, ee, fi, at, se)"New value: +"Vinted country site to search (fr, de, uk, it, es, nl, pl, pt, be, at, lt, cz, sk, hu, ro, hr, fi, dk, se)"
      • removedInput schema / properties / dateFrom
        Removed value: -{
        -  "description": "Return items listed on or after this date. ISO-8601 format, e.g. \"2024-01-01\"",
        -  "type": "string"
        -}
      • removedInput schema / properties / dateTo
        Removed value: -{
        -  "description": "Return items listed on or before this date. ISO-8601 format, e.g. \"2024-12-31\"",
        -  "type": "string"
        -}
      • changedInput schema / properties / perPage / description
        Previous value: -"Results per page, 1–96. Defaults to 20."New value: +"Results to return, 1–96. Defaults to 20. Vinted serves fixed pages of 96, so this only truncates a page; at most 960 results are reachable per query."
      • addedInput schema / properties / size
        Added value: +{
        +  "description": "Size labels to filter by, e.g. [\"M\", \"L\"] or [\"42\", \"43\"]. Automatically resolved to IDs via resolve_size_ids. Use instead of sizeIds when you know the label but not the ID.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / sizeIds / description
        Previous value: -"Size IDs to filter by. Discover valid IDs by inspecting results from a previous search in the same category, or use get_size_groups to browse all size groups."New value: +"Numeric size IDs. Prefer the size[] parameter for label-based lookup."
  2. 4 tool updatesv1.0.2
    • Addedget_colors
    • Addedget_size_groups
    • Changedsearch_all_items1 field changed
      • addedInput schema / properties / colorIds
        Added value: +{
        +  "description": "Color IDs to filter by. Use get_colors to discover all available color IDs.",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
    • Changedsearch_items2 fields changed
      • addedInput schema / properties / colorIds
        Added value: +{
        +  "description": "Color IDs to filter by (e.g. [1] for black, [3] for white). Use get_colors to discover all available color IDs and their names.",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / sizeIds / description
        Previous value: -"Size IDs to filter by. Discover valid IDs by inspecting results from a previous search in the same category."New value: +"Size IDs to filter by. Discover valid IDs by inspecting results from a previous search in the same category, or use get_size_groups to browse all size groups."
  3. 10 tool updatesv1.0.1
    • Changedcompare_prices3 fields changed
      • addedInput schema / properties / countries / description
        Added value: +"List of country codes to compare. Defaults to all 19 Vinted countries if omitted."
      • addedInput schema / properties / limit / description
        Added value: +"Number of listings to sample per country. Higher values give more accurate statistics (max 96)."
      • addedInput schema / properties / query / description
        Added value: +"Item to compare prices for, e.g. \"Levi 501 jeans\" or \"iPhone 14 case\""
    • Changedget_categories2 fields changed
      • addedInput schema / properties / country / description
        Added value: +"Country site to fetch categories for (category IDs are consistent across countries)"
      • changedInput schema / properties / query / description
        Previous value: -"Optional keyword filter on category name"New value: +"Optional keyword filter on category name, e.g. \"shoes\" or \"dress\""
    • Changedget_item4 fields changed
      • addedInput schema / properties / browser / description
        Added value: +"Use headless browser for retrieval. Requires optional Playwright deps; only needed for items blocked by bot detection."
      • addedInput schema / properties / country / description
        Added value: +"Country site (required when using itemId; inferred automatically when url is provided)"
      • addedInput schema / properties / itemId / description
        Added value: +"Numeric Vinted item ID, e.g. 5678901234"
      • addedInput schema / properties / url / description
        Added value: +"Full Vinted item URL, e.g. \"https://www.vinted.fr/items/5678901234-nike-air-max\". Country is inferred from the URL automatically."
    • Changedget_seller2 fields changed
      • addedInput schema / properties / country / description
        Added value: +"Country site where the seller is registered"
      • addedInput schema / properties / sellerId / description
        Added value: +"Numeric Vinted user ID, visible in profile URLs: vinted.fr/member/12345-username"
    • Addedget_seller_feedback
    • Changedget_seller_items4 fields changed
      • addedInput schema / properties / country / description
        Added value: +"Country site where the seller is registered"
      • addedInput schema / properties / limit / description
        Added value: +"Items per page, 1–100"
      • addedInput schema / properties / page / description
        Added value: +"Page number starting at 1"
      • addedInput schema / properties / sellerId / description
        Added value: +"Numeric Vinted user ID"
    • Changedget_trending3 fields changed
      • addedInput schema / properties / categoryId / description
        Added value: +"Optional category ID from get_categories to restrict results to a specific department"
      • addedInput schema / properties / country / description
        Added value: +"Vinted country site to fetch trending items from"
      • addedInput schema / properties / limit / description
        Added value: +"Number of trending items to return, 1–96"
    • Addedsearch_all_items
    • Changedsearch_brands3 fields changed
      • addedInput schema / properties / country / description
        Added value: +"Country site to query (brand catalogues are shared across countries)"
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of brand results to return"
      • addedInput schema / properties / query / description
        Added value: +"Brand name keyword to search for, e.g. \"Nike\" or \"Levi\""
    • Changedsearch_items14 fields changed
      • changedInput schema / properties / brand / description
        Previous value: -"Brand names; resolved to IDs via Vinted lookup"New value: +"Brand names to filter by, e.g. [\"Nike\", \"Adidas\"]. Automatically resolved to IDs via search_brands."
      • addedInput schema / properties / brandIds / description
        Added value: +"Numeric Vinted brand IDs from search_brands. Prefer the brand[] parameter for name-based lookup."
      • addedInput schema / properties / categoryId / description
        Added value: +"Category ID from get_categories (e.g. 4 = women's clothing, 5 = men's clothing, 1231 = women's shoes)"
      • addedInput schema / properties / condition / description
        Added value: +"Item condition filter; multiple values are OR-ed together"
      • addedInput schema / properties / country / description
        Added value: +"Vinted country site to search (fr, de, uk, pl, es, nl, be, it, pt, cz, sk, hu, ro, lt, lv, ee, fi, at, se)"
      • changedInput schema / properties / dateFrom / description
        Previous value: -"ISO date string e.g. 2024-01-01"New value: +"Return items listed on or after this date. ISO-8601 format, e.g. \"2024-01-01\""
      • addedInput schema / properties / dateTo / description
        Added value: +"Return items listed on or before this date. ISO-8601 format, e.g. \"2024-12-31\""
      • addedInput schema / properties / page / description
        Added value: +"Page number starting at 1"
      • addedInput schema / properties / perPage / description
        Added value: +"Results per page, 1–96. Defaults to 20."
      • addedInput schema / properties / priceMax / description
        Added value: +"Maximum price in the local currency of the selected country"
      • addedInput schema / properties / priceMin / description
        Added value: +"Minimum price in the local currency of the selected country"
      • addedInput schema / properties / query / description
        Added value: +"Search keywords, e.g. \"Nike Air Max 90\" or \"levi 501 jeans\""
      • changedInput schema / properties / sizeIds / description
        Previous value: -"Size IDs (use get_categories + search_items to discover)"New value: +"Size IDs to filter by. Discover valid IDs by inspecting results from a previous search in the same category."
      • addedInput schema / properties / sortBy / description
        Added value: +"Sort order for results. Defaults to relevance."
  4. 8 tool updatesv1.0.0
    • First observedcompare_prices
    • First observedget_categories
    • First observedget_item
    • First observedget_seller
    • First observedget_seller_items
    • First observedget_trending
    • First observedsearch_brands
    • First observedsearch_items

TDQS

A4.2/5.0

Scored across 15 tools

Disambiguation4/5

Most tools target a distinct resource or action and the descriptions actively cross-reference each other (e.g. search_items points to search_all_items, resolve_color_ids points to get_colors). The main confusable pair is get_trending vs get_new_items, since both return recency-ordered items, with only country-scoping vs query+monitoring to tell them apart; the resolve_* vs get_* catalog pairs are related but functionally distinct.

Naming Consistency5/5

Every tool follows a clean snake_case verb_noun pattern (search_items, get_item, compare_prices, resolve_size_ids, get_seller_feedback). Verbs are used consistently and predictably across the whole set.

Tool Count5/5

15 tools is well scoped for a marketplace search/browse server, with each tool covering a distinct capability (search, detail, price comparison, taxonomy lookups, seller data). Nothing feels padded or redundant.

Completeness4/5

Coverage is strong for a read-only browsing server: search with rich filters, item details, cross-country price comparison, trending/new items, taxonomy lookups (categories, colors, sizes, brands), and seller profile/feedback/items. Minor gaps exist since it exposes favourite counts but offers no watchlist or seller-messaging actions.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    This MCP scraps vinted for product info. Disclaimer: This script is designed for educational purposes only. It is intended to demonstrate web scraping techniques and should not be used for any commercial or personal gain. Please note that using this software may violate the terms of service of Vint
    148
    GPL 3.0
  • A
    license
    Not graded
    quality
    B
    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.
    95 npm
    23
    AGPL 3.0