mcp-namecheap
Version:
MCP server for interacting with Namecheap API
218 lines • 7.75 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NamecheapClient = void 0;
const axios_1 = __importDefault(require("axios"));
class NamecheapClient {
axios;
apiUser;
apiKey;
clientIp;
constructor(apiKey, apiUser, clientIp, useSandbox = false) {
this.apiKey = apiKey;
this.apiUser = apiUser;
this.clientIp = clientIp;
const baseURL = useSandbox
? 'https://api.sandbox.namecheap.com/xml.response'
: 'https://api.namecheap.com/xml.response';
this.axios = axios_1.default.create({
baseURL,
params: {
ApiUser: this.apiUser,
ApiKey: this.apiKey,
UserName: this.apiUser,
ClientIp: this.clientIp,
},
});
}
parseXmlToJson(xml) {
// Simple XML to JSON conversion for Namecheap responses
// In production, you might want to use a proper XML parser
const jsonStr = xml
.replace(/(<\/)([^>]+)(>)/g, '"}$3')
.replace(/(<)([^>]+)(>)([^<]+)?/g, '{"$2":"$4"')
.replace(/"\s+"/g, '","')
.replace(/(<)([^>]+)(>)/g, '{"$2":{')
.replace(/}/g, '},')
.replace(/,}/g, '}')
.replace(/,$/g, '');
try {
return JSON.parse(jsonStr);
}
catch {
// Fallback to returning the XML if parsing fails
return { raw: xml };
}
}
async domainsList(options = {}) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.getList',
ListType: options.listType || 'ALL',
SearchTerm: options.searchTerm || '',
Page: options.page || 1,
PageSize: options.pageSize || 20,
},
});
return this.parseXmlToJson(response.data);
}
async domainsCheck(params) {
const domainList = params.domainList.join(',');
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.check',
DomainList: domainList,
},
});
return this.parseXmlToJson(response.data);
}
async domainsGetInfo(params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.getInfo',
DomainName: params.domainName,
HostName: params.hostName,
},
});
return this.parseXmlToJson(response.data);
}
async domainsGetContacts(params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.getContacts',
DomainName: params.domainName,
},
});
return this.parseXmlToJson(response.data);
}
async domainsCreate(params) {
const apiParams = {
Command: 'namecheap.domains.create',
DomainName: params.domainName,
Years: params.years,
};
// Add all registrant information
Object.keys(params).forEach(key => {
if (key !== 'domainName' && key !== 'years' && params[key] !== undefined) {
// Convert camelCase to PascalCase for API
const apiKey = key.charAt(0).toUpperCase() + key.slice(1);
apiParams[apiKey] = params[key];
}
});
const response = await this.axios.get('', { params: apiParams });
return this.parseXmlToJson(response.data);
}
async domainsGetTldList(_params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.getTldList',
},
});
return this.parseXmlToJson(response.data);
}
async domainsSetContacts(params) {
const apiParams = {
Command: 'namecheap.domains.setContacts',
DomainName: params.domainName,
};
// Add all contact information
Object.keys(params).forEach(key => {
if (key !== 'domainName' && params[key] !== undefined) {
// Convert camelCase to PascalCase for API
const apiKey = key.charAt(0).toUpperCase() + key.slice(1);
apiParams[apiKey] = params[key];
}
});
const response = await this.axios.get('', { params: apiParams });
return this.parseXmlToJson(response.data);
}
async domainsReactivate(params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.reactivate',
DomainName: params.domainName,
IsPremiumDomain: params.isPremiumDomain,
},
});
return this.parseXmlToJson(response.data);
}
async domainsRenew(params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.renew',
DomainName: params.domainName,
Years: params.years,
IsPremiumDomain: params.isPremiumDomain,
},
});
return this.parseXmlToJson(response.data);
}
async domainsGetRegistrarLock(params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.getRegistrarLock',
DomainName: params.domainName,
},
});
return this.parseXmlToJson(response.data);
}
async domainsSetRegistrarLock(params) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.setRegistrarLock',
DomainName: params.domainName,
LockAction: params.lockAction,
},
});
return this.parseXmlToJson(response.data);
}
async dnsGetList(sld, tld) {
const response = await this.axios.get('', {
params: {
Command: 'namecheap.domains.dns.getList',
SLD: sld,
TLD: tld,
},
});
return this.parseXmlToJson(response.data);
}
async dnsSetCustom(sld, tld, nameservers) {
const params = {
Command: 'namecheap.domains.dns.setCustom',
SLD: sld,
TLD: tld,
};
// Add nameservers
nameservers.forEach((ns, index) => {
params[`NameServers${index + 1}`] = ns;
});
const response = await this.axios.get('', { params });
return this.parseXmlToJson(response.data);
}
async dnsSetHosts(sld, tld, hosts) {
const params = {
Command: 'namecheap.domains.dns.setHosts',
SLD: sld,
TLD: tld,
};
// Add host records
hosts.forEach((host, index) => {
const idx = index + 1;
params[`HostName${idx}`] = host.hostname;
params[`RecordType${idx}`] = host.recordType;
params[`Address${idx}`] = host.address;
if (host.mxPriority !== undefined) {
params[`MXPref${idx}`] = host.mxPriority;
}
if (host.ttl !== undefined) {
params[`TTL${idx}`] = host.ttl;
}
});
const response = await this.axios.get('', { params });
return this.parseXmlToJson(response.data);
}
}
exports.NamecheapClient = NamecheapClient;
//# sourceMappingURL=namecheap-client.js.map