ham.run
Server Details
Marathon physiology MCP server — 12 tools for race prediction, pacing strategy, fueling plans, running economy, caffeine protocols, heat acclimation, and Strava-connected training load. Citation-backed models from peer-reviewed exercise physiology literature.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.2/5 across 11 of 11 tools scored.
Each tool targets a distinct aspect of endurance running performance: caffeine modeling, fueling, pacing, athlete data, activities, training load, heat acclimation, pacing strategy, periodization, race prediction, and running economy. No overlap.
Names use snake_case but mix verb_noun (e.g., get_my_athlete, predict_race_time), noun_verb (periodization_compare), and pure noun (caffeine_protocol, fueling_plan). Inconsistent pattern but still understandable.
11 tools cover the domain of running performance modeling without being too many or too few. Each tool serves a clear purpose within the server's scope.
Covers most core areas: personal data retrieval, activity history, training load, and multiple performance models. Minor gaps like workout creation or nutrition beyond fueling plan, but the surface is largely complete for modeling.
Available Tools
11 toolscaffeine_protocolCaffeine + nicotine pharmacokinetic timingARead-onlyIdempotentInspect
Model caffeine (and optional nicotine) blood concentration, performance gain, and side-effect curves over a race using a 1-compartment oral PK model. Source: ham.run ergogenic module. Pass useMyData:true to overlay body weight from the connected athlete profile.
| Name | Required | Description | Default |
|---|---|---|---|
| nicOn | Yes | Enable nicotine co-administration model. | |
| nicForm | Yes | Nicotine delivery form. | gum |
| finishMin | Yes | Expected race duration in minutes. | |
| nicDoseMg | Yes | Nicotine dose in mg. | |
| useMyData | No | Overlay body weight from the connected athlete profile. | |
| bodyWeightKg | No | Body weight in kilograms. | |
| cafTimingMin | Yes | Minutes BEFORE race start that caffeine is taken. | |
| nicTimingMin | Yes | Minutes before race start for nicotine. | |
| extraCafDoses | Yes | In-race top-up doses, e.g. with gels. | |
| cafDoseMgPerKg | Yes | Pre-race caffeine dose, mg/kg. 3–6 mg/kg is the evidence-based range. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | Echo of resolved input parameters. |
| giRisk | Yes | GI distress risk level. |
| timeSavedMin | Yes | Estimated time saved, minutes. |
| hrElevationBpm | Yes | Expected HR elevation from caffeine, bpm. |
| perfCheckpoints | Yes | Performance checkpoints at ~10 min intervals. |
| totalCaffeineMg | Yes | Total caffeine consumed, mg. |
| peakRpeReduction | Yes | Peak RPE reduction from ergogenic effect. |
| caffeineDoseEvents | Yes | Timestamped dose events. |
| avgPerformanceGainPct | Yes | Average performance gain over race duration, %. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive. Description adds specific behavioral context: 1-compartment PK model, source module, and option to overlay user profile data. This meaningfully extends beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose, uses active voice. No fluff. Second sentence usefully calls out a key boolean parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite good annotations and schema coverage, description omits any detail about return values despite tool having an output schema. Agent must infer what 'curves' means. Lacks guidance on output format or interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage for all 10 parameters. Description adds no extra parameter-level detail beyond what schema provides, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it models caffeine/nicotine pharmacokinetics for a race. Unambiguous verb 'Model' and specific resource. Distinct from all sibling tools which cover fueling, pacing, training, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. While uniqueness implies usage for ergogenic timing simulation, the agent is not directed away from alternatives or given context on prerequisites like race duration requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fueling_planFueling and time-to-exhaustionARead-onlyIdempotentInspect
Compute substrate partitioning (CHO/fat oxidation), required carb intake rate, and predicted time-to-glycogen-depletion for an endurance effort. Source: ham.run substrate module. Pass useMyData:true to overlay weight and VO₂max from the connected athlete profile.
| Name | Required | Description | Default |
|---|---|---|---|
| sex | No | Athlete sex — affects substrate partitioning. | |
| vo2max | No | Estimated VO₂max in mL O₂ · kg⁻¹ · min⁻¹. | |
| weightKg | No | Body weight in kilograms. | |
| pctVO2max | Yes | Race intensity as % VO₂max. | |
| useMyData | No | Overlay weight and VO₂max from the connected athlete profile. | |
| glycogenPoolG | Yes | Starting muscle+liver glycogen, grams. Typical 400–700. | |
| transportType | Yes | "sglt1" caps absorption at 1.0 g/min; "dual" (glucose+fructose) at 1.5 g/min. | dual |
| choIntakeGPerHr | Yes | Planned CHO intake during race, g/hr. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rer | Yes | Respiratory exchange ratio at given intensity. |
| input | Yes | Echo of resolved input parameters. |
| notes | Yes | Warning if intake exceeds absorption ceiling. |
| vo2LPerMin | Yes | Absolute VO₂ at race intensity, L/min. |
| choEnergyPct | Yes | Percentage of energy from carbohydrate. |
| energyKJPerMin | Yes | Total energy expenditure, kJ/min. |
| timeToExhaustion | Yes | Formatted time to exhaustion. |
| choOxidationGPerMin | Yes | Carbohydrate oxidation rate, g/min. |
| fatOxidationGPerMin | Yes | Fat oxidation rate, g/min. |
| timeToExhaustionMin | Yes | Minutes until glycogen depletion. |
| effectiveIntakeGPerMin | Yes | Effective CHO intake after absorption cap, g/min. |
| recommendedIntakeGPerHr | Yes | Recommended CHO intake, g/hr. |
| absorptionCeilingGPerMin | Yes | Max gut absorption rate, g/min. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the description adds context about the source module and useMyData overlay. However, it does not detail behavioral traits like data dependency or what happens without useMyData. With annotations, the description adds moderate value but not rich disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences covering main outputs and a key usage hint. No redundant information, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, an output schema, and clear annotations, the description is mostly complete. It mentions core outputs and the useMyData feature, but could briefly note that parameters are documented in the schema. Still, sufficient for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds slight value by explaining useMyData's role, but otherwise repeats schema info. No deep parameter semantics beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it computes substrate partitioning, required carb intake rate, and predicted time-to-glycogen-depletion, with a specific verb 'compute' and resource 'endurance effort'. It distinguishes from sibling tools like pacing_strategy or caffeine_protocol.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for endurance efforts and mentions a special parameter useMyData, but does not explicitly state when to use this tool vs alternatives, nor are there any exclusions or context about when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gap_paceGrade-adjusted pace splitsARead-onlyIdempotentInspect
Distribute a goal time across a course profile in proportion to each segment's Minetti gradient cost. Returns per-mile or per-km splits with pace, elevation gain/loss, and average grade. Source: ham.run GAP module.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | Course profile: parallel arrays of cumulative distance and elevation. | |
| goalTime | Yes | Race time, "HH:MM:SS" or "MM:SS". | |
| splitUnit | Yes | Unit for split intervals. | km |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | Echo of resolved input parameters. |
| splits | Yes | Per-split breakdown. |
| totalTime | Yes | Goal time formatted as HH:MM:SS. |
| totalDistanceM | Yes | Total course distance, metres. |
| flatEquivalentPacePerKm | Yes | Flat-equivalent pace per km. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, making safety clear. The description adds behavioral context by explaining the algorithm (Minetti gradient cost) and output details (pace, elevation, grade). It does not contradict annotations and provides value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words. First sentence states core action and method, second lists outputs. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description, schema, and annotations together cover purpose, parameters, and safety, the description could briefly mention input constraints (e.g., parallel arrays) or error conditions. However, given high schema coverage and annotations, it is largely complete for a computational tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with detailed descriptions for each parameter (goalTime pattern, splitUnit enum, profile arrays). The description adds minimal additional meaning beyond what the schema provides, such as mentioning 'goal time' and 'course profile' but not delving into parameter specifics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Distribute' and the resource 'a goal time across a course profile', specifying the method (Minetti gradient cost) and output (per-mile or per-km splits with pace, elevation, grade). It distinguishes itself from sibling tools like 'pacing_strategy' by focusing on grade-adjusted splits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating grade-adjusted pace splits but does not explicitly contrast with siblings or specify when not to use it. No guidance on alternatives or context is provided, leaving the agent to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_athleteGet the connected athlete profileARead-onlyInspect
Returns the signed-in athlete's profile (age, sex, weight, VO₂max, marathon PR, biomechanics) plus derived HR zones. Use this once at the start of a coaching conversation so subsequent calculations can be personalised. Requires authentication.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Data source identifier. |
| message | No | Guidance message if no profile exists. |
| profile | Yes | Athlete profile (age, sex, weight, VO₂max, marathon PR, biomechanics) or null. |
| derivedZones | No | HR training zones derived from profile. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declared, the description adds the requirement for authentication and indicates the response includes derived HR zones. This provides useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the main purpose, and every sentence adds value (what it returns, when to use, auth requirement). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and the presence of an output schema, the description is complete: it states the return content, usage context, and authentication need. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, and schema coverage is 100% (no params to describe). The description does not need to add parameter details, so baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the signed-in athlete's profile with specific fields (age, sex, weight, VO₂max, etc.) and derived HR zones. This verb-resource combination is distinct from sibling tools like get_recent_activities or get_training_load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this once at the start of a coaching conversation so subsequent calculations can be personalised,' providing clear context for when to invoke it. It does not explicitly list alternatives but implies it's a prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_activitiesGet the athlete's recent runsARead-onlyInspect
List the signed-in athlete's recent activities with date, distance, duration, pace, average HR, and HR-zone classification. Use to ground training-status questions ("how was my last week?", "did I overdo it?"). Requires authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | Yes | Maximum number of activities to return. | |
| sport | No | Filter by sport type, e.g. "Run", "Ride". | |
| sinceDays | No | Only return activities from the last N days. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of activities returned. |
| window | Yes | Description of the query window. |
| activities | Yes | Activity list. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; description adds authentication requirement and specific output fields, adding value without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with action and output details, followed by usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present, description doesn't need return values. Covers purpose, usage, and authentication. Omits edge cases but adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so schema fully documents parameters. Description provides no additional parameter details beyond the schema, resulting in baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'List' and resource 'signed-in athlete's recent activities' with detailed fields (date, distance, duration, pace, average HR, HR-zone classification), clearly distinguishing from sibling tools like get_training_load or get_my_athlete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use to ground training-status questions', providing clear context. Does not explicitly list alternatives but the sibling set implies differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_loadGet weekly volume + CTL/ATL/TSBARead-onlyInspect
Return per-week distance, time-in-zone, and rolling chronic/acute training load (CTL, ATL, TSB) for the signed-in athlete. TSS is estimated from HR (avg_hr / threshold_hr clamped), so values are useful for trends but not directly comparable to power-based TSS. Requires authentication.
| Name | Required | Description | Default |
|---|---|---|---|
| weeks | Yes | Number of weeks of history to analyse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| weeks | Yes | Per-week volume and zone distribution. |
| caveats | Yes | Warning if threshold HR was not available. |
| fitness | Yes | Fitness/fatigue model output. |
| windowWeeks | Yes | Weeks of data returned. |
| thresholdHrUsed | Yes | Threshold HR used for TSS estimation. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true. The description adds valuable behavioral details: authentication requirement, TSS estimation from HR clamped to threshold, and that values are for trends not direct comparison. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise, front-loaded with key results. Every sentence provides necessary information without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not detail return structure. It covers all essential aspects: metrics returned, estimation method, authentication, and intended use. Complete for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'weeks' with schema coverage 100%. The description doesn't add meaning beyond the schema (default, min, max). For a simple integer parameter, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns per-week distance, time-in-zone, and rolling CTL/ATL/TSB. The name and title are descriptive. Sibling tools are unrelated, so no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies it returns data for the signed-in athlete and requires authentication. It includes a caveat about TSS estimation, implying use for trends. It doesn't explicitly list when not to use or alternative tools, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
heat_acclimation_planSauna / heat acclimation forecastARead-onlyIdempotentInspect
Predict plasma volume expansion, VO₂max gain, race-time improvement, growth-hormone response, and overtraining risk for a sauna heat-acclimation protocol. Source: ham.run sauna module (Scoon 2007, Kirby 2021).
| Name | Required | Description | Default |
|---|---|---|---|
| sex | No | Athlete sex — affects thermoregulation and adaptation rate. | |
| tempC | Yes | Sauna temperature in °C. | |
| weeks | Yes | Total weeks of the protocol. | |
| coldPlunge | Yes | Cold plunge after each sauna session. | |
| durationMin | Yes | Session duration in minutes. | |
| sessionsPerWeek | Yes | Sauna sessions per week. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | Echo of resolved input parameters. |
| hormones | Yes | Hormonal responses. |
| adaptations | Yes | Performance adaptations from heat acclimation. |
| thermalDose | Yes | Cumulative thermal dose metric. |
| overtrainingRiskPct | Yes | Overtraining risk, %. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral context by listing the exact predictions (e.g., plasma volume expansion, VO₂max gain) and sources, aligning with annotations and providing useful detail beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The first sentence front-loads the action and outputs, and the second provides source attribution. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a comprehensive input schema and output schema (per context signals), the description is nearly complete. It covers the tool's purpose and output details. Minor addition could be a prerequisite note, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter having descriptions. The description lists overall outputs but does not add new meaning to individual parameters. Baseline 3 is appropriate as the schema already documents parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'predict' and specifies the resource 'sauna heat-acclimation protocol', listing multiple specific outputs. It cites sources, adding credibility, and is distinct from sibling tools like caffeine_protocol or fueling_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for sauna heat-acclimation planning but does not explicitly state when to use it vs alternatives or provide exclusions. The context is clear from the domain, but guidance on when not to use is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pacing_strategyMarathon pacing — cardiac drift, hydration, sodiumARead-onlyIdempotentInspect
Simulate marathon HR drift and fluid/sodium balance under given heat, sweat, and aid-station conditions. Returns total drift, decoupling %, kilometre at LT₂ breach, plasma sodium, and body-weight loss. Source: ham.run HR pacing module. Pass useMyData:true to overlay age + restingHr + weight from the connected athlete profile.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years. | |
| sex | No | Athlete sex — affects sweat rate and thermoregulation. | |
| maxHr | No | Measured maximum heart rate, bpm. Falls back to age-predicted if omitted. | |
| tempC | Yes | Air temperature, °C. | |
| hrRest | No | Resting heart rate, bpm. | |
| useMyData | No | Overlay age, resting HR, and weight from the connected athlete profile. | |
| bodyWeightKg | No | Body weight in kilograms. | |
| intensityPct | Yes | Target effort as % of HRR. | |
| fluidPerStationMl | Yes | Fluid intake per aid station, mL. | |
| sodiumPerStationMg | Yes | Sodium intake per aid station, mg. | |
| sweatSodiumMmolPerL | Yes | Sweat sodium concentration in mmol/L (typical 30–60). | |
| baselineSweatRateLPerHr | Yes | Baseline sweat rate, L/hr. |
Output Schema
| Name | Required | Description |
|---|---|---|
| lt1 | Yes | LT1 heart rate, bpm. |
| lt2 | Yes | LT2 heart rate, bpm. |
| hrMax | Yes | Age-predicted or measured max HR, bpm. |
| input | Yes | Echo of resolved input parameters. |
| hrStart | Yes | Starting HR at target intensity, bpm. |
| pacingKmh | Yes | Average pacing speed, km/h. |
| finishTime | Yes | Predicted finish time. |
| checkpoints | Yes | 5-km checkpoint data. |
| lt2BreachKm | Yes | Kilometre where HR breaches LT2, or null. |
| decouplingPct | Yes | Cardiac decoupling, %. |
| finalPlasmaNa | Yes | Final plasma sodium, mmol/L. |
| totalDriftBpm | Yes | Total cardiac drift over the marathon, bpm. |
| pctBodyWeightLost | Yes | Body weight lost, %. |
| totalFluidDeficitL | Yes | Total fluid deficit at finish, L. |
| totalSodiumDeficitMg | Yes | Total sodium deficit at finish, mg. |
| actualSweatRateLPerHr | Yes | Temperature-adjusted sweat rate, L/hr. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds context by stating it is a simulation, listing return values, and noting the source module (ham.run). This enriches the behavioral understanding beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three brief segments: purpose+outputs, source, and usage hint. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, 6 required) and the presence of an output schema (as indicated), the description adequately covers what the tool does, its inputs in aggregate, and its outputs. It could mention the full set of return values or clarify that the output schema details them, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already explains each parameter. The description adds marginal value by hinting at 'heat, sweat, and aid-station conditions' and highlighting useMyData, but does not elaborate on individual parameters beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool simulates marathon HR drift and fluid/sodium balance under specified conditions, listing specific outputs like total drift, decoupling %, and plasma sodium. This distinguishes it from siblings that cover caffeine, fueling, heat acclimation, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for use (simulating marathon pacing conditions) and mentions the useMyData flag for overlaying athlete profile data. However, it does not explicitly state when not to use this tool or name alternatives, though the uniqueness of the functionality makes such guidance less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
periodization_compareCompare 16-week training plan modelsARead-onlyIdempotentInspect
Forecast race-time progression across pyramidal, polarized, and threshold periodization models for a given weekly volume and starting marathon time. Returns weekly evolution of VO₂max, running economy, LT₂, and predicted finish. Source: ham.run periodization module.
| Name | Required | Description | Default |
|---|---|---|---|
| age | Yes | Age in years. | |
| sex | No | Athlete sex — affects VO₂max ceiling and adaptation curves. | |
| models | Yes | Subset of models to compare. Default: all three. | |
| baseWeeks | Yes | Base phase duration, weeks. | |
| buildWeeks | Yes | Optional ramp weeks before base. | |
| totalWeeks | Yes | Total training block length, weeks. | |
| weeklyVolumeKm | Yes | Average peak training volume, km/week. | |
| startingMarathonTime | Yes | Current marathon PR / fitness baseline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | Echo of resolved input parameters. |
| models | Yes | Results keyed by model name. |
| startingTime | Yes | Starting marathon time formatted. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the description adds value by specifying outputs (weekly evolution of VO₂max, running economy, LT₂, predicted finish) and source. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the core purpose and list key outputs. No unnecessary words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated in context), the description does not need to detail return values. It adequately covers inputs, outputs, and source, making it complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing detailed descriptions for all parameters. The tool description does not add further elaboration beyond what the schema already captures, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('forecast') and clearly identifies the resource ('race-time progression across pyramidal, polarized, and threshold periodization models'), distinguishing it from siblings like predict_race_time which predicts a single race time without model comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use: when comparing training models given weekly volume and starting time. While it doesn't explicitly state when not to use or list alternatives, the context is sufficiently clear for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
predict_race_timePredict race timesARead-onlyIdempotentInspect
Predict times across 5K / 10K / Half / Marathon from a known race result, using the Riegel exponent (1.06) and age-graded performance scores against IAAF world records. Source: ham.run race predictor. Pass useMyData:true to overlay age + sex from the connected athlete profile.
| Name | Required | Description | Default |
|---|---|---|---|
| age | No | Age in years. | |
| sex | No | Athlete sex — used for age-graded scoring against world records. | |
| knownTime | Yes | Race time, "HH:MM:SS" or "MM:SS". | |
| useMyData | No | Overlay age + sex from the connected athlete profile. | |
| knownDistanceMeters | Yes | Distance in metres. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | Yes | Echo of resolved input parameters. |
| method | Yes | Description of the prediction methodology. |
| predictions | Yes | Predictions for each standard race distance. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive, idempotent behavior. The description adds context on the mathematical model (Riegel exponent, age-graded) and source, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. Front-loaded with purpose and methodology, followed by source and optional parameter guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a predictive tool with an output schema, the description sufficiently covers the model (distances, method), optional parameters, and source. No gaps given the available structured information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3. The description adds value by explaining the Riegel exponent and age-graded scoring, and clarifying the useMyData overlay, beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it predicts race times across specific distances (5K, 10K, Half, Marathon) from a known result, using the Riegel exponent and age-graded scoring. This specificity distinguishes it from sibling tools like pacing_strategy or gap_pace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning optional parameters and the useMyData flag for profile data, but does not explicitly state when not to use or provide comparisons to alternatives like gap_pace or pacing_strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
running_economyRunning economy (Cr) calculatorARead-onlyIdempotentInspect
Compute oxygen cost of running (Cr in mL O₂·kg⁻¹·m⁻¹) given pace, gradient, surface, shoe type, and athlete characteristics. Returns full multiplicative breakdown. Source: ham.run running-economy module (Barnes & Kilding 2015 + Minetti 2002).
| Name | Required | Description | Default |
|---|---|---|---|
| sex | No | Athlete sex — affects economy baseline. | |
| shoes | Yes | Shoe type — "super" = carbon-plated race shoes. | standard |
| vo2max | No | Estimated VO₂max in mL O₂ · kg⁻¹ · min⁻¹. | |
| surface | Yes | Running surface. | road |
| gradient | Yes | Slope as a decimal (0.05 = 5% uphill). | |
| heightCm | No | Height in centimetres. | |
| weightKg | No | Body weight in kilograms. | |
| useMyData | No | Overlay athlete profile data. | |
| marathonPr | No | Marathon PR for caliber estimation. | |
| paceMperMin | Yes | Running pace in metres per minute. 267 = 16 km/h reference. |
Output Schema
| Name | Required | Description |
|---|---|---|
| Cr | Yes | Running economy cost, mL O₂·kg⁻¹·m⁻¹. |
| input | Yes | Echo of resolved input parameters. |
| caliber | Yes | Runner caliber classification. |
| kJperKm | Yes | Energy cost per km, kJ (requires weight). |
| breakdown | Yes | Multiplicative factor breakdown. |
| vo2at16kmh | Yes | Estimated VO₂ at 16 km/h reference pace, mL/kg/min. |
| classification | Yes | Economy tier (e.g. "elite", "good", "average"). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, non-destructive. The description adds value by noting the return of a 'full multiplicative breakdown' and citing scientific sources, which helps the agent understand the calculation style.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that efficiently convey the tool's purpose, output, and source. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 10 parameters and an output schema (not shown but exists). The description mentions the return type ('full multiplicative breakdown'), which suffices given the output schema. Could add more detail about the output format but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline score is 3. The description adds no extra meaning beyond the schema's parameter descriptions, which are already clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes oxygen cost of running (Cr) with specific inputs and returns a full multiplicative breakdown. It is distinct from siblings which focus on other training aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. Usage is implied by the tool's purpose but alternatives are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!