Agent Workflows
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 fromAccount > 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
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
Install the package
Install the public MCP package globally so your client can launch the
seo-core-mcpcommand.npm install -g @seo-core-app-ai/mcp npm view @seo-core-app-ai/mcp version - 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
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
Verify the connection
Ask the agent to call
get_mcp_status, thenlist_projects. From an app workspace, also calldetect_local_frameworkto 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-mcpCodex
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/mcpClaude 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:readCursor
{
"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-mcpNote
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_productionUpdates
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_statusto see the current package version and backend reachability. - Use
check_mcp_updateto see whether an update is available and whether it is signed. - Use
update_mcp_packageonly when automatic install is safe. Otherwise, follow the returned manual command.
Common troubleshooting
AUTH_REQUIRED: setSEO_CORE_MCP_TOKENin 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 exposesget_mcp_setup_guide and seo-core://mcp/setup-guide, so agents can show setup commands from inside the client.