Connect Claude Desktop
The recommended Claude Desktop setup is the signed icuvisor Desktop Extension (.mcpb). It installs the local MCP server without editing claude_desktop_config.json and lets Claude Desktop store the intervals.icu API key as a sensitive extension setting.
The manual JSON/keychain setup remains available as a fallback for users who cannot install the extension.
Option 1: Install the Desktop Extension
You need:
- Claude Desktop on macOS.
- The current macOS universal
icuvisor_<version>_darwin_universal.mcpbartifact from the GitHub release. - Your intervals.icu athlete ID, written as
i12345or12345. - Your intervals.icu API key.
Install:
- Download
icuvisor_<version>_darwin_universal.mcpbfrom the release assets. - Open the
.mcpbfile with Claude Desktop, or drag it into Claude Desktop’s Extensions UI. - When Claude Desktop asks for extension configuration, enter:
api_key: your intervals.icu API key. The manifest marks this field as sensitive, so Claude Desktop stores it in its secure extension configuration instead of writing it toclaude_desktop_config.json.athlete_id: your intervals.icu athlete ID, such asi12345.timezone: an IANA timezone such asUTC,America/Sao_Paulo, orEurope/London.toolset: keepcorefor normal Claude Desktop use, choosecompactonly if a weaker/local-compatible model surface struggles with the catalog, or choosefullwhen you intentionally want the larger expert catalog.
- Enable the extension and restart Claude Desktop if it asks you to.
- Start a new chat so Claude refreshes the MCP tool catalog.
Do not paste the API key into chat messages or into manual JSON config. In the extension path, Claude Desktop passes it to icuvisor as INTERVALS_ICU_API_KEY only when launching the local stdio server.
After the connection works, start with What can I ask icuvisor? for beginner-friendly training prompts. You can also add reusable Claude Project instructions so new training chats consistently use athlete-local dates, cite icuvisor tools, and flag missing or stale data without storing secrets in the Project. If your training data starts on a Garmin or another device provider, the Garmin to Claude walkthrough shows the full device-provider → intervals.icu → icuvisor → Claude path.
Extension smoke checklist
- Open Claude Desktop after installing or enabling the extension.
- Start a new chat.
- Ask:
What's my FTP? - Expected result: Claude calls icuvisor, uses
get_athlete_profile, and answers with your configured FTP/threshold data from intervals.icu.
If the extension installs but tools do not appear, open Claude Desktop settings, confirm the icuvisor extension is enabled, and verify the athlete ID/timezone fields.
Option 2: Manual JSON and keychain fallback
Use this path if you installed icuvisor.app from the macOS DMG, installed icuvisor.exe on Windows, use a development binary, or cannot install .mcpb files in your Claude Desktop environment.
You need:
- macOS:
icuvisor.appinstalled in/Applications, or another absolute path to anicuvisorbinary. - Windows:
icuvisor.exeinstalled at%LOCALAPPDATA%\Programs\icuvisor\icuvisor.exe, or another absolute path toicuvisor.exe. - Your intervals.icu athlete ID, written as
i12345or12345. - Your API key stored by
icuvisor setupin the OS credential store. On macOS this is Keychain; on Windows this is Windows Credential Manager.
Store the API key first:
/Applications/icuvisor.app/Contents/MacOS/icuvisor setupOn Windows, run this in a new PowerShell window after installing:
icuvisor setupClaude Desktop reads MCP server definitions from:
~/Library/Application Support/Claude/claude_desktop_config.jsonOn Windows, the file is:
%APPDATA%\Claude\claude_desktop_config.jsonThat usually expands to C:\Users\<you>\AppData\Roaming\Claude\claude_desktop_config.json.
Create the file if it does not exist. Add or merge the right mcpServers.icuvisor block for your OS, replacing only the non-secret placeholders.
macOS:
{
"mcpServers": {
"icuvisor": {
"command": "/Applications/icuvisor.app/Contents/MacOS/icuvisor",
"env": {
"INTERVALS_ICU_ATHLETE_ID": "i12345",
"ICUVISOR_TIMEZONE": "America/Sao_Paulo",
"ICUVISOR_TRANSPORT": "stdio",
"ICUVISOR_TOOLSET": "core"
}
}
}
}Windows:
{
"mcpServers": {
"icuvisor": {
"command": "C:\\Users\\<you>\\AppData\\Local\\Programs\\icuvisor\\icuvisor.exe",
"env": {
"INTERVALS_ICU_ATHLETE_ID": "i12345",
"ICUVISOR_TIMEZONE": "Europe/Brussels",
"ICUVISOR_TRANSPORT": "stdio",
"ICUVISOR_TOOLSET": "core"
}
}
}
}Notes:
- Do not put your intervals.icu API key in
claude_desktop_config.json; the manual path reads it from the OS credential store. ICUVISOR_TRANSPORT=stdiois optional because stdio is the default, but keeping it explicit makes the config easier to audit.ICUVISOR_TOOLSET=coreis the default. Usecompactonly for reduced-catalog compatibility experiments, orfullwhen you need the broad expert catalog.- Use a real IANA timezone such as
UTC,America/Sao_Paulo, orEurope/London. - If you installed the app somewhere else, update
commandto the absolute path toicuvisor.app/Contents/MacOS/icuvisororicuvisor.exe.
After editing the file, fully quit and reopen Claude Desktop.
Manual fallback smoke checklist
- Open Claude Desktop after restarting it.
- Start a new chat so Claude refreshes the MCP tool catalog.
- Ask:
What's my FTP? - Expected result: Claude calls icuvisor, uses
get_athlete_profile, and answers with your configured FTP/threshold data from intervals.icu.
If the answer says the tool is missing or cannot start, run:
/Applications/icuvisor.app/Contents/MacOS/icuvisor version
plutil -lint "$HOME/Library/Application Support/Claude/claude_desktop_config.json"On Windows:
& "$env:LOCALAPPDATA\Programs\icuvisor\icuvisor.exe" version
Get-Content "$env:APPDATA\Claude\claude_desktop_config.json" | ConvertFrom-Json | Out-NullIf the answer reports missing credentials, confirm the Keychain item exists and the athlete ID is set in the JSON:
security find-generic-password -s icuvisor -a intervals-icu-api-key >/dev/nullOn Windows, confirm Credential Manager has an icuvisor entry:
cmdkey /list | findstr /i icuvisorUpdating
For the extension path, download and open the newer .mcpb release asset, then restart Claude Desktop and start a new chat.
For the manual app path:
- macOS: download the newer signed DMG, replace
/Applications/icuvisor.app, fully quit Claude Desktop, and start a new chat. - Windows: rerun
iwr -useb https://icuvisor.app/install.ps1 | iexin PowerShell, or install the newer MSI, fully quit Claude Desktop, and start a new chat.
In both paths, keep the API key out of manual JSON config. Also start a new chat after changing Project instructions. If Claude still shows old tools or stale answers, use the stale conversation troubleshooting guide.