Google Search Console

Google Search Console for SEO reporting: sites, sitemaps, search analytics, and URL inspection

17 tools available

Installation

Claude Desktop

{
  "mcpServers": {
    "hopkin-google-search-console": {
      "url": "https://gsc.mcp.hopkin.ai",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

CLI

npm install -g @hopkin/cli
hopkin auth set-key hpk_live_...
hopkin google-search-console ping

Tools

ch-console-get-search-analytics

google_search_console_get_search_analytics Get Search Analytics Data

Read-onlyOpen-world

Query Google Search Console search analytics data. Returns clicks, impressions, CTR, and position. Args: site_url (string, required): The Search Console property URL. start_date (string, required): Start date in YYYY-MM-DD format. end_date (string, required): End date in YYYY-MM-DD format (must be >= start_date). dimensions (array, optional): Group by dimensions. Valid: query, page, device, country, date, searchAppearance. Note: searchAppearance cannot be combined with query, page, device, or country — only with date. search_type (string, optional): web (default), image, video, news, discover, googleNews. dimension_filter_groups (array, optional): Filter by dimension values. Note: Cannot combine aggregate_by=byPage with a page dimension filter. aggregate_by (string, optional): auto (default), byPage, byProperty, byNewsShowcasePanel. row_limit (int, optional): Rows per page. Range: [1, 25000]. Default: 25. cursor (string, optional): Opaque cursor from a previous response's pagination.nextCursor. Omit for the first page; never construct one by hand. Returns: data: array of { keys, clicks, impressions, ctr, position } rowCount: rows in this page (Search Console reports no grand total) pagination: { hasMore, nextCursor? } — nextCursor is absent on the last page responseAggregationType, firstIncompleteDate (if data is incomplete) Pagination: when pagination.hasMore is true, call again with the same parameters plus cursor set to pagination.nextCursor. A cursor only continues the exact call that returned it — changing the dates, dimensions or filters invalidates it, and the call is rejected rather than silently returning rows from a different query. IMPORTANT — when you need a complete, consistent result set, raise row_limit and take it in ONE call rather than crawling. Search Console sorts rows by clicks descending and orders ties "in an arbitrary way", and that tie order is not stable between calls. Since most rows on a typical property have 0 clicks, they are nearly all tied, so a multi-page crawl can repeat some rows and miss others. A single call has no such problem: one call, one ordering. row_limit goes up to 25000. Use the cursor for browsing, or when the result genuinely exceeds one page, and treat a crawled set as approximate rather than exact. Note: Data freshness lag — recent dates (last 3+ days) may be incomplete. Check firstIncompleteDate in response.

ParameterTypeDescription
site_url requiredstringThe Search Console property URL (e.g. sc-domain:example.com or just example.com).
start_date requiredstringStart date in YYYY-MM-DD format.
end_date requiredstringEnd date in YYYY-MM-DD format. Must be >= start_date.
reason requiredstringWhy this tool call is needed
7 optional parameters
ParameterTypeDescription
dimensionsarrayGroup results by these dimensions. searchAppearance can only be combined with date.
search_typestringFilter by search type. Default: web.
dimension_filter_groupsarrayFilter rows by dimension values.
aggregate_bystringAggregation level. byPage cannot be combined with page dimension filters.
row_limitintegerRows per page. Range: 1-25000. Default: 25. When pagination.hasMore is true, follow pagination.nextCursor rather than raising this — a large page can exceed the MCP client's response limit.
cursorstringOpaque cursor from a previous response's pagination.nextCursor. Pass it back with the same other parameters to fetch the next page; do not construct or edit it. Omit it for the first page.
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-get-top-queries

google_search_console_get_top_queries Get Top Search Queries

Read-onlyOpen-world

Get top queries with clicks, impressions, CTR, and position. Automatically identifies high-opportunity queries (position 4-20, impressions >100, CTR <5%). Args: site_url (string, required): The Search Console property URL. days (int, optional): Number of days to look back. Range: [1, 90]. Default: 28. start_date / end_date (string, optional): Explicit date range (overrides days). page_filter (string, optional): Filter to queries for a specific URL (exact match). device (string, optional): Filter by device type. Valid: desktop, mobile, tablet. search_type (string, optional): web (default), image, video, news. row_limit (int, optional): Queries per page. Default: 25. cursor (string, optional): Opaque cursor from a previous response's pagination.nextCursor. Omit for the first page; never construct one by hand. Returns: data: top query rows for this page highOpportunityQueries: queries with ranking potential (position 4-20, impressions >100, CTR <5%), derived from this page only — not from the whole result set rowCount: rows in this page pagination: { hasMore, nextCursor? } — nextCursor is absent on the last page site_url, dateRange Pagination: when pagination.hasMore is true, call again with the same parameters plus cursor set to pagination.nextCursor. A cursor only continues the exact call that returned it, including the date window it resolved to — so a crawl that spans midnight on a relative range (days) is rejected rather than paging a window that has since shifted. Start again from the first page if that happens. IMPORTANT — when you need a complete, consistent result set, raise row_limit and take it in ONE call rather than crawling. Search Console sorts by clicks descending and orders ties "in an arbitrary way", and that tie order is not stable between calls; on a typical property most queries have 0 clicks and are therefore all tied, so a multi-page crawl can repeat some and miss others. Use the cursor for browsing, and treat a crawled set as approximate rather than exact.

ParameterTypeDescription
site_url requiredstringThe Search Console property URL (e.g. sc-domain:example.com or just example.com).
reason requiredstringWhy this tool call is needed
9 optional parameters
ParameterTypeDescription
daysintegerNumber of days to look back. Default: 28. Range: 1-90.
start_datestringOverride start date (YYYY-MM-DD). Takes precedence over days if both provided.
end_datestringOverride end date (YYYY-MM-DD). Takes precedence over days if both provided.
page_filterstringFilter to queries driving traffic to this page (absolute URL or relative path, e.g. "/blog").
devicestringFilter by device type.
search_typestringFilter by search type. Default: web.
row_limitintegerQueries per page. Range: 1-25000. Default: 25. When pagination.hasMore is true, follow pagination.nextCursor rather than raising this.
cursorstringOpaque cursor from a previous response's pagination.nextCursor. Pass it back with the same other parameters to fetch the next page; do not construct or edit it. Omit it for the first page.
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-compare-performance

google_search_console_compare_performance Compare Search Performance (Period Over Period)

Read-onlyOpen-world

Compare current vs previous period performance in a single call. Makes 4 parallel API calls internally and returns deltas for clicks, impressions, CTR, and position. Args: site_url (string, required): The Search Console property URL. days (int, optional): Length of each period in days. Range: [1, 90]. Default: 28. current_end_date (string, optional): Override the end date of the current period (YYYY-MM-DD). Default: today minus 3 days. search_type (string, optional): web (default), image, video, news. Returns: currentPeriod, previousPeriod: { startDate, endDate, clicks, impressions, ctr, position } delta: { clicks, clicksPct, impressions, impressionsPct, ctr, position } trend: "improving" (clicks up >10%), "declining" (clicks down >10%), or "stable" topQueries, previousTopQueries: top 50 queries for each period (may be null if sub-query failed) errors: list of sub-query failures (if any) — overall metrics are always present Periods are adjacent and non-overlapping: previousEnd + 1 day = currentStart.

ParameterTypeDescription
site_url requiredstringThe Search Console property URL (e.g. sc-domain:example.com or just example.com).
reason requiredstringWhy this tool call is needed
4 optional parameters
ParameterTypeDescription
daysintegerWindow size in days for each period. Default: 28.
current_end_datestringEnd date of the current period (YYYY-MM-DD). Default: today - 3 days (data freshness lag).
search_typestringFilter by search type. Default: web.
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-get-performance-overview

google_search_console_get_performance_overview Get Search Performance Overview

Read-onlyOpen-world

Get a complete overview of search performance in a single call: overall metrics, top queries, top pages, and daily trend. Makes 4 parallel API calls internally. Args: site_url (string, required): The Search Console property URL. days (int, optional): Number of days to look back. Range: [1, 90]. Default: 28. search_type (string, optional): web (default), image, video, news. Returns: overall: aggregate metrics { startDate, endDate, clicks, impressions, ctr, position } topQueries: top 10 queries by clicks topPages: top 10 pages by clicks byDate: daily breakdown dateRange: { startDate, endDate } errors: list of sub-query failures (if any) — partial results are returned when sub-queries fail

ParameterTypeDescription
site_url requiredstringThe Search Console property URL (e.g. sc-domain:example.com or just example.com).
reason requiredstringWhy this tool call is needed
3 optional parameters
ParameterTypeDescription
daysintegerNumber of days to look back. Default: 28.
search_typestringFilter by search type. Default: web.
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-check-auth-status

google_search_console_check_auth_status Check Google Search Console Auth Status

Read-onlyIdempotent

Troubleshoot authentication issues. Only use this when another tool fails with a permission or auth error — do NOT call proactively. Returns: authenticated status, user_id, email, and a human-readable message.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
1 optional parameter
ParameterTypeDescription
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-get-billing-status

google_search_console_get_billing_status Billing status

IdempotentOpen-world

Why a call was refused with a billing error (402) and how to get unblocked. Reports whether this organization is entitled, its subscription status, tier, trial end, credits used and left this period, the price table and a link to the billing page. With checkout_tier, the organization owner also gets a Stripe Checkout link for that plan; a member gets the owner's contact and a message to forward. Call it after any 402. While waiting for a human to pay, poll it every 10 seconds for the first minute, every 30 seconds until 5 minutes, then every 60 seconds until 15 minutes, then stop and tell the human. Once it returns entitled: true, retry the blocked call; if the retry still returns 402, wait 15 seconds and retry once. A Checkout link is a payment link: give it to the organization owner only.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
1 optional parameter
ParameterTypeDescription
checkout_tierstringOrganization owner only: also create a Stripe Checkout link for this plan. A member gets the owner's contact and a message to forward instead.
View full documentation →

ch-console-list-connections

google_search_console_list_connections List Google Search Console Connections

Read-onlyIdempotent

List the Google Search Console connections available to you — both ones you own and ones shared with you via an organization. Only Google connections with Search Console (webmasters.readonly) scope are returned. Use this to discover connection IDs for set_default / share / rename / revoke.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
View full documentation →

ch-console-set-default-connection

google_search_console_set_default_connection Set Default Google Search Console Connection

Idempotent

Set the Google Search Console connection that should be used by default for subsequent Google Search Console tool calls. The default is scoped to the calling actor (your user account, or the API key being used).

ParameterTypeDescription
connection_id requiredstringUUID of the connection to mark as the actor's default Google Search Console connection.
reason requiredstringWhy this tool call is needed
View full documentation →

ch-console-share-connection

google_search_console_share_connection Share Google Search Console Connection With Organization

Idempotent

Share an owned Google Search Console connection with all members of your organization, so teammates can use it without having to reconnect Google themselves. You must be the owner of the connection.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to share with your organization. You must be the owner.
reason requiredstringWhy this tool call is needed
View full documentation →

ch-console-unshare-connection

google_search_console_unshare_connection Unshare Google Search Console Connection From Organization

DestructiveIdempotent

Stop sharing an owned Google Search Console connection with your organization. Teammates lose access immediately. You must be the owner.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to stop sharing with your organization. You must be the owner.
reason requiredstringWhy this tool call is needed
View full documentation →

ch-console-rename-connection

google_search_console_rename_connection Rename Google Search Console Connection

Idempotent

Rename the display name of an owned Google Search Console connection. The OAuth grant and underlying account are unaffected — this only changes the human-readable label. You must be the owner.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to rename. You must be the owner.
display_name requiredstringNew human-readable name for the connection.
reason requiredstringWhy this tool call is needed
View full documentation →

ch-console-revoke-connection

google_search_console_revoke_connection Revoke Google Search Console Connection

DestructiveIdempotent

Revoke (soft-delete) an owned Google Search Console connection. Any defaults pointing to it are invalidated and shared org members lose access. The OAuth grant at Google is NOT revoked by this tool — the user must disconnect via the dashboard if they want to fully revoke at Google. You must be the owner.

ParameterTypeDescription
connection_id requiredstringUUID of the connection to revoke. You must be the owner.
reason requiredstringWhy this tool call is needed
View full documentation →

ch-console-developer-feedback

google_search_console_developer_feedback Submit Developer Feedback

IdempotentOpen-world

Submit feedback about missing tools, improvements, bugs, or workflow gaps in the Search Console MCP toolset. Not for user-facing issues (auth errors, API errors). Args: feedback_type: new_tool, improvement, bug, workflow_gap title: Short description (5-200 chars) description: What is needed and why (20-2000 chars) current_workaround (optional): How you're working around the gap priority (optional): low, medium (default), high Returns: confirmation that feedback was recorded.

ParameterTypeDescription
feedback_type requiredstringFeedback category: new_tool (request new capability), improvement (enhance existing tool), bug (report issue), workflow_gap (missing workflow)
title requiredstringConcise title summarizing the feedback
description requiredstringWhat is needed and why
reason requiredstringWhy this tool call is needed
3 optional parameters
ParameterTypeDescription
current_workaroundstringCurrent workaround, if any
prioritystringImpact level: low (nice-to-have), medium (improves workflow), high (blocking issue)
interfacestringInterface the feedback originated from: MCP (default) or CLI
View full documentation →

ch-console-ping

google_search_console_ping Ping Google Search Console MCP Server

Read-onlyIdempotent

Health check. Returns server status, version, and timestamp.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
1 optional parameter
ParameterTypeDescription
messagestringOptional message to echo back
View full documentation →

ch-console-list-sites

google_search_console_list_sites List Search Console Properties

Read-onlyOpen-world

List all Google Search Console properties (sites) the user has access to. Use this tool first to discover which properties are available before calling other tools. Results are cached for 15 minutes; pass refresh=true only when you need the latest list. Args: refresh (bool, optional): Force a fresh fetch from the API, bypassing cache. Default: false. Returns: data: every site property, with siteUrl and permissionLevel (siteOwner, siteFullUser, siteRestrictedUser, siteUnverifiedUser). cached, synced_at Not paginated: the Search Console sites endpoint takes no page size or page token and returns the whole list at once, so this single call is already the complete set — there is no cursor to follow.

ParameterTypeDescription
reason requiredstringWhy this tool call is needed
2 optional parameters
ParameterTypeDescription
refreshbooleanForce a fresh fetch from the API, bypassing cache
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-list-sitemaps

google_search_console_list_sitemaps List Search Console Sitemaps

Read-onlyOpen-world

List sitemaps submitted to Google Search Console for a property. Args: site_url (string, required): The Search Console property URL (e.g. https://example.com/ or sc-domain:example.com). refresh (bool, optional): Force a fresh fetch from the API, bypassing cache. Default: false. Returns: data: every submitted sitemap, with path, last submission date, pending/error status, and error/warning counts. site_url, cached, synced_at Not paginated: the Search Console sitemaps endpoint takes no page size or page token and returns the whole list at once, so this single call is already the complete set — there is no cursor to follow.

ParameterTypeDescription
site_url requiredstringThe Search Console property URL (e.g. sc-domain:example.com or just example.com).
reason requiredstringWhy this tool call is needed
2 optional parameters
ParameterTypeDescription
refreshbooleanForce a fresh fetch from the API, bypassing cache
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →

ch-console-inspect-url

google_search_console_inspect_url Inspect URL (Google Search Console)

Read-onlyOpen-world

Get detailed indexing and crawl status for a specific URL using the Google Search Console URL Inspection API. Args: inspection_url (string, required): Fully-qualified URL to inspect. Must be under the site_url property. site_url (string, required): The Search Console property that contains the URL (e.g. https://example.com/ or sc-domain:example.com). language_code (string, optional): IETF BCP-47 language code for translated issue messages (e.g. en-US). Returns: verdict (PASS/FAIL/NEUTRAL), coverage state, robots.txt state, indexing state, page fetch state, last crawl time, crawled as (mobile/desktop), Google canonical URL, user canonical URL, sitemap references. Note: Use google_search_console_list_sites first to discover valid site_url values.

ParameterTypeDescription
inspection_url requiredstringFully-qualified URL to inspect. Must be under the site_url property.
site_url requiredstringThe Search Console property URL that contains the inspection_url (e.g. sc-domain:example.com or just example.com).
reason requiredstringWhy this tool call is needed
2 optional parameters
ParameterTypeDescription
language_codestringIETF BCP-47 language code for translated issue messages (e.g. en-US).
connection_idstringOptional ID of a specific connection to use for this call. Omit to use the actor's default connection for this network. Call <platform>_list_connections to discover available connection IDs.
View full documentation →