ebay-mcp-remote-edition 1.0.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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +755 -0
  3. package/build/api/account-management/account.js +301 -0
  4. package/build/api/analytics-and-report/analytics.js +102 -0
  5. package/build/api/client-trading.js +96 -0
  6. package/build/api/client.js +173 -0
  7. package/build/api/communication/feedback.js +119 -0
  8. package/build/api/communication/message.js +131 -0
  9. package/build/api/communication/negotiation.js +97 -0
  10. package/build/api/communication/notification.js +373 -0
  11. package/build/api/developer/developer.js +81 -0
  12. package/build/api/index.js +109 -0
  13. package/build/api/listing-management/inventory.js +640 -0
  14. package/build/api/listing-metadata/metadata.js +485 -0
  15. package/build/api/listing-metadata/taxonomy.js +58 -0
  16. package/build/api/marketing-and-promotions/marketing.js +768 -0
  17. package/build/api/marketing-and-promotions/recommendation.js +32 -0
  18. package/build/api/order-management/dispute.js +69 -0
  19. package/build/api/order-management/fulfillment.js +89 -0
  20. package/build/api/other/compliance.js +47 -0
  21. package/build/api/other/edelivery.js +219 -0
  22. package/build/api/other/identity.js +24 -0
  23. package/build/api/other/translation.js +22 -0
  24. package/build/api/other/vero.js +48 -0
  25. package/build/api/trading/trading.js +78 -0
  26. package/build/auth/kv-store.js +40 -0
  27. package/build/auth/multi-user-store.js +120 -0
  28. package/build/auth/oauth-metadata.js +59 -0
  29. package/build/auth/oauth-middleware.js +99 -0
  30. package/build/auth/oauth-types.js +4 -0
  31. package/build/auth/oauth.js +235 -0
  32. package/build/auth/scope-utils.js +304 -0
  33. package/build/auth/token-store.js +46 -0
  34. package/build/auth/token-verifier.js +172 -0
  35. package/build/config/environment.js +297 -0
  36. package/build/index.d.ts +1 -0
  37. package/build/index.js +129 -0
  38. package/build/schemas/account-management/account.js +375 -0
  39. package/build/schemas/analytics/analytics.js +191 -0
  40. package/build/schemas/communication/messages.js +345 -0
  41. package/build/schemas/fulfillment/orders.js +338 -0
  42. package/build/schemas/index.js +68 -0
  43. package/build/schemas/inventory-management/inventory.js +471 -0
  44. package/build/schemas/marketing/marketing.js +1103 -0
  45. package/build/schemas/metadata/metadata.js +618 -0
  46. package/build/schemas/other/other-apis.js +390 -0
  47. package/build/schemas/taxonomy/taxonomy.js +575 -0
  48. package/build/scripts/auto-setup.js +364 -0
  49. package/build/scripts/dev-sync.js +512 -0
  50. package/build/scripts/diagnostics.js +301 -0
  51. package/build/scripts/download-specs.js +116 -0
  52. package/build/scripts/interactive-setup.js +757 -0
  53. package/build/scripts/setup.js +1515 -0
  54. package/build/scripts/update-api-status-doc.js +44 -0
  55. package/build/server-http.d.ts +1 -0
  56. package/build/server-http.js +581 -0
  57. package/build/tools/definitions/account-with-schemas.js +170 -0
  58. package/build/tools/definitions/account.js +428 -0
  59. package/build/tools/definitions/analytics.js +66 -0
  60. package/build/tools/definitions/communication.js +394 -0
  61. package/build/tools/definitions/developer.js +195 -0
  62. package/build/tools/definitions/fulfillment.js +326 -0
  63. package/build/tools/definitions/index.js +41 -0
  64. package/build/tools/definitions/inventory.js +464 -0
  65. package/build/tools/definitions/marketing.js +1486 -0
  66. package/build/tools/definitions/metadata.js +188 -0
  67. package/build/tools/definitions/other.js +309 -0
  68. package/build/tools/definitions/taxonomy.js +64 -0
  69. package/build/tools/definitions/token-management.js +148 -0
  70. package/build/tools/definitions/trading.js +71 -0
  71. package/build/tools/index.js +1200 -0
  72. package/build/tools/schemas.js +667 -0
  73. package/build/tools/tool-definitions.js +3534 -0
  74. package/build/types/application-settings/developerAnalyticsV1BetaOas3.js +5 -0
  75. package/build/types/application-settings/developerClientRegistrationV1Oas3.js +5 -0
  76. package/build/types/application-settings/developerKeyManagementV1Oas3.js +5 -0
  77. package/build/types/ebay-enums.js +1330 -0
  78. package/build/types/ebay.js +123 -0
  79. package/build/types/index.js +10 -0
  80. package/build/types/sell-apps/account-management/sellAccountV1Oas3.js +5 -0
  81. package/build/types/sell-apps/analytics-and-report/sellAnalyticsV1Oas3.js +5 -0
  82. package/build/types/sell-apps/communication/commerceFeedbackV1BetaOas3.js +5 -0
  83. package/build/types/sell-apps/communication/commerceMessageV1Oas3.js +5 -0
  84. package/build/types/sell-apps/communication/commerceNotificationV1Oas3.js +5 -0
  85. package/build/types/sell-apps/communication/sellNegotiationV1Oas3.js +5 -0
  86. package/build/types/sell-apps/listing-management/sellInventoryV1Oas3.js +5 -0
  87. package/build/types/sell-apps/listing-metadata/sellMetadataV1Oas3.js +5 -0
  88. package/build/types/sell-apps/markeitng-and-promotions/sellMarketingV1Oas3.js +5 -0
  89. package/build/types/sell-apps/markeitng-and-promotions/sellRecommendationV1Oas3.js +5 -0
  90. package/build/types/sell-apps/order-management/sellFulfillmentV1Oas3.js +5 -0
  91. package/build/types/sell-apps/other-apis/commerceIdentityV1Oas3.js +5 -0
  92. package/build/types/sell-apps/other-apis/commerceTranslationV1BetaOas3.js +5 -0
  93. package/build/types/sell-apps/other-apis/commerceVeroV1Oas3.js +5 -0
  94. package/build/types/sell-apps/other-apis/sellComplianceV1Oas3.js +5 -0
  95. package/build/types/sell-apps/other-apis/sellEdeliveryInternationalShippingOas3.js +5 -0
  96. package/build/types/sell-apps/other-apis/sellMarketingV1Oas3.js +5 -0
  97. package/build/types/sell-apps/other-apis/sellRecommendationV1Oas3.js +5 -0
  98. package/build/utils/account-management/account.js +831 -0
  99. package/build/utils/api-status-feed.js +83 -0
  100. package/build/utils/communication/feedback.js +216 -0
  101. package/build/utils/communication/message.js +242 -0
  102. package/build/utils/communication/negotiation.js +150 -0
  103. package/build/utils/communication/notification.js +369 -0
  104. package/build/utils/date-converter.js +160 -0
  105. package/build/utils/llm-client-detector.js +758 -0
  106. package/build/utils/logger.js +198 -0
  107. package/build/utils/oauth-helper.js +315 -0
  108. package/build/utils/order-management/dispute.js +369 -0
  109. package/build/utils/order-management/fulfillment.js +205 -0
  110. package/build/utils/other/compliance.js +76 -0
  111. package/build/utils/other/edelivery.js +241 -0
  112. package/build/utils/other/identity.js +13 -0
  113. package/build/utils/other/translation.js +41 -0
  114. package/build/utils/other/vero.js +90 -0
  115. package/build/utils/scope-helper.js +207 -0
  116. package/build/utils/security-checker.js +248 -0
  117. package/build/utils/setup-validator.js +305 -0
  118. package/build/utils/token-utils.js +40 -0
  119. package/build/utils/version.js +56 -0
  120. package/docs/auth/production_scopes.json +111 -0
  121. package/docs/auth/sandbox_scopes.json +142 -0
  122. package/package.json +122 -0
  123. package/public/icons/1024x1024.png +0 -0
  124. package/public/icons/128x128.png +0 -0
  125. package/public/icons/16x16.png +0 -0
  126. package/public/icons/256x256.png +0 -0
  127. package/public/icons/32x32.png +0 -0
  128. package/public/icons/48x48.png +0 -0
  129. package/public/icons/512x512.png +0 -0
@@ -0,0 +1,364 @@
1
+ /**
2
+ * Auto-Setup Script for eBay API MCP Server
3
+ *
4
+ * This script automatically:
5
+ * 1. Detects installed MCP clients (Claude Desktop, Gemini, ChatGPT)
6
+ * 2. Generates MCP client configurations from .env
7
+ * 3. Validates environment tokens configuration
8
+ * 4. Validates the setup
9
+ *
10
+ * Usage: npm run auto-setup (or runs automatically after npm install)
11
+ */
12
+ import { dirname, join } from 'path';
13
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
14
+ import { homedir, platform } from 'os';
15
+ import { config } from 'dotenv';
16
+ import { fileURLToPath } from 'url';
17
+ // Load environment variables silently
18
+ config({ quiet: true });
19
+ const __filename = fileURLToPath(import.meta.url);
20
+ const __dirname = dirname(__filename);
21
+ const PROJECT_ROOT = join(__dirname, '../..');
22
+ // ═══════════════════════════════════════════════════════════════════════════
23
+ // Color Utilities
24
+ // ═══════════════════════════════════════════════════════════════════════════
25
+ const colors = {
26
+ reset: '\x1b[0m',
27
+ red: '\x1b[31m',
28
+ green: '\x1b[32m',
29
+ yellow: '\x1b[33m',
30
+ blue: '\x1b[34m',
31
+ cyan: '\x1b[36m',
32
+ };
33
+ function print(message, color) {
34
+ const colorCode = color ? colors[color] : '';
35
+ console.log(`${colorCode}${message}${colors.reset}`);
36
+ }
37
+ function printSuccess(message) {
38
+ print(`✅ ${message}`, 'green');
39
+ }
40
+ function printWarning(message) {
41
+ print(`⚠️ ${message}`, 'yellow');
42
+ }
43
+ function printError(message) {
44
+ print(`❌ ${message}`, 'red');
45
+ }
46
+ function printInfo(message) {
47
+ print(`ℹ️ ${message}`, 'cyan');
48
+ }
49
+ function printHeader(message) {
50
+ print('\n═══════════════════════════════════════════════════════════════════════════', 'blue');
51
+ print(` ${message}`, 'cyan');
52
+ print('═══════════════════════════════════════════════════════════════════════════\n', 'blue');
53
+ }
54
+ function getConfigPaths() {
55
+ const home = homedir();
56
+ const os = platform();
57
+ const paths = {};
58
+ // Claude Desktop config paths
59
+ if (os === 'darwin') {
60
+ paths.claude = join(home, 'Library/Application Support/Claude/claude_desktop_config.json');
61
+ }
62
+ else if (os === 'win32') {
63
+ paths.claude = join(home, 'AppData/Roaming/Claude/claude_desktop_config.json');
64
+ }
65
+ else {
66
+ paths.claude = join(home, '.config/Claude/claude_desktop_config.json');
67
+ }
68
+ // Cline (VSCode Extension) config paths
69
+ if (os === 'darwin') {
70
+ paths.cline = join(home, 'Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json');
71
+ }
72
+ else if (os === 'win32') {
73
+ paths.cline = join(home, 'AppData/Roaming/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json');
74
+ }
75
+ else {
76
+ paths.cline = join(home, '.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json');
77
+ }
78
+ // Continue.dev config path
79
+ paths.continue = join(home, '.continue/config.json');
80
+ // Zed editor config paths
81
+ if (os === 'darwin') {
82
+ paths.zed = join(home, '.config/zed/settings.json');
83
+ }
84
+ else if (os === 'win32') {
85
+ paths.zed = join(home, 'AppData/Roaming/Zed/settings.json');
86
+ }
87
+ else {
88
+ paths.zed = join(home, '.config/zed/settings.json');
89
+ }
90
+ // Cursor IDE config path
91
+ paths.cursor = join(home, '.cursor/mcp.json');
92
+ // Windsurf (Codeium) config path
93
+ paths.windsurf = join(home, '.codeium/windsurf/mcp_config.json');
94
+ // Roo Code (VSCode Extension) config paths
95
+ if (os === 'darwin') {
96
+ paths.roocode = join(home, 'Library/Application Support/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json');
97
+ }
98
+ else if (os === 'win32') {
99
+ paths.roocode = join(home, 'AppData/Roaming/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json');
100
+ }
101
+ else {
102
+ paths.roocode = join(home, '.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/settings/mcp_settings.json');
103
+ }
104
+ // Claude Code CLI config path
105
+ paths.claudecode = join(home, '.claude.json');
106
+ // Amazon Q Developer config path
107
+ paths.amazonq = join(home, '.aws/amazonq/mcp.json');
108
+ return paths;
109
+ }
110
+ function detectMCPClients() {
111
+ const configPaths = getConfigPaths();
112
+ const clients = [];
113
+ for (const [name, configPath] of Object.entries(configPaths)) {
114
+ const detected = existsSync(configPath) || existsSync(dirname(configPath));
115
+ clients.push({
116
+ name,
117
+ configPath,
118
+ detected,
119
+ });
120
+ }
121
+ return clients;
122
+ }
123
+ function generateMCPServerConfig() {
124
+ const buildPath = join(PROJECT_ROOT, 'build/index.js');
125
+ const config = {
126
+ command: 'node',
127
+ args: [buildPath],
128
+ env: {
129
+ EBAY_CLIENT_ID: process.env.EBAY_CLIENT_ID || '',
130
+ EBAY_CLIENT_SECRET: process.env.EBAY_CLIENT_SECRET || '',
131
+ EBAY_ENVIRONMENT: process.env.EBAY_ENVIRONMENT || 'sandbox',
132
+ },
133
+ };
134
+ // Add optional environment variables if they exist
135
+ if (process.env.EBAY_REDIRECT_URI) {
136
+ config.env.EBAY_REDIRECT_URI = process.env.EBAY_REDIRECT_URI;
137
+ }
138
+ if (process.env.EBAY_MARKETPLACE_ID) {
139
+ config.env.EBAY_MARKETPLACE_ID = process.env.EBAY_MARKETPLACE_ID;
140
+ }
141
+ if (process.env.EBAY_CONTENT_LANGUAGE) {
142
+ config.env.EBAY_CONTENT_LANGUAGE = process.env.EBAY_CONTENT_LANGUAGE;
143
+ }
144
+ if (process.env.EBAY_USER_ACCESS_TOKEN) {
145
+ config.env.EBAY_USER_ACCESS_TOKEN = process.env.EBAY_USER_ACCESS_TOKEN;
146
+ }
147
+ if (process.env.EBAY_USER_REFRESH_TOKEN) {
148
+ config.env.EBAY_USER_REFRESH_TOKEN = process.env.EBAY_USER_REFRESH_TOKEN;
149
+ }
150
+ if (process.env.EBAY_APP_ACCESS_TOKEN) {
151
+ config.env.EBAY_APP_ACCESS_TOKEN = process.env.EBAY_APP_ACCESS_TOKEN;
152
+ }
153
+ return config;
154
+ }
155
+ function updateClientConfig(client, serverConfig) {
156
+ try {
157
+ // Ensure directory exists
158
+ const configDir = dirname(client.configPath);
159
+ if (!existsSync(configDir)) {
160
+ mkdirSync(configDir, { recursive: true });
161
+ }
162
+ // Read existing config or create new one
163
+ let config = {};
164
+ if (existsSync(client.configPath)) {
165
+ try {
166
+ const existing = readFileSync(client.configPath, 'utf-8');
167
+ config = JSON.parse(existing);
168
+ }
169
+ catch (_error) {
170
+ printWarning(`Invalid JSON in ${client.configPath}, creating backup and new config`);
171
+ const backup = `${client.configPath}.backup.${Date.now()}`;
172
+ writeFileSync(backup, readFileSync(client.configPath));
173
+ printInfo(`Backup saved to: ${backup}`);
174
+ config = {};
175
+ }
176
+ }
177
+ // Handle different config formats for different clients
178
+ switch (client.name) {
179
+ case 'zed': {
180
+ // Zed uses context_servers with a different structure
181
+ if (!config.context_servers || typeof config.context_servers !== 'object') {
182
+ config.context_servers = {};
183
+ }
184
+ const contextServers = config.context_servers;
185
+ contextServers['ebay-mcp-server'] = {
186
+ command: {
187
+ path: serverConfig.command,
188
+ args: serverConfig.args,
189
+ env: serverConfig.env,
190
+ },
191
+ settings: {},
192
+ };
193
+ break;
194
+ }
195
+ case 'continue': {
196
+ // Continue.dev uses experimental.modelContextProtocolServers as an array
197
+ if (!config.experimental || typeof config.experimental !== 'object') {
198
+ config.experimental = {};
199
+ }
200
+ const experimental = config.experimental;
201
+ if (!experimental.modelContextProtocolServers ||
202
+ !Array.isArray(experimental.modelContextProtocolServers)) {
203
+ experimental.modelContextProtocolServers = [];
204
+ }
205
+ const mcpServers = experimental.modelContextProtocolServers;
206
+ // Check if eBay server already exists and update/add
207
+ const existingIndex = mcpServers.findIndex((server) => server.command === 'node' && server.args?.[0]?.includes('ebay-mcp-remote-edition'));
208
+ if (existingIndex >= 0) {
209
+ mcpServers[existingIndex] = serverConfig;
210
+ }
211
+ else {
212
+ mcpServers.push(serverConfig);
213
+ }
214
+ break;
215
+ }
216
+ default: {
217
+ // Standard mcpServers format for Claude Desktop, Cline, Cursor, Windsurf, Roo Code, Claude Code CLI, Amazon Q
218
+ if (!config.mcpServers || typeof config.mcpServers !== 'object') {
219
+ config.mcpServers = {};
220
+ }
221
+ const mcpServers = config.mcpServers;
222
+ mcpServers['ebay-mcp-server'] = serverConfig;
223
+ break;
224
+ }
225
+ }
226
+ // Write config
227
+ writeFileSync(client.configPath, JSON.stringify(config, null, 2));
228
+ return true;
229
+ }
230
+ catch (error) {
231
+ printError(`Failed to update ${client.name} config: ${error}`);
232
+ return false;
233
+ }
234
+ }
235
+ // ═══════════════════════════════════════════════════════════════════════════
236
+ // Token Validation (Environment-based only)
237
+ // ═══════════════════════════════════════════════════════════════════════════
238
+ function validateTokens() {
239
+ // Check if user refresh token is provided in .env
240
+ const hasUserRefreshToken = process.env.EBAY_USER_REFRESH_TOKEN;
241
+ if (!hasUserRefreshToken) {
242
+ printInfo('No EBAY_USER_REFRESH_TOKEN in .env - will use app tokens (1k req/day)');
243
+ printInfo('For higher rate limits (10k-50k req/day), add EBAY_USER_REFRESH_TOKEN to .env');
244
+ return true; // Not an error, just informational
245
+ }
246
+ printSuccess('User refresh token found in .env - high rate limits enabled');
247
+ return true;
248
+ }
249
+ // ═══════════════════════════════════════════════════════════════════════════
250
+ // Validation
251
+ // ═══════════════════════════════════════════════════════════════════════════
252
+ function validateEnvironment() {
253
+ const errors = [];
254
+ const warnings = [];
255
+ // Check .env file exists
256
+ const envPath = join(PROJECT_ROOT, '.env');
257
+ if (!existsSync(envPath)) {
258
+ errors.push('.env file not found. Copy .env.example to .env and fill in your credentials.');
259
+ return { valid: false, errors, warnings };
260
+ }
261
+ // Check required variables
262
+ if (!process.env.EBAY_CLIENT_ID) {
263
+ errors.push('EBAY_CLIENT_ID is not set in .env');
264
+ }
265
+ if (!process.env.EBAY_CLIENT_SECRET) {
266
+ errors.push('EBAY_CLIENT_SECRET is not set in .env');
267
+ }
268
+ const environment = process.env.EBAY_ENVIRONMENT;
269
+ if (environment && environment !== 'production' && environment !== 'sandbox') {
270
+ errors.push(`EBAY_ENVIRONMENT must be "production" or "sandbox", got: "${environment}"`);
271
+ }
272
+ if (!process.env.EBAY_REDIRECT_URI) {
273
+ warnings.push('EBAY_REDIRECT_URI is not set - user OAuth flow will not work. This is required for 10k-50k req/day rate limits.');
274
+ }
275
+ // Check build directory exists
276
+ const buildPath = join(PROJECT_ROOT, 'build/index.js');
277
+ if (!existsSync(buildPath)) {
278
+ warnings.push('Build directory not found. Run "npm run build" first.');
279
+ }
280
+ return {
281
+ valid: errors.length === 0,
282
+ errors,
283
+ warnings,
284
+ };
285
+ }
286
+ // ═══════════════════════════════════════════════════════════════════════════
287
+ // Main
288
+ // ═══════════════════════════════════════════════════════════════════════════
289
+ // eslint-disable-next-line @typescript-eslint/require-await
290
+ async function main() {
291
+ printHeader('eBay API MCP Server - Auto Setup');
292
+ // Step 1: Validate environment
293
+ printInfo('Step 1/4: Validating environment configuration...');
294
+ const validation = validateEnvironment();
295
+ if (validation.errors.length > 0) {
296
+ printError('Environment validation failed:');
297
+ validation.errors.forEach((error) => print(` • ${error}`, 'red'));
298
+ print('\nPlease fix these errors and run again.', 'yellow');
299
+ process.exit(1);
300
+ }
301
+ if (validation.warnings.length > 0) {
302
+ validation.warnings.forEach((warning) => printWarning(warning));
303
+ }
304
+ printSuccess('Environment validation passed');
305
+ // Step 2: Detect MCP clients
306
+ print('\nStep 2/4: Detecting installed MCP clients...');
307
+ const clients = detectMCPClients();
308
+ const detectedClients = clients.filter((c) => c.detected);
309
+ if (detectedClients.length === 0) {
310
+ printWarning('No MCP clients detected on this system');
311
+ printInfo('Supported clients: Claude Desktop, Cline, Continue.dev, Zed, Cursor, Windsurf, Roo Code, Claude Code CLI, Amazon Q');
312
+ printInfo('Install a client and run this script again');
313
+ }
314
+ else {
315
+ printSuccess(`Detected ${detectedClients.length} MCP client(s):`);
316
+ detectedClients.forEach((client) => {
317
+ print(` • ${client.name.charAt(0).toUpperCase() + client.name.slice(1)}`, 'green');
318
+ });
319
+ }
320
+ // Step 3: Generate configurations
321
+ if (detectedClients.length > 0) {
322
+ print('\nStep 3/4: Generating MCP client configurations...');
323
+ const serverConfig = generateMCPServerConfig();
324
+ for (const client of detectedClients) {
325
+ const success = updateClientConfig(client, serverConfig);
326
+ if (success) {
327
+ printSuccess(`Generated config for ${client.name} at: ${client.configPath}`);
328
+ client.configGenerated = true;
329
+ }
330
+ }
331
+ }
332
+ else {
333
+ print('\nStep 3/4: Skipping config generation (no clients detected)');
334
+ }
335
+ // Step 4: Validate tokens
336
+ print('\nStep 4/4: Validating token configuration...');
337
+ validateTokens();
338
+ // Final summary
339
+ printHeader('Setup Complete! 🎉');
340
+ const generatedCount = detectedClients.filter((c) => c.configGenerated).length;
341
+ if (generatedCount > 0) {
342
+ printSuccess(`Successfully configured ${generatedCount} MCP client(s)`);
343
+ print('\n📝 Next Steps:', 'cyan');
344
+ print(' 1. Restart your MCP clients (Claude Desktop, Cursor, Zed, etc.)');
345
+ print(' 2. Verify connection in MCP client settings/logs');
346
+ print(' 3. Test with: "List my eBay inventory items"');
347
+ if (validation.warnings.some((w) => w.includes('EBAY_REDIRECT_URI'))) {
348
+ print('\n💡 Pro Tip:', 'yellow');
349
+ print(' Add EBAY_REDIRECT_URI to .env for user OAuth (10k-50k req/day rate limits)');
350
+ }
351
+ }
352
+ else {
353
+ printInfo('No configurations generated (no MCP clients detected)');
354
+ print('\n📝 To complete setup:', 'cyan');
355
+ print(' 1. Install an MCP client (Claude Desktop, Cline, Cursor, Zed, Windsurf, Continue.dev, Roo Code, Claude Code CLI, or Amazon Q)');
356
+ print(' 2. Run: npm run auto-setup');
357
+ }
358
+ print('\n📚 Documentation: https://github.com/mrnajiboy/ebay-mcp-remote-edition#readme\n');
359
+ }
360
+ // Run the script
361
+ main().catch((error) => {
362
+ printError(`Auto-setup failed: ${error}`);
363
+ process.exit(1);
364
+ });