Useful tools · Plumbing that pays off

The install command in its own README does not work

We went to wire Google Search Console into our assistant and the package does not exist on PyPI. Its own README repeats the broken command. Here is the half that works, the route that actually installs, and the setting almost nobody has switched on.

pipx install search-console-mcp fails. There is no package by that name on PyPI — the JSON API and the simple index both return 404, checked twice on two different days.

The repository is real. It is MIT licensed, eleven stars, last pushed 2026-05-28, and its own pyproject.toml declares name = "search-console-mcp", version 0.1.0. So it was built to be published and never was. The README repeats the same pipx install search-console-mcp line, which means the broken instruction is not a typo in somebody's walkthrough. It is wrong at the source.

There are two packages with near-miss names on PyPI — searchconsole-mcp and mcp-search-console — and neither is this tool. Installing one of those expecting the other is the kind of afternoon nobody enjoys.

The route that works is from source. Clone the repo, then pipx install ./search-console-mcp (or pip install -e .). It produces the same console script the config block expects, and nothing else in the setup changes.

The other half checks out completely

The analytics server is fine: analytics-mcp, version 0.7.0, published 2026-07-29, Apache-2.0, and it is Google's own repository rather than a third-party wrapper. That one installs exactly as written.

Why you need both, which is the part worth knowing

GA4 does not show you organic search keywords. It stores them as (not provided). The actual queries live in Search Console, a separate product with a separate API. Without a Search Console connection your assistant cannot see keywords at all — not because it is bad at looking, because the data is not there.

That single fact is load-bearing for the whole setup, and it is the reason two servers exist instead of one.

The setting that quietly zeroes your numbers

Most GA4 properties have no conversion events configured. Every page, every source and every campaign then reports a conversion rate of zero — technically accurate and completely useless. Mark form submissions, primary CTA clicks, thank-you pageviews and checkout clicks as key events before you run a single analytics prompt, or you are asking careful questions of a column of zeroes.

This costs ten minutes in the GA4 interface and needs no tooling whatsoever.

GA4 tag Installed on the live site. Ready
Search Console Property verified. Queries hidden under ~10 monthly impressions by Google's own privacy floor. Ready
Reports Site is pre-launch — expect empty for weeks. Awaiting data

Empty is the correct reading at this stage. The pipeline is real; the traffic isn't, yet.

What we did not check

Two things, stated plainly because we have not earned an opinion on either.

We did not inspect the /seo-snapshot skill bundled in that repository. And we have not seen this return real data yet — Search Console hides queries under roughly ten monthly impressions, and our own site is not launched. Expect empty charts for weeks. Empty is not the same as broken, and confusing the two is how people rip out a working install.

One caution we did apply. The walkthrough uses application default credentials with an analytics.edit scope. That writes a credential authenticating as you, indefinitely, into a well-known file, and edit access can create and modify properties and events. We run read-only on analytics by default. If a key event genuinely needs creating, that is one deliberate action, not a standing grant.

What to do

Check PyPI before you paste any install line — it takes fifteen seconds and it would have saved this one. Install the analytics server from PyPI, the Search Console one from source, and set your conversion events before you read another report, whether or not you ever connect either.

Want this running in your own practice? Let's talk.