关于 Domain Finder
Domain Finder 会生成适合品牌使用的名称候选,并检查其在域名、GitHub、npm 和 PyPI 中的可用性。它依据可用状态和名称特征为结果排序,并提供远程 MCP 端点供 Agent 使用。
主要功能
- 01根据产品描述生成名称
- 02检查域名和开发者命名空间
- 03通过 RDAP 检查可用性
- 04按评分和状态排列候选项
- 05可选 AI 头脑风暴
- 06追踪域名状态并发送提醒
适用场景
- 01为产品或创意寻找名称
- 02跨域名和代码包注册平台检查候选名
- 03追踪即将进入可注册状态的域名
MCP 相关
提供远程 Streamable HTTP MCP 服务,包含检查候选名称和生成经过域名可用性预检的建议名称的工具。工具为只读,无需凭据。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://domain-finder-theta.vercel.app/api/mcpclaude mcp add --transport http sra1phani-domain-finder https://domain-finder-theta.vercel.app/api/mcp{"mcpServers":{"sra1phani-domain-finder":{"type":"http","url":"https://domain-finder-theta.vercel.app/api/mcp"}}}在 Cursor 中打开{"servers":{"sra1phani-domain-finder":{"type":"http","url":"https://domain-finder-theta.vercel.app/api/mcp"}}}在 VS Code 中打开{"mcpServers":{"sra1phani-domain-finder":{"type":"http","url":"https://domain-finder-theta.vercel.app/api/mcp"}}}{"mcpServers":{"sra1phani-domain-finder":{"serverUrl":"https://domain-finder-theta.vercel.app/api/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
2| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tlds | array | 否 | |
| names | array | 是 | |
| surfaces | array | 否 |
详细介绍
域名查找器
搜索并推荐值得购买的域名。描述产品或想法;应用会集思广益,生成适合打造品牌的名称(AI + 基于规则的组合),通过 RDAP 检查实际可用性,并返回排序后的候选购买列表。
采用 Elastic License 2.0 提供源代码(SPDX-License-Identifier: Elastic-2.0)——请参阅许可证。
连接到 MCP 服务
Domain Finder 也是一个远程 MCP 服务——可通过任何支持 MCP 的 Agent,跨域名以及 GitHub / npm / PyPI 命名空间检查品牌名称。
- 端点:
https://domain-finder-theta.vercel.app/api/mcp(Streamable HTTP) - 工具:
check_name— 在一次调用中,检查一个或多个候选名称在域名以及 GitHub / npm / PyPI 命名空间中是否可用。generate_names— 根据描述生成候选名称,并预先检查每个名称的域名可用性;将你最喜欢的名称传给check_name。
- 只读,无需凭据——无需注册,也无需粘贴密钥。可放心连接。
- 请求会被记录。 输入和输出会存储在服务端(使用调用者 IP 的加盐哈希,绝不存储原始地址),用于分析和滥用审查——请参阅 SECURITY.md。
Cursor(~/.cursor/mcp.json)以及任何原生支持 Streamable-HTTP 的客户端:
{
"mcpServers": {
"domain-finder": {
"type": "streamable-http",
"url": "https://domain-finder-theta.vercel.app/api/mcp"
}
}
}
Claude Desktop(claude_desktop_config.json)——使用 mcp-remote 桥接远程服务:
{
"mcpServers": {
"domain-finder": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://domain-finder-theta.vercel.app/api/mcp"]
}
}
}
工作原理
query ─▶ generate ─▶ check availability ─▶ rank ─▶ results
(AI + rules) (RDAP) (0–100 score)
-
生成(
lib/generate.ts)——合并三个来源的候选项:- _基于规则的_组合:关键词提取(过滤停用词)× 前缀/后缀(
get、try、-ly、-hq、-app等),优先选择较短的名称。 - AI 集思广益(可选):通过 AI Gateway 使用 Vercel AI SDK(
generateObject+ zod)。没有 API 密钥时,会平稳降级为基于规则的生成。 - 域名巧用(
lib/hacks.ts):让单词横跨点号读取——delicio.us、bit.ly、recip.es。基于 IANA 的完整 TLD 列表构建;无需 API。此类名称会按设计忽略 TLD 筛选器(单词决定区域),因此有单独的开关。 - 标签会去重、限制数量,并扩展为所选 TLD 的组合(采用轮询方式,确保每个标签都先获得
.com,再分配第二个 TLD)。
- _基于规则的_组合:关键词提取(过滤停用词)× 前缀/后缀(
-
可用性(
lib/availability.ts)——通过可替换的AvailabilityProvider接口使用 RDAP。通过 IANA 引导文件(以及精选的覆盖规则),将每个 TLD 解析到其权威注册局 RDAP 服务,然后直接查询注册局。遇到429时会重试。 -
状态分类(
lib/rdap-status.ts)——“已被占用”并非只有一种情况。该分类参照 Domainr 的分类体系,为每个域名分配一个status和一个粗略的bucket:bucket statuses 含义 registrableavailable可立即按零售价购买 droppingdeleting、expiring处于 pendingDelete / redemption 阶段——适合预订 aftermarketparked已被注册,但名称服务器显示“出售” unavailableactive、reserved已注册并在使用中 unknownunknown该 TLD 没有 RDAP 服务,或发生错误 所有状态都直接根据 RDAP 的 RFC 8056 状态码、
expiration事件和名称服务器推导。deleting域名还会获得一个estimatedDropAt(pendingDelete 是一个固定的约 5 天时段)。 -
排序(
lib/rank.ts)——按可用性(45)、TLD 吸引力(20)、长度(20)、整洁度/无连字符或数字(10)以及品牌适用性加分(5,域名巧用 > AI > 组合)计算 0–100 分。先按 bucket 排序,再按分数排序——因此“可立即购买”的域名总是排在“可能有机会获得”的域名前面。
之后若要将 RDAP 换成付费注册商 API(以支持定价和实际购买流程),只需修改 lib/availability.ts——管线中的其他部分都不依赖数据来源。
监控列表
跟踪域名,在它进入删除流程时收到邮件通知,并将其交给
预订服务。这是围绕 availabilityProvider.check() 构建的调度器,
而不是新的可用性逻辑。
cron ─▶ due-queue ─▶ check ─▶ transition? ─▶ alert (deleting | available)
(next_check_at) (watch_events) deduped via `alerts`
- 自适应到期队列(
lib/cadence.ts)——每个域名都有一个next_check_at;轮询器只处理已到期的项目。检查频率随状态变化: 远期的active状态每周检查一次 → 距到期不足 30 天或处于赎回期时每天检查一次 →pendingDelete状态每 6 小时检查一次 → 预计删除时间在 24 小时内时每小时检查一次。RDAP 负载与域名的 受关注程度 成正比,而不是与监控数量成正比。 - 状态以域名为单位,而非以监控项为单位(
lib/db/schema.ts)。一百个人监控同一个简短的.com域名,只需一行记录、一次 RDAP 调用、一次状态转换,再分发到一百个收件箱。负载随观测到的唯一域名数量 增长,而不是随用户数 × 域名数增长——这很重要,因为注册局不会出售容量。 - 状态转换日志(
watch_events)是事实来源。只有状态发生变化时才发送提醒,并且alerts设置了unique(watch_id, event_id),因此 cron 重试不会重复发送。 - 只有两种状态会触发提醒:
deleting(pendingDelete——固定约 5 天的窗口,也就是还能下预订单的最后时刻)和available。 其他所有状态都会记录并显示在 UI 中,但不会发送提醒。 unknown不算状态转换。 429 错误或超时表示“我们无法判断”,而不是“域名状态已变化”——保留最后一次已知状态,并以指数间隔退避重试(1h、2h、4h……最长为一天)。- 无法观测的 TLD 会在添加监控时拒绝。
.co/.es/.at/.gg没有公共 RDAP 服务,因此监控这些域名永远不会触发提醒。明确告知总比接受监控后一直不发提醒要好。 - 免费监控每个邮箱最多 3 个(
lib/watch.ts中的FREE_WATCH_LIMIT)。
身份由邮箱和无法猜测的管理令牌组成——没有账户、会话或用户表。令牌包含在提醒链接中,用于验证
/watch/<token>。
在本地运行监控列表
# any Postgres will do
docker run -d --name df-pg -e POSTGRES_PASSWORD=domainfinder \
-e POSTGRES_USER=domainfinder -e POSTGRES_DB=domainfinder \
-p 5433:5432 postgres:16-alpine
cp .env.example .env.local # set DATABASE_URL + CRON_SECRET
npm run db:push # create the tables
npm run dev
未设置 RESEND_API_KEY 时,提醒会打印到控制台而不是发送出去,因此无需注册任何第三方服务即可体验完整流程。手动触发一次轮询:
curl -H "authorization: Bearer $CRON_SECRET" localhost:3000/api/cron/poll
在生产环境中安排任务
.github/workflows/poll.yml 每小时调用 /api/cron/poll。Vercel 的 Hobby cron
每天只运行一次,这可能会耗掉约 5 天的 pendingDelete
提醒窗口的大半时间,因此改由 GitHub Actions 负责调度。设置仓库密钥 POLL_URL 和
CRON_SECRET。GHA cron 尽力而为,可能会延迟几分钟——对于持续数天的提醒来说没有问题,这里的任何功能都不依赖准时运行。
测试
npm test
lib/rdap-status.test.ts 和 lib/cadence.test.ts 是纯测试。lib/poll.test.ts
使用伪造的可用性提供程序操作真实数据库——在实际环境中,pendingDelete
和 redemptionPeriod 太罕见,难以按需找到,而捕捉这两种状态正是此功能的目的。未设置 DATABASE_URL 时会跳过此测试。
开始使用
npm install
npm run dev # http://localhost:3000
搜索无需任何配置即可使用——可用性(RDAP)和基于规则的生成都不需要密钥。若要启用 AI 头脑风暴功能,请将 .env.example 复制到
.env.local 并设置 AI Gateway 密钥:
cp .env.example .env.local
# then set AI_GATEWAY_API_KEY=...
监控列表是唯一需要数据库的部分;没有数据库时,搜索仍可正常使用(getDb() 是惰性加载的,只有监控路由调用它时才会抛出错误)。
参见上文的监控列表。
API
POST /api/search
// request
{ "query": "vegan meal delivery", "tlds": [".com", ".io"], "useAi": true }
// response
{ "query": "...", "results": [ { "domain": "...", "score": 92, "availability": {...}, ... } ],
"meta": { "generated": 45, "checked": 45, "aiUsed": false, "availabilityProvider": "rdap", "tookMs": 1200 } }
注意事项 / 限制
- 顶级域名覆盖范围。 IANA 的 RDAP 引导数据涵盖约 1199 个区,且偏向 gTLD;缺失的部分是 ccTLD,而域名创意拼写恰恰会用到这些域名。已验证的覆盖项位于
OVERRIDES(lib/availability.ts)中:.io/.me/.sh/.ac、.de、.us。未找到.co/.es/.at/.gg的可访问端点,因此这些域名会报告为unknown,而不是猜测。如果你发现了其他端点,请添加。 - 停放检测追求高精度,召回率较低。 它能可靠标记停放在 Sedo/Bodis 风格名称服务器上的普通域名,但会漏掉优质域名——它们大多位于 Cloudflare/AWS 之后,无法看到相关信号。没有
parked标记并不能证明什么。真实的二级市场数据需要付费来源。 - RDAP 只能告诉你域名是 已注册还是未注册,不能提供价格。 定价/购买功能需要注册商 API(接口已准备就绪)。“购买”链接目前指向 Namecheap 的搜索页面;
backorderUrl()指向 DropCatch,用于即将释放的域名。在app/page.tsx中只需改动一行即可换成联盟链接。 - 你无法靠轮询此应用抢到即将释放的域名。 专业的域名抢注服务会保持数百个注册商连接。实用的方案是构建一个监控列表,在域名状态变化时发出提醒,并将用户交给预订服务——设计方案请参阅 wiki。
许可证
根据 Elastic License 2.0(SPDX-License-Identifier: Elastic-2.0)提供源代码。你可以自由查看、自托管并修改代码。但不得将其作为托管或管理服务提供给第三方,且该服务会开放其大量功能——也就是说,不允许将其作为竞争性的托管服务运营。完整条款请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。