Analyse cycling-event GPX routes and build bounded, practical ride-fuelling carry plans.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Complete GPX XML. Provide this or gpx_base64. Maximum decoded size: 3 MB.
Base64-encoded GPX file. Provide this or gpx_xml. Maximum decoded size: 3 MB.
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.
| Argument | Type | Description |
|---|---|---|
| event | object | |
| gpx_xml | string | Complete GPX XML. Provide this or gpx_base64. Maximum decoded size: 3 MB. |
| gpx_base64 | string | Base64-encoded GPX file. Provide this or gpx_xml. Maximum decoded size: 3 MB. |
{
"type": "object",
"anyOf": [
{
"required": [
"gpx_xml"
]
},
{
"required": [
"gpx_base64"
]
}
],
"properties": {
"event": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"name": {
"type": "string",
"maxLength": 160
},
"type": {
"enum": [
"road_race",
"criterium",
"time_trial",
"gran_fondo",
"sportive",
"gravel",
"mtb",
"mtb_xc",
"ultra",
"stage",
"triathlon_bike_leg",
"other"
],
"type": "string"
},
"start_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"course_laps": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"course_format": {
"enum": [
"point_to_point",
"loop",
"laps"
],
"type": "string"
}
},
"additionalProperties": false
},
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| ride_type* | string | Broad work demand. Use race_event only for a race, sportive or equivalent performance event. |
| carb_sources | array | Optional products or foods the rider already has. Omit to receive a generic equivalent pack. |
| duration_minutes* | integer | Planned cycling duration in minutes. |
| current_tolerance* | string | Highest carbohydrate intake in grams per hour already tolerated reliably in similar cycling. |
{
"type": "object",
"required": [
"duration_minutes",
"ride_type",
"current_tolerance"
],
"properties": {
"ride_type": {
"enum": [
"recovery",
"endurance",
"tempo_threshold",
"intervals",
"race_event"
],
"type": "string",
"description": "Broad work demand. Use race_event only for a race, sportive or equivalent performance event."
},
"carb_sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"form",
"carbs_g"
],
"properties": {
"form": {
"enum": [
"drink",
"gel",
"chew",
"food"
],
"type": "string"
},
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"carbs_g": {
"type": "integer",
"maximum": 150,
"minimum": 1
},
"max_servings": {
"type": "integer",
"default": 12,
"maximum": 24,
"minimum": 1
}
},
"additionalProperties": false
},
"maxItems": 12,
"minItems": 1,
"description": "Optional products or foods the rider already has. Omit to receive a generic equivalent pack."
},
"duration_minutes": {
"type": "integer",
"maximum": 1440,
"minimum": 15,
"description": "Planned cycling duration in minutes."
},
"current_tolerance": {
"enum": [
"not_established",
"up_to_45",
"up_to_60",
"up_to_75",
"up_to_90"
],
"type": "string",
"description": "Highest carbohydrate intake in grams per hour already tolerated reliably in similar cycling."
}
},
"additionalProperties": false
}