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

Add to ~/.claude/settings.json:

{
  "mcpServers": {
    "internet-names": {
      "command": "uvx",
      "args": ["internet-names-mcp"]
    }
  }
}

That's it! The server works immediately using RDAP for domain lookups.

2. Optional: Configure NameSilo API (for domain pricing)

Run the setup command:

uvx internet-names-mcp --setup

Or set the API key via environment variable:

{
  "mcpServers": {
    "internet-names": {
      "command": "uvx",
      "args": ["internet-names-mcp"],
      "env": {
        "NAMESILO_API_KEY": "your-key-here"
      }
    }
  }
}

Get a free API key at: https://www.namesilo.com/account/api-manager

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.1.tar.gz (47.9 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.1-py3-none-any.whl (20.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: internet_names_mcp-0.1.1.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

Hashes for internet_names_mcp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3c716558ca40625bd1cce4021eba3669b49254b4942531bdad408454318d79dc
MD5 0b6b99b1ff1e9b5cc2139640cf68c20a
BLAKE2b-256 0735ab69703306993b18199c7efd9f0d1080fc657c8b0899fd187063ab0964e2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for internet_names_mcp-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 474c1fc1c8c6a15d85871d8e2d12b15e550a0019b49fd80d51816efd35435119
MD5 2d4f8aaa9326ef5f77a6c21e2b081c4e
BLAKE2b-256 47385db1cf33cba4d052b09ab772488b6a5471472a5e31880099fea09a335abb

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