Remote OAuth-secured MCP that connects Claude, ChatGPT, Cursor, or VS Code to VibeSEO's API for live SEO work. Ask for keyword research with volume and difficulty, run site audits and read crawl issues, pull backlink profiles and referring domains, query Google Search Console data for connected properties, or manage content workflow from idea generation to scheduling. Each tool maps directly to VibeSEO's platform features. Auth is OAuth 2.1 with PKCE, tokens are revocable per client, and the approval gate for publishing stays inside VibeSEO. Reach for this when you want conversational access to a full SEO research and content ops stack without leaving your editor or chat interface.
Public tool metadata for what this MCP can expose to an agent.
get_location_by_codeLook up a single location by its DataForSEO location code, e.g. 2840 for United States.1 paramsLook up a single location by its DataForSEO location code, e.g. 2840 for United States.
codeintegerscore_keywordScore a candidate keyword against this project's archetype to get a 0-100 priority score with breakdown. The keyword must already appear in the project's top-100 ranking set.2 paramsScore a candidate keyword against this project's archetype to get a 0-100 priority score with breakdown. The keyword must already appear in the project's top-100 ranking set.
keywordstringprojectIdintegerupdate_site_informationSave the project's site information. All optional fields default to existing values when omitted.18 paramsSave the project's site information. All optional fields default to existing values when omitted.
summarystringfoundersstringsiteTypestringUnknown · Saas · Ecommerce · Educational · Entertainment · FinancialServicesblogThemestringprojectIdintegerpainPointsstringkeyFeaturesstringctaButtonUrlstringpricingPlansstringproductUsagestringctaButtonTextstringctaButtonStylestringPrimary · Secondary · Inlinedefault: PrimaryprimaryCountrystringsiteTypeCustomstringaudienceSummarystringprimaryLanguagestringmainImageBrandingDescriptionstringinlineImageBrandingDescriptionstringlist_languagesList supported languages (language code + display name).List supported languages (language code + display name).
No parameter schema in public metadata yet.
list_publicationsList published article snapshots (read-only history) for the project, with traffic signals.1 paramsList published article snapshots (read-only history) for the project, with traffic signals.
projectIdintegergsc_query_detailsGSC performance for a specific list of queries.3 paramsGSC performance for a specific list of queries.
daysintegerqueriesarrayprojectIdintegerlist_domain_historyReturn the calling user's recent domain search history.Return the calling user's recent domain search history.
No parameter schema in public metadata yet.
keyword_gapKeywords the competitor ranks for that the primary domain doesn't (highest-opportunity gap targets), or common keywords. Returns { totalCount, items }.6 paramsKeywords the competitor ranks for that the primary domain doesn't (highest-opportunity gap targets), or common keywords. Returns { totalCount, items }.
modestringGap · CommonlimitintegerdomainstringcompetitorstringlanguageCodestringlocationCodeintegerlist_audit_issuesFiltered list of issues from an audit. Filter by category (on-page, technical, content, performance, ...) or severity (critical, warning, info).3 paramsFiltered list of issues from an audit. Filter by category (on-page, technical, content, performance, ...) or severity (critical, warning, info).
auditIdintegercategorystringseveritystringautocomplete_keywords_batchBulk autocomplete suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.10 paramsBulk autocomplete suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordsarrayvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerautocomplete_keywordsGoogle-autocomplete-style keyword suggestions for a seed keyword. Filter results by volume, CPC, difficulty, intent. Each suggestion comes back with its own locationCode/languageCode — use this tool (or related_keywords) to discover the right market before calling get_keyword_...10 paramsGoogle-autocomplete-style keyword suggestions for a seed keyword. Filter results by volume, CPC, difficulty, intent. Each suggestion comes back with its own locationCode/languageCode — use this tool (or related_keywords) to discover the right market before calling get_keyword_...
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordstringvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerquestion_keywordsQuestion-format suggestions (what/how/why/when/...) for a seed keyword. Useful for FAQ and informational content.10 paramsQuestion-format suggestions (what/how/why/when/...) for a seed keyword. Useful for FAQ and informational content.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordstringvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegercomparison_keywords_batchBulk comparison-style suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.10 paramsBulk comparison-style suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordsarrayvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerclear_domain_historyClear the calling user's domain search history.Clear the calling user's domain search history.
No parameter schema in public metadata yet.
gsc_top_queriesTop search queries from GSC for a project.3 paramsTop search queries from GSC for a project.
daysintegerlimitintegerprojectIdintegerdomain_traffic_historyMonthly organic traffic history for a domain.3 paramsMonthly organic traffic history for a domain.
domainstringlanguageCodestringlocationCodeintegerreject_postReject a Ready post: clears the body and returns it to Drafting with the reason recorded.2 paramsReject a Ready post: clears the body and returns it to Drafting with the reason recorded.
postIdintegerreasonstringgsc_statusGSC connection status for a project: connected/pending/invalid, bound site, last sync time.1 paramsGSC connection status for a project: connected/pending/invalid, bound site, last sync time.
projectIdintegerlist_competitorsList the project's tracked competitors.1 paramsList the project's tracked competitors.
projectIdintegerbacklink_historyHistorical backlink count trend for the domain.1 paramsHistorical backlink count trend for the domain.
domainstringrefill_queueAppend new Idea-status posts to the queue (additive — does not touch existing posts).2 paramsAppend new Idea-status posts to the queue (additive — does not touch existing posts).
countintegerprojectIdintegerlist_audits_for_projectAll audits previously run for a project, newest first.1 paramsAll audits previously run for a project, newest first.
projectIdintegerlist_gsc_sitesList Google Search Console sites accessible via a previously-connected GSC connection.1 paramsList Google Search Console sites accessible via a previously-connected GSC connection.
connectionIdintegerget_audit_summaryCondensed audit scorecard: category breakdown, top recurring rule codes, average response time, indexable pages percent.1 paramsCondensed audit scorecard: category breakdown, top recurring rule codes, average response time, indexable pages percent.
auditIdintegerget_projectGet a single project by ID.1 paramsGet a single project by ID.
idintegerlist_projectsList the calling user's VibeSEO projects.List the calling user's VibeSEO projects.
No parameter schema in public metadata yet.
get_auditAudit metadata + summary scores by audit ID.1 paramsAudit metadata + summary scores by audit ID.
auditIdintegeranalyze_for_onboardingRun the onboarding analyzer on a domain: surfaces opportunity gaps, audit issues, and competitor insights as initial recommendations.1 paramsRun the onboarding analyzer on a domain: surfaces opportunity gaps, audit issues, and competitor insights as initial recommendations.
domainstringupdate_projectRename or change the domain of an existing project.3 paramsRename or change the domain of an existing project.
idintegernamestringdomainstringstart_site_auditTrigger a new site audit (crawl + on-page/technical analysis). Runs asynchronously; poll get_audit until status="completed".2 paramsTrigger a new site audit (crawl + on-page/technical analysis). Runs asynchronously; poll get_audit until status="completed".
maxPagesintegerprojectIdintegerclear_keyword_historyClear the calling user's keyword search history.Clear the calling user's keyword search history.
No parameter schema in public metadata yet.
question_keywords_batchBulk question-format suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.10 paramsBulk question-format suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordsarrayvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegergsc_top_pagesTop landing pages from GSC for a project.3 paramsTop landing pages from GSC for a project.
daysintegerlimitintegerprojectIdintegerdomain_competitor_suggestionsSuggested competitor domains based on keyword overlap and similar audience.4 paramsSuggested competitor domains based on keyword overlap and similar audience.
limitintegerdomainstringlanguageCodestringlocationCodeintegerbacklink_anchorsTop anchor texts pointing at the domain.2 paramsTop anchor texts pointing at the domain.
limitintegerdomainstringdelete_projectDelete a project. This action is irreversible.1 paramsDelete a project. This action is irreversible.
idintegerget_keyword_metricsKEYWORD DIFFICULTY REQUIRES locationCode AND languageCode — worldwide calls (both omitted) return null KD. If the target market is unknown, first call autocomplete_keywords or related_keywords; their results include locationCode/languageCode per suggestion, which you can then...3 paramsKEYWORD DIFFICULTY REQUIRES locationCode AND languageCode — worldwide calls (both omitted) return null KD. If the target market is unknown, first call autocomplete_keywords or related_keywords; their results include locationCode/languageCode per suggestion, which you can then...
keywordstringlanguageCodestringlocationCodeintegerpropose_site_informationRun the AI strategist to propose site information values from the latest crawl.1 paramsRun the AI strategist to propose site information values from the latest crawl.
projectIdintegerget_keyword_metrics_batchMAX 5 KEYWORDS PER CALL. Sending 6 or more returns a 400 validation error — split larger lists across multiple calls. KEYWORD DIFFICULTY REQUIRES locationCode AND languageCode — worldwide calls (both omitted) return null KD for every keyword. If the target market is unknown, f...3 paramsMAX 5 KEYWORDS PER CALL. Sending 6 or more returns a 400 validation error — split larger lists across multiple calls. KEYWORD DIFFICULTY REQUIRES locationCode AND languageCode — worldwide calls (both omitted) return null KD for every keyword. If the target market is unknown, f...
keywordsarraylanguageCodestringlocationCodeintegerlist_keyword_historyReturn the calling user's recent keyword search history.Return the calling user's recent keyword search history.
No parameter schema in public metadata yet.
backlink_profileAggregate backlink profile for a domain: total backlinks, referring domains, spam score, broken links.1 paramsAggregate backlink profile for a domain: total backlinks, referring domains, spam score, broken links.
domainstringpreposition_keywordsSuggestions containing prepositions (for/with/near/...) for a seed keyword.10 paramsSuggestions containing prepositions (for/with/near/...) for a seed keyword.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordstringvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerschedule_postSet or change the scheduled_for date on a post (Idea, Drafting, or Ready).2 paramsSet or change the scheduled_for date on a post (Idea, Drafting, or Ready).
postIdintegerscheduledForstringgsc_trendDaily GSC trend (clicks, impressions, position) over a window.2 paramsDaily GSC trend (clicks, impressions, position) over a window.
projectIdintegerwindowDaysintegerapprove_postApprove a Ready post and queue it for publication at its scheduled time.1 paramsApprove a Ready post and queue it for publication at its scheduled time.
postIdintegerdomain_overviewAuthority, organic/paid traffic estimate, keyword count, backlink count, and rank distribution for a domain.3 paramsAuthority, organic/paid traffic estimate, keyword count, backlink count, and rank distribution for a domain.
domainstringlanguageCodestringlocationCodeintegersearch_locationsSearch countries and cities by name. Useful for resolving a city name to its DataForSEO location code.2 paramsSearch countries and cities by name. Useful for resolving a city name to its DataForSEO location code.
limitintegerquerystringcreate_projectCreate a new VibeSEO project for a domain.2 paramsCreate a new VibeSEO project for a domain.
namestringdomainstringget_publicationRead a single publication snapshot including daily impression/click signals.1 paramsRead a single publication snapshot including daily impression/click signals.
publicationIdintegergsc_summaryAggregate GSC performance for the project over a window: clicks, impressions, CTR, avg position, deltas vs previous period.2 paramsAggregate GSC performance for the project over a window: clicks, impressions, CTR, avg position, deltas vs previous period.
projectIdintegerwindowDaysintegercomparison_keywordsComparison-style suggestions ("X vs Y", "X alternative", ...) for a seed keyword.10 paramsComparison-style suggestions ("X vs Y", "X alternative", ...) for a seed keyword.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordstringvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerlist_postsList posts for a project. Filter by status: Idea, Drafting, Ready, Approved, Published.2 paramsList posts for a project. Filter by status: Idea, Drafting, Ready, Approved, Published.
statusstringIdea · Drafting · Ready · Approved · PublishedprojectIdintegergenerate_postTrigger AI draft generation for a scheduled Idea or Drafting post. Returns the post ID.1 paramsTrigger AI draft generation for a scheduled Idea or Drafting post. Returns the post ID.
postIdintegerget_postRead a single post (markdown body, FAQ, internal links, SEO score, status, schedule).1 paramsRead a single post (markdown body, FAQ, internal links, SEO score, status, schedule).
postIdintegerpreposition_keywords_batchBulk preposition-style suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.10 paramsBulk preposition-style suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordsarrayvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerlist_crawled_pagesTop crawled pages from the project's most recent completed audit (URL, title, meta, word count). Useful for fact-checking and finding internal-link targets.2 paramsTop crawled pages from the project's most recent completed audit (URL, title, meta, word count). Useful for fact-checking and finding internal-link targets.
limitintegerprojectIdintegerrefresh_ideasReplace existing Idea-status posts with a fresh strategist-generated batch. Drafting/Ready/Approved/Published posts are untouched.2 paramsReplace existing Idea-status posts with a fresh strategist-generated batch. Drafting/Ready/Approved/Published posts are untouched.
countintegerprojectIdintegerbacklink_referring_domainsPaginated list of domains linking to the target.3 paramsPaginated list of domains linking to the target.
pageintegerdomainstringpageSizeintegercreate_publishing_targetAdd a new publishing target (Subdomain or CustomDomain).3 paramsAdd a new publishing target (Subdomain or CustomDomain).
typestringCustomDomain · WordPresshostnamestringprojectIdintegercompetitive_overviewSide-by-side metrics for a primary domain and its competitors: traffic, keywords, backlinks, common keywords, gap size, monthly trend.4 paramsSide-by-side metrics for a primary domain and its competitors: traffic, keywords, backlinks, common keywords, gap size, monthly trend.
domainstringcompetitorsarraylanguageCodestringlocationCodeintegerlist_countriesList supported DataForSEO country locations (location codes + ISO codes).List supported DataForSEO country locations (location codes + ISO codes).
No parameter schema in public metadata yet.
related_keywords_batchBulk synonym-expansion suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.10 paramsBulk synonym-expansion suggestions for 1 to 5 seed keywords per call. MAX 5: sending more returns a 400 validation error — split larger lists across multiple calls.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordsarrayvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerget_site_informationRead the project's site information record (brand, audience, pain points, CTAs).1 paramsRead the project's site information record (brand, audience, pain points, CTAs).
projectIdintegerrelated_keywordsSynonym-expansion related keywords for a seed keyword. Each suggestion comes back with its own locationCode/languageCode — use this tool (or autocomplete_keywords) to discover the right market before calling get_keyword_metrics for keyword difficulty.10 paramsSynonym-expansion related keywords for a seed keyword. Each suggestion comes back with its own locationCode/languageCode — use this tool (or autocomplete_keywords) to discover the right market before calling get_keyword_metrics for keyword difficulty.
sdMaxintegersdMinintegercpcMaxnumbercpcMinnumberintentstringkeywordstringvolumeMaxintegervolumeMinintegerlanguageCodestringlocationCodeintegerget_month_viewRead all posts scheduled in a given month, grouped for calendar display.2 paramsRead all posts scheduled in a given month, grouped for calendar display.
projectIdintegermonthStartstringlist_publishing_targetsList subdomains and custom domains the project can publish to.1 paramsList subdomains and custom domains the project can publish to.
projectIdintegerdomain_top_pagesTop pages on the domain by estimated organic traffic.4 paramsTop pages on the domain by estimated organic traffic.
limitintegerdomainstringlanguageCodestringlocationCodeintegerreplace_competitorsReplace the project's competitor list with the supplied set of domains.2 paramsReplace the project's competitor list with the supplied set of domains.
domainsarrayprojectIdintegerlist_citiesList cities supported within a country. Country code is ISO 3166-1 alpha-2, e.g. "US".1 paramsList cities supported within a country. Country code is ISO 3166-1 alpha-2, e.g. "US".
countryCodestringdomain_top_keywordsTop organic keywords the domain ranks for, with position, volume, traffic, and SERP features.4 paramsTop organic keywords the domain ranks for, with position, volume, traffic, and SERP features.
limitintegerdomainstringlanguageCodestringlocationCodeintegeren • es • de • ja • fr • pt • ru • it • nl • pl
Model Context Protocol server for SEO research, audits, and content workflow — secured by OAuth.
VibeSEO MCP brings live SEO work into your AI assistant. Connect Claude, ChatGPT, Cursor, VS Code, or a CLI client to VibeSEO. Then ask for keyword research, audits, backlinks, Search Console trends, and content workflow actions in natural language.
https://mcp.vibeseo.dev/mcpmcp:toolsVibeSEO MCP is a remote, OAuth-secured server. Add this to your client's MCP config:
{
"mcpServers": {
"vibeseo": {
"url": "https://mcp.vibeseo.dev/mcp"
}
}
}
One-click install:
CLI clients (Claude Code, Gemini CLI, Codex CLI) and manual snippets: see Supported clients.
The MCP server maps to the same SEO workflow inside VibeSEO. Categories:
| Category | What it covers |
|---|---|
| 📁 Projects | Create projects, update site information, manage competitors, keep account context current. |
| 🔍 Keywords | Metrics, batches, suggestions, autocomplete, questions, comparisons, history, cleanup. |
| 🌐 Domains | Overview, top keywords, top pages, traffic history, competitor ideas, lookup history. |
| 🔗 Backlinks | Profile, referring domains, anchors, backlink history. |
| 🧯 Audits | Start site audits, read summaries, list issues, inspect crawled pages. |
| 📊 GSC | Connected properties, status, summaries, top queries, top pages, trends, query details. |
| ✍️ Content | Ideas, drafts, approvals, scheduling, publishing targets, publications, keyword scoring. |
| ⚔️ Competitive | Competitive overview and keyword gap analysis across domains. |
| 📍 Locations | Countries, languages, locations, city lookups, location codes for market-specific research. |
The live tool set evolves. For the exact, up-to-date list, run tools/list against https://mcp.vibeseo.dev/mcp.
Setup paths for each:
claude_desktop_config.json~/.cursor/mcp.json.vscode/mcp.jsonclaude mcp add --transport http vibeseo https://mcp.vibeseo.dev/mcpgemini mcp add --transport http vibeseo https://mcp.vibeseo.dev/mcpcodex mcp add vibeseo --url https://mcp.vibeseo.dev/mcpFull per-client install instructions: docs/setup.md.
Keyword plan
"Find comparison keywords for my invoicing app that are realistic to rank for."
→ VibeSEO returns a prioritized topic list (commercial intent, lower difficulty, comparison angle).
Technical audit
"Audit my project and tell me what to fix before publishing more articles."
→ VibeSEO turns crawl data into next actions (missing canonicals, oversized images, internal-link gaps).
Publish queue
"Show ready posts, generate the next draft, and schedule the strongest one."
→ VibeSEO manages the content workflow (counts of Ready/Drafting, schedules the next approved article).
More: docs/examples.md.
Auth is OAuth 2.1 with PKCE. Your assistant gets a token scoped to mcp:tools, tied to your VibeSEO account. Tokens are revocable at any time from the VibeSEO MCP page under "Connected clients" — disconnecting a client revokes its access immediately.
MCP can help manage the workflow, but VibeSEO keeps the approval gate before content goes live. Drafts and scheduled posts still go through the standard review step inside VibeSEO.
OAuth flow details: docs/oauth.md.
Common connection, OAuth, and tool-call errors: docs/troubleshooting.md.
https://mcp.vibeseo.dev/mcphttps://api.vibeseo.devMIT — see LICENSE.
Built by @sultanlive. VibeSEO is a hosted SEO platform; this repo is documentation for its public MCP server. Server source is not open.
makafeli/n8n-workflow-builder
danishashko/make-mcp
lukisch/n8n-manager-mcp
io.github.us-all/airflow
io.github.infoinlet-marketplace/mcp-workflow