stats.training

How to add your Garmin connector to Gemini.

Gemini reads your training data perfectly well. It just doesn't do it from the chat box, which is where everyone looks first. There are two doors in: the Gemini CLI on a computer, and Gemini Spark on your phone.

The short version

On a computer: add your private stats.training link to ~/.gemini/settings.json under mcpServers, using the httpUrl key. Restart the Gemini CLI.

On your phone: if you have Google AI Pro or Ultra, open gemini.google.com → Settings & help → Connected Apps, add the same link under Custom apps for Spark, then call it with @ in a Spark task.

First: which Gemini are you using?

Gemini is four products wearing one name, and only some of them accept a custom connector. This is the single thing worth checking before you spend any time on setup.

Gemini CLI Yes. Free with a personal Google account. The fastest route, and the one to use on a laptop or desktop.
Gemini Spark Yes, with Google AI Pro or Ultra. The only route that reaches the Gemini mobile app.
Gemini app chat Not yet. Ordinary Gemini chat on web or mobile has no setting for adding your own connector.
Gemini Enterprise Yes, but an admin adds it for the whole team under Manage team → Connected apps.

If you have been hunting through Gemini's settings for a connector screen and finding only Google's own apps, that is why. Google has shipped custom MCP support to the CLI, to Spark, and to Enterprise, and has not yet brought it to the standard chat interface.

Route one: the Gemini CLI

This is a terminal tool, so it suits you if a command prompt holds no fear. Setup is one file and about two minutes.

  1. Copy your private MCP URL Open your stats.training account, find Your private link, and click Copy. It looks like https://stats.training/mcp/…. The random part at the end is the credential, so treat the whole URL like a password.
  2. Install the Gemini CLI You need Node.js 20 or newer, then npm install -g @google/gemini-cli. Run gemini once and sign in with your Google account. A personal account costs nothing to use.
  3. Add the server to your settings file Open ~/.gemini/settings.json, creating it if it isn't there, and add an mcpServers entry with your link. The full file is below.
{ "mcpServers": { "garmin": { "httpUrl": "https://stats.training/mcp/YOUR-SECRET" } } }

Replace the URL with your own private link, token included. If the file already has other settings, add mcpServers alongside them rather than replacing the file.

Use httpUrl, not url or command. The Gemini CLI picks its transport from the key name, and httpUrl is the one that means streamable HTTP. That is what stats.training speaks. url selects the older SSE transport and will fail to connect.
  1. Restart and check it registered Quit the CLI and start it again. Type /mcp to list connected servers. You should see garmin along with its tools.
  2. Ask something that needs your data Try: "Using my Garmin data, compare my sleep, HRV and training load over the last seven days. Should I do a hard session today?" Gemini will call the connector and answer from your actual numbers.

What each key does

garmin
The server's name, and yours to choose. It's what appears in /mcp and what you can refer to in a prompt. Use strava instead if that is the source on your account.
httpUrl
Your full private link, ending in the token. This key selects streamable HTTP transport, which is what stats.training serves.
headers
Not needed. Your key already sits inside the URL, so there is no Authorization header to set and no OAuth to configure.
timeout
Optional, in milliseconds. Leave it out to start. If a long history request ever times out, add "timeout": 30000.

Route two: Gemini Spark, including your phone

Spark is Google's agent layer inside the Gemini app, and it is the only part of the consumer app that takes a custom connector. It matters most because of where it runs: you add the link once in a desktop browser, and it then works in Spark in the Gemini mobile app.

Check you qualify before starting. Google gates this fairly tightly.

Subscription
Google AI Pro (currently $19.99/month) or Ultra. Spark access comes with the plan, and custom apps come with Spark.
Account type
A personal Google account. Work and school accounts cannot add custom apps for Spark.
Location and age
18 or over, and in the US.
Keep Activity
Must be turned on in your Gemini Apps settings, or the custom app option stays unavailable.
  1. Open Connected Apps on a computer Go to gemini.google.com in a desktop browser. Open Settings & help, then Connected Apps. Custom apps can only be added here, not from the mobile app.
  2. Add your link under Custom apps for Spark Find the Custom apps for Spark section, click the field, and paste your full private stats.training URL. Click Next.
  3. Skip the credentials if you are asked If Gemini offers Advanced features for servers without Dynamic Client Registration, you can leave it alone. Your token travels in the URL, so there is nothing separate to supply. Then follow the remaining prompts.
  4. Use it in a Spark task, on any device Open Spark on your phone or on the web, type @, and pick your connector from the list. From then on it answers from your live training data.
Custom apps work inside Spark, not in ordinary chat. If you ask a normal Gemini conversation about your HRV, it will answer from general knowledge and never touch your data. Start a Spark task and call the connector with @.

If it does not work

There is no connector setting in the Gemini app

Ordinary Gemini chat has no custom connector option, so there is nothing to find. Use the Gemini CLI on a computer, or Gemini Spark if you have Google AI Pro or Ultra. If you have Pro and still see no Custom apps for Spark section, check that you are on a personal account rather than a work one, and that Keep Activity is on.

The CLI shows no servers under /mcp

Check three things in order. That the file is at ~/.gemini/settings.json and is valid JSON, a stray comma being the usual culprit. That you used httpUrl rather than url. And that you fully restarted the CLI, since it reads the file at startup.

It connects, but every question fails

Paste your link into a browser. A 402 means the subscription lapsed, and billing will sort it. A 404 means the link is wrong or was regenerated, so copy it again from your account. A 503 means we have paused Garmin lookups, which you can confirm on the status page.

Can I set up the CLI on my phone?

No, it needs a terminal and Node.js. For your phone, Spark is the route, and it works in the Gemini mobile app once you have added the link from a desktop browser. If you would rather not deal with either, Claude takes a plain paste of the same link and works on web, mobile and desktop.

Do I need a separate subscription for each AI app?

No. One stats.training subscription gives you one link, and that link works in every app you add it to. Gemini, Claude, ChatGPT, Le Chat and Perplexity can all read the same account.

One security detail worth remembering

Google states plainly that it does not control, monitor, or secure custom MCP servers, and that once your data reaches one it is governed by that server's privacy practices. That is a fair warning and worth reading properly, so here is our side of it.

stats.training exposes 38 read-only tools. Gemini can request your training, sleep and recovery numbers. It cannot edit Garmin, delete an activity, or send a workout to your watch, because no tool exists that would let it.

Your private URL is still a credential. Put it in a config file or a connector field, never in the body of a chat message. If it leaks, regenerate it from your account and the old link stops working immediately.

Sources and last check

Checked on September 1, 2026. Google is moving quickly here, and custom connector support has reached Gemini's surfaces at different times, so treat the standard chat limitation as a current state rather than a permanent one. We will update this page when it changes.

Get your private connector link.

Connect Garmin or Strava once, then follow the steps above. $10/month, cancel any time.

‹ back to blog The same guide for ChatGPT