Server definition
- Hash
- sha256:70920d62715ac33d74f34d7fb0092c430fa17b784a4d1bad5b578c9d265eea11
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "AstraVerify checks a domain's trust: email security (MX, SPF, DKIM, DMARC) and discoverability (robots.txt, sitemap, redirects, metadata, structured data, llms.txt, and whether Googlebot, Bingbot, GPTBot, ClaudeBot and PerplexityBot actually receive the page). Scores are out of 100 with exact fixes. Results are cached for 15 minutes; pass refresh=true only when the user says they changed something. Always show the shareable link so the user can see the full report.",
"tools": [
{
"description": "Discoverability score for a domain: crawl access, site plumbing, page metadata, structured data and answer-engine readiness, with the exact file or tag to fix for each finding.",
"inputSchema": {
"properties": {
"domain": {
"description": "The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.",
"maxLength": 253,
"minLength": 3,
"type": "string"
},
"refresh": {
"default": false,
"description": "Force a fresh scan instead of the cached result (rate limited)",
"type": "boolean"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "check_discoverability",
"outputSchema": {
"properties": {
"cache_age_seconds": {
"description": "Age of the result; 0 means it was scanned just now",
"type": "integer"
},
"canonical_host": {
"type": [
"string",
"null"
]
},
"capped": {
"type": "boolean"
},
"cdn": {
"type": [
"string",
"null"
]
},
"components": {
"items": {
"description": "One scored area of the domain",
"properties": {
"enabled": {
"type": "boolean"
},
"key": {
"type": "string"
},
"max": {
"type": "integer"
},
"name": {
"type": "string"
},
"points": {
"type": "integer"
},
"summary": {
"type": "string"
}
},
"required": [
"key",
"name",
"points",
"max"
],
"type": "object"
},
"type": "array"
},
"domain": {
"type": "string"
},
"grade": {
"description": "A+ to F, or null alongside a null score",
"type": [
"string",
"null"
]
},
"held_back": {
"description": "Points the cap holds back while a fix is open (89 cap) or a critical one is (69). Not taken from any component: sum(components.points) - held_back = score",
"type": "integer"
},
"inconclusive": {
"description": "The site could not be fetched, so the scan could not be completed. A failure to measure, not a finding about the site.",
"type": "boolean"
},
"not_applicable": {
"description": "The domain publishes no web address, so there is no website to assess. Not a low score: score and grade are null and there are no recommendations. verdict names the domain to scan instead.",
"type": "boolean"
},
"not_checked": {
"description": "Parts skipped in this scan",
"items": {
"type": "string"
},
"type": "array"
},
"open_fixes": {
"description": "Findings above info level",
"type": "integer"
},
"raw": {
"description": "What the components add up to, before the cap",
"type": "integer"
},
"reason": {
"description": "Why score is null, when it is",
"type": [
"string",
"null"
]
},
"recommendations": {
"items": {
"properties": {
"component": {
"type": "string"
},
"fix": {
"description": "The exact change to publish: a DNS record (name, type, value) or a file or tag (kind, label, value, where). Null when there is nothing to publish, for example \"turn on DKIM in your provider\".",
"properties": {
"kind": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"type": {
"type": [
"string",
"null"
]
},
"value": {
"type": [
"string",
"null"
]
},
"where": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"id": {
"type": "string"
},
"scan": {
"enum": [
"email",
"discoverability"
],
"type": "string"
},
"severity": {
"enum": [
"critical",
"important",
"info"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"type": "string"
},
"why": {
"type": "string"
}
},
"required": [
"id",
"severity",
"title"
],
"type": "object"
},
"type": "array"
},
"report_url": {
"description": "The report page for this domain on astraverify.com",
"type": "string"
},
"request_id": {
"description": "req_... for this call. Quote it when reporting a problem with the result.",
"type": "string"
},
"score": {
"description": "Out of 100, exactly as astraverify.com shows it. Null when not_applicable or inconclusive is set.",
"type": [
"integer",
"null"
]
},
"verdict": {
"description": "One sentence on what engines can do with the site",
"type": "string"
},
"verified_component": {
"description": "Set by verify_fix: the component re-checked",
"type": "string"
}
},
"required": [
"domain",
"score",
"grade"
],
"type": "object"
}
},
{
"description": "Email Security score for a domain with the DNS records found and the exact records to publish for each fix.",
"inputSchema": {
"properties": {
"domain": {
"description": "The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.",
"maxLength": 253,
"minLength": 3,
"type": "string"
},
"refresh": {
"default": false,
"description": "Force a fresh scan instead of the cached result (rate limited)",
"type": "boolean"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "check_email_security",
"outputSchema": {
"properties": {
"cache_age_seconds": {
"description": "Age of the result; 0 means it was scanned just now",
"type": "integer"
},
"capped": {
"type": "boolean"
},
"components": {
"items": {
"description": "One scored area of the domain",
"properties": {
"enabled": {
"type": "boolean"
},
"key": {
"type": "string"
},
"max": {
"type": "integer"
},
"name": {
"type": "string"
},
"points": {
"type": "integer"
},
"summary": {
"type": "string"
}
},
"required": [
"key",
"name",
"points",
"max"
],
"type": "object"
},
"type": "array"
},
"domain": {
"type": "string"
},
"grade": {
"description": "A+ to F",
"type": "string"
},
"held_back": {
"description": "Points the cap holds back while a fix is open (89 cap) or a critical one is (69). Not taken from any component: sum(components.points) - held_back = score",
"type": "integer"
},
"null_mx": {
"description": "The domain declares that it sends and receives no mail",
"type": "boolean"
},
"open_fixes": {
"description": "Findings above info level",
"type": "integer"
},
"provider": {
"description": "Mail provider detected from MX; null when not recognised",
"type": [
"string",
"null"
]
},
"raw": {
"description": "What the components add up to, before the cap",
"type": "integer"
},
"recommendations": {
"items": {
"properties": {
"component": {
"type": "string"
},
"fix": {
"description": "The exact change to publish: a DNS record (name, type, value) or a file or tag (kind, label, value, where). Null when there is nothing to publish, for example \"turn on DKIM in your provider\".",
"properties": {
"kind": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"type": {
"type": [
"string",
"null"
]
},
"value": {
"type": [
"string",
"null"
]
},
"where": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"id": {
"type": "string"
},
"scan": {
"enum": [
"email",
"discoverability"
],
"type": "string"
},
"severity": {
"enum": [
"critical",
"important",
"info"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"type": "string"
},
"why": {
"type": "string"
}
},
"required": [
"id",
"severity",
"title"
],
"type": "object"
},
"type": "array"
},
"records": {
"additionalProperties": {
"items": {
"type": "object"
},
"type": "array"
},
"description": "DNS records found, keyed mx, spf, dkim, dmarc",
"type": "object"
},
"report_url": {
"description": "The report page for this domain on astraverify.com",
"type": "string"
},
"request_id": {
"description": "req_... for this call. Quote it when reporting a problem with the result.",
"type": "string"
},
"score": {
"description": "Out of 100, exactly as astraverify.com shows it",
"type": "integer"
}
},
"required": [
"domain",
"score",
"grade"
],
"type": "object"
}
},
{
"description": "What Googlebot, Bingbot, OAI-SearchBot, PerplexityBot, ClaudeBot or GPTBot receive from the site: status, redirects, headers and extracted text. Shows CDN or firewall blocks that robots.txt cannot.",
"inputSchema": {
"properties": {
"agent": {
"enum": [
"googlebot",
"bingbot",
"oai-searchbot",
"perplexitybot",
"claudebot",
"gptbot"
],
"type": "string"
},
"domain": {
"description": "The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.",
"maxLength": 253,
"minLength": 3,
"type": "string"
}
},
"required": [
"domain",
"agent"
],
"type": "object"
},
"name": "fetch_as_crawler",
"outputSchema": {
"properties": {
"agent": {
"type": "string"
},
"blocked": {
"description": "The response refused the crawler (403, 429 or similar)",
"type": "boolean"
},
"chain": {
"description": "Redirect hops",
"items": {
"properties": {
"status": {
"type": "integer"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"challenge": {
"description": "A bot-challenge page rather than the site",
"type": "boolean"
},
"content_type": {
"type": [
"string",
"null"
]
},
"domain": {
"type": "string"
},
"error": {
"type": [
"string",
"null"
]
},
"extract": {
"description": "The text this crawler would index; null when the fetch failed",
"type": [
"string",
"null"
]
},
"final_url": {
"type": [
"string",
"null"
]
},
"headers": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"label": {
"description": "The crawler as its operator names it",
"type": "string"
},
"ms": {
"type": "integer"
},
"request_id": {
"description": "req_... for this call. Quote it when reporting a problem with the result.",
"type": "string"
},
"status": {
"description": "HTTP status the crawler received",
"type": [
"integer",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
}
},
"required": [
"domain",
"agent"
],
"type": "object"
}
},
{
"description": "Both scores, the open fixes ranked by severity, and a saved report link (report_url) that opens the same findings without a rescan; share it as-is. Use this first for \"is my domain set up right?\" questions.",
"inputSchema": {
"properties": {
"domain": {
"description": "The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.",
"maxLength": 253,
"minLength": 3,
"type": "string"
},
"refresh": {
"default": false,
"description": "Force a fresh scan instead of the cached result (rate limited)",
"type": "boolean"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "get_report",
"outputSchema": {
"properties": {
"discoverability": {
"properties": {
"cache_age_seconds": {
"description": "Age of the result; 0 means it was scanned just now",
"type": "integer"
},
"canonical_host": {
"type": [
"string",
"null"
]
},
"capped": {
"type": "boolean"
},
"cdn": {
"type": [
"string",
"null"
]
},
"components": {
"items": {
"description": "One scored area of the domain",
"properties": {
"enabled": {
"type": "boolean"
},
"key": {
"type": "string"
},
"max": {
"type": "integer"
},
"name": {
"type": "string"
},
"points": {
"type": "integer"
},
"summary": {
"type": "string"
}
},
"required": [
"key",
"name",
"points",
"max"
],
"type": "object"
},
"type": "array"
},
"domain": {
"type": "string"
},
"grade": {
"description": "A+ to F, or null alongside a null score",
"type": [
"string",
"null"
]
},
"held_back": {
"description": "Points the cap holds back while a fix is open (89 cap) or a critical one is (69). Not taken from any component: sum(components.points) - held_back = score",
"type": "integer"
},
"inconclusive": {
"description": "The site could not be fetched, so the scan could not be completed. A failure to measure, not a finding about the site.",
"type": "boolean"
},
"not_applicable": {
"description": "The domain publishes no web address, so there is no website to assess. Not a low score: score and grade are null and there are no recommendations. verdict names the domain to scan instead.",
"type": "boolean"
},
"not_checked": {
"description": "Parts skipped in this scan",
"items": {
"type": "string"
},
"type": "array"
},
"open_fixes": {
"description": "Findings above info level",
"type": "integer"
},
"raw": {
"description": "What the components add up to, before the cap",
"type": "integer"
},
"reason": {
"description": "Why score is null, when it is",
"type": [
"string",
"null"
]
},
"recommendations": {
"items": {
"properties": {
"component": {
"type": "string"
},
"fix": {
"description": "The exact change to publish: a DNS record (name, type, value) or a file or tag (kind, label, value, where). Null when there is nothing to publish, for example \"turn on DKIM in your provider\".",
"properties": {
"kind": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"type": {
"type": [
"string",
"null"
]
},
"value": {
"type": [
"string",
"null"
]
},
"where": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"id": {
"type": "string"
},
"scan": {
"enum": [
"email",
"discoverability"
],
"type": "string"
},
"severity": {
"enum": [
"critical",
"important",
"info"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"type": "string"
},
"why": {
"type": "string"
}
},
"required": [
"id",
"severity",
"title"
],
"type": "object"
},
"type": "array"
},
"report_url": {
"description": "The report page for this domain on astraverify.com",
"type": "string"
},
"request_id": {
"description": "req_... for this call. Quote it when reporting a problem with the result.",
"type": "string"
},
"score": {
"description": "Out of 100, exactly as astraverify.com shows it. Null when not_applicable or inconclusive is set.",
"type": [
"integer",
"null"
]
},
"verdict": {
"description": "One sentence on what engines can do with the site",
"type": "string"
},
"verified_component": {
"description": "Set by verify_fix: the component re-checked",
"type": "string"
}
},
"type": [
"object",
"null"
]
},
"discoverability_cache_age_seconds": {
"type": [
"integer",
"null"
]
},
"discoverability_error": {
"type": [
"string",
"null"
]
},
"domain": {
"type": "string"
},
"email_cache_age_seconds": {
"type": "integer"
},
"email_security": {
"properties": {
"cache_age_seconds": {
"description": "Age of the result; 0 means it was scanned just now",
"type": "integer"
},
"capped": {
"type": "boolean"
},
"components": {
"items": {
"description": "One scored area of the domain",
"properties": {
"enabled": {
"type": "boolean"
},
"key": {
"type": "string"
},
"max": {
"type": "integer"
},
"name": {
"type": "string"
},
"points": {
"type": "integer"
},
"summary": {
"type": "string"
}
},
"required": [
"key",
"name",
"points",
"max"
],
"type": "object"
},
"type": "array"
},
"domain": {
"type": "string"
},
"grade": {
"description": "A+ to F",
"type": "string"
},
"held_back": {
"description": "Points the cap holds back while a fix is open (89 cap) or a critical one is (69). Not taken from any component: sum(components.points) - held_back = score",
"type": "integer"
},
"open_fixes": {
"description": "Findings above info level",
"type": "integer"
},
"raw": {
"description": "What the components add up to, before the cap",
"type": "integer"
},
"recommendations": {
"items": {
"properties": {
"component": {
"type": "string"
},
"fix": {
"description": "The exact change to publish: a DNS record (name, type, value) or a file or tag (kind, label, value, where). Null when there is nothing to publish, for example \"turn on DKIM in your provider\".",
"properties": {
"kind": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"type": {
"type": [
"string",
"null"
]
},
"value": {
"type": [
"string",
"null"
]
},
"where": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"id": {
"type": "string"
},
"scan": {
"enum": [
"email",
"discoverability"
],
"type": "string"
},
"severity": {
"enum": [
"critical",
"important",
"info"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"type": "string"
},
"why": {
"type": "string"
}
},
"required": [
"id",
"severity",
"title"
],
"type": "object"
},
"type": "array"
},
"report_url": {
"description": "The report page for this domain on astraverify.com",
"type": "string"
},
"score": {
"description": "Out of 100, exactly as astraverify.com shows it",
"type": "integer"
}
},
"type": "object"
},
"live_url": {
"description": "The live page, which rescans when the result is stale",
"type": "string"
},
"recommendations": {
"description": "Both scans, ranked by severity",
"items": {
"properties": {
"component": {
"type": "string"
},
"fix": {
"description": "The exact change to publish: a DNS record (name, type, value) or a file or tag (kind, label, value, where). Null when there is nothing to publish, for example \"turn on DKIM in your provider\".",
"properties": {
"kind": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"type": {
"type": [
"string",
"null"
]
},
"value": {
"type": [
"string",
"null"
]
},
"where": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"id": {
"type": "string"
},
"scan": {
"enum": [
"email",
"discoverability"
],
"type": "string"
},
"severity": {
"enum": [
"critical",
"important",
"info"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"type": "string"
},
"why": {
"type": "string"
}
},
"required": [
"id",
"severity",
"title"
],
"type": "object"
},
"type": "array"
},
"report_url": {
"description": "Saved snapshot (/r/<id>) that opens without a rescan; safe to share",
"type": "string"
},
"request_id": {
"description": "req_... for this call. Quote it when reporting a problem with the result.",
"type": "string"
}
},
"required": [
"domain",
"email_security"
],
"type": "object"
}
},
{
"description": "Re-runs only the checks behind one component (crawl, plumbing, metadata, structured, answer) and returns the updated score.",
"inputSchema": {
"properties": {
"component": {
"enum": [
"crawl",
"plumbing",
"metadata",
"structured",
"answer"
],
"type": "string"
},
"domain": {
"description": "The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.",
"maxLength": 253,
"minLength": 3,
"type": "string"
}
},
"required": [
"domain",
"component"
],
"type": "object"
},
"name": "verify_fix",
"outputSchema": {
"properties": {
"cache_age_seconds": {
"description": "Age of the result; 0 means it was scanned just now",
"type": "integer"
},
"canonical_host": {
"type": [
"string",
"null"
]
},
"capped": {
"type": "boolean"
},
"cdn": {
"type": [
"string",
"null"
]
},
"components": {
"items": {
"description": "One scored area of the domain",
"properties": {
"enabled": {
"type": "boolean"
},
"key": {
"type": "string"
},
"max": {
"type": "integer"
},
"name": {
"type": "string"
},
"points": {
"type": "integer"
},
"summary": {
"type": "string"
}
},
"required": [
"key",
"name",
"points",
"max"
],
"type": "object"
},
"type": "array"
},
"domain": {
"type": "string"
},
"grade": {
"description": "A+ to F, or null alongside a null score",
"type": [
"string",
"null"
]
},
"held_back": {
"description": "Points the cap holds back while a fix is open (89 cap) or a critical one is (69). Not taken from any component: sum(components.points) - held_back = score",
"type": "integer"
},
"inconclusive": {
"description": "The site could not be fetched, so the scan could not be completed. A failure to measure, not a finding about the site.",
"type": "boolean"
},
"not_applicable": {
"description": "The domain publishes no web address, so there is no website to assess. Not a low score: score and grade are null and there are no recommendations. verdict names the domain to scan instead.",
"type": "boolean"
},
"not_checked": {
"description": "Parts skipped in this scan",
"items": {
"type": "string"
},
"type": "array"
},
"open_fixes": {
"description": "Findings above info level",
"type": "integer"
},
"raw": {
"description": "What the components add up to, before the cap",
"type": "integer"
},
"reason": {
"description": "Why score is null, when it is",
"type": [
"string",
"null"
]
},
"recommendations": {
"items": {
"properties": {
"component": {
"type": "string"
},
"fix": {
"description": "The exact change to publish: a DNS record (name, type, value) or a file or tag (kind, label, value, where). Null when there is nothing to publish, for example \"turn on DKIM in your provider\".",
"properties": {
"kind": {
"type": [
"string",
"null"
]
},
"label": {
"type": [
"string",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": [
"string",
"null"
]
},
"type": {
"type": [
"string",
"null"
]
},
"value": {
"type": [
"string",
"null"
]
},
"where": {
"type": [
"string",
"null"
]
}
},
"type": [
"object",
"null"
]
},
"id": {
"type": "string"
},
"scan": {
"enum": [
"email",
"discoverability"
],
"type": "string"
},
"severity": {
"enum": [
"critical",
"important",
"info"
],
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"title": {
"type": "string"
},
"why": {
"type": "string"
}
},
"required": [
"id",
"severity",
"title"
],
"type": "object"
},
"type": "array"
},
"report_url": {
"description": "The report page for this domain on astraverify.com",
"type": "string"
},
"request_id": {
"description": "req_... for this call. Quote it when reporting a problem with the result.",
"type": "string"
},
"score": {
"description": "Out of 100, exactly as astraverify.com shows it. Null when not_applicable or inconclusive is set.",
"type": [
"integer",
"null"
]
},
"verdict": {
"description": "One sentence on what engines can do with the site",
"type": "string"
},
"verified_component": {
"description": "Set by verify_fix: the component re-checked",
"type": "string"
}
},
"required": [
"domain",
"score",
"grade"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:70920d62715ac33d74f34d7fb0092c430fa17b784a4d1bad5b578c9d265eea11 | sha256sum