Pro and Enterprise

DomainGuard MCP server

One endpoint that hands Claude your whole account and lets it act on it: add a domain by answering a few questions, see what is broken across your domains, what is holding a page back in search, where you rank on a map, and what to change. Claude also checks the scanner's work and tells us when it is wrong. This page is the complete reference plus the playbooks Claude follows.

Built on the Model Context Protocol, the open standard for connecting AI assistants to outside systems.

What this does

DomainGuard already checks your domains: DNS, SSL, SPF, DKIM, DMARC, HTTP headers, blacklists, vulnerabilities, uptime, on-page SEO, whole-site crawls, accessibility, local rankings, reviews, citations, backlinks, and how often AI answers cite you. The dashboard shows you the findings. The MCP server hands those same findings to Claude, so you can ask about them in plain language and get a specific edit list back.

With a read-only key it explains. Ask which certificate expires first, why invoices are landing in spam, what regressed since last month, or which of eleven sites share the same misconfiguration. With a write-capable key it also works: run the scan, check the rankings, pull the competitor gap, then compare the result against the baseline it took before you started.

One boundary worth stating plainly. We monitor your domains, we do not host them. Every tool here reports, records, or measures. Claude can tell you exactly what your DMARC record should say and why the one you have is failing — publishing it still happens at your DNS provider.

At a glance

Endpoint
/api/mcp
Transport
Streamable HTTP
Auth
Bearer nhm_…
Tools
253 — 138 read, 115 write
Local SEO actions
33, catalogued
Sessions
None — stateless

Setting it up

Fastest: two clicks in the dashboard

Open Settings, API & MCP access and click Connect an AI agent. Claude Code is already picked, so click Create key & copy setup. For Claude Code that copies one terminal command that adds the server and starts verifying your findings. Cursor, VS Code and Claude Desktop get a config snippet, and any other agent gets a prompt to paste into its chat. The key is read-only unless you tick otherwise, which is all verifying and reporting needs. Prefer to do it by hand? The steps are below.

1. Create an API key

In the dashboard, go to Settings, then API Keys. Pick the scopes the key should reach — domains, scans, SEO, accessibility, vulnerability, compliance, status — and copy the key when it is shown. It is shown once. On Enterprise you can also tick write access; leave it off for a key that should only ever read and report. Give each key an expiry if you have a date in mind.

2. Add the server

# Claude Code

claude mcp add --transport http --scope user domainguard https://nhmohio.com/api/mcp \ --header "Authorization: Bearer nhm_your_key_here"

# Cursor: ~/.cursor/mcp.json

{ "mcpServers": { "domainguard": { "url": "https://nhmohio.com/api/mcp", "headers": { "Authorization": "Bearer nhm_your_key_here" } } } }

# VS Code: .vscode/mcp.json (asks for the key once, keeps it out of the repo)

{ "inputs": [ { "type": "promptString", "id": "domainguard-key", "description": "DomainGuard API key", "password": true } ], "servers": { "domainguard": { "type": "http", "url": "https://nhmohio.com/api/mcp", "headers": { "Authorization": "Bearer ${input:domainguard-key}" } } } }

# Claude Desktop: claude_desktop_config.json, through the mcp-remote bridge (needs Node.js)

{ "mcpServers": { "domainguard": { "command": "npx", "args": ["-y", "mcp-remote", "https://nhmohio.com/api/mcp", "--header", "Authorization:${DG_AUTH}"], "env": { "DG_AUTH": "Bearer nhm_your_key_here" } } } }

# OpenAI Codex CLI: ~/.codex/config.toml (key in DOMAINGUARD_API_KEY)

[mcp_servers.domainguard] url = "https://nhmohio.com/api/mcp" bearer_token_env_var = "DOMAINGUARD_API_KEY"

Any MCP client that supports a remote server over Streamable HTTP with a custom header works the same way, and one that only runs local servers can use the mcp-remote bridge above. There is no OAuth flow to complete and no event stream to open.

Keep the key to the job

Every tool a key reaches is described to the model before its first call, and that text stays in its context. A key with every scope and write is offered all 253 customer tools, roughly 55,000 tokens of descriptions. A key scoped to SEO and read only is offered 53. Give a reporting assistant no write access, and a local-SEO assistant just the seo and domains scopes.

Key's scopesTools offered
seo, read only53
seo + write94
domains + write62
vulnscan + write51
every scope, read only138
every scope + write253

3. Confirm it works

# Ask the server what this key can do

curl -s https://nhmohio.com/api/mcp \ -H "Authorization: Bearer nhm_your_key_here" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

The list that comes back is already filtered to the key's scopes and the account's plan, so it is the real answer to what this key can reach. If a tool you expected is missing, the key is missing a scope — mint a new one rather than rewording the prompt.

4. Ask it something

"Which of my domains have SSL certificates expiring in the next 30 days?" "Why might email from my domain be going to spam?" "Read the SEO results for every domain and give me one ranked fix list." "Where do we drop out of the map pack for 'emergency plumber', and why?" "Compare this month against last month and tell me what actually moved." "Use the verify_findings prompt: check what DomainGuard found and report back."

Plans, scopes, and what a key can reach

A key carries resource scopes, and optionally the write scope on top of them. Both are checked on every call, and the plan is re-read on every request — an account that moves from Enterprise to Pro loses write access on its next call rather than whenever someone remembers to rotate the key.

Free and Starter

No API or MCP access.

The endpoint answers 401.

Pro

Read access. 138 tools.

Everything that reads stored data, across every scope you grant.

Enterprise

Read and write. All 253 customer tools.

Adds the write scope: start scans, spend credits, change saved data.

ScopeWhat it unlocks
domainsInventory, history, DNS and registrar events, uptime, DMARC reporting
scansDomain scans, security checkups, dark-web monitoring
seoOn-page SEO, whole-site audits, and the entire Local SEO suite
accessibilityAudit-grade WCAG 2.2 AA evaluations
vulnscanVulnerability scans, ports, components, ownership verification
compliancePCI, HIPAA, and cyber-insurance control records
statusThird-party service status
writeRequired on top of any of the above for anything that changes state

Adding a domain is a conversation

You do not have to know what SPF is, what an exposure scan does, or which of nine setup steps matter. Tell Claude the domain. It asks a few plain questions — does this domain send email, is it a business that serves a place, which mailboxes to watch for breaches, is there an address at the domain we can send an ownership link to — and then makes one call that adds the domain and sets all of it up. Nothing in that call spends credits. Anything that does is quoted first.

1. plan_domain_onboarding

Returns where the account stands — plan, whether active scanning is already cleared, any saved business profile, credits and prices — and the ordered questions to ask, each with why it matters and what the answer becomes.

2. The questions, in your words

Claude confirms what is already known instead of re-asking, and can read the site's homepage (discover_local_seo_details) to pre-fill the business name, city, phone and phrases for you to correct.

3. onboard_domain, once

Adds the domain, starts the add-time checks you chose, records whether it sends mail, files it under a group, saves the business and phrases, sends the ownership link, watches the addresses — and returns the setup guide so Claude can say what is left.

# The write, with every answer collected

onboard_domain { domain: "siffrin.org", sends_email: true, exposure_monitoring: false, // one exposure scan now, none after unless asked group: "Clients", ownership_email: "admin@siffrin.org", // one click verifies this domain for deep scans local_business: { business_name: "Siffrin", location: "Canton, OH", is_service_business: false, keywords: ["tool repair canton", "pipe threader rental"] } } → steps: add_domain done · domain_settings done · local_business done · keywords 2 of 2 · ownership_email done → setup: first_scan running · alerts done · email_auth todo · ownership todo (link sent) · …

Local search is the same shape. get_local_seo_quickstart says what is saved and the exact price of a first measurement; run_local_seo_quickstart saves the business and up to five phrases, confirms the city, then checks the map pack and the organic result for every phrase and reads the Google Business Profile: six credits a phrase plus five. Claude quotes that number and waits for a yes. In Claude Code the whole thing is /mcp__domainguard__onboard_domain and /mcp__domainguard__set_up_local_seo.

Your agent checks our work

Everything we tell you about a domain is a claim about the live world: this host runs WooCommerce 8.4.0, that CVE applies to it, the DMARC record says p=none. Every one of those can be checked from outside, and the server asks every connected agent to check them. get_verification_tasks hands it each claim with how we tested it and the read-only commands that reproduce the test: dig, curl, openssl, a service greeting. Nothing logs in and nothing tries an exploit. A version inside the published range is the whole proof.

The agent sends a verdict for each one with submit_verification_results: confirmed, incorrect (what is actually true and how it knows) or could not verify. Confirmations count as much as disputes. They give us a running accuracy figure for every way we test, and the worst one is the next thing we fix. A dispute files a report to a person and puts the finding back in the queue for a re-check. It never quietly changes your result. Problems we missed go in the same call.

It works on Pro and Enterprise with a read-only key, from the account's own keys only. The limits are 400 verdicts a day and one message to us per domain. The full method, the data sources and their licences are in How we test, and how to re-test it. You can reuse it commercially under CC BY 4.0. Mistakes that aren't on the task list still go through report_scanner_issue.

Prompts and resources the server carries

onboard_domain
the interview, start to finish
set_up_local_seo
profile, phrases, quote, first measurement
verify_findings
re-test every claim, send verdicts, report back
review_domain
read everything, verify, report, deliver fixes
portfolio_triage
one ranked list across every domain, spending nothing
fix_email_deliverability
SPF, DKIM, DMARC and the report stream, in order
improve_local_seo
the free brief turned into an ordered plan
audit_domain
one call: verdict, fixes ranked by risk, what isn't measured
build_wisp
a written information security plan by interview, as a Word document

Resources: domainguard://guide, domainguard://onboarding, domainguard://local-seo, domainguard://review, domainguard://verification, domainguard://wisp — the same text as this page's guide, readable through the protocol.

How to use it well

That many tools is enough that the order you call them in decides whether a session is useful or expensive. These are the rules we give Claude, and the sequences that actually produce a fix list.

Ten ground rules

1

Start with list_domains

Almost every tool takes a numeric domain_id, and that is where the ids come from. Never guess one.

2

Add a domain by interview

plan_domain_onboarding returns the questions to ask — does it send email, is it a local business, which addresses to watch for breaches — and onboard_domain applies the answers in one call without spending anything.

3

Verify, then report back

get_verification_tasks gives every claim with how we tested it and read-only commands to re-test it. Run them and send each verdict, confirmations too, with submit_verification_results. Other mistakes go to report_scanner_issue, then submit_scanner_review once per domain.

4

Read before you scan

get_checkup_history, get_seo_results, get_vuln_scan_latest and get_local_rank_history return data already collected — free, instant, and usually enough.

5

Know what spends

Anything named run_, start_, check_ or verify_ does real work. So do get_domain_email_security, discover_domain_subdomains and get_scan_ownership_verification, which perform live lookups.

6

Quote before spending

get_local_seo_credits for the balance, get_local_seo_catalog for what an action costs and requires. Say the cost before the first paid call of a session.

7

Fresh request_key every paid run

Eight to a hundred characters of letters, digits, dots, underscores, and hyphens. Reuse one only to retry the identical request.

8

Recover, do not re-run

After a timeout, get_local_seo_operation with the same key returns the saved or in-flight result. A new key charges again.

9

Poll asynchronous scans

start_vuln_scan, start_site_audit and start_accessibility_audit return an id immediately and finish in the background. Leave real time between polls.

10

Confirm deletions in words

delete_domain erases a domain's whole history and cannot be undone. Name the exact thing and get a yes.

11

Say who applies the fix

The registrar, the DNS provider, the CMS, or Google Business Profile. A finding without an owner is not a fix.

12

Never invent a number

Scores, positions, volumes and prices come from tool output. If a tool did not return it, say it is not measured.

Playbooks

Each one is a sequence that ends in something the user can act on. Every one of them opens with free reads.

Triage the whole portfolio

The first session on an account. Costs nothing — every call here reads data already collected.

Make a page rank — the technical loop

The order matters. A page cannot rank if it cannot be crawled, cannot be trusted, or cannot be read.

Audit the whole site, not one page

A crawl of the sitemap or same-site links, checking every discovered page. Asynchronous — start, poll, read.

Get into the local map pack

The highest-leverage sequence for a business that serves a place. Set up once, then measure and diagnose.

Find phrases worth targeting

Research before tracking, and a baseline before any work starts.

Beat a specific competitor

Three reads of the same rival from different angles, turned into three things to do this month.

Be visible in AI answers

Increasingly the click never happens — the answer does. That is measurable, and it is a different surface from the ten blue links.

Reputation and links

The two cheapest wins in local search, and the warmest outreach list that exists.

Email that reaches the inbox

Not a ranking factor, but the fastest way to lose a customer who already found you — and the most common thing a monitored portfolio gets wrong.

Security findings that are also search problems

Mixed content, an expired certificate, a blacklist entry, a compromised page. These belong in the SEO report, not a separate one.

Prove the work worked

Every engagement should end here, against the baseline taken at the start.

Tool reference

All 262 tools: 144 that read stored data and 118 that change something, run a live lookup, or spend credits. 9 are operator-only, so a customer key can be offered at most 253. A key is only offered the subset its scopes and plan allow, so the list your client shows may be shorter than this one.

Fields marked ? are optional. Every tool runs through the same ownership checks as the dashboard, so a key reaches its own account and nothing else.

Domains, DNS, and deliverability

scope: domains

The inventory and everything recorded about it. list_domains is the entry point to the whole server — its numeric ids are what the other tools take.

Scans, checkups, and dark web

scope: scans

Security checkups and breach monitoring. The stored history is almost always enough — reach for a live run only when something has just changed.

SEO — one page and the whole site

scope: seo

What a page says about itself, and what a crawl of every page finds. The site audit is asynchronous: start it, poll the status, then read the results.

IndexNow — tell search engines a page changed

scope: seo

Bing, Yandex, Seznam, Naver, Yep, the Internet Archive and Amazon take change notices over IndexNow. Google does not. The site serves a key file first; after that every URL sent, when its page changed and what each engine answered is on record.

Google Search Console

scope: seo

Once the owner connects their Google account from the dashboard or the app (read-only access), these read Google's own numbers for their sites: clicks, impressions, click-through rate and average position, plus Google's indexing verdict for a page.

Keyword gap

scope: seo

The searches a site's competitors show up for, set against every page on the site and what Search Console says it already ranks for. Each search gets one job: write a page, fix a page, merge two pages, or leave it. The ones worth paying for in Google Ads are grouped by the page an ad should land on. A run spends credits, so quote first.

Crawler access — can search engines and AI assistants read the site

scope: seo

ChatGPT, Claude and Perplexity take no URL submissions; they find pages with their own crawlers and the search indexes. These tools check robots.txt and the site's edge as each crawler, every day for domains with IndexNow on, and show every domain's setup at once.

Local SEO — rankings, maps, reviews, competitors

scope: seo

The suite behind local search. A saved business profile is the prerequisite for everything that measures a position, and the catalog is the authority on what each action needs and costs.

Accessibility

scope: accessibility

Audit-grade WCAG 2.2 AA evaluation in a real browser. Separate from the accessibility violations that come back with an ordinary SEO scan, and separately scoped so a key can have one without the other.

Vulnerability and exposure

scope: vulnscan

Active scanning needs proof that the account controls the domain. Get the challenge, publish it, verify it, then scan.

Compliance evidence

scope: compliance

PCI, HIPAA, and cyber-insurance controls. These records are audit evidence — notes should quote the account owner's own wording rather than paraphrase it.

Uptime and dependencies

scope: status

The live status of third-party providers — the fastest way to separate a problem with your site from an incident at your host.

Alerts

scope: domains

The account's alert feed. Alerts are read through the domain tools; this is the one write against them.

Tell us when we are wrong

scope: scans

The assistant reading these results is the best reviewer the scanner has. A false positive, a missed problem, a number that contradicts what it can verify — report it, and the operators get one message per domain review. Enterprise only; 30 reports a day.

Operator tools (administrator only)

scope: admin

What the nightly fix routine reads. The admin scope is not one a customer key can carry: it is minted only from the administrator's own signed-in session and reaches only these tools.

Guided onboarding and setup

scope: domains

The way in. plan_domain_onboarding returns the interview; onboard_domain applies the answers in one write without spending; the setup guide says what is left. add_domain still works for a bare add.

Account: alerts, settings, groups, clients

scope: domains

The account-wide plumbing: the alert feed and history, alert and scan settings, group labels, and the client records a consultancy files domains under.

Hijack Guard: change events

scope: domains

DNS, registrar, certificate and hosting changes, per domain and account-wide, and the answer to each: ours (authorize), not ours (deny), or just moving it along.

Email: DMARC reports, senders, managed records

scope: domains

The aggregate-report stream behind the DMARC score: who is sending as the domain, whether they align, the report address to publish, and the option to let DomainGuard publish and advance the records.

Scan clearance and authorisation

scope: vulnscan

Basic scans run on any domain. Deep scans need the domain verified, one domain at a time: a sign-in address at it counts, and otherwise the email link is the easiest proof. The operator queue covers a client's domain the account cannot prove, and approval for deep scans of any domain covers the rest.

Lookalike controls

scope: vulnscan

Turning the watch on and off, the evidence pack for a filing, and how lookalike alerts are delivered.

Software, advisories, dismissals

scope: vulnscan

What the portfolio runs on, by vendor and by product; the KEV and CVE alerts raised against it with an exposure verdict; the products the account chose to track; and the findings it has silenced with a reason.

IP and network targets

scope: vulnscan

Daily port scans of public IPs and small ranges the account owns or is authorised to test. Adding one records the attestation.

Dark web: addresses

scope: scans

Which addresses are watched in breach data, and one breach in detail. New hits land in the alert feed and are pushed to the app.

Deep crawls, single-URL scoring, reports

scope: seo

Crawl chosen pages rather than the whole site, score any public URL on demand, and send the branded report.

Local SEO setup: quick start, discovery, quotes

scope: seo

The short road into local search. Read the quick start, let discovery pre-fill the business from the homepage, confirm the city, quote, then one run takes the first local-pack and organic measurement.

Accessibility review and export

scope: accessibility

The human half of an audit: record the manual WCAG judgements, close the audit, export the evidence pack.

Providers and subscriptions

scope: status

Which providers the site depends on and which the account is subscribed to.

Compliance seeding

scope: compliance

Seed or bulk-update the control list.

Audit a domain in one call

scope: domains, scans, vulnscan

audit_domain reads every stored result for a domain and hands back a verdict, the problems ranked by real risk across every area, with the measured evidence, exactly where to fix each one (the record or header lines to paste) and who does it, and a plain list of what hasn't been measured yet. The same problem seen by two scanners or on five hosts is one finding. It starts no scan and spends nothing, and each part is held to the key's scopes. The other tools here read stored results that had no tool of their own before.

The Local SEO catalog

The local-search tools cover setup and measurement directly. Behind run_local_seo_action sit another 33 catalogued actions, and get_local_seo_catalog is the authority on all of them: exact required inputs, prerequisites, price basis, and whether a saved result can be reopened for free. Call it before running an action rather than assuming a shape — the catalog is the contract, and it can gain entries between deploys of this page.

# The shape of a catalogued run

run_local_seo_action { action_id: "competitor_gap", // from get_local_seo_catalog request_key: "dg-compgap-20260829-x1", // fresh, 8-100 chars [A-Za-z0-9._-] input: { domain_id: 12 } // exactly the catalog's fields }
AreaAction ids
Profile and reputationprofile_health · business_profile · reviews · review_velocity · multi_platform_reviews · reputation_audit
Rankings and mapsrank_check · geogrid · serp_local_finder · serp_maps
Keyword researchkeyword_search_volume · keyword_opportunities · keywords_for_site · keywords_related · keyword_trends
AI search visibilityai_visibility · serp_ai_mode · ai_mentions · ai_top_pages · ai_top_sources · ai_compare · ai_keyword_data · ai_llm_response · ai_scraper
Authority and linksbacklinks_summary · backlinks_gap · local_authority · brand_mentions
Competitioncompetitor_gap · brand_mentions
Auditslocal_audit · citation_audit · citations · page_audit

Some actions cache: reopening a saved result is free and refreshing buys a new one. The catalog says which, per action. Prefer the saved result unless the question genuinely needs current data.

rank_check deserves a note

check_local_ranks is the quick path and measures the local pack only. The catalogued action measures more and is priced accordingly: two credits a phrase on the local pack and four on organic. surfaces chooses where to measure, and keywords narrows the run; omit it and every saved phrase is checked, so twenty tracked phrases across both surfaces is forty credits. Quote it first, and narrow the list when the user asked about one phrase.

run_local_seo_action { action_id: "rank_check", request_key: "dg-ranks-20260829-b2", input: { domain_id: 12, surfaces: ["local_pack", "organic"], // both, or just one keywords: ["emergency plumber akron"] // omit to check every saved phrase } }

When something goes wrong

A tool that fails comes back as an ordinary result carrying isError and a readable reason, not as a protocol error — so an assistant can read why and adapt instead of ending the turn. Only transport-level problems return a non-200 status.

What you seeWhat it meansWhat to do
401Key missing, malformed, revoked, expired, or the plan does not include API access.Check Settings, API Keys, and the plan. Do not retry.
401 “requires a DomainGuard API key”A dashboard session token was sent instead of a key.MCP takes an nhm_ key only. Sessions are refused so a stolen browser token cannot drive it.
403 Forbidden originThe Origin header failed validation.A client configuration problem, not a credential problem.
405 on an authenticated GETCorrect. There is no SSE stream to open. An unauthenticated GET answers 401 first, because the key is checked before the method.Use POST.
429The key's hourly rate limit, or a per-plan manual-scan limit.Wait. Free plans allow one manual SEO scan per day.
isError: “missing the … scope”The key does not carry that resource scope.Mint a key with the scope. Retrying will not help.
isError: “read-only”The tool changes state and the key has no write scope.Use the read equivalent, or upgrade to Enterprise.
409 idempotency_mismatchThat request_key was already used for a different request.Generate a fresh key for a genuinely new run.
Timeout on a paid actionWhether it ran is unknown.Call get_local_seo_operation with the same request_key. Never re-run blind.
A scan returns with no findingsIt is asynchronous and still running.Poll the matching results tool.
403 domain_verification_required or “requires ownership verification”A deep scan of a domain the account has not verified. Basic scans need no proof.request_ownership_email_link is the easiest proof; or get_scan_ownership_verification, publish, then verify_scan_ownership.
402 plan_upgrade_requiredThe feature is not on the account's plan.Say which plan has it. Do not retry.
403 on report_scanner_issue or submit_verification_resultsReports and verdicts are accepted only from the account's own API keys (Pro or Enterprise), carrying scans or domains respectively.Carry on without reporting.
400 location_not_foundThe city is not in the rank-data gazetteer as written.Offer the suggestions in the response, or search_locations, then call again.

Protocol notes

One endpoint

POST /api/mcp, speaking JSON-RPC 2.0. GET answers 405 with Allow: POST — there is no event stream to open, and saying so is more honest than holding one open with nothing to send.

Both protocol eras

The stateless 2026-07-28 revision and the handshake revisions 2025-11-25, 2025-06-18, and 2025-03-26 are all served, from the same code path. Holding no session state is what makes supporting both cheap.

Methods

initialize, server/discover, tools/list, tools/call, prompts/list, prompts/get, resources/list, resources/read, resources/templates/list (empty) and ping. prompts/list returns the nine prompts and resources/list the six resources above.

No sessions

No Mcp-Session-Id, nothing remembered between calls. Each request stands alone and carries its own authentication.

No batching

JSON-RPC batching was removed from the spec in the 2025-06-18 revision and is rejected here. Notifications receive 202 with no body.

Cacheable tool lists

tools/list results are marked private and scope-dependent. A shared intermediary must never serve one key's tool list to another.

Give this to Claude

Everything on this page is also published as one plain-text file written for an assistant to read. Point Claude at the URL, or paste the block below into your project's CLAUDE.md so every session starts knowing the rules instead of discovering them by spending credits.

The full operating guide

https://nhmohio.com/mcp/claude-guide.md
Open the guide

# Paste into CLAUDE.md

## DomainGuard MCP The `domainguard` MCP server is connected. It reaches every part of the account: DNS, SSL, mail authentication and DMARC reports, security checkups, Hijack Guard, lookalikes, vulnerabilities and ports, software CVE/KEV alerts, dark web, on-page and site-wide SEO, accessibility, local rankings and the Google Business Profile, provider status, compliance and incident records. Rules: - Start with `list_domains`; every other tool needs the numeric `domain_id`. - Read stored results (`get_checkup_history`, `get_seo_results`, `get_vuln_scan_latest`, `get_local_rank_history`, `get_domain_setup_guide`) before running any scan. - To add or set up a domain: `plan_domain_onboarding` first, ask its questions in plain words, then `onboard_domain` once. It spends nothing. Paid steps (`run_local_seo_quickstart`, `start_accessibility_audit`) come after, on a quote the user agreed to. - Verify, then report back: `get_verification_tasks` gives each claim with how it was tested and read-only commands to re-test it. Run them on the account's own domains only, then send every verdict (confirmations too) with `submit_verification_results`. Other mistakes: `report_scanner_issue`, then `submit_scanner_review` once per domain. Never log in, fuzz or exploit. - `run_*`, `start_*`, `check_*`, `verify_*`, `scan_*`, `fetch_*`, `discover_*` and `assess_*` cost time or credits. So do `get_domain_email_security` and `get_scan_ownership_verification`. Say the cost before spending. - Call `get_local_seo_catalog` before `run_local_seo_action`; it is the authority on inputs and price. - Every paid action needs a fresh `request_key` (8-100 chars, [A-Za-z0-9._-]). After a timeout use `get_local_seo_operation`, never a re-run. - `start_vuln_scan`, `start_site_audit`, `start_deep_seo_job` and `start_accessibility_audit` are asynchronous — poll their results tools. - Confirm every `delete_*`, `remove_*`, `untrack_*` and `unsubscribe_*` in words before calling it. - DomainGuard monitors these domains, it does not host them. Deliver the diagnosis plus the exact change, and say where the user applies it — registrar, DNS provider, host, CMS, or Google Business Profile. - Never estimate a score, position, volume, or price that a tool did not return; never invent a business name, city, phrase or email address. Full guide: https://nhmohio.com/mcp/claude-guide.md (also the MCP resource domainguard://guide). Prompts: /mcp__domainguard__audit_domain, onboard_domain, set_up_local_seo, review_domain, portfolio_triage, fix_email_deliverability.

How access is limited

Your account only

Every tool runs through the same ownership checks as the dashboard. A key reaches the domains on its own account and nothing else.

Scopes decide the tool list

Tools outside a key's scopes are never offered and cannot be called. Mint one key per use and give each only what it needs.

Read-only means read-only

Without the write scope, an assistant cannot start live lookups or scans, spend credits, or change configuration. Write is a separate tick box, and only on Enterprise.

Keys cannot mint keys

An API key is refused at the key-management endpoints, so a narrow key handed to an agent can never issue itself a broader one. That stays a dashboard action.

Sessions are refused

The MCP endpoint takes an API key and nothing else. A browser token obtained through XSS cannot drive it.

Revocable and rate limited

Revoke a key and it stops working immediately. Each key carries its own hourly limit, and you can set an expiry date when you create it.

Point Claude at your domains

Pro reads your account. Enterprise reads it and acts on it. Both take about a minute to set up.