SEO Core

Agent Workflows

MCPClaude CodeCodexCursorLocal Preflight

Set Up SEO Core MCP

Install the MCP package, create a scoped access token, connect your preferred client, verify the available tools, and troubleshoot common setup problems.

Important

MCP access is available on Growth, Elite, and Lifetime plans. Create tokens from Account > Integrations > Agent Access. Tokens are shown once, should start read-only, and should never be pasted into chat.

Choose a connection mode

Local stdio package

Recommended for Claude Code, Codex, Cursor, and any client that needs local workspace tools such as route detection, metadata inspection, and local preflight checks.

Hosted OAuth MCP

Best for OAuth-capable remote MCP clients that only need cloud SEO Core context. Hosted mode does not inspect local files or run local preflights.

Local HTTP compatibility

Useful when a client cannot start a stdio server directly. It still runs on your machine and still uses your scoped Agent Access token.

Read-only first

Start with project, usage, crawl, and keyword read scopes. Add write, proposal, and deploy confirmation scopes only when the workflow needs them.

What the MCP can do

  • Read project context, plan usage, crawl status, grouped issues, URL diagnostics, keyword mappings, reports, and latest local preflights.
  • Run official cloud crawls, upload local preflight summaries, generate backend-grounded SEO answers, sync GSC keywords, and map keywords to URLs.
  • Inspect only the current workspace for local framework, routes, metadata, headings, and preflight evidence before a pull request ships.
  • Create deploy proposals and confirm deploys only through explicit high-risk tools, project permissions, plan checks, scopes, and backend audit logs.

Install local stdio MCP

  1. 1

    Confirm requirements

    Use Node.js 18 or newer, an SEO Core Growth, Elite, or Lifetime workspace, and an SEO Core project that the agent should be allowed to access.

  2. 2

    Install the package

    Install the public MCP package globally so your client can launch the seo-core-mcp command.

    npm install -g @seo-core-app-ai/mcp
    npm view @seo-core-app-ai/mcp version
  3. 3

    Create a scoped token

    In SEO Core, open Account > Integrations > Agent Access, create a token, choose the allowed project, select only the scopes needed, and store the token before closing the dialog.

  4. 4

    Set required environment variables

    Add these variables inside your MCP client configuration, not in chat messages or committed files.

    SEO_CORE_MCP_TOKEN=seo_mcp_...
    SEO_CORE_API_BASE=https://www.seocoreapp.com/api
  5. 5

    Verify the connection

    Ask the agent to call get_mcp_status, then list_projects. From an app workspace, also call detect_local_framework to confirm local tools can see the current project.

Client setup

Claude Code

Add SEO Core as a stdio MCP server:

claude mcp add seo-core \
  --env SEO_CORE_MCP_TOKEN=seo_mcp_... \
  --env SEO_CORE_API_BASE=https://www.seocoreapp.com/api \
  -- seo-core-mcp

Codex

Add this server to your Codex MCP configuration:

[mcp_servers.seo_core]
command = "seo-core-mcp"
env = { SEO_CORE_MCP_TOKEN = "seo_mcp_...", SEO_CORE_API_BASE = "https://www.seocoreapp.com/api" }

Cursor

Add this entry to your Cursor MCP configuration:

{
  "mcpServers": {
    "seo-core": {
      "command": "seo-core-mcp",
      "env": {
        "SEO_CORE_MCP_TOKEN": "seo_mcp_...",
        "SEO_CORE_API_BASE": "https://www.seocoreapp.com/api"
      }
    }
  }
}

Generic MCP clients

Use the same command and environment pattern when a client accepts JSON MCP server definitions:

{
  "mcpServers": {
    "seo-core": {
      "command": "seo-core-mcp",
      "env": {
        "SEO_CORE_MCP_TOKEN": "seo_mcp_...",
        "SEO_CORE_API_BASE": "https://www.seocoreapp.com/api"
      }
    }
  }
}

Hosted OAuth MCP

Clients that support remote Streamable HTTP MCP with OAuth can connect directly to SEO Core:

https://www.seocoreapp.com/api/mcp

Claude Code

claude mcp add seo-core-hosted \
  --transport http \
  https://www.seocoreapp.com/api/mcp

# Then open Claude Code and run /mcp to authorize with OAuth.

Codex

codex mcp add seo-core-hosted \
  --url https://www.seocoreapp.com/api/mcp

codex mcp login seo-core-hosted \
  --scopes projects:read,usage:read,crawl:read,keywords:read

Cursor

{
  "mcpServers": {
    "seo-core-hosted": {
      "url": "https://www.seocoreapp.com/api/mcp",
      "transport": "http"
    }
  }
}
  • Hosted MCP supports cloud tools only. Use the local stdio package for workspace inspection and local preflights.
  • OAuth authorization uses project selection, PKCE, scoped access tokens, refresh rotation, and revocation.
  • High-risk deploy confirmation scopes remain opt-in and require explicit consent.

Local HTTP compatibility mode

Stdio is the recommended install path. Local Streamable HTTP mode is available for clients that need an HTTP MCP endpoint during compatibility testing:

SEO_CORE_MCP_TOKEN=seo_mcp_...
SEO_CORE_API_BASE=https://www.seocoreapp.com/api
SEO_CORE_MCP_TRANSPORT=http
SEO_CORE_MCP_HTTP_PORT=8787
SEO_CORE_MCP_HTTP_PATH=/mcp
seo-core-mcp

Note

Local HTTP still runs on your machine and uses your Agent Access token. Bind it only to a trusted local environment and stop the process when you finish testing.

Recommended workflows

Health check

Call get_mcp_status, list_projects, and get_project_context before asking the agent to make SEO decisions.

Preflight before a PR

Run detect_local_framework, detect_local_routes, and run_local_preflight against your local URL before review.

Prioritize production issues

Use get_crawl_status, list_crawl_issues, get_url_diagnostics, and answer_seo_question.

Ship controlled fixes

Use suggestion tools first, then create_deploy_proposal. Confirm only after reviewing the returned phrase and proposed changes.

Most useful commands and examples

Read-only project and crawl context

get_mcp_status({})
list_projects({})
get_project_context({ "project_id": 123 })
get_plan_usage({ "project_id": 123 })
get_crawl_status({ "crawl_run_id": 456 })
list_crawl_issues({ "crawl_run_id": 456, "severity": "high", "limit": 20 })
get_url_diagnostics({ "project_id": 123, "url": "https://example.com/pricing" })
list_keyword_mappings({ "project_id": 123, "url": "https://example.com/pricing" })

Local workspace checks

detect_local_framework({ "workspace_root": "/path/to/app" })
detect_local_routes({ "workspace_root": "/path/to/app" })
inspect_local_metadata({ "workspace_root": "/path/to/app", "route": "/pricing" })
suggest_local_metadata_changes({
  "workspace_root": "/path/to/app",
  "route": "/pricing",
  "title": "SEO Software Pricing | Example",
  "description": "Compare plans for technical SEO monitoring, AI recommendations, and guarded deployments."
})
run_local_preflight({
  "workspace_root": "/path/to/app",
  "local_url": "http://localhost:3000",
  "max_pages": 25,
  "allow_start_server": false
})

SEO actions

run_cloud_crawl({ "project_id": 123, "max_pages": 100, "respect_robots": true, "include_sitemap": true })
sync_gsc_keywords({ "project_id": 123, "start_date": "2026-04-01", "end_date": "2026-05-01" })
suggest_metadata({
  "project_id": 123,
  "url": "https://example.com/pricing",
  "keyword": "seo software pricing",
  "language": "en"
})
suggest_heading_fixes({
  "project_id": 123,
  "url": "https://example.com/pricing",
  "keyword": "seo software pricing",
  "language": "en"
})
map_keyword_to_url({
  "project_id": 123,
  "url": "https://example.com/pricing",
  "keyword": "seo software pricing",
  "intent": "commercial",
  "track": true
})

Deploy proposal and confirmation

create_deploy_proposal({
  "project_id": 123,
  "changes": [
    {
      "url": "https://example.com/pricing",
      "element_type": "title",
      "original_text": "Pricing",
      "deployed_text": "SEO Software Pricing | Example"
    }
  ],
  "expires_in_minutes": 60
})

confirm_deploy({
  "proposal_id": 789,
  "confirmation_phrase": "CONFIRM SEO DEPLOY 789"
})

Important

confirm_deploy is intentionally high risk. Confirm only after the proposal matches the exact changes you want and the confirmation phrase comes from the proposal response.

Answers and reports

answer_seo_question({
  "project_id": 123,
  "question": "What should we fix before publishing the pricing page?",
  "crawl_run_id": 456,
  "include_keywords": true,
  "include_gsc": true,
  "include_deploys": true
})

generate_seo_report({
  "project_id": 123,
  "crawl_run_id": 456,
  "preflight_run_id": 321
})

Useful agent prompts

These prompts work well because they ask the agent to use SEO Core context, local evidence, and deploy guardrails explicitly:

Use SEO Core MCP to list my projects, choose the production project, and summarize the current SEO health.

Run a local preflight for http://localhost:3000, compare it with the latest production crawl, and tell me what blocks this PR.

Inspect /pricing metadata locally, use keyword and crawl context from SEO Core, then propose a safer title and meta description.

Create a deploy proposal for the approved metadata changes only. Do not confirm the deploy until I review the proposal.

Scopes to grant

Read context

projects:read, usage:read, crawl:read, and keywords:read let agents understand the project without changing it.

Run analysis

crawl:run, preflight:upload, ai:suggest, and gsc:sync let agents create fresh evidence and recommendations.

Manage keyword work

keywords:write lets agents map or track keywords for a URL after you approve the target.

Deploy with guardrails

deploy:proposal creates proposals. deploy:confirm should be reserved for trusted workflows that need explicit confirmation.

Built-in resources and prompts

The MCP exposes resources and reusable prompts so agents can retrieve setup instructions, release status, current project context, latest crawl evidence, and preflight summaries without guessing.

Resources
seo-core://mcp/release-status
seo-core://mcp/setup-guide
seo-core://projects/{project_id}/context
seo-core://projects/{project_id}/latest-crawl
seo-core://projects/{project_id}/latest-report
seo-core://projects/{project_id}/latest-preflight

Prompts
check_mcp_health
install_seo_core_mcp
update_seo_core_mcp
run_seo_preflight
explain_top_seo_issues
prepare_deploy_proposal
compare_local_to_production

Updates

The MCP can check SEO Core release status through MCP-only tools and resources. Automatic updates are opt-in and only run from signed manifests, safe install modes, and exact allowlisted package-manager commands.

SEO_CORE_MCP_AUTO_UPDATE=1
SEO_CORE_MCP_ALLOW_MAJOR_UPDATE=0
SEO_CORE_MCP_RELEASE_CHANNEL=stable
SEO_CORE_MCP_RELEASE_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----..."
  • Use get_mcp_status to see the current package version and backend reachability.
  • Use check_mcp_update to see whether an update is available and whether it is signed.
  • Use update_mcp_package only when automatic install is safe. Otherwise, follow the returned manual command.

Common troubleshooting

  • AUTH_REQUIRED: set SEO_CORE_MCP_TOKEN in the MCP client config, not in chat.
  • MCP_PLAN_REQUIRED: MCP access is available on Growth, Elite, and Lifetime plans.
  • AUTH_SCOPE_REQUIRED: create a token with the needed scope or stay with read-only tools.
  • PROJECT_ACCESS_DENIED: verify the token is allowed to access the project.
  • LOCAL_WORKSPACE_DENIED: keep file paths inside the current workspace and avoid secret-like files.
  • update refused: install manually when the package is linked, running from a repo checkout, unsigned, or a major update.

Tip

The MCP also exposes get_mcp_setup_guide and seo-core://mcp/setup-guide, so agents can show setup commands from inside the client.