ebay-mcp
The ebay-mcp server provides real-time eBay marketplace data access via three tools:
Search Listings (
ebay_search): Search eBay with flexible options including sort orders (best match, price ascending/descending, newly listed), result limits (up to 50), raw eBay filter strings, category IDs, and marketplace selection (default: EBAY_US). Returns clean summaries withitemId,title,price,condition,seller, anditemWebUrl.Get Item Details (
ebay_get_item): Fetch complete details for a single eBay item by its unique ID (e.g.v1|123456789|0).Price Landscape (
ebay_price_check): The core tool — returns an aggregated price landscape for any query, including total count, overall min/median/max prices, a breakdown by item condition (New, Used, etc.), and the cheapest available listings. Supports anexcludeparameter to filter out irrelevant results (e.g. excluding 'laptop' when searching for a GPU) for accurate pricing.
Authentication is handled automatically via application tokens (client-credentials grant), requiring only a free eBay developer keyset — no user login or OAuth consent needed. Both sandbox and production environments are supported for development and live queries.
Provides tools for searching eBay listings, fetching item details, and aggregating price data by condition.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ebay-mcpsearch for RTX 5080 and show cheapest listings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ebay-mcp
Give an AI agent real, live market prices — straight from the largest secondhand marketplace on the internet.
eBay is a continuously-updating ledger of what physical things actually cost right now. This wraps its Browse API as an MCP server with three tools, so an agent can search listings, pull a single item, and — the useful one — get an aggregated price landscape for anything: min, median, max, broken down by condition.
Python 3.12+ · MIT · MCP server · app-token auth, no user login
Setup is one free eBay app keyset — no user login, no OAuth consent screen to click through. Point an agent at it and ask "what does an RTX 5080 actually go for?" — one call back comes a grounded answer, split by condition, with the cheapest listings attached.
Contents
Related MCP server: Ebay Mcp Server
The three tools
Tool | What it does |
| Aggregated price landscape for a query — count, min/median/max, a breakdown by condition, and the cheapest listings. The headline tool. |
| Listing search with sorting and filtering — returns clean |
| Full detail for one item by ID. |
// ebay_price_check · query: "RTX 5080", exclude: ["laptop", "notebook"]
{
"count": 47, "currency": "USD",
"min": 899, "median": 1099, "max": 2200,
"by_condition": {
"New": { "count": 18, "min": 1099, "median": 1199, "max": 1634 },
"Used": { "count": 21, "min": 899, "median": 1050, "max": 1499 }
},
"cheapest": [ { "price": 899, "condition": "Used", "title": "…", "itemWebUrl": "…" } ]
}Architecture: one client, three tools
Every tool flows through a single EbayBrowseClient, which owns the token and
talks to eBay. There's one place credentials are read, one place a token is
cached, one place HTTP happens — nothing to drift.
flowchart LR
Agent(["AI agent / Claude"])
subgraph server["ebay-mcp · stdio server"]
Tools["ebay_search<br/>ebay_get_item<br/>ebay_price_check"]
Client["EbayBrowseClient"]
Cache[("OAuth token<br/>in-memory, auto-refresh")]
end
Cfg["~/.ebay-mcp.toml<br/>or env vars"]
eBay["eBay Browse API"]
Agent -->|"MCP tool call"| Tools
Tools -->|"search / get_item"| Client
Client <-->|"reuse or mint token"| Cache
Client -->|"Bearer token + query"| eBay
eBay -->|"listings JSON"| Client
Cfg -.->|"keyset + active env"| ClientThe server is async; the client is plain synchronous requests, run in a thread
(asyncio.to_thread) so a slow eBay call never blocks the event loop.
ebay_price_check is the one tool that does more than pass through — it runs a
search and then aggregates the result (see below).
Authentication: client-credentials, cached
eBay's Browse API uses an application token (the OAuth client-credentials grant) — no user is involved. The client mints one on first use, caches it in memory, and silently refreshes when it's about to expire. You never think about it.
sequenceDiagram
participant T as Tool call
participant C as EbayBrowseClient
participant O as eBay OAuth
participant B as Browse API
T->>C: search("RTX 5080")
alt token missing or expired
C->>O: POST /identity/v1/oauth2/token<br/>Basic(app_id:cert_id), grant=client_credentials
O-->>C: access_token + expires_in
Note over C: cache until (expires_in − 60s)
end
C->>B: GET /item_summary/search<br/>Authorization: Bearer …
B-->>C: listings JSON
C-->>T: parsed resultsThe 60-second buffer means a token is treated as expired slightly early, so a call never races a token that dies mid-flight. Tokens live ~2 hours; in practice one fetch covers a long session.
ebay_price_check: how the landscape is built
The other two tools are thin wrappers. This one is the reason the project exists: it turns a pile of raw listings into a number you can reason about.
flowchart LR
Q["query<br/>+ exclude[]"] --> S["search<br/>(up to 50 listings)"]
S --> F["drop excluded titles<br/>+ unpriced listings"]
F --> G["group by condition"]
G --> A["aggregate<br/>min · median · max"]
G --> H["cheapest N<br/>(the tail)"]
A --> R(["{ count, min, median, max,<br/>by_condition, cheapest }"])
H --> Rexclude is what makes the number honest — a search for "RTX 5080" is full of
laptops and prebuilt PCs, and exclude: ["laptop", "notebook", "prebuilt"]
strips them so the median reflects the actual card. The by_condition split
matters just as much: a "median" that blends new-in-box with used-and-abused is
noise; split by condition and each tier tells the truth.
One honest limitation worth knowing: the Browse API returns active asking prices, not completed sales. Treat the floor as "best currently advertised," not "what it sold for."
Install
git clone https://github.com/cunicopia-dev/ebay-mcp
cd ebay-mcp
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e .You need a (free) eBay developer application keyset — see docs/SETUP.md for the five-minute walkthrough. Then wire it into your MCP client:
{
"mcpServers": {
"ebay": { "command": "/path/to/ebay-mcp/.venv/bin/ebay-mcp" }
}
}Configuration
Credentials come from environment variables (highest priority) or a
~/.ebay-mcp.toml file. The active env selects the keyset and the API
base URL together — so production creds can never accidentally point at the
sandbox, or vice versa.
flowchart TD
Start(["load_config()"]) --> Env{"EBAY_ENV /<br/>EBAY_*_APP_ID<br/>in environment?"}
Env -->|"set"| UseEnv["take keyset<br/>from env vars"]
Env -->|"unset"| Toml{"~/.ebay-mcp.toml<br/>present?"}
Toml -->|"yes"| UseToml["take keyset<br/>from TOML"]
Toml -->|"no"| Default["default env = production<br/>(error if creds missing)"]
UseEnv --> Pick["env → keyset + base URL<br/>(locked together)"]
UseToml --> Pick
Default --> Pick# ~/.ebay-mcp.toml (chmod 600)
env = "production"
[production]
app_id = "YourApp-PRD-..."
cert_id = "PRD-..."
[sandbox]
app_id = "YourApp-SBX-..."
cert_id = "SBX-..."Check what's active any time — credentials are masked in the output:
ebay-mcp-config
# env: production
# app_id: Keit****87dd
# cert_id: PRD-****0914
# api_base: https://api.ebay.com
# OK — configuration is valid.Sandbox vs. production
Flip env between sandbox and production to switch environments — same code,
different endpoints and keyset. The sandbox is good for proving the auth flow
wires up; its inventory is sparse and seeded, so for real prices you want a
production keyset.
Project layout
src/ebay_mcp/
config.py # env + TOML loader; ebay-mcp-config CLI
browse.py # EbayBrowseClient — OAuth cache + search / get_item
server.py # MCP server: list_tools / call_tool / main
tests/ # config precedence, aggregation, tool listing (no network)
docs/SETUP.md # getting an eBay keysetLicense
MIT
Available Tools
3 toolsebay_get_itemA
Fetch full details for a single eBay item by its item ID (e.g. v1|123456789|0).
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | eBay item ID. | |
| marketplace | No | eBay marketplace ID (default EBAY_US). | EBAY_US |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must convey behavior. It states 'full details' but does not clarify if the tool is read-only, requires authentication, or has rate limits. The description adds some context (example ID format) but lacks crucial behavioral disclosures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured sentence with no redundant information. Every word earns its place, providing clear and concise purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should compensate by explaining what 'full details' includes. It does not, leaving the agent uncertain about the return structure. Adequate for a simple fetch but incomplete for comprehensive understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds value by providing a concrete example of the item_id format ('v1|123456789|0'), which aids correct invocation. No additional value for marketplace beyond the default mention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches full details for a single eBay item by ID, using the verb 'Fetch' and specifying the resource. It distinguishes itself from siblings like ebay_search (which returns multiple items) and ebay_price_check (likely price-focused).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., ebay_search or ebay_price_check). It implies usage when you have a known item ID, but does not provide exclusions or context for sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ebay_price_checkA
Search eBay and return an aggregated price landscape: count, min/median/max overall and broken down by condition, plus the cheapest listings. The headline tool for price research.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms, e.g. 'RTX 5080'. | |
| limit | No | Listings to sample (default 50, max 50). | |
| exclude | No | Substrings to filter out of results (case-insensitive). E.g. ['laptop', 'notebook'] to strip bundles. | |
| marketplace | No | eBay marketplace ID (default EBAY_US). | EBAY_US |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It describes the output (aggregated statistics and cheapest listings) but does not mention any side effects, permissions, rate limits, or limitations beyond what's in the parameter schema (e.g., max 50 listings already included). It adds some value but lacks completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, direct and front-loaded. It conveys essential information without unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity (4 parameters, no output schema, no annotations), the description provides good contextual understanding of the output. It could benefit from mentioning behavior on empty results or error conditions, but it is largely sufficient for an AI agent to decide when to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented. The description does not add significant new meaning beyond the schema; it focuses on the output rather than parameter details. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Search eBay and return aggregated price landscape') and specifies output details (count, min/median/max, breakdown by condition, cheapest listings). It explicitly distinguishes itself from siblings by calling itself 'the headline tool for price research.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for price research but does not provide explicit when-to-use or when-not-to-use guidance. It references siblings ebay_get_item and ebay_search, but doesn't explain when to choose this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ebay_searchB
Search eBay listings. Returns clean summaries of matching items including price, condition, seller ratings, and listing URL.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms, e.g. 'RTX 4090 founders edition'. | |
| limit | No | Max results (default 10, max 50). | |
| sort | No | Sort order: bestMatch | price | -price | newlyListed | |
| filter | No | Raw eBay filter string, e.g. 'conditionIds:{1000}'. | |
| category_ids | No | Comma-separated eBay category IDs. | |
| marketplace | No | eBay marketplace ID (default EBAY_US). | EBAY_US |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool returns clean summaries, implying a non-destructive read operation, but does not specify authentication, rate limits, or handling of empty results. The description is adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (two sentences) and efficiently conveys purpose and return content. Every sentence is valuable, though a slightly structured format could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and no output schema, the description provides high-level purpose and return fields but omits explanation of advanced parameters like filter, category_ids, or marketplace. It is minimally sufficient for basic use but lacks completeness for complex queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (6 parameters fully described), so baseline is 3. The description adds no extra meaning beyond the schema; it only reiterates the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search eBay listings' with specific output fields (price, condition, seller ratings, listing URL). It distinguishes the tool as a search function but does not explicitly contrast with sibling tools like ebay_get_item or ebay_price_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention when not to use it or any prerequisites, leaving the agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.1.0- First observed
ebay_get_item - First observed
ebay_price_check - First observed
ebay_search
TDQS
Each tool targets a distinct purpose: ebay_get_item retrieves single item details, ebay_price_check aggregates price data, and ebay_search returns listings. No functional overlap.
All tools follow the 'ebay_verb' pattern (ebay_get_item, ebay_price_check, ebay_search), with consistent snake_case and clear verb-noun structure.
Three tools is a compact but sufficient set for eBay price research and item lookup. Each tool adds unique value without redundancy.
The tools cover core research needs (search, price check, item details) but lack account management or listing operations. Minor gap for seller feedback or category browsing, but not fatal.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live eBay market intelligence: underpriced listing scans, price distributions, flip margins.
41Run an eBay seller account from your AI assistant: orders, listings, stock, fees and payouts.
AI marketplace: search, buy, sell across Amazon, eBay, AliExpress. 13 tools.
17 market-data tools for AI agents: eBay sold prices, company KYC, SEC filings, patents, auctions
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search eBay listings, track item prices over time, and identify deals below market value using eBay's APIs. It provides tools for category browsing and retrieving detailed information for specific listings.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching for eBay auctions using natural language queries.MIT
- AlicenseAqualityDmaintenanceEnables AI agents to search products, view item details, track and place bids, make Buy It Now purchases, view order history, and track shipments on eBay via browser automation with Playwright.716MIT
- FlicenseNot gradedqualityDmaintenanceAI-powered selling intelligence for multiple online marketplaces, enabling item analysis, optimized listings, pricing checks, negotiation coaching, and batch operations via any MCP-compatible AI assistant.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cunicopia-dev/ebay-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server