ebay-mcp 1.13.2 → 1.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.de.md +3 -3
  2. package/README.es.md +3 -3
  3. package/README.fr.md +3 -3
  4. package/README.ja.md +3 -3
  5. package/README.ko.md +3 -3
  6. package/README.md +163 -41
  7. package/README.pt-BR.md +3 -3
  8. package/README.ru.md +3 -3
  9. package/README.zh-CN.md +3 -3
  10. package/build/api/account-management/account.js +633 -297
  11. package/build/api/analytics-and-report/analytics.js +111 -65
  12. package/build/api/client.js +199 -140
  13. package/build/api/clientRequestError.js +23 -0
  14. package/build/api/clientTrading.js +213 -0
  15. package/build/api/clientTradingError.js +4 -0
  16. package/build/api/communication/feedback.js +147 -59
  17. package/build/api/communication/message.js +134 -81
  18. package/build/api/communication/negotiation.js +65 -53
  19. package/build/api/communication/notification.js +458 -164
  20. package/build/api/developer/developer.js +99 -45
  21. package/build/api/index.js +23 -8
  22. package/build/api/listing-management/inventory.js +884 -338
  23. package/build/api/listing-metadata/metadata.js +416 -170
  24. package/build/api/listing-metadata/taxonomy.js +187 -42
  25. package/build/api/marketing-and-promotions/marketing.js +1392 -598
  26. package/build/api/marketing-and-promotions/recommendation.js +49 -24
  27. package/build/api/order-management/dispute.js +226 -45
  28. package/build/api/order-management/fulfillment.js +144 -71
  29. package/build/api/order-management/orderIssueHelpers.js +61 -0
  30. package/build/api/other/compliance.js +50 -38
  31. package/build/api/other/edelivery.js +603 -159
  32. package/build/api/other/finding.js +280 -0
  33. package/build/api/other/identity.js +30 -15
  34. package/build/api/other/translation.js +29 -14
  35. package/build/api/other/vero.js +113 -27
  36. package/build/api/rateLimitTracker.js +55 -0
  37. package/build/api/shared/request.js +189 -98
  38. package/build/api/trading/trading.js +154 -87
  39. package/build/auth/credentialSession.js +250 -0
  40. package/build/auth/oauth.js +298 -171
  41. package/build/auth/{oauth-metadata.js → oauthMetadata.js} +22 -6
  42. package/build/auth/oauthMiddleware.js +104 -0
  43. package/build/auth/{scope-utils.js → scopeUtils.js} +101 -28
  44. package/build/auth/tokenVerifier.js +243 -0
  45. package/build/auth/tokenVerifierError.js +21 -0
  46. package/build/config/environment.js +148 -113
  47. package/build/config/{tool-families.js → toolFamilies.js} +30 -14
  48. package/build/index.js +25 -19
  49. package/build/mcp/{http-transport.js → httpTransport.js} +102 -52
  50. package/build/mcp/readOnlyFilter.js +67 -0
  51. package/build/mcp/runtime.js +31 -13
  52. package/build/mcp/{tool-gating.js → toolGating.js} +77 -49
  53. package/build/mcp/{ui-bridge.js → uiBridge.js} +80 -23
  54. package/build/schemas/account-management/account.js +144 -6
  55. package/build/schemas/analytics/analytics.js +33 -19
  56. package/build/schemas/communication/messages.js +12 -42
  57. package/build/schemas/developer/developer.js +135 -0
  58. package/build/schemas/fulfillment/orders.js +183 -21
  59. package/build/schemas/index.js +27 -19
  60. package/build/schemas/inventory-management/inventory.js +17 -9
  61. package/build/schemas/marketing/marketing.js +480 -25
  62. package/build/schemas/metadata/metadata.js +11 -6
  63. package/build/schemas/other/finding.js +27 -0
  64. package/build/schemas/other/otherApis.js +424 -0
  65. package/build/schemas/taxonomy/taxonomy.js +11 -5
  66. package/build/scripts/{auto-setup.js → autoSetup.js} +87 -74
  67. package/build/scripts/{build-ui.js → buildUi.js} +6 -1
  68. package/build/scripts/{dev-sync.js → devSync.js} +169 -110
  69. package/build/scripts/diagnostics.js +52 -44
  70. package/build/scripts/{download-specs.js → downloadSpecs.js} +29 -21
  71. package/build/scripts/{interactive-setup.js → interactiveSetup.js} +84 -78
  72. package/build/scripts/setup.js +241 -178
  73. package/build/scripts/{setup-shared.js → setupShared.js} +29 -7
  74. package/build/scripts/skills.js +35 -27
  75. package/build/scripts/updateApiStatusDoc.js +71 -0
  76. package/build/serverHttp.js +90 -0
  77. package/build/skills/content.js +124 -118
  78. package/build/skills/index.js +22 -10
  79. package/build/skills/install.js +21 -10
  80. package/build/skills/markers.js +50 -15
  81. package/build/skills/{registry-snapshot.js → registrySnapshot.js} +8 -2
  82. package/build/skills/render.js +41 -14
  83. package/build/skills/targets.js +49 -17
  84. package/build/tools/categories/account.js +166 -264
  85. package/build/tools/categories/analytics.js +11 -22
  86. package/build/tools/categories/browse.js +17 -0
  87. package/build/tools/categories/communication.js +124 -399
  88. package/build/tools/categories/connector.js +23 -20
  89. package/build/tools/categories/developer.js +46 -159
  90. package/build/tools/categories/fulfillment.js +84 -215
  91. package/build/tools/categories/index.js +6 -14
  92. package/build/tools/categories/inventory.js +238 -293
  93. package/build/tools/categories/marketing.js +677 -39
  94. package/build/tools/categories/metadata.js +190 -117
  95. package/build/tools/categories/other.js +81 -208
  96. package/build/tools/categories/taxonomy.js +29 -20
  97. package/build/tools/categories/{token-management.js → tokenManagement.js} +187 -192
  98. package/build/tools/categories/trading.js +16 -47
  99. package/build/tools/contracts.js +34 -24
  100. package/build/tools/{define-tool.js → defineTool.js} +44 -29
  101. package/build/tools/registry.js +87 -29
  102. package/build/tools/schemas.js +3 -57
  103. package/build/tools/ui/archetypes.js +1 -0
  104. package/build/tools/ui/{map-helpers.js → mapHelpers.js} +69 -19
  105. package/build/tools/ui/maps.js +294 -80
  106. package/build/types/index.js +1 -1
  107. package/build/ui/card.html +14 -14
  108. package/build/ui/chart.html +14 -14
  109. package/build/ui/stat.html +87 -0
  110. package/build/ui/table.html +14 -14
  111. package/build/utils/apiStatusFeed.js +95 -0
  112. package/build/utils/cliOutput.js +15 -0
  113. package/build/utils/cliUi.js +108 -0
  114. package/build/utils/communication/feedback.js +57 -77
  115. package/build/utils/communication/message.js +69 -98
  116. package/build/utils/communication/negotiation.js +30 -57
  117. package/build/utils/communication/notification.js +112 -252
  118. package/build/utils/{date-converter.js → dateConverter.js} +62 -30
  119. package/build/utils/effectSchema.js +203 -0
  120. package/build/utils/effectSchemaAdapter.js +121 -0
  121. package/build/utils/effectSchemaChainMethods.js +146 -0
  122. package/build/utils/effectSchemaRefinements.js +104 -0
  123. package/build/utils/effectSchemaStringMethods.js +63 -0
  124. package/build/utils/effectSchemaTypes.js +47 -0
  125. package/build/utils/{env-parser.js → envParser.js} +10 -2
  126. package/build/utils/errors.js +7 -3
  127. package/build/utils/http.js +148 -89
  128. package/build/utils/{llm-client-detector.js → llmClientDetector.js} +295 -274
  129. package/build/utils/logger.js +127 -51
  130. package/build/utils/{oauth-helper.js → oauthHelper.js} +127 -90
  131. package/build/utils/other/compliance.js +18 -38
  132. package/build/utils/other/identity.js +2 -2
  133. package/build/utils/other/translation.js +4 -4
  134. package/build/utils/other/vero.js +36 -20
  135. package/build/utils/schemaHelpers.js +22 -0
  136. package/build/utils/scopeHelper.js +270 -0
  137. package/build/utils/securityChecker.js +316 -0
  138. package/build/utils/{setup-validator.js → setupValidator.js} +113 -94
  139. package/build/utils/{setup-wizard.js → setupWizard.js} +57 -46
  140. package/build/utils/{token-utils.js → tokenUtils.js} +2 -2
  141. package/build/utils/trading/trading.js +35 -0
  142. package/build/utils/typeGuards.js +12 -0
  143. package/build/utils/version.js +65 -29
  144. package/package.json +10 -8
  145. package/build/api/client-trading.js +0 -124
  146. package/build/api/communication/shared.js +0 -59
  147. package/build/api/shared/query-params.js +0 -16
  148. package/build/auth/credential-session.js +0 -166
  149. package/build/auth/oauth-middleware.js +0 -100
  150. package/build/auth/token-verifier.js +0 -186
  151. package/build/schemas/other/other-apis.js +0 -390
  152. package/build/scripts/update-api-status-doc.js +0 -44
  153. package/build/server-http.js +0 -85
  154. package/build/tools/definitions/marketing.js +0 -1381
  155. package/build/tools/tool-handlers/marketing.js +0 -312
  156. package/build/utils/account-management/account.js +0 -818
  157. package/build/utils/api-status-feed.js +0 -84
  158. package/build/utils/cli-ui.js +0 -47
  159. package/build/utils/order-management/dispute.js +0 -369
  160. package/build/utils/order-management/fulfillment.js +0 -205
  161. package/build/utils/other/edelivery.js +0 -235
  162. package/build/utils/schema-helpers.js +0 -13
  163. package/build/utils/scope-helper.js +0 -207
  164. package/build/utils/security-checker.js +0 -248
  165. package/build/utils/type-guards.js +0 -6
  166. /package/build/auth/{oauth-types.js → oauthTypes.js} +0 -0
  167. /package/build/{server-http.d.ts → serverHttp.d.ts} +0 -0
  168. /package/build/tools/ui/{view-models.js → viewModels.js} +0 -0
  169. /package/build/types/{ebay-enums.js → ebayEnums.js} +0 -0
@@ -1,39 +1,677 @@
1
- import { marketingTools } from '../../tools/definitions/marketing.js';
2
- import { marketingHandlers } from '../../tools/tool-handlers/marketing.js';
3
- /**
4
- * Marketing tools are integrated by pairing the existing definition catalog with
5
- * the existing handler map, rather than being re-expressed through `defineTool`
6
- * like the other categories. Two properties of this area make co-location via the
7
- * typed factory inappropriate:
8
- *
9
- * 1. `src/api/marketing-and-promotions/marketing.ts` is excluded from `tsconfig`,
10
- * so `api.marketing.*` is untyped — `defineTool` would add no type safety here.
11
- * 2. Several marketing handlers intentionally read a broader argument shape than
12
- * their advertised input schema (e.g. `ebay_get_ad_report`, `ebay_update_ad_bid`).
13
- * Because the MCP transport strips arguments to the declared input schema before
14
- * invoking the handler, those extra reads already resolve to `undefined` in
15
- * production. Pairing the arrays preserves that behavior exactly; re-expressing
16
- * it through `defineTool` would either bake the mismatch in as literal `undefined`
17
- * arguments or silently change behavior. These divergences are tracked separately.
18
- *
19
- * Pairing keeps the registry contract identical (definition + handler per tool)
20
- * while leaving the marketing definition/handler source files in place.
21
- */
22
- const registeredMarketingNames = new Set(marketingTools.map((definition) => definition.name));
23
- /** Registered marketing tools, paired definition-to-handler by name. */
24
- export const marketingEntries = marketingTools.map((definition) => ({
25
- definition,
26
- handler: marketingHandlers[definition.name],
27
- }));
28
- /**
29
- * Marketing handlers that have no registered definition (currently only
30
- * `ebay_get_ad_report_metadata_for_report_type`). They remain callable via
31
- * `executeTool` but are not advertised to MCP clients, preserving prior behavior
32
- * where these handlers existed without a definition.
33
- */
34
- export const marketingHandlerOnlyEntries = Object.entries(marketingHandlers)
35
- .filter(([name]) => !registeredMarketingNames.has(name))
36
- .map(([name, handler]) => ({
37
- definition: { name, description: '', inputSchema: {} },
38
- handler,
39
- }));
1
+ import { Effect } from 'effect';
2
+ import { zodToJsonSchema } from 'zod-to-json-schema';
3
+ import * as marketingSchemas from '../../schemas/marketing/marketing.js';
4
+ import { defineTool } from '../../tools/defineTool.js';
5
+ const emptyResponseSchema = {
6
+ type: 'object',
7
+ properties: {},
8
+ description: 'Empty response on successful operation',
9
+ };
10
+ const toOutputSchema = (schema, name) => zodToJsonSchema(schema, { name, $refStrategy: 'none' });
11
+ /** Marketing API tools for campaigns, ads, promotions, reports, and email campaigns. */
12
+ export const marketingEntries = [
13
+ defineTool({
14
+ name: 'ebay_bulk_create_ads_by_inventory_reference',
15
+ description: 'Bulk create ads by inventory reference through the eBay Marketing API.',
16
+ inputSchema: marketingSchemas.bulkCreateAdsByInventoryReferenceInputSchema.shape,
17
+ outputSchema: toOutputSchema(marketingSchemas.bulkCreateAdsByInventoryReferenceResponseSchema, 'BulkCreateAdsByInventoryReferenceResponse'),
18
+ annotations: { readOnlyHint: false },
19
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkCreateAdsByInventoryReference(args)),
20
+ }),
21
+ defineTool({
22
+ name: 'ebay_bulk_create_ads_by_listing_id',
23
+ description: 'Bulk create ads by listing id through the eBay Marketing API.',
24
+ inputSchema: marketingSchemas.bulkCreateAdsByListingIdInputSchema.shape,
25
+ outputSchema: toOutputSchema(marketingSchemas.bulkAdResponseSchema, 'BulkCreateAdsByListingIdResponse'),
26
+ annotations: { readOnlyHint: false },
27
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkCreateAdsByListingId(args)),
28
+ }),
29
+ defineTool({
30
+ name: 'ebay_bulk_delete_ads_by_inventory_reference',
31
+ description: 'Bulk delete ads by inventory reference through the eBay Marketing API.',
32
+ inputSchema: marketingSchemas.bulkDeleteAdsByInventoryReferenceInputSchema.shape,
33
+ outputSchema: toOutputSchema(marketingSchemas.bulkDeleteAdsByInventoryReferenceResponseSchema, 'BulkDeleteAdsByInventoryReferenceResponse'),
34
+ annotations: { readOnlyHint: false },
35
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkDeleteAdsByInventoryReference(args)),
36
+ }),
37
+ defineTool({
38
+ name: 'ebay_bulk_delete_ads_by_listing_id',
39
+ description: 'Bulk delete ads by listing id through the eBay Marketing API.',
40
+ inputSchema: marketingSchemas.bulkDeleteAdsByListingIdInputSchema.shape,
41
+ outputSchema: toOutputSchema(marketingSchemas.bulkDeleteAdResponseSchema, 'BulkDeleteAdsByListingIdResponse'),
42
+ annotations: { readOnlyHint: false },
43
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkDeleteAdsByListingId(args)),
44
+ }),
45
+ defineTool({
46
+ name: 'ebay_bulk_update_ads_bid_by_inventory_reference',
47
+ description: 'Bulk update ads bid by inventory reference through the eBay Marketing API.',
48
+ inputSchema: marketingSchemas.bulkUpdateAdsBidByInventoryReferenceInputSchema.shape,
49
+ outputSchema: toOutputSchema(marketingSchemas.bulkUpdateAdsByInventoryReferenceResponseSchema, 'BulkUpdateAdsBidByInventoryReferenceResponse'),
50
+ annotations: { readOnlyHint: false },
51
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkUpdateAdsBidByInventoryReference(args)),
52
+ }),
53
+ defineTool({
54
+ name: 'ebay_bulk_update_ads_bid_by_listing_id',
55
+ description: 'Bulk update ads bid by listing id through the eBay Marketing API.',
56
+ inputSchema: marketingSchemas.bulkUpdateAdsBidByListingIdInputSchema.shape,
57
+ outputSchema: toOutputSchema(marketingSchemas.bulkAdUpdateResponseSchema, 'BulkUpdateAdsBidByListingIdResponse'),
58
+ annotations: { readOnlyHint: false },
59
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkUpdateAdsBidByListingId(args)),
60
+ }),
61
+ defineTool({
62
+ name: 'ebay_bulk_update_ads_status',
63
+ description: 'Bulk update ads status through the eBay Marketing API.',
64
+ inputSchema: marketingSchemas.bulkUpdateAdsStatusInputSchema.shape,
65
+ outputSchema: toOutputSchema(marketingSchemas.bulkAdUpdateStatusResponseSchema, 'BulkUpdateAdsStatusResponse'),
66
+ annotations: { readOnlyHint: false },
67
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkUpdateAdsStatus(args)),
68
+ }),
69
+ defineTool({
70
+ name: 'ebay_bulk_update_ads_status_by_listing_id',
71
+ description: 'Bulk update ads status by listing id through the eBay Marketing API.',
72
+ inputSchema: marketingSchemas.bulkUpdateAdsStatusByListingIdInputSchema.shape,
73
+ outputSchema: toOutputSchema(marketingSchemas.bulkAdUpdateStatusByListingIdResponseSchema, 'BulkUpdateAdsStatusByListingIdResponse'),
74
+ annotations: { readOnlyHint: false },
75
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkUpdateAdsStatusByListingId(args)),
76
+ }),
77
+ defineTool({
78
+ name: 'ebay_get_ads',
79
+ description: 'Get ads through the eBay Marketing API.',
80
+ inputSchema: marketingSchemas.getAdsInputSchema.shape,
81
+ outputSchema: toOutputSchema(marketingSchemas.adPagedCollectionResponseSchema, 'GetAdsResponse'),
82
+ annotations: { readOnlyHint: true },
83
+ handler: (api, args) => Effect.runPromise(api.marketing.getAds(args)),
84
+ }),
85
+ defineTool({
86
+ name: 'ebay_create_ad_by_listing_id',
87
+ description: 'Create ad by listing id through the eBay Marketing API.',
88
+ inputSchema: marketingSchemas.createAdByListingIdInputSchema.shape,
89
+ outputSchema: emptyResponseSchema,
90
+ annotations: { readOnlyHint: false },
91
+ handler: (api, args) => Effect.runPromise(api.marketing.createAdByListingId(args)),
92
+ }),
93
+ defineTool({
94
+ name: 'ebay_create_ads_by_inventory_reference',
95
+ description: 'Create ads by inventory reference through the eBay Marketing API.',
96
+ inputSchema: marketingSchemas.createAdsByInventoryReferenceInputSchema.shape,
97
+ outputSchema: toOutputSchema(marketingSchemas.adReferencesSchema, 'CreateAdsByInventoryReferenceResponse'),
98
+ annotations: { readOnlyHint: false },
99
+ handler: (api, args) => Effect.runPromise(api.marketing.createAdsByInventoryReference(args)),
100
+ }),
101
+ defineTool({
102
+ name: 'ebay_get_ad',
103
+ description: 'Get ad through the eBay Marketing API.',
104
+ inputSchema: marketingSchemas.getAdInputSchema.shape,
105
+ outputSchema: toOutputSchema(marketingSchemas.adSchema, 'GetAdResponse'),
106
+ annotations: { readOnlyHint: true },
107
+ handler: (api, args) => Effect.runPromise(api.marketing.getAd(args)),
108
+ }),
109
+ defineTool({
110
+ name: 'ebay_delete_ad',
111
+ description: 'Delete ad through the eBay Marketing API.',
112
+ inputSchema: marketingSchemas.deleteAdInputSchema.shape,
113
+ outputSchema: emptyResponseSchema,
114
+ annotations: { readOnlyHint: false, destructiveHint: true },
115
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteAd(args)),
116
+ }),
117
+ defineTool({
118
+ name: 'ebay_delete_ads_by_inventory_reference',
119
+ description: 'Delete ads by inventory reference through the eBay Marketing API.',
120
+ inputSchema: marketingSchemas.deleteAdsByInventoryReferenceInputSchema.shape,
121
+ outputSchema: toOutputSchema(marketingSchemas.adIdsSchema, 'DeleteAdsByInventoryReferenceResponse'),
122
+ annotations: { readOnlyHint: false },
123
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteAdsByInventoryReference(args)),
124
+ }),
125
+ defineTool({
126
+ name: 'ebay_get_ads_by_inventory_reference',
127
+ description: 'Get ads by inventory reference through the eBay Marketing API.',
128
+ inputSchema: marketingSchemas.getAdsByInventoryReferenceInputSchema.shape,
129
+ outputSchema: toOutputSchema(marketingSchemas.adsSchema, 'GetAdsByInventoryReferenceResponse'),
130
+ annotations: { readOnlyHint: true },
131
+ handler: (api, args) => Effect.runPromise(api.marketing.getAdsByInventoryReference(args)),
132
+ }),
133
+ defineTool({
134
+ name: 'ebay_update_bid',
135
+ description: 'Update bid through the eBay Marketing API.',
136
+ inputSchema: marketingSchemas.updateBidInputSchema.shape,
137
+ outputSchema: emptyResponseSchema,
138
+ annotations: { readOnlyHint: false },
139
+ handler: (api, args) => Effect.runPromise(api.marketing.updateBid(args)),
140
+ }),
141
+ defineTool({
142
+ name: 'ebay_get_ad_groups',
143
+ description: 'Get ad groups through the eBay Marketing API.',
144
+ inputSchema: marketingSchemas.getAdGroupsInputSchema.shape,
145
+ outputSchema: toOutputSchema(marketingSchemas.adGroupPagedCollectionResponseSchema, 'GetAdGroupsResponse'),
146
+ annotations: { readOnlyHint: true },
147
+ handler: (api, args) => Effect.runPromise(api.marketing.getAdGroups(args)),
148
+ }),
149
+ defineTool({
150
+ name: 'ebay_create_ad_group',
151
+ description: 'Create ad group through the eBay Marketing API.',
152
+ inputSchema: marketingSchemas.createAdGroupInputSchema.shape,
153
+ outputSchema: emptyResponseSchema,
154
+ annotations: { readOnlyHint: false },
155
+ handler: (api, args) => Effect.runPromise(api.marketing.createAdGroup(args)),
156
+ }),
157
+ defineTool({
158
+ name: 'ebay_get_ad_group',
159
+ description: 'Get ad group through the eBay Marketing API.',
160
+ inputSchema: marketingSchemas.getAdGroupInputSchema.shape,
161
+ outputSchema: toOutputSchema(marketingSchemas.adGroupSchema, 'GetAdGroupResponse'),
162
+ annotations: { readOnlyHint: true },
163
+ handler: (api, args) => Effect.runPromise(api.marketing.getAdGroup(args)),
164
+ }),
165
+ defineTool({
166
+ name: 'ebay_update_ad_group',
167
+ description: 'Update ad group through the eBay Marketing API.',
168
+ inputSchema: marketingSchemas.updateAdGroupInputSchema.shape,
169
+ outputSchema: emptyResponseSchema,
170
+ annotations: { readOnlyHint: false, idempotentHint: true },
171
+ handler: (api, args) => Effect.runPromise(api.marketing.updateAdGroup(args)),
172
+ }),
173
+ defineTool({
174
+ name: 'ebay_suggest_bids',
175
+ description: 'Suggest bids through the eBay Marketing API.',
176
+ inputSchema: marketingSchemas.suggestBidsInputSchema.shape,
177
+ outputSchema: toOutputSchema(marketingSchemas.targetedBidsPagedCollectionSchema, 'SuggestBidsResponse'),
178
+ annotations: { readOnlyHint: false },
179
+ handler: (api, args) => Effect.runPromise(api.marketing.suggestBids(args)),
180
+ }),
181
+ defineTool({
182
+ name: 'ebay_suggest_keywords',
183
+ description: 'Suggest keywords through the eBay Marketing API.',
184
+ inputSchema: marketingSchemas.suggestKeywordsInputSchema.shape,
185
+ outputSchema: toOutputSchema(marketingSchemas.targetedKeywordsPagedCollectionSchema, 'SuggestKeywordsResponse'),
186
+ annotations: { readOnlyHint: false },
187
+ handler: (api, args) => Effect.runPromise(api.marketing.suggestKeywords(args)),
188
+ }),
189
+ defineTool({
190
+ name: 'ebay_clone_campaign',
191
+ description: 'Clone campaign through the eBay Marketing API.',
192
+ inputSchema: marketingSchemas.cloneCampaignInputSchema.shape,
193
+ outputSchema: emptyResponseSchema,
194
+ annotations: { readOnlyHint: false },
195
+ handler: (api, args) => Effect.runPromise(api.marketing.cloneCampaign(args)),
196
+ }),
197
+ defineTool({
198
+ name: 'ebay_get_campaigns',
199
+ description: 'Get campaigns through the eBay Marketing API.',
200
+ inputSchema: marketingSchemas.getCampaignsInputSchema.shape,
201
+ outputSchema: toOutputSchema(marketingSchemas.campaignPagedCollectionResponseSchema, 'GetCampaignsResponse'),
202
+ annotations: { readOnlyHint: true },
203
+ handler: (api, args) => Effect.runPromise(api.marketing.getCampaigns(args)),
204
+ }),
205
+ defineTool({
206
+ name: 'ebay_create_campaign',
207
+ description: 'Create campaign through the eBay Marketing API.',
208
+ inputSchema: marketingSchemas.createCampaignInputSchema.shape,
209
+ outputSchema: emptyResponseSchema,
210
+ annotations: { readOnlyHint: false },
211
+ handler: (api, args) => Effect.runPromise(api.marketing.createCampaign(args)),
212
+ }),
213
+ defineTool({
214
+ name: 'ebay_get_campaign',
215
+ description: 'Get campaign through the eBay Marketing API.',
216
+ inputSchema: marketingSchemas.getCampaignInputSchema.shape,
217
+ outputSchema: toOutputSchema(marketingSchemas.campaignSchema, 'GetCampaignResponse'),
218
+ annotations: { readOnlyHint: true },
219
+ handler: (api, args) => Effect.runPromise(api.marketing.getCampaign(args)),
220
+ }),
221
+ defineTool({
222
+ name: 'ebay_delete_campaign',
223
+ description: 'Delete campaign through the eBay Marketing API.',
224
+ inputSchema: marketingSchemas.deleteCampaignInputSchema.shape,
225
+ outputSchema: emptyResponseSchema,
226
+ annotations: { readOnlyHint: false, destructiveHint: true },
227
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteCampaign(args)),
228
+ }),
229
+ defineTool({
230
+ name: 'ebay_end_campaign',
231
+ description: 'End campaign through the eBay Marketing API.',
232
+ inputSchema: marketingSchemas.endCampaignInputSchema.shape,
233
+ outputSchema: emptyResponseSchema,
234
+ annotations: { readOnlyHint: false },
235
+ handler: (api, args) => Effect.runPromise(api.marketing.endCampaign(args)),
236
+ }),
237
+ defineTool({
238
+ name: 'ebay_find_campaign_by_ad_reference',
239
+ description: 'Find campaign by ad reference through the eBay Marketing API.',
240
+ inputSchema: marketingSchemas.findCampaignByAdReferenceInputSchema.shape,
241
+ outputSchema: toOutputSchema(marketingSchemas.campaignsSchema, 'FindCampaignByAdReferenceResponse'),
242
+ annotations: { readOnlyHint: true },
243
+ handler: (api, args) => Effect.runPromise(api.marketing.findCampaignByAdReference(args)),
244
+ }),
245
+ defineTool({
246
+ name: 'ebay_get_campaign_by_name',
247
+ description: 'Get campaign by name through the eBay Marketing API.',
248
+ inputSchema: marketingSchemas.getCampaignByNameInputSchema.shape,
249
+ outputSchema: toOutputSchema(marketingSchemas.campaignSchema, 'GetCampaignByNameResponse'),
250
+ annotations: { readOnlyHint: true },
251
+ handler: (api, args) => Effect.runPromise(api.marketing.getCampaignByName(args)),
252
+ }),
253
+ defineTool({
254
+ name: 'ebay_launch_campaign',
255
+ description: 'Launch campaign through the eBay Marketing API.',
256
+ inputSchema: marketingSchemas.launchCampaignInputSchema.shape,
257
+ outputSchema: emptyResponseSchema,
258
+ annotations: { readOnlyHint: false },
259
+ handler: (api, args) => Effect.runPromise(api.marketing.launchCampaign(args)),
260
+ }),
261
+ defineTool({
262
+ name: 'ebay_pause_campaign',
263
+ description: 'Pause campaign through the eBay Marketing API.',
264
+ inputSchema: marketingSchemas.pauseCampaignInputSchema.shape,
265
+ outputSchema: emptyResponseSchema,
266
+ annotations: { readOnlyHint: false },
267
+ handler: (api, args) => Effect.runPromise(api.marketing.pauseCampaign(args)),
268
+ }),
269
+ defineTool({
270
+ name: 'ebay_resume_campaign',
271
+ description: 'Resume campaign through the eBay Marketing API.',
272
+ inputSchema: marketingSchemas.resumeCampaignInputSchema.shape,
273
+ outputSchema: emptyResponseSchema,
274
+ annotations: { readOnlyHint: false },
275
+ handler: (api, args) => Effect.runPromise(api.marketing.resumeCampaign(args)),
276
+ }),
277
+ defineTool({
278
+ name: 'ebay_setup_quick_campaign',
279
+ description: 'Setup quick campaign through the eBay Marketing API.',
280
+ inputSchema: marketingSchemas.setupQuickCampaignInputSchema.shape,
281
+ outputSchema: emptyResponseSchema,
282
+ annotations: { readOnlyHint: false },
283
+ handler: (api, args) => Effect.runPromise(api.marketing.setupQuickCampaign(args)),
284
+ }),
285
+ defineTool({
286
+ name: 'ebay_suggest_budget',
287
+ description: 'Suggest budget through the eBay Marketing API.',
288
+ inputSchema: marketingSchemas.suggestBudgetInputSchema.shape,
289
+ outputSchema: toOutputSchema(marketingSchemas.suggestBudgetResponseSchema, 'SuggestBudgetResponse'),
290
+ annotations: { readOnlyHint: true },
291
+ handler: (api, args) => Effect.runPromise(api.marketing.suggestBudget(args)),
292
+ }),
293
+ defineTool({
294
+ name: 'ebay_suggest_items',
295
+ description: 'Suggest items through the eBay Marketing API.',
296
+ inputSchema: marketingSchemas.suggestItemsInputSchema.shape,
297
+ outputSchema: toOutputSchema(marketingSchemas.targetedAdsPagedCollectionSchema, 'SuggestItemsResponse'),
298
+ annotations: { readOnlyHint: true },
299
+ handler: (api, args) => Effect.runPromise(api.marketing.suggestItems(args)),
300
+ }),
301
+ defineTool({
302
+ name: 'ebay_suggest_max_cpc',
303
+ description: 'Suggest max cpc through the eBay Marketing API.',
304
+ inputSchema: marketingSchemas.suggestMaxCpcInputSchema.shape,
305
+ outputSchema: toOutputSchema(marketingSchemas.suggestMaxCpcResponseSchema, 'SuggestMaxCpcResponse'),
306
+ annotations: { readOnlyHint: false },
307
+ handler: (api, args) => Effect.runPromise(api.marketing.suggestMaxCpc(args)),
308
+ }),
309
+ defineTool({
310
+ name: 'ebay_update_ad_rate_strategy',
311
+ description: 'Update ad rate strategy through the eBay Marketing API.',
312
+ inputSchema: marketingSchemas.updateAdRateStrategyInputSchema.shape,
313
+ outputSchema: emptyResponseSchema,
314
+ annotations: { readOnlyHint: false },
315
+ handler: (api, args) => Effect.runPromise(api.marketing.updateAdRateStrategy(args)),
316
+ }),
317
+ defineTool({
318
+ name: 'ebay_update_bidding_strategy',
319
+ description: 'Update bidding strategy through the eBay Marketing API.',
320
+ inputSchema: marketingSchemas.updateBiddingStrategyInputSchema.shape,
321
+ outputSchema: emptyResponseSchema,
322
+ annotations: { readOnlyHint: false },
323
+ handler: (api, args) => Effect.runPromise(api.marketing.updateBiddingStrategy(args)),
324
+ }),
325
+ defineTool({
326
+ name: 'ebay_update_campaign_budget',
327
+ description: 'Update campaign budget through the eBay Marketing API.',
328
+ inputSchema: marketingSchemas.updateCampaignBudgetInputSchema.shape,
329
+ outputSchema: emptyResponseSchema,
330
+ annotations: { readOnlyHint: false },
331
+ handler: (api, args) => Effect.runPromise(api.marketing.updateCampaignBudget(args)),
332
+ }),
333
+ defineTool({
334
+ name: 'ebay_update_campaign_identification',
335
+ description: 'Update campaign identification through the eBay Marketing API.',
336
+ inputSchema: marketingSchemas.updateCampaignIdentificationInputSchema.shape,
337
+ outputSchema: emptyResponseSchema,
338
+ annotations: { readOnlyHint: false },
339
+ handler: (api, args) => Effect.runPromise(api.marketing.updateCampaignIdentification(args)),
340
+ }),
341
+ defineTool({
342
+ name: 'ebay_bulk_create_keyword',
343
+ description: 'Bulk create keyword through the eBay Marketing API.',
344
+ inputSchema: marketingSchemas.bulkCreateKeywordInputSchema.shape,
345
+ outputSchema: toOutputSchema(marketingSchemas.bulkCreateKeywordResponseSchema, 'BulkCreateKeywordResponse'),
346
+ annotations: { readOnlyHint: false },
347
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkCreateKeyword(args)),
348
+ }),
349
+ defineTool({
350
+ name: 'ebay_bulk_update_keyword',
351
+ description: 'Bulk update keyword through the eBay Marketing API.',
352
+ inputSchema: marketingSchemas.bulkUpdateKeywordInputSchema.shape,
353
+ outputSchema: toOutputSchema(marketingSchemas.bulkUpdateKeywordResponseSchema, 'BulkUpdateKeywordResponse'),
354
+ annotations: { readOnlyHint: false },
355
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkUpdateKeyword(args)),
356
+ }),
357
+ defineTool({
358
+ name: 'ebay_get_keywords',
359
+ description: 'Get keywords through the eBay Marketing API.',
360
+ inputSchema: marketingSchemas.getKeywordsInputSchema.shape,
361
+ outputSchema: toOutputSchema(marketingSchemas.keywordPagedCollectionResponseSchema, 'GetKeywordsResponse'),
362
+ annotations: { readOnlyHint: true },
363
+ handler: (api, args) => Effect.runPromise(api.marketing.getKeywords(args)),
364
+ }),
365
+ defineTool({
366
+ name: 'ebay_create_keyword',
367
+ description: 'Create keyword through the eBay Marketing API.',
368
+ inputSchema: marketingSchemas.createKeywordInputSchema.shape,
369
+ outputSchema: emptyResponseSchema,
370
+ annotations: { readOnlyHint: false },
371
+ handler: (api, args) => Effect.runPromise(api.marketing.createKeyword(args)),
372
+ }),
373
+ defineTool({
374
+ name: 'ebay_get_keyword',
375
+ description: 'Get keyword through the eBay Marketing API.',
376
+ inputSchema: marketingSchemas.getKeywordInputSchema.shape,
377
+ outputSchema: toOutputSchema(marketingSchemas.keywordSchema, 'GetKeywordResponse'),
378
+ annotations: { readOnlyHint: true },
379
+ handler: (api, args) => Effect.runPromise(api.marketing.getKeyword(args)),
380
+ }),
381
+ defineTool({
382
+ name: 'ebay_update_keyword',
383
+ description: 'Update keyword through the eBay Marketing API.',
384
+ inputSchema: marketingSchemas.updateKeywordInputSchema.shape,
385
+ outputSchema: toOutputSchema(marketingSchemas.updateKeywordResponseSchema, 'UpdateKeywordResponse'),
386
+ annotations: { readOnlyHint: false, idempotentHint: true },
387
+ handler: (api, args) => Effect.runPromise(api.marketing.updateKeyword(args)),
388
+ }),
389
+ defineTool({
390
+ name: 'ebay_bulk_create_negative_keyword',
391
+ description: 'Bulk create negative keyword through the eBay Marketing API.',
392
+ inputSchema: marketingSchemas.bulkCreateNegativeKeywordInputSchema.shape,
393
+ outputSchema: toOutputSchema(marketingSchemas.bulkCreateNegativeKeywordResponseSchema, 'BulkCreateNegativeKeywordResponse'),
394
+ annotations: { readOnlyHint: false },
395
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkCreateNegativeKeyword(args)),
396
+ }),
397
+ defineTool({
398
+ name: 'ebay_bulk_update_negative_keyword',
399
+ description: 'Bulk update negative keyword through the eBay Marketing API.',
400
+ inputSchema: marketingSchemas.bulkUpdateNegativeKeywordInputSchema.shape,
401
+ outputSchema: toOutputSchema(marketingSchemas.bulkUpdateNegativeKeywordResponseSchema, 'BulkUpdateNegativeKeywordResponse'),
402
+ annotations: { readOnlyHint: false },
403
+ handler: (api, args) => Effect.runPromise(api.marketing.bulkUpdateNegativeKeyword(args)),
404
+ }),
405
+ defineTool({
406
+ name: 'ebay_get_negative_keywords',
407
+ description: 'Get negative keywords through the eBay Marketing API.',
408
+ inputSchema: marketingSchemas.getNegativeKeywordsInputSchema.shape,
409
+ outputSchema: toOutputSchema(marketingSchemas.negativeKeywordPagedCollectionResponseSchema, 'GetNegativeKeywordsResponse'),
410
+ annotations: { readOnlyHint: true },
411
+ handler: (api, args) => Effect.runPromise(api.marketing.getNegativeKeywords(args)),
412
+ }),
413
+ defineTool({
414
+ name: 'ebay_create_negative_keyword',
415
+ description: 'Create negative keyword through the eBay Marketing API.',
416
+ inputSchema: marketingSchemas.createNegativeKeywordInputSchema.shape,
417
+ outputSchema: emptyResponseSchema,
418
+ annotations: { readOnlyHint: false },
419
+ handler: (api, args) => Effect.runPromise(api.marketing.createNegativeKeyword(args)),
420
+ }),
421
+ defineTool({
422
+ name: 'ebay_get_negative_keyword',
423
+ description: 'Get negative keyword through the eBay Marketing API.',
424
+ inputSchema: marketingSchemas.getNegativeKeywordInputSchema.shape,
425
+ outputSchema: toOutputSchema(marketingSchemas.negativeKeywordSchema, 'GetNegativeKeywordResponse'),
426
+ annotations: { readOnlyHint: true },
427
+ handler: (api, args) => Effect.runPromise(api.marketing.getNegativeKeyword(args)),
428
+ }),
429
+ defineTool({
430
+ name: 'ebay_update_negative_keyword',
431
+ description: 'Update negative keyword through the eBay Marketing API.',
432
+ inputSchema: marketingSchemas.updateNegativeKeywordInputSchema.shape,
433
+ outputSchema: emptyResponseSchema,
434
+ annotations: { readOnlyHint: false, idempotentHint: true },
435
+ handler: (api, args) => Effect.runPromise(api.marketing.updateNegativeKeyword(args)),
436
+ }),
437
+ defineTool({
438
+ name: 'ebay_get_report',
439
+ description: 'Get report through the eBay Marketing API.',
440
+ inputSchema: marketingSchemas.getReportInputSchema.shape,
441
+ outputSchema: emptyResponseSchema,
442
+ annotations: { readOnlyHint: true },
443
+ handler: (api, args) => Effect.runPromise(api.marketing.getReport(args)),
444
+ }),
445
+ defineTool({
446
+ name: 'ebay_get_report_metadata',
447
+ description: 'Get report metadata through the eBay Marketing API.',
448
+ inputSchema: marketingSchemas.getReportMetadataInputSchema.shape,
449
+ outputSchema: toOutputSchema(marketingSchemas.reportMetadatasSchema, 'GetReportMetadataResponse'),
450
+ annotations: { readOnlyHint: true },
451
+ handler: (api, args) => Effect.runPromise(api.marketing.getReportMetadata(args)),
452
+ }),
453
+ defineTool({
454
+ name: 'ebay_get_report_metadata_for_report_type',
455
+ description: 'Get report metadata for report type through the eBay Marketing API.',
456
+ inputSchema: marketingSchemas.getReportMetadataForReportTypeInputSchema.shape,
457
+ outputSchema: toOutputSchema(marketingSchemas.reportMetadataSchema, 'GetReportMetadataForReportTypeResponse'),
458
+ annotations: { readOnlyHint: true },
459
+ handler: (api, args) => Effect.runPromise(api.marketing.getReportMetadataForReportType(args)),
460
+ }),
461
+ defineTool({
462
+ name: 'ebay_get_report_tasks',
463
+ description: 'Get report tasks through the eBay Marketing API.',
464
+ inputSchema: marketingSchemas.getReportTasksInputSchema.shape,
465
+ outputSchema: toOutputSchema(marketingSchemas.reportTaskPagedCollectionSchema, 'GetReportTasksResponse'),
466
+ annotations: { readOnlyHint: true },
467
+ handler: (api, args) => Effect.runPromise(api.marketing.getReportTasks(args)),
468
+ }),
469
+ defineTool({
470
+ name: 'ebay_create_report_task',
471
+ description: 'Create report task through the eBay Marketing API.',
472
+ inputSchema: marketingSchemas.createReportTaskInputSchema.shape,
473
+ outputSchema: emptyResponseSchema,
474
+ annotations: { readOnlyHint: false },
475
+ handler: (api, args) => Effect.runPromise(api.marketing.createReportTask(args)),
476
+ }),
477
+ defineTool({
478
+ name: 'ebay_get_report_task',
479
+ description: 'Get report task through the eBay Marketing API.',
480
+ inputSchema: marketingSchemas.getReportTaskInputSchema.shape,
481
+ outputSchema: toOutputSchema(marketingSchemas.reportTaskSchema, 'GetReportTaskResponse'),
482
+ annotations: { readOnlyHint: true },
483
+ handler: (api, args) => Effect.runPromise(api.marketing.getReportTask(args)),
484
+ }),
485
+ defineTool({
486
+ name: 'ebay_delete_report_task',
487
+ description: 'Delete report task through the eBay Marketing API.',
488
+ inputSchema: marketingSchemas.deleteReportTaskInputSchema.shape,
489
+ outputSchema: emptyResponseSchema,
490
+ annotations: { readOnlyHint: false, destructiveHint: true },
491
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteReportTask(args)),
492
+ }),
493
+ defineTool({
494
+ name: 'ebay_create_item_price_markdown_promotion',
495
+ description: 'Create item price markdown promotion through the eBay Marketing API.',
496
+ inputSchema: marketingSchemas.createItemPriceMarkdownPromotionInputSchema.shape,
497
+ outputSchema: emptyResponseSchema,
498
+ annotations: { readOnlyHint: false },
499
+ handler: (api, args) => Effect.runPromise(api.marketing.createItemPriceMarkdownPromotion(args)),
500
+ }),
501
+ defineTool({
502
+ name: 'ebay_get_item_price_markdown_promotion',
503
+ description: 'Get item price markdown promotion through the eBay Marketing API.',
504
+ inputSchema: marketingSchemas.getItemPriceMarkdownPromotionInputSchema.shape,
505
+ outputSchema: toOutputSchema(marketingSchemas.itemPriceMarkdownSchema, 'GetItemPriceMarkdownPromotionResponse'),
506
+ annotations: { readOnlyHint: true },
507
+ handler: (api, args) => Effect.runPromise(api.marketing.getItemPriceMarkdownPromotion(args)),
508
+ }),
509
+ defineTool({
510
+ name: 'ebay_update_item_price_markdown_promotion',
511
+ description: 'Update item price markdown promotion through the eBay Marketing API.',
512
+ inputSchema: marketingSchemas.updateItemPriceMarkdownPromotionInputSchema.shape,
513
+ outputSchema: emptyResponseSchema,
514
+ annotations: { readOnlyHint: false, idempotentHint: true },
515
+ handler: (api, args) => Effect.runPromise(api.marketing.updateItemPriceMarkdownPromotion(args)),
516
+ }),
517
+ defineTool({
518
+ name: 'ebay_delete_item_price_markdown_promotion',
519
+ description: 'Delete item price markdown promotion through the eBay Marketing API.',
520
+ inputSchema: marketingSchemas.deleteItemPriceMarkdownPromotionInputSchema.shape,
521
+ outputSchema: emptyResponseSchema,
522
+ annotations: { readOnlyHint: false, destructiveHint: true },
523
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteItemPriceMarkdownPromotion(args)),
524
+ }),
525
+ defineTool({
526
+ name: 'ebay_create_item_promotion',
527
+ description: 'Create item promotion through the eBay Marketing API.',
528
+ inputSchema: marketingSchemas.createItemPromotionInputSchema.shape,
529
+ outputSchema: toOutputSchema(marketingSchemas.baseResponseSchema, 'CreateItemPromotionResponse'),
530
+ annotations: { readOnlyHint: false },
531
+ handler: (api, args) => Effect.runPromise(api.marketing.createItemPromotion(args)),
532
+ }),
533
+ defineTool({
534
+ name: 'ebay_get_item_promotion',
535
+ description: 'Get item promotion through the eBay Marketing API.',
536
+ inputSchema: marketingSchemas.getItemPromotionInputSchema.shape,
537
+ outputSchema: toOutputSchema(marketingSchemas.itemPromotionResponseSchema, 'GetItemPromotionResponse'),
538
+ annotations: { readOnlyHint: true },
539
+ handler: (api, args) => Effect.runPromise(api.marketing.getItemPromotion(args)),
540
+ }),
541
+ defineTool({
542
+ name: 'ebay_update_item_promotion',
543
+ description: 'Update item promotion through the eBay Marketing API.',
544
+ inputSchema: marketingSchemas.updateItemPromotionInputSchema.shape,
545
+ outputSchema: toOutputSchema(marketingSchemas.baseResponseSchema, 'UpdateItemPromotionResponse'),
546
+ annotations: { readOnlyHint: false, idempotentHint: true },
547
+ handler: (api, args) => Effect.runPromise(api.marketing.updateItemPromotion(args)),
548
+ }),
549
+ defineTool({
550
+ name: 'ebay_delete_item_promotion',
551
+ description: 'Delete item promotion through the eBay Marketing API.',
552
+ inputSchema: marketingSchemas.deleteItemPromotionInputSchema.shape,
553
+ outputSchema: emptyResponseSchema,
554
+ annotations: { readOnlyHint: false, destructiveHint: true },
555
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteItemPromotion(args)),
556
+ }),
557
+ defineTool({
558
+ name: 'ebay_get_listing_set',
559
+ description: 'Get listing set through the eBay Marketing API.',
560
+ inputSchema: marketingSchemas.getListingSetInputSchema.shape,
561
+ outputSchema: toOutputSchema(marketingSchemas.itemsPagedCollectionSchema, 'GetListingSetResponse'),
562
+ annotations: { readOnlyHint: true },
563
+ handler: (api, args) => Effect.runPromise(api.marketing.getListingSet(args)),
564
+ }),
565
+ defineTool({
566
+ name: 'ebay_get_promotions',
567
+ description: 'Get promotions through the eBay Marketing API.',
568
+ inputSchema: marketingSchemas.getPromotionsInputSchema.shape,
569
+ outputSchema: toOutputSchema(marketingSchemas.promotionsPagedCollectionSchema, 'GetPromotionsResponse'),
570
+ annotations: { readOnlyHint: true },
571
+ handler: (api, args) => Effect.runPromise(api.marketing.getPromotions(args)),
572
+ }),
573
+ defineTool({
574
+ name: 'ebay_pause_promotion',
575
+ description: 'Pause promotion through the eBay Marketing API.',
576
+ inputSchema: marketingSchemas.pausePromotionInputSchema.shape,
577
+ outputSchema: emptyResponseSchema,
578
+ annotations: { readOnlyHint: false },
579
+ handler: (api, args) => Effect.runPromise(api.marketing.pausePromotion(args)),
580
+ }),
581
+ defineTool({
582
+ name: 'ebay_resume_promotion',
583
+ description: 'Resume promotion through the eBay Marketing API.',
584
+ inputSchema: marketingSchemas.resumePromotionInputSchema.shape,
585
+ outputSchema: emptyResponseSchema,
586
+ annotations: { readOnlyHint: false },
587
+ handler: (api, args) => Effect.runPromise(api.marketing.resumePromotion(args)),
588
+ }),
589
+ defineTool({
590
+ name: 'ebay_get_promotion_reports',
591
+ description: 'Get promotion reports through the eBay Marketing API.',
592
+ inputSchema: marketingSchemas.getPromotionReportsInputSchema.shape,
593
+ outputSchema: toOutputSchema(marketingSchemas.promotionsReportPagedCollectionSchema, 'GetPromotionReportsResponse'),
594
+ annotations: { readOnlyHint: true },
595
+ handler: (api, args) => Effect.runPromise(api.marketing.getPromotionReports(args)),
596
+ }),
597
+ defineTool({
598
+ name: 'ebay_get_promotion_summary_report',
599
+ description: 'Get promotion summary report through the eBay Marketing API.',
600
+ inputSchema: marketingSchemas.getPromotionSummaryReportInputSchema.shape,
601
+ outputSchema: toOutputSchema(marketingSchemas.summaryReportResponseSchema, 'GetPromotionSummaryReportResponse'),
602
+ annotations: { readOnlyHint: true },
603
+ handler: (api, args) => Effect.runPromise(api.marketing.getPromotionSummaryReport(args)),
604
+ }),
605
+ defineTool({
606
+ name: 'ebay_get_email_campaigns',
607
+ description: 'Get email campaigns through the eBay Marketing API.',
608
+ inputSchema: marketingSchemas.getEmailCampaignsInputSchema.shape,
609
+ outputSchema: toOutputSchema(marketingSchemas.getEmailCampaignsResponseSchema, 'GetEmailCampaignsResponse'),
610
+ annotations: { readOnlyHint: true },
611
+ handler: (api, args) => Effect.runPromise(api.marketing.getEmailCampaigns(args)),
612
+ }),
613
+ defineTool({
614
+ name: 'ebay_create_email_campaign',
615
+ description: 'Create email campaign through the eBay Marketing API.',
616
+ inputSchema: marketingSchemas.createEmailCampaignInputSchema.shape,
617
+ outputSchema: toOutputSchema(marketingSchemas.createEmailCampaignResponseSchema, 'CreateEmailCampaignResponse'),
618
+ annotations: { readOnlyHint: false },
619
+ handler: (api, args) => Effect.runPromise(api.marketing.createEmailCampaign(args)),
620
+ }),
621
+ defineTool({
622
+ name: 'ebay_get_email_campaign',
623
+ description: 'Get email campaign through the eBay Marketing API.',
624
+ inputSchema: marketingSchemas.getEmailCampaignInputSchema.shape,
625
+ outputSchema: toOutputSchema(marketingSchemas.getEmailCampaignResponseSchema, 'GetEmailCampaignResponse'),
626
+ annotations: { readOnlyHint: true },
627
+ handler: (api, args) => Effect.runPromise(api.marketing.getEmailCampaign(args)),
628
+ }),
629
+ defineTool({
630
+ name: 'ebay_update_email_campaign',
631
+ description: 'Update email campaign through the eBay Marketing API.',
632
+ inputSchema: marketingSchemas.updateEmailCampaignInputSchema.shape,
633
+ outputSchema: toOutputSchema(marketingSchemas.updateEmailCampaignResponseSchema, 'UpdateEmailCampaignResponse'),
634
+ annotations: { readOnlyHint: false, idempotentHint: true },
635
+ handler: (api, args) => Effect.runPromise(api.marketing.updateEmailCampaign(args)),
636
+ }),
637
+ defineTool({
638
+ name: 'ebay_delete_email_campaign',
639
+ description: 'Delete email campaign through the eBay Marketing API.',
640
+ inputSchema: marketingSchemas.deleteEmailCampaignInputSchema.shape,
641
+ outputSchema: toOutputSchema(marketingSchemas.deleteEmailCampaignResponseSchema, 'DeleteEmailCampaignResponse'),
642
+ annotations: { readOnlyHint: false, destructiveHint: true },
643
+ handler: (api, args) => Effect.runPromise(api.marketing.deleteEmailCampaign(args)),
644
+ }),
645
+ defineTool({
646
+ name: 'ebay_get_audiences',
647
+ description: 'Get audiences through the eBay Marketing API.',
648
+ inputSchema: marketingSchemas.getAudiencesInputSchema.shape,
649
+ outputSchema: toOutputSchema(marketingSchemas.getEmailCampaignAudiencesResponseSchema, 'GetAudiencesResponse'),
650
+ annotations: { readOnlyHint: true },
651
+ handler: (api, args) => Effect.runPromise(api.marketing.getAudiences(args)),
652
+ }),
653
+ defineTool({
654
+ name: 'ebay_get_email_preview',
655
+ description: 'Get email preview through the eBay Marketing API.',
656
+ inputSchema: marketingSchemas.getEmailPreviewInputSchema.shape,
657
+ outputSchema: toOutputSchema(marketingSchemas.getEmailPreviewResponseSchema, 'GetEmailPreviewResponse'),
658
+ annotations: { readOnlyHint: true },
659
+ handler: (api, args) => Effect.runPromise(api.marketing.getEmailPreview(args)),
660
+ }),
661
+ defineTool({
662
+ name: 'ebay_get_email_report',
663
+ description: 'Get email report through the eBay Marketing API.',
664
+ inputSchema: marketingSchemas.getEmailReportInputSchema.shape,
665
+ outputSchema: toOutputSchema(marketingSchemas.getEmailReportResponseSchema, 'GetEmailReportResponse'),
666
+ annotations: { readOnlyHint: true },
667
+ handler: (api, args) => Effect.runPromise(api.marketing.getEmailReport(args)),
668
+ }),
669
+ defineTool({
670
+ name: 'ebay_find_listing_recommendations',
671
+ description: 'Find listing recommendations through the eBay Recommendation API.',
672
+ inputSchema: marketingSchemas.findListingRecommendationsInputSchema.shape,
673
+ outputSchema: toOutputSchema(marketingSchemas.pagedListingRecommendationCollectionSchema, 'FindListingRecommendationsResponse'),
674
+ annotations: { readOnlyHint: true },
675
+ handler: (api, args) => Effect.runPromise(api.recommendation.findListingRecommendations(args)),
676
+ }),
677
+ ];