domain-search-mcp 1.1.4 → 1.2.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.
@@ -18,8 +18,8 @@ export declare const suggestDomainsSmartSchema: z.ZodObject<{
18
18
  include_premium: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
19
19
  }, "strip", z.ZodTypeAny, {
20
20
  tld: string;
21
- max_suggestions: number;
22
21
  query: string;
22
+ max_suggestions: number;
23
23
  style: "creative" | "brandable" | "descriptive" | "short";
24
24
  include_premium: boolean;
25
25
  industry?: "tech" | "health" | "finance" | "food" | "creative" | "social" | "startup" | "ecommerce" | "education" | "gaming" | undefined;
@@ -85,6 +85,7 @@ interface SmartSuggestion {
85
85
  privacy_included: boolean;
86
86
  score: number;
87
87
  category: 'standard' | 'premium' | 'auction' | 'unavailable';
88
+ source: 'semantic_engine' | 'godaddy_suggest' | 'both';
88
89
  }
89
90
  /**
90
91
  * Response format for smart suggestions.
@@ -95,7 +96,11 @@ interface SuggestDomainsSmartResponse {
95
96
  detected_industry: string | null;
96
97
  tld: string;
97
98
  style: string;
98
- total_generated: number;
99
+ sources: {
100
+ semantic_engine: number;
101
+ godaddy_suggest: number;
102
+ merged: number;
103
+ };
99
104
  total_checked: number;
100
105
  results: {
101
106
  available: SmartSuggestion[];
@@ -1 +1 @@
1
- {"version":3,"file":"suggest_domains_smart.d.ts","sourceRoot":"","sources":["../../src/tools/suggest_domains_smart.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyCxB;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;EAuCpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDnC,CAAC;AA8CF;;GAEG;AACH,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;CAC9D;AAED;;GAEG;AACH,UAAU,2BAA2B;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE;QACP,SAAS,EAAE,eAAe,EAAE,CAAC;QAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,2BAA2B,CAAC,CA4JtC"}
1
+ {"version":3,"file":"suggest_domains_smart.d.ts","sourceRoot":"","sources":["../../src/tools/suggest_domains_smart.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2CxB;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;EAuCpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDnC,CAAC;AA8CF;;GAEG;AACH,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;IAC7D,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,MAAM,CAAC;CACxD;AAED;;GAEG;AACH,UAAU,2BAA2B;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE;QACP,SAAS,EAAE,eAAe,EAAE,CAAC;QAC7B,OAAO,EAAE,eAAe,EAAE,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,2BAA2B,CAAC,CAmRtC"}
@@ -13,6 +13,8 @@ const zod_1 = require("zod");
13
13
  const domain_search_js_1 = require("../services/domain-search.js");
14
14
  const errors_js_1 = require("../utils/errors.js");
15
15
  const semantic_engine_js_1 = require("../utils/semantic-engine.js");
16
+ const index_js_1 = require("../registrars/index.js");
17
+ const logger_js_1 = require("../utils/logger.js");
16
18
  /**
17
19
  * Premium price thresholds by TLD (first year price in USD).
18
20
  * If price exceeds threshold, domain is marked as premium.
@@ -86,14 +88,16 @@ exports.suggestDomainsSmartTool = {
86
88
  description: `AI-powered domain name suggestion engine.
87
89
 
88
90
  Generate creative, brandable domain names from keywords or business descriptions.
89
- Uses semantic analysis, synonym expansion, and industry-specific vocabulary.
91
+ Combines our semantic engine with GoDaddy's AI suggestions for maximum coverage.
90
92
 
91
93
  Features:
94
+ - Dual-source suggestions: Our semantic engine + GoDaddy AI
92
95
  - Understands natural language queries ("coffee shop in seattle")
93
96
  - Auto-detects industry for contextual suggestions
94
97
  - Generates portmanteau/blended names (instagram = instant + telegram)
95
98
  - Applies modern naming patterns (ly, ify, io, hub, etc.)
96
99
  - Filters premium domains by default
100
+ - Pre-verified availability via GoDaddy
97
101
 
98
102
  Examples:
99
103
  - suggest_domains_smart("ai customer service") → AI-themed suggestions
@@ -178,84 +182,194 @@ async function executeSuggestDomainsSmart(input) {
178
182
  const normalizedQuery = query.toLowerCase().trim();
179
183
  const detectedWords = (0, semantic_engine_js_1.segmentWords)(normalizedQuery);
180
184
  const detectedIndustry = industry || (0, semantic_engine_js_1.detectIndustry)(detectedWords);
181
- // Generate smart suggestions
182
- const rawSuggestions = (0, semantic_engine_js_1.generateSmartSuggestions)(normalizedQuery, {
183
- maxSuggestions: max_suggestions * 4, // Generate extra for filtering
185
+ // Track source statistics
186
+ const sourceStats = {
187
+ semantic_engine: 0,
188
+ godaddy_suggest: 0,
189
+ merged: 0,
190
+ };
191
+ // ========================================
192
+ // STEP 1: Generate suggestions from BOTH sources in parallel
193
+ // ========================================
194
+ // Source 1: Our semantic engine
195
+ const semanticSuggestions = (0, semantic_engine_js_1.generateSmartSuggestions)(normalizedQuery, {
196
+ maxSuggestions: max_suggestions * 3,
184
197
  includePortmanteau: style === 'creative' || style === 'brandable',
185
198
  includeSynonyms: style !== 'short',
186
199
  includeIndustryTerms: !!detectedIndustry,
187
200
  industry: detectedIndustry || undefined,
188
201
  });
189
- // Apply style filter
190
- const styledSuggestions = applyStyleFilter(rawSuggestions, style, normalizedQuery);
191
- // Limit candidates for availability check
192
- const candidates = styledSuggestions.slice(0, max_suggestions * 2);
193
- // Check availability in parallel batches
194
- const BATCH_SIZE = 5;
195
- const results = [];
196
- for (let i = 0; i < candidates.length; i += BATCH_SIZE) {
197
- const batch = candidates.slice(i, i + BATCH_SIZE);
198
- const batchResults = await Promise.all(batch.map(async (name) => {
199
- try {
200
- const response = await (0, domain_search_js_1.searchDomain)(name, [tld]);
201
- const result = response.results.find((r) => r.domain === `${name}.${tld}`);
202
- return { name, result: result || null };
203
- }
204
- catch {
205
- return { name, result: null };
206
- }
207
- }));
208
- results.push(...batchResults);
209
- // Early exit if we have enough available
210
- const availableCount = results.filter(r => r.result?.available && !r.result?.premium).length;
211
- if (availableCount >= max_suggestions && !include_premium) {
212
- break;
202
+ sourceStats.semantic_engine = semanticSuggestions.length;
203
+ // Source 2: GoDaddy's AI suggestions (parallel call)
204
+ let godaddySuggestions = [];
205
+ try {
206
+ godaddySuggestions = await index_js_1.godaddyMcpAdapter.suggestDomains(query, {
207
+ tlds: [tld],
208
+ limit: max_suggestions * 2,
209
+ });
210
+ sourceStats.godaddy_suggest = godaddySuggestions.length;
211
+ logger_js_1.logger.debug('GoDaddy suggestions received', {
212
+ count: godaddySuggestions.length,
213
+ sample: godaddySuggestions.slice(0, 3).map(s => s.domain),
214
+ });
215
+ }
216
+ catch (error) {
217
+ // GoDaddy might fail - continue with just semantic suggestions
218
+ logger_js_1.logger.warn('GoDaddy suggestions failed, using semantic engine only', {
219
+ error: error instanceof Error ? error.message : 'unknown',
220
+ });
221
+ }
222
+ // ========================================
223
+ // STEP 2: Merge and deduplicate suggestions
224
+ // ========================================
225
+ // Track which domains came from which source
226
+ const domainSources = new Map();
227
+ // Add semantic suggestions (need availability check)
228
+ const styledSuggestions = applyStyleFilter(semanticSuggestions, style, normalizedQuery);
229
+ for (const name of styledSuggestions) {
230
+ const fullDomain = `${name}.${tld}`.toLowerCase();
231
+ domainSources.set(fullDomain, 'semantic_engine');
232
+ }
233
+ // Add GoDaddy suggestions (already have availability)
234
+ for (const gs of godaddySuggestions) {
235
+ const fullDomain = gs.domain.toLowerCase();
236
+ if (domainSources.has(fullDomain)) {
237
+ domainSources.set(fullDomain, 'both'); // Found in both sources
238
+ sourceStats.merged++;
239
+ }
240
+ else {
241
+ domainSources.set(fullDomain, 'godaddy_suggest');
213
242
  }
214
243
  }
215
- // Categorize results
244
+ // ========================================
245
+ // STEP 3: Check availability for semantic suggestions
246
+ // (GoDaddy suggestions already have availability info)
247
+ // ========================================
216
248
  const available = [];
217
249
  const premium = [];
218
250
  let unavailableCount = 0;
219
- for (const { name, result } of results) {
220
- if (!result) {
221
- unavailableCount++;
222
- continue;
223
- }
224
- const isPremium = result.premium || isPremiumPrice(tld, result.price_first_year);
251
+ let totalChecked = 0;
252
+ // First, add pre-checked GoDaddy suggestions (no API call needed!)
253
+ for (const gs of godaddySuggestions) {
254
+ const fullDomain = gs.domain.toLowerCase();
255
+ const source = domainSources.get(fullDomain) || 'godaddy_suggest';
256
+ const name = fullDomain.replace(`.${tld}`, '');
225
257
  const suggestion = {
226
- domain: `${name}.${tld}`,
227
- available: result.available,
228
- price_first_year: result.price_first_year,
229
- price_renewal: result.price_renewal,
230
- registrar: result.registrar,
231
- premium: result.premium || false,
232
- premium_detected: isPremiumPrice(tld, result.price_first_year),
233
- privacy_included: result.privacy_included || false,
258
+ domain: fullDomain,
259
+ available: gs.available,
260
+ price_first_year: null, // GoDaddy doesn't provide pricing
261
+ price_renewal: null,
262
+ registrar: 'godaddy',
263
+ premium: gs.premium,
264
+ premium_detected: gs.premium,
265
+ privacy_included: false,
234
266
  score: (0, semantic_engine_js_1.scoreDomainName)(name, normalizedQuery),
235
- category: !result.available
267
+ category: !gs.available
236
268
  ? 'unavailable'
237
- : isPremium
269
+ : gs.premium
238
270
  ? 'premium'
239
- : 'standard',
271
+ : gs.auction
272
+ ? 'auction'
273
+ : 'standard',
274
+ source,
240
275
  };
241
- if (!result.available) {
276
+ if (!gs.available) {
242
277
  unavailableCount++;
243
278
  }
244
- else if (isPremium) {
245
- premium.push(suggestion);
279
+ else if (gs.premium || gs.auction) {
280
+ if (include_premium) {
281
+ premium.push(suggestion);
282
+ }
246
283
  }
247
284
  else {
248
285
  available.push(suggestion);
249
286
  }
250
287
  }
251
- // Sort by score
252
- available.sort((a, b) => b.score - a.score);
288
+ // Then, check semantic suggestions that weren't in GoDaddy results
289
+ const semanticOnlyCandidates = styledSuggestions
290
+ .filter(name => {
291
+ const fullDomain = `${name}.${tld}`.toLowerCase();
292
+ return domainSources.get(fullDomain) === 'semantic_engine';
293
+ })
294
+ .slice(0, max_suggestions); // Limit API calls
295
+ const BATCH_SIZE = 5;
296
+ for (let i = 0; i < semanticOnlyCandidates.length; i += BATCH_SIZE) {
297
+ const batch = semanticOnlyCandidates.slice(i, i + BATCH_SIZE);
298
+ const batchResults = await Promise.all(batch.map(async (name) => {
299
+ try {
300
+ const response = await (0, domain_search_js_1.searchDomain)(name, [tld]);
301
+ const result = response.results.find((r) => r.domain === `${name}.${tld}`);
302
+ return { name, result: result || null };
303
+ }
304
+ catch {
305
+ return { name, result: null };
306
+ }
307
+ }));
308
+ for (const { name, result } of batchResults) {
309
+ totalChecked++;
310
+ if (!result) {
311
+ unavailableCount++;
312
+ continue;
313
+ }
314
+ const isPremiumDomain = result.premium || isPremiumPrice(tld, result.price_first_year);
315
+ const fullDomain = `${name}.${tld}`.toLowerCase();
316
+ const suggestion = {
317
+ domain: fullDomain,
318
+ available: result.available,
319
+ price_first_year: result.price_first_year,
320
+ price_renewal: result.price_renewal,
321
+ registrar: result.registrar,
322
+ premium: result.premium || false,
323
+ premium_detected: isPremiumPrice(tld, result.price_first_year),
324
+ privacy_included: result.privacy_included || false,
325
+ score: (0, semantic_engine_js_1.scoreDomainName)(name, normalizedQuery),
326
+ category: !result.available
327
+ ? 'unavailable'
328
+ : isPremiumDomain
329
+ ? 'premium'
330
+ : 'standard',
331
+ source: 'semantic_engine',
332
+ };
333
+ if (!result.available) {
334
+ unavailableCount++;
335
+ }
336
+ else if (isPremiumDomain) {
337
+ if (include_premium) {
338
+ premium.push(suggestion);
339
+ }
340
+ }
341
+ else {
342
+ available.push(suggestion);
343
+ }
344
+ }
345
+ // Early exit if we have enough available
346
+ if (available.length >= max_suggestions && !include_premium) {
347
+ break;
348
+ }
349
+ }
350
+ // ========================================
351
+ // STEP 4: Sort and finalize results
352
+ // ========================================
353
+ // Sort by score, prefer 'both' source items (validated by multiple sources)
354
+ available.sort((a, b) => {
355
+ // Boost 'both' source items
356
+ const aBoost = a.source === 'both' ? 2 : 0;
357
+ const bBoost = b.source === 'both' ? 2 : 0;
358
+ return (b.score + bBoost) - (a.score + aBoost);
359
+ });
253
360
  premium.sort((a, b) => b.score - a.score);
254
361
  // Limit results
255
362
  const finalAvailable = available.slice(0, max_suggestions);
256
363
  const finalPremium = include_premium ? premium.slice(0, Math.floor(max_suggestions / 2)) : [];
257
- // Generate insights
364
+ // ========================================
365
+ // STEP 5: Generate insights
366
+ // ========================================
258
367
  const insights = [];
368
+ // Source info
369
+ insights.push(`🔍 Sources: Semantic Engine (${sourceStats.semantic_engine}) + GoDaddy AI (${sourceStats.godaddy_suggest})`);
370
+ if (sourceStats.merged > 0) {
371
+ insights.push(`🔗 ${sourceStats.merged} suggestions found in both sources`);
372
+ }
259
373
  if (detectedIndustry) {
260
374
  insights.push(`🎯 Detected industry: ${detectedIndustry}`);
261
375
  }
@@ -265,8 +379,9 @@ async function executeSuggestDomainsSmart(input) {
265
379
  if (finalAvailable.length > 0) {
266
380
  insights.push(`✅ Found ${finalAvailable.length} available domain${finalAvailable.length > 1 ? 's' : ''}`);
267
381
  const best = finalAvailable[0];
268
- const priceStr = best.price_first_year !== null ? `$${best.price_first_year}/yr` : 'price unknown';
269
- insights.push(`⭐ Top pick: ${best.domain} (${priceStr})`);
382
+ const priceStr = best.price_first_year !== null ? `$${best.price_first_year}/yr` : 'via ' + best.registrar;
383
+ const sourceStr = best.source === 'both' ? ' (verified by both sources)' : '';
384
+ insights.push(`⭐ Top pick: ${best.domain} (${priceStr})${sourceStr}`);
270
385
  }
271
386
  else {
272
387
  insights.push(`❌ No standard-priced domains available`);
@@ -293,8 +408,8 @@ async function executeSuggestDomainsSmart(input) {
293
408
  detected_industry: detectedIndustry,
294
409
  tld,
295
410
  style,
296
- total_generated: rawSuggestions.length,
297
- total_checked: results.length,
411
+ sources: sourceStats,
412
+ total_checked: totalChecked + godaddySuggestions.length,
298
413
  results: {
299
414
  available: finalAvailable,
300
415
  premium: finalPremium,
@@ -1 +1 @@
1
- {"version":3,"file":"suggest_domains_smart.js","sourceRoot":"","sources":["../../src/tools/suggest_domains_smart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"suggest_domains_smart.js","sourceRoot":"","sources":["../../src/tools/suggest_domains_smart.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domain-search-mcp",
3
- "version": "1.1.4",
3
+ "version": "1.2.0",
4
4
  "description": "Fast domain availability aggregator MCP server. Check availability across Porkbun, Namecheap, RDAP, and WHOIS. Compare pricing. Get suggestions.",
5
5
  "main": "dist/server.js",
6
6
  "types": "dist/server.d.ts",
@@ -56,12 +56,111 @@ const McpResponseSchema = z.object({
56
56
  * Parse availability from GoDaddy MCP text response.
57
57
  * The response is markdown-formatted text with different formats for single vs bulk queries.
58
58
  */
59
- interface ParsedAvailability {
59
+ export interface ParsedAvailability {
60
60
  available: boolean;
61
61
  premium: boolean;
62
62
  auction: boolean;
63
63
  }
64
64
 
65
+ /**
66
+ * Parsed suggestion from GoDaddy's domains_suggest response.
67
+ */
68
+ export interface GodaddySuggestion {
69
+ domain: string;
70
+ available: boolean;
71
+ premium: boolean;
72
+ auction: boolean;
73
+ }
74
+
75
+ /**
76
+ * Parse suggestions from GoDaddy MCP domains_suggest response.
77
+ * Response format varies but typically includes categorized domain lists.
78
+ */
79
+ function parseSuggestResponse(text: string): GodaddySuggestion[] {
80
+ const suggestions: GodaddySuggestion[] = [];
81
+ const seenDomains = new Set<string>();
82
+
83
+ // Helper to add a suggestion without duplicates
84
+ const addSuggestion = (domain: string, available: boolean, premium: boolean, auction: boolean) => {
85
+ const normalized = domain.toLowerCase().trim();
86
+ // Validate it looks like a domain (has at least one dot)
87
+ if (normalized.includes('.') && !seenDomains.has(normalized)) {
88
+ seenDomains.add(normalized);
89
+ suggestions.push({ domain: normalized, available, premium, auction });
90
+ }
91
+ };
92
+
93
+ // ==== SECTION-BASED PARSING ====
94
+ // GoDaddy groups suggestions by category with emojis
95
+
96
+ // ✅ Available/Standard domains
97
+ const availableMatch = text.match(/✅\s*\*\*(?:AVAILABLE|STANDARD)[^]*?(?=(?:💎|🔨|⚠️|❌|\*\*[A-Z])|$)/gi);
98
+ if (availableMatch) {
99
+ for (const section of availableMatch) {
100
+ // Extract domain names (word.tld format)
101
+ const domainMatches = section.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
102
+ if (domainMatches) {
103
+ for (const domain of domainMatches) {
104
+ addSuggestion(domain, true, false, false);
105
+ }
106
+ }
107
+ }
108
+ }
109
+
110
+ // 💎 Premium domains
111
+ const premiumMatch = text.match(/💎\s*\*\*PREMIUM[^]*?(?=(?:✅|🔨|⚠️|❌|\*\*[A-Z])|$)/gi);
112
+ if (premiumMatch) {
113
+ for (const section of premiumMatch) {
114
+ const domainMatches = section.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
115
+ if (domainMatches) {
116
+ for (const domain of domainMatches) {
117
+ addSuggestion(domain, true, true, false);
118
+ }
119
+ }
120
+ }
121
+ }
122
+
123
+ // 🔨 Auction domains
124
+ const auctionMatch = text.match(/🔨\s*\*\*AUCTION[^]*?(?=(?:✅|💎|⚠️|❌|\*\*[A-Z])|$)/gi);
125
+ if (auctionMatch) {
126
+ for (const section of auctionMatch) {
127
+ const domainMatches = section.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
128
+ if (domainMatches) {
129
+ for (const domain of domainMatches) {
130
+ addSuggestion(domain, true, false, true);
131
+ }
132
+ }
133
+ }
134
+ }
135
+
136
+ // ==== FALLBACK: Line-by-line extraction ====
137
+ // If section parsing didn't find much, try line-by-line
138
+ if (suggestions.length < 3) {
139
+ const lines = text.split('\n');
140
+ for (const line of lines) {
141
+ const lowerLine = line.toLowerCase();
142
+
143
+ // Skip header lines
144
+ if (lowerLine.includes('**') && !lowerLine.includes('.')) continue;
145
+
146
+ // Extract any domain-like patterns
147
+ const domainMatches = line.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
148
+ if (domainMatches) {
149
+ for (const domain of domainMatches) {
150
+ // Determine type from context
151
+ const isPremium = lowerLine.includes('premium') || lowerLine.includes('💎');
152
+ const isAuction = lowerLine.includes('auction') || lowerLine.includes('🔨');
153
+ const isUnavailable = lowerLine.includes('❌') || lowerLine.includes('unavailable');
154
+
155
+ addSuggestion(domain, !isUnavailable, isPremium, isAuction);
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ return suggestions;
162
+ }
163
+
65
164
  function parseAvailabilityResponse(text: string, domain: string): ParsedAvailability {
66
165
  const normalizedDomain = domain.toLowerCase();
67
166
  const normalizedText = text.toLowerCase();
@@ -264,6 +363,58 @@ export class GodaddyMcpAdapter extends RegistrarAdapter {
264
363
  return null;
265
364
  }
266
365
 
366
+ /**
367
+ * Get domain suggestions from GoDaddy MCP.
368
+ * Uses their domains_suggest tool for AI-powered suggestions.
369
+ *
370
+ * @param query - Keywords or business description (e.g., "sustainable fashion")
371
+ * @param options - Optional parameters for suggestion customization
372
+ * @returns Array of suggested domains with availability info
373
+ */
374
+ async suggestDomains(
375
+ query: string,
376
+ options: {
377
+ tlds?: string[];
378
+ limit?: number;
379
+ } = {},
380
+ ): Promise<GodaddySuggestion[]> {
381
+ const { tlds, limit = 50 } = options;
382
+
383
+ return this.retryWithBackoff(async () => {
384
+ // Build the query - GoDaddy accepts natural language
385
+ let fullQuery = query;
386
+ if (tlds && tlds.length > 0) {
387
+ fullQuery = `${query} (prefer .${tlds.join(', .')})`;
388
+ }
389
+
390
+ const text = await this.callMcpTool('domains_suggest', {
391
+ query: fullQuery,
392
+ });
393
+
394
+ logger.debug('GoDaddy domains_suggest raw response', {
395
+ query: fullQuery,
396
+ response_length: text.length,
397
+ preview: text.substring(0, 500),
398
+ });
399
+
400
+ const suggestions = parseSuggestResponse(text);
401
+
402
+ // Filter by TLD if specified
403
+ let filtered = suggestions;
404
+ if (tlds && tlds.length > 0) {
405
+ const tldSet = new Set(tlds.map(t => t.toLowerCase()));
406
+ filtered = suggestions.filter(s => {
407
+ const parts = s.domain.split('.');
408
+ const tld = parts[parts.length - 1];
409
+ return tld && tldSet.has(tld);
410
+ });
411
+ }
412
+
413
+ // Limit results
414
+ return filtered.slice(0, limit);
415
+ }, `suggest domains for "${query}"`);
416
+ }
417
+
267
418
  /**
268
419
  * Call a GoDaddy MCP tool via JSON-RPC.
269
420
  */
@@ -5,4 +5,9 @@
5
5
  export { RegistrarAdapter } from './base.js';
6
6
  export { PorkbunAdapter, porkbunAdapter } from './porkbun.js';
7
7
  export { NamecheapAdapter, namecheapAdapter } from './namecheap.js';
8
- export { GodaddyMcpAdapter, godaddyMcpAdapter } from './godaddy-mcp.js';
8
+ export {
9
+ GodaddyMcpAdapter,
10
+ godaddyMcpAdapter,
11
+ type GodaddySuggestion,
12
+ type ParsedAvailability,
13
+ } from './godaddy-mcp.js';