io.scalably/gsc-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GSC_LOG_LEVEL | No | INFO (default) or DEBUG | INFO |
| GSC_WEBMASTERS_BASE | No | Override the Google API base URL for webmasters (used by tests; leave unset in normal use) | |
| GSC_TEST_ACCESS_TOKEN | No | Test-suite only: a literal bearer token that bypasses the service account. Never set it in normal use | |
| GSC_RETRY_BASE_SECONDS | No | Base delay in seconds for the retry backoff on transient API errors (default 1) | 1 |
| GSC_SEARCHCONSOLE_BASE | No | Override the Google API base URL for search console (used by tests; leave unset in normal use) | |
| GOOGLE_APPLICATION_CREDENTIALS | Yes | Path to a Google service-account JSON file with the Search Console read-only scope; share each property with the service account email |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| gsc_list_sitesA | List every verified Search Console property accessible to this service account. Returns: {"sites": [{siteUrl, permissionLevel}, ...], "count": N}. permissionLevel: siteOwner | siteFullUser | siteRestrictedUser | siteUnverifiedUser. Call this first. URL Inspection requires siteFullUser or siteOwner; restricted users cannot inspect. |
| gsc_query_search_analyticsA | Query Search Console traffic data - clicks, impressions, CTR, position. THE workhorse tool. Supports all six dimensions (incl. HOUR, April 2025), all six search types, full filter compose, pagination, and auto-pagination. Args:
site_url: "https://example.com/" (URL-prefix) or "sc-domain:example.com" (domain).
start_date / end_date: YYYY-MM-DD (Pacific Time). 16-month retention hard cap.
dimensions: list of {date, query, page, country, device, searchAppearance, HOUR}.
HOUR requires data_state='hourly_all'. searchAppearance cannot be combined with
other dimensions in one query - query it alone and join client-side.
search_type: web (default) | image | video | news | discover | googleNews.
filters: flat list [{dimension, operator, expression}]. Operators:
equals, contains, notEquals, notContains, includingRegex, excludingRegex.
filter_groups: advanced - pass raw dimensionFilterGroups if you need OR logic.
Mutually exclusive with Response: {rows, row_count, response_aggregation_type, first_incomplete_date?, first_incomplete_hour?, metadata}. Use first_incomplete_date to distinguish 'data still cooking' from 'data is final' when data_state != 'final'. Gotchas:
|
| gsc_list_sitemapsA | List sitemaps on a site - or fetch one sitemap by feedpath. Args: site_url: the Search Console property. sitemap_index: optional - if set, list only the children of a sitemap-index URL (e.g. "https://example.com/sitemap_index.xml"). feedpath: optional - if set, returns the single sitemap entry at that URL instead of the list (absorbs the prior get_sitemap tool). Returns: {"sitemaps": [...], "count": N} or {"sitemap": {...}} if feedpath given. Each entry: {path, lastSubmitted, lastDownloaded, isPending, isSitemapsIndex, type, warnings, errors, contents}. |
| gsc_inspect_urlA | Inspect a URL in the Google index. Flattened response. Checks index status, coverage state, canonical URLs, crawl info, AMP status, and rich results. Does NOT trigger a live crawl - checks Google's current index snapshot only. Args: inspection_url: fully-qualified URL to inspect (must be under the property). site_url: the Search Console property - "https://example.com/" or "sc-domain:example.com". language_code: IETF BCP-47, default "en-US". Quota: 2,000 requests/day/site + 600 requests/minute/site. Requires the SA to be a Full user on the property (Restricted users get 403 here). Returns a flat dict with top-level verdict, coverage_state, canonical info,
plus optional |
| gsc_batch_inspect_urlsA | Inspect many URLs under a single Search Console property. Rate-limited. Respects Google's 600 QPM / 2,000 QPD per-site limits. Default pace of 8 QPS stays well under 600/minute with headroom. For large jobs (>2000 URLs), split across days or across multiple verified properties (e.g. per-subdomain). Args: urls: list of fully-qualified URLs under site_url. No dedup. site_url: the Search Console property. language_code: BCP-47, default "en-US". requests_per_second: pace. Max ~10 (600 QPM). Caller can lower on 429 pressure. continue_on_error: if True, collect per-URL errors instead of aborting. Returns: { "results": [{"url": str, "inspection": {...flattened...}} | {"url": str, "error": str}], "count": total, "errors": N, "skipped": 0 } Quota warning: This does NOT replace the Search Analytics API for bulk query analysis. If the intent is "which pages have most traffic", use gsc_query_search_analytics instead - 40,000 QPM per project vs 600/site here. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |