flin-google-keyword-planner-mcp
This server provides tools to generate Google Ads Keyword Planner ideas using various seed strategies, and manage Google Ads API authentication.
Keyword Research Tools
From a keyword list (
keyword_ideas_from_keywords) — provide seed keywords to get related suggestionsFrom a URL (
keyword_ideas_from_url) — use a webpage URL as the seed to discover relevant keywordsFrom keywords + URL combined (
keyword_ideas_from_keyword_and_url) — combine a keyword list and a URL for more targeted suggestionsFrom an entire site/domain (
keyword_ideas_from_site) — use a full domain as the seed to discover keywords across the whole siteWith historical metrics (
keyword_ideas_historical) — retrieve keyword ideas with historical search volume data constrained to a year-month date range, with optional average CPC data
Common Options (available on all keyword tools)
Filter by language, location/country, and network (
GOOGLE_SEARCHorGOOGLE_SEARCH_AND_PARTNERS)Toggle adult keyword inclusion
Control result limit (default 50, max 1000) and pagination
Add keyword annotations and aggregate metrics by device
OAuth / Authentication Tools
Start a local OAuth flow (
google_ads_start_local_oauth_flow) — launch a local callback server and get the Google consent URL automaticallyGet the authorization URL (
google_ads_authorization_url) — manually generate a Google OAuth consent URLExchange an authorization code (
google_ads_exchange_authorization_code) — trade an OAuth code for a refresh tokenCheck OAuth status (
google_ads_oauth_status) — verify whether a runtime token is available and check the local callback server status
Provides tools for generating keyword ideas using Google Ads Keyword Planner, supporting seed strategies from keywords, URLs, sites, and historical metrics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@flin-google-keyword-planner-mcpgenerate keyword ideas for 'organic coffee beans'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
flin-google-keyword-planner-mcp
MCP server for Google Ads Keyword Planner ideas.
This server exposes focused read-only tools so an LLM can clearly choose the right seed strategy.
Exposed MCP tools
keyword_ideas_from_keywordskeyword_ideas_from_urlkeyword_ideas_from_keyword_and_urlkeyword_ideas_from_sitekeyword_ideas_historical
Related MCP server: google-ads-write-mcp
Tool overview
1) keyword_ideas_from_keywords
Generate ideas from a keyword list (KeywordSeed).
Required:
keywords
2) keyword_ideas_from_url
Generate ideas from a page URL (UrlSeed).
Required:
url
3) keyword_ideas_from_keyword_and_url
Generate ideas from keyword list + URL (KeywordAndUrlSeed).
Required:
keywordsurl
4) keyword_ideas_from_site
Generate ideas from a full site/domain (SiteSeed).
Required:
site_url
5) keyword_ideas_historical
Generate ideas from keywords and constrain historical metrics to a year-month range.
Required:
keywordsstart_yearstart_monthend_yearend_month
Historical option:
include_average_cpc(defaultfalse)
Common optional parameters (all tools)
customer_idlanguage_id(default1000)location_ids(default2840= US)network(GOOGLE_SEARCHorGOOGLE_SEARCH_AND_PARTNERS)include_adult_keywords(defaultfalse)limit(default50, max1000)page_tokenkeyword_annotation(currently:KEYWORD_CONCEPT)aggregate_metric_types(currently:DEVICE)login_customer_id
Requirements
Python 3.10+
Google Ads API credentials:
GOOGLE_ADS_DEVELOPER_TOKENGOOGLE_ADS_CLIENT_IDGOOGLE_ADS_CLIENT_SECRET
Optional:
GOOGLE_ADS_REFRESH_TOKEN(only needed if you want a persistent token instead of generating one in Claude)GOOGLE_ADS_LOGIN_CUSTOMER_IDGOOGLE_ADS_CUSTOMER_ID(default customer if nocustomer_idargument is passed)GOOGLE_ADS_USE_PROTO_PLUS(trueby default)
Quickstart (local)
uv sync --extra dev
cp .env.example .env
# Fill .env with real credentials
uv run flin-google-keyword-planner-mcpClaude integration
Option A: Published package (uvx)
{
"mcpServers": {
"flin-google-keyword-planner-mcp": {
"command": "uvx",
"args": ["flin-google-keyword-planner-mcp@latest"],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "REPLACE_ME",
"GOOGLE_ADS_CLIENT_ID": "REPLACE_ME",
"GOOGLE_ADS_CLIENT_SECRET": "REPLACE_ME",
"GOOGLE_ADS_CUSTOMER_ID": "1234567890",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "1234567890",
"GOOGLE_ADS_USE_PROTO_PLUS": "true"
}
}
}
}Option B: Local development checkout
{
"mcpServers": {
"flin-google-keyword-planner-mcp-local": {
"command": "uv",
"args": [
"run",
"--directory",
"/ABSOLUTE/PATH/TO/flin-google-keyword-planner-mcp",
"flin-google-keyword-planner-mcp"
],
"env": {
"GOOGLE_ADS_DEVELOPER_TOKEN": "REPLACE_ME",
"GOOGLE_ADS_CLIENT_ID": "REPLACE_ME",
"GOOGLE_ADS_CLIENT_SECRET": "REPLACE_ME",
"GOOGLE_ADS_CUSTOMER_ID": "1234567890",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "1234567890",
"GOOGLE_ADS_USE_PROTO_PLUS": "true"
}
}
}
}Restart Claude Desktop after config changes.
Generate the refresh token in Claude
After Claude has loaded the MCP, ask it to run:
google_ads_start_local_oauth_flowOpen the returned
authorization_urlin your browser and approve Google Ads access.After the browser shows the local completion page, run
google_ads_oauth_status.Run the keyword tools once
token_availableistrue.
The default redirect URI is http://localhost:8080/. If your Google OAuth client uses a different loopback redirect URI, pass it to google_ads_start_local_oauth_flow.
If you cannot use the local callback flow, use the manual fallback:
Run
google_ads_authorization_url.Open the returned URL and approve access.
Copy either the full redirected URL or the
codequery parameter.Run
google_ads_exchange_authorization_codewith that value.
The exchanged refresh token is stored outside Claude config in ~/.config/flin-google-keyword-planner-mcp/oauth-token.json and reused after MCP restarts. Override the storage path with FLIN_GOOGLE_ADS_TOKEN_FILE if needed.
Security
Never commit real credentials to git.
.envand.env.*are gitignored; only.env.exampleis tracked.Keep secrets in environment variables or secret managers.
Rotate credentials immediately if accidentally exposed.
CI and release workflows run secret scanning with OSS
gitleaks(noGITLEAKS_LICENSEsecret required).
Testing
uv sync --extra dev
python3 -m pytest
python3 -m compileall src
uv buildRelease automation (GitHub + PyPI)
CI workflow:
.github/workflows/ci.ymlRelease workflow:
.github/workflows/release.ymlTag push (
v*) triggers:
tests + compile + build +
twine checkpublish to PyPI via Trusted Publishing (OIDC)
GitHub Release creation with built artifacts
PyPI Trusted Publishing (one-time)
In the PyPI project flin-google-keyword-planner-mcp, add a Trusted Publisher:
Owner:
flin-agencyRepository:
flin-google-keyword-planner-mcpWorkflow:
release.ymlEnvironment:
pypi
Release steps
# 1) bump version in pyproject.toml + src/flin_google_ads_mcp/__init__.py
# 2) run checks
python3 -m pytest
python3 -m compileall src
uv build
# 3) release
git add -A
git commit -m "release: vX.Y.Z"
git tag vX.Y.Z
git push origin main --tagsAvailable Tools
9 toolsgoogle_ads_authorization_urlC
Create the Google OAuth consent URL for generating a Google Ads refresh token.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | ||
| redirect_uri | No | http://localhost:8080/ |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It only states the action (create URL) but omits behavioral details like side effects, required permissions, rate limits, or error conditions. It does not disclose that this is a read-only operation generating a URL.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it sacrifices necessary detail. It earns its place in terms of brevity but is too sparse for a tool with two parameters and sibling context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (OAuth URL generation) and the presence of an output schema, the description should explain the output or setup requirements. It does not mention what the URL contains or how to use the result, leaving gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. However, it does not mention 'state' or 'redirect_uri' at all, leaving the agent unaware of their roles or default values. The description adds no value over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a Google OAuth consent URL specifically for generating a Google Ads refresh token. It uses a specific verb ('Create') and resource ('OAuth consent URL'), and the purpose is distinct from sibling tools like google_ads_exchange_authorization_code or google_ads_oauth_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus its siblings (e.g., google_ads_exchange_authorization_code, google_ads_start_local_oauth_flow). It does not indicate prerequisites or context, such as needing client credentials first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_exchange_authorization_codeC
Exchange a Google OAuth authorization code for a session refresh token.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| redirect_uri | No | http://localhost:8080/ |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral burden. It lacks details on side effects (e.g., storing the refresh token), required permissions, error states, or rate limits. The description is too minimal for a security-sensitive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded and contains no fluff. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks context about prerequisites, the flow sequence, error handling, and security implications. For a complex OAuth operation, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description adds no explanation for the 'code' or 'redirect_uri' parameters. The description only mentions 'authorization code' generically without mapping to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Exchange') and identifies the specific resource (authorization code) and outcome (session refresh token). It effectively distinguishes this step from sibling tools like google_ads_authorization_url or google_ads_oauth_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Missing prerequisites (e.g., must have obtained an authorization code first) and no mention of when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_oauth_statusA
Return local OAuth callback status and whether a runtime token is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states what is returned, not whether the operation is read-only or has side effects. Given the simplicity, a score of 2 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no unnecessary words. It is front-loaded with the key verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description sufficiently indicates what the tool returns. Additional context about the OAuth flow might be helpful but is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (0), so the baseline is 4. The description adds no parameter info, which is acceptable since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'local OAuth callback status and whether a runtime token is available'. It is distinct from sibling tools that handle authorization URL generation or code exchange.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking OAuth status but lacks explicit when-to-use or when-not-to-use guidance. No comparison with sibling tools is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
google_ads_start_local_oauth_flowC
Start a local OAuth callback server and return the Google consent URL.
| Name | Required | Description | Default |
|---|---|---|---|
| redirect_uri | No | http://localhost:8080/ |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. It omits critical details: does it block waiting for callback? What happens on port conflict? Does it open browser? Lifespan of server? These are important for an agent invoking this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded. However, it sacrifices necessary detail for brevity. Loses a point for omitting important info that could be added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given complexity of OAuth flow and absence of schema descriptions, description is insufficient. Lacks details on error handling, state, and expected behavior for multiple invocations. Though output schema exists, description itself is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet description does not explain the 'redirect_uri' parameter at all. Agent cannot infer its purpose (e.g., where the callback should be sent) or default value significance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool starts a local OAuth callback server and returns the Google consent URL, using specific verbs and resource. It distinguishes itself from sibling tools like 'google_ads_authorization_url' which likely just returns the URL without starting a server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool (e.g., as first step in OAuth flow) or when not to use alternatives. Does not mention prerequisites or ordering with siblings like 'google_ads_exchange_authorization_code'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_ideas_from_keyword_and_urlC
Generate keyword ideas using KeywordAndUrlSeed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No | ||
| network | No | GOOGLE_SEARCH_AND_PARTNERS | |
| keywords | Yes | ||
| page_token | No | ||
| customer_id | No | ||
| language_id | No | 1000 | |
| location_ids | No | ||
| login_customer_id | No | ||
| keyword_annotation | No | ||
| aggregate_metric_types | No | ||
| include_adult_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It fails to mention side effects, pagination behavior, rate limits, or authentication needs. The output schema exists but the description adds no behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is under-specified for a tool with 12 parameters. Conciseness should not sacrifice completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity (12 params, 0% schema coverage, no annotations, similar siblings), the description is severely incomplete. It lacks guidance on parameter usage, behavioral traits, and differentiation, making it inadequate for correct agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does not explain any parameter, not even the required keywords and url, offering no semantic value beyond the schema's minimal names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Generate keyword ideas using KeywordAndUrlSeed' clearly states the verb (generate) and resource (keyword ideas), and the seed type is implied by the tool name. However, it does not differentiate from sibling tools like 'keyword_ideas_from_keywords' which uses only keywords, missing a chance to clarify the unique combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, exclusions, or context where this seed type is preferred, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_ideas_from_keywordsC
Generate keyword ideas using KeywordSeed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| network | No | GOOGLE_SEARCH_AND_PARTNERS | |
| keywords | Yes | ||
| page_token | No | ||
| customer_id | No | ||
| language_id | No | 1000 | |
| location_ids | No | ||
| login_customer_id | No | ||
| keyword_annotation | No | ||
| aggregate_metric_types | No | ||
| include_adult_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior, but it only says 'Generate keyword ideas using KeywordSeed.' It does not reveal safety traits, prerequisites, or side effects. For a tool with 11 parameters, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short at one sentence, which is concise but lacks structural elements like front-loading key info. It is under-specified for a tool with many parameters and sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, a rich schema with 11 parameters, and existing output schema, the description is incomplete. It does not explain the impact of parameters like location, language, or network on results, nor does it clarify what the output contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the input schema provides no parameter descriptions. The description adds no meaning for any of the 11 parameters, so it fails to compensate for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Generate keyword ideas using KeywordSeed' which indicates the tool generates keyword ideas from keywords, but it lacks a specific verb and resource distinction. It does not differentiate from sibling tools that also generate keyword ideas from other inputs like URLs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not specify when to use this tool over alternatives like keyword_ideas_from_url or keyword_ideas_from_site, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_ideas_from_siteC
Generate keyword ideas using SiteSeed.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| network | No | GOOGLE_SEARCH_AND_PARTNERS | |
| site_url | Yes | ||
| page_token | No | ||
| customer_id | No | ||
| language_id | No | 1000 | |
| location_ids | No | ||
| login_customer_id | No | ||
| keyword_annotation | No | ||
| aggregate_metric_types | No | ||
| include_adult_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states it generates ideas without revealing behavioral traits such as read-only nature, side effects, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence) but lacks necessary detail, making it under-specified rather than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no parameter explanations, and no mention of the output schema (which exists), the description is far from complete for effective tool usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description does not explain any of the 11 parameters, leaving the agent without understanding of their purpose or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies generating keyword ideas using SiteSeed, but it lacks clarity on what SiteSeed is and does not differentiate from sibling tools like keyword_ideas_from_keywords or keyword_ideas_from_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives. The description does not mention when to use SiteSeed vs other keyword idea generation methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_ideas_from_urlC
Generate keyword ideas using UrlSeed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| limit | No | ||
| network | No | GOOGLE_SEARCH_AND_PARTNERS | |
| page_token | No | ||
| customer_id | No | ||
| language_id | No | 1000 | |
| location_ids | No | ||
| login_customer_id | No | ||
| keyword_annotation | No | ||
| aggregate_metric_types | No | ||
| include_adult_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description lacks any behavioral details such as whether the tool is read-only, requires authentication, has rate limits, or what side effects occur. The agent has no insight beyond 'generate'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise and front-loaded. However, it is too brief given the tool's complexity, sacrificing necessary information for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high parameter count (11), no schema descriptions, no annotations, and the existence of sibling tools, the description is severely incomplete. It fails to cover usage, parameter roles, or return values, leaving the agent with insufficient context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should compensate by explaining key parameters. It only implies the 'url' parameter via the tool's name and description, but ignores the other 10 parameters (e.g., customer_id, language_id, filters). This adds minimal semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('generate') and the output ('keyword ideas') and specifies the source ('UrlSeed'). However, it does not differentiate from sibling tools like 'keyword_ideas_from_keywords' or 'keyword_ideas_from_site', leaving ambiguity about when to use this URL-based variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus the siblings (e.g., when a URL-only input is available). No usage context, prerequisites, or examples are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_ideas_historicalC
Generate keyword ideas with historical metrics options (year-month range).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| network | No | GOOGLE_SEARCH_AND_PARTNERS | |
| end_year | Yes | ||
| keywords | Yes | ||
| end_month | Yes | ||
| page_token | No | ||
| start_year | Yes | ||
| customer_id | No | ||
| language_id | No | 1000 | |
| start_month | Yes | ||
| location_ids | No | ||
| login_customer_id | No | ||
| keyword_annotation | No | ||
| include_average_cpc | No | ||
| aggregate_metric_types | No | ||
| include_adult_keywords | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read/write nature, rate limits, or authentication requirements, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (one sentence), but this brevity comes at the cost of omitting necessary details for a complex tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 params, 5 required, many optional), the description is insufficient; it does not cover the breadth of functionality or parameter roles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 16 parameters, the description only mentions the date-range concept, failing to explain the many other parameters (e.g., keywords, location, network).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates keyword ideas and specifies 'historical metrics options' with a date range, distinguishing it from siblings that focus on different sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lacks guidance on when to use this tool over siblings, only hinting at historical data without explicit comparison or exclusion criteria.
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.
4 tool updates
v0.2.6- Added
google_ads_authorization_url - Added
google_ads_exchange_authorization_code - Added
google_ads_oauth_status - Added
google_ads_start_local_oauth_flow
5 tool updates
v0.2.3- First observed
keyword_ideas_from_keyword_and_url - First observed
keyword_ideas_from_keywords - First observed
keyword_ideas_from_site - First observed
keyword_ideas_from_url - First observed
keyword_ideas_historical
TDQS
Scored across 9 tools
Each tool has a clearly distinct purpose: OAuth flow tools handle different stages (authorization URL, code exchange, status, local server), and keyword tools use distinct seed types (keyword+URL, keywords, site, URL, historical). No ambiguity between any pair.
All tools follow a consistent snake_case pattern. OAuth tools use the prefix 'google_ads_' followed by a verb_noun describing the action (e.g., authorization_url, exchange_authorization_code). Keyword tools uniformly start with 'keyword_ideas_from_' and specify the seed type. This consistent structure helps agents predict naming.
9 tools is well-scoped for a Google Ads Keyword Planner MCP. It covers authentication setup (4 tools) and keyword idea generation from multiple seed types (5 tools), without unnecessary duplication. The count feels appropriate for the domain.
The tool set covers the full OAuth lifecycle (authorization, exchange, status, local flow) and provides all common ways to generate keyword ideas: from keywords, URL, site, and historical data. There are no obvious gaps for the stated purpose of keyword planning.
Maintenance
Related MCP Connectors
Google Ads MCP server — manage campaigns, keywords, and metrics.
Hosted Google Ads MCP with OAuth, bounded reads, and prepare/confirm writes.
MCP server for generating rough-draft project plans from natural-language prompts.
- CalmSEOOAuthcom.calmseo
SEO MCP server for keyword research, SERP analysis, audits, and Search Console workflows.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes Google Ads keyword search volumes to AI agents via the KeywordPlanIdeaService, offering a free alternative to paid keyword-volume APIs.1MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes write operations on Google Ads, enabling management of campaigns, ad groups, keywords, RSA ads, sitelinks, images, Customer Match audiences, and recommendations.MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for managing Google Ads campaigns through the official Google Ads API, covering accounts, campaigns, budgets, keywords, search terms, and keyword ideas. It provides tools for both reading and mutating live ads data, such as pausing campaigns, updating budgets, and adding keywords.MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Google Ads API that enables LLMs to search and query Google Ads accounts, retrieve resource metadata, and generate keyword ideas.Apache 2.0