Skip to main content
Glama

free-seo-mcp: free keyword research MCP server

License: MIT Python 3.11+ MCP

Keyword research for Claude, Cursor and any MCP client, with a $0 budget. You get search suggestions, Google Trends, real Bing search volume, Reddit threads and competitor sitemaps in one server. No Ahrefs, Semrush or DataForSEO subscription.

Русская версия

What you can ask your agent

Expand "running shoes" in English and Spanish, estimate volumes against "trail running shoes", split them into high/mid/low and save to project shoes.

Pull every URL from the competitor's sitemap and outline their top 10 pages.

Find Reddit threads where people complain about running shoes and list their exact words.

Related MCP server: Marketing Miner MCP

Why it exists

Google shows exact search volume only to advertisers who spend money. Paid SEO tools resell estimates of that number. free-seo-mcp builds its own estimate from free sources:

Source

What you get

Google, YouTube, Bing, DuckDuckGo autocomplete

Phrases people type, scored by position and repeat count

Google Trends

Relative demand, rising queries, demand by country

Bing Webmaster API

Real weekly impressions (free API key)

Reddit

Buyer language, questions, objections

Competitor sites

Sitemap URLs, title, description, h1 to h3

estimate_volumes compares each keyword with one anchor in Google Trends. It gives the anchor an absolute number: your own figure, or Bing impressions times a multiplier. Each keyword comes back with an estimated monthly volume, a high/mid/low tier, a confidence level and the method used.

Tools

Tool

Purpose

suggest

Autocomplete from one engine, with positions

expand_alphabet

Seed plus each letter of the alphabet, scored

expand_questions

Question prefixes per language (how, why, what is...)

expand_multilingual

One seed across several hl:gl locales

trends_compare

Up to 5 keywords on one 0 to 100 scale

trends_related

Top and rising related queries

trends_by_region

Demand by country or region

bing_keyword

Bing impressions for a period

bing_related_keywords

Related keywords with impressions

bing_keyword_history

Weekly impression series

estimate_volumes

Volume estimate and tier for a keyword list

reddit_search

Threads with score, comment count and snippet

sitemap_urls

Every URL from a site's sitemaps

page_outline

Title, meta description, headings, word count

keywords_save, keywords_load

CSV keyword store per project and language

The keyword_research_workflow prompt walks the agent through seeds, expansion, estimates, clusters and saving.

Languages with built-in alphabets and question prefixes: English, Russian, Spanish, Portuguese, German, French, Italian. Any other hl:gl pair works for autocomplete and Trends.

Quick start

Install uv, then:

git clone https://github.com/JohnWayneeee/free-seo-mcp.git
cd free-seo-mcp
uv sync

Claude Code

claude mcp add free-seo -- uv run --directory /path/to/free-seo-mcp free-seo-mcp

Claude Desktop, Cursor, Windsurf

{
  "mcpServers": {
    "free-seo": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/free-seo-mcp", "free-seo-mcp"],
      "env": { "FREE_SEO_DATA_DIR": "/path/to/seo-data" }
    }
  }
}

Configuration

Variable

Default

Meaning

FREE_SEO_BING_API_KEY

none

Turns on Bing tools and Bing-based estimates

FREE_SEO_DATA_DIR

./seo-data

Keyword CSVs and cache

FREE_SEO_MIN_DELAY

0.4

Seconds between requests to one host

FREE_SEO_PROXY

none

HTTP(S) proxy for every request

FREE_SEO_CACHE_TTL_DAYS

7

Cache lifetime

Get a Bing key: sign in to Bing Webmaster Tools, add and verify your site, open Settings, then API access, and generate a key.

Limits

  • Trust the tiers more than the exact numbers.

  • Google Trends rounds rare keywords to 0. The server reports them as "below 1% of the anchor".

  • Autocomplete, Trends and Reddit use unofficial endpoints with rate limits. The server waits between requests, backs off on HTTP 429 and caches results on disk. It does not solve CAPTCHAs.

  • Reddit returns 403 to some networks. Set FREE_SEO_PROXY if you hit it.

Development

uv run ruff check && uv run ruff format --check
uv run pytest -q          # offline, mocked
uv run pytest -m live     # real endpoints

Pull requests welcome. New autocomplete engines and language packs are the easiest place to start.

License

MIT

Available Tools

16 tools
bing_keywordA
Read-onlyIdempotent

Real Bing search impressions for one keyword over the last N days. Needs FREE_SEO_BING_API_KEY (free, from Bing Webmaster Tools).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoPeriod length in days, ending today.
countryNoISO country code, lowercase, e.g. 'us', 'de'.us
keywordYes
languageNoLanguage-culture, e.g. 'en-US', 'de-DE'.en-US

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
countryYes
end_dateYes
languageYes
start_dateYes
impressionsYesExact-match impressions on Bing for the period.
broad_impressionsYesImpressions of queries containing the phrase.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds valuable context beyond annotations: it requires an external API key from Bing Webmaster Tools and emphasizes 'real' impressions, which distinguishes observed data from estimates. This is meaningful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core purpose and immediately states the one critical prerequisite. There is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only lookup with an output schema and well-documented parameters, the description includes the main missing runtime context: the API key requirement and the real-data nature of the result. It does not cover error handling or rate limits, but these are not essential for basic invocation given the existing structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, with days, country, and language already documented. The description reinforces 'one keyword' and 'last N days', which maps to keyword and days, but does not add new semantic detail for the parameters. This is adequate given the schema's existing descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the metric ('Real Bing search impressions'), the scope ('one keyword'), and the time window ('last N days'). It is specific enough to understand the tool's purpose, but it does not explicitly contrast itself with siblings like bing_keyword_history or estimate_volumes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a prerequisite ('Needs FREE_SEO_BING_API_KEY') but gives no guidance on when to choose this tool over alternatives such as estimate_volumes, bing_related_keywords, or bing_keyword_history. There is no explicit when-to-use or when-not-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bing_keyword_historyA
Read-onlyIdempotent

Weekly Bing impression history for one keyword (seasonality). Needs FREE_SEO_BING_API_KEY (free, from Bing Webmaster Tools).

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoISO country code, lowercase, e.g. 'us', 'de'.us
keywordYes
languageNoLanguage-culture, e.g. 'en-US', 'de-DE'.en-US

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
weeksYes
countryYes
languageYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds valuable context beyond annotations: it specifies the data granularity (weekly), the scope (one keyword), and the intended use (seasonality). It also discloses the external dependency on FREE_SEO_BING_API_KEY, which is important for the agent to know before invoking. This is meaningful behavioral context that annotations don't provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that packs essential information: the data type (weekly impressions), scope (one keyword), purpose (seasonality), and a prerequisite (API key). Every word earns its place, and the most important information is front-loaded. No fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are documented elsewhere. The description covers the core purpose, the data granularity, and the API key requirement. The only minor gap is that it doesn't explain what the output looks like (e.g., a time series of impressions), but the output schema likely covers that. For a read-only, idempotent tool with a simple parameter set, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%: keyword has no description, while country and language have descriptions. The description adds context that the tool is for one keyword and weekly history, which helps understand the keyword parameter's role. However, it doesn't add details about the country/language parameters beyond what the schema already provides, and it doesn't clarify the expected format or constraints for keyword. Baseline 3 is appropriate since the schema covers most parameters and the description adds some context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Weekly Bing impression history for one keyword (seasonality).' This clearly identifies what the tool does and its purpose. It is distinguishable from siblings like bing_keyword and bing_related_keywords because it focuses on historical impression trends over time, though it doesn't explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context: it is for seasonality analysis of a single keyword, which suggests when to use it (when you need historical Bing impression trends). It also mentions the required API key, which is a prerequisite. However, it doesn't explicitly state when not to use it or name alternative tools for related but different needs, such as bing_keyword for current metrics or trends_compare for comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_volumesA
Read-onlyIdempotent

Estimate monthly search volume for many keywords. Each batch of 4 keywords is compared with the same anchor keyword in Google Trends; the ratio to the anchor is multiplied by an absolute base: anchor_volume if given, else the anchor's Bing Webmaster impressions (last 30 days) x engine_multiplier. Returns volume, high/mid/low tier, confidence and method per keyword. These are rough estimates, not exact counts. Pick an anchor of similar popularity whose volume you know.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNoCountry/region code like 'US', 'DE', 'US-CA'; '' = world.
anchorYesReference keyword included in every batch.
keywordsYes
timeframeNo'today 12-m', 'today 3-m', 'today 5-y', 'now 7-d' or 'YYYY-MM-DD YYYY-MM-DD'.today 12-m
bing_countryNous
anchor_volumeNoKnown monthly searches for the anchor.
bing_languageNoen-US
mid_thresholdNo
high_thresholdNo
engine_multiplierNoGoogle:Bing traffic ratio applied to Bing impressions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
geoYes
notesNo
anchorYes
estimatesYes
base_sourceYes
anchor_volumeYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and openWorld hints. The description adds valuable behavioral details beyond that: the 4-keyword batching strategy, the Google Trends ratio plus Bing-base computation, and the explicit caveat that results are 'rough estimates, not exact counts.' No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences deliver the method, the base-value logic, the output schema highlights, and the key field guidance. Every sentence adds information, and the most important caveat ('rough estimates') is prominently included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and a non-trivial estimation algorithm, the description covers the essential computation, output fields, and uncertainty. The output schema exists, so return-value details need not be repeated. It lacks minor clarifications such as regional matching or timeout behavior, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, so the description needs to compensate. It explains the meaning and relationship of anchor, anchor_volume, engine_multiplier, and Bing impressions, which is the core algorithm. It does not elaborate on geo, timeframe, bing_language, or threshold params, but those are reasonably clear from the schema and the described tier output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Estimate monthly search volume for many keywords.' It clearly distinguishes this estimation tool from the sibling expansion, suggestion, and trends-comparison tools by describing the anchor-based methodology and output (volume, tier, confidence, method).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when you need approximate monthly volumes rather than exact counts. It also provides concrete selection guidance ('Pick an anchor of similar popularity whose volume you know'), but it does not explicitly name alternatives or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expand_alphabetB
Read-onlyIdempotent

Expand a seed in breadth: the seed itself plus "seed a", "seed b"... per alphabet.

Returns unique phrases ranked by a popularity score (appearances weighted by list position) with occurrence counts. sources defaults to ["google"]. Reports progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
glNous
hlNoen
keywordYes
sourcesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
glYes
hlYes
errorsNoFailed source/query pairs
keywordYes
phrasesYes
queriesYesExpansion queries sent per source
sourcesYes

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and openWorldHint. The description adds useful behavioral details beyond those: it returns unique phrases ranked by a popularity score, includes occurrence counts, defaults sources to ['google'], and reports progress. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core behavior, followed by return characteristics and defaults. It earns its sentences, though the final two clauses could be better integrated and slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The presence of an output schema reduces the need to describe return values, and annotations cover safety and idempotency. However, the description still leaves gaps around how the alphabet is determined, what gl/hl control, and how to choose this tool among similar expand/suggest siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It only clarifies that sources defaults to ['google']. The meaning of keyword, gl, and hl is left implicit or unexplained, and 'per alphabet' is not tied to any parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Expand a seed in breadth') and defines the resource (the seed plus alphabet suffixes). It is clear what the tool does and roughly how it differs from general suggestion tools, though it does not explicitly distinguish itself from expand_questions or expand_multilingual.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given for when to use this tool versus its siblings. The phrase 'expand a seed in breadth' implies a use case, but there are no stated exclusions, alternatives, or conditions that would help an agent choose this over expand_questions or expand_multilingual.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expand_multilingualA
Read-onlyIdempotent

Run one seed through autocomplete in several locales at once.

locales: "hl:gl" pairs such as ["en:us", "es:es", "pt:br"]; default en:us, es:es, pt:br, ru:ru. A failing locale reports its error field and does not break the others.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNogoogle
keywordYes
localesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYes
keywordYes
localesYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is known. The description adds valuable behavioral detail: it discloses that a failing locale reports its error field and does not affect other locales, which is useful for handling partial failures. This goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: two sentences plus a focused note on locales. It front-loads the primary purpose and provides essential parameter details without unnecessary wording. Every sentence contributes to understanding tool behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives the core behavior, locale syntax, defaults, and error handling. Since an output schema exists, return values are not needed. It does not mention the 'source' parameter, but the schema's enum clarifies its options. For a tool with moderate complexity, this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It thoroughly explains the 'locales' parameter with format and default values, and 'keyword' is implied as the seed. However, it does not add any meaning for the 'source' parameter, which has an enum but no additional guidance. The description covers only one of three parameters substantively, so it only partially compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action — "Run one seed through autocomplete" — and a distinctive scope: "several locales at once." This clearly distinguishes it from sibling expand tools like expand_alphabet or expand_questions, and from suggest, which likely handles a single locale.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when you need autocomplete expansion across multiple locales simultaneously. It provides default locales and clarifies that a failing locale doesn't break others, giving practical context. However, it does not explicitly compare with alternatives or state when not to use it, so it's a step below the explicit routing seen in the best examples.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

expand_questionsA
Read-onlyIdempotent

Expand a seed with question prefixes for the language (how to, why, best...).

Surfaces informational intent similar to "People also ask". Phrases are scored like expand_alphabet. sources defaults to ["google"]. Reports progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
glNous
hlNoen
keywordYes
sourcesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
glYes
hlYes
errorsNoFailed source/query pairs
keywordYes
phrasesYes
queriesYesExpansion queries sent per source
sourcesYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: it reports progress, defaults sources to ['google'], and explains the output is scored phrases similar to 'People also ask'. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core action. The second sentence adds useful context about intent and scoring, and the third sentence covers defaults and progress reporting. No wasted words, though the structure could be slightly clearer by separating the default from the behavioral notes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the annotations cover safety and idempotence, and the output schema exists, the description covers the key behavioral aspects: what it does, how it scores, default sources, and progress reporting. It doesn't explain the exact output structure, but the output schema handles that. Minor gap: no mention of how 'gl'/'hl' affect the question prefixes, but this is not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the 'sources' default and the general role of the keyword, but it does not explain 'gl', 'hl', or the exact format of 'sources' beyond the default. The description adds some meaning (e.g., language prefixes, scoring) but leaves several parameters to be inferred from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('expand') and resource ('a seed with question prefixes'), and clarifies the language dimension. It also names a sibling ('expand_alphabet') for comparison, which helps distinguish it from similar expansion tools. However, it doesn't explicitly contrast with expand_multilingual, another close sibling, so differentiation is partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it surfaces informational intent similar to 'People also ask', and notes that phrases are scored like expand_alphabet. It also states the default sources. It does not explicitly say when NOT to use this tool or name alternatives like expand_multilingual, but the context is strong enough for an agent to infer appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keywords_loadA
Read-onlyIdempotent

Load saved keywords for a project and language, optionally filtered by tier/cluster.

ParametersJSON Schema
NameRequiredDescriptionDefault
langYes
tierNoOnly rows with this tier
clusterNoOnly rows with this cluster
projectYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
rowsYes
totalYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not repeat safety traits. It adds value by clarifying the operation is a filtered retrieval of saved keywords, but gives no additional behavior such as pagination, ordering, or empty-result handling. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the core action and resource, then appends the optional filter conditions. Every word earns its place with no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only load operation with an output schema and safety annotations, the description covers purpose and filters adequately. The only material gap is explicit usage guidance versus alternative keyword-generation/save tools, which is not severe enough to lower the score further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% (tier and cluster have descriptions; project and lang do not), so the description partially compensates by identifying project/lang as the scoping keys and tier/cluster as optional filters. It adds relational meaning but no format or value details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Load') with a clear resource ('saved keywords for a project and language') and specifies optional filters. This differentiates it from key siblings like keywords_save (which saves rather than loads) and suggest/expand tools (which generate rather than retrieve stored data).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving previously saved keywords, so an agent can infer when to use it rather than keywords_save or suggestion tools. However, it offers no explicit when-to-use/when-not-to-use guidance or named alternatives, leaving some routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keywords_saveA

Merge keyword rows into the project's CSV store (//.csv).

Rows are deduplicated by normalized phrase (case and whitespace insensitive): new non-empty fields overwrite stored ones and sources are merged.

ParametersJSON Schema
NameRequiredDescriptionDefault
langYesLanguage code used as file name (1-64 letters, digits, '-' or '_')
rowsYes
projectYesProject folder name (1-64 letters, digits, '-' or '_')

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
addedYes
totalYes
updatedYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by explaining deduplication by normalized phrase, case/whitespace insensitivity, overwrite behavior for non-empty fields, and source merging. This gives the agent a clear model of what happens on conflict, which is critical for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The core action and path are front-loaded, followed immediately by the deduplication and overwrite rules. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a moderately complex merge operation, especially since an output schema exists. It covers destination, conflict resolution, and source handling. It could optionally mention when to use this versus keywords_load, but that is not essential for invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description adds meaningful semantics by explaining that project and lang form the CSV path and that rows are merged with deduplication and field-overwrite behavior. This clarifies the 'rows' parameter more than the raw schema does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Merge') and resource ('keyword rows into the project's CSV store'), with an explicit path template. This clearly distinguishes it from sibling read/expansion tools and from keywords_load, which likely reads the same store.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this when you want to save or merge keyword rows into the project CSV. However, it does not explicitly say when not to use it or mention alternatives like keywords_load for reading, so usage guidance is only implied rather than directly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

page_outlineA
Read-onlyIdempotent

Fetch one page and return its title, meta description, h1-h3 headings and word count.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
h1Yes
h2Yes
h3Yes
urlYes
titleYes
statusYes
word_countYes
descriptionYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, and the description's 'Fetch' is consistent with those. The description adds little behavioral nuance beyond processing one page and listing extracted content pieces; it does not discuss failure modes, external network effects, or restrictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and followed by a precise list of outputs. Every word adds information, and there is no redundant restatement of the tool name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is low complexity: one required URL, read-only and idempotent annotations, and an output schema exist. The description provides enough selection and invocation context for an agent to call the tool correctly; failure-mode details are not essential at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage for the URL parameter is 0%, so the description compensates by defining the parameter as 'one page' and implying it should be an HTML page from which title, meta description, and headings can be extracted. It does not specify URL format or public-access constraints, but with a single required parameter this is a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Fetch one page') and enumerates an exact return contract: title, meta description, H1-H3 headings, and word count. This distinguishes it from the keyword- and sitemap-oriented sibling tools, none of which provide a per-page content outline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames the tool as a single-page content-outline operation, so an agent knows to use it when it needs on-page title, meta description, headings, or word count. It does not explicitly name alternatives or exclusions, but the singular 'one page' separates it from bulk sitemap and keyword tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sitemap_urlsA
Read-onlyIdempotent

List page URLs from a competitor's sitemaps to map its content structure.

Discovers sitemaps via robots.txt (falls back to /sitemap.xml), follows sitemap indexes recursively and reads gzipped sitemaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
siteYesDomain or URL, e.g. example.com
limitNo
containsNoKeep only URLs containing this substring

Output Schema

ParametersJSON Schema
NameRequiredDescription
siteYes
urlsYes
sitemapsYesSitemap files that were read
total_foundYesMatching URLs found before the limit was applied

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, openWorld, idempotent), the description discloses the discovery process (robots.txt, fallback to /sitemap.xml), recursive following of sitemap indexes, and handling of gzipped sitemaps. This gives useful behavioral insight that annotations do not cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the primary purpose front-loaded and the technical discovery details following. No redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema and the detailed behavioral description, the tool is well-specified. It could mention failure modes (e.g., no sitemap found) but that's minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers site and contains with descriptions; limit lacks a description but has default/max/min. The tool description does not elaborate on any parameters, so it adds no value beyond the schema. With 67% coverage, it's borderline; clarifying limit's effect would have helped.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (List page URLs), the resource (competitor's sitemaps), and the purpose (to map its content structure). This distinguishes it from siblings that focus on keywords, trends, or page outlines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a use case (mapping competitor content) but does not explicitly contrast with alternatives or state when not to use. Since no sibling is similar, it's somewhat implied, but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggestA
Read-onlyIdempotent

Autocomplete suggestions for one query from a single engine, in rank order.

source: google | youtube | bing | duckduckgo. hl: interface language (en, es, de...), gl: country (us, mx, de...). Position 0 is the most popular completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
glNous
hlNoen
sourceNogoogle
keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
glYes
hlYes
sourceYes
keywordYes
suggestionsYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent behavior. The description adds meaningful behavioral detail beyond that: results are ranked, position 0 is the most popular completion, and only one query from one engine is handled at a time. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose appears first, followed only by essential parameter semantics and ranking behavior. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only suggestion tool with an output schema and annotations, the description covers the key invocation decisions: source choice, language/country semantics, and result ordering. It could be more explicit about keyword semantics, but nothing critical is missing for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description documents the allowed source enum values and explains hl and gl with examples. The required keyword parameter is only implied as the 'query', which is a minor gap given the tool name and first sentence.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource behavior: it returns autocomplete suggestions for one query from one engine, in rank order. This distinguishes it from sibling tools like expand_alphabet and trends_* by scope and output type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: for a single-query, single-engine autocomplete lookup. However, it does not explicitly name alternative tools such as expand_alphabet or expand_questions, nor does it give when-not-to-use guidance, so some selection reasoning is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.1.0
    • First observedbing_keyword
    • First observedbing_keyword_history
    • First observedbing_related_keywords
    • First observedestimate_volumes
    • First observedexpand_alphabet
    • First observedexpand_multilingual
    • First observedexpand_questions
    • First observedkeywords_load
    • First observedkeywords_save
    • First observedpage_outline
    • First observedreddit_search
    • First observedsitemap_urls
    • First observedsuggest
    • First observedtrends_by_region
    • First observedtrends_compare
    • First observedtrends_related

TDQS

A3.5/5.0

Scored across 16 tools

Disambiguation4/5

Most tools target a distinct data source and action—autocomplete expansion, Google Trends, Bing data, Reddit, sitemaps, page outlines, and storage—so boundaries are generally clear. The expansion and Trends clusters are somewhat related, but their descriptions specify different algorithms and outputs, reducing real misselection risk.

Naming Consistency3/5

There are readable internal families: expand_*, trends_*, bing_*, keywords_*, but the overall set mixes action-first names like suggest and estimate_volumes with resource-first names like sitemap_urls and page_outline. This is not chaotic, but there is no single consistent naming pattern.

Tool Count4/5

16 tools is at the upper edge of the well-scoped range for a keyword-research server, and each tool covers a distinct facet of the workflow. It is slightly heavier than ideal but not bloated.

Completeness4/5

The surface covers keyword discovery via autocomplete, Trends, Bing, and Reddit, plus volume estimation, page analysis, sitemap mapping, and local storage/loading. Minor gaps such as saved-keyword deletion or a direct SERP/rank-checking tool exist but are workable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

  • Your agent needs to know what people actually search — volume, ideas, how hard the term is, and whether interest is rising or was a spike last March. **What you can ask for** • "What is the monthly volume and difficulty for these 200 keywords?" • "Give me keyword ideas around this seed, with questions people ask." • "Which keywords does this competitor rank for that we do not?" • "Is interest in this term growing, and where?" • "What does this page already rank for?" **How to use it** Point any MCP client at https://mcp.aisa.one/seo-keywords/mcp and sign in with OAuth — there is no key to create or paste. 49 tools: Google and Bing volume and suggestions, keywords for a site or a URL, clickstream volumes, Google Trends and Ads traffic estimates, plus Semrush difficulty, question keywords, broad match and paid keywords, and Similarweb's keyword and landing page sets. **Why this rather than the source** Three sources for the same number, so a suspicious volume can be checked rather than believed. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Size the demand here, then ask the same agent who ranks for it and who links to them — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo/mcp for all of it at once — rankings, keywords, backlinks, site health and AI-answer visibility across DataForSEO, Semrush and Ahrefs.

  • Keyword ideas from Google/YouTube/Bing/Amazon autocomplete, with intent and trend verdict.

    1
  • Keyword ideas from Google/YouTube/Bing/Amazon autocomplete, with intent and trend verdict.

  • Live SEO workflow tools for Claude Code, Codex, and AI agents.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides SEO automation with tools for keyword research, SERP analysis, and competitor analysis through Google Ads API integration, enabling AI assistants to access these capabilities via MCP.
    50
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables keyword analysis and search volume data through the Marketing Miner API, connecting marketing intelligence tools to AI assistants like Cursor, Claude, and Windsurf.
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Real-time trend data from Google Trends (Search, Images, News, Shopping), YouTube, TikTok, Reddit, Amazon, Wikipedia, npm, Steam, Spotify, X (Twitter), App Store, Google Play, web traffic, and news sentiment via one MCP connection. Works with Claude, Cursor, VS Code, Windsurf, ChatGPT, and any MCP-compatible AI.
    28
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Agent-first SEO toolkit with 24 MCP tools for keyword research, rank tracking, site audits up to 50k pages, competitor analysis, content gap detection, domain reputation, backlink intelligence, Google Search Console integration, and AI-powered strategy generation with Claude, GPT, and Ollama. SQLite-backed and bring-your-own-key.
    MIT