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社群
證據