Home / AI Development & Coding / I Built My Own MCP Server So My AI Can Read GA4 and Search Console
AI Development & Coding #1025 9 min read 16 views

I Built My Own MCP Server So My AI Can Read GA4 and Search Console

Tired of pasting GA4 and Search Console screenshots into a chat, I built Hexagon, an open source MCP server that lets my AI read the data itself. Here is why I built it, how to set it up, and what broke along the way.

share

Every time I wanted an AI to look at my GA4 or Search Console numbers, I was the middleman. I exported a report, took a screenshot, pasted it into a chat, and then explained what the screenshot was because the AI could not click anything. So I built an MCP server that lets the AI check the data itself, and it is open source if you want it.

I run six content sites, and I needed help deciphering what GA4 and Search Console were telling me across all of them. A screenshot loses context the second you crop it, and it only shows the slice you happened to pick. I had already hit this kind of wall once when I fed my own posts to an AI by hand, because my NotebookLM test stopped at exactly 100 sources and the cap was the first real surprise. Feeding an AI your own data manually does not scale, and in my setup I was the part that did not scale.

This started as my problem first. I named the project Hexagon, and it lives on GitHub at smallware-co/hexagon-mcp. Four of its data sources are tested and working today: Search Console, GA4, AdSense and Keyword Planner. The two Reddit tools are in the code but I have not tested them, so they come later as an update.

What an MCP server actually changes for your site data

The Model Context Protocol is the standard that lets an AI app call tools outside the chat window. An MCP server is the small program that exposes those tools. With a Claude Desktop MCP setup, Claude launches the server on my own machine, and when I ask a question about traffic, Claude calls the right tool, gets rows back, and answers from them.

The practical difference is what the AI is looking at. A screenshot is one slice I chose, usually the slice I already suspected mattered. A tool call is the data I asked for, with the filters I asked for, and with Hexagon it can cover every property on my account in a single call. That is the whole reason I wanted Claude MCP tools pointed at my own numbers and not at my clipboard.

Why I built my own MCP server instead of using one off the shelf

There are plenty of MCP servers out there, and when I went looking I found many of them. Some shipped with 21 to 44 tools, which is fine for a general purpose server but not what I wanted. I use six sources every day, and I did not want to hand an AI forty tools to choose from. I built exactly what I need for my workflow, nothing more, and I built it with Claude, which is also the client I use it from.

I am not putting those other servers down. I am more interested in MCPs now than I was before, and I think they make a real difference in a workflow, not just for writing. A custom MCP server made sense for me because the sources I care about were specific. I dropped Google Trends because there is no official API for it, and I named the project Hexagon because it started as six sides and six tools.

Meet Hexagon, the open source MCP server

I just wanted it for me. But if it is going to be documented and sitting on GitHub, then why not share it. Here is what each tool does:

  • gsc_query pulls clicks, impressions, CTR and position from Search Console by query, page, country or device, for one property or all of them.
  • ga4_report runs any GA4 dimensions and metrics, for one property or all of them, grouped per property.
  • adsense_report returns earnings, page views, impressions, clicks and CTR from AdSense.
  • keyword_planner_ideas returns average monthly searches, competition and bid ranges for seed keywords.
  • reddit_trends and reddit_demand read rising posts and “what should I buy” posts from subreddits you pick. These are the untested ones.

Hexagon is bring your own keys. You create your own Google Cloud project and OAuth client, your credentials live in a file on your own computer, and there is no Hexagon server, no account and no telemetry. It only runs read queries. The code is MIT licensed and small on purpose, so read it before you run it, and the privacy policy and the Hexagon page cover the rest. I would rather you use it than rebuild it, but if you want to build your own, the MCP server GitHub repo is a working example of one.

MCP server setup: the steps we actually took

These steps are as of October 2026. Google changed the Ads access process on me while I was in the middle of it, so check the screens you see against what I describe here. I want future versions of Hexagon to make this setup easier, and writing down what I did is the first step toward that.

The base install is short. Clone the repository, run npm install, create a Google Cloud project, and enable the APIs you want: Search Console, Analytics Data, AdSense Management and, if you want Keyword Planner, Google Ads. Create an OAuth client of type Desktop app, copy .env.example to .env, and add your client ID and secret. Run npm run auth:google, approve access in your browser, and paste the refresh token it prints into .env. Then add Hexagon to your Claude Desktop config under mcpServers, pointing at src/index.js, and restart Claude Desktop. Each tool only switches on if you add its credentials, so you can install this MCP server for Search Console and GA4 first and skip the rest.

Keyword Planner is where it got hard. The Google Ads API has access levels, and mine started at Explorer. Every Keyword Planner call failed with “This method is not allowed for use with explorer access,” and the fix was Basic access. To apply for Basic, my OAuth app needed brand verification, which meant a branded app name, a support email, a home page, a privacy policy, terms of service and an authorized domain. That is why Hexagon has its own pages on engineeredai.net.

Verification failed the first time with “Your logo does not uniquely identify your brand and identity.” The logo I had made was a generic hexagon. I switched to the Smallware Co. logo, which matches the brand on the pages, and verification passed. After I published the branding, my Basic access application went under review and was approved.

One more snag was my account. My old Google Ads account was canceled, and the API refused it as not enabled or deactivated. Pointing the customer ID in .env at my manager account fixed it.

Using the MCP server: ask the question instead of sending a screenshot

A real MCP server example beats a definition, so here is what Hexagon returned when I asked for queries across my properties over the last 30 days. For EngineeredAI, “n8n playwright” had 23 impressions, 1 click and an average position of 12.7, and “paywall remover” had 14 impressions, 2 clicks and a position of 21.9. For HobbyEngineered, “1660 dlss” had 54 impressions, 3 clicks and a position of 5.8. The numbers are small, and I am showing them as they came back. What matters is that one question returned all six properties, which a screenshot could never do.

Testing it also found a bug. Keyword Planner returned competition as the number 4 instead of HIGH, and I fixed it by mapping the numbers to LOW, MEDIUM and HIGH. The data was right and the label was wrong, which is the least glamorous kind of catch and the most useful.

The keyword research for this post ran through Hexagon. Keyword Planner reports 60,500 average monthly searches in the US for “mcp server,” and I pulled that along with the related terms I used here without leaving the chat. I have said before that AI is not an SEO shortcut, and that you have to give it direction and real data to work with. For AI for SEO work, this is one way to do that: AI keyword research, Search Console numbers and analytics in the same conversation, not three tabs and a stack of exports. I am not claiming it replaces a paid SEO analytics tool, because it reads my own data and does nothing else. For a content creator doing SEO, though, that is what you need.

Why QA people should be building MCP servers too

It is not a secret that I am a QA, so how come all the developers get to have the fun. An MCP server is an interface with inputs, outputs and failure modes, which makes MCP testing a QA problem from day one. The Explorer block was an access problem, the logo rejection was a verification problem, and the competition bug was an output problem. Each one showed up by checking what actually came back instead of what should have.

I wrote before about how PM and QA thinking shaped my multi agent local AI system, where the rule was that gates are cheaper than cleanup and nothing moves forward on an assumption. The same habit applies here. I am thinking about a QA MCP server for the future, and AI testing tools are an obvious place to look. That is a later project.

What’s next for my MCP server setup

Right now I am looking at the MCPs that are out there to use, review and possibly add to my workflow. For QA, if what is out there clashes with my QA experience or is too corporate, I will build my own. The Reddit tools come as an update once I test them.

If you are trying to work out where something like this fits in your own day to day, start with the AI workflow I settled on after two years of breaking it, where the line is that AI drafts and humans decide.

Share this
Jaren Cudilla
Jaren Cudilla
// chaos engineer · anti-hype practitioner

A QA engineer and the builder of Hexagon, an open source MCP server that connects Claude to Search Console, GA4, AdSense and Keyword Planner. He runs six content sites and built it to stop pasting screenshots into AI chats. He writes about AI tools from the practitioner side, including what broke along the way.

// stay in the loop
Get EngineeredAI posts in your inbox
Workflow experiments, tool breakdowns, field notes. No hype. Subscribe free.
subscribe →
// Leave a Comment

What is I Built My Own MCP Server So My AI Can Read GA4 and Search Console?

Every time I wanted an AI to look at my GA4 or Search Console numbers, I was the middleman.