Skip to main content
Glama
seovimalraj

Google Ads MCP Server

by seovimalraj

Google Search MCP Server

A Next.js App Router deployment that exposes a Model Context Protocol (MCP) server focused on organic search research. The server provides three tools—get_autocomplete_suggestions, get_trend_index, and get_keyword_clusters—built on top of Google Suggest, Google Trends, and Search Console. Autocomplete and Trends rely on public endpoints, while clustering authenticates with a Search Console service account.

Features

  • Google Autocomplete: Expands up to three seed queries into the real phrases Google users type right now.

  • Google Trends: Returns interest-over-time indices for up to three keywords with optional geo and category filters.

  • Keyword clustering: Merges Search Console queries and Google Autocomplete expansions into intent-driven groups with page recommendations.

  • Next.js 15 App Router with strict TypeScript, ESLint, and Prettier configuration.

  • Structured MCP responses with consistent error handling and lightweight rate limiting.

Requirements

  • Node.js 18.18 or newer.

  • pnpm or npm for dependency management.

  • Google Search Console service account credentials (only for get_keyword_clusters).

Getting started locally

pnpm install
pnpm dev

The development server defaults to http://localhost:3000.

Search Console credentials

The keyword clustering tool queries the Google Search Console Search Analytics API using a service account. Set the following environment variables before running the server:

  • GOOGLE_CLIENT_EMAIL – service account email with access to the Search Console property.

  • GOOGLE_PRIVATE_KEY – private key for the service account (escape newlines as \n in .env).

Alternative variable names (GOOGLE_SERVICE_ACCOUNT_EMAIL, GOOGLE_SERVICE_ACCOUNT_KEY, and GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY) are also recognised for compatibility.

MCP tools

All tools share the same POST endpoint: POST /api/mcp with JSON payload {"tool": "<name>", "input": { ... } }. Responses follow the ToolResponse shape ({ ok: true, data } or { ok: false, error }).

The server also understands the MCP Streamable HTTP JSON-RPC envelope, so agents that negotiate with initialize, tools/list, and tools/call will work without any proxy layer. The legacy JSON format shown below remains supported for quick manual testing.

ping

{
  "tool": "ping"
}

Result:

{
  "ok": true,
  "data": { "status": "ok" }
}

get_autocomplete_suggestions

Fetches live suggestions from Google Suggest. You can continue sending a single query or batch up to three with the queries array.

{
  "tool": "get_autocomplete_suggestions",
  "input": { "queries": ["toroidal transformer", "toroidal core"] }
}

Result:

{
  "ok": true,
  "data": {
    "queries": ["toroidal transformer", "toroidal core"],
    "results": [
      {
        "query": "toroidal transformer",
        "suggestions": [
          "toroidal transformer winding",
          "toroidal transformer core"
        ]
      },
      {
        "query": "toroidal core",
        "suggestions": ["toroidal core material", "toroidal core design"]
      }
    ],
    "combinedSuggestions": [
      "toroidal transformer winding",
      "toroidal transformer core",
      "toroidal core material",
      "toroidal core design"
    ]
  }
}

get_trend_index

Returns Google Trends interest-over-time data. Optional fields (geo, timeRange, category, property) map directly to the underlying Trends API. Provide keyword for backwards compatibility or batch up to three terms with keywords.

{
  "tool": "get_trend_index",
  "input": {
    "keywords": ["toroidal transformer", "toroidal core"],
    "timeRange": "today 12-m",
    "geo": "US"
  }
}

Result (truncated):

{
  "ok": true,
  "data": {
    "keyword": "toroidal transformer",
    "keywords": ["toroidal transformer", "toroidal core"],
    "geo": "US",
    "timeRange": "today 12-m",
    "seriesLabels": ["toroidal transformer", "toroidal core"],
    "averages": [42, 18],
    "points": [
      {
        "time": "1704067200",
        "formattedTime": "Dec 31, 2023",
        "values": [37, 12]
      }
    ]
  }
}

get_keyword_clusters

Produces intent-based keyword clusters by combining Google Search Console performance data with optional Google Autocomplete expansions. Provide a verified siteUrl and an optional seed query. The tool scores clusters, maps them to the best-performing page, and suggests next steps.

{
  "tool": "get_keyword_clusters",
  "input": {
    "query": "solar panels",
    "siteUrl": "https://example.com/",
    "timeRange": "last_90_days",
    "maxKeywords": 1500
  }
}

Result (truncated):

{
  "ok": true,
  "data": {
    "query": "solar panels",
    "siteUrl": "https://example.com/",
    "clusters": [
      {
        "label": "solar panel installation",
        "priority": 78,
        "representativeKeyword": "solar panel installation cost",
        "mappedPage": { "type": "existing", "url": "https://example.com/solar/installation" },
        "rollup": {
          "keywords": 9,
          "sumImpressions": 18400,
          "sumClicks": 1240,
          "avgCtr": 0.045,
          "avgPosition": 6.2
        },
        "recommendations": [
          "Update page for \"solar panel installation\" with FAQs and subtopics.",
          "Add internal links from related pages."
        ]
      }
    ]
  }
}

Advanced Google data sources to explore

Looking to extend the MCP server further? Google exposes several additional surfaces that complement autocomplete and Trends:

  • Search Console API: Pull verified site performance data (clicks, impressions, CTR) to validate organic opportunities.

  • People Also Ask / Related Searches: Scrape or proxy the SERP modules for question-driven keyword ideation.

  • Google Ads Keyword Planner: Estimate paid search volume, bid ranges, and competition scores when you have Ads access.

  • Google Discover and News trends: Track emerging stories for content roadmaps using the Discover feed and Google News APIs.

  • Google Analytics Data API: Blend on-site engagement metrics with keyword demand to prioritise high-impact opportunities.

Rate limiting & errors

  • Rate limiting: 10 requests per minute per IP/user agent combination. Exceeding the budget returns 429 with code: RATE_LIMIT_EXCEEDED.

  • Upstream issues: Failures from Google endpoints map to UPSTREAM_ERROR with the HTTP status and service name.

  • Validation errors: Invalid input payloads return INVALID_ARGUMENT and include Zod field errors.

  • Unexpected failures: Return 500 with code: UNKNOWN but never leak secrets.

ChatGPT Developer Mode integration

Add a remote MCP server in ChatGPT using the following configuration:

  • Server URL: https://<your-app>.vercel.app/api/mcp

  • Tools: Automatically discovered (ping, get_autocomplete_suggestions, get_trend_index, get_keyword_clusters).

  • Auth flow: None required—both tools rely on public Google endpoints.

Example invocation in ChatGPT:

{
  "tool": "get_trend_index",
  "input": { "keyword": "toroidal transformer" }
}

Expect a JSON payload with interest-over-time points that you can combine with autocomplete suggestions or the get_keyword_clusters tool to validate seasonal demand and prioritise content.

Troubleshooting

Symptom

Resolution

RATE_LIMIT_EXCEEDED

Wait until the window resets (~60 seconds) or reduce tool frequency.

UPSTREAM_ERROR

Google responded with an error status. Retry later or adjust the query/filters.

UNKNOWN

Check server logs for the underlying exception.

Acceptance checklist

  • Autocomplete MCP tool returning Google Suggest phrases.

  • Trends MCP tool returning interest-over-time data.

  • Keyword clustering MCP tool grouping Search Console queries into recommendations.

  • README covering setup, usage, and troubleshooting.

-
security - not tested
A
license - permissive license
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seovimalraj/google-ads-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server