ITQAN LAB

MIT · verified 2026-08-11

catalog / DevOps / skill

namecheap-ops

Connect one or more Namecheap accounts once, then run the domains from the agent. List them, see what expires and what will not renew by itself, check the balance, look up nameservers, check whether a name is free, see registration and renewal prices, change nameservers, and edit DNS records for domains that use Namecheap's own DNS — without opening the dashboard. Setup adopts a key the machine already has, and handles Namecheap's address whitelist, including sending requests through an SSH server with a fixed address when the machine's own address keeps changing. Several accounts are kept apart by name. Works on macOS, Windows and Linux.

version
2.1.0
updated
2026-09-21
works in
every conformant agent
needs
node
cost
free · no API key
license
MIT

Say this you do not type commands, you ask

  • “connect my Namecheap”
  • “list my domains”
  • “when do my domains expire”
  • “is this domain available”
  • “point this domain at Cloudflare”
  • “change the nameservers”
  • “add a DNS record on Namecheap”
  • “how much does a .com cost to renew”
  • “namecheap”

Once it is installed, that is the whole interface. Your agent picks the skill up on its own and runs whatever it needs to. The commands further down are there for anyone who would rather drive it themselves.

Install pick your agent

Requirements what to install, and why

node scripts/setup.mjs add <a-name-for-it>

It prints the steps, including which address to put on the whitelist. Fill in the two lines it names in the credential file, then:

node scripts/setup.mjs verify <a-name-for-it>

Examples copy and go

Changelog what changed, newest first

2.1.0

Added

  • The tool has its own icon, in a dark and a light version. Codex shows it on the plugin card and in the skill list, and the toolkit site shows it on the tool's page and in share previews.

2.0.0breaking

Breaking

  • Installed as a Claude Code plugin, the slash command is now /namecheap-ops:namecheap-ops, with the plugin name in front. This has been true since 1.2.0, and this release marks it as breaking. Use the new name, or ask in words, which works as before. A copy in a skills folder keeps the plain name /namecheap-ops.

Added

  • Codex now shows a display name, a short line and a starter prompt for the skill in its skill list. They come from a generated agents/openai.yaml inside the skill folder. Other agents ignore that file.

Changed

  • The description now leads with what the skill does, then its trigger phrases, then the detail. Codex shortens long skill lists from the end, so the phrases that route a request now survive far longer. With 40 skills installed, 95% of the phrases stay visible instead of 8%.

1.2.0

Added

  • Can be installed as a Codex plugin, from the same source as everything else.

Changed

  • The changelog address now points to the site, so it keeps working if the repository layout changes.

1.1.0

Added

  • This changelog, so you can see what changed in each version.
  • An Updates section in SKILL.md. It tells the agent how to check for a newer version, and to report what changed before it updates.

1.0.0

Added

  • Connect one or more Namecheap accounts. Each one is kept apart by name.
  • List domains, see what expires and what will not renew by itself, and check the balance.
  • Look up nameservers and change them.
  • Check whether a name is free, and see registration and renewal prices.
  • Edit DNS records for domains that use Namecheap's own DNS.
  • Handle Namecheap's address whitelist, including through an SSH server with a fixed address.

An agent that has this installed reads CHANGELOG.md in the skill folder. The same history is at changelog.json, and every tool's releases are at /updates.json.

Just ask

You do not need to run anything. Once the skill is installed, say what you want in your own words and the agent does it:

"connect my Namecheap account" "which of my domains expire soon, and will they renew on their own?" "is mybrand.com free? what would it cost?" "point example.com at Cloudflare" "where does this domain's DNS actually live?" "add app.example.com pointing at my server"

The agent runs the commands and tells you in plain words what happened. It shows you exactly what will change first, asks before changing it, and always says which account it is working in.

There are two things it cannot do for you, and both are on Namecheap's side: switch API access on, and add an address to Namecheap's whitelist. The agent walks you through both. You also paste the API key into a file yourself, so it never passes through a chat window.

Namecheap does not have tokens

Other providers give you a token. Namecheap gives you an API key, and then refuses every request that does not come from an address on a list you keep in its dashboard. Nothing in the API can edit that list.

That is fine on a fixed connection. On home or mobile internet your address changes, and the list needs editing each time. So the skill has a second route: send the requests through a server you can ssh into. Namecheap then sees the server's address, which never changes, and you edit the list once.

node scripts/setup.mjs add mycompany --relay "-i ~/.ssh/id_ed25519 user@203.0.113.5"

Already have the key somewhere?

If the key is in a .env file for some script, or in a tool server's configuration, adopt it instead of making another:

node scripts/setup.mjs import                       # tool configurations; changes nothing
node scripts/setup.mjs import --file ./.env         # a file you name; changes nothing
node scripts/setup.mjs import --file ./.env --yes   # adopts it

If the old setup was whitelisted for an address other than this machine's, import looks for an SSH server already configured for that address and offers it as the relay. The originals stay where they are and keep working.

Several accounts

Namecheap will not tell you which account a key belongs to, so each one gets a name here, and the name is printed on everything that changes something.

node scripts/setup.mjs add clientname
node scripts/setup.mjs status                       # every account, and whether Namecheap accepts it from here
node scripts/setup.mjs use clientname               # make one the default
node scripts/nc.mjs --account clientname domains    # or point a single command elsewhere

With several accounts and no default, commands refuse to run rather than guess.

Requirements

  • Node 18 or newer. sh scripts/setup-deps.sh checks and offers to install it (Windows: scripts\setup-deps.ps1).
  • A Namecheap account with API access switched on, and the calling address on its whitelist.
  • For a relay: ssh, and a server you can reach without a password prompt.

If you prefer the command line

node scripts/nc.mjs whoami                       # account, route Namecheap sees, balance
node scripts/nc.mjs domains --expiring 90        # what expires soon, and what will not renew
node scripts/nc.mjs domain example.com           # one in full
node scripts/nc.mjs check mybrand.com            # free or taken
node scripts/nc.mjs price com io                 # registration and renewal, per year
node scripts/nc.mjs nameservers example.com
node scripts/nc.mjs nameservers-set example.com ns1.host.net ns2.host.net --yes
node scripts/nc.mjs dns example.com              # records, when Namecheap holds them
node scripts/nc.mjs dns-add app.example.com A 203.0.113.9 --yes
node scripts/nc.mjs dns-remove app.example.com --type A --yes

Things worth knowing

  • Most domains have no DNS at Namecheap. If a domain uses Cloudflare or a hosting plan, its records live there, and Namecheap holds none. The DNS commands say so instead of failing mysteriously.
  • Changing records replaces the whole list. That is how Namecheap's API works: it has no "add a record". So dns-add and dns-remove read the list, show you every line that will change, send it all back, and read it again to check.
  • Changing nameservers can take a site and its email offline if the new ones do not already hold the records. The command warns before it does it.
  • A domain with auto-renew off lapses. domains flags these.

Anything not wrapped

node scripts/nc.mjs call namecheap.domains.getContacts DomainName=example.com

call adds the credentials and address itself and prints the answer. Anything that changes something or spends money waits for --yes. Sending the DNS write command by hand is refused, because it deletes every record it is not given.

What it cannot do

It does not register, renew or transfer domains, because those spend money. It cannot edit Namecheap's whitelist. It does not cover Namecheap hosting, email or SSL products.

What has been checked

Run against a live account through a relay: connecting, listing, domain details, nameservers, availability, prices, balance, and the messages for a refused address and a wrong key. The record-editing logic was tested offline, and has not yet been run against a real domain, because the account it was built on keeps all its DNS elsewhere. The nameserver changes have not been run either. Both refuse to act without --yes and the DNS one reads its result back.

Playbooks

references/playbooks.md has the multi-step jobs: what needs attention, moving a domain to Cloudflare safely, pointing a name at a server, and working out why a request was refused.

Source on GitHub ↗

Itqan Lab

Built at Itqan Lab, a design and technology studio.

إتقان — itqan, the Arabic word for mastery: doing a thing precisely, and completely.

Open source under MIT · agent paths re-verified 2026-08-11 · this site is generated from the repository on every push.