# The Wheel Atlas

> Open bicycle wheelset database: specs, weights, rim depths, UCI approval, prices in USD/EUR/GBP/AUD.

- name: com.thewheelatlas/wheel-atlas
- version: 1.0.0
- connection class: unknown (unknown)
- trust: 58/100 flags: no-repository
- quality: 83/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.thewheelatlas%2Fwheel-atlas
- tools: https://api.protogrid.dev/v1/servers/com.thewheelatlas%2Fwheel-atlas/tools

**Not classified yet.** The remote endpoints have not been probed successfully, or the listing has nothing to connect to.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "wheel-atlas": {
      "type": "http",
      "url": "https://thewheelatlas.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 28
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website -unreachable(1 failures) ~updated-56d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 83/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: compare_wheels (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); check_uci_approval (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); search_wheels (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 739 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 739 tokens to load them all
- tool set hash: 044eeba780739a052d9fb91af707ff13
- badge: [![protogrid quality](https://protogrid.dev/badge/com.thewheelatlas/wheel-atlas.svg)](https://protogrid.dev/servers/com.thewheelatlas/wheel-atlas)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://thewheelatlas.com/mcp (streamable-http, auth none, reachable false, uptime30d 0.9385965)

## Packages

_none_

## Tools (4)

- `check_uci_approval`: Check UCI approval status for wheels matching a company and/or model (partial matches). At least one of company or model is required. Returns up to 20 matching wheels, each with its stored UCI Approved value (Yes / No); a blank value means not yet checked, not "not approved".
- `compare_wheels`: Compare 2-3 wheels side by side: full specs and prices in every currency each is sold in. Each entry is matched by partial company and model, preferring an available wheel. Entries that match nothing are listed in not_found; the call fails if fewer than 2 wheels are found.
- `get_wheel_price`: Get current pricing and specs for one wheel by company and model. Prefers an available match; a discontinued wheel is returned (flagged, with last-known prices) when it is the only match.
- `search_wheels`: Search wheels with filters. At least one filter is required. Covers currently-available wheels unless include_discontinued is set; every result carries "Available". Returns up to 20 results per call.
