Duo Leads Keyword MCP
Provides keyword research data including Google search volume, CPC, competition, difficulty, and search intent for up to 100 keywords per call, along with keyword ideas and Google Trends data. It uses a pay-per-call model via x402 with USDC on Base, requiring no account or API key.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://keywords.duoleads.com/mcpWhat you can do with it
- Retrieve search volume and CPC for a list of keywords
- Generate keyword ideas based on a seed keyword
- Get Google Trends interest over time for a keyword
- Find related queries and interest by region for a keyword
Source and maintenance
Protocol and capabilities
- Server
- Keyword Search Volume and CPC 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 6 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
6 advertised
keyword_overview — Keyword overview (up to 100 keywords)
Search volume, CPC, competition, keyword difficulty and search intent for up to 100 keywords in one $0.04 call (Google Ads data). Use when you already have a keyword list to prioritise. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Keywords without data are left out of results and listed in missing (still charged). Bad input is free; upstream errors are not charged. Price: $0.04 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keywords"
],
"properties": {
"country": {
"type": "string",
"maxLength": 64,
"description": "ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb)."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 320
},
"maxItems": 100,
"minItems": 1,
"description": "Keywords to look up (1-100; each at most 80 characters). Whitespace and control characters are normalised to single spaces and keywords to lower case; a keyword that is then empty, over 10 words or over 80 characters is not looked up and is listed in missing, and a request with no keyword left to look up is a free 400 (the one exception to openverbs schema compatibility)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Default en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Google Ads location code (geo target ID). Default 2840 (United States); an unsupported code falls back to 2840 (United States)."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each keyword's monthly search volumes."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}keyword_search_volume — Search volume (GET, up to 20 keywords)
Google search volume, CPC, competition, keyword difficulty and intent for up to 20 comma-separated keywords in one $0.04 GET (Google Ads data). Use when you need monthly search volume for a few keywords in a country. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Up to 100 keywords for the same $0.04: POST /v1/keyword-overview. Keywords without data are listed in missing (still charged). Bad input is free; upstream errors are not charged. Price: $0.04 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keywords"
],
"properties": {
"lang": {
"type": "string",
"maxLength": 16,
"description": "Language code offered for the country (en, es, de, ...). Default en when offered."
},
"country": {
"type": "string",
"maxLength": 8,
"description": "ISO 3166-1 alpha-2 country code of a supported location (us, gb, de, ...; uk = gb). Default us."
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 320
},
"maxItems": 20,
"minItems": 1,
"description": "1-20 keywords (no commas inside a keyword; each at most 80 characters). Whitespace and control characters are normalised to single spaces and keywords to lower case; a keyword that is then empty, over 10 words or over 80 characters is not looked up and is listed in missing; none left to look up is a free 400."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each keyword's monthly search volumes."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}keyword_ideas — Keyword ideas (up to 100 per seed)
Keyword ideas for a seed keyword, each with Google search volume, CPC, competition, keyword difficulty and search intent; up to 100 ideas in one $0.04 call (Google Ads data). Use when you need related keywords to target. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. No ideas returns empty results (still charged). Bad input is free; upstream errors are not charged. Price: $0.04 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keyword"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum ideas to return (1-100). Default 20."
},
"country": {
"type": "string",
"maxLength": 64,
"description": "ISO 3166-1 alpha-2 code or country name, used when locationCode is absent."
},
"keyword": {
"type": "string",
"maxLength": 320,
"description": "Seed keyword to expand (at most 80 characters; whitespace, control characters and case are normalised; a seed then empty, over 10 words or over 80 characters is a free 400)."
},
"languageCode": {
"type": "string",
"maxLength": 16,
"description": "Language code (2-letter). Default en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used."
},
"locationCode": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Google Ads location code (geo target ID). Default 2840 (United States); an unsupported code falls back to 2840 (United States)."
},
"includeMonthly": {
"type": "boolean",
"description": "Add each idea's monthly search volumes."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}google_trends — Google Trends interest over time
Google Trends interest over time for one keyword: a dated 0-100 series for a country or worldwide, past 7 days to 5 years, in one $0.045 GET. Use when you need search-interest trends, seasonality or demand direction for a keyword. Daily points for short windows, weekly for 12 months. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged. Price: $0.045 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keyword"
],
"properties": {
"country": {
"type": "string",
"maxLength": 8,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"timeframe": {
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"description": "Time window. Default past_12_months."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}google_trends_related_queries — Google Trends related queries
Google Trends related queries for one keyword: the top related searches (0-100) and the rising ones (% growth), for a country or worldwide, past 7 days to 5 years, in one $0.03 GET. Use when you need query expansion, content ideas or emerging searches around a keyword. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged. Price: $0.03 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keyword"
],
"properties": {
"country": {
"type": "string",
"maxLength": 8,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"timeframe": {
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"description": "Time window. Default past_12_months."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}google_trends_by_region — Google Trends interest by region
Google Trends interest by region for one keyword: 0-100 interest per subregion of a country (or per country worldwide), past 7 days to 5 years, in one $0.03 GET. Use when you need where a keyword is searched most, for geo-targeting or local market research. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Too little Google data gives an empty answer, which is still charged. Price: $0.03 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"keyword"
],
"properties": {
"country": {
"type": "string",
"maxLength": 8,
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"timeframe": {
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
],
"type": "string",
"description": "Time window. Default past_12_months."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 294 ms
- 95th percentile latency
- 294 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 294 ms · metadata changed · 6 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http duo-leads-keyword-mcp https://keywords.duoleads.com/mcpCodex
codex mcp add duo-leads-keyword-mcp --url https://keywords.duoleads.com/mcpCursor
{
"mcpServers": {
"duo-leads-keyword-mcp": {
"url": "https://keywords.duoleads.com/mcp"
}
}
}Cline
{
"mcpServers": {
"duo-leads-keyword-mcp": {
"type": "streamableHttp",
"url": "https://keywords.duoleads.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"duo-leads-keyword-mcp": {
"type": "http",
"url": "https://keywords.duoleads.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http duo-leads-keyword-mcp https://keywords.duoleads.com/mcpClaude Desktop
{
"mcpServers": {
"duo-leads-keyword-mcp": {
"url": "https://keywords.duoleads.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"duo-leads-keyword-mcp": {
"serverUrl": "https://keywords.duoleads.com/mcp"
}
}
}Let your agent find its tools
Find servers like Duo Leads Keyword MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other ai and machine learning servers
Do you run Duo Leads Keyword MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.