MCP Server
ContentVitals runs a Model Context Protocol (MCP) server, so you can pull a site's SEO audit — findings, a coding prompt, and applyable per-page fixes — straight into your coding agent. Audit and fix your site without leaving Claude Code, Cursor, or any other MCP client.
Connect your coding agent
1. Create an API token
Open Account & API tokens in your dashboard and create a token. It starts with cv_ and is shown only once — copy it somewhere safe. A token grants access to all your sites' audits, so treat it like a password; you can revoke it anytime.
2. Add the server
The endpoint is https://contentvitals.ai/api/mcp (streamable HTTP). Authenticate with your token as a bearer header.
In Claude Code:
claude mcp add --transport http contentvitals \
https://contentvitals.ai/api/mcp \
--header "Authorization: Bearer cv_your_token_here"Or in any MCP client that uses a JSON config:
{
"mcpServers": {
"contentvitals": {
"type": "http",
"url": "https://contentvitals.ai/api/mcp",
"headers": {
"Authorization": "Bearer cv_your_token_here"
}
}
}
}Tools
list_sites
What it does
Lists the ContentVitals sites you own, each with its latest audit health score and when it was last audited.
When to use it
Start here so the agent knows which sites exist and how to reference them (by slug or domain) in the other tools.
get_site_audit(site)
What it does
Returns the latest completed Site SEO Audit for a site: health score, findings grouped by issue type (titles, meta descriptions, headings, duplication, thin content, localization, technical) with the exact affected pages, a copy-pasteable coding prompt, and a per-page changeset of before → after fixes for titles and meta descriptions.
When to use it
The instant, everyday call — returns the most recent cached audit with no waiting. Check the staleness field: if it reads "site-changed-since", the live site changed after the audit and you may want a fresh run.
run_site_audit(site, { syncFirst?, force? })
What it does
Triggers a fresh audit and returns a runId. By default it first re-syncs the site's pages so same-day edits are reflected (that step can take up to ~45s); the audit itself then runs in the background. If nothing has changed since the last audit, it returns that audit instead of spending a run.
When to use it
Use when the cached audit is stale or you've just published changes. Poll the returned runId with get_report.
get_report(runId)
What it does
Polls a run started by run_site_audit and returns its status (QUEUED, RUNNING, COMPLETED, FAILED). Once COMPLETED, it includes the full audit — the same shape as get_site_audit.
When to use it
Call every few seconds after run_site_audit until the status is COMPLETED, then act on the findings and changeset.
Example prompts
Once connected, just ask your agent in plain language — it picks the right tools:
- “Audit example.com with ContentVitals and apply the title-tag fixes.”
- “Pull the latest ContentVitals audit for my blog and list the high-priority issues.”
- “Run a fresh ContentVitals audit after my last deploy, then open a PR with the meta-description rewrites.”
Good to know
- Scoped to your account. A token can only ever reach the sites you own — every tool re-checks ownership.
- One audit per site at a time. Concurrent triggers are rejected while an audit is already running.
- GSC is optional. The audit works from on-page best practices, so it runs even on a site with no search traffic yet.
- Agent-triggered audits run on the free standard model, so a coding agent can't run up premium costs.
- Revoke anytime. Deleting a token from the account page immediately cuts off any agent using it.