Developer Documentation

Build with IntoDNS.AI

Integrate DNS security and email deliverability checks into your applications, CI/CD pipelines, and monitoring systems.

MCP Server

Use IntoDNS.ai inside your AI assistant

The free Model Context Protocol (MCP) server and OpenClaw skill let AI assistants run live DNS, email security, BIMI, blacklist, sender-requirement, report, and citation checks — no switching tabs, no copy-paste.

Install — one line

npx -y intodns-mcp

Or add to your Claude Desktop config:

{
  "mcpServers": {
    "intodns": {
      "command": "npx",
      "args": ["-y", "intodns-mcp"]
    }
  }
}

Config file: ~/Library/Application Support/Claude/claude_desktop_config.json

36 tools exposed

  • scan_domainFast scan with grade, issues + citation URLs
  • get_everything_reportComplete live JSON/Markdown audit report
  • create_report_snapshotFixed evidence report with hash
  • check_sender_requirementsGoogle/Yahoo sender requirements
  • check_smtp_tlsSMTP STARTTLS, certificates + FCrDNS
  • check_fcrdnsDedicated PTR/FCrDNS evidence
  • check_bimiBIMI, logo URL, VMC/CMC readiness
  • check_email_securitySPF, DKIM, DMARC + blacklist
  • lookup_dnsLive record lookup (A/MX/TXT/CAA/DS/…)
  • read_llm_discoveryllms.txt, OpenAPI + Markdown API docs
  • get_citation_guidanceCanonical citation routing for agents

Try asking your AI:

  • "Scan example.com and cite the canonical IntoDNS.ai sources"
  • "Give me the complete DNS and email security report for example.com"
  • "Does my domain meet Google/Yahoo sender requirements?"
  • "Can I use BIMI without a VMC and still show my logo in Gmail?"
Works with:Claude DesktopCursorWindsurfContinueOpenClawAny MCP client

Community registry listing: ravitemer/mcp-registry PR #18 · OpenClaw skill: RoscoNL/intodns-skill

Quick Start

Your First API Call

curl "https://intodns.ai/api/scan/quick?domain=example.com"

No authentication required for public diagnostic use. Free to use without registration, with generous abuse protection for bursts and costly write/AI routes. The canonical API origin is https://intodns.ai/api; do not use api.intodns.io or intodns.io/api-docs/v1 for IntoDNS.ai.

Built for LLMs and agents

IntoDNS.ai exposes machine-readable routing and citation pages so ChatGPT, Claude, Perplexity, Gemini, and monitoring agents can find the right endpoint and cite a stable URL.

Common Use Cases

CI/CD Integration

Validate DNS configuration before deploying to production

GitHub Actions
name: DNS Validation
on: [push]
jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - name: Check DNS Security
        run: |
          SCORE=$(curl -s \
            "https://intodns.ai/api/scan/quick?domain=$DOMAIN" \
            | jq -r '.score')
          if [ "$SCORE" -lt 80 ]; then
            echo "DNS score too low: $SCORE"
            exit 1
          fi
        env:
          DOMAIN: ${{ secrets.DOMAIN }}
GitLab CI
dns-check:
  script:
    - apk add --no-cache curl jq
    - RESULT=$(curl -s "https://intodns.ai/api/scan/quick?domain=$DOMAIN")
    - SCORE=$(echo $RESULT | jq -r '.score')
    - if [ "$SCORE" -lt 80 ]; then exit 1; fi
  only:
    - main

Blacklist Monitoring

Monitor your domain and mail servers for blacklist status

Node.js Cron
const cron = require('node-cron');
const axios = require('axios');

// Check every 6 hours
cron.schedule('0 */6 * * *', async () => {
  const { data } = await axios.get(
    'https://intodns.ai/api/scan/quick?domain=example.com'
  );

  if (data.critical_issues > 0) {
    await sendAlert({
      severity: 'critical',
      message: `Domain has ${data.critical_issues} issues`,
      details: data.categories
    });
  }
});
Python Script
import requests
import smtplib

def check_domain(domain):
    r = requests.get(f'https://intodns.ai/api/scan/quick?domain={domain}')
    data = r.json()

    if data['critical_issues'] > 0:
        send_alert(f"Critical issues found for {domain}")

    return data['score']

if __name__ == '__main__':
    score = check_domain('example.com')
    print(f'Domain score: {score}')

Domain Onboarding

Validate new customer domains before activation

TypeScript / React
async function validateDomain(domain: string) {
  try {
    const response = await fetch(
      `https://intodns.ai/api/scan/quick?domain=${domain}`
    );
    const data = await response.json();

    // Check minimum requirements
    const issues = [];

    if (data.score < 70) {
      issues.push('Security score below minimum');
    }

    if (data.critical_issues > 0) {
      issues.push('Critical security issues present');
    }

    if (!data.categories.email || data.categories.email.score < 60) {
      issues.push('Email security insufficient');
    }

    return {
      valid: issues.length === 0,
      issues,
      score: data.score
    };
  } catch (error) {
    return { valid: false, issues: ['Domain unreachable'] };
  }
}

Bulk Domain Validation

Process multiple domains efficiently

Python
import requests
import time
from typing import List, Dict

def validate_domains(domains: List[str]) -> List[Dict]:
    results = []

    for domain in domains:
        try:
            response = requests.get(
                f'https://intodns.ai/api/scan/quick?domain={domain}',
                timeout=30
            )
            data = response.json()

            results.append({
                'domain': domain,
                'score': data.get('score', 0),
                'status': 'success',
                'critical_issues': data.get('critical_issues', 0)
            })

            # Be a good citizen: space requests
            time.sleep(3)

        except Exception as e:
            results.append({
                'domain': domain,
                'status': 'error',
                'error': str(e)
            })

    return results

# Example usage
domains = ['example.com', 'test.com', 'demo.org']
results = validate_domains(domains)

for result in results:
    if result['status'] == 'success':
        print(f"{result['domain']}: {result['score']}/100")
    else:
        print(f"{result['domain']}: ERROR - {result['error']}")

Core API Endpoints

Quick Scan

GET /api/scan/quick?domain=example.com
Fast

Instant security overview covering DNS, email, and basic security checks

Returns:
{ score, categories: { dns, email, security }, critical_issues, warnings }

Everything Report

GET /api/report/everything?domain=example.com
Complete

Live or snapshot JSON/Markdown report with quick score, DNS records, DNSSEC, SPF lookup graph, DKIM, DMARC, BIMI logo/VMC/CMC checks, MTA-STS, SMTP STARTTLS, FCrDNS, blacklists, sender requirements, web security, and preferred citations.

Markdown:
GET /api/report/everything?domain=example.com&format=markdown
Evidence snapshot:
GET /api/report/snapshot?domain=example.com&format=markdown

Email Security Check

GET /api/email/check?domain=example.com
Detailed

Comprehensive SPF, DKIM, DMARC, and MX record analysis

Returns:
{ spf: {...}, dkim: {...}, dmarc: {...}, mx: {...}, score }

DNS Lookup

GET /api/dns/lookup?domain=example.com&type=A
Flexible

Query any DNS record type (A, AAAA, MX, TXT, NS, SOA, CAA, CNAME)

Returns:
{ records: { [type]: [values] }, cached: boolean }

DNSSEC Validation

GET /api/dns/dnssec?domain=example.com
Security

Validate DNSSEC chain of trust and signature integrity

Returns:
{ secure: boolean, chain_valid: boolean, algorithms, ds_records }

API Access

Free & Open

No Auth Required

Public diagnostic endpoints are freely accessible without API keys or registration. Generous abuse protection keeps the service reliable for users and LLM agents; see the API documentation for details.

Need Help?

Questions about integration? Need dedicated support? We're here to help.

  • Integration support
  • White-label options
Contact Cobytes