关于 Internet Names Mcp
Internet Names Mcp 是用于查询域名、社交媒体用户名和 subreddit 可用性的 MCP 服务。它可组合名称并跨平台检查;配置 NameSilo API 密钥后,还能返回域名价格。
主要功能
- 01通过 RDAP 或 NameSilo 查询域名
- 02检查社交媒体用户名可用性
- 03查询 subreddit 名称可用性
- 04组合名称并进行综合检查
- 05可选返回域名价格
适用场景
- 01为项目名称检查域名选项
- 02比较用户名在各平台的可用性
- 03查找可用的 subreddit 名称
- 04筛查生成的名称组合
MCP 相关
该服务向 MCP 客户端提供域名、社交媒体用户名、subreddit 及综合可用性检查工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Internet Names MCP Server
用于检查域名、社交媒体账号名和 subreddit 是否可用的 MCP 服务。返回适合程序化使用的简洁 JSON 响应。
功能
- 域名 - 通过 RDAP(免费)或 NameSilo API(免费,但需要 API 密钥;响应还会包含域名价格)检查可用性
- 社交媒体账号名 - Instagram、Twitter/X、Reddit、YouTube、TikTok、Twitch、Threads、Bluesky、GitHub、Snapchat、Pinterest、Kick、Substack
- Subreddit - 检查 Reddit 上的 subreddit 名称是否可用
- 综合搜索 - 生成名称组合,并一次性检查所有内容
快速开始
1. 添加到 Claude Code(推荐)
claude mcp add --scope user internet-names-mcp uvx internet-names-mcp
完成!服务器会立即使用 RDAP 查询域名。
2. 可选:配置 NameSilo API(用于查询域名价格)
配置 NameSilo API 密钥后,域名可用性检查效果最佳。该密钥免费,只需完成基本注册即可获取。否则,我们会改用 RDAP,但它有一些明显的限制(见下文)。
设置 NameSilo API 密钥
- 在 namesilo.com 创建账号(或登录)
- 前往 API Manager
- 点击 Generate New API Key
- 复制密钥并运行:
uvx internet-names-mcp --setup
系统会提示你粘贴 API 密钥。
在 macOS 上,API 密钥会安全地存储在 iCloud 钥匙串或登录钥匙串中,名称为 internet-names-mcp.namesilo。在其他平台上,它会存储在 ~/.config/internet-names-mcp/config.json 中。
推荐使用 --setup,因为它可以安全地存储密钥。你也可以通过环境变量设置密钥(见下文的“手动配置”)。
手动配置
如果你不使用 Claude Code,或更喜欢手动配置 MCP 服务,请将以下内容添加到 MCP 客户端的配置文件中(例如 Claude Desktop 的 claude_desktop_config.json):
{
"mcpServers": {
"internet-names-mcp": {
"command": "uvx",
"args": ["internet-names-mcp"]
}
}
}
若要通过环境变量设置 NameSilo API 密钥(如果你尚未使用 --setup):
{
"mcpServers": {
"internet-names-mcp": {
"command": "uvx",
"args": ["internet-names-mcp"],
"env": {
"NAMESILO_API_KEY": "your_api_key_here"
}
}
}
}
注意:建议使用 uvx internet-names-mcp --setup 存储 API 密钥,而不是使用环境变量,因为在条件允许时,它会使用安全存储(macOS Keychain)。
CLI 命令
uvx internet-names-mcp --setup # Configure API keys interactively
uvx internet-names-mcp --show-config # Show current configuration
uvx internet-names-mcp --version # Show version
uvx internet-names-mcp --help # Show help
工具
get_supported_socials()
返回受支持的社交媒体平台列表。
响应:
{
"platforms": ["instagram", "twitter", "reddit", "youtube", "tiktok", "twitch", "threads", "bluesky", "github", "snapchat", "pinterest", "kick", "substack", "subreddit"]
}
注意:subreddit 通过 check_subreddits() 检查,而非 check_handles()。
check_domains(names, tlds?, method?, only_report_available?)
检查域名的可用性和价格。
参数:
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
names | list[str] | 必填 | 要检查的域名或基础名称 |
tlds | list[str] | ["com", "io", "ai", "co", "app", "dev", "net", "org"] | 要检查的顶级域名 |
method | str | "auto" | "auto"、"rdap" 或 "namesilo" |
only_report_available | bool | false | 如果为 true,则响应中省略不可用的域名 |
如果名称中包含句点,则会将其视为完整域名。否则,会将其与每个顶级域名组合。
响应:
{
"available": [
{"domain": "myapp.com", "price": 17.29},
{"domain": "myapp.io", "price": 34.99}
],
"unavailable": ["myapp.ai"],
"summary": {
"cheapestAvailable": {"domain": "myapp.com", "price": 17.29},
"shortestAvailable": {"domain": "myapp.io", "price": 34.99}
}
}
check_handles(username, platforms?, only_report_available?)
检查各个平台上的社交媒体用户名是否可用。
参数:
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
username | str | 必填 | 要检查的用户名 |
platforms | list[str] | 所有平台 | 要检查的平台 |
only_report_available | bool | false | 如果为 true,则在响应中省略不可用的用户名 |
支持的平台:instagram、twitter、reddit、youtube、tiktok、twitch、threads、bluesky、github、snapchat、pinterest、kick、substack
所有平台都会并行检查;通常一次调用需要 2–5 秒。Instagram、Threads 和 Reddit 使用无头 Chromium 浏览器(首次使用时会自动安装)。
各平台的检查方式及“可用”的含义:
| 平台 | 方法 | “可用”表示 |
|---|---|---|
twitter | X 注册页面的用户名可用性接口 | X 允许注册此用户名 |
instagram | 个人资料页面,然后使用 Instagram 注册页面的用户名验证 | Instagram 允许注册此用户名 |
threads | 与 Instagram 一致(Threads 用户名就是 Instagram 用户名);通过个人资料页面检查 URL | Instagram 允许注册此用户名 |
bluesky | 在 bsky.social 上调用 com.atproto.temp.checkHandleAvailability,检查 <name>.bsky.social | Bluesky 允许注册此用户名 |
reddit | Reddit 的 username_available 接口 | Reddit 允许注册此用户名 |
tiktok | 个人资料页面中嵌入的用户状态 | 未找到账号(被封禁或已移除的账号看起来相同) |
youtube | @handle 页面状态 | 未找到频道(保留或已终止的用户名可能看起来相同) |
twitch | Twitch Web GraphQL 用户查询,包括已暂停和已删除的账号 | 未找到账号 |
github | GitHub REST API 用户查询(用户和组织;不使用令牌时每小时可查询 60 次) | 未找到账号(保留名称可能看起来相同) |
snapchat | snapchat.com/@username 页面状态 | 未找到账号(保留名称可能看起来相同) |
pinterest | 个人资料页面标题,或页面嵌入的“未找到用户”错误 | 未找到账号(保留名称可能看起来相同) |
kick | Kick 公共频道 API,以及 Kick 为部分带下划线的用户名提供的连字符形式的 slug | 未找到频道(Kick 未公开长度规则,因此只验证字符) |
substack | 检查 <name>.substack.com 是否可访问或会重定向(这是出版物子域名,而非 Substack 用户名) | 未找到出版物或保留子域名 |
只有平台明确表示可用时,才会报告为可用。拦截页面、速率限制和意外响应会作为错误报告(位于 unavailable 中,并带有 error 字段),绝不会报告为可用或已占用。
响应:
{
"available": ["instagram", "tiktok", "youtube"],
"unavailable": [
{"platform": "twitter", "url": "https://x.com/myapp"},
{"platform": "reddit", "url": "https://www.reddit.com/user/myapp"},
{"platform": "bluesky", "note": "Reserved or not allowed by Bluesky"},
{"platform": "twitch", "error": "Twitch returned HTTP 503"}
]
}
check_subreddits(names, only_report_available?)
检查 Reddit 上 subreddit 名称是否可用。
参数:
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
names | list[str] | 必填 | 要检查的 subreddit 名称(可带或不带 r/ 前缀) |
only_report_available | bool | false | 如果为 true,则在响应中省略不可用的 subreddit |
响应:
{
"available": ["mynewsubreddit"],
"unavailable": [
{"name": "programming", "subscribers": 6835000},
{"name": "privatesubreddit", "note": "private"}
]
}
通过无头浏览器会话调用 Reddit 的 about.json 查询 subreddit。若某个 subreddit 受限但未公开(private、gold_only、quarantined、banned 等),note 会附上 Reddit 给出的原因;若名称不是有效的 subreddit 名称,则会说明原因。
check_everything(components, tlds?, platforms?, method?, require_all_tlds_available?, only_report_available?, also_include_hyphens?)
全面检查域名和社交媒体。根据各组成部分生成名称组合,先检查域名(速度较快),再检查通过域名检查的名称对应的社交账号。
参数:
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
components | list[str] | 必填 | 要组合的名称组成部分(例如,["red", "sweater"]) |
tlds | list[str] | ["com", "net", "org", "io", "ai"] | 要检查的顶级域名 |
platforms | list[str] | 所有平台 | 要检查的社交平台 |
method | str | "auto" | "auto"、"rdap" 或 "namesilo" |
require_all_tlds_available | bool | false | 若为 true,名称必须在所有顶级域名中都可注册,才会检查其社交账号 |
only_report_available | bool | false | 若为 true,响应中省略不可用的项目 |
also_include_hyphens | bool | false | 若为 true,也检查带连字符的域名(不会检查这些名称的社交账号) |
名称生成:
根据组成部分 ["red", "sweater"],生成:
- 单个组成部分:
red、sweater - 拼接形式:
redsweater、sweaterred - 使用
also_include_hyphens时:red-sweater、sweater-red(仅检查域名)
带连字符的形式可能出现在 available_domains 和 domain_successful_basenames 中,但不会检查其社交账号,因此不会出现在 available_handles、unavailable_handles 或 fully_available 中。在组成部分中输入的连字符(例如,["red-sweater"])属于调用方提供的拼写方式,与其他名称一样会检查其社交账号。
响应:
{
"available_domains": [
{"domain": "redsweater.com", "price": 17.29},
{"domain": "redsweater.io", "price": 34.99}
],
"domain_successful_basenames": ["redsweater", "sweaterred"],
"available_handles": {
"redsweater": ["instagram", "twitter", "youtube"],
"sweaterred": ["instagram", "tiktok"]
},
"unavailable_handles": {
"redsweater": [{"platform": "reddit", "url": "..."}]
},
"summary": {
"fully_available": ["sweaterred"],
"cheapest_domain": {"domain": "redsweater.com", "price": 17.29}
}
}
fully_available 列表包含在所有已检查平台上都可用的名称。
域名查询方式
| 方式 | 描述 | 费用 | 速度 |
|---|---|---|---|
auto | 若已配置 API 密钥则使用 NameSilo,否则使用 RDAP | 使用 NameSilo 时收费 | 快 |
rdap | 通过 IANA 引导信息直接查询注册局 | 否 | 快 |
namesilo | NameSilo API(需要 API 密钥) | 是 | 快 |
RDAP 的局限性
RDAP 免费且无需 API 密钥,但有一些局限性:
- 顶级域名覆盖范围 - 并非所有顶级域名(TLD)都有 RDAP 服务。对不受支持的顶级域名进行查询会失败。RDAP 支持 .com、.net、.org、.app、.ai 等。请参阅 deployment.rdap.org 获取最新列表(查看“RDAP”列中标记为“Yes”的项目)。
- 不提供价格 - RDAP 只报告可用性,不提供注册域名的费用。
- 误报 - 通过 RDAP 查询时,域名可能显示为可用,但实际上被注册商保留或被视为“溢价”域名,因此实际上无法注册或购买价格高得令人却步。
如需获取包含价格的可靠结果,请配置 NameSilo API 密钥。
配置
API 密钥存储位置:
- macOS: Keychain(名称为
internet-names-mcp.namesilo) - Linux:
~/.config/internet-names-mcp/config.json - Windows:
%APPDATA%/internet-names-mcp/config.json
API 密钥查找顺序(使用首个匹配项):
- macOS Keychain(仅限 macOS)
- 环境变量(
NAMESILO_API_KEY) - 配置文件(备用)
开发
本地设置
devsetup.sh 脚本负责创建虚拟环境并安装依赖项:
git clone https://github.com/drewster99/InternetNamesMCP.git InternetNamesMCP
cd InternetNamesMCP
source devsetup.sh # Creates .venv, activates it, installs dependencies
playwright install chromium # Required for Instagram, Threads and Reddit checks (auto-installed on first use otherwise)
选项:
source devsetup.sh- 设置环境(默认)source devsetup.sh --clean- 删除虚拟环境和缓存source devsetup.sh --clean --setup- 清理后重新构建
API 密钥配置(开发)
从源代码运行时,请直接使用模块,而不要使用 uvx:
source devsetup.sh # Activate environment first
python -m internet_names_mcp --setup # Configure API keys interactively
python -m internet_names_mcp --show-config # Show current configuration and key source
python -m internet_names_mcp --version # Show version
运行测试
source devsetup.sh # Activate environment first
# Main test suites
python test_server.py # Full test suite - offline validation + online API tests
python test_mcp_interface.py # Tests via MCP protocol (stdio transport)
python test_rdap_client.py # Async RDAP client, rate limiter, batch queries
# Comparison/diagnostic tests
python test_methods.py # Compare RDAP vs NameSilo results for discrepancies
python test_rdap.py # Quick RDAP-only domain check
| 测试文件 | 说明 |
|---|---|
test_server.py | 主测试套件,涵盖所有 MCP 工具、边缘情况和 API 调用 |
test_mcp_interface.py | 通过 stdio 使用实际 MCP 协议测试服务 |
test_rdap_client.py | 测试异步 RDAP 客户端、速率限制和批量查询 |
test_methods.py | 对比 RDAP 与 NameSilo,以检测可用性差异 |
test_rdap.py | 仅使用 RDAP 的简单测试,用于快速检查域名可用性 |
交互式测试
使用 MCP Inspector 通过 Web UI 进行交互式调试:
npx @modelcontextprotocol/inspector .venv/bin/python -m internet_names_mcp
项目结构
├── src/internet_names_mcp/
│ ├── __init__.py # CLI entry point
│ ├── __main__.py # Module runner
│ ├── server.py # MCP server
│ ├── config.py # Configuration management
│ ├── rdap_bootstrap.py # RDAP bootstrap cache
│ └── rdap_client.py # Async RDAP client
├── pyproject.toml # Package configuration
└── README.md
数据文件
RDAP 引导缓存 - 将 TLD 映射到其权威 RDAP 服务(从 IANA 自动下载):
- macOS/Linux:
~/.cache/internet-names-mcp/rdap_bootstrap.json - Windows:
%APPDATA%/internet-names-mcp/rdap_bootstrap.json
缓存过期后会自动刷新(根据 IANA 的 Cache-Control 标头,默认 TTL 为 24 小时)。
故障排除
“未安装 playwright”或 Chromium 错误
安装 Playwright 浏览器:
playwright install chromium
或使用 uvx:
uvx --from playwright install chromium
“Instagram 正在限制用户名检查”
Instagram 会限制单个 IP 地址可进行的注册用户名验证次数。受到限制时,Instagram 对所有名称都会返回“不可用”;服务会通过随机控制名称检测这种情况,并报告错误(注明是否存在个人主页),而不会给出错误答案。测试中,单个 IP 地址进行约 20–40 次检查后就会触发限制,约 25 分钟后解除。已被占用的名称会根据个人主页确定,不计入限制次数。
Reddit 错误(“机器人检查页面”或“没有数据”)
Reddit 会拦截非浏览器客户端,并按 IP 地址实施速率限制。服务会在无头浏览器中通过 Reddit 的 JavaScript 检查,并在服务进程运行期间将生成的 Reddit Cookie 保存在内存中(绝不写入磁盘),因为每次调用都清除并重新应对挑战,会导致 Reddit 升级为 CAPTCHA。如果 Reddit 仍要求输入 CAPTCHA,错误信息会说明这一点;服务绝不会尝试破解。请稍等一段时间后重试。
版权
版权所有 (C) 2026 Nuclear Cyborg Corp
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。