OpenSEO MCP

SEO research for an assistant: keywords, SERPs, rankings, backlinks, local listings and site audits.

Official · Every App TypeScript Remote (hosted) · Streamable HTTPLocal · Streamable HTTP Data and analyticsWeb search

71 popularity score ★ 27k

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal
claude mcp add --transport http --scope user openseo https://app.openseo.so/mcp
Claude (desktop and web)Customize -> Connectors -> Add custom connector
https://app.openseo.so/mcp
Cursormcp.json
{
  "mcpServers": {
    "openseo": {
      "url": "https://app.openseo.so/mcp"
    }
  }
}
Codexterminal
codex mcp add openseo --url https://app.openseo.so/mcp
ChatGPTOpenSEO plugin for ChatGPT, or a custom connection
https://app.openseo.so/mcp
Local (once it is running)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add --transport http openseo http://localhost:3001/mcp
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "openseo": {
      "url": "http://localhost:3001/mcp"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "openseo": {
      "type": "http",
      "url": "http://localhost:3001/mcp"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.openseo]
url = "http://localhost:3001/mcp"
Gemini CLITerminal
gemini mcp add --scope user --transport http openseo http://localhost:3001/mcp

Settings 8

DATAFORSEO_API_KEY secret Required: Self-hosted: base64-encoded DataForSEO login:password, used for keyword, backlink, rank and site data.
STORAGE_SECRET_KEY secret Required: Self-hosted: a unique random secret for the storage service, set before the first start.
BETTER_AUTH_URL Optional: Self-hosted: the public URL of the installation. Default http://localhost:3001.
AUTH_MODE Optional: Self-hosted: password for email and password accounts, or local_noauth for no sign-in on a private network. Default password.
OPENROUTER_API_KEY secret Optional: Self-hosted: enables SAM conversations, website research and summaries.
CONTEXT_API_KEY secret Optional: Self-hosted: JavaScript rendering for site audits. For run_site_audit.
Set together: google
GOOGLE_CLIENT_ID Optional: Self-hosted: your own Google OAuth app for Search Console and Analytics linking.
GOOGLE_CLIENT_SECRET secret Optional: Self-hosted: secret of your own Google OAuth app.

What it does

OpenSEO is an open-source, pay-as-you-go SEO app in the mould of Semrush and Ahrefs, and this is its MCP server. Once connected, an assistant can research keywords, pull live Google results, see which keywords and pages a domain ranks for, compare competitors in the results, and read domain and backlink summaries. The data comes from DataForSEO, so most research calls cost credits. Tool descriptions say when a call is free and ask the agent to show an estimate before paid runs.

There is a lot more than keyword research in here. Local SEO tools look up businesses near a point, read Google Business Profiles, reviews, posts and Q&A, and check Maps rankings across a grid. You can run rank trackers and site audits, read Search Console and GA4 data for a connected property, ping IndexNow engines about changed pages, and track how a brand shows up in AI answers. Projects keep shared notes (goals, competitors, key pages) and saved HTML reports that can be shared by link.

The hosted server lives at https://app.openseo.so/mcp. Clients sign in through OpenSEO with OAuth, or send a personal API key as an Authorization: Bearer or x-api-key header. You can also self-host it with Docker or on Cloudflare. A self-hosted install uses email and password accounts that MCP clients sign in with, and it can run with no sign-in at all behind a private network, or behind Cloudflare Access. Either way you bring your own DataForSEO key.

The docs page only summarises the tools in prose. The server source registers 81 of them, and a few paid ones (explore_prompt, run_rank_tracker) need a paid plan on the hosted service but are not plan-gated when self-hosted.

What it needs

To run it yourselfDocker
Runs onmacOS, Windows, Linux
OpenSEOPaid planHosted service bills pay-as-you-go credits, DataForSEO cost plus 28%. Some tools need a paid plan there.
DataForSEOPaid planSelf-hosting needs your own API key, billed by DataForSEO directly.
Also
  • Self-hosting with Docker: at least 4 GiB of memory for Docker

The hosted server needs only an OpenSEO account. Your client opens the sign-in, or you create an API key under Settings > API keys and send it as a header. Codex 0.143 to 0.146 fail the OAuth sign-in with a missing issuer error, so upgrade to 0.147.0 or use a key. To self-host, clone the repo, copy deploy/standalone/.env.example to .env, set STORAGE_SECRET_KEY and DATAFORSEO_API_KEY, run docker compose up -d with COMPOSE_FILE=deploy/standalone/compose.yaml, open http://localhost:3001 and create the admin account. Clients then connect to /mcp on that address.

Limits

  • Cost Most research, rank checks and AI answer checks spend credits, and scheduled trackers keep spending until paused or out of credits.
  • Cost explore_prompt and run_rank_tracker need a paid plan on the hosted service. Self-hosted installs are not plan-gated.
  • Region research_ai_visibility_prompts draws on DataForSEO data that covers US English only.
  • Size cap inspect_urls takes up to 10 URLs per call, get_keyword_metrics up to 700 keywords, get_serp_results up to 10 keywords.
  • Size cap Self-hosted site audits crawl up to 10,000 pages, or 1,000 with JavaScript rendering.
  • Not covered It cannot connect a Google account. Search Console and GA4 are linked in the app first, then bound to a project.
  • Limit Self-hosted: clients that register with a metadata URL (CIMD) are not supported. Use dynamic client registration or an API key.
  • Limit An OAuth connection or API key is tied to the workspace active when it was made. Another workspace needs a new connection.

Who it suits

A good fit if you already use OpenSEO, or want Semrush-style research from an assistant without a subscription and are fine paying per request. The hosted endpoint is the quick route with OAuth or a key. Self-hosting suits teams that want their own DataForSEO billing and accounts, at the cost of running Docker or a Cloudflare deploy. Many tools write and spend money, so it suits clients where you approve tool calls. If you only need Search Console data, this is a larger tool than you need.

Tools 60 of 81

41 only read, 16 change things, 3 can delete or overwrite.

whoami
Shows the connected account, server mode, token scopes and remaining credit balance.
list_projects
Lists your projects with their IDs, domains and default market.
create_project changes
Creates a project with a name and optional domain and default market. No credits.
get_project_context
Reads a project's saved business overview, goals, positioning, competitors, key pages and research log.
update_project_context changes
Adds, edits or removes entries in a project's shared context.
research_keywords
Pulls volume, difficulty, CPC and related ideas for one to five seed keywords. Charges credits per seed.
get_keyword_metrics
Scores up to 700 known keywords with volume, difficulty, intent, CPC and monthly trend.
list_saved_keywords
Lists a project's saved keywords with cached metrics and tags. No credits.
save_keywords changes
Saves keywords, with optional tags, to a project's list. No credits.
remove_saved_keywords deletes
Deletes saved keywords from a project by row ID.
get_serp_results
Fetches live Google organic results for one to ten keywords. Charges credits per keyword.
search_serp_locations
Finds the exact location name to use for local rank tracking or local keyword volume. No credits.
find_serp_competitors
Compares which domains compete in Google results across a keyword set in one country market.
get_domain_overview
Summarises a domain's estimated organic traffic, keyword count, backlinks and referring domains.
get_domain_keyword_suggestions
Lists the organic keywords a domain ranks for, with position and metrics.
get_ranked_keywords
Returns keyword, URL, rank, volume, intent and traffic rows for a domain or page in one market.
get_backlinks_overview
Summarises a domain's or page's backlinks, referring domains and top referrers.
get_backlinks_profile
Pages through detailed backlink rows with anchors, follow status and spam signals.
search_local_businesses
Finds business listings near a coordinate, filtered by rating, review count or claimed status.
get_local_serp_results
Fetches one Google Maps or Local Finder results page near a coordinate.
get_local_rank_grid
Runs a Maps search at each point of a grid to show where a business ranks. Cost grows with grid size.
get_business_profile
Reads one Google Business Profile: categories, rating, address, hours, claimed status.
get_business_reviews
Collects Google reviews for a business, including whether the owner replied.
get_business_updates
Collects the posts, offers and events published on a Google Business Profile.
get_google_business_questions
Fetches the questions and answers on one Google Business Profile.
create_rank_tracker changes
Creates a rank tracker for a project. Scheduled trackers spend credits once keywords are added.
get_rank_tracker
Reads tracker settings and the latest position for each tracked keyword.
add_rank_tracking_keywords changes
Adds keywords to an existing rank tracker.
remove_rank_tracking_keywords changes
Stops tracking keywords by ID while keeping their past snapshots.
pin_rank_tracking_keywords changes
Pins or unpins tracked keywords so they list first for the whole project.
estimate_rank_tracker_cost
Estimates the credit cost of a rank check and of a schedule without spending anything.
run_rank_tracker changes
Starts a live rank check, refused if the fresh estimate exceeds the approved credit ceiling.
list_search_console_sites
Lists the Search Console properties your connected Google accounts can see.
set_search_console_site changes
Binds a project to a verified Search Console property, replacing any earlier binding.
get_search_console_performance
Queries clicks, impressions, CTR and average position from the bound Search Console property.
inspect_urls
Reads Google's index, crawl and canonical status for up to 10 URLs of the bound property.
submit_indexnow_urls changes
Notifies Bing and other IndexNow engines that pages changed. Needs the key file hosted on the site.
get_google_analytics_organic_overview
Reports top-line organic sessions, engagement and revenue with a previous-period comparison.
get_google_analytics_organic_landing_pages
Reads organic landing page sessions, key events and revenue from the connected GA4 property.
get_google_analytics_page_performance
Reads page views, users and engagement per page from GA4, organic by default.
get_google_analytics_traffic_acquisition
Compares sessions and outcomes by channel group, source/medium or campaign.
get_search_opportunities
Joins Search Console pages in positions 4 to 20 with GA4 outcomes and scores them.
run_site_audit changes
Starts a crawl of a site that checks each page for SEO problems, with optional Lighthouse runs.
get_audit_status
Shows a site audit's phase and crawl progress.
get_audit_issues
Reads the prioritised issues from a finished audit, each with fix steps.
get_audit_pages
Lists crawled pages with status, title, word count, indexability and link counts.
list_site_audits
Lists a project's site audits, newest first.
delete_site_audit deletes
Permanently deletes a site audit and its crawl data. Owners and admins only.
save_report changes
Saves a finished HTML report to the project, private by default.
list_reports
Lists a project's saved reports, most recently updated first.
get_report
Reads one saved report and its share link if it has one.
set_report_sharing changes
Turns a public share link for one report on or off.
delete_report deletes
Permanently deletes a saved report and disables its share link.
explore_prompt
Asks ChatGPT or several AI models one prompt and returns answers, citations and brand mentions.
research_ai_visibility_prompts
Finds questions about a keyword along with ChatGPT's answers and cited sources. US English only.
save_ai_visibility_tracker changes
Creates or edits the prompts, topics, engines and market that AI tracking checks.
estimate_ai_visibility_cost
Estimates the cost of one AI visibility check and of a schedule.
set_ai_visibility_schedule changes
Turns scheduled AI visibility checks on, changes their cadence, or pauses them.
run_ai_visibility_check changes
Starts one paid AI visibility check, refused if it now costs more than approved.
get_ai_visibility_trend
Compares brand mentions in AI answers over the latest period against the one before.

Similar servers