AstraVerify Domain Trust Check
Email security and AI discoverability scores for any domain, with the exact record or tag to fix.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`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커뮤니티
증거