mcp-tirepressure
Allows Hermes Agent to calculate recommended bicycle tire pressures using the SRAM-derived formula, including bike profiles, rider/bike weights, surface conditions, and live weather-based surface detection.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-tirepressureWhat's the recommended tire pressure for my BMC in Vienna today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-tirepressure
Local MCP server (FastMCP, stdio) implementing a SRAM-like tire pressure formula as tools for the Hermes Agent.
Note: This implementation is based on the formula from the SRAM AXS Tire Pressure Calculator. The formula was reverse-engineered from the SRAM web client (August 2026). Not an official SRAM product.
Safety Notice
Important: The calculated tire pressures are recommendations based on a simplified physical formula. They do not replace the manufacturer's specifications on the tire or your own riding feel. Always check the maximum tire pressure (on the tire sidewall) and, when in doubt, increase the pressure by 0.2–0.3 bar. Use at your own risk.
Related MCP server: Training Condition Check MCP
Setup
python -m venv .venv
.venv/bin/pip install -e ".[dev]"Tools
get_bikes()— all 5 bike profilesget_bike(name)— a single bike profilecalc_pressure(bike, rider_weight, bike_weight, surface)— front/rear pressure in barget_recommended_pressure(bike, rider_weight, bike_weight, lat, lon)— with live weather
Registration in Hermes
mcp_servers:
mcp-tirepressure:
command: /path/to/mcp-tirepressure/.venv/bin/python
args: ["-m", "mcp_tirepressure"]Tool Reference
get_bikes()
Lists all 5 configured bike profiles.
Return: [{name, tire_width, inner_rim_width, wheel_diameter, ride_style, rim_type, tire_casing, bike_weight}, ...]
get_bike(name: str)
Returns a single bike profile.
Args: name — key from get_bikes() (e.g. "bmc-teamachine").
Return: profile as dict.
calc_pressure(bike, rider_weight, bike_weight, surface="DRY")
Calculates the recommended tire pressure (front/rear) in bar. Args:
bike— bike namerider_weight— rider weight in kgbike_weight— bike weight in kgsurface—"DRY","WET", or"SNOW"(default:"DRY") Return:{bike, surface, front_bar, rear_bar, notes}
get_recommended_pressure(bike, rider_weight, bike_weight, lat, lon)
One-call recommendation with live weather (Open-Meteo). Args:
bike,rider_weight,bike_weight— as abovelat,lon— coordinates (e.g. Vienna: 48.2082, 16.3738) Return:{bike, surface, weather_reason, front_bar, rear_bar, notes}
Formula
The calculation is based on the formula from the SRAM AXS Tire Pressure Calculator:
P = 10^8.6847 / C^1.3046 × (1 + (2.2 × (W_bike + W_rider) - 180) × 0.0025)
× R_pos × R_rim × R_style × R_surface × R_casing × 68.9476 × 0.001C— tire circumference in mm (derived from wheel diameter + effective width)R_pos— front/rear wheel factor (0.94 / 1.0)R_rim— rim type factor (CROCHET, STRAIGHT_SIDE, TUBES, TUBULAR)R_style— riding style factor (ROAD=1.0, GRAVEL=0.9, MTB=0.9–1.1)R_surface— surface condition (DRY=1.0, WET=0.9, SNOW=0.5)R_casing— tire casing (THIN=1.025, STANDARD=1.0, REINFORCED=0.95, DOUBLE=0.9)68.9476— PSI → bar conversion (÷ 1000)
Details: src/mcp_tirepressure/core.py
Hookless Cap
For rim_type == STRAIGHT_SIDE (hookless), pressure is capped at max
4.96 bar (72 PSI). A note in the notes field indicates whether the
cap was triggered.
Example (CLI)
.venv/bin/python -c "
from mcp_tirepressure.server import calc_pressure
import json
print(json.dumps(calc_pressure('bmc-teamachine', 93.0, 8.0, 'DRY'), indent=2))
"License
Tool Definition Quality
Average 3.6/5 across 4 of 4 tools scored.
get_bikes and get_bike are clearly distinct list-vs-detail tools, but calc_pressure and get_recommended_pressure overlap noticeably. Both return front/rear pressure recommendations; the key difference is explicit surface vs live weather, which is described but could still cause selection ambiguity.
Tool names mostly follow a get_/calc_ verb_noun pattern, and the get_bikes/get_bike pair is nicely consistent. calc_pressure uses an abbreviation rather than calculate_pressure and get_recommended_pressure includes an adjective, so there are minor deviations but no chaotic mixing.
Four tools is well-scoped for a niche tire-pressure server with no bloat or obvious excess. Each tool has a distinct role in listing bikes, retrieving bike details, manual calculation, and weather-driven recommendation.
The core workflow of retrieving bike profiles and getting pressure recommendations is covered, including both manual surface input and live weather. The main gap is the lack of bike profile creation/update/delete, though profiles may be externally configured.
Available Tools
4 toolscalc_pressureB
Calculate recommended tire pressure (front/rear in bar) for a given bike, rider weight, and surface (DRY/WET/SNOW). Applies hookless rim cap where needed.
| Name | Required | Description | Default |
|---|---|---|---|
| bike | Yes | ||
| surface | No | DRY | |
| bike_weight | Yes | ||
| rider_weight | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior itself. It conveys that this is a non-mutating calculation and adds the hookless-rim-cap behavior, which is useful. Yet it does not describe return shape, possible failure cases, or assumptions about units for the numeric weights, so transparency is only partial.
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 short, dense sentences with every phrase contributing. The core calculation and the special hookless-rim behavior are front-loaded, and there is no redundant boilerplate.
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 description is adequate for a simple calculator: it names the core inputs and output units. However, one required parameter (bike_weight) is missing from the prose, there is no output schema, and no assumptions or error conditions are documented, so an agent could still make incorrect assumptions about required input format or result structure.
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 0%, so the description must compensate. It adds meaning by enumerating surface values (DRY/WET/SNOW) and specifying pressure in bar, but it omits the required paraméter bike_weight entirely and gives no units for rider_weight or bike_weight. This is a meaningful gap for an agent trying to invoke correctly.
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 action ('Calculate'), the resource ('tire pressure'), and the output unit ('bar'), which distinguishes it from generic names. However, it does not explicitly differentiate itself from the sibling get_recommended_pressure, so it is clear but not fully differentiated.
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 phrase 'for a given bike, rider weight, and surface' implies when to use the tool, but there is no explicit guidance about when not to use it or when a sibling like get_recommended_pressure would be better. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bikeA
Get a single bike profile by name. Returns specs + bike weight.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the behavioral disclosure burden. It communicates a read operation and reveals return content (specs + bike weight). It does not cover not-found or error behavior, which is a minor gap for a simple GET-like tool.
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 short sentences with no unnecessary words. The core action and return summary are front-loaded, making it fast for an agent to parse.
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 one-parameter read tool with no output schema, the description gives enough to invoke the tool and understand the response. It lacks detail on what 'specs' includes, but that does not affect correct selection or invocation.
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 0% schema description coverage, the description slightly compensates by stating the lookup is by name, giving the sole parameter purpose. It adds no format, uniqueness, or exact-match constraints, so the added value over the bare schema is modest.
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?
Specific verb 'Get', resource 'bike profile', and 'by name' identifies the lookup mechanism. The word 'single' implicitly distinguishes from the sibling get_bikes, though no sibling is explicitly named.
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?
Implied usage: use this tool to fetch one bike by name. It does not explicitly state when to prefer it over get_bikes or the pressure tools, so the agent must infer the boundary from sibling names and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bikesA
List all configured bike profiles (name, tire/rim specs, style).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden, and it clearly conveys a non-mutating list behavior plus the scope ('configured') and included fields. It does not mention response details or edge cases, but for a zero-parameter read operation the core behavior is transparent.
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 entire description is one well-structured sentence with no filler. It front-loads the action and resource, then appends the key output fields.
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 zero-parameter list operation with an output schema, the description provides enough context: what is returned, the scope, and the fields. No prerequisite, input, or alternative-usage details are needed to call it correctly.
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 tool has no parameters, so the description does not need to clarify parameter meaning. It instead clarifies what the returned list contains, adding value beyond the empty input 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 uses a specific verb ('List') with a clear resource ('all configured bike profiles') and enumerates the returned fields (name, tire/rim specs, style). This distinguishes it from singular get_bike and calculation-focused siblings like calc_pressure.
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 phrase 'List all' implies the tool is for retrieving the full set of bike profiles, but it does not explicitly contrast it with get_bike for a single profile or with pressure-related tools. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recommended_pressureB
One-call recommended pressure with live weather. Fetches Open-Meteo data, determines wet/dry, and returns front/rear pressure in bar.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | ||
| lon | Yes | ||
| bike | Yes | ||
| bike_weight | Yes | ||
| rider_weight | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It clearly discloses the live-weather dependency, the wet/dry decision logic, and the bar-unit output format. It does not describe edge-case or error behaviors, but the core operational behavior is transparent.
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 short, front-loaded, and free of filler. The first phrase conveys the core value proposition immediately. The only minor issue is slight redundancy between 'live weather' and 'Fetches Open-Meteo data'.
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 tool with five required parameters, no output schema, and no annotations, this description is incomplete. It explains the high-level flow and output unit but omits essential parameter format details, especially how to specify the bike and what units the weights should use.
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 0%, and the description does not define the meaning, units, or allowed values of the five required parameters. It only hints that lat/lon are used for the Open-Meteo weather lookup and that weights feed the pressure calculation; crucial details like what 'bike' refers to and the weight unit are missing.
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 what the tool does: it fetches Open-Meteo weather data, determines wet/dry conditions, and returns front/rear pressure in bar. This is a specific and understandable purpose, though it does not explicitly differentiate itself from the sibling calc_pressure.
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 phrase 'One-call recommended pressure with live weather' implies the main use case: getting a weather-aware recommendation in a single call. However, it does not explicitly state when not to use this tool or mention alternatives such as calc_pressure, so usage guidance is mostly implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Pirate Weather forecast API (Dark Sky-compatible). Free key required.
AI cycling coach: training plans, workouts, nutrition, strength training, Strava, Garmin and Wahoo.
Real-time weather conditions and multi-day forecasts via Open-Meteo — free, no API key required
Manage your endurance training data and race preparation
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides real-time weather data and forecasts for any location using the OpenWeatherMap API. Supports current weather conditions, 5-day forecasts, and weather alerts with optional demo data when no API key is configured.
- AlicenseNot gradedqualityDmaintenanceProvides personalized recommendations for optimal outdoor exercise times by integrating weather data, Garmin Connect training schedules, and user performance metrics.2Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables natural language queries about Ambient Weather personal weather station data, including current conditions and device info.MIT
- FlicenseBqualityDmaintenanceProvides weather forecasts and active alerts from the US National Weather Service API for US locations.2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/StefanOOE/mcp-tirepressure'
If you have feedback or need assistance with the MCP directory API, please join our Discord server