# igpsport-mcp

Connects cycling logs from an iGPSport account to your AI assistant. It calculates fitness and fatigue metrics locally and helps assemble structured training sessions.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 7
- Author: dengxuhui
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/dengxuhui/igpsport-mcp
- Updated: 2026-06-30
- HTML: https://affpapa.org/en/nevibecode/mcp/igpsport-mcp

## What it does

The tool accesses iGPSport by mimicking web client requests over a local stdio connection. Instead of sending raw sensor streams to the model, the server precomputes metrics internally. The LLM directly receives ready values for normalized power, TSS, intensity factor, CTL, ATL, and TSB.

Setup runs through `uv`. You do not need a pre-existing Python installation because `uv` downloads and runs the runtime automatically. Credentials can be configured interactively using `igpsport-mcp --setup` or passed directly as environment variables.

Without an FTP value in your profile or `IGPSPORT_FTP`, the server cannot compute stress score and fatigue metrics. If you switch to the international edition via `IGPSPORT_REGION=intl`, segment queries are disabled. Any backend change on iGPSport might break login.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `IGPSPORT_USERNAME`, `IGPSPORT_PASSWORD`, `IGPSPORT_REGION`, `IGPSPORT_FTP`, `IGPSPORT_LTHR` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env IGPSPORT_USERNAME=<IGPSPORT_USERNAME> --env IGPSPORT_PASSWORD=<IGPSPORT_PASSWORD> --env IGPSPORT_REGION=<IGPSPORT_REGION> --env IGPSPORT_FTP=<IGPSPORT_FTP> --env IGPSPORT_LTHR=<IGPSPORT_LTHR> --transport stdio igpsport-mcp -- uvx igpsport-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from igpsport-mcp <command>

### Codex

**Platform CLI**
```bash
codex mcp add igpsport-mcp --env IGPSPORT_USERNAME=<IGPSPORT_USERNAME> --env IGPSPORT_PASSWORD=<IGPSPORT_PASSWORD> --env IGPSPORT_REGION=<IGPSPORT_REGION> --env IGPSPORT_FTP=<IGPSPORT_FTP> --env IGPSPORT_LTHR=<IGPSPORT_LTHR> -- uvx igpsport-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from igpsport-mcp <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "igpsport-mcp": {
            "command": "uvx",
            "args": [
                "igpsport-mcp"
            ],
            "env": {
                "IGPSPORT_USERNAME": "<IGPSPORT_USERNAME>",
                "IGPSPORT_PASSWORD": "<IGPSPORT_PASSWORD>",
                "IGPSPORT_REGION": "<IGPSPORT_REGION>",
                "IGPSPORT_FTP": "<IGPSPORT_FTP>",
                "IGPSPORT_LTHR": "<IGPSPORT_LTHR>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from igpsport-mcp <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "igpsport-mcp": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "igpsport-mcp"
            ],
            "env": {
                "IGPSPORT_USERNAME": "<IGPSPORT_USERNAME>",
                "IGPSPORT_PASSWORD": "<IGPSPORT_PASSWORD>",
                "IGPSPORT_REGION": "<IGPSPORT_REGION>",
                "IGPSPORT_FTP": "<IGPSPORT_FTP>",
                "IGPSPORT_LTHR": "<IGPSPORT_LTHR>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from igpsport-mcp <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e IGPSPORT_USERNAME=<IGPSPORT_USERNAME> -e IGPSPORT_PASSWORD=<IGPSPORT_PASSWORD> -e IGPSPORT_REGION=<IGPSPORT_REGION> -e IGPSPORT_FTP=<IGPSPORT_FTP> -e IGPSPORT_LTHR=<IGPSPORT_LTHR> igpsport-mcp uvx igpsport-mcp
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from igpsport-mcp <command>

## When to use it
- Calculate training load trends like CTL, ATL, and TSB
- Compare power and heart rate figures across two rides
- Generate target power intervals based on current FTP
- Review annual mileage and personal riding records

## Example prompts
- Compare my long rides from this weekend and last weekend.
- Build a 2x20 sweet spot session based on my FTP and prepare it for my head unit.

## Similar
- [World Monitor](https://affpapa.org/en/nevibecode/mcp/world-monitor.md) — MCP server · ★ 89609
- [Scrapling MCP Server](https://affpapa.org/en/nevibecode/mcp/scrapling-mcp-server.md) — MCP server · ★ 89899
- [MCP Toolbox for Databases](https://affpapa.org/en/nevibecode/mcp/googleapis-mcp-toolbox-for-databases.md) — MCP server · ★ 16730
- [PostHog MCP Server](https://affpapa.org/en/nevibecode/mcp/posthog-mcp-server.md) — MCP server · ★ 40459
- [dbx](https://affpapa.org/en/nevibecode/mcp/dbx.md) — MCP server · ★ 27844
- [Metabase](https://affpapa.org/en/nevibecode/mcp/metabase.md) — MCP server · ★ 49863

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
