Skip to main content

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:

  1. Create an account at namesilo.com (or log in)
  2. Go to API Manager: https://www.namesilo.com/account/api-manager
  3. Click Generate New API Key
  4. 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:

  1. Config file (set via --setup)
  2. Environment variable (NAMESILO_API_KEY)
  3. 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

internet_names_mcp-0.1.4.tar.gz (48.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

internet_names_mcp-0.1.4-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file internet_names_mcp-0.1.4.tar.gz.

File metadata

  • Download URL: internet_names_mcp-0.1.4.tar.gz
  • Upload date:
  • Size: 48.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for internet_names_mcp-0.1.4.tar.gz
Algorithm Hash digest
SHA256 1053b645c6a8027f6267047b0b018c521c18be015650e0a865260bd27239326d
MD5 ecc01eb39c61cf87f9da5fdf393fe3e2
BLAKE2b-256 9a9d2f14137743915304c8cf90ad71ee19da1eda39295a5b611b6f35d72d7b86

See more details on using hashes here.

File details

Details for the file internet_names_mcp-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for internet_names_mcp-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 104eede0cd83f7f5d4a8eee0adcd34c853ae27aa78e53d8e11e43771b1444102
MD5 2b8332104c42f2a6c30c4e96421efd44
BLAKE2b-256 21f96eca88eb09fda26f878d295d89297fe40ae19d4749cdf8d1c1c4dc66e821

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page