shopping-mcp
shopping-mcp
一个 MCP 服务器,让 Claude(或任何 MCP 客户端)能够通过官方 Browse API 搜索 eBay 商品列表。
问一句 "帮我找一把 100 美元以下的机械键盘,仅限立即购买,免运费",助手就能真的去搜索。
eBay results for "mechanical keyboard" — showing 3 of about 41,208 matches
1. Keychron K8 Pro Wireless Mechanical Keyboard - Brown Switches — $79.99
total $79.99 · free shipping · New · was $99.00 (19% off)
seller keeb_supply · 99.6% positive (8421 ratings) · top rated, ships from US
Item v1|335894120043|0 · https://www.ebay.com/itm/335894120043
2. Ducky One 3 TKL Mechanical Keyboard RGB Hot-Swappable — $84.50
total $92.45 · $7.95 shipping · New
seller pc_parts_direct · 98.9% positive (3310 ratings) · accepts offers
Item v1|326770118254|0 · https://www.ebay.com/itm/326770118254它能做什么——以及它刻意不做什么
每个工具都是只读的。 这个服务器只负责搜索和读取商品列表。它不能出价、加入购物车、下单或花钱。当你想购买时,它会给你一个商品链接,由你自己完成结账。
它基于官方 eBay Browse API 构建——不抓取网页、不进行浏览器自动化、不重放 cookie。它不会因页面布局变化而失效,也不会让你违反 eBay 的使用条款。
Related MCP server: ebay-browse-mcp
工具
工具 | 用途 |
| 关键词搜索,支持价格、成色、购买方式、运费和地区筛选。 |
| 单个商品列表的完整记录:商品属性、卖家、退货政策、拍卖结束时间。 |
| 仅显示折扣至少为原价 N% 的商品列表,按价格从低到高排列。 |
| 显示当前配置并执行一次实时测试调用。当出现问题时应首先运行此工具。 |
关于 search_ebay 有两点值得了解,因为这是 eBay 特有的、固定价格商品目录所不具备的:
buying_option可筛选为auction、buy_it_now或accepts_offers。sort: "ending_soonest"—— 与buying_option: "auction"结合使用,就能找到即将结束的拍卖。
获取 API 密钥
创建一个应用并打开 Production 密钥集。
复制 App ID(Client ID) 和 Cert ID(Client Secret)。
仅此而已。此服务器使用 OAuth 客户端凭证流程,因此你不需要用户令牌、重定向 URI 或 "RuName"。
新注册的开发者账户可能需要先通过 eBay 的验证,密钥页面才会开放——这通常大约需要一个工作日。
安装
git clone https://github.com/Kirat5690/shopping-mcp.gitcd shopping-mcp && npm install && npm run build连接到客户端
Claude Code
claude mcp add shopping --env EBAY_CLIENT_ID=your-app-id --env EBAY_CLIENT_SECRET=your-cert-id -- node /absolute/path/to/shopping-mcp/dist/index.jsClaude Desktop
编辑 claude_desktop_config.json:
macOS —
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows —
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"shopping": {
"command": "node",
"args": ["C:\\path\\to\\shopping-mcp\\dist\\index.js"],
"env": {
"EBAY_CLIENT_ID": "your-app-id",
"EBAY_CLIENT_SECRET": "your-cert-id",
"EBAY_MARKETPLACE_ID": "EBAY_US"
}
}
}
}重启客户端,然后让它运行 check_ebay_connection 以确认凭证可用。
配置参考
变量 | 必填 | 默认值 | 说明 |
| 是 | — | Production 密钥集中的 App ID。 |
| 是 | — | 同一密钥集中的 Cert ID。 |
| 否 |
|
|
| 否 |
| 设置为 |
| 否 | — | 返回带联盟追踪标记的商品链接。 |
| 否 | — | 提高运费估算的准确性。 |
| 否 | — | ISO 国家代码,例如 |
| 否 |
| 每次请求的超时时间。 |
关于数字的说明
排序依据是含运费总价。 按价格排序时使用商品价格加上运费,因此一件便宜但邮费昂贵的商品不会因为技术性原因而胜出。eBay 自身的价格排序并不总是这样做。
部分商品没有总价。 当 eBay 将运费标记为结账时计算时,在知道收货地址之前不存在含运费总价,商品页面会如实说明而不是猜测。
不进行货币换算。 价格以市场所在地区的货币显示,与 eBay 返回的完全一致。
商品列表是独立的销售记录,不是目录条目。 两条标题几乎相同的搜索结果可能在成色、捆绑内容或地区上有所不同。在将它们视为同一商品之前值得仔细检查。
find_deals只能看到有广告折扣的商品。 它基于 eBay 的划线"原价"进行筛选,因此一件真正便宜但从未宣称有折扣的商品不会出现在结果中。
开发
npm test测试套件无需任何 eBay 凭证即可运行。它覆盖了金额和含运费总价逻辑、输出格式化,以及一个端到端的 MCP 协议测试——该测试通过 stdio 启动服务器,并验证工具注册、schema 校验以及未配置凭证的路径。
npm run watch # recompile on change
npm run typecheck # types only, no emit目录结构:
src/
index.ts server entry point and stdio wiring
tools.ts MCP tool definitions
ebay.ts Browse API client and OAuth token cache
config.ts environment parsing and marketplace table
money.ts price parsing, landed totals, ranking
format.ts human-readable output
http.ts fetch with timeout and retry关于范围的说明
早期版本还通过 Product Advertising API 支持 Amazon。该功能在 v0.2.0 中被移除:PA-API 需要一个已获批准的 Amazon Associates 账户,而且如果账户没有产生符合条件的销售,Amazon 会撤销访问权限——这对大多数人来说门槛太高,导致服务器根本无法运行。
Amazon 客户端及其 AWS SigV4 签名已保留在 git 历史中,位于标签 v0.1.0-amazon 处,如果你有已获批准的账户并希望恢复该功能,可以从中找回。
许可证
MIT —— 参见 LICENSE。
与 eBay 无关联、未获其认可或赞助。你对 eBay API 的使用受 eBay API 许可协议 约束。
Available Tools
4 toolscheck_ebay_connectionCheck eBay configurationARead-only
Report how eBay is configured and make one live test call to confirm the credentials work. Run this first whenever a search fails or returns nothing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, but the description adds important behavioral context: 'make one live test call to confirm the credentials work.' This clarifies that despite being read-only, the tool performs an actual network call to the eBay API for testing, which is beyond the basic read-only label. It also implies credential validation, adding value over the annotations.
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 extremely concise: two sentences, with the purpose front-loaded and the usage guidance immediately after. No wasted words, and it covers purpose, behavior, and usage in a compact form.
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 tool has no parameters and no output schema, the description fully covers what an agent needs to know: what it does (reports config, tests credentials), when to use it (after a failed search), and the side-effect (live call). It is complete for its simplicity.
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?
There are no parameters in the schema, so the baseline is 4. The description does not need to explain parameters since none exist. It adequately explains the tool's behavior without needing parameter-level detail.
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 purpose: 'Report how eBay is configured and make one live test call to confirm the credentials work.' This is a specific action (report/test) on a specific resource (eBay configuration), and it distinguishes itself from sibling tools like search_ebay and get_listing_details by focusing on connection/credential verification rather than data retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Run this first whenever a search fails or returns nothing.' This is a clear trigger condition that indicates precedence over sibling tools. However, it does not explicitly mention when not to use it or list alternative tools, so it falls 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.
find_dealsFind discounted eBay listingsARead-only
Search eBay for listings currently discounted off their original price. Returns only items whose advertised saving meets the threshold, cheapest landed price first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many listings to scan before filtering (default 25). Raise this if nothing comes back. | |
| query | Yes | Product or category to hunt for deals in, e.g. 'mechanical keyboard'. | |
| condition | No | Item condition (default new). | |
| max_price | No | Ignore listings above this price. | |
| min_savings_percent | No | Minimum advertised discount off the original price (default 20). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds behavioral details: it filters by advertised savings threshold and sorts by landed price, which goes beyond the annotations. It does not describe pagination or response format, but with the annotations covering the basic side effects, this is adequate.
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 consists of two concise sentences: the first states the primary action, the second adds the filtering and ordering behavior. There is zero fluff, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and helpful annotations, the description is sufficiently complete. It explains the core filtering and ordering behavior, which is the key differentiator. While it doesn't describe return fields or pagination, the simplicity of the tool and schema richness compensate. It could add more detail on the response structure, but it is not critically missing.
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?
The input schema has 100% description coverage for all 5 parameters, each with its own description. The tool description does not add additional parameter-level clarification beyond what the schema provides, so the baseline of 3 is appropriate per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'eBay listings' with a specific scope: discounted items meeting a savings threshold. It distinguishes itself from siblings like search_ebay by focusing on advertised discounts and cheapest landed price first, making its purpose unique.
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 when to use it (when seeking discounted items) via its focus on savings thresholds and ordering, but it does not explicitly mention alternatives or exclusions. The existence of sibling tools like search_ebay suggests a differentiation, but no direct comparison is made, so it's clear context without explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_listing_detailsGet eBay listing detailsARead-only
Fetch the full record for one eBay listing: price, condition, availability, seller rating, item specifics, return policy, and auction end time. Accepts either the v1|...|0 item id or the legacy numeric id from an eBay URL.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | eBay item id — either 'v1|326012345678|0' or the numeric id from the listing URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the agent knows it's a safe read operation with external side effects. The description adds the specific data returned (price, condition, etc.) but doesn't discuss error behavior, latency, or rate limits. With annotations covering the safety profile, a 3 is appropriate.
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: the first states the purpose with a clear list of fields, the second explains the parameter format. No fluff, front-loaded with the core function.
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 a simple single-parameter tool with full schema coverage and safety annotations, the description is complete. It covers what data is returned, which is sufficient. No output schema exists, but the listed fields serve as a partial return description.
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?
The input schema description already explains the item_id formats fully (100% coverage). The tool description reinforces that it accepts either format but adds no new meaning beyond the schema. Baseline 3 is correct.
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 one eBay listing, enumerating specific data fields (price, condition, availability, seller rating, etc.). It distinguishes from siblings (search_ebay, find_deals) by focusing on a single item rather than searching or finding deals.
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 when you need full details for a specific listing, as opposed to search or deals tools. It does not explicitly say when NOT to use it or name alternatives, but the context is clear given the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ebaySearch eBay listingsARead-only
Search eBay for listings matching a keyword query, with optional price, condition, buying-format, and shipping filters. Returns title, price, shipping, landed total, seller rating, and a link for each listing. Read-only: this never bids, adds to a cart, or places an order.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Result ordering (default relevance). 'ending_soonest' is most useful combined with buying_option='auction' to find auctions about to close. | |
| limit | No | How many listings to return (default 10). | |
| query | Yes | What to search for, e.g. 'Sony WH-1000XM5 headphones'. | |
| condition | No | Item condition (default any). | |
| max_price | No | Maximum price, in the marketplace's own currency. | |
| min_price | No | Minimum price, in the marketplace's own currency. | |
| buying_option | No | Buying format (default any). Use 'auction' for bidding, 'buy_it_now' for fixed price. | |
| seller_location | No | Two-letter country code to restrict where items ship from, e.g. 'US' or 'CA'. | |
| free_shipping_only | No | Only return listings that ship free. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations: it explicitly states 'Read-only: this never bids, adds to a cart, or places an order,' which is more specific than the generic readOnlyHint annotation. It also discloses the output fields (title, price, shipping, etc.), which is a behavioral trait not covered by annotations or schema. No contradiction; this enhances transparency.
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: the first states the core action and filters, the second clarifies read-only behavior. It is front-loaded with the key information and contains zero fluff. Every word serves a purpose, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters, but the schema fully documents them, and the description explains what the tool returns and its read-only nature. It lacks mention of pagination or how to interpret structured results, but given the schema coverage and the read-only clarification, the description is complete enough for an agent to invoke correctly. The openWorldHint is not elaborated, but that's acceptable since it's a hint rather than a requirement.
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 each parameter has detailed descriptions. The tool description itself only gives a high-level overview ('optional price, condition, buying-format, and shipping filters'), adding marginal value beyond the schema. However, it does connect the filters to the search intent, which aligns with the baseline of 3. No specific parameter semantics beyond what schema already provides.
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 is specific and action-oriented: 'Search eBay for listings matching a keyword query' with optional filters and a clear list of returned fields (title, price, shipping, landed total, seller rating, link). It distinguishes from siblings by focusing on search behavior, and the read-only note further clarifies scope. The verb-resource pair is unambiguous and distinct from check_ebay_connection, get_listing_details, and find_deals.
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 provides some usage context (search for listings, optional filters) but does not explicitly tell when to use this tool over siblings like get_listing_details or find_deals. It also includes a helpful tip in the schema about using 'ending_soonest' with auctions, but that guidance is embedded in the schema description, not the main description. No clear when-not or alternative tool mention, so it is adequate but not explicit.
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.
4 tool updates
v0.2.0- First observed
check_ebay_connection - First observed
find_deals - First observed
get_listing_details - First observed
search_ebay
TDQS
Scored across 4 tools
Most tools are clearly distinct: check_ebay_connection, search_ebay, get_listing_details each target different actions. search_ebay and find_deals have some overlap, but find_deals is specifically for discounted listings with a savings threshold, so the boundary is clear enough.
Tool names follow a readable snake_case verb_noun pattern: check_ebay_connection, search_ebay, get_listing_details, find_deals. The only minor inconsistency is using both 'search' and 'find' for similar retrieval actions, but the pattern remains predictable.
Four tools is on the small side but appropriate for a focused eBay look-up server. The surface is tight and avoids unnecessary endpoints, though it is slightly minimal for a general 'shopping' MCP.
The tool set covers the core read-only shopping workflow: connectivity verification, keyword search, deal discovery, and listing details. It intentionally omits purchase actions, and while category browsing or seller info could be added, the current surface is not severely incomplete.
Maintenance
Related MCP Connectors
Read-only product discovery, merchant trust, shipping and returns for SVV-Schatzoekers.
Live search across 250,000+ verified UK and Canada retail deals. Read-only, no auth required.
Search and browse global classifieds across 80 markets. No auth required for read-only access.
eBay MCP — Browse + Taxonomy APIs via client_credentials OAuth
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 gradedqualityDmaintenanceMinimal MCP server for searching eBay listings via the Browse API, enabling keyword search with filters, sorting, pagination, and retrieving full item details.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching eBay for auctions by providing a query and number of results, returning auction listings from eBay's Browse REST API.MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to search eBay listings, analyze price distributions, find deals, and generate market research overviews via the Model Context Protocol.1MIT