MCP server for checking availability of domain names, social media handles, and subreddits
Project description
Internet Names MCP Server
An MCP server for checking availability of domain names, social media handles, and subreddits. Returns clean JSON responses suitable for programmatic use.
Features
- Domain names - Check availability via RDAP (free) or NameSilo API (includes pricing)
- Social media handles - Instagram, Twitter/X, Reddit, YouTube, TikTok, Twitch, Threads
- Subreddits - Check if subreddit names are available on Reddit
- Comprehensive search - Generate name combinations and check everything at once
Quick Start
1. Add to Claude Code
claude mcp add --scope user internet-names-mcp uvx internet-names-mcp
That's it! The server works immediately using RDAP for domain lookups.
2. Optional: Configure NameSilo API (for domain pricing)
The server works without an API key using RDAP. To get domain pricing info, add a free NameSilo API key:
- Create an account at namesilo.com (or log in)
- Go to API Manager: https://www.namesilo.com/account/api-manager
- Click Generate New API Key
- Copy the key and run:
uvx internet-names-mcp --setup
Or set via environment variable:
export NAMESILO_API_KEY="your-key-here"
CLI Commands
uvx internet-names-mcp # Run the MCP server
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
Tools
get_supported_socials()
Returns list of supported social media platforms.
Response:
{
"platforms": ["instagram", "twitter", "reddit", "youtube", "tiktok", "twitch", "threads", "subreddit"]
}
Note: subreddit is checked via check_subreddits(), not check_handles().
check_domains(names, tlds?, method?, onlyReportAvailable?)
Check domain name availability and pricing.
Parameters:
| Name | Type | Default | Description |
|---|---|---|---|
names |
list[str] | required | Domain names or base names to check |
tlds |
list[str] | ["com", "io", "ai", "co", "app", "dev", "net", "org"] |
TLDs to check |
method |
str | "auto" |
"auto", "rdap", or "namesilo" |
onlyReportAvailable |
bool | false |
If true, omit unavailable domains from response |
If a name contains a dot, it's treated as a full domain. Otherwise, it's combined with each TLD.
Response:
{
"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?, onlyReportAvailable?)
Check social media handle availability across platforms.
Parameters:
| Name | Type | Default | Description |
|---|---|---|---|
username |
str | required | The username/handle to check |
platforms |
list[str] | all platforms | Platforms to check |
onlyReportAvailable |
bool | false |
If true, omit unavailable handles from response |
Supported platforms: instagram, twitter, reddit, youtube, tiktok, twitch, threads
Note: Twitter/X checking uses a headless browser and takes ~4 seconds.
Response:
{
"available": ["instagram", "tiktok", "youtube"],
"unavailable": [
{"platform": "twitter", "url": "https://x.com/myapp"},
{"platform": "reddit", "url": "https://reddit.com/user/myapp"}
]
}
check_subreddits(names, onlyReportAvailable?)
Check subreddit name availability on Reddit.
Parameters:
| Name | Type | Default | Description |
|---|---|---|---|
names |
list[str] | required | Subreddit names to check (with or without r/ prefix) |
onlyReportAvailable |
bool | false |
If true, omit unavailable subreddits from response |
Response:
{
"available": ["mynewsubreddit"],
"unavailable": [
{"name": "programming", "subscribers": 6835000},
{"name": "privatesubreddit", "note": "private"}
]
}
check_everything(components, tlds?, platforms?, method?, requireAllTLDsAvailable?, onlyReportAvailable?, alsoIncludeHyphens?)
Comprehensive check across domains and social media. Generates name combinations from components, checks domains first (fast), then checks social handles for names that pass the domain check.
Parameters:
| Name | Type | Default | Description |
|---|---|---|---|
components |
list[str] | required | Name components to combine (e.g., ["red", "sweater"]) |
tlds |
list[str] | ["com", "net", "org", "io", "ai"] |
TLDs to check |
platforms |
list[str] | all platforms | Social platforms to check |
method |
str | "auto" |
"auto", "rdap", or "namesilo" |
requireAllTLDsAvailable |
bool | false |
If true, name must be available in ALL TLDs to pass |
onlyReportAvailable |
bool | false |
If true, omit unavailable items from response |
alsoIncludeHyphens |
bool | false |
If true, also check hyphenated versions |
Name Generation:
From components ["red", "sweater"], generates:
- Single components:
red,sweater - Concatenations:
redsweater,sweaterred
Response:
{
"availableDomains": [
{"domain": "redsweater.com", "price": 17.29},
{"domain": "redsweater.io", "price": 34.99}
],
"domainSuccessfulBasenames": ["redsweater", "sweaterred"],
"availableHandles": {
"redsweater": ["instagram", "twitter", "youtube"],
"sweaterred": ["instagram", "tiktok"]
},
"unavailableHandles": {
"redsweater": [{"platform": "reddit", "url": "..."}]
},
"summary": {
"fullyAvailable": ["sweaterred"],
"cheapestDomain": {"domain": "redsweater.com", "price": 17.29}
}
}
The fullyAvailable list contains names that are available on ALL checked platforms.
Domain Lookup Methods
| Method | Description | Pricing | Speed |
|---|---|---|---|
auto |
Uses NameSilo if API key configured, otherwise RDAP | With NameSilo | Fast |
rdap |
Direct registry queries via IANA bootstrap | No | Fast |
namesilo |
NameSilo API (requires API key) | Yes | Fast |
Configuration
Configuration is stored in:
- macOS/Linux:
~/.config/internet-names-mcp/config.json - Windows:
%APPDATA%/internet-names-mcp/config.json
API key lookup order:
- Config file (set via
--setup) - Environment variable (
NAMESILO_API_KEY) - macOS Keychain (legacy)
Development
Local Setup
git clone <repo-url> InternetNamesMCP
cd InternetNamesMCP
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
playwright install chromium
Running Tests
source .venv/bin/activate
python test_server.py
Project Structure
├── src/internet_names_mcp/
│ ├── __init__.py # CLI entry point
│ ├── 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
Troubleshooting
"sherlock not found"
Sherlock is installed automatically as a dependency. If you see this error, reinstall:
uvx --reinstall internet-names-mcp
"playwright not installed" or Chromium errors
Install Playwright browser:
playwright install chromium
Or with uvx:
uvx --from playwright install chromium
Twitter checks fail or timeout
Twitter/X checks use a headless browser which can be slow or blocked. If checks consistently fail, Twitter may be rate-limiting or blocking automated access.
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file internet_names_mcp-0.1.2.tar.gz.
File metadata
- Download URL: internet_names_mcp-0.1.2.tar.gz
- Upload date:
- Size: 47.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d171292261360c1a0a0771927d1fac81d01aee0b9d651f5aa7f3f41fd587bbd6
|
|
| MD5 |
be2d284bfa2bf5ff27fa6564ea61560b
|
|
| BLAKE2b-256 |
61a1bc2a8dd491a71ee08dbe361afe389ed3cc8fafad599a8dd577c695b7b770
|
File details
Details for the file internet_names_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: internet_names_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b9141e52e61761e6e3cf55eced7e419460e7323c2b2e77e2ca0c24ac9cb65a0
|
|
| MD5 |
fdb66cef7b12748c689ad40184653ecd
|
|
| BLAKE2b-256 |
78bd2e36ada71a00cd3a9ae2db9da97a45e2e3a1f863bfdf4332dd5ba7a6c109
|