Recommended for first-time users
Light MCP — no authentication
No account, API key, bearer token, browser login, or OAuth. Scan public websites with the three core tools and a limited daily quota.
Start with Light MCPConnect agents to the free CertScore.ai website privacy scanner and cookie checker for evidence-backed cookies, trackers, consent and Reject Path observations, policy findings, regulatory review signals, and HTTPS/TLS observations.
CertScore.ai outputs are automated public-web observations for human and agentic review. They are not legal advice, certification, or a compliance determination.
Start here
Start anonymously in one minute. Upgrade only when you need more scans, production or team access, backend automation, history, or advanced tools.
Recommended for first-time users
No account, API key, bearer token, browser login, or OAuth. Scan public websites with the three core tools and a limited daily quota.
Start with Light MCPFor production and higher volume
Hosted MCP — OAuth is the managed remote route. Local MCP — scoped API key is the stdio and backend route.
Set up Authenticated MCPRecent release: CertScore.ai MCP Light is now available
OpenAI integration path
This silent 2:47 recording demonstrates the OpenAI MCP integration path: a user asks ChatGPT for a public-site scan, ChatGPT invokes CertScore tools, presents the evidence-backed observations and tool-call details, and opens the full CertScore report.
Open the standalone MP4Compare routes
| Route | Setup method | Authentication | Account | Quota | Available tools | Intended user | Website / access limits | Upgrade path |
|---|---|---|---|---|---|---|---|---|
| Light MCP — no authentication | One Codex command or remote Streamable HTTP URL | None | Not required | Up to 50 new scans per UTC day across Light and 5 per rolling 10 minutes; eligible reuse is free | certscore_scan_site, certscore_get_scan_status, certscore_get_scan_bundle | First-time users, testing, and discovery | Public HTTP or HTTPS websites; core tools only | Authenticate for volume, history, teams, or advanced tools |
| Hosted MCP — OAuth | Connect the hosted endpoint from an OAuth-capable client | OAuth authorization code with PKCE | Required | Higher-volume allowance based on access | Core plus approved history and diagnostic tools | Production, teams, and managed remote clients | Scopes control read and scan creation; creation may require support | Request more scopes or volume from support |
| Local MCP — scoped API key | Install and run the local stdio server | Scoped API key in the client environment | Required | Higher-volume allowance based on key access | Tools permitted by the key scopes | Backend, local, and controlled automation | Protect and rotate keys; scan creation is support-gated | Request more scopes, tools, or volume |
Read protection
Completed scan and domain resources use weighted, rolling limits. These protections apply in addition to account, API-key, and scan-creation quotas. Policy version 2026-08-14.
| Terminal-read scope | Rolling 10 minutes | Rolling 24 hours |
|---|---|---|
| Caller + scan/resource | 120 units | 1200 units |
| Scan/resource across callers | 4000 units | — |
| Caller across scans/resources | 480 units | — |
HTTP 429 and MCP rate-limit errors include Retry-After when a retry time is available, plus machine-readable policy version, profile, scope, window, limit, usage, and requested-unit fields. Wait for that delay. Poll only active status resources and stop polling when a scan becomes terminal.
Hosted MCP applies the policy before composite tool fan-out, so an over-limit bundle is rejected before it starts its internal API reads. Local MCP receives the same protection from the underlying CertScore API.
Beginner workflow
First-time agents should use the Light endpoint. It uses Streamable HTTP and requires no signup, API key, bearer token, browser login, or OAuth, and exposes exactly certscore_scan_site,certscore_get_scan_status, andcertscore_get_scan_bundle.
Light:
https://mcp.certscore.ai/mcp/light
Transport: Streamable HTTP
Authentication: None
Tools: certscore_scan_site, certscore_get_scan_status, certscore_get_scan_bundlecodex mcp add certscore --url https://mcp.certscore.ai/mcp/lightLight allows up to 50 genuinely new scans per UTC day across the public Light surface and 5 per rolling 10 minutes. Reused eligible results do not consume quota.
First run
Scan https://ergoveritas.com/.well-known/certscore-canary/sentinels/broad-baseline.html. If certscore_scan_site includes preConsentPreview, treat it as a partial preview and continue the workflow. Distinguish captured totals from bounded returned identities; use trackingVendorCount for non-operational tracking vendors and keep operationalVendors separate. Do not compare the compatibility preview trackerCount with the completed inventory's broader trackerCount. Never report preview counts as final totals. If certscore_scan_site returns a queued, running, or finalizing result, retain the returned scanId and poll certscore_get_scan_status using scanId only. If certscore_scan_site returns a retryable error without a scanId, wait for retryAfterSeconds and retry certscore_scan_site; do not call certscore_get_scan_status until a scanId exists. Once the scan reaches a terminal status, call certscore_get_scan_bundle with detail=findings and maxBytes=8000. Summarize whether the result was new or reused, the score, risk level, findings, evidence links, coverage limitations, and report URL. Explain truncation or omitted sections when present. Treat results as automated public-web observations, not legal conclusions, certifications, or compliance determinations.ErgoVeritas provides stable, owned canary pages suited to demonstrating the complete scan, status, and bundle flow. The canary intentionally contains test signals, so its findings are useful for exercising the API rather than evaluating a production site.
CertScore results are automated observations from a public-web scan. No-go, not-observed, and limited-coverage results are not proof of compliance, absence of risk, or legal status. Review the retained evidence and applicable context before relying on a finding.
Example prompts
Use CertScore.ai to scan [PUBLIC URL] before launch. Report the CertScore score and evidence-backed findings for pre-consent cookies and trackers, consent controls, the jurisdiction-neutral GPC response, Accept and Reject Path post-action observations when available, privacy-policy transparency, and HTTPS/TLS. Treat Accept as a score-neutral baseline and non-confirmed choice-path results as limited coverage. Do not present the result as legal advice, certification, or a compliance determination.
Use CertScore.ai to review [VENDOR PUBLIC URL]. Summarize the observed third-party tracking technologies, cookies and storage, CMP and consent-management signals, the jurisdiction-neutral GPC response, Accept and Reject Path post-action observations when available, policy and transparency findings, regulatory review signals, and HTTPS/TLS observations. Treat Accept as a score-neutral baseline. Include supporting evidence, the report URL, and all material coverage limitations.
Use CertScore.ai to scan [PUBLIC URL] for audit diagnostics. Follow the scan through a terminal status, retrieve the findings bundle, and prioritize evidence-backed privacy, cookie, tracker, consent, jurisdiction-neutral GPC response, Accept Path, Reject Path, policy, GDPR/ePrivacy, CCPA/CPRA, and transport observations. Treat Accept as a score-neutral baseline and non-confirmed choice-path results as limited coverage. Explain what was observed, what remains unknown or limited, and which evidence a human reviewer should inspect next.
Reject Path observations are reported only when the scan has eligible, confirmed post-refusal evidence. Unsupported, unavailable, or limited Reject Path coverage remains explicit and score-neutral.
Scan bundles may include three typed results: postAcceptObservation is a score-neutral comparison baseline, postRefusalObservation is the only one that can support a choice-path finding, and gpcResponse is a jurisdiction-neutral comparison with scoreEffect: none. A terminal scan status describes lifecycle only; the observation verdict carries the outcome, and every non-confirmed observation status is limited coverage rather than a pass.
Light workflow
certscore_scan_site with a public URL.scanId, wait retryAfterSeconds and retry certscore_scan_site.preConsentPreview is present, summarize it only as preliminary passive observations. It is not a finding, score, or final result.scanId.certscore_get_scan_status using scanId only. Never poll until scanId exists.certscore_get_scan_bundle.detail=findings for a compact finding review.detail=evidence for evidence digests and references.recommendedNextAction or increase maxBytes.certscore_scan_site
→ retry certscore_scan_site if a retryable error has no scanId
→ summarize preConsentPreview only as preliminary context when present
→ certscore_get_scan_status with scanId if still running
→ certscore_get_scan_bundle after terminal statusRecommended bundle budgets:
summary maxBytes=5000
findings maxBytes=8000
evidence maxBytes=8000
full maxBytes=12000 or higherA 5,000-byte response prioritizes compact core finding rows over optional inventory and duplicate envelope fields. When repeated per-finding URLs are omitted, use evidenceUrlTemplate with contentUrls.findings and the returned finding ID. Inspect actualBytes, truncated, omittedSections,canonicalFindingsComplete, nextRecommendedMaxBytes, and returned report or evidence content URLs.
Call certscore_get_scan_status only after certscore_scan_site returns a scanId. A retryable response without one must return to certscore_scan_site.
CertScore results are automated observations from a public-web scan. No-go, not-observed, and limited-coverage results are not proof of compliance, absence of risk, or legal status. Review the retained evidence and applicable context before relying on a finding.
Verify
List the available CertScore tools and confirm that certscore_scan_site, certscore_get_scan_status, and certscore_get_scan_bundle are available. Then scan https://ergoveritas.com/.well-known/certscore-canary/sentinels/broad-baseline.html and report whether the result was new or reused.Success means the tool list contains exactly the three Light tools, no authorization page appears, andcertscore_scan_site returns a stable scanId plus an explicit new-or-reused decision. An eligible reused result reports that quota was not consumed.
Troubleshooting
Remove the connection and add the exact Light endpoint https://mcp.certscore.ai/mcp/light. Do not configure a token.
Retry certscore_scan_site only when the error says retryable: true. Never poll status without scanId.
Wait for retryAfterSeconds or stop. Eligible recent-result reuse does not consume quota.
Report it as reused. The eligible prior result was returned and quota was not consumed.
If canonicalFindingsComplete is true, retry only for omitted envelope detail. Otherwise follow nextRecommendedMaxBytes, increase maxBytes, or open a returned report or evidence URL.
completed_limited, no-go, and not-observed are automated observations, not proof of compliance.
Light-to-Authenticated migration
Upgrade when you need a dedicated higher-volume allowance, production or team access, backend automation, scan history, advanced diagnostic tools, or support-managed scopes.
Use the full endpoint and authenticate with hosted OAuth or a local scoped API key. Quota and tool availability follow the granted access.
Core identifiers and canonical response fields—including scanId, status, score, risk, coverage, and timestamps—remain compatible.
Need more scans or advanced tools? Upgrade to Authenticated MCP.
Authenticated remote setup
Use this route for an OAuth-capable remote MCP client in production or team workflows. A CertScore account is required. The authorization flow grants only the approved scopes.
MCP endpoint:
https://mcp.certscore.ai/mcp
Protected-resource metadata:
https://mcp.certscore.ai/.well-known/oauth-protected-resource/mcp
Authorization-server metadata:
https://certscore.ai/.well-known/oauth-authorization-serverRead access requests the OAuth scopes scan:read andmcp. Active Trial workspaces connecting through Claude receivescan:create automatically, with up to 20 genuinely new scans per hour and 100 per day per workspace. Eligible recent-result reuse does not consume that allowance. Other clients still require an explicit grant.
Authenticated local setup
Use this route for local stdio clients, backend automation, or environments where you manage credentials directly. A CertScore account and a scoped key are required.
brew tap ergoveritas1-alt/certscore https://github.com/ergoveritas1-alt/certscore.ai
brew install --cask certscore-mcpThe cask installs a persistent local MCP command for users who prefer Homebrew-managed tools.
Local MCP access
The local stdio MCP server works with a self-serve cs_ro_ key carrying pulse:read and mcp. Sign in, verify your email, then request the key from /api/v2/keys/request. Stdio tools that create scans require pulse:scan; hosted OAuth usesscan:create. Active Trial workspaces connecting through Claude receive the hosted scope automatically. Other clients and local keys remain grant-gated at [email protected].
Self-serve read-only MCP key:
1. Sign in at https://certscore.ai/login and verify your email.
2. POST https://certscore.ai/api/v2/keys/request from the signed-in browser session.
3. Use the returned cs_ro_ key as CERTSCORE_API_KEY.Local verification
certscore-mcp --version
certscore-mcp --help
CERTSCORE_API_KEY=<token> certscore-mcp doctor
CERTSCORE_API_KEY=<token> certscore-mcp doctor --check-authThe doctor command checks the installed binary, Node.js runtime compatibility, the configured CertScore.ai base URL, API v2 health, and API key presence without printing the token. Add --check-auth to validate the credential against the API without creating a scan or inspecting raw scanner artifacts.
Local verification
curl -LO https://github.com/ergoveritas1-alt/certscore.ai/releases/download/certscore-mcp-v{version}/certscore-mcp-v{version}.tar.gz
curl -LO https://github.com/ergoveritas1-alt/certscore.ai/releases/download/certscore-mcp-v{version}/SHA256SUMS
sha256sum --check SHA256SUMSRelease tarballs are built on Linux by GitHub Actions. The published SHA256SUMS file should match the cask checksum.
Local client configuration
{
"mcpServers": {
"certscore": {
"command": "certscore-mcp",
"env": {
"CERTSCORE_API_KEY": "<token>",
"CERTSCORE_BASE_URL": "https://certscore.ai"
}
}
}
}The server runs over stdio and reads the API key from the MCP client environment. Keep the token scoped and rotate it if it is shared outside your workspace.
Local client configuration
{
"mcpServers": {
"certscore": {
"command": "certscore-mcp",
"env": {
"CERTSCORE_API_KEY": "<token>",
"CERTSCORE_BASE_URL": "https://certscore.ai"
}
}
}
}Advanced local troubleshooting
Advanced local development
CERTSCORE_API_KEY=<token> pnpm mcp:certscoreAdvanced local clients
{
"mcpServers": {
"certscore": {
"command": "certscore-mcp",
"env": {
"CERTSCORE_API_KEY": "<token>",
"CERTSCORE_BASE_URL": "https://certscore.ai"
}
}
}
}Advanced local clients
{
"mcpServers": {
"certscore": {
"command": "pnpm",
"args": ["mcp:certscore"],
"cwd": "/path/to/WC01",
"env": {
"CERTSCORE_API_KEY": "<token>",
"CERTSCORE_BASE_URL": "https://certscore.ai"
}
}
}
}Tools
Several tools return or reference Pulse, CertScore.ai's compact public report projection for agents. See What is Pulse? for how it relates to scan resources and findings.
Creates a public-website privacy scan or reuses an eligible recent completed scan. Coverage includes pre-consent storage, trackers, consent and CMP signals, privacy-policy disclosures, transport security, and GDPR/ePrivacy or CCPA/CPRA review signals. The response contains a stable scanId, lifecycle status, retry timing, and sometimes a bounded preliminary preConsentPreview; preliminary data contains no final findings or score. Results are automated public-web observations, not legal advice, certification, or a compliance determination. Tool and workflow documentation: https://certscore.ai/developers/mcp.
Retrieve the API v2 public-safe scan resource, including completed-limited no-go disposition, reason-specific guidance, and timing when available.
Returns lifecycle status for a stable CertScore scanId. Active responses include phase, heartbeat, estimated progress, retryAfterSeconds, and sometimes a bounded preliminary preConsentPreview. Terminal responses include completion status, CertScore score and risk metadata when available, coverage, persisted execution region and timestamps, report URL, and a next-action field. Preliminary observations are distinct from completed findings.
Focused follow-up: retrieve a bounded Pulse report with high-signal TextContent and typed structuredContent, including customer-safe no-go messaging. For broad privacy questions, use certscore_get_scan_bundle first because it combines canonical findings, limitations, and pre-consent rows without redundant calls.
Focused follow-up: retrieve a bounded public-safe evidence packet with a concise TextContent digest and typed structuredContent. For broad privacy questions, use certscore_get_scan_bundle first. Excludes raw cookie values, raw bodies, sensitive payloads, full DOM, and unredacted query values.
Returns the completed or completed-limited CertScore evidence bundle for a stable scanId as concise TextContent and matching structuredContent. Available sections include the canonical report overview, bounded projected findings, pre-consent cookie and tracker evidence, coverage limitations, persisted execution provenance, and retrieval URLs. Detail tiers and byte budgets control the bounded response, with explicit returned, total, truncated, and omitted-section metadata. Accept and Reject Path content is present only for confirmed, evidence-qualified post-action observations; unsupported or inconclusive outcomes remain neutral coverage limitations. Results are automated public-web observations, not legal advice, certification, or a compliance determination.
Return structured findings plus completed-limited no-go disposition and guidance for downstream review or ticketing workflows.
Focused follow-up: list bounded API v2 public-safe findings already projected by the canonical pipeline, with matching high-signal TextContent and typed structuredContent. For broad privacy questions, use certscore_get_scan_bundle first.
Focused follow-up: retrieve bounded row-level public-safe pre-consent cookie/tracker evidence with matching TextContent and typed structuredContent. For a new broad request such as checking a site for pre-consent tracking, use certscore_scan_site then certscore_get_scan_bundle first.
Explain one projected finding with public evidence, caveats, reviewer next steps, and reason-specific no-go context when applicable.
Retrieve the latest eligible API v2 public-safe scan for a domain.
Focused follow-up: retrieve bounded row-level public-safe pre-consent cookie/tracker evidence from the latest eligible scan for a domain, with matching TextContent and typed structuredContent. For a broad current-site review, use certscore_scan_site then certscore_get_scan_bundle first.
Timing
API v2 MCP tools return startedAt, completedAt, and scanTimeSeconds when CertScore.ai has enough timing evidence. Treat scanTimeSeconds: null as unavailable rather than zero.
const scan = await certscore_get_scan({ scanId });
const status = await certscore_get_scan_status({ scanId });
// scan.scanTimeSeconds and status.scanTimeSeconds are numbers or null.Completed with limited coverage
Scan, status, report, export, and explanation tools preservecompleted_limited,resultDisposition: no_go, the stable reason code, customer-safe copy, target-site versus scanner-limitation attribution, retry guidance, and a bounded evidence excerpt when retained.
Developer reference
The beginner MCP path ends above. Use these separate developer sections only when you are building a direct HTTP or TypeScript integration.
| Integration | Access | Best for |
|---|---|---|
| REST API | Language-neutral HTTP resources | Backend jobs, webhooks, and language-neutral integrations |
| TypeScript SDK | Typed resource clients and polling helpers | Typed Node.js and TypeScript applications |
Workflow
1. certscore_scan_site with a public URL; a new scan returns its stable scanId and may include a partial preConsentPreview when the runtime lane completes or reaches its six-second checkpoint; otherwise it falls back to the stable scanId alone.
2. Treat preConsentPreview only as partial passive context. Distinguish captured totals from bounded returned identities; use trackingVendorCount for non-operational vendors and keep operationalVendors separate. Never treat it as a finding, score, or final result.
3. certscore_get_scan_status only when certscore_scan_site returns a non-terminal result containing scanId; poll with scanId only.
4. certscore_get_scan_bundle for canonical status, findings, bounded evidence, and pre-consent inventory.
5. certscore_get_report, certscore_get_evidence, certscore_list_findings, or cookie inventory only when a dedicated view is needed.
6. certscore_explain_finding for evidence summaries and caveats.
7. certscore_get_latest_domain_scan or certscore_get_latest_domain_pre_consent_cookies_trackers when the user asks for latest-domain data.certscore_scan_site reports whether it reused a result, the freshness decision, whether anonymous quota was consumed, the remaining daily allowance, its UTC reset time, and the recommended next tool.
{
"executionMode": "reused_scan",
"reused": true,
"reusedScanAgeSeconds": 90,
"freshnessDecision": "reused_existing_scan",
"quotaConsumed": false,
"anonymousQuotaLimit": 20,
"anonymousQuotaRemaining": 7,
"anonymousQuotaResetAt": "2026-07-16T00:00:00.000Z",
"upgradeSupportEmail": "[email protected]",
"upgradeMessage": "For a higher-volume allowance, contact [email protected].",
"recommendedNextTool": "certscore_get_scan_bundle"
}certscore_get_pre_consent_cookies_trackers({
scanId: "00000000-0000-4000-8000-000000000123"
})
certscore_get_latest_domain_pre_consent_cookies_trackers({
domain: "ergoveritas.com",
scanFrom: "eu_ie"
})MCP tools return compact public-safe JSON. They must not infer raw-signal findings or convert automated review signals into legal conclusions. CertScore.ai outputs are automated public-web observations for human and agentic review. They are not legal advice, certification, or a compliance determination. Group Cookies & Trackers rows by vendor, purpose, and host when the user wants a short review handoff.
Developer support
Contact [email protected] for preview API keys, feature requests, broken examples, schema questions, integration issues, or missing API coverage. Include the route, SDK method, MCP tool, scan ID, requested scopes, expected volume, or page URL when useful.