Key takeaways
  • EBAY_READ_ONLY is enforced by regex over the tool name for any unannotated tool (src/mcp/readOnlyFilter.ts:30-35, 49-63), so it's a naming convention rather than a behavioral guarantee.
  • A source read on 2026-07-25 counted 298 defineTool({ call sites; the README frames this in marketing terms rather than a hard count; an internal comment at src/mcp/toolGating.ts:17 is stale at '~187 tools'.
  • EBAY_MCP_TOOLS defaults to 'all' when unset, so an unconfigured install advertises the full tool catalogue at boot (src/config/toolFamilies.ts:44-47).
  • Skipping the OAuth setup wizard silently drops a deployment to the 1,000 requests/day client-credentials tier instead of the 10,000-50,000/day user-token tier.
  • eBay's own first-party server, npm-public-api-mcp, is a 4-tool API passthrough with 11 stars and no marketing behind it — not a purpose-built alternative.

01 What ebay-mcp is and who ships it

For wiring eBay's Sell APIs into an AI assistant over MCP, the pick is the community-built ebay-mcp by Yosef Hayim — not because its README is trustworthy on every claim, but because it's the only actively maintained, purpose-built option, and public record and source read on 2026-09-06 shows its headline safety feature, EBAY_READ_ONLY, is enforced by a regex over tool names rather than any real check on what a handler does. Unless you need a minimal, officially-blessed passthrough with no marketing behind it — then eBay's own npm-public-api-mcp is the alternative, at the cost of purpose-built Sell API tooling.

i
Who this is for: developers and agencies evaluating whether to give an AI assistant access to a live eBay seller account — inventory, orders, offers, campaigns — via MCP, and who need to know exactly where the tool's safety rails end before handing it write access.
ebay-mcp is a local MCP server, maintained by Yosef Hayim as a community project (not affiliated with eBay Inc.), that exposes eBay's Sell APIs — inventory, orders, fulfillment, marketing, payment disputes, seller analytics — as callable tools for AI assistants. The repo (github.com/YosefHayim/ebay-mcp) is MIT-licensed, and its default branch last committed on 2026-08-15. The GitHub API reported 147 stars and 61 forks on 2026-09-06.
ServerStarsForksLicenceLast commitToolsOpen issues
ebay-mcp (Yosef Hayim, community)14761MIT2026-08-152984
eBay/npm-public-api-mcp (first-party)11n/an/a2026-08-144n/a

forks, licence and open-issue count for eBay's first-party server were not read.

That contrast is the reason this category isn't a vendor-owned SERP: eBay's own MCP server is a 4-tool API passthrough with 11 stars and no marketing behind it. It's a generic API-discovery wrapper, not purpose-built Sell API tooling, and its adoption reflects that.

02 Tools it exposes

A source read on 2026-07-25 counted 298 defineTool({ call sites across src/tools/categories/*.ts — spread across categories including marketing (83), inventory (36), other (36), account (37) and communication (33). ebay-mcp's current README frames its scope in marketing terms, enumerating roughly two dozen ebay_* tools rather than stating a hard count. A separate comment left in src/mcp/toolGating.ts:17 still describes "the full ~187-tool catalogue" — a stale figure from an earlier build that the 298 count doesn't support.

Read/write status below follows the same classification the server itself uses at runtime — WRITE_NAME_PATTERN and READ_NAME_PATTERN in src/mcp/readOnlyFilter.ts:30-31 and :34-35 — applied to a sample of the registered tool set:

ToolWhat it doesRead/write
ebay_get_inventory_itemsList inventory itemsRead
ebay_get_inventory_itemFetch a single inventory itemRead
ebay_get_inventory_locationsList seller inventory locationsRead
ebay_get_ordersList ordersRead
ebay_get_orderFetch a single orderRead
ebay_get_offersList offersRead
ebay_get_offerFetch a single offerRead
ebay_create_offerCreate a new offerWrite
ebay_update_offerModify an existing offerWrite
ebay_get_shipping_fulfillmentsList shipping fulfillmentsRead
ebay_get_payment_dispute_summariesList payment dispute summariesRead
ebay_get_payment_disputeFetch a single payment disputeRead
ebay_get_campaignsList marketing campaignsRead
ebay_create_campaignCreate a marketing campaignWrite
ebay_get_seller_standards_profileFetch seller standards profileRead
ebay_get_traffic_reportFetch seller traffic reportRead
ebay_get_customer_service_metricFetch customer service metricsRead
ebay_get_rate_limitsFetch application rate limitsRead
ebay_get_user_rate_limitsFetch user-token rate limitsRead
ebay_get_oauth_urlGenerate an OAuth authorization URLRead
list_ebay_toolsList currently enabled tool familiesRead
enable_ebay_toolsEnable a tool family at runtimeWrite
disable_ebay_toolsDisable a tool family at runtimeWrite

03 Install and auth

Transport is stdio by default. Install and setup (the published npm package is ebay-mcp, at versions 1.14.1/1.15.0):

bash
npx ebay-mcp
npm run setup

npm run setup runs the OAuth wizard. Skip it, and the server falls back to client-credentials auth. Auth is eBay OAuth2 with a user token — the record states this gives "10,000-50,000 requests/day" — with automatic fallback to client credentials at 1,000 requests/day.

Tool availability at startup is controlled by EBAY_MCP_TOOLS, which spans 14 family keys defined in src/config/toolFamilies.ts:22-36: connector, token-management, account, inventory, fulfillment, marketing, analytics, metadata, taxonomy, communication, browse, other, developer, and trading. Left unset, it defaults to all — every one of the 298 tools advertised at boot (src/config/toolFamilies.ts:44-47) — with dynamic and static gating modes available as opt-in alternatives, the dynamic handshake documented at src/mcp/toolGating.ts:33-36.

04 What the source shows

The README documents EBAY_READ_ONLY as a read-only deployment mode, but it doesn't describe how that mode is enforced. Public record and source read on 2026-09-06 shows the mechanism: src/mcp/readOnlyFilter.ts:49-63 checks a tool's explicit readOnlyHint/destructiveHint annotation first, and only falls back to matching the tool's name against two hard-coded regexes when that annotation is missing — WRITE_NAME_PATTERN at src/mcp/readOnlyFilter.ts:30-31 and READ_NAME_PATTERN at :34-35. The file's own header concedes this fallback exists because many inventory and fulfillment endpoints ship without annotations at all.

That means on a 298-tool catalogue where annotation coverage is admittedly incomplete, "read-only mode" is closer to a naming convention than a behavioral guarantee: any unannotated tool whose name happens to match get|list|find|search|fetch|check|read|view|describe|status|health is admitted under EBAY_READ_ONLY, whatever its handler actually does.

Two other gaps sit in the same files. First, the tool count the code registers has drifted past the code's own internal documentation — src/mcp/toolGating.ts:17 still refers to "the full ~187-tool catalogue" against the 298 defineTool({ sites actually present. Second, because EBAY_MCP_TOOLS defaults to all when unset (src/config/toolFamilies.ts:44-47), an unconfigured deployment boots with the entire tool surface advertised at handshake — the narrower dynamic and static modes only apply if someone deliberately sets them.

05 Quirks, gaps and the honest verdict

  • Read-only isn't enforced behaviorallyEBAY_READ_ONLY gates by tool name regex with an annotation-first override, not by inspecting what the handler does (src/mcp/readOnlyFilter.ts:30-35, 49-63). Treat it as a convenience filter, not a compliance boundary.
  • Skipping OAuth setup silently caps throughput — running without the wizard falls back to client-credentials auth at 1,000 requests/day instead of the 10,000-50,000 a user token gets.
  • Stale internal documentationtoolGating.ts:17 still cites "~187" tools; the actual registered count is 298 as of the 2026-07-25 source read, while the README frames its scope in marketing terms rather than stating a hard number.
  • No official affiliation — the repo carries an explicit disclaimer that it's unofficial and unaffiliated with eBay Inc., and points to eBay's API License Agreement for data-handling obligations, which matters if a client asks who's liable.

The honest verdict: use yosefhayim/ebay-mcp for building or prototyping eBay Sell API integrations behind full OAuth, not as a trusted read-only or compliance boundary — EBAY_READ_ONLY is a tool-name regex, not an enforced behavioral guarantee. eBay's own npm-public-api-mcp remains the fallback only if you want a minimal, first-party passthrough and don't need purpose-built Sell API tools.

07 Frequently asked questions

Does EBAY_READ_ONLY actually prevent write operations?
Not reliably. It's enforced by matching tool names against hard-coded regexes when a tool lacks an explicit annotation (src/mcp/readOnlyFilter.ts:30-35, 49-63), so an unannotated write-capable tool whose name matches the read pattern can still be admitted.
How many tools does ebay-mcp actually register?
A source read on 2026-07-25 counted 298 defineTool({ call sites across src/tools/categories/*.ts. The README enumerates roughly two dozen ebay_* tools rather than stating a hard count; an internal comment at src/mcp/toolGating.ts:17 still says '~187', which is stale.
What happens if I don't run the OAuth setup wizard?
The server falls back to client-credentials auth, capping throughput at roughly 1,000 requests/day instead of the 10,000-50,000/day available with a user OAuth token.
Is there an official eBay MCP server instead?
Yes, eBay/npm-public-api-mcp, but it's a 4-tool API passthrough with 11 stars and no marketing behind it, versus ebay-mcp's 147 stars as of 2026-09-06.
What transport does ebay-mcp use?
stdio by default.
i
Sources & verification. Setup performed and every number on this page verified 2026-09-06 against: ebay-mcp GitHub repository · ebay-mcp on npm · npm-public-api-mcp on npm
AM
Alex Mashkovtsev
Founder · Eng Lead at INSO

Alex leads engineering at INSO, an AI-native product & commerce studio. He's shipped custom Shopify apps, checkout redesigns, and theme architecture for brands across the US and EU.