A Model Context Protocol (MCP) server for comprehensive domain analysis: WHOIS, DNS records, and DNS health checks.
A Model Context Protocol (MCP) server for comprehensive domain analysis: WHOIS, DNS records, and DNS health checks.
The Domain Tools MCP Server is a Model Context Protocol (MCP) server that provides comprehensive domain analysis capabilities. It offers tools for WHOIS lookups, DNS record queries, and DNS health checking to help you analyze and monitor domain configurations.
.
βββ domain_tools_server.py # Main server implementation
βββ requirements.txt
βββ .gitignore
βββ README.md
βββ ...
git clone https://github.com/deshabhishek007/domain-tools-mcp-server.git
cd domain-tools-mcp-server
python3 -m venv domain-tools-env
source domain-tools-env/bin/activate
pip install -r requirements.txt
python -c "import mcp, dns.resolver, whois; print('All dependencies installed successfully!')"
python domain_tools_server.py
Or make it executable:
chmod +x domain_tools_server.py
./domain_tools_server.py
Create a service file /etc/systemd/system/domain-tools-mcp.service
:
[Unit]
Description=Domain Tools MCP Server
After=network.target
[Service]
Type=simple
User=your-username
WorkingDirectory=/path/to/your/project
Environment=PATH=/path/to/your/project/domain-tools-env/bin
ExecStart=/path/to/your/project/domain-tools-env/bin/python domain_tools_server.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable domain-tools-mcp.service
sudo systemctl start domain-tools-mcp.service
Create a Dockerfile
:
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY domain_tools_server.py .
EXPOSE 8080
CMD ["python", "domain_tools_server.py"]
Build and run:
docker build -t domain-tools-mcp .
docker run -p 8080:8080 domain-tools-mcp
The server implements the Model Context Protocol and can be integrated with any MCP-compatible client.
Example MCP Client Configuration:
{
"servers": {
"domain-tools": {
"command": "python",
"args": ["/path/to/domain_tools_server.py"],
"env": {}
}
}
}
Parameters:
domain
(string, required): Domain name to lookupExample Request:
{
"tool": "whois_lookup",
"arguments": {
"domain": "example.com"
}
}
Sample Output:
{
"domain": "example.com",
"registrar": "Example Registrar Inc.",
"creation_date": "2023-01-15T00:00:00Z",
"expiration_date": "2025-01-15T00:00:00Z",
"updated_date": "2024-01-15T00:00:00Z",
"status": ["clientTransferProhibited"],
"name_servers": ["ns1.example.com", "ns2.example.com"],
"days_until_expiry": 215
}
Parameters:
domain
(string, required): Domain name to queryrecord_types
(array, optional): DNS record types to query (default: ["A", "AAAA", "MX", "NS", "TXT", "CNAME", "SOA"]
)Example Request:
{
"tool": "dns_records",
"arguments": {
"domain": "example.com",
"record_types": ["A", "MX", "NS"]
}
}
Parameters:
domain
(string, required): Domain name to analyzeExample Request:
{
"tool": "dns_health_check",
"arguments": {
"domain": "example.com"
}
}
Parameters:
domain
(string, required): Domain name to analyzeExample Request:
{
"tool": "domain_analysis",
"arguments": {
"domain": "example.com"
}
}
Each tool follows a JSON schema for input. See the code for full details.
All tools return responses in the following format:
[
{
"type": "text",
"text": "Tool-specific formatted output"
}
]
You can customize the DNS resolver in the server code:
self.dns_resolver.nameservers = ['8.8.8.8', '8.8.4.4']
self.dns_resolver.timeout = 10
self.dns_resolver.lifetime = 30
You can configure the server using environment variables:
export DNS_TIMEOUT=10
export DNS_LIFETIME=30
export WHOIS_TIMEOUT=30
export SERVER_NAME="domain-tools"
export SERVER_VERSION="1.0.0"
Import Errors:
Run pip install --upgrade mcp dnspython python-whois pydantic
.
DNS Resolution Failures:
WHOIS Lookup Failures:
Permission Errors:
Enable debug logging by adding this to your server:
import logging
logging.basicConfig(level=logging.DEBUG)
This project is licensed under the MIT License. See the LICENSE file for details.