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,273 @@
1
+ "use strict";
2
+ /**
3
+ * tld_info Tool - TLD Information.
4
+ *
5
+ * Get information about a Top Level Domain (TLD).
6
+ * Includes pricing, restrictions, and recommendations.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.tldInfoTool = exports.tldInfoSchema = void 0;
10
+ exports.executeTldInfo = executeTldInfo;
11
+ const zod_1 = require("zod");
12
+ const validators_js_1 = require("../utils/validators.js");
13
+ const errors_js_1 = require("../utils/errors.js");
14
+ const cache_js_1 = require("../utils/cache.js");
15
+ /**
16
+ * Input schema for tld_info.
17
+ */
18
+ exports.tldInfoSchema = zod_1.z.object({
19
+ tld: zod_1.z
20
+ .string()
21
+ .min(2)
22
+ .max(63)
23
+ .describe("The TLD to get information about (e.g., 'com', 'io', 'dev')."),
24
+ detailed: zod_1.z
25
+ .boolean()
26
+ .optional()
27
+ .default(false)
28
+ .describe("Whether to include detailed information. Defaults to false."),
29
+ });
30
+ /**
31
+ * Tool definition for MCP.
32
+ */
33
+ exports.tldInfoTool = {
34
+ name: 'tld_info',
35
+ description: `Get information about a Top Level Domain (TLD).
36
+
37
+ Returns:
38
+ - Description and typical use case
39
+ - Price range
40
+ - Any special restrictions
41
+ - Popularity and recommendations
42
+
43
+ Example:
44
+ - tld_info("io") → info about .io domains`,
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ tld: {
49
+ type: 'string',
50
+ description: "The TLD to get info about (e.g., 'com', 'io', 'dev').",
51
+ },
52
+ detailed: {
53
+ type: 'boolean',
54
+ description: "Include detailed information. Defaults to false.",
55
+ },
56
+ },
57
+ required: ['tld'],
58
+ },
59
+ };
60
+ /**
61
+ * Static TLD database.
62
+ */
63
+ const TLD_DATABASE = {
64
+ com: {
65
+ tld: 'com',
66
+ description: 'Commercial - the most recognized TLD worldwide',
67
+ typical_use: 'Businesses, commercial websites, general purpose',
68
+ price_range: { min: 8.88, max: 15.99, currency: 'USD' },
69
+ renewal_price_typical: 12.99,
70
+ restrictions: [],
71
+ popularity: 'high',
72
+ category: 'generic',
73
+ },
74
+ io: {
75
+ tld: 'io',
76
+ description: 'British Indian Ocean Territory - popular with tech startups',
77
+ typical_use: 'Tech startups, SaaS products, developer tools',
78
+ price_range: { min: 29.88, max: 59.99, currency: 'USD' },
79
+ renewal_price_typical: 44.99,
80
+ restrictions: [],
81
+ popularity: 'high',
82
+ category: 'country',
83
+ },
84
+ dev: {
85
+ tld: 'dev',
86
+ description: 'Developer - for software developers and their projects',
87
+ typical_use: 'Developer portfolios, tools, documentation sites',
88
+ price_range: { min: 10.18, max: 19.99, currency: 'USD' },
89
+ renewal_price_typical: 14.99,
90
+ restrictions: ['Requires HTTPS (HSTS preloaded)'],
91
+ popularity: 'medium',
92
+ category: 'new',
93
+ },
94
+ app: {
95
+ tld: 'app',
96
+ description: 'Application - for mobile and web applications',
97
+ typical_use: 'Mobile apps, web applications, software products',
98
+ price_range: { min: 11.18, max: 19.99, currency: 'USD' },
99
+ renewal_price_typical: 14.99,
100
+ restrictions: ['Requires HTTPS (HSTS preloaded)'],
101
+ popularity: 'medium',
102
+ category: 'new',
103
+ },
104
+ co: {
105
+ tld: 'co',
106
+ description: 'Colombia / Company - popular alternative to .com',
107
+ typical_use: 'Companies, startups, short URLs',
108
+ price_range: { min: 9.48, max: 29.99, currency: 'USD' },
109
+ renewal_price_typical: 24.99,
110
+ restrictions: [],
111
+ popularity: 'high',
112
+ category: 'country',
113
+ },
114
+ net: {
115
+ tld: 'net',
116
+ description: 'Network - originally for network providers',
117
+ typical_use: 'Technology companies, network services, ISPs',
118
+ price_range: { min: 9.88, max: 14.99, currency: 'USD' },
119
+ renewal_price_typical: 12.99,
120
+ restrictions: [],
121
+ popularity: 'high',
122
+ category: 'generic',
123
+ },
124
+ org: {
125
+ tld: 'org',
126
+ description: 'Organization - for non-profits and communities',
127
+ typical_use: 'Non-profit organizations, open source projects, communities',
128
+ price_range: { min: 9.88, max: 14.99, currency: 'USD' },
129
+ renewal_price_typical: 12.99,
130
+ restrictions: [],
131
+ popularity: 'high',
132
+ category: 'generic',
133
+ },
134
+ ai: {
135
+ tld: 'ai',
136
+ description: 'Anguilla / Artificial Intelligence - trending for AI projects',
137
+ typical_use: 'AI/ML projects, tech startups, research',
138
+ price_range: { min: 49.88, max: 99.99, currency: 'USD' },
139
+ renewal_price_typical: 79.99,
140
+ restrictions: [],
141
+ popularity: 'medium',
142
+ category: 'country',
143
+ },
144
+ xyz: {
145
+ tld: 'xyz',
146
+ description: 'XYZ - for the next generation of internet users',
147
+ typical_use: 'Creative projects, personal sites, unconventional brands',
148
+ price_range: { min: 1.99, max: 12.99, currency: 'USD' },
149
+ renewal_price_typical: 12.99,
150
+ restrictions: [],
151
+ popularity: 'medium',
152
+ category: 'new',
153
+ },
154
+ me: {
155
+ tld: 'me',
156
+ description: 'Montenegro - popular for personal brands',
157
+ typical_use: 'Personal websites, portfolios, URL shorteners',
158
+ price_range: { min: 9.88, max: 19.99, currency: 'USD' },
159
+ renewal_price_typical: 17.99,
160
+ restrictions: [],
161
+ popularity: 'medium',
162
+ category: 'country',
163
+ },
164
+ sh: {
165
+ tld: 'sh',
166
+ description: 'Saint Helena - popular with developers (shell scripts)',
167
+ typical_use: 'Developer tools, CLI applications, tech projects',
168
+ price_range: { min: 29.88, max: 49.99, currency: 'USD' },
169
+ renewal_price_typical: 44.99,
170
+ restrictions: [],
171
+ popularity: 'low',
172
+ category: 'country',
173
+ },
174
+ cc: {
175
+ tld: 'cc',
176
+ description: 'Cocos Islands - often used as "Creative Commons"',
177
+ typical_use: 'Creative projects, alternative to .com',
178
+ price_range: { min: 9.88, max: 24.99, currency: 'USD' },
179
+ renewal_price_typical: 19.99,
180
+ restrictions: [],
181
+ popularity: 'low',
182
+ category: 'country',
183
+ },
184
+ };
185
+ /**
186
+ * Execute the tld_info tool.
187
+ */
188
+ async function executeTldInfo(input) {
189
+ try {
190
+ const { tld, detailed } = exports.tldInfoSchema.parse(input);
191
+ const normalizedTld = (0, validators_js_1.validateTld)(tld);
192
+ // Check cache
193
+ const cacheKey = (0, cache_js_1.tldCacheKey)(normalizedTld);
194
+ const cached = cache_js_1.tldCache.get(cacheKey);
195
+ if (cached) {
196
+ return formatResponse(cached, detailed);
197
+ }
198
+ // Look up in database
199
+ const info = TLD_DATABASE[normalizedTld];
200
+ if (!info) {
201
+ // Return generic info for unknown TLDs
202
+ const genericInfo = {
203
+ tld: normalizedTld,
204
+ description: `${normalizedTld.toUpperCase()} domain extension`,
205
+ typical_use: 'General purpose',
206
+ price_range: { min: 10, max: 50, currency: 'USD' },
207
+ renewal_price_typical: 20,
208
+ restrictions: ['Check registrar for specific restrictions'],
209
+ popularity: 'low',
210
+ category: 'generic',
211
+ };
212
+ return formatResponse(genericInfo, detailed);
213
+ }
214
+ // Cache the result
215
+ cache_js_1.tldCache.set(cacheKey, info);
216
+ return formatResponse(info, detailed);
217
+ }
218
+ catch (error) {
219
+ throw (0, errors_js_1.wrapError)(error);
220
+ }
221
+ }
222
+ /**
223
+ * Format the response with insights.
224
+ */
225
+ function formatResponse(info, detailed) {
226
+ const insights = [];
227
+ let recommendation = '';
228
+ // Generate insights
229
+ if (info.popularity === 'high') {
230
+ insights.push(`✅ .${info.tld} is highly recognized and trusted`);
231
+ }
232
+ else if (info.popularity === 'medium') {
233
+ insights.push(`💡 .${info.tld} is gaining popularity in specific niches`);
234
+ }
235
+ else {
236
+ insights.push(`⚠️ .${info.tld} is less common - may need more brand building`);
237
+ }
238
+ if (info.restrictions.length > 0) {
239
+ insights.push(`⚠️ Special requirements: ${info.restrictions.join(', ')}`);
240
+ }
241
+ if (info.price_range.min <= 10) {
242
+ insights.push(`💰 Budget-friendly starting at $${info.price_range.min}/year`);
243
+ }
244
+ else if (info.price_range.min >= 40) {
245
+ insights.push(`💸 Premium pricing starting at $${info.price_range.min}/year`);
246
+ }
247
+ // Generate recommendation
248
+ switch (info.tld) {
249
+ case 'com':
250
+ recommendation = 'Best for mainstream businesses and maximum recognition';
251
+ break;
252
+ case 'io':
253
+ recommendation = 'Perfect for tech startups and SaaS products';
254
+ break;
255
+ case 'dev':
256
+ recommendation = 'Ideal for developers and tech portfolios (requires HTTPS)';
257
+ break;
258
+ case 'app':
259
+ recommendation = 'Great for mobile/web applications (requires HTTPS)';
260
+ break;
261
+ case 'ai':
262
+ recommendation = 'Trending choice for AI/ML projects, but pricey';
263
+ break;
264
+ default:
265
+ recommendation = `Good choice for ${info.typical_use.toLowerCase()}`;
266
+ }
267
+ return {
268
+ ...info,
269
+ insights,
270
+ recommendation,
271
+ };
272
+ }
273
+ //# sourceMappingURL=tld_info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tld_info.js","sourceRoot":"","sources":["../../src/tools/tld_info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Domain Search MCP - Core Type Definitions
3
+ *
4
+ * These types define the data structures used throughout the MCP server.
5
+ * They're designed for clarity and self-documentation.
6
+ */
7
+ /**
8
+ * Complete information about a domain's availability and pricing.
9
+ * This is the primary output type for domain searches.
10
+ */
11
+ export interface DomainResult {
12
+ /** Full domain name including TLD (e.g., "vibecoding.com") */
13
+ domain: string;
14
+ /** Whether the domain is available for registration */
15
+ available: boolean;
16
+ /** Is this a premium/reserved domain with special pricing? */
17
+ premium: boolean;
18
+ /** First year registration price in the specified currency */
19
+ price_first_year: number | null;
20
+ /** Annual renewal price after first year */
21
+ price_renewal: number | null;
22
+ /** Currency code (e.g., "USD", "EUR") */
23
+ currency: string;
24
+ /** Is WHOIS privacy protection included for free? */
25
+ privacy_included: boolean;
26
+ /** Cost to transfer domain to this registrar */
27
+ transfer_price: number | null;
28
+ /** Registrar name (e.g., "porkbun", "namecheap") */
29
+ registrar: string;
30
+ /** Data source used for this result */
31
+ source: DataSource;
32
+ /** ISO 8601 timestamp of when this was checked */
33
+ checked_at: string;
34
+ /** If premium, explains why (e.g., "Popular keyword") */
35
+ premium_reason?: string;
36
+ /** Any restrictions on this TLD (e.g., "Requires ID verification") */
37
+ tld_restrictions?: string[];
38
+ /** Quality score 0-10 (factors: price, privacy, renewal) */
39
+ score?: number;
40
+ /** Domain registration date (ISO 8601) - for taken domains */
41
+ registered_at?: string;
42
+ /** Domain expiration date (ISO 8601) - for taken domains */
43
+ expires_at?: string;
44
+ /** Days until expiration (calculated) */
45
+ days_until_expiration?: number;
46
+ }
47
+ /**
48
+ * Where the domain data came from.
49
+ * Order matters: earlier sources are preferred.
50
+ */
51
+ export type DataSource = 'porkbun_api' | 'namecheap_api' | 'godaddy_api' | 'rdap' | 'whois' | 'cache';
52
+ /**
53
+ * Complete response from a domain search operation.
54
+ * Includes results plus human-readable insights.
55
+ */
56
+ export interface SearchResponse {
57
+ /** Array of domain results */
58
+ results: DomainResult[];
59
+ /** Human-readable insights about the results */
60
+ insights: string[];
61
+ /** Suggested next actions */
62
+ next_steps: string[];
63
+ /** Was this served from cache? */
64
+ from_cache: boolean;
65
+ /** Total time taken in milliseconds */
66
+ duration_ms: number;
67
+ }
68
+ /**
69
+ * Information about a Top Level Domain (TLD).
70
+ */
71
+ export interface TLDInfo {
72
+ /** The TLD extension without dot (e.g., "com", "io") */
73
+ tld: string;
74
+ /** Human-readable description */
75
+ description: string;
76
+ /** Typical use case */
77
+ typical_use: string;
78
+ /** Price range for first year registration */
79
+ price_range: {
80
+ min: number;
81
+ max: number;
82
+ currency: string;
83
+ };
84
+ /** Typical renewal price */
85
+ renewal_price_typical: number;
86
+ /** Are there special restrictions? */
87
+ restrictions: string[];
88
+ /** Is this TLD popular/recommended? */
89
+ popularity: 'high' | 'medium' | 'low';
90
+ /** Category of the TLD */
91
+ category: 'generic' | 'country' | 'sponsored' | 'new';
92
+ }
93
+ /**
94
+ * Platforms supported for social handle checking.
95
+ */
96
+ export type SocialPlatform = 'github' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok' | 'reddit' | 'youtube' | 'npm' | 'pypi' | 'producthunt';
97
+ /**
98
+ * Result of checking a social handle.
99
+ */
100
+ export interface SocialHandleResult {
101
+ platform: SocialPlatform;
102
+ handle: string;
103
+ available: boolean;
104
+ url: string;
105
+ checked_at: string;
106
+ /** Some platforms can't be reliably checked */
107
+ confidence: 'high' | 'medium' | 'low';
108
+ }
109
+ /**
110
+ * Comparison result across multiple registrars.
111
+ */
112
+ export interface RegistrarComparison {
113
+ domain: string;
114
+ comparisons: DomainResult[];
115
+ best_first_year: {
116
+ registrar: string;
117
+ price: number;
118
+ currency: string;
119
+ } | null;
120
+ best_renewal: {
121
+ registrar: string;
122
+ price: number;
123
+ currency: string;
124
+ } | null;
125
+ recommendation: string;
126
+ checked_at: string;
127
+ }
128
+ /**
129
+ * Server configuration loaded from environment variables.
130
+ */
131
+ export interface Config {
132
+ porkbun: {
133
+ apiKey?: string;
134
+ apiSecret?: string;
135
+ enabled: boolean;
136
+ };
137
+ namecheap: {
138
+ apiKey?: string;
139
+ apiUser?: string;
140
+ clientIp?: string;
141
+ enabled: boolean;
142
+ };
143
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
144
+ cache: {
145
+ availabilityTtl: number;
146
+ pricingTtl: number;
147
+ };
148
+ rateLimitPerMinute: number;
149
+ allowedTlds: string[];
150
+ denyTlds: string[];
151
+ dryRun: boolean;
152
+ }
153
+ /**
154
+ * Structured error with user-friendly message.
155
+ */
156
+ export interface DomainError {
157
+ code: string;
158
+ message: string;
159
+ userMessage: string;
160
+ details?: Record<string, unknown>;
161
+ retryable: boolean;
162
+ suggestedAction?: string;
163
+ }
164
+ export interface SearchDomainInput {
165
+ domain_name: string;
166
+ tlds?: string[];
167
+ registrars?: string[];
168
+ }
169
+ export interface BulkSearchInput {
170
+ domains: string[];
171
+ tld: string;
172
+ registrar?: string;
173
+ }
174
+ export interface CompareRegistrarsInput {
175
+ domain: string;
176
+ tld: string;
177
+ registrars?: string[];
178
+ }
179
+ export interface SuggestDomainsInput {
180
+ base_name: string;
181
+ tld?: string;
182
+ variants?: ('hyphen' | 'numbers' | 'abbreviations' | 'synonyms')[];
183
+ max_suggestions?: number;
184
+ }
185
+ export interface TldInfoInput {
186
+ tld: string;
187
+ detailed?: boolean;
188
+ }
189
+ export interface CheckSocialsInput {
190
+ name: string;
191
+ platforms?: SocialPlatform[];
192
+ }
193
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Domain Search MCP - Core Type Definitions
4
+ *
5
+ * These types define the data structures used throughout the MCP server.
6
+ * They're designed for clarity and self-documentation.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * TTL-based In-Memory Cache.
3
+ *
4
+ * Simple but effective caching for domain availability and pricing.
5
+ * Reduces API calls and improves response times.
6
+ */
7
+ /**
8
+ * Generic TTL cache with automatic expiration and size limits.
9
+ *
10
+ * SECURITY: Implements max size to prevent memory DoS attacks.
11
+ * When at capacity, evicts least-recently-used (LRU) entries.
12
+ */
13
+ export declare class TtlCache<T> {
14
+ private cache;
15
+ private readonly defaultTtlMs;
16
+ private readonly maxSize;
17
+ private cleanupInterval;
18
+ constructor(defaultTtlSeconds?: number, maxSize?: number);
19
+ /**
20
+ * Get a value from cache if it exists and hasn't expired.
21
+ * Updates lastAccessedAt for LRU tracking.
22
+ */
23
+ get(key: string): T | undefined;
24
+ /**
25
+ * Set a value in cache with optional custom TTL.
26
+ * Implements LRU eviction when cache is at capacity.
27
+ */
28
+ set(key: string, value: T, ttlMs?: number): void;
29
+ /**
30
+ * Evict least recently used entry.
31
+ * Called when cache is at capacity.
32
+ */
33
+ private evictLRU;
34
+ /**
35
+ * Check if a key exists and is not expired.
36
+ */
37
+ has(key: string): boolean;
38
+ /**
39
+ * Delete a specific key.
40
+ */
41
+ delete(key: string): boolean;
42
+ /**
43
+ * Clear all cache entries.
44
+ */
45
+ clear(): void;
46
+ /**
47
+ * Get the number of entries in cache.
48
+ */
49
+ get size(): number;
50
+ /**
51
+ * Remove expired entries.
52
+ */
53
+ private cleanup;
54
+ /**
55
+ * Stop the cleanup interval (for testing/shutdown).
56
+ */
57
+ destroy(): void;
58
+ }
59
+ import type { DomainResult, TLDInfo } from '../types.js';
60
+ /**
61
+ * Generate a cache key for domain availability.
62
+ */
63
+ export declare function domainCacheKey(domain: string, source: string): string;
64
+ /**
65
+ * Generate a cache key for TLD info.
66
+ */
67
+ export declare function tldCacheKey(tld: string): string;
68
+ /**
69
+ * Global cache instances.
70
+ */
71
+ export declare const domainCache: TtlCache<DomainResult>;
72
+ export declare const pricingCache: TtlCache<DomainResult[]>;
73
+ export declare const tldCache: TtlCache<TLDInfo>;
74
+ /**
75
+ * Get or compute a domain result.
76
+ */
77
+ export declare function getOrCompute<T>(cache: TtlCache<T>, key: string, compute: () => Promise<T>, ttlMs?: number): Promise<{
78
+ value: T;
79
+ fromCache: boolean;
80
+ }>;
81
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkBH;;;;;GAKG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,eAAe,CAA+C;gBAE1D,iBAAiB,GAAE,MAAY,EAAE,OAAO,GAAE,MAA+B;IAQrF;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAsB/B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkChD;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAiBhB;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,OAAO,CAAC,OAAO;IAgBf;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB;AAMD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,wBAEvB,CAAC;AAEF,eAAO,MAAM,YAAY,0BAAwD,CAAC;AAElF,eAAO,MAAM,QAAQ,mBAA+B,CAAC;AAErD;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAS3C"}