domain-search-mcp 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 (151) hide show
  1. package/.env.example +52 -0
  2. package/Dockerfile +15 -0
  3. package/LICENSE +21 -0
  4. package/README.md +426 -0
  5. package/SECURITY.md +252 -0
  6. package/dist/config.d.ts +25 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +117 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/fallbacks/index.d.ts +6 -0
  11. package/dist/fallbacks/index.d.ts.map +1 -0
  12. package/dist/fallbacks/index.js +14 -0
  13. package/dist/fallbacks/index.js.map +1 -0
  14. package/dist/fallbacks/rdap.d.ts +18 -0
  15. package/dist/fallbacks/rdap.d.ts.map +1 -0
  16. package/dist/fallbacks/rdap.js +339 -0
  17. package/dist/fallbacks/rdap.js.map +1 -0
  18. package/dist/fallbacks/whois.d.ts +27 -0
  19. package/dist/fallbacks/whois.d.ts.map +1 -0
  20. package/dist/fallbacks/whois.js +219 -0
  21. package/dist/fallbacks/whois.js.map +1 -0
  22. package/dist/registrars/base.d.ts +89 -0
  23. package/dist/registrars/base.d.ts.map +1 -0
  24. package/dist/registrars/base.js +203 -0
  25. package/dist/registrars/base.js.map +1 -0
  26. package/dist/registrars/index.d.ts +7 -0
  27. package/dist/registrars/index.d.ts.map +1 -0
  28. package/dist/registrars/index.js +15 -0
  29. package/dist/registrars/index.js.map +1 -0
  30. package/dist/registrars/namecheap.d.ts +69 -0
  31. package/dist/registrars/namecheap.d.ts.map +1 -0
  32. package/dist/registrars/namecheap.js +307 -0
  33. package/dist/registrars/namecheap.js.map +1 -0
  34. package/dist/registrars/porkbun.d.ts +63 -0
  35. package/dist/registrars/porkbun.d.ts.map +1 -0
  36. package/dist/registrars/porkbun.js +299 -0
  37. package/dist/registrars/porkbun.js.map +1 -0
  38. package/dist/server.d.ts +19 -0
  39. package/dist/server.d.ts.map +1 -0
  40. package/dist/server.js +209 -0
  41. package/dist/server.js.map +1 -0
  42. package/dist/services/domain-search.d.ts +40 -0
  43. package/dist/services/domain-search.d.ts.map +1 -0
  44. package/dist/services/domain-search.js +438 -0
  45. package/dist/services/domain-search.js.map +1 -0
  46. package/dist/services/index.d.ts +5 -0
  47. package/dist/services/index.d.ts.map +1 -0
  48. package/dist/services/index.js +11 -0
  49. package/dist/services/index.js.map +1 -0
  50. package/dist/tools/bulk_search.d.ts +72 -0
  51. package/dist/tools/bulk_search.d.ts.map +1 -0
  52. package/dist/tools/bulk_search.js +108 -0
  53. package/dist/tools/bulk_search.js.map +1 -0
  54. package/dist/tools/check_socials.d.ts +71 -0
  55. package/dist/tools/check_socials.d.ts.map +1 -0
  56. package/dist/tools/check_socials.js +357 -0
  57. package/dist/tools/check_socials.js.map +1 -0
  58. package/dist/tools/compare_registrars.d.ts +80 -0
  59. package/dist/tools/compare_registrars.d.ts.map +1 -0
  60. package/dist/tools/compare_registrars.js +116 -0
  61. package/dist/tools/compare_registrars.js.map +1 -0
  62. package/dist/tools/index.d.ts +10 -0
  63. package/dist/tools/index.d.ts.map +1 -0
  64. package/dist/tools/index.js +31 -0
  65. package/dist/tools/index.js.map +1 -0
  66. package/dist/tools/search_domain.d.ts +61 -0
  67. package/dist/tools/search_domain.d.ts.map +1 -0
  68. package/dist/tools/search_domain.js +81 -0
  69. package/dist/tools/search_domain.js.map +1 -0
  70. package/dist/tools/suggest_domains.d.ts +82 -0
  71. package/dist/tools/suggest_domains.d.ts.map +1 -0
  72. package/dist/tools/suggest_domains.js +227 -0
  73. package/dist/tools/suggest_domains.js.map +1 -0
  74. package/dist/tools/tld_info.d.ts +56 -0
  75. package/dist/tools/tld_info.d.ts.map +1 -0
  76. package/dist/tools/tld_info.js +273 -0
  77. package/dist/tools/tld_info.js.map +1 -0
  78. package/dist/types.d.ts +193 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +9 -0
  81. package/dist/types.js.map +1 -0
  82. package/dist/utils/cache.d.ts +81 -0
  83. package/dist/utils/cache.d.ts.map +1 -0
  84. package/dist/utils/cache.js +192 -0
  85. package/dist/utils/cache.js.map +1 -0
  86. package/dist/utils/errors.d.ts +87 -0
  87. package/dist/utils/errors.d.ts.map +1 -0
  88. package/dist/utils/errors.js +191 -0
  89. package/dist/utils/errors.js.map +1 -0
  90. package/dist/utils/index.d.ts +8 -0
  91. package/dist/utils/index.d.ts.map +1 -0
  92. package/dist/utils/index.js +24 -0
  93. package/dist/utils/index.js.map +1 -0
  94. package/dist/utils/logger.d.ts +27 -0
  95. package/dist/utils/logger.d.ts.map +1 -0
  96. package/dist/utils/logger.js +132 -0
  97. package/dist/utils/logger.js.map +1 -0
  98. package/dist/utils/premium-analyzer.d.ts +33 -0
  99. package/dist/utils/premium-analyzer.d.ts.map +1 -0
  100. package/dist/utils/premium-analyzer.js +273 -0
  101. package/dist/utils/premium-analyzer.js.map +1 -0
  102. package/dist/utils/validators.d.ts +53 -0
  103. package/dist/utils/validators.d.ts.map +1 -0
  104. package/dist/utils/validators.js +159 -0
  105. package/dist/utils/validators.js.map +1 -0
  106. package/docs/marketing/devto-post.md +135 -0
  107. package/docs/marketing/hackernews.md +42 -0
  108. package/docs/marketing/producthunt.md +109 -0
  109. package/docs/marketing/reddit-post.md +59 -0
  110. package/docs/marketing/twitter-thread.md +105 -0
  111. package/examples/bulk-search-50-domains.ts +131 -0
  112. package/examples/cli-interactive.ts +280 -0
  113. package/examples/compare-registrars.ts +78 -0
  114. package/examples/search-single-domain.ts +54 -0
  115. package/examples/suggest-names.ts +110 -0
  116. package/glama.json +6 -0
  117. package/jest.config.js +35 -0
  118. package/package.json +62 -0
  119. package/smithery.yaml +36 -0
  120. package/src/config.ts +121 -0
  121. package/src/fallbacks/index.ts +6 -0
  122. package/src/fallbacks/rdap.ts +407 -0
  123. package/src/fallbacks/whois.ts +250 -0
  124. package/src/registrars/base.ts +264 -0
  125. package/src/registrars/index.ts +7 -0
  126. package/src/registrars/namecheap.ts +378 -0
  127. package/src/registrars/porkbun.ts +380 -0
  128. package/src/server.ts +276 -0
  129. package/src/services/domain-search.ts +567 -0
  130. package/src/services/index.ts +9 -0
  131. package/src/tools/bulk_search.ts +142 -0
  132. package/src/tools/check_socials.ts +467 -0
  133. package/src/tools/compare_registrars.ts +162 -0
  134. package/src/tools/index.ts +45 -0
  135. package/src/tools/search_domain.ts +93 -0
  136. package/src/tools/suggest_domains.ts +284 -0
  137. package/src/tools/tld_info.ts +294 -0
  138. package/src/types.ts +289 -0
  139. package/src/utils/cache.ts +238 -0
  140. package/src/utils/errors.ts +262 -0
  141. package/src/utils/index.ts +8 -0
  142. package/src/utils/logger.ts +162 -0
  143. package/src/utils/premium-analyzer.ts +303 -0
  144. package/src/utils/validators.ts +193 -0
  145. package/tests/premium-analyzer.test.ts +310 -0
  146. package/tests/unit/cache.test.ts +123 -0
  147. package/tests/unit/errors.test.ts +190 -0
  148. package/tests/unit/tld-info.test.ts +62 -0
  149. package/tests/unit/tools.test.ts +200 -0
  150. package/tests/unit/validators.test.ts +146 -0
  151. package/tsconfig.json +25 -0
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool Exports.
3
+ */
4
+ export { searchDomainTool, searchDomainSchema, executeSearchDomain, type SearchDomainInput, } from './search_domain.js';
5
+ export { bulkSearchTool, bulkSearchSchema, executeBulkSearch, type BulkSearchInput, } from './bulk_search.js';
6
+ export { compareRegistrarsTool, compareRegistrarsSchema, executeCompareRegistrars, type CompareRegistrarsInput, } from './compare_registrars.js';
7
+ export { suggestDomainsTool, suggestDomainsSchema, executeSuggestDomains, type SuggestDomainsInput, } from './suggest_domains.js';
8
+ export { tldInfoTool, tldInfoSchema, executeTldInfo, type TldInfoInput, } from './tld_info.js';
9
+ export { checkSocialsTool, checkSocialsSchema, executeCheckSocials, type CheckSocialsInput, } from './check_socials.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,KAAK,sBAAsB,GAC5B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * Tool Exports.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.executeCheckSocials = exports.checkSocialsSchema = exports.checkSocialsTool = exports.executeTldInfo = exports.tldInfoSchema = exports.tldInfoTool = exports.executeSuggestDomains = exports.suggestDomainsSchema = exports.suggestDomainsTool = exports.executeCompareRegistrars = exports.compareRegistrarsSchema = exports.compareRegistrarsTool = exports.executeBulkSearch = exports.bulkSearchSchema = exports.bulkSearchTool = exports.executeSearchDomain = exports.searchDomainSchema = exports.searchDomainTool = void 0;
7
+ var search_domain_js_1 = require("./search_domain.js");
8
+ Object.defineProperty(exports, "searchDomainTool", { enumerable: true, get: function () { return search_domain_js_1.searchDomainTool; } });
9
+ Object.defineProperty(exports, "searchDomainSchema", { enumerable: true, get: function () { return search_domain_js_1.searchDomainSchema; } });
10
+ Object.defineProperty(exports, "executeSearchDomain", { enumerable: true, get: function () { return search_domain_js_1.executeSearchDomain; } });
11
+ var bulk_search_js_1 = require("./bulk_search.js");
12
+ Object.defineProperty(exports, "bulkSearchTool", { enumerable: true, get: function () { return bulk_search_js_1.bulkSearchTool; } });
13
+ Object.defineProperty(exports, "bulkSearchSchema", { enumerable: true, get: function () { return bulk_search_js_1.bulkSearchSchema; } });
14
+ Object.defineProperty(exports, "executeBulkSearch", { enumerable: true, get: function () { return bulk_search_js_1.executeBulkSearch; } });
15
+ var compare_registrars_js_1 = require("./compare_registrars.js");
16
+ Object.defineProperty(exports, "compareRegistrarsTool", { enumerable: true, get: function () { return compare_registrars_js_1.compareRegistrarsTool; } });
17
+ Object.defineProperty(exports, "compareRegistrarsSchema", { enumerable: true, get: function () { return compare_registrars_js_1.compareRegistrarsSchema; } });
18
+ Object.defineProperty(exports, "executeCompareRegistrars", { enumerable: true, get: function () { return compare_registrars_js_1.executeCompareRegistrars; } });
19
+ var suggest_domains_js_1 = require("./suggest_domains.js");
20
+ Object.defineProperty(exports, "suggestDomainsTool", { enumerable: true, get: function () { return suggest_domains_js_1.suggestDomainsTool; } });
21
+ Object.defineProperty(exports, "suggestDomainsSchema", { enumerable: true, get: function () { return suggest_domains_js_1.suggestDomainsSchema; } });
22
+ Object.defineProperty(exports, "executeSuggestDomains", { enumerable: true, get: function () { return suggest_domains_js_1.executeSuggestDomains; } });
23
+ var tld_info_js_1 = require("./tld_info.js");
24
+ Object.defineProperty(exports, "tldInfoTool", { enumerable: true, get: function () { return tld_info_js_1.tldInfoTool; } });
25
+ Object.defineProperty(exports, "tldInfoSchema", { enumerable: true, get: function () { return tld_info_js_1.tldInfoSchema; } });
26
+ Object.defineProperty(exports, "executeTldInfo", { enumerable: true, get: function () { return tld_info_js_1.executeTldInfo; } });
27
+ var check_socials_js_1 = require("./check_socials.js");
28
+ Object.defineProperty(exports, "checkSocialsTool", { enumerable: true, get: function () { return check_socials_js_1.checkSocialsTool; } });
29
+ Object.defineProperty(exports, "checkSocialsSchema", { enumerable: true, get: function () { return check_socials_js_1.checkSocialsSchema; } });
30
+ Object.defineProperty(exports, "executeCheckSocials", { enumerable: true, get: function () { return check_socials_js_1.executeCheckSocials; } });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uDAK4B;AAJ1B,oHAAA,gBAAgB,OAAA;AAChB,sHAAA,kBAAkB,OAAA;AAClB,uHAAA,mBAAmB,OAAA;AAIrB,mDAK0B;AAJxB,gHAAA,cAAc,OAAA;AACd,kHAAA,gBAAgB,OAAA;AAChB,mHAAA,iBAAiB,OAAA;AAInB,iEAKiC;AAJ/B,8HAAA,qBAAqB,OAAA;AACrB,gIAAA,uBAAuB,OAAA;AACvB,iIAAA,wBAAwB,OAAA;AAI1B,2DAK8B;AAJ5B,wHAAA,kBAAkB,OAAA;AAClB,0HAAA,oBAAoB,OAAA;AACpB,2HAAA,qBAAqB,OAAA;AAIvB,6CAKuB;AAJrB,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,6GAAA,cAAc,OAAA;AAIhB,uDAK4B;AAJ1B,oHAAA,gBAAgB,OAAA;AAChB,sHAAA,kBAAkB,OAAA;AAClB,uHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * search_domain Tool - Primary Domain Search.
3
+ *
4
+ * This is the main entry point for domain availability checks.
5
+ * Designed for magic first moment: works with zero configuration.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { SearchResponse } from '../types.js';
9
+ /**
10
+ * Input schema for search_domain.
11
+ */
12
+ export declare const searchDomainSchema: z.ZodObject<{
13
+ domain_name: z.ZodString;
14
+ tlds: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
15
+ registrars: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ domain_name: string;
18
+ tlds?: string[] | undefined;
19
+ registrars?: string[] | undefined;
20
+ }, {
21
+ domain_name: string;
22
+ tlds?: string[] | undefined;
23
+ registrars?: string[] | undefined;
24
+ }>;
25
+ export type SearchDomainInput = z.infer<typeof searchDomainSchema>;
26
+ /**
27
+ * Tool definition for MCP.
28
+ */
29
+ export declare const searchDomainTool: {
30
+ name: string;
31
+ description: string;
32
+ inputSchema: {
33
+ type: string;
34
+ properties: {
35
+ domain_name: {
36
+ type: string;
37
+ description: string;
38
+ };
39
+ tlds: {
40
+ type: string;
41
+ items: {
42
+ type: string;
43
+ };
44
+ description: string;
45
+ };
46
+ registrars: {
47
+ type: string;
48
+ items: {
49
+ type: string;
50
+ };
51
+ description: string;
52
+ };
53
+ };
54
+ required: string[];
55
+ };
56
+ };
57
+ /**
58
+ * Execute the search_domain tool.
59
+ */
60
+ export declare function executeSearchDomain(input: SearchDomainInput): Promise<SearchResponse>;
61
+ //# sourceMappingURL=search_domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search_domain.d.ts","sourceRoot":"","sources":["../../src/tools/search_domain.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAoB7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoC5B,CAAC;AAEF;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,cAAc,CAAC,CAOzB"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * search_domain Tool - Primary Domain Search.
4
+ *
5
+ * This is the main entry point for domain availability checks.
6
+ * Designed for magic first moment: works with zero configuration.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.searchDomainTool = exports.searchDomainSchema = void 0;
10
+ exports.executeSearchDomain = executeSearchDomain;
11
+ const zod_1 = require("zod");
12
+ const domain_search_js_1 = require("../services/domain-search.js");
13
+ const errors_js_1 = require("../utils/errors.js");
14
+ /**
15
+ * Input schema for search_domain.
16
+ */
17
+ exports.searchDomainSchema = zod_1.z.object({
18
+ domain_name: zod_1.z
19
+ .string()
20
+ .min(1)
21
+ .max(63)
22
+ .describe("The domain name you want to check (e.g., 'vibecoding', 'myapp'). Don't include the extension (.com, .io, etc.)"),
23
+ tlds: zod_1.z
24
+ .array(zod_1.z.string())
25
+ .optional()
26
+ .describe("TLD extensions to check (e.g., ['com', 'io', 'dev']). Defaults to ['com', 'io', 'dev'] if not specified."),
27
+ registrars: zod_1.z
28
+ .array(zod_1.z.string())
29
+ .optional()
30
+ .describe("Optional: specific registrars to check (e.g., ['porkbun', 'namecheap']). Leave empty to auto-select."),
31
+ });
32
+ /**
33
+ * Tool definition for MCP.
34
+ */
35
+ exports.searchDomainTool = {
36
+ name: 'search_domain',
37
+ description: `Search for domain availability and pricing across multiple TLDs.
38
+
39
+ Returns:
40
+ - Availability status for each domain
41
+ - Pricing (first year and renewal)
42
+ - Whether WHOIS privacy is included
43
+ - Human-readable insights and next steps
44
+
45
+ Examples:
46
+ - search_domain("vibecoding") → checks vibecoding.com, .io, .dev
47
+ - search_domain("myapp", ["com", "io"]) → checks specific TLDs`,
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ domain_name: {
52
+ type: 'string',
53
+ description: "The domain name to search (e.g., 'vibecoding'). No extension needed.",
54
+ },
55
+ tlds: {
56
+ type: 'array',
57
+ items: { type: 'string' },
58
+ description: "TLD extensions to check (e.g., ['com', 'io', 'dev']). Defaults to ['com', 'io', 'dev'].",
59
+ },
60
+ registrars: {
61
+ type: 'array',
62
+ items: { type: 'string' },
63
+ description: "Optional: specific registrars to check. Leave empty to auto-select.",
64
+ },
65
+ },
66
+ required: ['domain_name'],
67
+ },
68
+ };
69
+ /**
70
+ * Execute the search_domain tool.
71
+ */
72
+ async function executeSearchDomain(input) {
73
+ try {
74
+ const { domain_name, tlds, registrars } = exports.searchDomainSchema.parse(input);
75
+ return await (0, domain_search_js_1.searchDomain)(domain_name, tlds, registrars);
76
+ }
77
+ catch (error) {
78
+ throw (0, errors_js_1.wrapError)(error);
79
+ }
80
+ }
81
+ //# sourceMappingURL=search_domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search_domain.js","sourceRoot":"","sources":["../../src/tools/search_domain.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AA8EH,kDASC;AArFD,6BAAwB;AAExB,mEAA4D;AAC5D,kDAA+C;AAE/C;;GAEG;AACU,QAAA,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,OAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CACP,gHAAgH,CACjH;IACH,IAAI,EAAE,OAAC;SACJ,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,0GAA0G,CAC3G;IACH,UAAU,EAAE,OAAC;SACV,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,sGAAsG,CACvG;CACJ,CAAC,CAAC;AAIH;;GAEG;AACU,QAAA,gBAAgB,GAAG;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE;;;;;;;;;;+DAUgD;IAC7D,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,sEAAsE;aACzE;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,yFAAyF;aAC5F;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EACT,qEAAqE;aACxE;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,CAAC;KAC1B;CACF,CAAC;AAEF;;GAEG;AACI,KAAK,UAAU,mBAAmB,CACvC,KAAwB;IAExB,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,0BAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1E,OAAO,MAAM,IAAA,+BAAY,EAAC,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAA,qBAAS,EAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * suggest_domains Tool - Domain Name Suggestions.
3
+ *
4
+ * Generate and check variations of a base domain name.
5
+ * Helps find available alternatives when the primary name is taken.
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * Input schema for suggest_domains.
10
+ */
11
+ export declare const suggestDomainsSchema: z.ZodObject<{
12
+ base_name: z.ZodString;
13
+ tld: z.ZodDefault<z.ZodOptional<z.ZodString>>;
14
+ variants: z.ZodOptional<z.ZodArray<z.ZodEnum<["hyphen", "numbers", "abbreviations", "synonyms", "prefixes", "suffixes"]>, "many">>;
15
+ max_suggestions: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ tld: string;
18
+ base_name: string;
19
+ max_suggestions: number;
20
+ variants?: ("hyphen" | "numbers" | "abbreviations" | "synonyms" | "prefixes" | "suffixes")[] | undefined;
21
+ }, {
22
+ base_name: string;
23
+ tld?: string | undefined;
24
+ variants?: ("hyphen" | "numbers" | "abbreviations" | "synonyms" | "prefixes" | "suffixes")[] | undefined;
25
+ max_suggestions?: number | undefined;
26
+ }>;
27
+ export type SuggestDomainsInput = z.infer<typeof suggestDomainsSchema>;
28
+ /**
29
+ * Tool definition for MCP.
30
+ */
31
+ export declare const suggestDomainsTool: {
32
+ name: string;
33
+ description: string;
34
+ inputSchema: {
35
+ type: string;
36
+ properties: {
37
+ base_name: {
38
+ type: string;
39
+ description: string;
40
+ };
41
+ tld: {
42
+ type: string;
43
+ description: string;
44
+ };
45
+ variants: {
46
+ type: string;
47
+ items: {
48
+ type: string;
49
+ enum: string[];
50
+ };
51
+ description: string;
52
+ };
53
+ max_suggestions: {
54
+ type: string;
55
+ description: string;
56
+ };
57
+ };
58
+ required: string[];
59
+ };
60
+ };
61
+ /**
62
+ * Response format for suggestions.
63
+ */
64
+ interface SuggestDomainsResponse {
65
+ base_name: string;
66
+ tld: string;
67
+ total_checked: number;
68
+ available_count: number;
69
+ suggestions: Array<{
70
+ domain: string;
71
+ price_first_year: number | null;
72
+ registrar: string;
73
+ score: number;
74
+ }>;
75
+ insights: string[];
76
+ }
77
+ /**
78
+ * Execute the suggest_domains tool.
79
+ */
80
+ export declare function executeSuggestDomains(input: SuggestDomainsInput): Promise<SuggestDomainsResponse>;
81
+ export {};
82
+ //# sourceMappingURL=suggest_domains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest_domains.d.ts","sourceRoot":"","sources":["../../src/tools/suggest_domains.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAwB/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC9B,CAAC;AAoGF;;GAEG;AACH,UAAU,sBAAsB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,KAAK,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CA0EjC"}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * suggest_domains Tool - Domain Name Suggestions.
4
+ *
5
+ * Generate and check variations of a base domain name.
6
+ * Helps find available alternatives when the primary name is taken.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.suggestDomainsTool = exports.suggestDomainsSchema = void 0;
10
+ exports.executeSuggestDomains = executeSuggestDomains;
11
+ const zod_1 = require("zod");
12
+ const domain_search_js_1 = require("../services/domain-search.js");
13
+ const validators_js_1 = require("../utils/validators.js");
14
+ const errors_js_1 = require("../utils/errors.js");
15
+ /**
16
+ * Input schema for suggest_domains.
17
+ */
18
+ exports.suggestDomainsSchema = zod_1.z.object({
19
+ base_name: zod_1.z
20
+ .string()
21
+ .min(1)
22
+ .describe("The base domain name to generate variations from (e.g., 'vibecoding')."),
23
+ tld: zod_1.z
24
+ .string()
25
+ .optional()
26
+ .default('com')
27
+ .describe("TLD to check suggestions against (e.g., 'com'). Defaults to 'com'."),
28
+ variants: zod_1.z
29
+ .array(zod_1.z.enum(['hyphen', 'numbers', 'abbreviations', 'synonyms', 'prefixes', 'suffixes']))
30
+ .optional()
31
+ .describe("Types of variations to generate. Defaults to all types."),
32
+ max_suggestions: zod_1.z
33
+ .number()
34
+ .int()
35
+ .min(1)
36
+ .max(50)
37
+ .optional()
38
+ .default(10)
39
+ .describe("Maximum number of suggestions to return (1-50). Defaults to 10."),
40
+ });
41
+ /**
42
+ * Tool definition for MCP.
43
+ */
44
+ exports.suggestDomainsTool = {
45
+ name: 'suggest_domains',
46
+ description: `Generate and check availability of domain name variations.
47
+
48
+ Creates variations like:
49
+ - Hyphenated: vibe-coding
50
+ - With numbers: vibecoding1, vibecoding2
51
+ - Prefixes: getvibecoding, tryvibecoding
52
+ - Suffixes: vibecodingapp, vibecodinghq
53
+
54
+ Returns only available suggestions, ranked by quality.
55
+
56
+ Example:
57
+ - suggest_domains("vibecoding") → finds available variations`,
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ base_name: {
62
+ type: 'string',
63
+ description: "The base domain name to generate variations from.",
64
+ },
65
+ tld: {
66
+ type: 'string',
67
+ description: "TLD to check (e.g., 'com'). Defaults to 'com'.",
68
+ },
69
+ variants: {
70
+ type: 'array',
71
+ items: {
72
+ type: 'string',
73
+ enum: ['hyphen', 'numbers', 'abbreviations', 'synonyms', 'prefixes', 'suffixes'],
74
+ },
75
+ description: "Types of variations to generate. Defaults to all.",
76
+ },
77
+ max_suggestions: {
78
+ type: 'number',
79
+ description: "Maximum suggestions to return (1-50). Defaults to 10.",
80
+ },
81
+ },
82
+ required: ['base_name'],
83
+ },
84
+ };
85
+ /**
86
+ * Generate domain name variations.
87
+ */
88
+ function generateVariations(baseName, variantTypes) {
89
+ const variations = new Set();
90
+ // Always include the original
91
+ variations.add(baseName);
92
+ if (variantTypes.includes('hyphen') || variantTypes.length === 0) {
93
+ // Add hyphens at word boundaries (heuristic: before capital letters or common words)
94
+ const hyphenated = baseName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
95
+ if (hyphenated !== baseName) {
96
+ variations.add(hyphenated);
97
+ }
98
+ // Try hyphen in the middle
99
+ if (baseName.length >= 6) {
100
+ const mid = Math.floor(baseName.length / 2);
101
+ variations.add(baseName.slice(0, mid) + '-' + baseName.slice(mid));
102
+ }
103
+ }
104
+ if (variantTypes.includes('numbers') || variantTypes.length === 0) {
105
+ // Add numbers
106
+ for (let i = 1; i <= 3; i++) {
107
+ variations.add(`${baseName}${i}`);
108
+ }
109
+ variations.add(`${baseName}io`);
110
+ variations.add(`${baseName}app`);
111
+ }
112
+ if (variantTypes.includes('prefixes') || variantTypes.length === 0) {
113
+ const prefixes = ['get', 'try', 'use', 'my', 'the', 'go', 'hey', 'hi'];
114
+ for (const prefix of prefixes) {
115
+ variations.add(`${prefix}${baseName}`);
116
+ }
117
+ }
118
+ if (variantTypes.includes('suffixes') || variantTypes.length === 0) {
119
+ const suffixes = ['app', 'hq', 'io', 'labs', 'dev', 'ai', 'hub', 'now'];
120
+ for (const suffix of suffixes) {
121
+ variations.add(`${baseName}${suffix}`);
122
+ }
123
+ }
124
+ if (variantTypes.includes('abbreviations') || variantTypes.length === 0) {
125
+ // Remove vowels (except first letter)
126
+ const abbreviated = baseName[0] + baseName.slice(1).replace(/[aeiou]/gi, '');
127
+ if (abbreviated.length >= 3 && abbreviated !== baseName) {
128
+ variations.add(abbreviated);
129
+ }
130
+ }
131
+ return Array.from(variations);
132
+ }
133
+ /**
134
+ * Score a domain suggestion.
135
+ * Higher score = better suggestion.
136
+ */
137
+ function scoreSuggestion(original, suggestion, result) {
138
+ let score = 50; // Base score
139
+ // Prefer shorter names
140
+ score -= suggestion.length;
141
+ // Prefer exact match
142
+ if (suggestion === original)
143
+ score += 20;
144
+ // Prefer no hyphens
145
+ if (!suggestion.includes('-'))
146
+ score += 5;
147
+ // Prefer no numbers
148
+ if (!/\d/.test(suggestion))
149
+ score += 5;
150
+ // Prefer cheaper prices
151
+ if (result.price_first_year !== null) {
152
+ if (result.price_first_year <= 10)
153
+ score += 10;
154
+ else if (result.price_first_year <= 15)
155
+ score += 5;
156
+ }
157
+ // Penalize premiums
158
+ if (result.premium)
159
+ score -= 20;
160
+ // Bonus for privacy included
161
+ if (result.privacy_included)
162
+ score += 5;
163
+ return score;
164
+ }
165
+ /**
166
+ * Execute the suggest_domains tool.
167
+ */
168
+ async function executeSuggestDomains(input) {
169
+ try {
170
+ const { base_name, tld, variants, max_suggestions } = exports.suggestDomainsSchema.parse(input);
171
+ const normalizedBase = (0, validators_js_1.validateDomainName)(base_name);
172
+ const variantTypes = variants || [];
173
+ // Generate variations
174
+ const variations = generateVariations(normalizedBase, variantTypes);
175
+ // Limit to max + some buffer for unavailable ones
176
+ const toCheck = variations.slice(0, max_suggestions * 2);
177
+ // Check availability for all variations
178
+ const results = [];
179
+ for (const name of toCheck) {
180
+ try {
181
+ const response = await (0, domain_search_js_1.searchDomain)(name, [tld]);
182
+ const result = response.results.find((r) => r.domain === `${name}.${tld}`);
183
+ results.push({ name, result: result || null });
184
+ }
185
+ catch {
186
+ results.push({ name, result: null });
187
+ }
188
+ }
189
+ // Filter to available and score them
190
+ const available = results
191
+ .filter((r) => r.result?.available)
192
+ .map((r) => ({
193
+ name: r.name,
194
+ result: r.result,
195
+ score: scoreSuggestion(normalizedBase, r.name, r.result),
196
+ }))
197
+ .sort((a, b) => b.score - a.score)
198
+ .slice(0, max_suggestions);
199
+ const insights = [];
200
+ if (available.length > 0) {
201
+ insights.push(`✅ Found ${available.length} available variation${available.length > 1 ? 's' : ''}`);
202
+ const best = available[0];
203
+ insights.push(`⭐ Top suggestion: ${best.name}.${tld} ($${best.result.price_first_year ?? 'unknown'}/year)`);
204
+ }
205
+ else {
206
+ insights.push(`❌ No available variations found for ${normalizedBase}.${tld}`);
207
+ insights.push('💡 Try a different TLD or modify the base name more significantly');
208
+ }
209
+ return {
210
+ base_name: normalizedBase,
211
+ tld,
212
+ total_checked: toCheck.length,
213
+ available_count: available.length,
214
+ suggestions: available.map((a) => ({
215
+ domain: `${a.name}.${tld}`,
216
+ price_first_year: a.result.price_first_year,
217
+ registrar: a.result.registrar,
218
+ score: a.score,
219
+ })),
220
+ insights,
221
+ };
222
+ }
223
+ catch (error) {
224
+ throw (0, errors_js_1.wrapError)(error);
225
+ }
226
+ }
227
+ //# sourceMappingURL=suggest_domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggest_domains.js","sourceRoot":"","sources":["../../src/tools/suggest_domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * tld_info Tool - TLD Information.
3
+ *
4
+ * Get information about a Top Level Domain (TLD).
5
+ * Includes pricing, restrictions, and recommendations.
6
+ */
7
+ import { z } from 'zod';
8
+ import type { TLDInfo } from '../types.js';
9
+ /**
10
+ * Input schema for tld_info.
11
+ */
12
+ export declare const tldInfoSchema: z.ZodObject<{
13
+ tld: z.ZodString;
14
+ detailed: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ tld: string;
17
+ detailed: boolean;
18
+ }, {
19
+ tld: string;
20
+ detailed?: boolean | undefined;
21
+ }>;
22
+ export type TldInfoInput = z.infer<typeof tldInfoSchema>;
23
+ /**
24
+ * Tool definition for MCP.
25
+ */
26
+ export declare const tldInfoTool: {
27
+ name: string;
28
+ description: string;
29
+ inputSchema: {
30
+ type: string;
31
+ properties: {
32
+ tld: {
33
+ type: string;
34
+ description: string;
35
+ };
36
+ detailed: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ };
41
+ required: string[];
42
+ };
43
+ };
44
+ /**
45
+ * Response format for TLD info.
46
+ */
47
+ interface TldInfoResponse extends TLDInfo {
48
+ insights: string[];
49
+ recommendation: string;
50
+ }
51
+ /**
52
+ * Execute the tld_info tool.
53
+ */
54
+ export declare function executeTldInfo(input: TldInfoInput): Promise<TldInfoResponse>;
55
+ export {};
56
+ //# sourceMappingURL=tld_info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tld_info.d.ts","sourceRoot":"","sources":["../../src/tools/tld_info.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAK3C;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;EAWxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;CA0BvB,CAAC;AAgIF;;GAEG;AACH,UAAU,eAAgB,SAAQ,OAAO;IACvC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,eAAe,CAAC,CAsC1B"}