Skip to main content
Glama
jnslmk
by jnslmk

ebay-mcp

An MCP server that lets an LLM search and inspect eBay listings through the official Browse API. Read-only, buyer-side: it searches and reads listings, it does not bid or buy.

This is a fork of Suat Oneren's ebay-browse-mcp, which speaks stdio. The fork keeps the two tools and their response shaping and swaps the transport for streamable-HTTP (:8000/mcp) plus a /healthz probe, so it runs as a self-hosted container behind an MCP client such as LibreChat — the same shape as its sibling kleinanzeigen-mcp.

Unlike Kleinanzeigen (no public API, so scraping is unavoidable), eBay offers a sanctioned API — so this server hits it directly: no headless browser, no bot-detection fragility.

Tools

Tool

What it does

search_ebay

Search by keyword with optional min_price/max_price (or a raw price filter via filter_expr — not both) plus condition, buying option and seller-country filters, and sort. Returns listing summaries + item_ids. query is ANDed against the listing title only, so it wants 2-4 short product keywords, not a sentence — a zero-result response explains why and may already include one narrowed retry (which preserves any price filter).

get_item_details

Full record for one item_id: description, item specifics, images, shipping options, return terms, seller.

Related MCP server: ebay-browse-mcp

Configuration

Set an eBay Developer keyset (free — https://developer.ebay.com/my/keys):

Env var

Default

Meaning

EBAY_CLIENT_ID

App ID (Client ID) from your keyset

EBAY_CLIENT_SECRET

Cert ID (Client Secret) from your keyset

EBAY_MARKETPLACE

EBAY_DE

Marketplace: EBAY_DE, EBAY_US, EBAY_GB, …

EBAY_ENV

sandbox

sandbox or production

MCP_TRANSPORT

http

http (streamable-HTTP) or stdio

MCP_HOST / MCP_PORT / MCP_PATH

0.0.0.0 / 8000 / /mcp

HTTP bind

Sandbox has almost no real inventory — use it to prove the wiring, then set EBAY_ENV=production (with a production, OAuth-enabled keyset) for real results.

Run

docker run --rm -p 8000:8000 \
  -e EBAY_CLIENT_ID=... -e EBAY_CLIENT_SECRET=... \
  -e EBAY_MARKETPLACE=EBAY_DE -e EBAY_ENV=production \
  ghcr.io/jnslmk/ebay-mcp:latest
# MCP endpoint: http://localhost:8000/mcp   health: http://localhost:8000/healthz

Local (stdio, for desktop MCP clients)

python3 -m venv .venv && .venv/bin/pip install .
cp .env.example .env   # fill in your keyset
MCP_TRANSPORT=stdio .venv/bin/ebay-mcp

Quick client-free check of the keyset:

.venv/bin/python -m ebay_mcp.ebay_client "raspberry pi 5"

License

MIT. See LICENSE — retains the original upstream copyright.

Available Tools

2 tools
get_item_detailsGet Item DetailsA

Retrieve the shaped detail record for a single eBay item.

Use after search_ebay surfaces something worth a closer look: full description, item specifics (aspects), all images, shipping options, return policy, seller and location.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYesREST item id from search_ebay's `item_id` field (format 'v1|<numeric>|0'). Legacy numeric ids are not accepted.
fieldgroupsNoOptional response shaping: 'COMPACT' (small subset for change detection) or 'PRODUCT' (adds catalogue info). Omit for full details.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 behavioral disclosure burden. It uses the read-only verb 'Retrieve' and enumerates the returned content: full description, aspects, images, shipping, return policy, seller, and location. It does not mention error behavior or auth, but the read-only nature and expected payload are clearly communicated.

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 short paragraphs with no filler. The purpose statement is front-loaded, and the second sentence earns its place by adding workflow context and return content.

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 the output schema exists and the description covers intended usage plus the main return contents, the definition is nearly complete. It does not mention possible errors or rate limits, but for a single-item retrieval tool with a well-described schema this is a minor gap.

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%, and the schema already documents item_id's required format and fieldgroups' allowed values, so the description adds little parameter-level meaning. The phrase 'shaped detail record' ties loosely to fieldgroups but does not go beyond 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 opens with a specific verb and resource: 'Retrieve the shaped detail record for a single eBay item.' It distinguishes itself from the sibling search_ebay by clarifying this is the follow-up tool for a single item's deeper details, not for searching.

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 it: 'Use after search_ebay surfaces something worth a closer look.' This names the preceding sibling, provides the intended workflow, and implies that search_ebay is for the initial broad search. No inference is required.

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

search_ebaySearch EbayA

Search eBay listings by keyword, with optional filters and sorting.

query is a strict AND over 2-4 short keywords matched against the listing TITLE only (see the query field's description) — a zero-result response carries a hint explaining why instead of a bare empty list, and one automatic narrowed retry may already have run (see fallback_query). Returns listing summaries — id, title, price, condition, seller reputation, location, thumbnail and URL. Pass an item's item_id to get_item_details for the full record. Prices and currency follow the configured marketplace. min_price/max_price are a convenience over filter_expr's price range syntax — see those parameters' own descriptions for the rule against combining the two.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo'price' (ascending), '-price' (descending), 'newlyListed' or 'endingSoonest'. Omit for eBay Best Match.
limitNoMaximum results to return (default 10)
queryYes2-4 short product keywords ANDed against the listing TITLE (e.g. 'RTX 3090 24GB') — never a sentence. Words like 'used'/'deep learning'/'local seller' are rarely in titles and return zero results; put condition/location in `filter_expr` instead. On a German marketplace prefer German terms ('gebraucht', 'Grafikkarte').
max_priceNoMaximum price, in the configured marketplace's currency. See `min_price` — same rule: don't combine with a `price` or `priceCurrency` filter in filter_expr.
min_priceNoMinimum price, in the configured marketplace's currency (e.g. EUR on EBAY_DE). Convenience over hand-writing filter_expr's 'price:[min..],priceCurrency:...' range — do not also set a `price` or `priceCurrency` filter in filter_expr, that raises an error.
filter_exprNoeBay Browse API filter syntax, comma-separated. Examples: 'price:[100..500],priceCurrency:EUR' (price range — prefer `min_price`/`max_price` below instead of writing this by hand), 'conditions:{NEW}' (new only), 'buyingOptions:{FIXED_PRICE}' (Buy It Now only), 'itemLocationCountry:DE' (German sellers only). Do not combine a `price` or `priceCurrency` filter here with `min_price`/`max_price` — pick one or the other.
max_resultsNoDeprecated alias for `limit`; prefer `limit`

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals several non-obvious behaviors: zero-result responses include a `hint` and may have already had an automatic narrowed retry ("one automatic narrowed retry may already have run"), and prices/currency follow the configured marketplace. It also states that query is a strict AND over titles only, which is a key behavioral trait. No rate limits or auth are mentioned, but the disclosed behaviors are substantial.

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 moderately long but well-structured: it opens with the core purpose, then covers query semantics, return format, the sibling tool, and the price-parameter relationship. It uses references to parameter descriptions rather than repeating them verbatim, which keeps it efficient. A slightly tighter first sentence could improve it, but the organization is logical and no sentence is wasted.

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 the tool's complexity (7 parameters, output schema present, no nested objects), the description provides enough context for an agent to use it correctly. It explains the essential query constraints, previews the result fields, flags the automatic retry behavior, and clearly points to parameter descriptions for detailed syntax. The absence of error-handling specifics is mitigated by the hint mechanism disclosure, and the presence of an output schema excuses the need to describe return structures in detail.

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 tool description adds minimal semantic value beyond what the parameter descriptions already provide: it mostly restates the query rules and points the reader to those descriptions ("see the `query` field's description"). It does add cross-tool context (pass item_id to get_item_details) and clarifies min/max as convenience over filter_expr, but the parameter specifics are already richly documented in the schema, so the description does not meaningfully elevate understanding.

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 opens with a clear statement of the verb and resource: "Search eBay listings by keyword, with optional filters and sorting." It further differentiates from the sibling tool by explicitly directing "Pass an item's `item_id` to `get_item_details` for the full record," making the boundary between listing summaries and full details unambiguous.

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 provides explicit when-to-use and when-not-to-use guidance. It names the alternative tool for full details, and it gives precise rules for parameter combinations: "do not also set a `price` or `priceCurrency` filter in filter_expr" when using min_price/max_price, and "prefer `min_price`/`max_price` below instead of writing this by hand" for price ranges. It also offers market-specific advice (e.g., German terms) that helps an agent decide how to compose queries.

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. 2 tool updatesv0.1.2
    • First observedget_item_details
    • First observedsearch_ebay

TDQS

A4.3/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: search_ebay discovers listings, while get_item_details retrieves full details for a specific item. No overlap or ambiguity in their roles.

Naming Consistency5/5

Both names follow a consistent verb_noun pattern with snake_case (search_ebay, get_item_details), making them predictable and readable.

Tool Count3/5

With only 2 tools, the server feels thin for a domain as broad as eBay, but the two tools cover a basic search-and-detail workflow without redundancy.

Completeness3/5

The surface covers search and retrieval of item details, sufficient for a browsing use case, but lacks advanced features like pagination, seller-specific queries, or listing operations. There are notable gaps for more complex workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Minimal MCP server for searching eBay listings via the Browse API, enabling keyword search with filters, sorting, pagination, and retrieving full item details.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that lets an LLM search Geizhals, a leading German/DACH price-comparison site, for the cheapest offers on new products.
    2
    MIT