Every domain you own,
in your terminal.
lemon is the Lemon Domains command line. List and update domains across 95 registrars, watch any domain for changes, and check reports and availability from your shell, scripts, CI and AI agents.
Node 18 or later. No dependencies. Checks work without an account.
Installnpm install -g lemon-domains$ npm install -g lemon-domains
$ lemon login
Create an API token at https://lemon.domains/api-access, then paste it here:
Signed in as you@example.com (read and write). Token saved to ~/.config/lemon-domains/config.json
$ lemon domains expiring --within-days 60
DOMAIN EXPIRES STATUS REGISTRAR PROJECT
getzestly.com 2026-11-03 Expiring soon Porkbun Zestly
lemonade-labs.io 2026-11-19 Expiring soon Namecheap Side projects
zestly.app 2026-12-08 Active Cloudflare Zestly
$ lemon check zestly getzestly.dev --tlds com,io,ai
DOMAIN STATUS REGISTRAR EXPIRES
zestly.com taken GoDaddy 2027-05-14
zestly.io available
zestly.ai available
getzestly.dev available
4 checked: 3 available, 1 taken, 0 dropping, 0 unknownExample output with made-up domains.
One account, three ways in
The CLI, the REST API and the MCP server run the same operations with the same rules, and one API token works for all three. Use whichever fits the job.
| Use | For | Start with |
|---|---|---|
| CLI | Your terminal, scripts and CI npm install -g lemon-domains | npm install -g lemon-domains |
| REST API | Your own apps and spreadsheets https://lemon.domains/api/v1 | https://lemon.domains/api/v1 |
| MCP server | Claude Code, Cursor and any MCP client https://mcp.lemon.domains/mcp | https://mcp.lemon.domains/mcp |
Made for scripts, CI and agents
Lists print as tables and records as lists in the terminal. Every command also speaks the formats your tools read.
- --json
- The API's own JSON, for scripts and jq.
- --md
- Markdown tables and lists, for notes, tickets and AI agents.
- --csv
- Any list as CSV, for spreadsheets.
- --all
- Follows every page of a long list.
- lemon commands --json
- Every command, option and type in one call, so an agent can learn the whole CLI.
- LEMON_TOKEN
- Sign in from CI or a container without saving anything.
No account needed for checks
Any domainnpx lemon-domains report example.com --md
npx lemon-domains check lemonade --tlds com,io,ai
npx lemon-domains transfer example.comExpiry summary in every CI run
GitHub Actions- run: npx lemon-domains domains expiring --within-days 30 --md >> "$GITHUB_STEP_SUMMARY"
env:
LEMON_TOKEN: ${{ secrets.LEMON_TOKEN }}Tab completion for bash, zsh and fish: lemon completion zsh.
Every command
74 commands, one for each REST API endpoint and MCP tool, generated from the API itself so the three never drift apart. Run lemon <command> --help for its options.
Account
| Command | REST API | MCP tool |
|---|---|---|
lemon whoami Your account and the token in use GET /api/v1/me | GET /api/v1/me |
Workspaces
| Command | REST API | MCP tool |
|---|---|---|
lemon workspaces list Workspaces you belong to, with your role GET /api/v1/workspaces · list_workspaces | GET /api/v1/workspaces | list_workspaces |
Domains
| Command | REST API | MCP tool |
|---|---|---|
lemon domains list List domains, with filters and paging GET /api/v1/domains · list_domains | GET /api/v1/domains | list_domains |
lemon domains add <domain> Add a domain POST /api/v1/domains · add_domain | POST /api/v1/domains | add_domain |
lemon domains bulk-add Add up to 200 domains at once POST /api/v1/domains/bulk · bulk_add_domains | POST /api/v1/domains/bulk | bulk_add_domains |
lemon domains lookup <domains...> Registrar and expiry from the public registry GET /api/v1/domains/lookup · lookup_domains | GET /api/v1/domains/lookup | lookup_domains |
lemon domains quick-add Add domains by registrar name POST /api/v1/domains/quick-add · quick_add_domains | POST /api/v1/domains/quick-add | quick_add_domains |
lemon domains expiring Domains expiring soon, soonest first GET /api/v1/domains/expiring · domains_expiring_soon | GET /api/v1/domains/expiring | domains_expiring_soon |
lemon domains get <domain> One domain, by name or id GET /api/v1/domains/{domain} · get_domain | GET /api/v1/domains/{domain} | get_domain |
lemon domains update <id> Change a domain's fields PATCH /api/v1/domains/{id} · update_domain | PATCH /api/v1/domains/{id} | update_domain |
lemon domains delete <id> Delete a domain DELETE /api/v1/domains/{id} · delete_domain | DELETE /api/v1/domains/{id} | delete_domain |
Projects
| Command | REST API | MCP tool |
|---|---|---|
lemon projects list List projects GET /api/v1/projects · list_projects | GET /api/v1/projects | list_projects |
lemon projects add <name> Create a project POST /api/v1/projects · add_project | POST /api/v1/projects | add_project |
lemon projects update <id> Rename a project or change its description PATCH /api/v1/projects/{id} · update_project | PATCH /api/v1/projects/{id} | update_project |
lemon projects delete <id> Delete a project and its domains DELETE /api/v1/projects/{id} · delete_project | DELETE /api/v1/projects/{id} | delete_project |
Registrars
| Command | REST API | MCP tool |
|---|---|---|
lemon registrars list List registrars GET /api/v1/registrars · list_registrars | GET /api/v1/registrars | list_registrars |
lemon registrars add <name> Add a registrar POST /api/v1/registrars · add_registrar | POST /api/v1/registrars | add_registrar |
lemon registrars update <id> Change a registrar's name or URL PATCH /api/v1/registrars/{id} · update_registrar | PATCH /api/v1/registrars/{id} | update_registrar |
lemon registrars delete <id> Delete a registrar, its accounts and domains DELETE /api/v1/registrars/{id} · delete_registrar | DELETE /api/v1/registrars/{id} | delete_registrar |
Registrar accounts
| Command | REST API | MCP tool |
|---|---|---|
lemon accounts list List registrar accounts GET /api/v1/registrar-accounts · list_registrar_accounts | GET /api/v1/registrar-accounts | list_registrar_accounts |
lemon accounts add Add a registrar account POST /api/v1/registrar-accounts · add_registrar_account | POST /api/v1/registrar-accounts | add_registrar_account |
lemon accounts update <id> Change a registrar account PATCH /api/v1/registrar-accounts/{id} · update_registrar_account | PATCH /api/v1/registrar-accounts/{id} | update_registrar_account |
lemon accounts delete <id> Delete a registrar account and its domains DELETE /api/v1/registrar-accounts/{id} · delete_registrar_account | DELETE /api/v1/registrar-accounts/{id} | delete_registrar_account |
Sync
| Command | REST API | MCP tool |
|---|---|---|
lemon sync logs Recent registrar sync results GET /api/v1/sync/logs · recent_sync_logs | GET /api/v1/sync/logs | recent_sync_logs |
Monitoring
| Command | REST API | MCP tool |
|---|---|---|
lemon monitor list Every monitored domain, yours and watched GET /api/v1/monitoring · list_monitored | GET /api/v1/monitoring | list_monitored |
lemon monitor watch <domains...> Watch domains you don't own POST /api/v1/monitoring · monitor_domains | POST /api/v1/monitoring | monitor_domains |
lemon monitor unwatch <domain> Stop watching a domain DELETE /api/v1/monitoring · stop_monitoring | DELETE /api/v1/monitoring | stop_monitoring |
lemon monitor changes [domain] What changed on monitored domains GET /api/v1/monitoring/changes · list_changes | GET /api/v1/monitoring/changes | list_changes |
DNS
| Command | REST API | MCP tool |
|---|---|---|
lemon dns list <domain> A domain's DNS records GET /api/v1/domains/{domain}/dns · list_dns_records | GET /api/v1/domains/{domain}/dns | list_dns_records |
lemon dns plan <domain> Plan DNS changes without making them POST /api/v1/domains/{domain}/dns/changes · plan_dns_change | POST /api/v1/domains/{domain}/dns/changes | plan_dns_change |
lemon dns apply <changeId> Make a planned DNS change POST /api/v1/dns/changes/{changeId}/apply · apply_dns_change | POST /api/v1/dns/changes/{changeId}/apply | apply_dns_change |
lemon dns undo <changeId> Undo an applied DNS change POST /api/v1/dns/changes/{changeId}/undo · undo_dns_change | POST /api/v1/dns/changes/{changeId}/undo | undo_dns_change |
Registrar settings
| Command | REST API | MCP tool |
|---|---|---|
lemon settings show <domain> A domain's auto-renew, transfer lock and nameservers GET /api/v1/domains/{domain}/settings · get_domain_settings | GET /api/v1/domains/{domain}/settings | get_domain_settings |
lemon settings plan <domain> Plan a settings change without making it POST /api/v1/domains/{domain}/settings/changes · plan_domain_settings_change | POST /api/v1/domains/{domain}/settings/changes | plan_domain_settings_change |
lemon settings apply <changeId> Make a planned settings change POST /api/v1/settings/changes/{changeId}/apply · apply_domain_settings_change | POST /api/v1/settings/changes/{changeId}/apply | apply_domain_settings_change |
lemon settings undo <changeId> Undo an applied settings change POST /api/v1/settings/changes/{changeId}/undo · undo_domain_settings_change | POST /api/v1/settings/changes/{changeId}/undo | undo_domain_settings_change |
lemon settings stop <changeId> Stop a settings change that is still waiting POST /api/v1/settings/changes/{changeId}/stop · stop_domain_settings_change | POST /api/v1/settings/changes/{changeId}/stop | stop_domain_settings_change |
Buying domains
| Command | REST API | MCP tool |
|---|---|---|
lemon buy status Your spend limit for buying domains and recent purchases GET /api/v1/purchases · get_domain_buying | GET /api/v1/purchases | get_domain_buying |
lemon buy plan <domain> Quote a domain for 1 year without buying it POST /api/v1/purchases · plan_domain_purchase | POST /api/v1/purchases | plan_domain_purchase |
lemon buy confirm <purchaseId> Buy a quoted domain POST /api/v1/purchases/{purchaseId}/buy · buy_domain | POST /api/v1/purchases/{purchaseId}/buy | buy_domain |
Webhooks
| Command | REST API | MCP tool |
|---|---|---|
lemon webhooks list Your webhooks and their status GET /api/v1/webhooks · list_webhooks | GET /api/v1/webhooks | list_webhooks |
lemon webhooks add <url> Add a webhook; prints its secret once POST /api/v1/webhooks · add_webhook | POST /api/v1/webhooks | add_webhook |
lemon webhooks update <id> Change a webhook, or pause and resume it PATCH /api/v1/webhooks/{id} · update_webhook | PATCH /api/v1/webhooks/{id} | update_webhook |
lemon webhooks remove <id> Delete a webhook DELETE /api/v1/webhooks/{id} · delete_webhook | DELETE /api/v1/webhooks/{id} | delete_webhook |
lemon webhooks test <id> Send a test event now POST /api/v1/webhooks/{id}/test · test_webhook | POST /api/v1/webhooks/{id}/test | test_webhook |
lemon webhooks rotate <id> New signing secret; the old one works 24 hours POST /api/v1/webhooks/{id}/rotate · rotate_webhook_secret | POST /api/v1/webhooks/{id}/rotate | rotate_webhook_secret |
lemon webhooks deliveries <id> A webhook's recent deliveries GET /api/v1/webhooks/{id}/deliveries · list_webhook_deliveries | GET /api/v1/webhooks/{id}/deliveries | list_webhook_deliveries |
lemon webhooks resend <deliveryId> Send one delivery again POST /api/v1/webhook-deliveries/{deliveryId}/resend · resend_webhook_delivery | POST /api/v1/webhook-deliveries/{deliveryId}/resend | resend_webhook_delivery |
Domain intelligence
| Command | REST API | MCP tool |
|---|---|---|
lemon report <domain> Full report on any domain. No account needed. GET /api/v1/report · domain_report | GET /api/v1/report | domain_report |
lemon check <names...> Which names are free to register. No account needed. POST /api/v1/availability · check_availability | POST /api/v1/availability | check_availability |
lemon transfer <domain> Whether a domain can move registrar today. No account needed. GET /api/v1/transfer · transfer_readiness | GET /api/v1/transfer | transfer_readiness |
lemon propagation <domain> Whether a DNS change has reached resolvers worldwide. No account needed. GET /api/v1/propagation · check_propagation | GET /api/v1/propagation | check_propagation |
lemon whois <domains...> Registrar, dates and status for any domains. No account needed. GET /api/v1/whois · whois_lookup | GET /api/v1/whois | whois_lookup |
lemon dns lookup <domain> Public DNS records for any name. No account needed. GET /api/v1/dns/lookup · dns_lookup | GET /api/v1/dns/lookup | dns_lookup |
lemon ssl <domain> The HTTPS certificate a site serves. No account needed. GET /api/v1/ssl · check_ssl | GET /api/v1/ssl | check_ssl |
lemon email <domain> Email setup checks (MX, SPF, DMARC, DKIM, BIMI, MTA-STS). No account needed. GET /api/v1/email · check_email | GET /api/v1/email | check_email |
lemon punycode <domain> Unicode and punycode forms of a domain. No account needed. GET /api/v1/punycode · convert_punycode | GET /api/v1/punycode | convert_punycode |
lemon redirects <url> Every redirect from a URL, with headers and a security grade. No account needed. GET /api/v1/redirects · check_redirects | GET /api/v1/redirects | check_redirects |
lemon blacklist <query> Whether a domain or IP address is on email blocklists. No account needed. GET /api/v1/blacklist · check_blacklist | GET /api/v1/blacklist | check_blacklist |
lemon down <domain> Whether a website is down for everyone or just you. No account needed. GET /api/v1/is-it-down · check_website_status | GET /api/v1/is-it-down | check_website_status |
lemon ports <domain> Whether a domain's server is reachable on common web and mail ports. No account needed. GET /api/v1/ports · check_ports | GET /api/v1/ports | check_ports |
lemon email-headers <file> Explain an email's headers: route, SPF, DKIM, DMARC. No account needed. POST /api/v1/email/headers · analyze_email_headers | POST /api/v1/email/headers | analyze_email_headers |
lemon hosting <domain> Who hosts a domain, or who holds an IP address. No account needed. GET /api/v1/hosting · lookup_hosting | GET /api/v1/hosting | lookup_hosting |
lemon dns health <domain> Check a domain's DNS setup for problems. No account needed. GET /api/v1/dns/health · check_dns_health | GET /api/v1/dns/health | check_dns_health |
lemon lookalikes <domain> Lookalike domains of yours and which are registered. No account needed. GET /api/v1/lookalikes · find_lookalikes | GET /api/v1/lookalikes | find_lookalikes |
lemon decode-cert <file> Decode a certificate, chain or CSR, and check the chain. No account needed. POST /api/v1/certificate/decode · decode_certificate | POST /api/v1/certificate/decode | decode_certificate |
lemon spf <domain> Check a domain's SPF record. No account needed. GET /api/v1/spf · check_spf | GET /api/v1/spf | check_spf |
lemon dmarc <domain> Check a domain's DMARC record. No account needed. GET /api/v1/dmarc · check_dmarc | GET /api/v1/dmarc | check_dmarc |
lemon dkim <domain> Check a domain's DKIM keys. No account needed. GET /api/v1/dkim · check_dkim | GET /api/v1/dkim | check_dkim |
lemon dmarc-report <file> Explain a DMARC aggregate report (.xml, .zip or .gz). No account needed. POST /api/v1/dmarc/report · analyze_dmarc_report | POST /api/v1/dmarc/report | analyze_dmarc_report |
lemon site-files <domain> Check robots.txt, sitemap, share previews, favicon and manifest. No account needed. GET /api/v1/site-files · check_site_files | GET /api/v1/site-files | check_site_files |
lemon subnet <cidr> Network, host range and masks for an IP block. No account needed. GET /api/v1/subnet · calculate_subnet | GET /api/v1/subnet | calculate_subnet |
lemon subdomains <domain> Subdomains seen on certificates, and which still resolve. No account needed. GET /api/v1/subdomains · find_subdomains | GET /api/v1/subdomains | find_subdomains |
lemon stats <tld> How many domains an extension has, and registrations and drops. No account needed. GET /api/v1/stats · tld_stats | GET /api/v1/stats | tld_stats |
Also: lemon login, lemon logout, lemon completion and lemon commands.
Frequently asked questions
What can the Lemon Domains CLI do?
Everything the Lemon Domains REST API can: list, search, add, update and delete domains, organise projects, registrars and registrar accounts, read registrar sync results, watch any domain for changes and list what changed, and run a full report, an availability check or a transfer check on any domain. That is 74 commands, one for each API endpoint.
Do I need an account?
Not for checks. lemon report, lemon check and lemon transfer work on any domain without signing in. Commands that read or change your portfolio need an API token from your account.
How is it different from the MCP server?
They run the same operations with the same token. The MCP server is for AI clients like Claude Code and Cursor, which call its tools for you. The CLI is for your terminal, shell scripts and CI jobs, and for agents that prefer to run commands.
Is it safe to give an agent the CLI?
Give it a read-only token and it can look things up but not change anything. With a read and write token, deletes that take projects, registrars or accounts with them show what would go and ask first unless --confirm is passed. Every change is recorded in domain history.
What does it need to run?
Node 18 or later. The lemon-domains package has no dependencies, works on macOS, Linux and Windows, and runs without installing through npx.
Bring your domains to the terminal.
Create an account, connect your registrars, and run lemon login.