Koskamo

CallAI SEO MCP

Provides live SEO data including Google/Bing SERP results, AI Overview sources, keyword difficulty, backlinks, and page audits. It allows agents to query competitor keyword gaps and perform on-page audits using DataForSEO data, billed per call without a subscription.

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.

CallAI SEO MCP logo, by CallAIVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-07Operated by CallAI
MCP endpoint (Streamable HTTP)
https://api.callaiapi.com/mcp
Vendor documentation

What its tools do

20 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Can change data (1)

20 of 20 have a description · 20 of 20 declare behavior hints · 20 of 20 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to callaiapi.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query live Google and Bing search results with AI Overview sources
  • Analyze keyword volume, difficulty, and competitor keyword gaps
  • Retrieve backlink summaries and referring domain data
  • Perform on-page audits and domain checks

Source and maintenance

Vendor evidenceRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
callai-seo 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
20 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

CallAI SEO tools return live search data (Google/Bing SERP, keyword volume and difficulty, competitor rankings, backlinks, on-page audits) from DataForSEO, plus site checks and domain history. Every tool call needs an API key. DataForSEO tools are billed to the account that owns it, pay-as-you-go, and each result reports billed_usd. Tools described as free need the key but no balance, within a daily allowance. Prefer the dedicated tools; use dataforseo_request only when none fits, and always set a limit. Default market is location_code 2840 (United States) with language_code en; pass both for other markets. Batch keywords into one keyword_overview call instead of one call per keyword.

Tools

20 advertised

google_serp — Google SERP
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Live Google organic search results for a keyword in a given country and language: ranks, titles, URLs, snippets, plus the AI Overview text and the sources it cites. Billed per call (about $0.002 for depth 10).

google_serp input schema
{
  "type": "object",
  "required": [
    "keyword"
  ],
  "properties": {
    "depth": {
      "type": "integer",
      "description": "Number of results to fetch, 10–100 (default 10). Cost grows with depth."
    },
    "device": {
      "enum": [
        "desktop",
        "mobile"
      ],
      "type": "string",
      "description": "Default desktop."
    },
    "keyword": {
      "type": "string",
      "description": "Search query. Supports operators such as site:example.com."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    }
  },
  "additionalProperties": false
}
google_serp annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
bing_serp — Bing SERP
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Live Bing organic search results for a keyword in a given country and language: ranks, titles, URLs, snippets. Billed per call (about $0.002 for depth 10).

bing_serp input schema
{
  "type": "object",
  "required": [
    "keyword"
  ],
  "properties": {
    "depth": {
      "type": "integer",
      "description": "Number of results to fetch, 10–100 (default 10). Cost grows with depth."
    },
    "device": {
      "enum": [
        "desktop",
        "mobile"
      ],
      "type": "string",
      "description": "Default desktop."
    },
    "keyword": {
      "type": "string",
      "description": "Search query. Supports operators such as site:example.com."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    }
  },
  "additionalProperties": false
}
bing_serp annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
keyword_overview — Keyword metrics
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Google search volume, CPC, competition, keyword difficulty (0–100) and main search intent for up to 100 keywords in one call. About $0.01 per call plus $0.0001 per keyword.

keyword_overview input schema
{
  "type": "object",
  "required": [
    "keywords"
  ],
  "properties": {
    "keywords": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Keywords to look up (max 100)."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    }
  },
  "additionalProperties": false
}
keyword_overview annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
keyword_ideas — Long-tail keyword ideas
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Long-tail keywords that contain the seed keyword, with search volume, CPC, keyword difficulty and intent. Use it to find low-difficulty commercial keywords. About $0.01 per call plus $0.0001 per keyword returned.

keyword_ideas input schema
{
  "type": "object",
  "required": [
    "keyword"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Keywords to return, 1–200 (default 50)."
    },
    "keyword": {
      "type": "string",
      "description": "Seed keyword."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    },
    "max_difficulty": {
      "type": "integer",
      "description": "Only return keywords with keyword difficulty at or below this value (0–100)."
    }
  },
  "additionalProperties": false
}
keyword_ideas annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
ranked_keywords — Keywords a domain ranks for
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Google organic keywords a domain (or URL) currently ranks for, sorted by estimated traffic: keyword, volume, difficulty, position, ranking URL and estimated traffic. About $0.01 per call plus $0.0001 per row.

ranked_keywords input schema
{
  "type": "object",
  "required": [
    "target"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Rows to return, 1–200 (default 50)."
    },
    "target": {
      "type": "string",
      "description": "Domain such as example.com."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    }
  },
  "additionalProperties": false
}
ranked_keywords annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
domain_overview — Domain organic traffic overview
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Estimated Google organic traffic, number of ranking keywords and their position distribution for a domain, plus paid search totals. About $0.01 per call.

domain_overview input schema
{
  "type": "object",
  "required": [
    "target"
  ],
  "properties": {
    "target": {
      "type": "string",
      "description": "Domain such as example.com."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    }
  },
  "additionalProperties": false
}
domain_overview annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
keyword_gap — Competitor keyword gap
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Keywords the competitor ranks for on Google that your domain does not, sorted by search volume: the content gap to target. About $0.01 per call plus $0.0001 per row.

keyword_gap input schema
{
  "type": "object",
  "required": [
    "competitor",
    "your_domain"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Rows to return, 1–200 (default 50)."
    },
    "competitor": {
      "type": "string",
      "description": "Competitor domain."
    },
    "your_domain": {
      "type": "string",
      "description": "Your domain."
    },
    "language_code": {
      "type": "string",
      "description": "Language code, e.g. en (default), de, fr, ja, es, pt, zh-CN."
    },
    "location_code": {
      "type": "integer",
      "description": "DataForSEO location code. 2840 = United States (default), 2826 = UK, 2276 = Germany, 2250 = France, 2392 = Japan, 2356 = India, 2076 = Brazil."
    }
  },
  "additionalProperties": false
}
keyword_gap annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
backlinks_summary — Backlink profile summary
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Backlink totals for a domain: domain rank (0–1000), backlinks, referring domains, nofollow share, broken backlinks, spam score and first-seen date. About $0.02 per call.

backlinks_summary input schema
{
  "type": "object",
  "required": [
    "target"
  ],
  "properties": {
    "target": {
      "type": "string",
      "description": "Domain such as example.com."
    }
  },
  "additionalProperties": false
}
backlinks_summary annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
referring_domains — Referring domains
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Domains linking to the target, strongest first: rank, backlink count, spam score and first-seen date. About $0.02 per call plus a small per-row fee.

referring_domains input schema
{
  "type": "object",
  "required": [
    "target"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Rows to return, 1–200 (default 50)."
    },
    "target": {
      "type": "string",
      "description": "Domain such as example.com."
    }
  },
  "additionalProperties": false
}
referring_domains annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
page_audit — On-page SEO audit
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetches one URL and reports its on-page SEO: status code, title, meta description, canonical, headings, word count, link and image counts, load timing, on-page score and all on-page checks. About $0.0002 per call.

page_audit input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Absolute URL starting with https:// or http://."
    }
  },
  "additionalProperties": false
}
page_audit annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
dataforseo_request — Any DataForSEO v3 endpoint
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Calls any DataForSEO v3 endpoint directly when no dedicated tool fits (Google Maps, YouTube, Amazon keywords, Google Trends, LLM mentions, WHOIS, technologies, task_post/task_get and more). Body and response follow the DataForSEO v3 docs at https://docs.dataforseo.com/v3/. Billed at the endpoint's DataForSEO price; task_get and tasks_ready calls are free. Always set a limit or filters: endpoints without them can be expensive.

dataforseo_request input schema
{
  "type": "object",
  "required": [
    "path"
  ],
  "properties": {
    "body": {
      "type": "array",
      "items": {
        "type": "object"
      },
      "description": "Array of task objects for POST requests."
    },
    "path": {
      "type": "string",
      "description": "Path below /v3/, e.g. \"serp/google/maps/live/advanced\" or \"serp/google/organic/task_get/advanced/<task_id>\"."
    },
    "method": {
      "enum": [
        "POST",
        "GET"
      ],
      "type": "string",
      "description": "POST for live and task_post endpoints (default), GET for task_get and tasks_ready."
    }
  },
  "additionalProperties": false
}
dataforseo_request annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
keyword_suggestions — Search-box keyword suggestions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Autocomplete suggestions from Google, Bing, YouTube, Amazon, Baidu, DuckDuckGo, Yahoo and Yandex, merged and de-duplicated. No search volume; pass the results to keyword_overview for metrics. Free: needs an API key but no balance.

keyword_suggestions input schema
{
  "type": "object",
  "required": [
    "keyword"
  ],
  "properties": {
    "mode": {
      "enum": [
        "seed",
        "az",
        "questions"
      ],
      "type": "string",
      "description": "seed: the keyword only (default). questions: with question words. az: with each letter a–z, the most results."
    },
    "market": {
      "enum": [
        "us",
        "uk",
        "ca",
        "au",
        "de",
        "fr",
        "es",
        "it",
        "br",
        "mx",
        "jp",
        "cn"
      ],
      "type": "string",
      "description": "Default us."
    },
    "engines": {
      "type": "array",
      "items": {
        "enum": [
          "google",
          "bing",
          "youtube",
          "amazon",
          "baidu",
          "duckduckgo",
          "yahoo",
          "yandex"
        ],
        "type": "string"
      },
      "description": "Default google and bing."
    },
    "keyword": {
      "type": "string",
      "description": "Seed keyword."
    }
  },
  "additionalProperties": false
}
keyword_suggestions annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
check_robots — Read robots.txt
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetches a site's robots.txt and returns its status and contents. Free: needs an API key but no balance.

check_robots input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL or domain, such as https://example.com/page."
    }
  },
  "additionalProperties": false
}
check_robots annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
check_sitemap — Find and read sitemaps
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Finds a site's sitemaps through robots.txt (falling back to /sitemap.xml) and returns each one's status, number of URLs and a sample. Free: needs an API key but no balance.

check_sitemap input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL or domain, such as https://example.com/page."
    }
  },
  "additionalProperties": false
}
check_sitemap annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
page_meta — Read a page’s SEO tags
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetches one URL and returns its status, final URL, title, meta description, canonical, meta robots, X-Robots-Tag, hreflang and H1s, as a browser or as Googlebot. Reads the raw HTML without running JavaScript. For a full audit use page_audit. Free: needs an API key but no balance.

page_meta input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL or domain, such as https://example.com/page."
    },
    "fetch_as": {
      "enum": [
        "bot",
        "googlebot"
      ],
      "type": "string",
      "description": "Identify as our bot (default) or with Googlebot’s user agent, to spot cloaking."
    }
  },
  "additionalProperties": false
}
page_meta annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
redirect_chain — Trace redirects
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Follows a URL's redirects and returns the status and target of every hop, up to 5. Free: needs an API key but no balance.

redirect_chain input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "URL or domain, such as https://example.com/page."
    }
  },
  "additionalProperties": false
}
redirect_chain annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
dns_lookup — DNS records
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

A, AAAA, CNAME, MX, NS and TXT records of a domain, from public resolvers. Free: needs an API key but no balance.

dns_lookup input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain such as example.com."
    }
  },
  "additionalProperties": false
}
dns_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
email_auth_check — SPF, DKIM and DMARC audit
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Checks a domain's MX, SPF, DKIM, DMARC and MTA-STS records and says whether it can be spoofed, with the issues to fix. Without dkim_selector it tries the common selectors, so a missing DKIM result is not proof of absence. Free: needs an API key but no balance.

email_auth_check input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "description": "Domain such as example.com."
    },
    "dkim_selector": {
      "type": "string",
      "description": "The DKIM selector, if known."
    }
  },
  "additionalProperties": false
}
email_auth_check annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}
domain_check_start — Start a domain check
Advertised by the server during the last successful anonymous check.
Open-world

Checks up to 100 domains (for buying expired or used domains): web archive history, Baidu index and backlinks, ending in a clean, suspect or rejected verdict with reasons. Charged per domain, about $0.02. Set dry_run first to see the exact cost and show it to the user. Runs in the background; read progress with domain_check_results.

domain_check_start input schema
{
  "type": "object",
  "required": [
    "domains"
  ],
  "properties": {
    "rules": {
      "type": "object",
      "description": "Optional pass rules; anything left out uses the defaults. Fields: tlds (string[]), firstSeenBy (year), minStableYears, noHistory (pass|suspect|reject), minBaiduIndexed (0–10), minReferringDomains, maxSpamScore (0–100)."
    },
    "domains": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Domains to check (max 100)."
    },
    "dry_run": {
      "type": "boolean",
      "description": "Only return the cost; nothing is started or charged."
    }
  },
  "additionalProperties": false
}
domain_check_start annotations
{
  "readOnlyHint": false,
  "openWorldHint": true
}
domain_check_results — Read a domain check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Progress and per-domain verdicts of a check started with domain_check_start: verdict, reason, first archive year, stable years, Baidu results, referring domains and spam score. A check can take minutes; rows stay pending until their steps finish. Reading is free.

domain_check_results input schema
{
  "type": "object",
  "required": [
    "check_id"
  ],
  "properties": {
    "after": {
      "type": "integer",
      "description": "The \"next\" value of the previous page."
    },
    "limit": {
      "type": "integer",
      "description": "Rows per page, up to 200 (default 50)."
    },
    "verdict": {
      "enum": [
        "pending",
        "ok",
        "suspect",
        "bad",
        "error"
      ],
      "type": "string",
      "description": "Only rows with this verdict."
    },
    "check_id": {
      "type": "string",
      "description": "The id from domain_check_start."
    }
  },
  "additionalProperties": false
}
domain_check_results annotations
{
  "readOnlyHint": true,
  "openWorldHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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
1545 ms
95th percentile latency
1545 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1545 ms · metadata changed · 20 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http callai-seo-mcp https://api.callaiapi.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add callai-seo-mcp --url https://api.callaiapi.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable callai-seo-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "callai-seo-mcp": {
      "url": "https://api.callaiapi.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "callai-seo-mcp": {
      "type": "streamableHttp",
      "url": "https://api.callaiapi.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start callai-seo-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "callai-seo-mcp": {
      "type": "http",
      "url": "https://api.callaiapi.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http callai-seo-mcp https://api.callaiapi.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.callaiapi.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "callai-seo-mcp": {
      "serverUrl": "https://api.callaiapi.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like CallAI SEO MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run CallAI SEO 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.

Claim this listing