AstraVerify Domain Trust Check
Email security and AI discoverability scores for any domain, with the exact record or tag to fix.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"domain-trust": {
"url": "https://astraverify.com/mcp"
}
}
}远程端点
https://astraverify.com/mcpstreamable-http它能做什么
工具清单
工具(5)
🟢check_email_security(domain, refresh)
Email Security score for a domain with the DNS records found and the exact records to publish for each fix.
输入模式
{
"type": "object",
"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",
"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"
]
}🟢check_discoverability(domain, refresh)
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.
输入模式
{
"type": "object",
"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",
"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"
]
}🟢get_report(domain, refresh)
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.
输入模式
{
"type": "object",
"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",
"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"
]
}🟢fetch_as_crawler(agent, domain)
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.
输入模式
{
"type": "object",
"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",
"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"
]
}🟢verify_fix(component, domain)
Re-runs only the checks behind one component (crawl, plumbing, metadata, structured, answer) and returns the updated score.
输入模式
{
"type": "object",
"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",
"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"
]
}推荐提示词
get_reportget_report社区
证据