Connect eBay to ChatGPT: Manage Ad Campaigns & Ad Group Bids
Learn how to connect eBay to ChatGPT using a managed MCP server to automate Promoted Listings, adjust ad group bids, and orchestrate campaign workflows.
If you need to connect eBay to ChatGPT to automate Promoted Listings, optimize ad group bids, or manage complex campaign hierarchies, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between ChatGPT's tool calls and eBay's extensive Sell Marketing API. You can either spend weeks building and maintaining this infrastructure in-house, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.
If your team uses Claude, check out our guide on connecting eBay to Claude or explore our broader architectural overview on connecting eBay to AI Agents.
Giving a Large Language Model (LLM) read and write access to an enterprise marketplace platform like eBay presents a significant engineering challenge. You have to handle complex bidding strategies (CPC vs CPS), map asynchronous reporting tasks, and navigate a strictly enforced rate limiting environment. Every time eBay updates a schema or modifies a campaign resource, your custom server code must be updated and redeployed.
This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for eBay, connect it natively to ChatGPT, and execute complex ad campaign workflows using natural language.
The Engineering Reality of the eBay API
A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, implementing it against eBay's specific API architecture is notoriously difficult.
If you decide to build a custom MCP server for eBay, you own the entire API lifecycle. Here are the specific integration challenges that break standard CRUD assumptions when working with eBay:
Disparate Item Identifiers
eBay operates multiple parallel APIs for managing inventory. The Sell Marketing API (used for Promoted Listings) requires clients to reference items using either a listing_id (generated by the legacy Trading API) or an inventory_reference_id (used by the modern Inventory API). When an LLM wants to add an item to an ad group, the MCP server must cleanly differentiate which identifier to pass in the payload. Hardcoding these ID mappings in a custom server is brittle; a dynamic MCP generator handles this schema complexity natively.
Complex Pagination via HATEOAS
Unlike modern SaaS APIs that use simple integer limit and offset parameters, eBay relies heavily on HATEOAS (Hypermedia as the Engine of Application State). When fetching a large list of ads or campaigns, the API returns a next link containing a pre-signed URL with specific cursor hashes. Truto's integration layer explicitly parses these links and translates them into a standard next_cursor property for the LLM. The LLM is instructed to pass this cursor back unmodified, preventing hallucinated pagination states.
Factual Note on Rate Limits
eBay aggressively enforces API rate limits, and handling them correctly is critical for automated systems. Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream eBay API returns an HTTP 429 Too Many Requests, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit info into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF spec. The caller - your LLM agent framework - is responsible for reading these headers and implementing retry/backoff logic.
Generating the eBay MCP Server
Truto derives MCP tools dynamically from the eBay integration's resource definitions and documentation records. Rather than hand-coding tool logic, Truto exposes any documented endpoint as an MCP-compatible JSON-RPC tool. The LLM sends a flat JSON object, and Truto's routing layer splits the arguments into the correct path, query, and body parameters based on the schemas.
Each MCP server is scoped to a single connected eBay account. The URL contains a cryptographic token that securely routes the request to the correct tenant.
You can generate an MCP server for eBay using either the Truto UI or the REST API.
Method 1: Via the Truto UI
For teams who prefer visual configuration:
- Navigate to the Integrated Accounts page in the Truto dashboard.
- Select your connected eBay account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Select your desired configuration (e.g., set allowed methods to
readandwrite, and filter tags tocampaignsandads). - Copy the generated MCP server URL (it will look like
https://api.truto.one/mcp/<token>).
Method 2: Via the Truto API
For developers building programmatic onboarding flows, you can generate the MCP server via a single POST request. This method allows you to strictly scope what the LLM can access.
Request:
curl -X POST https://api.truto.one/integrated-account/<integrated_account_id>/mcp \
-H "Authorization: Bearer <TRUTO_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "eBay Ads Manager for ChatGPT",
"config": {
"methods": ["read", "write"],
"tags": ["campaigns", "ads", "ad_groups"]
}
}'Response:
{
"id": "abc-123",
"name": "eBay Ads Manager for ChatGPT",
"config": {
"methods": ["read", "write"],
"tags": ["campaigns", "ads", "ad_groups"]
},
"expires_at": null,
"url": "https://api.truto.one/mcp/a1b2c3d4e5f6..."
}Treat this url as a sensitive credential. It holds the authentication routing for that specific eBay account.
Connecting the MCP Server to ChatGPT
Once you have your Truto MCP URL, connecting it to ChatGPT takes seconds. You do not need to configure OAuth or map custom JSON schemas inside OpenAI.
Method A: Via the ChatGPT UI (Custom Connectors)
If you are using ChatGPT Pro, Plus, Business, Enterprise, or Education:
- Open ChatGPT and navigate to Settings -> Apps -> Advanced settings.
- Ensure Developer mode is enabled.
- Under MCP servers / Custom connectors, click to add a new server.
- Enter a name (e.g., "eBay Ads by Truto").
- Paste the Truto MCP URL into the Server URL field.
- Click Save.
ChatGPT will immediately ping the server, execute the JSON-RPC initialization handshake, and load the available eBay tools.
Method B: Via Manual Config File (Local Agents/Desktop)
If you are running a custom OpenAI agent framework locally or configuring an MCP client that requires a config file, you can bridge the Truto REST URL using the standard Server-Sent Events (SSE) transport provided by the MCP SDK.
Add the following to your mcp-config.json:
{
"mcpServers": {
"ebay-ads": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"--url",
"https://api.truto.one/mcp/a1b2c3d4e5f6..."
]
}
}
}Hero Tools for eBay Ad Campaigns
When you connect the MCP server, Truto automatically provides the LLM with standardized tools derived from the eBay API documentation. Here are the highest-leverage tools for managing Promoted Listings and bids.
list_all_e_bay_campaigns
Retrieves the details for all of the seller's defined campaigns. This is the foundational tool an LLM uses to map campaign IDs before making structural changes.
"Fetch a list of all active eBay ad campaigns and summarize their current funding models (CPC vs CPS)."
create_a_e_bay_campaign
Creates a new Promoted Listings general, priority, or offsite campaign. The LLM handles the JSON schema required to configure start dates, end dates, and funding models.
"Create a new priority strategy CPC campaign named 'Winter Clearance 2026' starting tomorrow. Set the daily budget to 50 USD."
e_bay_ad_group_bid_suggestions_search
Allows sellers to retrieve suggested bids for input keywords and match types. This turns ChatGPT into an analytical bidding engine that can query eBay's live data before setting prices.
"Look up the suggested keyword bids for the ad group ID '88776655' in campaign '112233' using the keywords 'vintage watch' and 'analog watch'."
update_a_e_bay_ad_group_by_id
Modifies the default bid, status, or name of an ad group associated with a manual targeting campaign.
"Update the ad group '88776655' in campaign '112233'. Change its default bid to 1.25 USD and ensure the status is active."
e_bay_keywords_bulk_create
Adds keywords in bulk to an existing priority strategy ad group that uses manual targeting, allowing the LLM to process and assign semantic keyword expansions rapidly.
"Add the following exact-match keywords to ad group '88776655' in campaign '112233': 'leather boots', 'winter boots', and 'snow boots'. Set the CPC rate for each to 0.85 USD."
e_bay_ads_bulk_update_bid
Updates the bid percentage values for a set of ads associated with a specified campaign. This works for listings created via either the Trading API or Inventory API.
"Bulk update the bid percentages to 5.5% for the listing IDs '123456789' and '987654321' in campaign '112233'."
To view the complete schema definitions and the full list of available eBay endpoints, visit the eBay integration page on Truto.
Workflows in Action
Once the MCP server is connected, ChatGPT can sequence these tools to perform complex ad optimization routines. Here are two real-world scenarios.
Workflow 1: Campaign Creation and Bid Optimization
When a seller wants to launch a highly targeted ad campaign, the LLM must first create the campaign, create the ad group, fetch bid suggestions, and finalize the bids.
"I want to launch a new manual CPC campaign called 'Spring Audio Sale'. Set the daily budget to $100. Create an ad group called 'Headphones', check eBay for the suggested bid on the keyword 'wireless headphones', and set the ad group's default bid to match the higher end of that suggestion."
sequenceDiagram
participant User
participant ChatGPT as ChatGPT
participant Truto as Truto MCP Server
participant Upstream as "Upstream API (eBay)"
User->>ChatGPT: "Create campaign 'Spring Audio Sale', create ad group..."
ChatGPT->>Truto: call create_a_e_bay_campaign<br>{"campaignName": "Spring Audio Sale", "budget": 100, "fundingStrategy": "CPC"}
Truto->>Upstream: POST /sell/marketing/v1/campaign
Upstream-->>Truto: 201 Created (Location Header: campaign_id: 555666)
Truto-->>ChatGPT: Result: {"campaign_id": "555666"}
ChatGPT->>Truto: call create_a_e_bay_ad_group<br>{"campaign_id": "555666", "name": "Headphones"}
Truto->>Upstream: POST /sell/marketing/v1/campaign/555666/ad_group
Upstream-->>Truto: 201 Created (Location Header: ad_group_id: 777888)
Truto-->>ChatGPT: Result: {"ad_group_id": "777888"}
ChatGPT->>Truto: call e_bay_ad_group_bid_suggestions_search<br>{"campaign_id": "555666", "ad_group_id": "777888", "keywords": ["wireless headphones"]}
Truto->>Upstream: POST /sell/marketing/v1/ad_group/777888/suggested_bids
Upstream-->>Truto: 200 OK (Suggested bid: $1.15 to $1.40)
Truto-->>ChatGPT: Result: Bid data array
ChatGPT->>Truto: call update_a_e_bay_ad_group_by_id<br>{"campaign_id": "555666", "id": "777888", "defaultBid": 1.40}
Truto->>Upstream: PUT /sell/marketing/v1/campaign/555666/ad_group/777888
Upstream-->>Truto: 204 No Content
Truto-->>ChatGPT: Result: Success
ChatGPT-->>User: "Campaign 'Spring Audio Sale' created with Ad Group 'Headphones'. Default bid set to $1.40 based on eBay suggestions."What the user gets back: The LLM successfully orchestrates a four-step API sequence, passing identifiers between endpoints, and dynamically querying the market rate before setting the final financial parameters.
Workflow 2: Bulk Ad Rate Adjustments
For Cost Per Sale (CPS) campaigns, sellers frequently need to adjust bid percentages across multiple listings based on performance.
"Find my campaign named 'Evergreen Listings'. I need to aggressively push inventory. Bulk update the bid percentage for all active ads in that campaign to 7.5%."
sequenceDiagram
participant User
participant ChatGPT as ChatGPT
participant Truto as Truto MCP Server
participant Upstream as "Upstream API (eBay)"
User->>ChatGPT: "Find 'Evergreen Listings', update bid percentage to 7.5%..."
ChatGPT->>Truto: call e_bay_campaigns_lookup_by_name<br>{"campaign_name": "Evergreen Listings"}
Truto->>Upstream: GET /sell/marketing/v1/campaign/get_campaign_by_name?campaign_name=...
Upstream-->>Truto: 200 OK (campaign_id: 112233)
Truto-->>ChatGPT: Result: {"campaignId": "112233"}
ChatGPT->>Truto: call list_all_e_bay_ads<br>{"campaign_id": "112233", "limit": "100"}
Truto->>Upstream: GET /sell/marketing/v1/campaign/112233/ad
Upstream-->>Truto: 200 OK (Array of Ad IDs and Listing IDs)
Truto-->>ChatGPT: Result: [ { adId: "A1", listingId: "L1" }, { adId: "A2", listingId: "L2" } ]
ChatGPT->>Truto: call e_bay_ads_bulk_update_bid<br>{"campaign_id": "112233", "requests": [{"adId": "A1", "bidPercentage": 7.5}, {"adId": "A2", "bidPercentage": 7.5}]}
Truto->>Upstream: POST /sell/marketing/v1/campaign/112233/bulk_update_bid
Upstream-->>Truto: 200 OK
Truto-->>ChatGPT: Result: Bulk update success responses
ChatGPT-->>User: "I located 'Evergreen Listings' and successfully updated the bid percentage to 7.5% for all active ads."What the user gets back: The agent retrieves the correct campaign ID using a name lookup, lists all associated ads, packages them into a bulk request array, and applies the new financial percentage across the board.
Security and Access Control
Exposing an enterprise eBay account to an LLM requires strict boundary setting. Truto's MCP servers provide several mechanisms to lock down access at the token generation stage:
- Method Filtering: By setting
config.methodsto["read"], the MCP server will silently drop all POST, PUT, and DELETE operations during tool generation. The LLM can view campaigns and bid suggestions but cannot alter active bids. - Tag Filtering: By passing
config.tags: ["campaigns", "ads"], the server filters the available documentation records. The LLM will only see tools related to those functional areas, completely ignoring resources like customer service metrics or order management. - Secondary Authentication: Setting
require_api_token_auth: truemeans possession of the MCP URL is not enough. The MCP client (or the user interacting with it) must also provide a valid Truto API token in theAuthorizationheader, preventing unauthorized network access if the URL leaks. - Automatic Expiration: You can provision temporary access for automated tasks by setting an
expires_attimestamp. Once the time is reached, the underlying token storage automatically expires and scheduled background jobs permanently clean up the access records.
Connect eBay to ChatGPT Today
Building a custom integration layer that translates LLM JSON arguments into eBay's complex API structures requires massive engineering overhead. By using Truto to generate a managed MCP server, you eliminate the need to write schema parsers, maintain authentication lifecycles, and manually patch breaking API changes.
Truto’s documentation-driven architecture ensures that only well-described, curated API endpoints are exposed to your AI agents, drastically reducing hallucination rates and payload errors.
FAQ
- How does Truto handle eBay API rate limits?
- Truto does not retry, throttle, or apply backoff on rate limit errors. When the eBay API returns an HTTP 429, Truto passes that error directly to the caller and normalizes the upstream rate limit info into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The calling agent is responsible for implementing retry and backoff logic.
- Can I restrict what eBay data ChatGPT can access?
- Yes. When generating the MCP server token, you can configure method filters (e.g., read-only) and tag filters (e.g., only 'campaigns' or 'ads') to strictly limit which endpoints are exposed as tools to the LLM.
- How are eBay API tools generated for the MCP server?
- Tools are generated dynamically based on the eBay integration's resource definitions and documentation records. If an endpoint is documented, it is exposed as a tool. Truto handles the schema parsing to translate eBay's nested payloads into a flat input namespace for the LLM.