Model Context Protocol server

Google Search Console MCP Server- by k-o.pro (remote)

Connect Search Console to Claude and ask what your data means — across every property in your account, in plain English, without exporting a single CSV.

No Google Cloud project, no API keys, nothing to install. The button opens claude.ai with the connector pre-filled; you confirm the URL, then sign in with Google.

  • 33 tools
  • Read-only access
  • Every property, one connection
  • Open source

Connecting

claude.ai and Claude Desktop

One click adds it with the details filled in — claude.ai will ask you to confirm the address before anything connects:

Prefer to do it by hand? Settings → Connectors → Add custom connector, and paste the URL below. The Claude setup guide covers sign-in and troubleshooting.

Claude Code

claude mcp add --transport http gsc https://gsc.k-o.pro/mcp

Then run /mcp inside Claude Code to sign in. Scopes and terminal workflows are in the Claude Code guide.

Any other MCP client

It is a standard remote MCP server over Streamable HTTP. Point any client that supports remote MCP at:

https://gsc.k-o.pro/mcp

What happens the first time

Your browser opens two screens, in this order. First this server's own consent page, naming the application that asked and the exact address the result will be sent to — it exists so a connection request you did not start is refusable. Then Google's sign-in, asking for read-only Search Console access and your email address, and nothing else.

Then ask: “List my Search Console properties.”

What you can ask

Once connected, you ask questions instead of reading API rows. The answer comes back as a diagnosis, not a spreadsheet you still have to interpret:

“What am I almost ranking for?”

Queries sitting just off page one, where a small change moves the most traffic.

“Which pages lost traffic, and why?”

Traffic-drop diagnosis that separates a ranking loss from lost impressions or a seasonal dip.

“Am I cannibalising myself?”

Pages competing for the same query, and which one Google actually prefers.

“What’s decaying?”

Content sliding month over month while you weren’t looking.

Every answer carries provenance: which property it came from, the exact parameters used, and the date range. An answer is never ambiguous about which site it describes. position is labelled as the impression-weighted average it actually is, rather than being passed off as a rank-tracker position.

Real answers

One response per tool group, from this hosted instance against the author's own site, k-o.pro. They are shown as they came back, with rows trimmed where the caption says so. The _meta block at the top of each is the provenance every answer carries.

Find the opportunity · quick_wins
Asked: “What is k-o.pro almost ranking for? It's a small site, so go down to 5 impressions and position 20.”
quick_wins on the hosted instance, 13 October 2026
{
  "_meta": {
    "source": "Google Search Console API (live data)",
    "tool": "quick_wins",
    "parameters": {
      "days": 90,
      "min_impressions": 5,
      "max_position": 20,
      "site_url": "sc-domain:k-o.pro"
    },
    "note": "All numbers in this response come directly from the Google Search Console API. They are exact values, not estimates. Base your analysis only on this data. Do not invent or assume additional context."
  },
  "data": [
    {
      "query": "canonical check",
      "clicks": 0,
      "impressions": 22,
      "ctr": 0,
      "position": 15.6,
      "opportunity": 2
    }
  ]
}

One query qualifies on a site this size: "canonical check", 22 impressions at an average position of 15.6. The parameters Claude actually passed are in _meta, so the lowered thresholds are on the record rather than implied.

Diagnose the problem · cannibalization_check
Asked: “Is anything on k-o.pro competing with itself over the last 90 days?”
cannibalization_check on the hosted instance, 13 October 2026; first 2 of 7 queries shown
{
  "_meta": {
    "source": "Google Search Console API (live data)",
    "tool": "cannibalization_check",
    "parameters": {
      "days": 90,
      "min_impressions": 10,
      "site_url": "sc-domain:k-o.pro"
    },
    "note": "All numbers in this response come directly from the Google Search Console API. They are exact values, not estimates. Base your analysis only on this data. Do not invent or assume additional context."
  },
  "data": [
    {
      "query": "bulk redirect checker",
      "totalImpressions": 98,
      "pages": [
        {
          "page": "https://k-o.pro/bulk-redirect-checker/",
          "clicks": 0,
          "impressions": 21,
          "position": 17.5
        },
        {
          "page": "https://k-o.pro/bulk-redirect-checker",
          "clicks": 0,
          "impressions": 77,
          "position": 77.1
        }
      ]
    },
    {
      "query": "url checker bulk",
      "totalImpressions": 48,
      "pages": [
        {
          "page": "https://k-o.pro/bulk-redirect-checker/",
          "clicks": 0,
          "impressions": 11,
          "position": 83.9
        },
        {
          "page": "https://k-o.pro/bulk-redirect-checker",
          "clicks": 0,
          "impressions": 37,
          "position": 85.7
        }
      ]
    }
  ]
}

The competing pages are the same tool at two URLs that differ only by a trailing slash. For "bulk redirect checker" the slash version averages position 17.5 while the other averages 77.1 and takes most of the impressions: a canonicalisation fix, not a content one.

Look it up · inspect_url
Asked: “Is the k-o.pro homepage indexed, and when was it last crawled?”
inspect_url on the hosted instance, 13 October 2026
{
  "_meta": {
    "source": "Google Search Console API (live data)",
    "tool": "inspect_url",
    "parameters": {
      "url": "https://k-o.pro/",
      "site_url": "sc-domain:k-o.pro"
    },
    "note": "All numbers in this response come directly from the Google Search Console API. They are exact values, not estimates. Base your analysis only on this data. Do not invent or assume additional context."
  },
  "data": {
    "url": "https://k-o.pro/",
    "indexed": true,
    "indexingState": "Submitted and indexed",
    "lastCrawlTime": "2026-10-02T21:35:12Z",
    "crawlAllowed": true,
    "indexingAllowed": true,
    "pageFetchState": "SUCCESSFUL",
    "googleCanonical": "https://k-o.pro/",
    "userCanonical": "https://k-o.pro/",
    "canonicalMatch": true,
    "mobileUsability": "VERDICT_UNSPECIFIED",
    "issues": [],
    "summary": "This URL is indexed and healthy. Last crawled: 2026-10-02T21:35:12Z."
  }
}

Indexed, last crawled on 2 October 2026, and Google picked the same canonical the page declares. When a URL is not indexed, the same fields say which state it is in.

Image search · image_page_audit
Asked: “Audit the images on the k-o.pro homepage.”
image_page_audit on the hosted instance, 13 October 2026
{
  "_meta": {
    "source": "Live fetch of the audited pages (the user's own site)",
    "tool": "image_page_audit",
    "parameters": {
      "urls": [
        "https://k-o.pro/"
      ],
      "fetch_metadata": true,
      "max_images_per_page": 6,
      "max_images_reported": 6
    },
    "note": "All findings come from fetching and parsing the listed pages and image files at call time. Alt text, attributes, bytes, and dimensions are read values, not estimates. Base your analysis only on this data. An empty alt (alt=\"\") is correct for decorative images; do not report it as a defect."
  },
  "data": {
    "audits": [
      {
        "url": "https://k-o.pro/",
        "status": "ok",
        "http_status": 200,
        "page_checks": {
          "total_img_tags": 17,
          "content_images": 0,
          "images_fetched": 0,
          "lcp_candidate_src": null,
          "lcp_candidate_lazy_loaded": null,
          "lcp_candidate_fetchpriority": null,
          "inline_background_images": 0,
          "max_image_preview": "not_set",
          "image_object_schema_count": 0,
          "has_licensable_fields": false,
          "has_primary_image_of_page": false,
          "images_with_srcset": 0,
          "modern_format_sources": false
        },
        "images": [],
        "images_not_reported": 0,
        "issue_counts": {},
        "top_fixes": [
          "Add ImageObject schema (with about/mainEntity) for the page's key images",
          "Add max-image-preview:large to the robots meta for full-size previews"
        ]
      }
    ],
    "overall": {
      "pages_audited": 1,
      "pages_failed": 0,
      "total_issues": 0,
      "note": "empty alt (alt=\"\") is correct for decorative images; it is reported but not counted as an issue."
    }
  }
}

Of the 17 img tags, none counted as a content image, so no image files were fetched. The two page-level fixes it returned are about previews and schema rather than the images themselves.

AI search, and your account · genai_conversation_queries
Asked: “Do any of k-o.pro's queries look like AI conversations?”
genai_conversation_queries on the hosted instance, 13 October 2026; empty buckets, the long-tail bucket and the monthly timeline left out
{
  "_meta": {
    "source": "Google Search Console API (live data)",
    "tool": "genai_conversation_queries",
    "parameters": {
      "days": 480,
      "min_impressions": 1,
      "max_rows_per_bucket": 10,
      "include_timeline": true,
      "site_url": "sc-domain:k-o.pro"
    },
    "note": "All numbers in this response come directly from the Google Search Console API. They are exact values, not estimates. Base your analysis only on this data. Do not invent or assume additional context."
  },
  "data": {
    "period": {
      "startDate": "2025-06-20",
      "endDate": "2026-10-12"
    },
    "total_conversation_queries": 4,
    "total_conversation_impressions": 20,
    "buckets": {
      "conversational": {
        "total_matched": 2,
        "rows": [
          {
            "query": "how can i implement bulk tracking across chatgpt, perplexity, and gemini for 15+ accounts?",
            "impressions": 9,
            "clicks": 0,
            "ctr": 0,
            "position": 89.6,
            "top_pages": [
              {
                "page": "https://k-o.pro/posts/track-traffic-from-ai-chatbots-ga4",
                "impressions": 9
              }
            ]
          },
          {
            "query": "is it hard to make a chrome extension",
            "impressions": 1,
            "clicks": 0,
            "ctr": 0,
            "position": 51,
            "top_pages": [
              {
                "page": "https://k-o.pro/posts/how-to-build-a-chrome-extension",
                "impressions": 1
              }
            ]
          }
        ]
      }
    }
  }
}

Four queries in 16 months, all low volume: two conversational questions, each landing on the post that answers it. No reply artefacts like "yes" or "go on" on this site, which the timeline confirms month by month.

The 33 tools

Grouped by what you would reach for them to do. Each one takes the property as a parameter, so a single connection covers every site in your account.

Find the opportunity

Where the traffic you do not have yet is hiding.

quick_winsKeywords at positions 4–15 worth pushing to page one
ctr_opportunitiesPages with the impressions but a CTR far below par for their position
content_gapsDemand you already get impressions for but rank beyond 20
content_recommendationsQuick wins, gaps and cannibalisation cross-referenced into actions
topic_cluster_performanceHow a group of pages performs as one thing

Find the opportunity: parameters and a real example →

Diagnose the problem

What changed, and whether it was ranking, CTR or demand.

traffic_dropsThe biggest losses, each with a diagnosed cause
content_decayPages declining across three consecutive 30-day periods
cannibalization_checkQueries where your own pages compete with each other
check_alertsPosition drops, CTR collapses, and pages gone from results
ctr_vs_benchmarkYour CTR per page against the benchmark for that position

Diagnose the problem: parameters and a real example →

Look it up

The direct questions, answered against live data.

site_snapshotClicks, impressions, CTR and position against the prior period
advanced_search_analyticsA custom query with your own dimensions and filters
inspect_urlWhether a URL is indexed, and why it is not
verify_claimCheck a number against live data before it goes in the deck
generate_reportA full markdown performance report
multi_site_dashboardOne health check across many properties at once
list_propertiesEvery property this account can reach, with permission level
list_sitemapsSubmitted sitemaps with status, errors and indexed counts

Look it up: parameters and a real example →

Image search

Google's type=image surface, which most tools skip entirely.

image_keyword_overviewTop image-search keywords for the site
image_search_quick_winsImage queries at positions 4–15 with real impressions
image_pages_overviewPages ranked by image-search performance
image_keyword_trendsPeriod-over-period movement for image queries
image_impressions_no_clicksReal image impressions earning effectively zero clicks
image_content_decayThe decay check, run against image search
compare_web_vs_imageEach query side by side across web and image
image_page_auditAudits images on your own pages for what drives image ranking

Image search: parameters and a real example →

AI search, and your account

The newer surface, plus the controls over your own data.

genai_conversation_queriesAI-conversation exhaust hiding in ordinary query data
set_default_propertySave a default property so later calls can omit it
export_my_dataEverything this server stores about you
disconnect_accountErase all of it and end your sessions

AI search, and your account: parameters and a real example →

The three indexing tools — submit_url, submit_batch and submit_sitemap — are part of the software but cannot run on this hosted instance: they need write access to your Google account, which this service never requests. They work on a self-hosted install configured with wider scopes.

How it compares

The questions worth asking of any Search Console MCP server, answered for this one:

QuestionThis server
Do you need a Google Cloud project?No, for the hosted instance. Self-hosting needs your own OAuth client.
Does it work in claude.ai and Claude Desktop, or only locally?Both. It is a remote server over Streamable HTTP with its own OAuth, so connector UIs add it by URL; the same code runs locally over stdio.
One property per config, or all of them?Every property your Google account can see, from one connection.
What can it change in your Google account?Nothing, on the hosted instance: it requests webmasters.readonly only.
Is your Search Console data stored?No. It is fetched live for each question and passed back to your client.
What do the tools return?Diagnoses with provenance: every answer names the property, the parameters and the date range. 33 tools; 30 run on the hosted instance.
Does it cover Google Images?Yes, eight tools on the type=image search type, including an on-page image audit.
Can it find AI Mode and AI Overview queries?It finds queries shaped like AI conversations and sorts them into seven buckets. See AI Mode queries.
Price and licenceThe hosted instance is free. The code is Apache 2.0 and public on GitHub.

Why a remote server

Most MCP servers are local-only: one process, on one laptop, holding one credential. That is why they cannot be shared, and why the claude.ai and Claude Desktop connector interfaces cannot add them at all.

This one runs as a hosted service over Streamable HTTP, and implements the MCP authorization spec properly — dynamic client registration, PKCE, rotating tokens, and a consent screen of its own. That is what lets a connector interface onboard it from nothing but a URL. It also means a team shares one deployment while each person signs in as themselves and sees only their own properties. Nobody copies a credential anywhere.

What it reads, and what it stores

Ask your Claude client to run export_my_data to see everything held about you, or disconnect_account to erase it. The full detail is in the privacy policy.

Running your own

The code that runs here is at github.com/kodotpro/gsc-mcp-remote, under Apache 2.0. You can read exactly what this service does, or run your own copy with your own Google credentials — the same 33 tools, over stdio or as your own hosted deployment. The self-hosting guide walks through both.

Who builds it

Version 3.8.0 · page updated 13 October 2026 · changelog

Questions

What is an MCP server?

Model Context Protocol is an open standard for connecting AI clients to outside systems. An MCP server exposes a set of tools; the client decides when to call them. This one exposes Search Console, so Claude can answer questions about your search data without you exporting anything.

Do I need a Google Cloud project or API keys?

Not for the hosted instance. You add https://gsc.k-o.pro/mcp to your client and sign in with Google; the OAuth client belongs to this server. Running your own copy does need an OAuth client of your own from Google Cloud Console, and the self-hosting guide covers it.

Is there an official Google Search Console MCP server?

Not as of 13 October 2026. Google's list of Google-managed MCP servers and its open-source google/mcp repository do not include Search Console. Servers like this one are built on the public Search Console API.

Do I need to install anything?

No. It runs as a hosted remote MCP server, so you add it by URL and sign in with Google. If you would rather your Google token never left your own machine, the same server runs locally over stdio — the self-hosting guide has the instructions.

Can it change anything in my Search Console?

No. The hosted service requests one Google permission, webmasters.readonly, plus your email address to identify you. It cannot edit properties, change sitemaps, or submit URLs for indexing. Google's own per-property permissions apply on top, so you see exactly the properties Google would show you.

Does it work across all my properties?

Yes — that is the main reason it exists. Every property-scoped tool takes the property as a parameter, so one connection covers your whole account. You never edit a config file and restart to look at a different site.

Is my Search Console data stored anywhere?

No. Each question is answered by fetching live from Google's API and handing the result back to your Claude client; nothing is retained afterwards. What is stored is your email, your Google account identifier, an encrypted refresh token, and your chosen default property.

Is it free, and is it open source?

The software is open source under Apache 2.0 and the hosted instance is free to use. You can read exactly what runs here, or run your own copy.