DNS MCP Server
by stanibaj
README.md
# DNS MCP Server
A comprehensive DNS query server built with FastMCP that provides tools to query all types of DNS records and gather complete domain information.
## Features
### DNS Record Query Tools
- **A Records** - Query IPv4 addresses
- **AAAA Records** - Query IPv6 addresses
- **MX Records** - Query mail exchange servers with priorities
- **TXT Records** - Query text records (SPF, DKIM, DMARC, verification)
- **NS Records** - Query authoritative nameservers
- **CNAME Records** - Query canonical name aliases
- **SOA Records** - Query Start of Authority information
- **PTR Records** - Reverse DNS lookups
- **SRV Records** - Query service location records
- **CAA Records** - Query Certificate Authority Authorization
- **DS/DNSKEY Records** - Check DNSSEC configuration
### Advanced Tools
- **Query All Records** - Get all DNS records for a domain in one call
- **DNSSEC Check** - Verify DNSSEC configuration
- **WHOIS-style Lookup** - Comprehensive domain information via DNS
- **Domain Availability Check** - Check if domain has DNS configured
- **DNS Delegation Trace** - Trace delegation chain from root to authoritative nameservers
## Installation
### Local Development
1. Install dependencies:
```bash
pip install -r requirements.txt
```
2. Run the server locally:
```bash
python dns_server.py
```
The server will start on `http://localhost:8000` by default.
### Deploy to FastMCP Cloud
1. Install FastMCP CLI if you haven't already:
```bash
pip install fastmcp
```
2. Login to FastMCP Cloud:
```bash
fastmcp login
```
3. Deploy the server:
```bash
fastmcp deploy dns_server.py
```
4. The CLI will provide you with a public URL where your MCP server is accessible.
## Usage Examples
### Using with MCP Client
```python
import asyncio
from fastmcp import Client
# Replace with your deployed URL
client = Client("https://your-server.fastmcp.app/mcp")
async def main():
async with client:
# Query A records
result = await client.call_tool("query_a_record", {"domain": "google.com"})
print(result)
# Query all records
result = await client.call_tool("query_all_records", {"domain": "example.com"})
print(result)
# Reverse DNS lookup
result = await client.call_tool("query_ptr_record", {"ip_address": "8.8.8.8"})
print(result)
# Check DNSSEC
result = await client.call_tool("check_dnssec", {"domain": "cloudflare.com"})
print(result)
asyncio.run(main())
```
### Available Tools
#### Basic DNS Queries
- `query_a_record(domain: str)` - Get IPv4 addresses
- `query_aaaa_record(domain: str)` - Get IPv6 addresses
- `query_mx_record(domain: str)` - Get mail servers
- `query_txt_record(domain: str)` - Get TXT records
- `query_ns_record(domain: str)` - Get nameservers
- `query_cname_record(domain: str)` - Get CNAME alias
- `query_soa_record(domain: str)` - Get SOA information
- `query_caa_record(domain: str)` - Get CAA records
#### Advanced Queries
- `query_ptr_record(ip_address: str)` - Reverse DNS lookup
- `query_srv_record(service: str, protocol: str, domain: str)` - Service location
- `query_all_records(domain: str)` - Get all DNS records at once
- `check_dnssec(domain: str)` - Check DNSSEC status
- `whois_lookup(domain: str)` - Comprehensive domain info
- `check_domain_availability(domain: str)` - Check if domain is configured
- `trace_dns_delegation(domain: str)` - Trace delegation chain
## DNS Resolver Configuration
The server uses the following public DNS resolvers:
- Google DNS: 8.8.8.8, 8.8.4.4
- Cloudflare DNS: 1.1.1.1
Timeout: 5 seconds
Lifetime: 10 seconds
## Response Format
All tools return structured JSON responses with:
- `success`: Boolean indicating if query succeeded
- `domain`/`ip_address`: The queried domain or IP
- `record_type`: Type of DNS record
- `records`: Array of record data with TTL information
- `nameserver`: The nameserver that provided the response
- `error`: Error message if query failed
### Example Response
```json
{
"domain": "example.com",
"record_type": "A",
"records": [
{
"data": "93.184.216.34",
"ttl": 86400,
"type": "A"
}
],
"nameserver": "8.8.8.8",
"success": true
}
```
## Use Cases
- **Domain Investigation** - Research domain DNS configuration
- **Email Configuration** - Check MX and SPF/DKIM/DMARC records
- **Security Analysis** - Verify DNSSEC, CAA records
- **Network Troubleshooting** - Reverse lookups, delegation tracing
- **Domain Monitoring** - Track DNS changes and availability
- **Migration Planning** - Document current DNS setup
## Error Handling
The server gracefully handles DNS query failures and returns structured error responses:
```json
{
"domain": "nonexistent.example",
"record_type": "A",
"error": "The DNS query name does not exist: nonexistent.example.",
"success": false
}
```
## License
MIT License
## Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues