Serveur MCP

AstraVerify Domain Trust Check

com.astraverify/domain-trust
Marketing et publicité Sécurité Public et accessible MCP 2026-07-28

Ce que fait ce MCP

Checks domain email security and search/AI discoverability, identifies configuration fixes, and verifies remediation.

check_discoverability
Check discoverability (search and AI crawler readiness)
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.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.'}, 'refresh': {'type': 'boolean', 'default': False, 'description': 'Force a fresh scan instead of the cached result (rate limited)'}}}
Schéma de sortie
{'type': 'object', 'required': ['domain', 'score', 'grade'], 'properties': {'cdn': {'type': ['string', 'null']}, 'raw': {'type': 'integer', 'description': 'What the components add up to, before the cap'}, 'grade': {'type': ['string', 'null'], 'description': 'A+ to F, or null alongside a null score'}, 'score': {'type': ['integer', 'null'], 'description': 'Out of 100, exactly as astraverify.com shows it. Null when not_applicable or inconclusive is set.'}, 'capped': {'type': 'boolean'}, 'domain': {'type': 'string'}, 'reason': {'type': ['string', 'null'], 'description': 'Why score is null, when it is'}, 'verdict': {'type': 'string', 'description': 'One sentence on what engines can do with the site'}, 'held_back': {'type': 'integer', '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'}, 'components': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'points', 'max'], 'properties': {'key': {'type': 'string'}, 'max': {'type': 'integer'}, 'name': {'type': 'string'}, 'points': {'type': 'integer'}, 'enabled': {'type': 'boolean'}, 'summary': {'type': 'string'}}, 'description': 'One scored area of the domain'}}, 'open_fixes': {'type': 'integer', 'description': 'Findings above info level'}, 'report_url': {'type': 'string', 'description': 'The report page for this domain on astraverify.com'}, 'request_id': {'type': 'string', 'description': 'req_... for this call. Quote it when reporting a problem with the result.'}, 'not_checked': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Parts skipped in this scan'}, 'inconclusive': {'type': 'boolean', 'description': 'The site could not be fetched, so the scan could not be completed. A failure to measure, not a finding about the site.'}, 'canonical_host': {'type': ['string', 'null']}, 'not_applicable': {'type': 'boolean', '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.'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'severity', 'title'], 'properties': {'id': {'type': 'string'}, 'fix': {'type': ['object', 'null'], 'properties': {'kind': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'note': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'value': {'type': ['string', 'null']}, 'where': {'type': ['string', 'null']}}, '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".'}, 'why': {'type': 'string'}, 'scan': {'enum': ['email', 'discoverability'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'severity': {'enum': ['critical', 'important', 'info'], 'type': 'string'}, 'component': {'type': 'string'}}}}, 'cache_age_seconds': {'type': 'integer', 'description': 'Age of the result; 0 means it was scanned just now'}, 'verified_component': {'type': 'string', 'description': 'Set by verify_fix: the component re-checked'}}}
check_email_security
Check email security (MX, SPF, DKIM, DMARC)
Email Security score for a domain with the DNS records found and the exact records to publish for each fix.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.'}, 'refresh': {'type': 'boolean', 'default': False, 'description': 'Force a fresh scan instead of the cached result (rate limited)'}}}
Schéma de sortie
{'type': 'object', 'required': ['domain', 'score', 'grade'], 'properties': {'raw': {'type': 'integer', 'description': 'What the components add up to, before the cap'}, 'grade': {'type': 'string', 'description': 'A+ to F'}, 'score': {'type': 'integer', 'description': 'Out of 100, exactly as astraverify.com shows it'}, 'capped': {'type': 'boolean'}, 'domain': {'type': 'string'}, 'null_mx': {'type': 'boolean', 'description': 'The domain declares that it sends and receives no mail'}, 'records': {'type': 'object', 'description': 'DNS records found, keyed mx, spf, dkim, dmarc', 'additionalProperties': {'type': 'array', 'items': {'type': 'object'}}}, 'provider': {'type': ['string', 'null'], 'description': 'Mail provider detected from MX; null when not recognised'}, 'held_back': {'type': 'integer', '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'}, 'components': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'points', 'max'], 'properties': {'key': {'type': 'string'}, 'max': {'type': 'integer'}, 'name': {'type': 'string'}, 'points': {'type': 'integer'}, 'enabled': {'type': 'boolean'}, 'summary': {'type': 'string'}}, 'description': 'One scored area of the domain'}}, 'open_fixes': {'type': 'integer', 'description': 'Findings above info level'}, 'report_url': {'type': 'string', 'description': 'The report page for this domain on astraverify.com'}, 'request_id': {'type': 'string', 'description': 'req_... for this call. Quote it when reporting a problem with the result.'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'severity', 'title'], 'properties': {'id': {'type': 'string'}, 'fix': {'type': ['object', 'null'], 'properties': {'kind': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'note': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'value': {'type': ['string', 'null']}, 'where': {'type': ['string', 'null']}}, '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".'}, 'why': {'type': 'string'}, 'scan': {'enum': ['email', 'discoverability'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'severity': {'enum': ['critical', 'important', 'info'], 'type': 'string'}, 'component': {'type': 'string'}}}}, 'cache_age_seconds': {'type': 'integer', 'description': 'Age of the result; 0 means it was scanned just now'}}}
fetch_as_crawler
Fetch the root page as a named crawler
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.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['domain', 'agent'], 'properties': {'agent': {'enum': ['googlebot', 'bingbot', 'oai-searchbot', 'perplexitybot', 'claudebot', 'gptbot'], 'type': 'string'}, 'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.'}}}
Schéma de sortie
{'type': 'object', 'required': ['domain', 'agent'], 'properties': {'ms': {'type': 'integer'}, 'agent': {'type': 'string'}, 'chain': {'type': 'array', 'items': {'type': 'object', 'properties': {'url': {'type': 'string'}, 'status': {'type': 'integer'}}}, 'description': 'Redirect hops'}, 'error': {'type': ['string', 'null']}, 'label': {'type': 'string', 'description': 'The crawler as its operator names it'}, 'title': {'type': ['string', 'null']}, 'domain': {'type': 'string'}, 'status': {'type': ['integer', 'null'], 'description': 'HTTP status the crawler received'}, 'blocked': {'type': 'boolean', 'description': 'The response refused the crawler (403, 429 or similar)'}, 'extract': {'type': ['string', 'null'], 'description': 'The text this crawler would index; null when the fetch failed'}, 'headers': {'type': 'object', 'additionalProperties': {'type': 'string'}}, 'challenge': {'type': 'boolean', 'description': 'A bot-challenge page rather than the site'}, 'final_url': {'type': ['string', 'null']}, 'request_id': {'type': 'string', 'description': 'req_... for this call. Quote it when reporting a problem with the result.'}, 'content_type': {'type': ['string', 'null']}}}
get_report
Domain Trust report (both scores)
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.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.'}, 'refresh': {'type': 'boolean', 'default': False, 'description': 'Force a fresh scan instead of the cached result (rate limited)'}}}
Schéma de sortie
{'type': 'object', 'required': ['domain', 'email_security'], 'properties': {'domain': {'type': 'string'}, 'live_url': {'type': 'string', 'description': 'The live page, which rescans when the result is stale'}, 'report_url': {'type': 'string', 'description': 'Saved snapshot (/r/<id>) that opens without a rescan; safe to share'}, 'request_id': {'type': 'string', 'description': 'req_... for this call. Quote it when reporting a problem with the result.'}, 'email_security': {'type': 'object', 'properties': {'raw': {'type': 'integer', 'description': 'What the components add up to, before the cap'}, 'grade': {'type': 'string', 'description': 'A+ to F'}, 'score': {'type': 'integer', 'description': 'Out of 100, exactly as astraverify.com shows it'}, 'capped': {'type': 'boolean'}, 'domain': {'type': 'string'}, 'held_back': {'type': 'integer', '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'}, 'components': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'points', 'max'], 'properties': {'key': {'type': 'string'}, 'max': {'type': 'integer'}, 'name': {'type': 'string'}, 'points': {'type': 'integer'}, 'enabled': {'type': 'boolean'}, 'summary': {'type': 'string'}}, 'description': 'One scored area of the domain'}}, 'open_fixes': {'type': 'integer', 'description': 'Findings above info level'}, 'report_url': {'type': 'string', 'description': 'The report page for this domain on astraverify.com'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'severity', 'title'], 'properties': {'id': {'type': 'string'}, 'fix': {'type': ['object', 'null'], 'properties': {'kind': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'note': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'value': {'type': ['string', 'null']}, 'where': {'type': ['string', 'null']}}, '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".'}, 'why': {'type': 'string'}, 'scan': {'enum': ['email', 'discoverability'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'severity': {'enum': ['critical', 'important', 'info'], 'type': 'string'}, 'component': {'type': 'string'}}}}, 'cache_age_seconds': {'type': 'integer', 'description': 'Age of the result; 0 means it was scanned just now'}}}, 'discoverability': {'type': ['object', 'null'], 'properties': {'cdn': {'type': ['string', 'null']}, 'raw': {'type': 'integer', 'description': 'What the components add up to, before the cap'}, 'grade': {'type': ['string', 'null'], 'description': 'A+ to F, or null alongside a null score'}, 'score': {'type': ['integer', 'null'], 'description': 'Out of 100, exactly as astraverify.com shows it. Null when not_applicable or inconclusive is set.'}, 'capped': {'type': 'boolean'}, 'domain': {'type': 'string'}, 'reason': {'type': ['string', 'null'], 'description': 'Why score is null, when it is'}, 'verdict': {'type': 'string', 'description': 'One sentence on what engines can do with the site'}, 'held_back': {'type': 'integer', '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'}, 'components': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'points', 'max'], 'properties': {'key': {'type': 'string'}, 'max': {'type': 'integer'}, 'name': {'type': 'string'}, 'points': {'type': 'integer'}, 'enabled': {'type': 'boolean'}, 'summary': {'type': 'string'}}, 'description': 'One scored area of the domain'}}, 'open_fixes': {'type': 'integer', 'description': 'Findings above info level'}, 'report_url': {'type': 'string', 'description': 'The report page for this domain on astraverify.com'}, 'request_id': {'type': 'string', 'description': 'req_... for this call. Quote it when reporting a problem with the result.'}, 'not_checked': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Parts skipped in this scan'}, 'inconclusive': {'type': 'boolean', 'description': 'The site could not be fetched, so the scan could not be completed. A failure to measure, not a finding about the site.'}, 'canonical_host': {'type': ['string', 'null']}, 'not_applicable': {'type': 'boolean', '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.'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'severity', 'title'], 'properties': {'id': {'type': 'string'}, 'fix': {'type': ['object', 'null'], 'properties': {'kind': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'note': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'value': {'type': ['string', 'null']}, 'where': {'type': ['string', 'null']}}, '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".'}, 'why': {'type': 'string'}, 'scan': {'enum': ['email', 'discoverability'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'severity': {'enum': ['critical', 'important', 'info'], 'type': 'string'}, 'component': {'type': 'string'}}}}, 'cache_age_seconds': {'type': 'integer', 'description': 'Age of the result; 0 means it was scanned just now'}, 'verified_component': {'type': 'string', 'description': 'Set by verify_fix: the component re-checked'}}}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'severity', 'title'], 'properties': {'id': {'type': 'string'}, 'fix': {'type': ['object', 'null'], 'properties': {'kind': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'note': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'value': {'type': ['string', 'null']}, 'where': {'type': ['string', 'null']}}, '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".'}, 'why': {'type': 'string'}, 'scan': {'enum': ['email', 'discoverability'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'severity': {'enum': ['critical', 'important', 'info'], 'type': 'string'}, 'component': {'type': 'string'}}}, 'description': 'Both scans, ranked by severity'}, 'discoverability_error': {'type': ['string', 'null']}, 'email_cache_age_seconds': {'type': 'integer'}, 'discoverability_cache_age_seconds': {'type': ['integer', 'null']}}}
verify_fix
Re-check one discoverability area after a fix
Re-runs only the checks behind one component (crawl, plumbing, metadata, structured, answer) and returns the updated score.
Lecture seule Accès externe Idempotent
Schéma d’entrée
{'type': 'object', 'required': ['domain', 'component'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain to check, as the person gave it (no scheme, no path). Reserved names such as example.com are refused.'}, 'component': {'enum': ['crawl', 'plumbing', 'metadata', 'structured', 'answer'], 'type': 'string'}}}
Schéma de sortie
{'type': 'object', 'required': ['domain', 'score', 'grade'], 'properties': {'cdn': {'type': ['string', 'null']}, 'raw': {'type': 'integer', 'description': 'What the components add up to, before the cap'}, 'grade': {'type': ['string', 'null'], 'description': 'A+ to F, or null alongside a null score'}, 'score': {'type': ['integer', 'null'], 'description': 'Out of 100, exactly as astraverify.com shows it. Null when not_applicable or inconclusive is set.'}, 'capped': {'type': 'boolean'}, 'domain': {'type': 'string'}, 'reason': {'type': ['string', 'null'], 'description': 'Why score is null, when it is'}, 'verdict': {'type': 'string', 'description': 'One sentence on what engines can do with the site'}, 'held_back': {'type': 'integer', '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'}, 'components': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'points', 'max'], 'properties': {'key': {'type': 'string'}, 'max': {'type': 'integer'}, 'name': {'type': 'string'}, 'points': {'type': 'integer'}, 'enabled': {'type': 'boolean'}, 'summary': {'type': 'string'}}, 'description': 'One scored area of the domain'}}, 'open_fixes': {'type': 'integer', 'description': 'Findings above info level'}, 'report_url': {'type': 'string', 'description': 'The report page for this domain on astraverify.com'}, 'request_id': {'type': 'string', 'description': 'req_... for this call. Quote it when reporting a problem with the result.'}, 'not_checked': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Parts skipped in this scan'}, 'inconclusive': {'type': 'boolean', 'description': 'The site could not be fetched, so the scan could not be completed. A failure to measure, not a finding about the site.'}, 'canonical_host': {'type': ['string', 'null']}, 'not_applicable': {'type': 'boolean', '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.'}, 'recommendations': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'severity', 'title'], 'properties': {'id': {'type': 'string'}, 'fix': {'type': ['object', 'null'], 'properties': {'kind': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'note': {'type': ['string', 'null']}, 'type': {'type': ['string', 'null']}, 'label': {'type': ['string', 'null']}, 'value': {'type': ['string', 'null']}, 'where': {'type': ['string', 'null']}}, '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".'}, 'why': {'type': 'string'}, 'scan': {'enum': ['email', 'discoverability'], 'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'title': {'type': 'string'}, 'severity': {'enum': ['critical', 'important', 'info'], 'type': 'string'}, 'component': {'type': 'string'}}}}, 'cache_age_seconds': {'type': 'integer', 'description': 'Age of the result; 0 means it was scanned just now'}, 'verified_component': {'type': 'string', 'description': 'Set by verify_fix: the component re-checked'}}}
Modifié
verify_fix
28 September 2026 02:40
Modifié
fetch_as_crawler
28 September 2026 02:40
Modifié
get_report
28 September 2026 02:40
Modifié
check_discoverability
28 September 2026 02:40
Modifié
check_email_security
28 September 2026 02:40
Modifié
verify_fix
24 September 2026 02:40
Modifié
fetch_as_crawler
24 September 2026 02:40
Modifié
get_report
24 September 2026 02:40
Modifié
check_discoverability
24 September 2026 02:40
Modifié
check_email_security
24 September 2026 02:40
Ajouté
verify_fix
22 September 2026 02:40
Ajouté
fetch_as_crawler
22 September 2026 02:40
Ajouté
get_report
22 September 2026 02:40
Ajouté
check_discoverability
22 September 2026 02:40
Ajouté
check_email_security
22 September 2026 02:40