A Model Context Protocol (MCP) server that exposes the full WhoisFreaks API suite as AI-callable tools. Works with Claude Desktop, Cursor, Windsurf, VS Code, Continue, Zed, and any other MCP-compatible AI client.
Two ways to run it - pick what fits your setup:
| Method | Requires | Best for |
|---|---|---|
| Docker (pre-built image) | Docker only | Everyone — no Java or Maven neededRecommended |
| Build from source | Java 17 + Maven | Contributors / custom builds |
ⓘ Tip
Once running, connect it to any MCP client via stdio (local) or HTTP/SSE on port 3100 (remote VM).
The WHOIS Domain API delivers structured JSON or XML data with registry and registrar details when available. It organizes ownership information into separate objects like registrant, technical, billing, and administrative details alongside nameservers and key domain dates such as registration and expiry. The WHOIS Domain API’s structured format ensures seamless integration into your systems.
| Tool | Description |
|---|---|
| liveWhoisLookup | Real-time WHOIS data for any domain — registrar, registrant, dates, nameservers |
| whoisHistory | Complete ownership history timeline for a domain |
| reverseWhoisLookup | Find all domains registered by an email address, keyword, owner name, or company |
| Tool | Description |
|---|---|
| ipWhoisLookup | WHOIS registration data for any IPv4 or IPv6 address |
| asnWhoisLookup | WHOIS data for an Autonomous System Number (e.g. AS15169) |
| Tool | Description |
|---|---|
| dnsLookup | Live DNS records - A, AAAA, MX, NS, CNAME, SOA, TXT, SPF, or all |
| dnsHistory | Historical DNS records with full change timeline |
| reverseDnsLookup | Find all domains pointing to a given IP or nameserver |
| Tool | Description |
|---|---|
| ipGeolocation | Country, city, region, ISP, and coordinates for any IP address |
| ipSecurity | VPN, proxy, Tor exit node, bot, and threat intelligence for any IP |
| Tool | Description |
|---|---|
| domainAvailability | Check if a domain is available to register, with optional suggestions |
| subdomainLookup | Enumerate all known subdomains for a domain, with status and date filters |
| domainDiscovery | Find domains by keyword, including typosquatting and similar variants |
| Tool | Description |
|---|---|
| sslLookup | SSL/TLS certificate details - issuer, expiry, SANs, chain, and raw output |
No Java or Maven required. Pull the pre-built image directly from Docker Hub and run.
Get your free API key first: whoisfreaks.com/signup
docker run -d --name whoisfreaks-mcp --restart unless-stopped -p 3100:3100 -e WHOISFREAKS_API_KEY=your-api-key-here whoisfreaks/mcp-server:latest
The MCP gateway is now live at http://localhost:3100/sse.
Create a docker-compose.yml
services:
whoisfreaks-mcp:
image: whoisfreaks/mcp-server:latest
container_name: whoisfreaks-mcp
restart: unless-stopped
ports:
- "3100:3100"
environment:
WHOISFREAKS_API_KEY: your-api-key-hereStart it:
docker compose up -d
Or use a .env file instead of hardcoding the key (recommended):
# Create .env file (never commit this to git) echo "WHOISFREAKS_API_KEY=your-api-key-here" > .env docker compose up -d
# Container should show as "Up"
docker ps
# SSE endpoint should respond
curl http://localhost:3100/health
# → {"status":"ok"}
# List all 14 registered tools
curl http://localhost:3100/tools/listClaude Desktop requires stdio transport. Override the Docker entrypoint to bypassmcp-proxy and run the JAR directly:
{
"mcpServers": {
"whoisfreaks": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
}
}Only needed if you want to modify the code or build a custom version.
| Requirement | Minimum Version | Notes |
|---|---|---|
| Java (JDK) | 17 | Check withjava -version |
| Maven | 3.8 | Check withmvn -version |
| WhoisFreaks API Key | — | Get yours at whoisfreaks.com/signup |
git clone https://github.com/whoisfreaks/whoisfreaks-mcp-server.git cd whoisfreaks-mcp-server mvn clean package -q
This produces a single self-contained fat JAR:
target/whoisfreaks-mcp-server-1.0.0.jar
ⓘ Tip
Note the absolute path to this JAR — you will need it in the platform configs below. Example:
/Users/yourname/whoisfreaks-mcp-server/target/whoisfreaks-mcp-server-1.0.0.jarThe most popular MCP client. Claude Desktop launches the MCP server as a subprocess on startup and communicates via stdio - it does not support SSE/HTTP URLs.
Config file location:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%Claudeclaude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"whoisfreaks": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
}
}Docker must be running before you open Claude Desktop. The image is pulled automatically on first use.
{
"mcpServers": {
"whoisfreaks": {
"command": "java",
"args": ["-jar", "/absolute/path/to/whoisfreaks-mcp-server-1.0.0.jar"],
"env": {
"WHOISFREAKS_API_KEY": "your-api-key-here"
}
}
}
}Verify it works: Type Who owns google.com? and Claude will automatically callliveWhoisLookup.
Cursor supports both stdio and SSE transports. Config file:~/.cursor/mcp.json
{
"mcpServers": {
"whoisfreaks": {
"url": "http://localhost:3100/sse",
"transport": "sse"
}
}
}Start the Docker container first:docker run -d -p 3100:3100 -e WHOISFREAKS_API_KEY=your-key whoisfreaks/mcp-server:latest
{
"mcpServers": {
"whoisfreaks": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
}
}{
"mcpServers": {
"whoisfreaks": {
"command": "java",
"args": ["-jar", "/absolute/path/to/whoisfreaks-mcp-server-1.0.0.jar"],
"env": {
"WHOISFREAKS_API_KEY": "your-api-key-here"
}
}
}
}Steps
~/.cursor/mcp.jsonwith your chosen optionCmd+L) → you should see a tools indicator showing WhoisFreaks toolsCheck the SSL certificate for github.comWindsurf (by Codeium) supports MCP via its Cascade AI sidebar.
Config file location:
| OS | Path |
|---|---|
| macOS | ~/.codeium/windsurf/mcp_config.json |
| Windows | %USERPROFILE%.codeiumwindsurfmcp_config.json |
| Linux | ~/.codeium/windsurf/mcp_config.json |
{
"mcpServers": {
"whoisfreaks": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
}
}{
"mcpServers": {
"whoisfreaks": {
"command": "java",
"args": ["-jar", "/absolute/path/to/whoisfreaks-mcp-server-1.0.0.jar"],
"env": {
"WHOISFREAKS_API_KEY": "your-api-key-here"
}
}
}
}Steps
Find all subdomains of tesla.comNote:Windsurf requires Cascade to be in Write mode for tool use. Toggle it from the Cascade header if tools are not being called.
VS Code supports MCP tools through the GitHub Copilot extension (Chat Participants / Tools feature).
Config file(.vscode/mcp.json in your workspace, or~/.vscode/mcp.jsonglobally):
{
"servers": {
"whoisfreaks": {
"type": "sse",
"url": "http://localhost:3100/sse"
}
}
}Start the container first:docker run -d -p 3100:3100 -e WHOISFREAKS_API_KEY=your-key whoisfreaks/mcp-server:latest
{
"servers": {
"whoisfreaks": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
}
}{
"servers": {
"whoisfreaks": {
"type": "stdio",
"command": "java",
"args": ["-jar", "/absolute/path/to/whoisfreaks-mcp-server-1.0.0.jar"],
"env": {
"WHOISFREAKS_API_KEY": "your-api-key-here"
}
}
}
}Steps
Ctrl+Shift+I/Cmd+Shift+I)Agent modeusing the dropdownToolsbutton — WhoisFreaks tools should appear in the listWhat are the MX records for github.com?Requirement: VS Code 1.99+ and GitHub Copilot Chat extension are required for MCP tool support.
Continue is an open-source AI coding assistant with MCP support for VS Code and JetBrains IDEs.
Config file(~/.continue/config.json):
{
"mcpServers": [
{
"name": "whoisfreaks",
"url": "http://localhost:3100/sse",
"transport": "sse"
}
]
}Start the container first:docker run -d -p 3100:3100 -e WHOISFREAKS_API_KEY=your-key whoisfreaks/mcp-server:latest
{
"mcpServers": [
{
"name": "whoisfreaks",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
]
}{
"mcpServers": [
{
"name": "whoisfreaks",
"command": "java",
"args": ["-jar", "/absolute/path/to/whoisfreaks-mcp-server-1.0.0.jar"],
"env": {
"WHOISFREAKS_API_KEY": "your-api-key-here"
}
}
]
}Steps
~/.continue/config.jsonwith your chosen optionCmd+Shift+P → Reload Window)Look up IP geolocation for 1.1.1.1Zed has a built-in AI assistant with MCP support via itsassistantconfiguration.
Config file(~/.config/zed/settings.json):
{
"assistant": {
"mcp_servers": {
"whoisfreaks": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "WHOISFREAKS_API_KEY=your-api-key-here",
"--entrypoint", "java",
"whoisfreaks/mcp-server:latest",
"-jar", "app.jar"
]
}
}
}
}{
"assistant": {
"mcp_servers": {
"whoisfreaks": {
"command": "java",
"args": ["-jar", "/absolute/path/to/whoisfreaks-mcp-server-1.0.0.jar"],
"env": {
"WHOISFREAKS_API_KEY": "your-api-key-here"
}
}
}
}
}Steps
Zedmenu →Settings(orCmd+,)mcp_serversblock to your existing settings JSON using your chosen optionCmd+?) → tools will be listed under the tools indicatorIs the domain myapp.io available?Once configured in any client above, try these prompts:
# WHOIS Who owns the domain apple.com? Give me full WHOIS details. Show me the complete ownership history for whoisfreaks.com. Find all domains registered by [email protected]. # IP & ASN WHOIS What organization owns the IP address 8.8.8.8? Look up ASN information for AS15169. # DNS What are the MX and NS records for github.com? Has facebook.com changed its IP addresses in the last 2 years? (DNS history) Which domains are pointing to the IP 104.21.0.0? (reverse DNS) # IP Intelligence Where is 1.1.1.1 located? What ISP runs it? Is 185.220.101.45 a Tor exit node or a VPN? # Domain Tools Is mycompany.io available to register? Suggest 5 alternatives. List all known subdomains of tesla.com. Find domains similar to 'google' — possible typosquatting targets. # SSL Check the SSL certificate for github.com — who issued it and when does it expire?
| Variable | Required | Description |
|---|---|---|
WHOISFREAKS_API_KEY | Yes | Your API key from whoisfreaks.com/billing. All 14 tools callapi.whoisfreaks.comdirectly using this key — no other variables are needed. |
| Problem | Cause | Fix |
|---|---|---|
WHOISFREAKS_API_KEY is not set | Missing env var | Add-e WHOISFREAKS_API_KEY=your-keyto the Docker command, or add it to theenvblock in your client config |
Unauthorized (HTTP 401/403) | Invalid or inactive API key | Verify the key at billing.whoisfreaks.com |
No data found (HTTP 404) | Domain/IP/ASN not in database | Double-check the input value is correct |
Rate limit reached (HTTP 429) | Too many requests | Slow down or upgrade your plan |
Credit limit exceeded (HTTP 413) | Credits exhausted | Add credits at billing.whoisfreaks.com |
Timeout (HTTP 408) | Upstream WHOIS server is slow | Retry - some TLDs have slow WHOIS servers |
| Problem | Cause | Fix |
|---|---|---|
Cannot connect to Docker daemon | Docker Desktop not running | Open Docker Desktop and wait for the engine to start |
| Container exits immediately | Missing API key or wrong entrypoint | Check logs:docker logs whoisfreaks-mcp |
port 3100 already in use | Another process on port 3100 | Stop it:docker rm -f whoisfreaks-mcpthen retry |
no such image | Image not pulled yet | Rundocker pull whoisfreaks/mcp-server:latestfirst |
| Claude Desktop: tools not appearing with Docker config | Docker not in PATH seen by the app | Use the full Docker path:/usr/local/bin/dockeras the command |
lstat deploy: no such file or directory(CI/CD) | Relative path issue in GitHub Actions | Use${{ github.workspace }}/deploy/Dockerfilefor absolute paths |
Gateway connection refused on port 3100 | Container not running or port not mapped | Run docker ps- ensure-p 3100:3100is in the run command |
| SSE connection drops after a few seconds | Nginx proxy timeout | Addproxy_read_timeout 3600s;to your Nginx location block |
| Problem | Cause | Fix |
|---|---|---|
| Tools not visible in client | Config not saved or client not restarted | Save config → fully quit and reopen the client |
UnsupportedClassVersionError(JAR mode) | Java version too old | Upgrade to Java 17+ (java -version to check) |
| Wrong JAR path | Relative path in config | Use the full absolute path to the JAR |
| Cursor shows tools but doesn't call them | Agent mode not enabled | Switch Cursor to Agent mode, not Chat mode |
| Claude Desktop skips whoisfreaks entry | SSE URL used instead of stdio | Claude Desktop requirescommand/args- not url. Use the Docker stdio config shown above |
| Windsurf tools not called | Wrong Cascade mode | Switch Cascade to Write mode from the Cascade header |