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.

Watch it in 90 seconds

Swissyphus in 90 seconds

The rollup in 90 seconds · real answers from live Swissyphus calls, 9 Nov 2026

66Public sources
151Tools
0API keys required
100%Answers cited

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.

01

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.

02

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.

03

Deliver

Every answer carries its source envelope: publisher, licence, attribution, the publisher’s own timestamp, cache status and the exact upstream requests behind it.

{ "data": { … }, "source": { "name": "SNB", … }, "data_as_of": "2026-10", "provenance": { "upstream": [ … ] } }

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 ·
0Tool calls
0Sources
1Answer
EXAMPLE TRACE

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.

$npx -y swissyphus --preset full

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.

A REAL RESPONSE
{
  "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.

One must imagine the API happy.

Browse the modules