SEMIPRO Cycling Intelligence

Analyse cycling-event GPX routes and build bounded, practical ride-fuelling carry plans.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
92%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~781Tokens (tool definitions)
~3.0 KBTypical response size
Moderate attention impact (0.61% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "semipro-intelligence": {
      "url": "https://api.semipro.coach/mcp"
    }
  }
}

Remote endpoints

https://api.semipro.coach/mcpstreamable-http

What it can do

Tool inventory

Tools (2)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢analyse_event_route(gpx_xml, gpx_base64, event)

Analyse a cycling-event GPX using SEMIPRO Event Demand Intelligence. Use this when a rider, coach or agent asks what a route will demand, which climbs or sections matter, or what kind of performance problem the course creates. This analyses the course only: it does not inspect an athlete, prescribe training, predict a result, diagnose a medical issue, or analyse a completed FIT activity.

Input Schema

{
  "type": "object",
  "properties": {
    "gpx_xml": {
      "type": "string",
      "description": "Complete GPX XML. Provide this or gpx_base64. Maximum decoded size: 3 MB."
    },
    "gpx_base64": {
      "type": "string",
      "description": "Base64-encoded GPX file. Provide this or gpx_xml. Maximum decoded size: 3 MB."
    },
    "event": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 160
        },
        "type": {
          "type": "string",
          "enum": [
            "road_race",
            "criterium",
            "time_trial",
            "gran_fondo",
            "sportive",
            "gravel",
            "mtb",
            "mtb_xc",
            "ultra",
            "stage",
            "triathlon_bike_leg",
            "other"
          ]
        },
        "date": {
          "type": "string",
          "format": "date"
        },
        "start_time": {
          "type": "string",
          "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
        },
        "course_format": {
          "type": "string",
          "enum": [
            "point_to_point",
            "loop",
            "laps"
          ]
        },
        "course_laps": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100
        }
      }
    }
  },
  "anyOf": [
    {
      "required": [
        "gpx_xml"
      ]
    },
    {
      "required": [
        "gpx_base64"
      ]
    }
  ],
  "additionalProperties": false
}
🟢plan_ride_fuelling(duration_minutes, ride_type, current_tolerance, carb_sources)

Turn a cycling session duration, broad work type and current carbohydrate tolerance into a bounded carbohydrate target, carry plan and timing guide. Use this when a rider needs to know how much carbohydrate to carry and how to divide it across their own gels, drink, chews or food. This is general sports-fuelling guidance: it does not provide medical nutrition, prescribe hydration or sodium, create a daily meal plan, or use connected athlete data.

Input Schema

{
  "type": "object",
  "properties": {
    "duration_minutes": {
      "type": "integer",
      "minimum": 15,
      "maximum": 1440,
      "description": "Planned cycling duration in minutes."
    },
    "ride_type": {
      "type": "string",
      "enum": [
        "recovery",
        "endurance",
        "tempo_threshold",
        "intervals",
        "race_event"
      ],
      "description": "Broad work demand. Use race_event only for a race, sportive or equivalent performance event."
    },
    "current_tolerance": {
      "type": "string",
      "enum": [
        "not_established",
        "up_to_45",
        "up_to_60",
        "up_to_75",
        "up_to_90"
      ],
      "description": "Highest carbohydrate intake in grams per hour already tolerated reliably in similar cycling."
    },
    "carb_sources": {
      "type": "array",
      "minItems": 1,
      "maxItems": 12,
      "description": "Optional products or foods the rider already has. Omit to receive a generic equivalent pack.",
      "items": {
        "type": "object",
        "required": [
          "name",
          "form",
          "carbs_g"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "form": {
            "type": "string",
            "enum": [
              "drink",
              "gel",
              "chew",
              "food"
            ]
          },
          "carbs_g": {
            "type": "integer",
            "minimum": 1,
            "maximum": 150
          },
          "max_servings": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 12
          }
        }
      }
    }
  },
  "required": [
    "duration_minutes",
    "ride_type",
    "current_tolerance"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded2 tools
verifiedversion not recorded2 tools
verifiedversion not recorded2 tools