@ironclads/namecheap-mcp
Version:
MCP server for Namecheap API integration - domain management, DNS, and domain suggestions
148 lines • 4.98 kB
JavaScript
import { z } from 'zod';
// Namecheap API Configuration
export const NamecheapConfigSchema = z.object({
apiUser: z.string(),
apiKey: z.string(),
username: z.string(),
clientIp: z.string().optional(),
sandbox: z.boolean().default(false),
});
// Domain check response
export const DomainCheckResultSchema = z.object({
domain: z.string(),
available: z.boolean(),
premium: z.boolean().optional(),
price: z.string().optional(),
});
// Domain info response
export const DomainInfoSchema = z.object({
domain: z.string(),
owner: z.string(),
registrar: z.string(),
created: z.string(),
expires: z.string(),
nameservers: z.array(z.string()),
});
// Domain suggestion types
export const DomainSuggestionSchema = z.object({
domain: z.string(),
available: z.boolean(),
premium: z.boolean().optional(),
price: z.string().optional(),
suggestion_type: z.enum(['exact', 'prefix', 'suffix', 'alternate', 'related']),
score: z.number().min(0).max(100).optional(),
});
export const DomainSuggestionOptionsSchema = z.object({
keyword: z.string(),
tlds: z.array(z.string()).default(['com', 'net', 'org', 'io', 'co']),
maxSuggestions: z.number().min(1).max(50).default(10),
includeHyphens: z.boolean().default(false),
includeNumbers: z.boolean().default(false),
minLength: z.number().min(1).max(20).default(3),
maxLength: z.number().min(5).max(63).default(15),
});
// Domain list response
export const DomainListItemSchema = z.object({
domain: z.string(),
id: z.string(),
user: z.string(),
created: z.string(),
expires: z.string(),
isExpired: z.boolean(),
isLocked: z.boolean(),
autoRenew: z.boolean(),
whoisGuard: z.string(),
});
export const DomainListResponseSchema = z.object({
domains: z.array(DomainListItemSchema),
paging: z.object({
totalItems: z.number(),
currentPage: z.number(),
pageSize: z.number(),
}),
});
export const DomainListOptionsSchema = z.object({
listType: z.string().optional().default('ALL'),
page: z.number().min(1).optional().default(1),
pageSize: z.number().min(10).max(100).optional().default(20),
sortBy: z.enum(['NAME', 'NAME_DESC', 'EXPIREDATE', 'EXPIREDATE_DESC', 'CREATEDATE', 'CREATEDATE_DESC']).optional(),
searchTerm: z.string().optional(),
});
// API Response wrapper
export const NamecheapResponseSchema = z.object({
Status: z.string(),
Errors: z.array(z.string()).optional(),
CommandResponse: z.any(),
});
// Domain contacts types
export const DomainContactSchema = z.object({
OrganizationName: z.string().optional(),
FirstName: z.string(),
LastName: z.string(),
Address1: z.string(),
Address2: z.string().optional(),
City: z.string(),
StateProvince: z.string(),
PostalCode: z.string(),
Country: z.string(),
Phone: z.string(),
EmailAddress: z.string(),
});
export const DomainContactsSchema = z.object({
registrant: DomainContactSchema,
tech: DomainContactSchema,
admin: DomainContactSchema,
auxBilling: DomainContactSchema,
});
// TLD List types
export const TldInfoSchema = z.object({
name: z.string(),
nonRealTime: z.boolean().optional(),
minRegisterYears: z.number().optional(),
maxRegisterYears: z.number().optional(),
minRenewYears: z.number().optional(),
maxRenewYears: z.number().optional(),
minTransferYears: z.number().optional(),
maxTransferYears: z.number().optional(),
isApiRegisterable: z.boolean().optional(),
isApiRenewable: z.boolean().optional(),
isApiTransferrable: z.boolean().optional(),
isEppRequired: z.boolean().optional(),
isDisableModContact: z.boolean().optional(),
isDisableWGAllot: z.boolean().optional(),
isIncludeInExtendedSearchOnly: z.boolean().optional(),
categories: z.array(z.string()).optional(),
});
// Domain lock status types
export const DomainLockStatusSchema = z.object({
domain: z.string(),
registrarLock: z.boolean(),
});
// Users API types
export const UserBalancesSchema = z.object({
availableBalance: z.number(),
accountBalance: z.number(),
earnedAmount: z.number(),
withdrawableAmount: z.number(),
fundsRequiredForAutoRenew: z.number(),
});
export const ProductPricingSchema = z.object({
productType: z.string(),
productCategory: z.string(),
product: z.string(),
duration: z.number(),
durationType: z.string(),
price: z.number(),
regularPrice: z.number(),
yourPrice: z.number(),
promotionPrice: z.number().optional(),
currency: z.string(),
});
export const PricingOptionsSchema = z.object({
productType: z.enum(['DOMAIN', 'SSL', 'HOSTING', 'WHOISGUARD']),
productCategory: z.string().optional(),
promotionCode: z.string().optional(),
actionType: z.enum(['REGISTER', 'RENEW', 'REACTIVATE', 'TRANSFER']).optional(),
productName: z.string().optional(),
});
//# sourceMappingURL=types.js.map