89b13c75c468c104dd7adada0106dd390914df2fsource_git · suganthan-mohanadasan/suganthans-bigquery-mcp-server · current release
Observed 2026-08-25T08:44:41.541Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.
{
"tools": {
"listChanged": true
}
}| Tool | Category | Annotations | Risk |
|---|---|---|---|
describe_tableGet detailed schema information for a specific BigQuery table including column names, types, descriptions, row count, size, partitioning, and clustering.Input schema{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "Dataset name"
},
"table": {
"type": "string",
"description": "Table name"
},
"project_id": {
"type": "string",
"description": "Override the default project ID"
}
},
"required": [
"dataset",
"table"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
ga4_gsc_branded_performanceCompare branded vs non-branded organic traffic with engagement and conversion overlay from GA4. Shows how each traffic type performs across clicks, CTR, engagement rate, conversions, and revenue. Requires GA4 BigQuery export. IMPORTANT: GA4 and GSC data are joined on normalised landing page URL. Join rates vary by site (typically 70-90%). Numbers may not match GA4 or GSC dashboards exactly due to URL normalisation, timezone differences (GSC uses Pacific Time, GA4 uses property timezone), and sampling. Report the join rate when relevant. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"brand_terms": {
"type": "string",
"description": "Comma-separated brand terms, e.g. 'suganthan,snippet digital,keyword insights'"
},
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"gsc_dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
},
"ga4_dataset": {
"type": "string",
"description": "BigQuery dataset containing GA4 data"
}
},
"required": [
"brand_terms"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
ga4_gsc_content_roiFind pages that rank well but don't convert (fix the page, not the SEO) and pages that convert brilliantly but have low rankings (invest in SEO, the payoff is proven). Diagnoses each page. Requires GA4 BigQuery export. IMPORTANT: GA4 and GSC data are joined on normalised landing page URL. Join rates vary by site (typically 70-90%). Numbers may not match GA4 or GSC dashboards exactly due to URL normalisation, timezone differences (GSC uses Pacific Time, GA4 uses property timezone), and sampling. Report the join rate when relevant. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_clicks": {
"type": "number",
"default": 20,
"description": "Minimum GSC clicks to include"
},
"max_rows": {
"type": "number",
"default": 50,
"description": "Maximum rows to return"
},
"gsc_dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
},
"ga4_dataset": {
"type": "string",
"description": "BigQuery dataset containing GA4 data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
ga4_gsc_page_performanceLanding pages with BOTH search performance (clicks, impressions, position from GSC) AND engagement data (sessions, engagement rate, conversions from GA4) side by side. Requires GA4 BigQuery export. IMPORTANT: GA4 and GSC data are joined on normalised landing page URL. Join rates vary by site (typically 70-90%). Numbers may not match GA4 or GSC dashboards exactly due to URL normalisation, timezone differences (GSC uses Pacific Time, GA4 uses property timezone), and sampling. Report the join rate when relevant. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_clicks": {
"type": "number",
"default": 10,
"description": "Minimum GSC clicks to include a page"
},
"max_rows": {
"type": "number",
"default": 50,
"description": "Maximum rows to return"
},
"gsc_dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
},
"ga4_dataset": {
"type": "string",
"description": "BigQuery dataset containing GA4 data (e.g. analytics_123456789)"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
ga4_gsc_position_valueWhat is each ranking position worth in revenue and conversions for YOUR site? Shows conversion rate and revenue per click by position bucket (1, 2-3, 4-5, 6-10, 11-20, 20+). Uses 90 days by default for statistical significance. Requires GA4 BigQuery export. IMPORTANT: GA4 and GSC data are joined on normalised landing page URL. Join rates vary by site (typically 70-90%). Numbers may not match GA4 or GSC dashboards exactly due to URL normalisation, timezone differences (GSC uses Pacific Time, GA4 uses property timezone), and sampling. Report the join rate when relevant. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 90,
"description": "Number of days to analyse (longer = more reliable)"
},
"max_rows": {
"type": "number",
"default": 20,
"description": "Maximum rows to return"
},
"gsc_dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
},
"ga4_dataset": {
"type": "string",
"description": "BigQuery dataset containing GA4 data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
ga4_gsc_query_revenueWhich search queries actually drive revenue and conversions? Uses proportional attribution: if a page gets clicks from 3 queries, revenue is split by click share. The 'revenue per keyword' metric SEOs have wanted for years. Requires GA4 BigQuery export. IMPORTANT: GA4 and GSC data are joined on normalised landing page URL. Join rates vary by site (typically 70-90%). Numbers may not match GA4 or GSC dashboards exactly due to URL normalisation, timezone differences (GSC uses Pacific Time, GA4 uses property timezone), and sampling. Report the join rate when relevant. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_clicks": {
"type": "number",
"default": 5,
"description": "Minimum clicks per query"
},
"max_rows": {
"type": "number",
"default": 50,
"description": "Maximum rows to return"
},
"gsc_dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
},
"ga4_dataset": {
"type": "string",
"description": "BigQuery dataset containing GA4 data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
ga4_gsc_snippet_mismatchFind pages where SERP snippet performance doesn't match on-site engagement. High CTR + low engagement = misleading title/description. Low CTR + high engagement = great content with a bad snippet. Both are fixable. Requires GA4 BigQuery export. IMPORTANT: GA4 and GSC data are joined on normalised landing page URL. Join rates vary by site (typically 70-90%). Numbers may not match GA4 or GSC dashboards exactly due to URL normalisation, timezone differences (GSC uses Pacific Time, GA4 uses property timezone), and sampling. Report the join rate when relevant. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_clicks": {
"type": "number",
"default": 20,
"description": "Minimum GSC clicks to include"
},
"max_rows": {
"type": "number",
"default": 50,
"description": "Maximum rows to return"
},
"gsc_dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
},
"ga4_dataset": {
"type": "string",
"description": "BigQuery dataset containing GA4 data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_alertsCheck for SEO alerts: position drops, CTR collapses, click losses, and pages that disappeared from search results. Returns severity-rated alerts so you know what needs attention first. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 7,
"description": "Number of days per period to compare"
},
"position_drop_threshold": {
"type": "number",
"default": 20,
"description": "Alert if position drops more than this many spots"
},
"ctr_drop_pct": {
"type": "number",
"default": 50,
"description": "Alert if CTR drops more than this percentage"
},
"click_drop_pct": {
"type": "number",
"default": 30,
"description": "Alert if clicks drop more than this percentage"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_anomaliesDetect traffic anomalies using BigQuery ML. Unlike threshold-based alerts, this understands seasonality and weekly patterns, so it only flags genuinely unexpected traffic changes. Requires sufficient historical data (ideally 6+ months). IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"anomaly_threshold": {
"type": "number",
"default": 0.95,
"description": "Anomaly probability threshold (0.80 to 0.99, higher = fewer but more significant anomalies)"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_anonymous_trafficAnalyse anonymous (hidden) query traffic that the GSC API cannot show. Reveals what percentage of your clicks come from queries Google redacts, and which pages get the most hidden traffic. Only possible with BigQuery bulk export. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_cannibalisationFind keywords where multiple pages from your site compete against each other. Shows which pages rank for the same query and their respective positions. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_impressions": {
"type": "number",
"default": 50,
"description": "Minimum combined impressions for a query"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_content_decayFind pages with consistent traffic decline over three consecutive months from GSC bulk export data. One bad month is noise; three is a problem. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_content_gapsFind topics you should create content for. Returns queries where you get impressions but rank beyond position 20, meaning there is search demand but no real content targeting it. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 90,
"description": "Number of days to analyse (longer periods capture more gaps)"
},
"min_impressions": {
"type": "number",
"default": 50,
"description": "Minimum impressions threshold"
},
"min_position": {
"type": "number",
"default": 20,
"description": "Minimum position (queries ranking worse than this)"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_content_recommendationsGet actionable content recommendations by cross-referencing quick wins, content gaps, and cannibalisation data. Returns prioritised actions: pages to update, content to create, and pages to consolidate. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"max_recommendations": {
"type": "number",
"default": 10,
"description": "Maximum number of recommendations"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_ctr_benchmarkCompare your actual CTR per page against industry benchmarks by position. Flags pages significantly underperforming for their ranking position with verdicts. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_impressions": {
"type": "number",
"default": 200,
"description": "Minimum impressions threshold"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_ctr_opportunitiesFind pages with high impressions but CTR significantly below the expected benchmark for their ranking position. These are title and meta description optimisation candidates. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_impressions": {
"type": "number",
"default": 500,
"description": "Minimum impressions threshold"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_device_splitFind queries where mobile and desktop rank different pages from your site. This device cannibalisation is invisible in the GSC UI and impossible to detect via the API's 3-dimension limit. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_clicks": {
"type": "number",
"default": 5,
"description": "Minimum clicks threshold"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_forecastForecast organic traffic using BigQuery ML ARIMA_PLUS. Trains a time-series model on your historical click data and projects future clicks with confidence intervals. Requires sufficient historical data (ideally 6+ months). This is only possible with BigQuery ML. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"horizon": {
"type": "number",
"default": 30,
"description": "Number of days to forecast (default 30, max 365)"
},
"confidence_level": {
"type": "number",
"default": 0.95,
"description": "Confidence level for prediction intervals (0.80 to 0.99)"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_genai_conversation_queriesSurface AI-conversation exhaust hiding in your GSC query data: bare replies to Google's AI ('yes', 'go on'), 'what about X' pivot follow-ups, conversational questions, AI-visibility tracker probes, and full agent prompts logged as queries. Google counts every AI Mode follow-up as a new query, so these fragments carry real impressions, positions and clicks. Runs on the bulk export, so no API serving limits, plus the anonymised split: how many impressions carry no query string at all, which is where most of the conversation iceberg sits. Seven classified buckets with landing pages and a monthly artefact timeline. Treat probe and harness buckets as machine traffic, not demand. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 365,
"description": "Days to analyse, anchored to the export's latest data date (clamped to available retention)"
},
"min_impressions": {
"type": "number",
"default": 1,
"description": "Minimum impressions for a query to be listed (single-impression rows are evidence, not noise)"
},
"max_rows_per_bucket": {
"type": "number",
"default": 50,
"description": "Maximum rows returned per bucket; totals always cover everything"
},
"include_timeline": {
"type": "boolean",
"default": true,
"description": "Include the monthly artefact timeline over full retention (one extra query)"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_intent_breakdownClassify all your ranking queries by search intent (informational, transactional, commercial, navigational) using regex pattern matching at scale. Shows clicks, impressions, and CTR by intent category. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_new_keywordsDiscover queries that appeared in your recent data but were not present in the baseline period. Useful for spotting new ranking opportunities, trending topics, or the impact of recently published content. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"recent_days": {
"type": "number",
"default": 7,
"description": "Number of recent days to check"
},
"baseline_days": {
"type": "number",
"default": 60,
"description": "Number of days for the baseline comparison period"
},
"min_impressions": {
"type": "number",
"default": 10,
"description": "Minimum impressions in recent period"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_ngramsExtract the most common meaningful terms across your entire query set, ranked by clicks. A lightweight alternative to keyword clustering that reveals emerging topics and content themes. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_query_count": {
"type": "number",
"default": 5,
"description": "Minimum number of queries a term must appear in"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_quick_winsFind keywords from GSC bulk export data at positions 4 to 15 with high impressions. These are striking distance keywords that could be pushed to page one. Sorted by traffic opportunity. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"min_impressions": {
"type": "number",
"default": 100,
"description": "Minimum impressions threshold"
},
"max_position": {
"type": "number",
"default": 15,
"description": "Maximum position to include"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_reportGenerate a comprehensive markdown performance report. Covers site snapshot, alerts, quick wins, traffic drops, content decay, and recommendations. Returns the full report as markdown. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"include_sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sections: snapshot, alerts, quick_wins, traffic_drops, content_decay, recommendations"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_seasonalYear-over-year seasonal traffic analysis. Shows monthly clicks, impressions, CTR, and position with YoY comparison. Requires 12+ months of BigQuery data. Impossible with the 16-month rolling GSC API. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_site_snapshotGet a quick overview of how the site is performing. Returns total clicks, impressions, CTR, position, unique pages and queries with a comparison to the prior period. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days per period"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_topic_clusterSee how a group of pages performs as a whole. Aggregates clicks, impressions, CTR, and position for all pages matching a URL path pattern, plus top pages and queries. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"url_pattern": {
"type": "string",
"description": "URL path pattern to match (e.g. /blog/seo)"
},
"days": {
"type": "number",
"default": 28,
"description": "Number of days to analyse"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"required": [
"url_pattern"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
gsc_traffic_dropsFind pages that lost the most traffic recently. Compares current period vs prior period and diagnoses whether each drop is a ranking loss, CTR collapse, or demand decline. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing. PRESENTATION: Always present these results as a rich, interactive visualization using artifacts. Use summary cards for key metrics, colour-coded indicators for severity or change direction (green for positive, red for negative), bar charts or sparklines for comparisons, and tabbed sections to organise different categories of results. Make the output visually scannable and dashboard-like rather than plain text or raw tables.Input schema{
"type": "object",
"properties": {
"days": {
"type": "number",
"default": 28,
"description": "Number of days per comparison period"
},
"dataset": {
"type": "string",
"description": "BigQuery dataset containing GSC data"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
list_datasetsList all datasets in the BigQuery project. Use this first to discover what data is available.Input schema{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "Override the default project ID"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
list_tablesList all tables in a BigQuery dataset with their schemas. Uses INFORMATION_SCHEMA for efficiency. Use this to understand what tables and columns are available before writing queries.Input schema{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "Dataset name to list tables from"
},
"project_id": {
"type": "string",
"description": "Override the default project ID"
}
},
"required": [
"dataset"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
queryRun a SQL query against BigQuery and return results. Only SELECT queries are allowed. A LIMIT clause is automatically added if missing. Claude should use list_datasets, list_tables, and describe_table first to understand the schema before writing queries. IMPORTANT: Base your analysis ONLY on the data returned. Report exact numbers from the results. Do not speculate about causes (e.g. algorithm updates, competitor actions) unless the data explicitly supports it. If the data does not contain enough information to answer a question, say so clearly rather than guessing.Input schema{
"type": "object",
"properties": {
"sql": {
"type": "string",
"description": "The SQL query to execute. Only SELECT statements allowed."
},
"max_rows": {
"type": "number",
"default": 100,
"description": "Maximum rows to return (default 100, max 10000)"
},
"project_id": {
"type": "string",
"description": "Override the default project ID"
}
},
"required": [
"sql"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
query_cost_estimateDry-run a SQL query to see how many bytes it would scan without actually executing it. Use this before running expensive queries to check cost.Input schema{
"type": "object",
"properties": {
"sql": {
"type": "string",
"description": "The SQL query to estimate cost for"
},
"project_id": {
"type": "string",
"description": "Override the default project ID"
}
},
"required": [
"sql"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |
sample_rowsPreview sample rows from a table without writing SQL. Useful for quickly understanding what data looks like. Limited to 1GB bytes billed.Input schema{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "Dataset name"
},
"table": {
"type": "string",
"description": "Table name"
},
"limit": {
"type": "number",
"default": 10,
"description": "Number of rows to return (default 10, max 100)"
},
"project_id": {
"type": "string",
"description": "Override the default project ID"
}
},
"required": [
"dataset",
"table"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — · — | — |