seo-analytics-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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_compare_periodsA | Compare two consecutive Search Console periods and return the biggest movers in both directions - the 'what changed' question in one call. period_days is the length of each window; the current window ends offset_days before the freshest available data, and the comparison window is the period_days immediately before it. metric is clicks, impressions, ctr or position. For position, a DECREASE is an improvement, and the response says so. dimension is usually page or query; query rows are anonymised by Google and will not sum to totals. |
| page_reportA | Everything known about one page in a single call: its Search Console clicks and impressions trend, its top queries, its GA4 engagement, and its current index status. Use this for 'how is /pricing doing?'. GA4 and index status are included on a best-effort basis - if GA4 is not authorised or the property is unknown, the Search Console half is still returned, with a note saying what was left out. |
| ga4_list_propertiesA | List the GA4 accounts and properties this Google account can read, so a property name can be resolved to the numeric ID every other GA4 tool needs. Universal Analytics properties are not returned - they no longer exist in this API. |
| ga4_run_reportA | Run an arbitrary GA4 report (the runReport method). metrics and dimensions are GA4 API names, not UI labels: 'sessions', 'activeUsers', 'screenPageViews', 'conversions', 'totalRevenue'; 'landingPage', 'pagePath', 'sessionDefaultChannelGroup', 'country', 'date'. Not every dimension is compatible with every metric - a 400 error means the pair is not queryable together, not that the names are wrong. dimension_filter and order_by take GA4 FilterExpression and OrderBy objects as plain dicts. Dates accept YYYY-MM-DD, 'today', 'yesterday' or 'NdaysAgo'. GA4 reports in the property's own timezone, so its dates do not line up exactly with Search Console's. |
| ga4_landing_pagesA | Sessions, engagement rate, conversions and revenue by landing page - the preset that joins to Search Console. Every row gains a normalised 'path' key ('/pricing', no host, no trailing slash, no query string) which is directly comparable to the 'path' key added by gsc_search_analytics rows grouped by page. |
| gsc_list_sitesA | List the Search Console properties this Google account can read, with the permission level held on each. Call this first in any session: the exact string returned here is what every other Search Console tool needs as site_url. Domain properties look like 'sc-domain:example.com'; URL-prefix properties are full URLs with a trailing slash. |
| gsc_search_analyticsA | Query Search Console performance data: clicks, impressions, CTR, position. Dates are YYYY-MM-DD, or 'today' / 'yesterday' / 'NdaysAgo'; the absolute range actually used is echoed in summary.date_range. dimensions may include query, page, country, device, date (default ["query"]). filters are "dimension operator value", e.g. "page contains /blog/". search_type is web, image, video, news or discover. data_state "final" excludes the most recent 2-3 incomplete days; "all" is fresher but unstable. Rows carrying the 'query' dimension are anonymised by Google and will NOT sum to property totals - never compute shares or percentages from them. |
| gsc_inspect_urlA | Inspect one URL's index status in Google: coverage verdict, last crawl time, Google's chosen canonical versus the declared one, robots.txt state, mobile usability and rich-result verdicts. inspection_url must be a full URL that belongs to site_url. This is the tightest Google quota in the set (2,000 calls per day per property), so results are cached for an hour. |
| gsc_list_sitemapsA | List the sitemaps submitted for a property, with when each was last downloaded by Google and how many warnings and errors it carries. A sitemap Google has never downloaded, or one with errors, is usually the answer to 'why isn't this indexed'. |
| gsc_submit_sitemapA | Submit or re-ping a sitemap to Search Console. THIS WRITES TO THE USER'S LIVE PROPERTY. It needs the write scope, which is not granted by default, and it is a dry run unless confirm=true. Show the dry run to the user and get their explicit agreement before calling it again with confirm=true. feedpath must be the full sitemap URL, e.g. https://example.com/sitemap.xml. |
| indexnow_verify_keyA | Check that this host's IndexNow key file is correctly published: reachable, HTTP 200, served as text, and containing exactly the configured key. Every submission runs this check itself and aborts if it fails, so use this tool to diagnose a rejected submission. The key is read from configuration, never passed in. |
| indexnow_submitA | Submit URLs to IndexNow so participating search engines recrawl them. THIS ACTS ON THE LIVE WEB and cannot be undone. Called without confirm it is a DRY RUN: it validates the key file and the URL list and returns a submission_token. Show that dry run to the user, then call again with confirm=true AND the exact submission_token you were given. The token is bound to that precise URL list, so if the list changes you must dry-run again. IndexNow notifies Bing, Yandex, Naver, Seznam.cz, Yep and Amazon. Google does NOT participate - this will not speed up Google indexing. Per-endpoint HTTP status is returned verbatim, because 200, 202, 400, 403, 422 and 429 all mean different things. |
| auth_statusA | Report which profile is active, which scopes its token holds, and which Google APIs actually answer. Call this first whenever another tool returns a permission error: the response names the exact command the user should run in their terminal. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/zainsive/seo-analytics-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server