domain-search-mcp 1.1.4 → 1.1.5

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.
@@ -22,7 +22,16 @@ import type { DomainResult, TLDInfo } from '../types.js';
22
22
  * Parse availability from GoDaddy MCP text response.
23
23
  * The response is markdown-formatted text with different formats for single vs bulk queries.
24
24
  */
25
- interface ParsedAvailability {
25
+ export interface ParsedAvailability {
26
+ available: boolean;
27
+ premium: boolean;
28
+ auction: boolean;
29
+ }
30
+ /**
31
+ * Parsed suggestion from GoDaddy's domains_suggest response.
32
+ */
33
+ export interface GodaddySuggestion {
34
+ domain: string;
26
35
  available: boolean;
27
36
  premium: boolean;
28
37
  auction: boolean;
@@ -54,6 +63,18 @@ export declare class GodaddyMcpAdapter extends RegistrarAdapter {
54
63
  * Get TLD info - not supported by GoDaddy MCP.
55
64
  */
56
65
  getTldInfo(_tld: string): Promise<TLDInfo | null>;
66
+ /**
67
+ * Get domain suggestions from GoDaddy MCP.
68
+ * Uses their domains_suggest tool for AI-powered suggestions.
69
+ *
70
+ * @param query - Keywords or business description (e.g., "sustainable fashion")
71
+ * @param options - Optional parameters for suggestion customization
72
+ * @returns Array of suggested domains with availability info
73
+ */
74
+ suggestDomains(query: string, options?: {
75
+ tlds?: string[];
76
+ limit?: number;
77
+ }): Promise<GodaddySuggestion[]>;
57
78
  /**
58
79
  * Call a GoDaddy MCP tool via JSON-RPC.
59
80
  */
@@ -63,5 +84,4 @@ export declare class GodaddyMcpAdapter extends RegistrarAdapter {
63
84
  * Singleton instance.
64
85
  */
65
86
  export declare const godaddyMcpAdapter: GodaddyMcpAdapter;
66
- export {};
67
87
  //# sourceMappingURL=godaddy-mcp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"godaddy-mcp.d.ts","sourceRoot":"","sources":["../../src/registrars/godaddy-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,gBAAgB,EAAe,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAiCzD;;;GAGG;AACH,UAAU,kBAAkB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AA0HD;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,EAAE,aAAa;;IAQxB;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BhE;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAmB7E;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAIvD;;OAEG;YACW,WAAW;CAyG1B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"godaddy-mcp.d.ts","sourceRoot":"","sources":["../../src/registrars/godaddy-mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,gBAAgB,EAAe,MAAM,WAAW,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAiCzD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAmND;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,EAAE,aAAa;;IAQxB;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IA0BhE;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAmB7E;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAIvD;;;;;;;OAOG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAsC/B;;OAEG;YACW,WAAW;CAyG1B;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -49,6 +49,85 @@ const McpResponseSchema = zod_1.z.object({
49
49
  message: zod_1.z.string(),
50
50
  }).optional(),
51
51
  });
52
+ /**
53
+ * Parse suggestions from GoDaddy MCP domains_suggest response.
54
+ * Response format varies but typically includes categorized domain lists.
55
+ */
56
+ function parseSuggestResponse(text) {
57
+ const suggestions = [];
58
+ const seenDomains = new Set();
59
+ // Helper to add a suggestion without duplicates
60
+ const addSuggestion = (domain, available, premium, auction) => {
61
+ const normalized = domain.toLowerCase().trim();
62
+ // Validate it looks like a domain (has at least one dot)
63
+ if (normalized.includes('.') && !seenDomains.has(normalized)) {
64
+ seenDomains.add(normalized);
65
+ suggestions.push({ domain: normalized, available, premium, auction });
66
+ }
67
+ };
68
+ // ==== SECTION-BASED PARSING ====
69
+ // GoDaddy groups suggestions by category with emojis
70
+ // ✅ Available/Standard domains
71
+ const availableMatch = text.match(/✅\s*\*\*(?:AVAILABLE|STANDARD)[^]*?(?=(?:💎|🔨|⚠️|❌|\*\*[A-Z])|$)/gi);
72
+ if (availableMatch) {
73
+ for (const section of availableMatch) {
74
+ // Extract domain names (word.tld format)
75
+ const domainMatches = section.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
76
+ if (domainMatches) {
77
+ for (const domain of domainMatches) {
78
+ addSuggestion(domain, true, false, false);
79
+ }
80
+ }
81
+ }
82
+ }
83
+ // 💎 Premium domains
84
+ const premiumMatch = text.match(/💎\s*\*\*PREMIUM[^]*?(?=(?:✅|🔨|⚠️|❌|\*\*[A-Z])|$)/gi);
85
+ if (premiumMatch) {
86
+ for (const section of premiumMatch) {
87
+ const domainMatches = section.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
88
+ if (domainMatches) {
89
+ for (const domain of domainMatches) {
90
+ addSuggestion(domain, true, true, false);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ // 🔨 Auction domains
96
+ const auctionMatch = text.match(/🔨\s*\*\*AUCTION[^]*?(?=(?:✅|💎|⚠️|❌|\*\*[A-Z])|$)/gi);
97
+ if (auctionMatch) {
98
+ for (const section of auctionMatch) {
99
+ const domainMatches = section.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
100
+ if (domainMatches) {
101
+ for (const domain of domainMatches) {
102
+ addSuggestion(domain, true, false, true);
103
+ }
104
+ }
105
+ }
106
+ }
107
+ // ==== FALLBACK: Line-by-line extraction ====
108
+ // If section parsing didn't find much, try line-by-line
109
+ if (suggestions.length < 3) {
110
+ const lines = text.split('\n');
111
+ for (const line of lines) {
112
+ const lowerLine = line.toLowerCase();
113
+ // Skip header lines
114
+ if (lowerLine.includes('**') && !lowerLine.includes('.'))
115
+ continue;
116
+ // Extract any domain-like patterns
117
+ const domainMatches = line.match(/\b[a-z0-9][-a-z0-9]*\.[a-z]{2,}\b/gi);
118
+ if (domainMatches) {
119
+ for (const domain of domainMatches) {
120
+ // Determine type from context
121
+ const isPremium = lowerLine.includes('premium') || lowerLine.includes('💎');
122
+ const isAuction = lowerLine.includes('auction') || lowerLine.includes('🔨');
123
+ const isUnavailable = lowerLine.includes('❌') || lowerLine.includes('unavailable');
124
+ addSuggestion(domain, !isUnavailable, isPremium, isAuction);
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return suggestions;
130
+ }
52
131
  function parseAvailabilityResponse(text, domain) {
53
132
  const normalizedDomain = domain.toLowerCase();
54
133
  const normalizedText = text.toLowerCase();
@@ -220,6 +299,45 @@ class GodaddyMcpAdapter extends base_js_1.RegistrarAdapter {
220
299
  async getTldInfo(_tld) {
221
300
  return null;
222
301
  }
302
+ /**
303
+ * Get domain suggestions from GoDaddy MCP.
304
+ * Uses their domains_suggest tool for AI-powered suggestions.
305
+ *
306
+ * @param query - Keywords or business description (e.g., "sustainable fashion")
307
+ * @param options - Optional parameters for suggestion customization
308
+ * @returns Array of suggested domains with availability info
309
+ */
310
+ async suggestDomains(query, options = {}) {
311
+ const { tlds, limit = 50 } = options;
312
+ return this.retryWithBackoff(async () => {
313
+ // Build the query - GoDaddy accepts natural language
314
+ let fullQuery = query;
315
+ if (tlds && tlds.length > 0) {
316
+ fullQuery = `${query} (prefer .${tlds.join(', .')})`;
317
+ }
318
+ const text = await this.callMcpTool('domains_suggest', {
319
+ query: fullQuery,
320
+ });
321
+ logger_js_1.logger.debug('GoDaddy domains_suggest raw response', {
322
+ query: fullQuery,
323
+ response_length: text.length,
324
+ preview: text.substring(0, 500),
325
+ });
326
+ const suggestions = parseSuggestResponse(text);
327
+ // Filter by TLD if specified
328
+ let filtered = suggestions;
329
+ if (tlds && tlds.length > 0) {
330
+ const tldSet = new Set(tlds.map(t => t.toLowerCase()));
331
+ filtered = suggestions.filter(s => {
332
+ const parts = s.domain.split('.');
333
+ const tld = parts[parts.length - 1];
334
+ return tld && tldSet.has(tld);
335
+ });
336
+ }
337
+ // Limit results
338
+ return filtered.slice(0, limit);
339
+ }, `suggest domains for "${query}"`);
340
+ }
223
341
  /**
224
342
  * Call a GoDaddy MCP tool via JSON-RPC.
225
343
  */
@@ -1 +1 @@
1
- {"version":3,"file":"godaddy-mcp.js","sourceRoot":"","sources":["../../src/registrars/godaddy-mcp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"godaddy-mcp.js","sourceRoot":"","sources":["../../src/registrars/godaddy-mcp.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,5 @@
4
4
  export { RegistrarAdapter } from './base.js';
5
5
  export { PorkbunAdapter, porkbunAdapter } from './porkbun.js';
6
6
  export { NamecheapAdapter, namecheapAdapter } from './namecheap.js';
7
- export { GodaddyMcpAdapter, godaddyMcpAdapter } from './godaddy-mcp.js';
7
+ export { GodaddyMcpAdapter, godaddyMcpAdapter, type GodaddySuggestion, type ParsedAvailability, } from './godaddy-mcp.js';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,2CAA8D;AAArD,4GAAA,cAAc,OAAA;AAAE,4GAAA,cAAc,OAAA;AACvC,+CAAoE;AAA3D,gHAAA,gBAAgB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAC3C,mDAAwE;AAA/D,mHAAA,iBAAiB,OAAA;AAAE,mHAAA,iBAAiB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registrars/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,qCAA6C;AAApC,2GAAA,gBAAgB,OAAA;AACzB,2CAA8D;AAArD,4GAAA,cAAc,OAAA;AAAE,4GAAA,cAAc,OAAA;AACvC,+CAAoE;AAA3D,gHAAA,gBAAgB,OAAA;AAAE,gHAAA,gBAAgB,OAAA;AAC3C,mDAK0B;AAJxB,mHAAA,iBAAiB,OAAA;AACjB,mHAAA,iBAAiB,OAAA"}
@@ -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.1.5",
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';
@@ -18,6 +18,8 @@ import {
18
18
  getSynonyms,
19
19
  getIndustryTerms,
20
20
  } from '../utils/semantic-engine.js';
21
+ import { godaddyMcpAdapter, type GodaddySuggestion } from '../registrars/index.js';
22
+ import { logger } from '../utils/logger.js';
21
23
  import type { DomainResult } from '../types.js';
22
24
 
23
25
  /**
@@ -101,14 +103,16 @@ export const suggestDomainsSmartTool = {
101
103
  description: `AI-powered domain name suggestion engine.
102
104
 
103
105
  Generate creative, brandable domain names from keywords or business descriptions.
104
- Uses semantic analysis, synonym expansion, and industry-specific vocabulary.
106
+ Combines our semantic engine with GoDaddy's AI suggestions for maximum coverage.
105
107
 
106
108
  Features:
109
+ - Dual-source suggestions: Our semantic engine + GoDaddy AI
107
110
  - Understands natural language queries ("coffee shop in seattle")
108
111
  - Auto-detects industry for contextual suggestions
109
112
  - Generates portmanteau/blended names (instagram = instant + telegram)
110
113
  - Applies modern naming patterns (ly, ify, io, hub, etc.)
111
114
  - Filters premium domains by default
115
+ - Pre-verified availability via GoDaddy
112
116
 
113
117
  Examples:
114
118
  - suggest_domains_smart("ai customer service") → AI-themed suggestions
@@ -206,6 +210,7 @@ interface SmartSuggestion {
206
210
  privacy_included: boolean;
207
211
  score: number;
208
212
  category: 'standard' | 'premium' | 'auction' | 'unavailable';
213
+ source: 'semantic_engine' | 'godaddy_suggest' | 'both';
209
214
  }
210
215
 
211
216
  /**
@@ -217,7 +222,11 @@ interface SuggestDomainsSmartResponse {
217
222
  detected_industry: string | null;
218
223
  tld: string;
219
224
  style: string;
220
- total_generated: number;
225
+ sources: {
226
+ semantic_engine: number;
227
+ godaddy_suggest: number;
228
+ merged: number;
229
+ };
221
230
  total_checked: number;
222
231
  results: {
223
232
  available: SmartSuggestion[];
@@ -243,97 +252,215 @@ export async function executeSuggestDomainsSmart(
243
252
  const detectedWords = segmentWords(normalizedQuery);
244
253
  const detectedIndustry = industry || detectIndustry(detectedWords);
245
254
 
246
- // Generate smart suggestions
247
- const rawSuggestions = generateSmartSuggestions(normalizedQuery, {
248
- maxSuggestions: max_suggestions * 4, // Generate extra for filtering
255
+ // Track source statistics
256
+ const sourceStats = {
257
+ semantic_engine: 0,
258
+ godaddy_suggest: 0,
259
+ merged: 0,
260
+ };
261
+
262
+ // ========================================
263
+ // STEP 1: Generate suggestions from BOTH sources in parallel
264
+ // ========================================
265
+
266
+ // Source 1: Our semantic engine
267
+ const semanticSuggestions = generateSmartSuggestions(normalizedQuery, {
268
+ maxSuggestions: max_suggestions * 3,
249
269
  includePortmanteau: style === 'creative' || style === 'brandable',
250
270
  includeSynonyms: style !== 'short',
251
271
  includeIndustryTerms: !!detectedIndustry,
252
272
  industry: detectedIndustry || undefined,
253
273
  });
274
+ sourceStats.semantic_engine = semanticSuggestions.length;
275
+
276
+ // Source 2: GoDaddy's AI suggestions (parallel call)
277
+ let godaddySuggestions: GodaddySuggestion[] = [];
278
+ try {
279
+ godaddySuggestions = await godaddyMcpAdapter.suggestDomains(query, {
280
+ tlds: [tld],
281
+ limit: max_suggestions * 2,
282
+ });
283
+ sourceStats.godaddy_suggest = godaddySuggestions.length;
284
+ logger.debug('GoDaddy suggestions received', {
285
+ count: godaddySuggestions.length,
286
+ sample: godaddySuggestions.slice(0, 3).map(s => s.domain),
287
+ });
288
+ } catch (error) {
289
+ // GoDaddy might fail - continue with just semantic suggestions
290
+ logger.warn('GoDaddy suggestions failed, using semantic engine only', {
291
+ error: error instanceof Error ? error.message : 'unknown',
292
+ });
293
+ }
254
294
 
255
- // Apply style filter
256
- const styledSuggestions = applyStyleFilter(rawSuggestions, style, normalizedQuery);
257
-
258
- // Limit candidates for availability check
259
- const candidates = styledSuggestions.slice(0, max_suggestions * 2);
295
+ // ========================================
296
+ // STEP 2: Merge and deduplicate suggestions
297
+ // ========================================
260
298
 
261
- // Check availability in parallel batches
262
- const BATCH_SIZE = 5;
263
- const results: Array<{ name: string; result: DomainResult | null }> = [];
299
+ // Track which domains came from which source
300
+ const domainSources = new Map<string, 'semantic_engine' | 'godaddy_suggest' | 'both'>();
264
301
 
265
- for (let i = 0; i < candidates.length; i += BATCH_SIZE) {
266
- const batch = candidates.slice(i, i + BATCH_SIZE);
267
- const batchResults = await Promise.all(
268
- batch.map(async (name) => {
269
- try {
270
- const response = await searchDomain(name, [tld]);
271
- const result = response.results.find((r) => r.domain === `${name}.${tld}`);
272
- return { name, result: result || null };
273
- } catch {
274
- return { name, result: null };
275
- }
276
- }),
277
- );
278
- results.push(...batchResults);
302
+ // Add semantic suggestions (need availability check)
303
+ const styledSuggestions = applyStyleFilter(semanticSuggestions, style, normalizedQuery);
304
+ for (const name of styledSuggestions) {
305
+ const fullDomain = `${name}.${tld}`.toLowerCase();
306
+ domainSources.set(fullDomain, 'semantic_engine');
307
+ }
279
308
 
280
- // Early exit if we have enough available
281
- const availableCount = results.filter(r => r.result?.available && !r.result?.premium).length;
282
- if (availableCount >= max_suggestions && !include_premium) {
283
- break;
309
+ // Add GoDaddy suggestions (already have availability)
310
+ for (const gs of godaddySuggestions) {
311
+ const fullDomain = gs.domain.toLowerCase();
312
+ if (domainSources.has(fullDomain)) {
313
+ domainSources.set(fullDomain, 'both'); // Found in both sources
314
+ sourceStats.merged++;
315
+ } else {
316
+ domainSources.set(fullDomain, 'godaddy_suggest');
284
317
  }
285
318
  }
286
319
 
287
- // Categorize results
320
+ // ========================================
321
+ // STEP 3: Check availability for semantic suggestions
322
+ // (GoDaddy suggestions already have availability info)
323
+ // ========================================
324
+
288
325
  const available: SmartSuggestion[] = [];
289
326
  const premium: SmartSuggestion[] = [];
290
327
  let unavailableCount = 0;
328
+ let totalChecked = 0;
291
329
 
292
- for (const { name, result } of results) {
293
- if (!result) {
294
- unavailableCount++;
295
- continue;
296
- }
297
-
298
- const isPremium = result.premium || isPremiumPrice(tld, result.price_first_year);
330
+ // First, add pre-checked GoDaddy suggestions (no API call needed!)
331
+ for (const gs of godaddySuggestions) {
332
+ const fullDomain = gs.domain.toLowerCase();
333
+ const source = domainSources.get(fullDomain) || 'godaddy_suggest';
334
+ const name = fullDomain.replace(`.${tld}`, '');
299
335
 
300
336
  const suggestion: SmartSuggestion = {
301
- domain: `${name}.${tld}`,
302
- available: result.available,
303
- price_first_year: result.price_first_year,
304
- price_renewal: result.price_renewal,
305
- registrar: result.registrar,
306
- premium: result.premium || false,
307
- premium_detected: isPremiumPrice(tld, result.price_first_year),
308
- privacy_included: result.privacy_included || false,
337
+ domain: fullDomain,
338
+ available: gs.available,
339
+ price_first_year: null, // GoDaddy doesn't provide pricing
340
+ price_renewal: null,
341
+ registrar: 'godaddy',
342
+ premium: gs.premium,
343
+ premium_detected: gs.premium,
344
+ privacy_included: false,
309
345
  score: scoreDomainName(name, normalizedQuery),
310
- category: !result.available
346
+ category: !gs.available
311
347
  ? 'unavailable'
312
- : isPremium
348
+ : gs.premium
313
349
  ? 'premium'
350
+ : gs.auction
351
+ ? 'auction'
314
352
  : 'standard',
353
+ source,
315
354
  };
316
355
 
317
- if (!result.available) {
356
+ if (!gs.available) {
318
357
  unavailableCount++;
319
- } else if (isPremium) {
320
- premium.push(suggestion);
358
+ } else if (gs.premium || gs.auction) {
359
+ if (include_premium) {
360
+ premium.push(suggestion);
361
+ }
321
362
  } else {
322
363
  available.push(suggestion);
323
364
  }
324
365
  }
325
366
 
326
- // Sort by score
327
- available.sort((a, b) => b.score - a.score);
367
+ // Then, check semantic suggestions that weren't in GoDaddy results
368
+ const semanticOnlyCandidates = styledSuggestions
369
+ .filter(name => {
370
+ const fullDomain = `${name}.${tld}`.toLowerCase();
371
+ return domainSources.get(fullDomain) === 'semantic_engine';
372
+ })
373
+ .slice(0, max_suggestions); // Limit API calls
374
+
375
+ const BATCH_SIZE = 5;
376
+ for (let i = 0; i < semanticOnlyCandidates.length; i += BATCH_SIZE) {
377
+ const batch = semanticOnlyCandidates.slice(i, i + BATCH_SIZE);
378
+ const batchResults = await Promise.all(
379
+ batch.map(async (name) => {
380
+ try {
381
+ const response = await searchDomain(name, [tld]);
382
+ const result = response.results.find((r) => r.domain === `${name}.${tld}`);
383
+ return { name, result: result || null };
384
+ } catch {
385
+ return { name, result: null };
386
+ }
387
+ }),
388
+ );
389
+
390
+ for (const { name, result } of batchResults) {
391
+ totalChecked++;
392
+ if (!result) {
393
+ unavailableCount++;
394
+ continue;
395
+ }
396
+
397
+ const isPremiumDomain = result.premium || isPremiumPrice(tld, result.price_first_year);
398
+ const fullDomain = `${name}.${tld}`.toLowerCase();
399
+
400
+ const suggestion: SmartSuggestion = {
401
+ domain: fullDomain,
402
+ available: result.available,
403
+ price_first_year: result.price_first_year,
404
+ price_renewal: result.price_renewal,
405
+ registrar: result.registrar,
406
+ premium: result.premium || false,
407
+ premium_detected: isPremiumPrice(tld, result.price_first_year),
408
+ privacy_included: result.privacy_included || false,
409
+ score: scoreDomainName(name, normalizedQuery),
410
+ category: !result.available
411
+ ? 'unavailable'
412
+ : isPremiumDomain
413
+ ? 'premium'
414
+ : 'standard',
415
+ source: 'semantic_engine',
416
+ };
417
+
418
+ if (!result.available) {
419
+ unavailableCount++;
420
+ } else if (isPremiumDomain) {
421
+ if (include_premium) {
422
+ premium.push(suggestion);
423
+ }
424
+ } else {
425
+ available.push(suggestion);
426
+ }
427
+ }
428
+
429
+ // Early exit if we have enough available
430
+ if (available.length >= max_suggestions && !include_premium) {
431
+ break;
432
+ }
433
+ }
434
+
435
+ // ========================================
436
+ // STEP 4: Sort and finalize results
437
+ // ========================================
438
+
439
+ // Sort by score, prefer 'both' source items (validated by multiple sources)
440
+ available.sort((a, b) => {
441
+ // Boost 'both' source items
442
+ const aBoost = a.source === 'both' ? 2 : 0;
443
+ const bBoost = b.source === 'both' ? 2 : 0;
444
+ return (b.score + bBoost) - (a.score + aBoost);
445
+ });
328
446
  premium.sort((a, b) => b.score - a.score);
329
447
 
330
448
  // Limit results
331
449
  const finalAvailable = available.slice(0, max_suggestions);
332
450
  const finalPremium = include_premium ? premium.slice(0, Math.floor(max_suggestions / 2)) : [];
333
451
 
334
- // Generate insights
452
+ // ========================================
453
+ // STEP 5: Generate insights
454
+ // ========================================
455
+
335
456
  const insights: string[] = [];
336
457
 
458
+ // Source info
459
+ insights.push(`🔍 Sources: Semantic Engine (${sourceStats.semantic_engine}) + GoDaddy AI (${sourceStats.godaddy_suggest})`);
460
+ if (sourceStats.merged > 0) {
461
+ insights.push(`🔗 ${sourceStats.merged} suggestions found in both sources`);
462
+ }
463
+
337
464
  if (detectedIndustry) {
338
465
  insights.push(`🎯 Detected industry: ${detectedIndustry}`);
339
466
  }
@@ -345,8 +472,9 @@ export async function executeSuggestDomainsSmart(
345
472
  if (finalAvailable.length > 0) {
346
473
  insights.push(`✅ Found ${finalAvailable.length} available domain${finalAvailable.length > 1 ? 's' : ''}`);
347
474
  const best = finalAvailable[0]!;
348
- const priceStr = best.price_first_year !== null ? `$${best.price_first_year}/yr` : 'price unknown';
349
- insights.push(`⭐ Top pick: ${best.domain} (${priceStr})`);
475
+ const priceStr = best.price_first_year !== null ? `$${best.price_first_year}/yr` : 'via ' + best.registrar;
476
+ const sourceStr = best.source === 'both' ? ' (verified by both sources)' : '';
477
+ insights.push(`⭐ Top pick: ${best.domain} (${priceStr})${sourceStr}`);
350
478
  } else {
351
479
  insights.push(`❌ No standard-priced domains available`);
352
480
  }
@@ -376,8 +504,8 @@ export async function executeSuggestDomainsSmart(
376
504
  detected_industry: detectedIndustry,
377
505
  tld,
378
506
  style,
379
- total_generated: rawSuggestions.length,
380
- total_checked: results.length,
507
+ sources: sourceStats,
508
+ total_checked: totalChecked + godaddySuggestions.length,
381
509
  results: {
382
510
  available: finalAvailable,
383
511
  premium: finalPremium,