name: keyword-research description: "Discover keyword opportunities, evaluate metrics and SERPs, and save/tag promising terms."
OpenSEO Keyword Research
Goal
Turn seed topics into a prioritized keyword opportunity set using OpenSEO MCP data. The output should help the user decide what to target, what to save, and what to research next.
Required inputs
projectId- One or more seed topics, products, pages, competitors, or audience problems
- Optional market/location/language
If projectId is missing, use list_projects first. If the target market/location/language is unclear and would materially affect keyword metrics, ask the user; otherwise use the MCP tool defaults.
OpenSEO MCP tools
research_keywords: primary discovery tool. Use 1-5 seeds per call and prefer 150 results unless the user asks for exhaustive research.get_keyword_metrics: hydrate up to 700 known keywords with volume, keyword difficulty (KD), search intent, CPC, and monthly trends in one call. Use it to score candidate or known terms — including the Search Console striking-distance queries from step 1.get_ranked_keywords: pull exact ranking keyword rows when a target domain or page is part of the research brief.get_search_console_performance: when Search Console is connected, start from the project's real first-party demand — queries already earning impressions and near-ranking ("striking distance") terms. Request a highrowLimitand filter average position 5-20 client-side, since the API sorts by clicks and can't filter by position. Then hydrate those striking-distance queries withget_keyword_metricsto attach difficulty and intent.get_serp_results: inspect SERPs for the top candidate terms, especially when intent is ambiguous.search_local_businesses,get_local_serp_results, andget_google_business_questions: use for local SEO topics when a business/location radius matters.list_saved_keywords: avoid duplicating already-saved work or use existing tags as context.save_keywords: save selected keywords only after explicit user confirmation.
Workflow
- Normalize seeds into a small set of distinct research angles. If Search Console is connected for the project, first pull
get_search_console_performance(highrowLimit, default lookback), filter to striking-distance positions (~5–20) client-side, and hydrate those queries withget_keyword_metricsto attach KD and intent. That ranked, hydrated list is your fastest opportunity set — work it before broad discovery. - If the request is local SEO, identify the business, location/coordinates or service area, and local categories. Use
search_local_businessesandget_local_serp_resultsfor the most important location/keyword set instead of relying only on national keyword/SERP data. - Call
research_keywordsfor exploratory seeds. Use bulk calls when possible. - Use
get_keyword_metricsto hydrate a fixed keyword list — or the striking-distance queries from step 1 — with volume, KD, and intent before prioritizing. - Use
get_ranked_keywordswhen the user provides a domain/page and wants opportunities based on current rankings, near-misses, or competitor-owned terms. - Remove irrelevant, duplicate, branded-only, and off-intent terms.
- Prioritize by practical opportunity, not volume alone:
- Strong match to the user's product/page/topic
- Clear search intent
- Reasonable difficulty
- Useful volume/CPC signal
- SERP where the user can plausibly compete
- For local SEO, local-pack/Maps visibility and proximity fit
- Use
get_serp_resultsfor high-potential or ambiguous keywords when SERP intent would change the recommendation; keep the default check small. - Present a shortlist and a longer opportunity table.
- Ask before saving keywords. When saving, suggest concise tags such as
topic:<topic>,intent:<intent>, orpage:<slug>.
Output format
Start with the highest-signal recommendation:
- Best opportunity theme
- Top keywords to target now
- Keywords to save
- Risks or SERP caveats
Then include a compact table:
| Keyword | Intent | Volume | KD | CPC | Priority | Notes |
|---|
End with next actions, including whether to run keyword clustering, create a content brief, or save the chosen keywords.
Guardrails
- Do not invent metrics. If OpenSEO does not return a value, write
unknown. - Do not call
save_keywordswithout explicit confirmation. - Prefer business-fit and intent-fit over chasing the largest volume term.