Skip to content

MCP server reference

The Model Context Protocol lets AI assistants call tools. Add this server and your assistant can look up DNS, check email security, inspect certificates and more – with the same findings and fixes as this site.

Connect your assistant

Server URL https://thenetworkery.com/mcp
Settings → Connectors → Add custom connector. Name it and paste the URL:
https://thenetworkery.com/mcp
claude mcp add --transport http thenetworkerycom https://thenetworkery.com/mcp
Add a custom connector (developer mode) with this URL and no authentication:
https://thenetworkery.com/mcp
// ~/.cursor/mcp.json
{
    "mcpServers": {
        "thenetworkerycom": {
            "url": "https://thenetworkery.com/mcp"
        }
    }
}
// .vscode/mcp.json
{
    "servers": {
        "thenetworkerycom": {
            "type": "http",
            "url": "https://thenetworkery.com/mcp"
        }
    }
}
// ~/.gemini/settings.json
{
    "mcpServers": {
        "thenetworkerycom": {
            "httpUrl": "https://thenetworkery.com/mcp"
        }
    }
}
Choose the "Streamable HTTP" (or "HTTP") transport, no authentication, and this URL:
https://thenetworkery.com/mcp

Then ask in plain words, for example: “Is email for example.com set up properly?” or “Which ports does the certificate on example.com cover, and when does it expire?”

Server details

Endpoint
https://thenetworkery.com/mcp
Transport
Streamable HTTP: JSON-RPC by POST, answers as JSON. There is no GET event stream (405) and no older HTTP+SSE endpoint.
Protocol versions
2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26
Authentication
None. Every tool reads public information only. The webhook tools use the secret key that create_webhook_url returns.
Rate limit
60 requests a minute per IP address – shared by everyone using the same AI service, so a busy hour may see HTTP 429.
Capabilities
27 tools, all read-only (readOnlyHint), no resources or prompts. Plus 3 webhook tools; create_webhook_url makes a new webhook URL, the others read it.
Testing
Check this server with the MCP server tester · Test your own MCP client

What tools return

Each call returns one text block written for the model: the verdict, each finding with its fix and any suggested record, the raw data as JSON, and a link to the same result on this site so you can check it yourself. Invalid input comes back as a tool error (isError) with the reason, so the assistant can correct itself.

dns_lookup (shortened)

Verdict: PASS
- [pass] 1 MX record found.
- [info] …

Data:
{
  "name": "example.com",
  "records": { "MX": [ … ] }
}

Open in a browser: https://thenetworkery.com/tools/dns-lookup?name=example.com&type=MX

Raw protocol

For building your own client: start a session with initialize, then call tools. The Mcp-Session-Id header from the first answer goes on later requests.

1. initialize

curl -s https://thenetworkery.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'

2. tools/call

curl -s https://thenetworkery.com/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'MCP-Protocol-Version: 2025-11-25' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"dns_lookup","arguments":{"name":"example.com","type":"MX"}}}'

Webhook tools

Give your agent a URL to receive callbacks. create_webhook_url makes a webhook URL that records every request sent to it; the agent hands that URL to a payment provider, CI job, OAuth flow or the code it is testing, then reads what arrived with list_webhook_requests and get_webhook_request.

Keys
create_webhook_url returns a bin id and a secret key; the other two tools need both. The answer also has a private link so a person can watch the requests live in a browser.
Waiting
list_webhook_requests answers at once, or waits up to 10 seconds for a new request with wait_seconds. For longer waits the agent calls it again with after_id.
Limits
30 new webhook URLs an hour per IP address – an AI service's servers share one address for many users. URLs last 7 days and keep their newest 500 requests.

A typical exchange (shortened)

1. create_webhook_url {}
   → Capture URL: https://thenetworkery.com/h/abc123def456
     Bin id: abc123def456   Secret key: N3x…
2. (the agent gives the capture URL to the service that will call back, and triggers it)
3. list_webhook_requests { "bin": "abc123def456", "key": "N3x…", "wait_seconds": 10 }
   → #41 POST /orders  (…)
     Headers: …
     Body (8 bytes): {"id":7}
     … Next time use after_id=41 to get only newer requests.
4. get_webhook_request { "bin": "abc123def456", "key": "N3x…", "request_id": 41 }

create_webhook_url

Create a webhook URL creates a URL Open the tool →

Creates a public HTTPS URL that records every request sent to it (any method, any sub-path, headers, query and body), so you can receive webhooks and callbacks without a server of your own. Use it when something needs a URL to call back – a payment provider, a CI job, an OAuth or API integration, your own code under test – then give that URL to the sender and read what arrived with list_webhook_requests. Returns the capture URL, the bin id and a secret key (pass both to the other webhook tools), a private page link for a person to watch requests live in a browser, and the expiry (7 days). The URL answers every request with HTTP 200 {"ok":true} unless you set response_status/response_type/response_body.

ArgumentTypeDescription
name string Optional label for the bin, e.g. what it is for (at most 80 characters).
response_status integer HTTP status the URL answers with. Default 200.
response_type string Content-Type of the answer. Default application/json.
response_body string Body of the answer. Default {"ok":true}.
Tool definition (tools/list)
{
    "name": "create_webhook_url",
    "title": "Create a webhook URL",
    "description": "Creates a public HTTPS URL that records every request sent to it (any method, any sub-path, headers, query and body), so you can receive webhooks and callbacks without a server of your own. Use it when something needs a URL to call back – a payment provider, a CI job, an OAuth or API integration, your own code under test – then give that URL to the sender and read what arrived with list_webhook_requests. Returns the capture URL, the bin id and a secret key (pass both to the other webhook tools), a private page link for a person to watch requests live in a browser, and the expiry (7 days). The URL answers every request with HTTP 200 {\"ok\":true} unless you set response_status/response_type/response_body.",
    "inputSchema": {
        "properties": {
            "name": {
                "description": "Optional label for the bin, e.g. what it is for (at most 80 characters).",
                "type": "string"
            },
            "response_status": {
                "description": "HTTP status the URL answers with. Default 200.",
                "minimum": 200,
                "maximum": 599,
                "type": "integer"
            },
            "response_type": {
                "description": "Content-Type of the answer. Default application/json.",
                "enum": [
                    "application/json",
                    "text/plain",
                    "application/xml",
                    "text/xml",
                    "text/csv",
                    "application/x-www-form-urlencoded"
                ],
                "type": "string"
            },
            "response_body": {
                "description": "Body of the answer. Default {\"ok\":true}.",
                "type": "string"
            }
        },
        "type": "object"
    },
    "annotations": {
        "title": "Create a webhook URL",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
    }
}

list_webhook_requests

List requests received by a webhook URL read-only Open the tool →

Lists the requests a webhook URL from create_webhook_url has received, oldest first, with method, path, query, headers and body (long bodies shortened; get_webhook_request has them in full). Pass after_id = the last id you have seen to get only newer requests; the answer ends with the id to use next time. Set wait_seconds (up to 10) to wait briefly for a request to arrive, e.g. right after triggering the sender; for longer waits call it again rather than waiting in one call.

ArgumentTypeDescription
bin* string The bin id from create_webhook_url (e.g. abc123def456). Its capture URL or private bin page URL also work.
key string The bin's secret key from create_webhook_url. Not needed if "bin" is the private bin page URL, which contains it.
after_id integer Only requests with a higher id than this. Default 0: from the oldest kept request.
limit integer Most requests to return. Default 10.
wait_seconds integer If nothing newer has arrived yet, wait up to this many seconds for it. Default 0 (answer at once).
Tool definition (tools/list)
{
    "name": "list_webhook_requests",
    "title": "List requests received by a webhook URL",
    "description": "Lists the requests a webhook URL from create_webhook_url has received, oldest first, with method, path, query, headers and body (long bodies shortened; get_webhook_request has them in full). Pass after_id = the last id you have seen to get only newer requests; the answer ends with the id to use next time. Set wait_seconds (up to 10) to wait briefly for a request to arrive, e.g. right after triggering the sender; for longer waits call it again rather than waiting in one call.",
    "inputSchema": {
        "properties": {
            "bin": {
                "description": "The bin id from create_webhook_url (e.g. abc123def456). Its capture URL or private bin page URL also work.",
                "type": "string"
            },
            "key": {
                "description": "The bin's secret key from create_webhook_url. Not needed if \"bin\" is the private bin page URL, which contains it.",
                "type": "string"
            },
            "after_id": {
                "description": "Only requests with a higher id than this. Default 0: from the oldest kept request.",
                "minimum": 0,
                "type": "integer"
            },
            "limit": {
                "description": "Most requests to return. Default 10.",
                "minimum": 1,
                "maximum": 50,
                "type": "integer"
            },
            "wait_seconds": {
                "description": "If nothing newer has arrived yet, wait up to this many seconds for it. Default 0 (answer at once).",
                "minimum": 0,
                "maximum": 10,
                "type": "integer"
            }
        },
        "type": "object",
        "required": [
            "bin"
        ]
    },
    "annotations": {
        "title": "List requests received by a webhook URL",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
    }
}

get_webhook_request

Get one request received by a webhook URL read-only Open the tool →

Returns one request captured by a webhook URL from create_webhook_url, in full: method, path, query, every header the sender set, the body (base64 if it is binary), and a curl command that sends the same request again. Use it after list_webhook_requests when you need the exact bytes, e.g. to check a signature header against the body.

ArgumentTypeDescription
bin* string The bin id from create_webhook_url (e.g. abc123def456). Its capture URL or private bin page URL also work.
key string The bin's secret key from create_webhook_url. Not needed if "bin" is the private bin page URL, which contains it.
request_id* integer The request id (the #number from list_webhook_requests).
Tool definition (tools/list)
{
    "name": "get_webhook_request",
    "title": "Get one request received by a webhook URL",
    "description": "Returns one request captured by a webhook URL from create_webhook_url, in full: method, path, query, every header the sender set, the body (base64 if it is binary), and a curl command that sends the same request again. Use it after list_webhook_requests when you need the exact bytes, e.g. to check a signature header against the body.",
    "inputSchema": {
        "properties": {
            "bin": {
                "description": "The bin id from create_webhook_url (e.g. abc123def456). Its capture URL or private bin page URL also work.",
                "type": "string"
            },
            "key": {
                "description": "The bin's secret key from create_webhook_url. Not needed if \"bin\" is the private bin page URL, which contains it.",
                "type": "string"
            },
            "request_id": {
                "description": "The request id (the #number from list_webhook_requests).",
                "minimum": 1,
                "type": "integer"
            }
        },
        "type": "object",
        "required": [
            "bin",
            "request_id"
        ]
    },
    "annotations": {
        "title": "Get one request received by a webhook URL",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false
    }
}

Tools

domain_report

Domain health report read-only Open the tool →

DNS, DNSSEC, email security, blocklists, certificates, HTTPS and registration in one scored report, with what to fix first.

ArgumentTypeDescription
domain* string Domain
Tool definition (tools/list)
{
    "name": "domain_report",
    "title": "Domain health report",
    "description": "DNS, DNSSEC, email security, blocklists, certificates, HTTPS and registration in one scored report, with what to fix first. Inputs – domain: Domain. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "domain": {
                "description": "Domain (e.g. example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "domain"
        ]
    },
    "annotations": {
        "title": "Domain health report",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dns_lookup

DNS lookup read-only Open the tool →

Every record for a name, straight from its authoritative nameservers or from a public resolver, with plain-English notes.

ArgumentTypeDescription
name* string Domain or host name
type string Record type
ALLAAAAACNAMEMXNSTXTSOACAASRVPTRHTTPSTLSADSDNSKEY
Default: ALL
resolver string Resolver
authoritativecloudflaregooglequad9
Default: authoritative
Tool definition (tools/list)
{
    "name": "dns_lookup",
    "title": "DNS lookup",
    "description": "Every record for a name, straight from its authoritative nameservers or from a public resolver, with plain-English notes. Inputs – name: Domain or host name; type: Record type; resolver: Resolver. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "name": {
                "description": "Domain or host name (e.g. example.com)",
                "type": "string"
            },
            "type": {
                "description": "Record type",
                "default": "ALL",
                "enum": [
                    "ALL",
                    "A",
                    "AAAA",
                    "CNAME",
                    "MX",
                    "NS",
                    "TXT",
                    "SOA",
                    "CAA",
                    "SRV",
                    "PTR",
                    "HTTPS",
                    "TLSA",
                    "DS",
                    "DNSKEY"
                ],
                "type": "string"
            },
            "resolver": {
                "description": "Resolver",
                "default": "authoritative",
                "enum": [
                    "authoritative",
                    "cloudflare",
                    "google",
                    "quad9"
                ],
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "name"
        ]
    },
    "annotations": {
        "title": "DNS lookup",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dns_propagation

DNS propagation check read-only Open the tool →

Ask 13 public resolvers around the world the same question and see who has your change.

ArgumentTypeDescription
name* string Domain or host name
type string Record type
AAAAACNAMEMXNSTXTSOACAASRVPTRHTTPSTLSADSDNSKEY
Default: A
Tool definition (tools/list)
{
    "name": "dns_propagation",
    "title": "DNS propagation check",
    "description": "Ask 13 public resolvers around the world the same question and see who has your change. Inputs – name: Domain or host name; type: Record type. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "name": {
                "description": "Domain or host name (e.g. www.example.com)",
                "type": "string"
            },
            "type": {
                "description": "Record type",
                "default": "A",
                "enum": [
                    "A",
                    "AAAA",
                    "CNAME",
                    "MX",
                    "NS",
                    "TXT",
                    "SOA",
                    "CAA",
                    "SRV",
                    "PTR",
                    "HTTPS",
                    "TLSA",
                    "DS",
                    "DNSKEY"
                ],
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "name"
        ]
    },
    "annotations": {
        "title": "DNS propagation check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dnssec

DNSSEC check read-only Open the tool →

Is the zone signed, does the chain of trust validate, and are the algorithms current?

ArgumentTypeDescription
name* string Domain
Tool definition (tools/list)
{
    "name": "dnssec",
    "title": "DNSSEC check",
    "description": "Is the zone signed, does the chain of trust validate, and are the algorithms current? Inputs – name: Domain. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "name": {
                "description": "Domain (e.g. example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "name"
        ]
    },
    "annotations": {
        "title": "DNSSEC check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

nameserver_check

Nameserver health check read-only Open the tool →

Tests every nameserver of a domain directly: lame or unreachable servers, NS and glue mismatches, SOA serials, open recursion, TCP and EDNS.

ArgumentTypeDescription
zone* string Domain
Tool definition (tools/list)
{
    "name": "nameserver_check",
    "title": "Nameserver health check",
    "description": "Tests every nameserver of a domain directly: lame or unreachable servers, NS and glue mismatches, SOA serials, open recursion, TCP and EDNS. Inputs – zone: Domain. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "zone": {
                "description": "Domain (e.g. example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "zone"
        ]
    },
    "annotations": {
        "title": "Nameserver health check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

email_auth

Email security check read-only Open the tool →

SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI graded, with the exact records to fix what is missing.

ArgumentTypeDescription
domain* string Domain
Tool definition (tools/list)
{
    "name": "email_auth",
    "title": "Email security check",
    "description": "SPF, DKIM, DMARC, MTA-STS, TLS-RPT and BIMI graded, with the exact records to fix what is missing. Inputs – domain: Domain. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "domain": {
                "description": "Domain (e.g. example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "domain"
        ]
    },
    "annotations": {
        "title": "Email security check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

email_headers

Email header analyser read-only Open the tool →

Paste a message's headers to see its route and delays, SPF, DKIM and DMARC results with alignment, and why it may have gone to spam.

ArgumentTypeDescription
headers* string Message headers
Tool definition (tools/list)
{
    "name": "email_headers",
    "title": "Email header analyser",
    "description": "Paste a message's headers to see its route and delays, SPF, DKIM and DMARC results with alignment, and why it may have gone to spam. Inputs – headers: Message headers. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "headers": {
                "description": "Message headers (e.g. Received: from …\nAuthentication-Results: …\nFrom: …)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "headers"
        ]
    },
    "annotations": {
        "title": "Email header analyser",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

spf_builder

SPF record builder read-only Open the tool →

Pick the services that send your mail and get one SPF record, its DNS lookup count and a comparison with the record you publish now.

ArgumentTypeDescription
domain* string Domain
all string Mail from anywhere else
~all-all
Default: ~all
providers string Services that send mail as this domain
extra string Extra entries (optional)
Tool definition (tools/list)
{
    "name": "spf_builder",
    "title": "SPF record builder",
    "description": "Pick the services that send your mail and get one SPF record, its DNS lookup count and a comparison with the record you publish now. Inputs – domain: Domain; all: Mail from anywhere else; providers: Services that send mail as this domain; extra: Extra entries (optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "domain": {
                "description": "Domain (e.g. example.com)",
                "type": "string"
            },
            "all": {
                "description": "Mail from anywhere else",
                "default": "~all",
                "enum": [
                    "~all",
                    "-all"
                ],
                "type": "string"
            },
            "providers": {
                "description": "Services that send mail as this domain",
                "type": "string"
            },
            "extra": {
                "description": "Extra entries (optional) (e.g. ip4:192.0.2.10 ip6:2001:db8::/48 include:_spf.example.net)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "domain"
        ]
    },
    "annotations": {
        "title": "SPF record builder",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dmarc_builder

DMARC record builder read-only Open the tool →

Choose a policy, report addresses and alignment and get a DMARC record with every tag explained, compared with the one you publish now.

ArgumentTypeDescription
domain* string Domain
p string Policy (p)
nonequarantinereject
Default: none
sp string Subdomain policy (sp)
nonequarantinereject
Default:
rua string Aggregate reports to (rua)
ruf string Failure reports to (ruf, optional)
adkim string DKIM alignment (adkim)
rs
Default: r
aspf string SPF alignment (aspf)
rs
Default: r
t string Test mode (t)
ny
Default: n
pct string pct (legacy, optional)
Tool definition (tools/list)
{
    "name": "dmarc_builder",
    "title": "DMARC record builder",
    "description": "Choose a policy, report addresses and alignment and get a DMARC record with every tag explained, compared with the one you publish now. Inputs – domain: Domain; p: Policy (p); sp: Subdomain policy (sp); rua: Aggregate reports to (rua); ruf: Failure reports to (ruf, optional); adkim: DKIM alignment (adkim); aspf: SPF alignment (aspf); t: Test mode (t); pct: pct (legacy, optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "domain": {
                "description": "Domain (e.g. example.com)",
                "type": "string"
            },
            "p": {
                "description": "Policy (p)",
                "default": "none",
                "enum": [
                    "none",
                    "quarantine",
                    "reject"
                ],
                "type": "string"
            },
            "sp": {
                "description": "Subdomain policy (sp)",
                "default": "",
                "enum": [
                    "",
                    "none",
                    "quarantine",
                    "reject"
                ],
                "type": "string"
            },
            "rua": {
                "description": "Aggregate reports to (rua) (e.g. dmarc-reports@example.com)",
                "type": "string"
            },
            "ruf": {
                "description": "Failure reports to (ruf, optional) (e.g. dmarc-failures@example.com)",
                "type": "string"
            },
            "adkim": {
                "description": "DKIM alignment (adkim)",
                "default": "r",
                "enum": [
                    "r",
                    "s"
                ],
                "type": "string"
            },
            "aspf": {
                "description": "SPF alignment (aspf)",
                "default": "r",
                "enum": [
                    "r",
                    "s"
                ],
                "type": "string"
            },
            "t": {
                "description": "Test mode (t)",
                "default": "n",
                "enum": [
                    "n",
                    "y"
                ],
                "type": "string"
            },
            "pct": {
                "description": "pct (legacy, optional) (e.g. 100)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "domain"
        ]
    },
    "annotations": {
        "title": "DMARC record builder",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

blacklist

Blacklist check read-only Open the tool →

Is an IP, a domain or its mail servers on the spam blocklists receivers use – and how to get delisted.

ArgumentTypeDescription
target* string IP address or domain
Tool definition (tools/list)
{
    "name": "blacklist",
    "title": "Blacklist check",
    "description": "Is an IP, a domain or its mail servers on the spam blocklists receivers use – and how to get delisted. Inputs – target: IP address or domain. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "target": {
                "description": "IP address or domain (e.g. 192.0.2.10 or example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "target"
        ]
    },
    "annotations": {
        "title": "Blacklist check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

ssl_check

SSL/TLS certificate check read-only Open the tool →

Certificate, chain, expiry, hostname match, key strength and the TLS version a server negotiates.

ArgumentTypeDescription
host* string Host name
port string Port
44384434659939956368535061
Default: 443
Tool definition (tools/list)
{
    "name": "ssl_check",
    "title": "SSL/TLS certificate check",
    "description": "Certificate, chain, expiry, hostname match, key strength and the TLS version a server negotiates. Inputs – host: Host name; port: Port. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "host": {
                "description": "Host name (e.g. example.com)",
                "type": "string"
            },
            "port": {
                "description": "Port",
                "default": "443",
                "enum": [
                    "443",
                    "8443",
                    "465",
                    "993",
                    "995",
                    "636",
                    "853",
                    "5061"
                ],
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "host"
        ]
    },
    "annotations": {
        "title": "SSL/TLS certificate check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

http_headers

HTTP headers & security check read-only Open the tool →

Redirect chain, response headers and a graded check of HSTS, CSP and the other security headers.

ArgumentTypeDescription
url* string URL or host name
Tool definition (tools/list)
{
    "name": "http_headers",
    "title": "HTTP headers & security check",
    "description": "Redirect chain, response headers and a graded check of HSTS, CSP and the other security headers. Inputs – url: URL or host name. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "url": {
                "description": "URL or host name (e.g. https://example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "url"
        ]
    },
    "annotations": {
        "title": "HTTP headers & security check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

whois

WHOIS / RDAP lookup read-only Open the tool →

Who holds a domain, IP address or AS number – from the registry, via RDAP.

ArgumentTypeDescription
query* string Domain, IP, prefix or AS number
Tool definition (tools/list)
{
    "name": "whois",
    "title": "WHOIS / RDAP lookup",
    "description": "Who holds a domain, IP address or AS number – from the registry, via RDAP. Inputs – query: Domain, IP, prefix or AS number. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "query": {
                "description": "Domain, IP, prefix or AS number (e.g. example.com, 1.1.1.1, AS13335)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "query"
        ]
    },
    "annotations": {
        "title": "WHOIS / RDAP lookup",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

bgp

ASN & BGP prefix lookup read-only Open the tool →

Origin AS, visibility, RPKI validity, upstreams and announced prefixes from the global routing table.

ArgumentTypeDescription
query* string AS number, IP address or prefix
Tool definition (tools/list)
{
    "name": "bgp",
    "title": "ASN & BGP prefix lookup",
    "description": "Origin AS, visibility, RPKI validity, upstreams and announced prefixes from the global routing table. Inputs – query: AS number, IP address or prefix. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "query": {
                "description": "AS number, IP address or prefix (e.g. AS13335 or 1.1.1.0/24)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "query"
        ]
    },
    "annotations": {
        "title": "ASN & BGP prefix lookup",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

rpki

RPKI / ROA validator read-only Open the tool →

Is a route RPKI valid, invalid or not found? The ROAs covering a prefix, max-length mistakes and how to fix them.

ArgumentTypeDescription
prefix* string Prefix
asn string Origin AS (optional)
Tool definition (tools/list)
{
    "name": "rpki",
    "title": "RPKI / ROA validator",
    "description": "Is a route RPKI valid, invalid or not found? The ROAs covering a prefix, max-length mistakes and how to fix them. Inputs – prefix: Prefix; asn: Origin AS (optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "prefix": {
                "description": "Prefix (e.g. 192.0.2.0/24)",
                "type": "string"
            },
            "asn": {
                "description": "Origin AS (optional) (e.g. AS64500)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "prefix"
        ]
    },
    "annotations": {
        "title": "RPKI / ROA validator",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

peeringdb

PeeringDB lookup read-only Open the tool →

A network’s peering policy, internet exchange ports, facilities and NOC contacts from PeeringDB.

ArgumentTypeDescription
asn* string AS number
Tool definition (tools/list)
{
    "name": "peeringdb",
    "title": "PeeringDB lookup",
    "description": "A network’s peering policy, internet exchange ports, facilities and NOC contacts from PeeringDB. Inputs – asn: AS number. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "asn": {
                "description": "AS number (e.g. AS64500)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "asn"
        ]
    },
    "annotations": {
        "title": "PeeringDB lookup",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

reverse_dns

Reverse DNS (PTR) check read-only Open the tool →

The PTR name of an IP address, whether it resolves back to the same IP (FCrDNS), and whether it looks generic.

ArgumentTypeDescription
query* string IP address or host name
Tool definition (tools/list)
{
    "name": "reverse_dns",
    "title": "Reverse DNS (PTR) check",
    "description": "The PTR name of an IP address, whether it resolves back to the same IP (FCrDNS), and whether it looks generic. Inputs – query: IP address or host name. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "query": {
                "description": "IP address or host name (e.g. 192.0.2.25 or mail.example.com)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "query"
        ]
    },
    "annotations": {
        "title": "Reverse DNS (PTR) check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

port_check

Open port check read-only Open the tool →

Is a TCP port open, closed or filtered when reached from the internet? One connection from our server, timed.

ArgumentTypeDescription
host* string Host name or IP address
port* string TCP port
Tool definition (tools/list)
{
    "name": "port_check",
    "title": "Open port check",
    "description": "Is a TCP port open, closed or filtered when reached from the internet? One connection from our server, timed. Inputs – host: Host name or IP address; port: TCP port. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "host": {
                "description": "Host name or IP address (e.g. example.com)",
                "type": "string"
            },
            "port": {
                "description": "TCP port (e.g. 443)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "host",
            "port"
        ]
    },
    "annotations": {
        "title": "Open port check",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

subnet_calculator

Subnet calculator read-only Open the tool →

IPv4 and IPv6 prefixes: ranges, masks, host counts, reverse zones and splitting.

ArgumentTypeDescription
cidr* string Address or prefix
split string Split into prefix length (optional)
Tool definition (tools/list)
{
    "name": "subnet_calculator",
    "title": "Subnet calculator",
    "description": "IPv4 and IPv6 prefixes: ranges, masks, host counts, reverse zones and splitting. Inputs – cidr: Address or prefix; split: Split into prefix length (optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "cidr": {
                "description": "Address or prefix (e.g. 192.168.10.0/24 or 2001:db8::/48)",
                "type": "string"
            },
            "split": {
                "description": "Split into prefix length (optional) (e.g. 26)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "cidr"
        ]
    },
    "annotations": {
        "title": "Subnet calculator",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

ipv6_tools

IPv6 address tools read-only Open the tool →

Expand and compress IPv6 addresses, see their type, convert MAC addresses to EUI-64 and back, and get the ip6.arpa name.

ArgumentTypeDescription
address* string IPv6 address or MAC address
prefix string Prefix for EUI-64 (optional)
Tool definition (tools/list)
{
    "name": "ipv6_tools",
    "title": "IPv6 address tools",
    "description": "Expand and compress IPv6 addresses, see their type, convert MAC addresses to EUI-64 and back, and get the ip6.arpa name. Inputs – address: IPv6 address or MAC address; prefix: Prefix for EUI-64 (optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "address": {
                "description": "IPv6 address or MAC address (e.g. 2001:db8::1 or 00:1a:2b:3c:4d:5e)",
                "type": "string"
            },
            "prefix": {
                "description": "Prefix for EUI-64 (optional) (e.g. fe80::/64)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "address"
        ]
    },
    "annotations": {
        "title": "IPv6 address tools",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

cidr_merge

CIDR aggregation read-only Open the tool →

Merge a list of IPs, ranges and CIDRs into the fewest prefixes, subtract ranges, and turn start–end ranges into CIDRs.

ArgumentTypeDescription
list* string Addresses, ranges and CIDRs (one per line)
exclude string Exclude (optional)
Tool definition (tools/list)
{
    "name": "cidr_merge",
    "title": "CIDR aggregation",
    "description": "Merge a list of IPs, ranges and CIDRs into the fewest prefixes, subtract ranges, and turn start–end ranges into CIDRs. Inputs – list: Addresses, ranges and CIDRs (one per line); exclude: Exclude (optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "list": {
                "description": "Addresses, ranges and CIDRs (one per line) (e.g. 192.0.2.0/25\n192.0.2.128/25\n198.51.100.10-198.51.100.20\n2001:db8::/33\n2001:db8:8000::/33)",
                "type": "string"
            },
            "exclude": {
                "description": "Exclude (optional) (e.g. 192.0.2.64/26)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "list"
        ]
    },
    "annotations": {
        "title": "CIDR aggregation",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

mcp_server_test

MCP server tester read-only Open the tool →

Connect to a remote MCP server like an AI assistant would: handshake, tools, resources, prompts, OAuth discovery and context cost, checked against the spec.

ArgumentTypeDescription
url* string MCP server URL
token string Bearer token (optional, never stored)
tool string Call a tool (optional)
arguments string Tool arguments as JSON (optional)
Tool definition (tools/list)
{
    "name": "mcp_server_test",
    "title": "MCP server tester",
    "description": "Connect to a remote MCP server like an AI assistant would: handshake, tools, resources, prompts, OAuth discovery and context cost, checked against the spec. Inputs – url: MCP server URL; token: Bearer token (optional, never stored); tool: Call a tool (optional); arguments: Tool arguments as JSON (optional). Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "url": {
                "description": "MCP server URL (e.g. https://example.com/mcp)",
                "type": "string"
            },
            "token": {
                "description": "Bearer token (optional, never stored) (e.g. sk-…)",
                "type": "string"
            },
            "tool": {
                "description": "Call a tool (optional) (e.g. tool_name)",
                "type": "string"
            },
            "arguments": {
                "description": "Tool arguments as JSON (optional) (e.g. {\"query\": \"example\"})",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "url"
        ]
    },
    "annotations": {
        "title": "MCP server tester",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

mac_lookup

MAC address vendor lookup read-only Open the tool →

Who made a network card, from the IEEE registry – and whether the address is randomised.

ArgumentTypeDescription
mac* string MAC address or prefix
Tool definition (tools/list)
{
    "name": "mac_lookup",
    "title": "MAC address vendor lookup",
    "description": "Who made a network card, from the IEEE registry – and whether the address is randomised. Inputs – mac: MAC address or prefix. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "mac": {
                "description": "MAC address or prefix (e.g. 00:1A:2B:3C:4D:5E)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "mac"
        ]
    },
    "annotations": {
        "title": "MAC address vendor lookup",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dn42_registry

DN42 registry search read-only Open the tool →

Look up any DN42 object – AS, IP, prefix, maintainer, person or .dn42 domain – with everything linked to it.

ArgumentTypeDescription
query* string AS number, IP, prefix, maintainer, person or domain
Tool definition (tools/list)
{
    "name": "dn42_registry",
    "title": "DN42 registry search",
    "description": "Look up any DN42 object – AS, IP, prefix, maintainer, person or .dn42 domain – with everything linked to it. Inputs – query: AS number, IP, prefix, maintainer, person or domain. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "query": {
                "description": "AS number, IP, prefix, maintainer, person or domain (e.g. AS4242421711, 172.23.141.33, THENETWORKERY-MNT)",
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "query"
        ]
    },
    "annotations": {
        "title": "DN42 registry search",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dn42_free

DN42 free resource finder read-only Open the tool →

Unregistered AS numbers, free IPv4 blocks and a random unused IPv6 /48 – checked against the live registry.

ArgumentTypeDescription
size string IPv4 block size
292827262524
Default: 27
Tool definition (tools/list)
{
    "name": "dn42_free",
    "title": "DN42 free resource finder",
    "description": "Unregistered AS numbers, free IPv4 blocks and a random unused IPv6 /48 – checked against the live registry. Inputs – size: IPv4 block size. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "size": {
                "description": "IPv4 block size",
                "default": "27",
                "enum": [
                    "29",
                    "28",
                    "27",
                    "26",
                    "25",
                    "24"
                ],
                "type": "string"
            }
        },
        "type": "object"
    },
    "annotations": {
        "title": "DN42 free resource finder",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}

dn42_peering_config

DN42 peering config generator read-only Open the tool →

WireGuard, BIRD 2 and RouterOS 7 configs for a DN42 peering, following the wiki conventions.

ArgumentTypeDescription
our_asn* string Your AS number
peer_asn* string Peer AS number
peer_ll6* string Peer link-local IPv6
our_ll6 string Your link-local IPv6 (optional)
peer_ipv4 string Peer tunnel IPv4 (optional)
our_ipv4 string Your DN42 IPv4 (optional)
endpoint string Peer endpoint host:port (optional)
peer_pubkey string Peer WireGuard public key (optional)
enh string Session type
yesno
Default: yes
Tool definition (tools/list)
{
    "name": "dn42_peering_config",
    "title": "DN42 peering config generator",
    "description": "WireGuard, BIRD 2 and RouterOS 7 configs for a DN42 peering, following the wiki conventions. Inputs – our_asn: Your AS number; peer_asn: Peer AS number; peer_ll6: Peer link-local IPv6; our_ll6: Your link-local IPv6 (optional); peer_ipv4: Peer tunnel IPv4 (optional); our_ipv4: Your DN42 IPv4 (optional); endpoint: Peer endpoint host:port (optional); peer_pubkey: Peer WireGuard public key (optional); enh: Session type. Results include plain-English findings with fixes and a shareable link.",
    "inputSchema": {
        "properties": {
            "our_asn": {
                "description": "Your AS number (e.g. 4242421711)",
                "type": "string"
            },
            "peer_asn": {
                "description": "Peer AS number (e.g. 4242423914)",
                "type": "string"
            },
            "peer_ll6": {
                "description": "Peer link-local IPv6 (e.g. fe80::3914)",
                "type": "string"
            },
            "our_ll6": {
                "description": "Your link-local IPv6 (optional) (e.g. fe80::1711)",
                "type": "string"
            },
            "peer_ipv4": {
                "description": "Peer tunnel IPv4 (optional) (e.g. 172.20.53.97)",
                "type": "string"
            },
            "our_ipv4": {
                "description": "Your DN42 IPv4 (optional) (e.g. 172.23.141.33)",
                "type": "string"
            },
            "endpoint": {
                "description": "Peer endpoint host:port (optional) (e.g. uk1.example.net:21711)",
                "type": "string"
            },
            "peer_pubkey": {
                "description": "Peer WireGuard public key (optional) (e.g. base64…=)",
                "type": "string"
            },
            "enh": {
                "description": "Session type",
                "default": "yes",
                "enum": [
                    "yes",
                    "no"
                ],
                "type": "string"
            }
        },
        "type": "object",
        "required": [
            "our_asn",
            "peer_asn",
            "peer_ll6"
        ]
    },
    "annotations": {
        "title": "DN42 peering config generator",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
    }
}