The Swiss public-data rollup for AI agents
Every Swiss source.Rolled up for you.
Sisyphus rolled one boulder. Forever. Swissyphus rolls up 66 Swiss public sources (transport, weather, law, registers, catalogues and hazards) into one MCP server and REST API. Your agent asks once, and every answer is cited, down to the exact upstream request.
Swissyphus in 90 seconds
The rollup in 90 seconds · real answers from live Swissyphus calls, 9 Nov 2026
The rollup
66 public sources.
One MCP server.
Swiss public data is excellent and scattered: every office runs its own API, formats, languages, coordinate system and licence. Sources change, move and go down; Swissyphus keeps them in one interface, every day, automatically, so your agent never has to.
Gather
Always running. Allowlisted public hosts only. Cached, rate-limit aware with circuit breakers, and when a source goes down you get the last good answer, clearly marked stale.
Roll up
45 connector modules turn formats, languages and LV95 ↔ WGS84 into 151 typed tools. One schema serves MCP and REST, so the two never drift.
sources in one boulder: one server, one install, zero keys.
Deliver
Every answer carries its source envelope: publisher, licence, attribution, the publisher’s own timestamp, cache status and the exact upstream requests behind it.
Ask anything Swiss
One question.
Every source it needs.
Pick a question and watch the agent roll up the tool calls behind it, each one attributed to the office that published the data.
You ask
Ships as MCP prompt ·The map sheet
45 modules.
Public sources only.
All 151 tool definitions cost about 36k tokens of context. Roll up the whole country, or only the sheets your agent needs, with a preset.
Provenance
Every answer cited.
Every one of the 151 tools returns the same envelope: who publishes the data, under which licence, the attribution to show, the publisher’s own timestamp (null when it publishes none, never the fetch time in disguise), cache status, and the exact upstream requests behind the answer. Credentials are always redacted.
MIT for the software. The data keeps its own licences, and every response tells you which one.
The licence register for all 66 sources is one call away: list_sources.
A hosted preset leaves out data whose terms forbid redistribution.
{ "data": { "currency": "EUR", "rate_chf": 0.92841, "month": "2026-10" }, "source": { "name": "SNB Data Portal — CHF exchange rates (monthly)", "operator": "Swiss National Bank", "licence": "SNB data portal terms — free use with attribution", "attribution": "© Swiss National Bank, data.snb.ch" }, "retrieved_at": "2026-11-08T18:17:50.788Z", "data_as_of": "2026-10", "cache_status": "miss", "provenance": { "upstream": [ { "url": "https://data.snb.ch/api/cube/devkum/data/json/en?…" } ] } }
$ npx -y swissyphus doctor ✓ probes every upstream source · status and latency
Two surfaces · one schema
MCP and REST.
Same 151 tools.
01 — MCP, for agents
stdio locally, Streamable HTTP when hosted. Every tool registers with a JSON schema, so Claude, Cursor, VS Code and any MCP client discover them without configuration. Short on context? --preset discovery keeps 7 tools loaded and still reaches all of them.
→ tools/list ← 151 tools with input schemas → tools/call get_avalanche_danger_at { lat: 46.8, lon: 9.8 } ← data + source envelope · © SLF
02 — REST, for everything else
Plain HTTP and JSON for scripts, apps and cron. GET with query parameters, POST with a body, an OpenAPI 3.1 spec generated from the same tool schemas, and a remote MCP endpoint on the same port.
GET /v1/tools/get_weather?plz=8001 POST /v1/tools/compare_electricity_tariffs GET /v1/health/sources GET /openapi.json
Setup · under 60 seconds
Roll it into
your client.
No signup, no keys. Node.js 20+ and npx fetch and start the server on demand. Pick your tool.
Cursor, Windsurf, VS Code and Cline all read the same command / args shape. Restart the client after saving.