A Model Context Protocol (MCP) server that lets an LLM client plan hikes anywhere in Switzerland. Combines named SwitzerlandMobility routes, swisstopo elevation profiles, Open-Meteo weather, and Swiss public transport.
Single static binary, built with Bun. No API keys.
| Tool | Purpose |
|---|---|
search_location |
Resolve a free-text place name (town, mountain, station, address) to WGS84 coordinates. |
list_named_routes |
List SwitzerlandMobility (Wanderland) routes. Optional WGS84 bbox filter. |
get_named_route |
Fetch one route by its feature id. Returns attributes and geometry (WGS84 GeoJSON). |
get_hike_profile |
Distance, ascent/descent, elevation samples, SAC/DAV walking time for a GeoJSON line. |
nearest_stations |
Nearest train/bus/tram stops to a WGS84 point. |
plan_transit |
Plan a public transport connection (departure or arrival time). |
forecast |
Hourly + daily weather for a WGS84 point (MeteoSwiss ICON seamless via Open-Meteo). |
Each tool returns small JSON payloads with both content (text) and
structuredContent. Coordinates are WGS84 lat/lon throughout.
brew tap lailo/tap
brew install bergaufThis puts bergauf on your $PATH. For Claude Desktop, point command at the
plain binary name (see Claude Desktop config below).
Pick the binary for your platform from the
latest release. Each
release also ships a SHA256SUMS.txt for verification.
# Apple Silicon → bergauf-darwin-arm64.tar.gz
# Intel → bergauf-darwin-x64.tar.gz
tar -xzf bergauf-darwin-arm64.tar.gz
chmod +x bergauf
sudo mv bergauf /usr/local/bin/
xattr -d com.apple.quarantine /usr/local/bin/bergauf # clear Gatekeeper flagEasier: use Homebrew above.
# x86_64 → bergauf-linux-x64
# arm64 → bergauf-linux-arm64
curl -L -o bergauf https://github.com/lailo/bergauf/releases/latest/download/bergauf-linux-x64
chmod +x bergauf
sudo mv bergauf /usr/local/bin/No-sudo variant: mv bergauf ~/.local/bin/ (make sure ~/.local/bin is on $PATH).
Download bergauf-windows-x64.exe, drop it in a stable folder, and add that
folder to PATH. From PowerShell:
$dest = "$env:LOCALAPPDATA\bergauf"
New-Item -ItemType Directory -Force -Path $dest | Out-Null
Move-Item bergauf-windows-x64.exe "$dest\bergauf.exe"
[Environment]::SetEnvironmentVariable("Path", "$env:Path;$dest", "User")Restart your shell. On first launch, SmartScreen may warn that the binary is unsigned — click "More info" → "Run anyway".
Add to ~/Library/Application Support/Claude/claude_desktop_config.json.
If you installed via Homebrew:
{
"mcpServers": {
"bergauf": {
"command": "bergauf"
}
}
}Or, for a manually downloaded binary, point at the absolute path:
{
"mcpServers": {
"bergauf": {
"command": "/absolute/path/to/bergauf"
}
}
}For Bun-from-source during development:
{
"mcpServers": {
"bergauf": {
"command": "bun",
"args": ["run", "/absolute/path/to/bergauf/src/index.ts"]
}
}
}Restart Claude Desktop. The seven tools appear under the bergauf server.
- "Plan me a 4-hour day hike from Zurich this Saturday. I want to take the train there and back."
- "What's the weather like at the top of Säntis tomorrow?"
- "Show me the elevation profile for ViaJacobi between Rapperswil and Einsiedeln."
The LLM composes the tools: search_location → list_named_routes →
get_named_route → get_hike_profile → forecast → nearest_stations →
plan_transit.
Requires Bun ≥ 1.2.
bun install
bun run dev # MCP Inspector UI in the browser — call tools, inspect responses
bun run dev:stdio # or the raw stdio server (for piping JSON-RPC by hand)bun run dev wraps the server in MCP Inspector,
which auto-discovers the seven tools, renders their Zod input schemas as forms, and shows
both the pretty-printed and structured outputs side-by-side. First run downloads the
Inspector via bunx; subsequent runs hit the cache.
Checks:
bun test # unit tests (no live API calls)
bun run typecheck # tsc --noEmit
bun run lint # biome check
bun run format # biome format --writeAPI client tests stub fetch; no fixtures are committed. The Wanderland
attribute schema and a few transport edge cases were verified with live probes
during initial development — see src/tools/list-named-routes.ts for the
SwitzerlandMobility route-number → category convention.
Build a compiled binary locally:
bun run build:darwin-arm64 # → dist/bergauf-darwin-arm64
bun run build:darwin-x64 # → dist/bergauf-darwin-x64
bun run build:linux-x64 # → dist/bergauf-linux-x64
bun run build:linux-arm64 # → dist/bergauf-linux-arm64
bun run build:windows-x64 # → dist/bergauf-windows-x64.exe
bun run build # all fiveAll free, public, no auth:
- geo.admin.ch (api3) — search, Wanderland identify, elevation profile, point elevation. Fair use: 20 req/min average. GET only.
- transport.opendata.ch — Swiss public transport (locations, connections). Soft, undocumented rate limit.
- Open-Meteo — weather forecast. MeteoSwiss ICON seamless model for best Swiss coverage. CC BY 4.0 attribution.
- Hiking data: swisstopo, SchweizMobil, Swiss Hiking Federation.
- Weather data: Open-Meteo (CC BY 4.0), MeteoSwiss ICON seamless model.
MIT with Commons Clause — free to use, modify, and self-host; selling the software (including hosted/commercial offerings whose value derives substantially from it) requires a separate license. See LICENSE.