RunStack Checks
External checks of TLS, HTTP headers, email domain, DNS and ports, with cause and fix
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"checks": {
"url": "https://runstack.pro/api/mcp"
}
}
}Remote endpoints
https://runstack.pro/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (8)
π’check_tls(host, port)
Scan a public host's TLS from the internet: certificate validity, chain completeness, expiry date, hostname match, enabled protocols (TLS 1.0β1.3), cipher suites, HSTS. Use when browsers show certificate errors, before/after renewing or rotating a certificate, or to confirm old TLS versions are disabled. Use this (not check_http) for anything about the certificate or TLS configuration itself; works on any TLS port, not only 443. Returns a verdict, findings with cause and fix, and a shareable report link. Takes up to ~60 s.
Input Schema
{
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "Public hostname to scan, without scheme or path, e.g. example.com"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"default": 443,
"description": "TLS port, e.g. 443 (HTTPS), 465 (SMTPS), 993 (IMAPS). Default 443."
}
},
"required": [
"host"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_http(url, followRedirects)
Request a public URL from outside your network and inspect the HTTP layer: status code, full redirect chain, security headers (HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policyβ¦), caching and compression headers. Use to debug redirect loops, unexpected status codes or missing headers as real visitors and CDNs see them, or to verify a web server / CDN config change after deploy. Use check_tls instead for certificate or TLS protocol questions. Returns a verdict and findings with fixes.
Input Schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Full public http(s) URL, e.g. https://example.com/login"
},
"followRedirects": {
"type": "boolean",
"default": true,
"description": "Follow redirects and report every hop (default true). Set false to see only the first response."
}
},
"required": [
"url"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_email_domain(domain, dkimSelector)
Audit a mail domain as other mail servers see it: MX, SPF (including the 10-DNS-lookup limit), DKIM, DMARC policy, PTR / forward-confirmed reverse DNS, SMTP STARTTLS on the MX hosts, MTA-STS, TLS-RPT, BIMI. Use when mail lands in spam or bounces, after changing mail provider or DNS, or before tightening DMARC. Use this (not check_dns) for any email deliverability or authentication question. Returns a verdict, findings with cause and fix, and a report link.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Mail domain (the part after @), e.g. example.com"
},
"dkimSelector": {
"type": "string",
"description": "DKIM selector to check in addition to common ones, e.g. google, selector1, mail. Optional."
}
},
"required": [
"domain"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_dns(domain, type)
Resolve a name at several public resolvers (Google, Cloudflare, Quad9, β¦) and compare their answers. Use after changing DNS records to check propagation, or when some users reach a different IP or get NXDOMAIN. Use check_email_domain instead for SPF/DKIM/DMARC analysis. Returns per-resolver answers, inconsistencies and a verdict.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain or hostname to resolve, e.g. www.example.com"
},
"type": {
"type": "string",
"description": "Record type to query. ALL queries the common types at once. Default ALL.",
"enum": [
"ALL",
"A",
"AAAA",
"CNAME",
"MX",
"TXT",
"NS",
"SOA",
"CAA",
"SRV"
],
"default": "ALL"
}
},
"required": [
"domain"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_port(host, ports)
Check from the internet whether TCP ports of a public host are open, closed or filtered. Use to verify firewall / security group rules, or to find out why a service works locally but is unreachable from outside. Only public addresses are accepted; this does not test the application behind the port (use check_http or check_tls for that).
Input Schema
{
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "Public hostname or IP address, e.g. example.com or 203.0.113.10"
},
"ports": {
"type": "string",
"description": "Comma-separated TCP ports, e.g. 22,80,443"
}
},
"required": [
"host",
"ports"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_ip(input)
Look up an IP address or ASN: owner organization, announced prefix, PTR (reverse DNS), RPKI validity and geolocation. Use to identify who is behind an address seen in logs or headers, or to check PTR / RPKI for a mail or BGP issue. Does not test reachability (use check_port).
Input Schema
{
"type": "object",
"properties": {
"input": {
"type": "string",
"description": "IPv4 or IPv6 address, or an ASN, e.g. 1.1.1.1, 2606:4700::1111 or AS13335"
}
},
"required": [
"input"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_dnsbl(input)
Check whether an IP address or a domain is on email blocklists (DNSBL/RBL): Spamhaus ZEN and DBL, SpamCop, Barracuda, UCEPROTECT, Mailspike, SURBL, URIBL and others. For a domain, its own name is checked on domain lists and its A/AAAA addresses on IP lists. Use when mail bounces with 'listed'/'blocked' errors or lands in spam, or after a server was compromised. Lists that refuse queries from public resolvers are reported as not tested, never as listed. Returns listed lists with the reason and a delisting link. For SPF/DKIM/DMARC use check_email_domain.
Input Schema
{
"type": "object",
"properties": {
"input": {
"type": "string",
"description": "Public IPv4/IPv6 address of the sending mail server, or a domain, e.g. 203.0.113.10 or example.com"
}
},
"required": [
"input"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}π’check_domain_expiry(domain)
Look up a domain's registration in the registry (RDAP, or WHOIS for .ru/.su/.ΡΡ): expiry date and days left, registrar, creation date, EPP status codes (clientHold, redemptionPeriod, transfer locksβ¦) with explanations, nameservers and DNSSEC. Use to check when a domain must be renewed or why it suddenly stopped resolving. Subdomains are reduced to the registered domain. For DNS records use check_dns.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name, e.g. example.com or ΠΏΡΠΈΠΌΠ΅Ρ.ΡΡ"
}
},
"required": [
"domain"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"ok": {
"type": "boolean",
"description": "false when the check could not run (see error / message)"
},
"tool": {
"type": "string"
},
"target": {
"type": "string",
"description": "What was checked"
},
"verdict": {
"type": "string",
"enum": [
"ok",
"warn",
"fail"
]
},
"headline": {
"type": "string",
"description": "One-line summary"
},
"findings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"severity": {
"type": "string",
"enum": [
"error",
"warning",
"info",
"ok"
]
},
"code": {
"type": "string"
},
"title": {
"type": "string"
},
"detail": {
"type": "string",
"description": "Why it matters / cause"
},
"fix": {
"type": "string",
"description": "How to fix"
},
"docs": {
"type": "string",
"description": "How-to article URL"
}
},
"required": [
"severity",
"title"
]
}
},
"facts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"label",
"value"
]
}
},
"reportUrl": {
"type": "string",
"description": "Shareable report link"
},
"error": {
"type": "string",
"description": "Error code when ok is false"
},
"message": {
"type": "string"
},
"notice": {
"type": "string",
"description": "Usage note, e.g. anonymous-tier limits"
}
},
"required": [
"ok"
]
}Community
Evidence