hypequery MCP server
Exposes the ClickHouse datasets and metrics you define in hypequery as bounded, read-only MCP tools
SEO analysis over the Google Search Console bulk export in BigQuery, with optional GA4 revenue joins
By Suganthan Mohanadasan (individual) TypeScript Local · stdio Data and analyticsDatabases
20 popularity score ★ 44
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs BIGQUERY_PROJECT_ID, BIGQUERY_KEY_FILE. Replace each <NAME> with your value.
git clone https://github.com/Suganthan-Mohanadasan/Suganthans-BigQuery-MCP-Server.git
cd Suganthans-BigQuery-MCP-Server
npm install
npm run buildclaude mcp add bigquery -e BIGQUERY_PROJECT_ID=<BIGQUERY_PROJECT_ID> -e BIGQUERY_KEY_FILE=<BIGQUERY_KEY_FILE> -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'{
"mcpServers": {
"bigquery": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"BIGQUERY_PROJECT_ID": "<BIGQUERY_PROJECT_ID>",
"BIGQUERY_KEY_FILE": "<BIGQUERY_KEY_FILE>"
}
}
}
}{
"mcpServers": {
"bigquery": {
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"BIGQUERY_PROJECT_ID": "<BIGQUERY_PROJECT_ID>",
"BIGQUERY_KEY_FILE": "<BIGQUERY_KEY_FILE>"
}
}
}
}{
"servers": {
"bigquery": {
"type": "stdio",
"command": "node",
"args": [
"<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"
],
"env": {
"BIGQUERY_PROJECT_ID": "<BIGQUERY_PROJECT_ID>",
"BIGQUERY_KEY_FILE": "<BIGQUERY_KEY_FILE>"
}
}
}
}[mcp_servers.bigquery]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js"]
[mcp_servers.bigquery.env]
BIGQUERY_PROJECT_ID = "<BIGQUERY_PROJECT_ID>"
BIGQUERY_KEY_FILE = "<BIGQUERY_KEY_FILE>"gemini mcp add --scope user -e BIGQUERY_PROJECT_ID=<BIGQUERY_PROJECT_ID> -e BIGQUERY_KEY_FILE=<BIGQUERY_KEY_FILE> bigquery node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js'BIGQUERY_PROJECT_ID |
Required: Google Cloud project ID; the server will not start without it. |
|---|---|
BIGQUERY_KEY_FILE |
Required: Absolute path to the service account JSON key; GOOGLE_APPLICATION_CREDENTIALS is used instead when this is unset. |
BIGQUERY_DEFAULT_DATASET |
Optional: Default dataset, such as searchconsole; the GSC tools fall back to searchconsole. |
BIGQUERY_LOCATION |
Optional: Dataset location, US by default (for example EU). |
BIGQUERY_GA4_DATASET |
Optional: GA4 export dataset (analytics_<ID>), needed only for the ga4_gsc_* tools. |
BIGQUERY_GA4_PROJECT |
Optional: Project holding the GA4 export, when it differs from the main one (not in the README). |
BIGQUERY_GA4_LOCATION |
Optional: Location of the GA4 project's datasets when it differs (not in the README). |
GOOGLE_APPLICATION_CREDENTIALS |
Optional: Standard Google credentials path, used when BIGQUERY_KEY_FILE is unset. |
An independent server, written by Suganthan Mohanadasan, that runs SQL against the Search Console bulk export a site owner has set up in their own Google Cloud project. Most of its 33 tools are ready-made SEO analyses, so the assistant does not have to write SQL for them. They find quick-win keywords, pages losing clicks, keyword cannibalisation, CTR shortfalls against position benchmarks, new queries, search intent, device ranking splits and the share of traffic behind anonymised queries. Each result comes back as JSON with a provenance block, plus instructions telling the assistant to stick to the returned numbers and to present them as a dashboard-style artifact.
Two tools use BigQuery ML. gsc_forecast trains an ARIMA_PLUS model to project clicks 30 days ahead by default (anything from 7 to 365 days). gsc_anomalies uses the same kind of model to flag unusual days. Six ga4_gsc_* tools join the export with a GA4 BigQuery export to tie queries and pages to conversions and revenue. Six general tools (query, query_cost_estimate, list_datasets, list_tables, describe_table, sample_rows) work on any dataset in the project.
The README describes the server as read-only, but the code shows one exception. gsc_forecast and gsc_anomalies run CREATE OR REPLACE MODEL and write a model named clicks_forecast_model into the Search Console dataset, which is why the README asks for the BigQuery Data Editor role (src/tools/gsc-forecast.ts, src/tools/gsc-anomalies.ts). The code also reads two settings the README does not list, BIGQUERY_GA4_PROJECT and BIGQUERY_GA4_LOCATION, for a GA4 export that lives in a different project or region (src/client.ts).
| Runtime | Node.js 18+ |
|---|
Node.js 18 or later, plus git and npm to clone and build it, since it is not published to npm. You need a Google Cloud project with the Search Console bulk export to BigQuery already running; the export only collects data from the day it is switched on. You also need a service account key with the BigQuery Data Editor, Data Viewer and Job User roles. BigQuery queries are billed to that project. The ga4_gsc_* tools also need the GA4 BigQuery export in place.
Covers only the BigQuery bulk export; it does not call the Search Console API, and the export holds no data from before it was enabled. The query tool returns 100 rows by default, up to 10,000 with max_rows, and appends a LIMIT when the SQL has none. Normal queries are capped at 10 GB billed and ML model training at 50 GB (src/tools/query.ts). Statements containing INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, MERGE, EXPORT, CALL or EXECUTE are refused, as are multi-statement queries. The read-only claim does not cover the forecast and anomaly tools, which overwrite a model in your dataset. The changelog notes that before v4.1.1 the gsc_* tools reported average positions one rank too good.
Suits SEO practitioners and site owners who already run, or are willing to set up, the Search Console bulk export in their own Google Cloud project and want unsampled analysis, anonymised-query counts, forecasts or GA4 revenue attribution. Expect BigQuery costs and a service account setup. If you only need quick lookups without BigQuery, the author's README points to a separate Search Console API server of theirs, Suganthans-GSC-MCP. If you need general BigQuery access with write tools, look for a general-purpose BigQuery server, since this one blocks data changes and is built around the Search Console export schema.
queryquery_cost_estimatelist_datasetslist_tablesdescribe_tablesample_rowsgsc_quick_winsgsc_ctr_opportunitiesgsc_content_gapsgsc_site_snapshotgsc_content_decaygsc_cannibalisationgsc_traffic_dropsgsc_topic_clustergsc_ctr_benchmarkgsc_alertsgsc_content_recommendationsgsc_reportgsc_anonymous_trafficgsc_seasonalgsc_device_splitgsc_intent_breakdowngsc_ngramsgsc_new_keywordsgsc_forecastgsc_anomaliesgsc_genai_conversation_queriesga4_gsc_query_revenuega4_gsc_content_roiga4_gsc_position_valuega4_gsc_snippet_mismatchga4_gsc_branded_performancega4_gsc_page_performance