IsDomainOK
Local-first domain intelligence for humans, scripts and AI agents.
IsDomainOK does not trust a single availability signal. It can combine DNS evidence, authoritative RDAP registration data and GoDaddy's Domains API, then expose a conservative consensus status, confidence level, registration/renewal pricing and optional public resale signals.
Version 2.1 also exposes the same engine as a local MCP server and ships a portable Agent Skill for project/product/company naming workflows.
IsDomainOK never purchases or registers domains. Registrar integration is read-only.
Why
AI assistants are good at inventing names but usually bad at knowing which suggestions are actually usable.
IsDomainOK separates the jobs:
AI agent
|
| invents names
v
IsDomainOK
|-- DNS
|-- RDAP
`-- GoDaddy (user's own token)
|
v
availability + confidence + real registrar pricing
|
v
AI agent ranks the surviving names
There is no hosted IsDomainOK API requirement, no shared registrar account and no central secret store.
The three-signal model
When GODADDY_PAT is configured, a normal check uses:
- DNS — fast evidence from NS, SOA, A and AAAA records.
- RDAP — public registration data discovered through the IANA bootstrap registry.
- GoDaddy Domains v3 — registrar availability with
optimizeFor=ACCURACY, plus indicative registration and renewal prices.
The sources remain separate in JSON. IsDomainOK never silently turns disagreement into certainty.
Typical outcomes:
available+confidence=high— independent availability signals agree.registered+confidence=high— independent registration/unavailability signals agree.possibly_available— DNS says NXDOMAIN but no stronger source confirmed it.conflict— strong sources disagree; manual confirmation is recommended.unknown— insufficient evidence.
Features
- DNS checks: NS, SOA, A and AAAA
- RDAP lookup using the IANA bootstrap registry
- automatic GoDaddy availability checks when
GODADDY_PATexists - GoDaddy
ACCURACYoptimization - indicative registration and renewal prices
- optional locked read-only registration quote with
--price - registrar, registration date, expiration date and nameservers when public
- multiple names and custom TLDs in one call
- parallel checks
- public domain-for-sale signal and asking-price detection
- stable JSON output
- local MCP server for AI hosts
- portable Agent Skill for naming workflows
- no database, account, telemetry or hosted backend required
Install the CLI
The package is not claimed as published on PyPI yet. For now install from a clone:
git clone https://github.com/coconut971/okitsok.git
cd okitsok
python -m pip install -e .
Core CLI support remains Python 3.9+.
Once published, the intended install command will be:
pipx install isdomainok
Install MCP support
The official MCP Python SDK v2 requires Python 3.10+. MCP is therefore an optional extra rather than a dependency of the core CLI:
python -m pip install -e '.[mcp]'
This installs the local stdio entry point:
isdomainok-mcp
Configure GoDaddy
Create a GoDaddy Personal Access Token with the required Domains permissions and keep it outside the repository:
export GODADDY_PAT="your-token"
PowerShell:
$env:GODADDY_PAT="your-token"
Do not commit the token to Git or place it in prompts/config examples. With the environment variable configured, GoDaddy checks become automatic.
Skip GoDaddy for one call:
isdomainok lightsraw --no-godaddy
Use DNS only:
isdomainok lightsraw --dns-only
CLI quick start
isdomainok lightsraw
Default TLDs are .com, .fr, .io, .ai and .app.
With GODADDY_PAT, output can include:
lightsraw.com registered confidence=high godaddy=unavailable
lightsraw.ai available confidence=high godaddy=available register=74.99 USD renew=74.99 USD
Prices above are only an illustration; IsDomainOK prints values returned at request time.
Check exact domains:
isdomainok example.com example.net
Choose TLDs:
isdomainok lightsraw --tlds com fr ai dev tech
Machine-readable output:
isdomainok lightsraw --json
MCP tools
The MCP server exposes four read-only tools.
about_isdomainok
Returns capabilities, version, default TLDs and whether GoDaddy is configured. It never exposes the token.
check_domain
Checks one exact domain with the same consensus engine as the CLI.
check_name
Checks one base name across multiple TLDs.
screen_names
Built specifically for naming agents. Pass generated project/product/company names in one batch and optionally provide TLD and registration-budget constraints.
Conceptual request:
{
"names": ["framevo", "cutory", "reelio"],
"tlds": ["com", "ai"],
"max_registration_price": 150,
"currency": "USD"
}
By default it only keeps confirmed available results, excludes conflict/unknown/registered domains, and sorts survivors by confidence and known registration price.
If a price ceiling is supplied, a domain whose price is unknown is excluded because the budget cannot be verified.
Agent Skill
The portable naming Skill lives at:
skills/isdomainok-domain-naming/SKILL.md
It follows the open Agent Skills format and is intended for Codex, Claude Code and other compatible agent clients.
The Skill tells the agent to:
- understand the naming brief;
- generate a broad pool of names itself;
- batch-screen them through IsDomainOK;
- reject registered/conflicting/unknown candidates;
- respect a registration budget when supplied;
- rank the remaining names on creative quality plus domain evidence;
- clearly distinguish domain availability from trademark clearance.
The AI model remains responsible for creativity. IsDomainOK does not call another model API.
Claude Code
A minimal stdio example is included at:
examples/claude-code-mcp.json
After installing .[mcp], configure Claude Code to launch isdomainok-mcp. Let the process inherit GODADDY_PAT from the user's environment rather than embedding the token in JSON.
See docs/AGENT_INTEGRATIONS.md for the complete integration model.
Locked registration price
A normal GoDaddy availability request can return indicative registration/renewal prices. For stronger pre-purchase verification:
isdomainok mynewname.com --price
--price requests a one-year registration quote. The quote re-checks availability and can lock the registration price for its validity window.
There is still no purchase endpoint in IsDomainOK.
Public resale prices
Inspect a registered domain's public landing page with:
isdomainok example.com --market
If a recognizable marketplace or explicit asking price is present, IsDomainOK reports it. No resale valuation is invented when the owner has not published one.
Accuracy rules
IsDomainOK intentionally stays conservative:
- GoDaddy available + RDAP available ->
available, high confidence. - GoDaddy unavailable + RDAP registered ->
registered, high confidence. - GoDaddy available while RDAP registered ->
conflict. - DNS contains positive records while RDAP/GoDaddy says available ->
conflict. - DNS NXDOMAIN alone ->
possibly_available, not a guaranteed purchase opportunity.
The registrar still performs the final authoritative verification at quote/registration time.
Price limitations
There are two very different prices:
- Registration price for an unregistered domain — registrar-specific and obtainable through GoDaddy when credentials are configured.
- Resale/asking price for a registered domain — knowable only when the owner/marketplace publishes it or a broker supplies it.
IsDomainOK returns price unavailable rather than fabricating a resale valuation.
Privacy and security
Depending on configuration and flags, IsDomainOK may contact:
- DNS resolvers configured on the machine
- IANA's RDAP bootstrap registry and authoritative RDAP services
- GoDaddy's Domains API when
GODADDY_PATis configured - the target domain when
--marketis enabled
No telemetry is sent by IsDomainOK itself. The GoDaddy token is read from the environment and never included in tool/CLI output.
The MCP server is read-only with respect to registrars and exposes no registration or purchase tool.
Legal boundary
Domain availability is not trademark clearance, company-name clearance or legal permission to use a brand. Commercial naming decisions should be followed by an appropriate trademark/company-name check.
Compatibility
The Python package internals remain under okitsok during the v2 transition. Both CLI commands work:
isdomainok example
okitsok example
Development
Core tests:
python -m unittest discover -s tests -v
MCP test (Python 3.10+):
python -m pip install -e '.[mcp]'
python -m unittest tests.test_mcp -v
CI tests the core on Python 3.9, 3.11 and 3.13, plus a dedicated MCP v2 job on Python 3.13.
License
MIT
No comments yet
Be the first to share your take.