# Politikdaten-Engine

> The own build over the Federal Chancellery's public LINDAS endpoint: popular votes per canton with the Ständemehr, referendum bills, popular initiatives, the Federal Council and National Council elections — 44 cubes, every figure with its provenance.

## What it does {#was}

The LINDAS server reads the Confederation's political data cubes over the public SPARQL endpoint lindas.admin.ch/query — 44 cubes under politics.ld.admin.ch: popular votes, referendum bills, popular initiatives, the National Council elections of 2019, 2023 and 2027, the Federal Council and the Federal Chancellery's register of vested interests. Eight tools: the list of cubes with their states, search by a word of the name, a cube's declared dimensions, the values one dimension takes, the rows themselves with filters, the versions of a family, everything the store says about one IRI, and an IRI resolved to its label. The order is the point: the holding was measured first, the measurements became 58 rules, the rules became 38 numbered contract points, and only then this server. It does no arithmetic: the Ständemehr is READ from the row, never counted from the cantons — counting gives 17 where the Chancellery states 15.5 — and a ballot outcome comes from its own dimension, never from the yes share. States are answers, not faults: a published cube holding no observations says that it is one, and «not stated» stays «not stated», never 0. No licence is stated at the source, and every answer says so.


## Run it yourself {#betreiben}

**You need:**

- Rust (stable via rustup) and Git; every command runs from the root of the corpus checkout.

From the root of the corpus checkout, line by line:

```bash
cargo run --locked --manifest-path mcp/gateway/Cargo.toml -- --root . --http 8700 --fedlex-fixtures mcp/servers/fedlex/tests/fixtures --lindas-fixtures mcp/servers/lindas/tests/fixtures
```

Then you should see:

```text
gateway on 127.0.0.1:8700
```

Like the fedlex engine: MCP over stdio, simplest start behind the gateway. Directly: cargo run --locked --manifest-path mcp/servers/lindas/Cargo.toml -- --fixtures mcp/servers/lindas/tests/fixtures.


## Test {#testen}

```bash
cargo test --locked --manifest-path mcp/servers/lindas/Cargo.toml
```

- **Recorded fixtures:** `mcp/servers/lindas/tests/fixtures`
- Runs without network: every answer comes from the repository, the result is the same every run.

## Call {#ansteuern}

- **Public:** *not yet* — No public endpoint: zone, route and deployment are not switched on.
- **Local:** über das Gateway: POST http://127.0.0.1:8700/tool/lindas.<werkzeug>

### Contracts

- **Tool contract v0** `mcp/servers/lindas/TOOLSET-v0.md`
- **Rulebook** `docs/reference/lindas-cube-rules.md`
- **Engine manifest** `mcp/servers/lindas/engine.manifest.json`

### List all 44 cubes

```bash
curl -s -X POST http://127.0.0.1:8700/tool/lindas.list_cubes -H 'content-type: application/json' -d '{}'
```

Response (excerpt):

```json
{"cubes":[{"cube":"https://politics.ld.admin.ch/fc/cube-chancellor","description":"Bundeskanzler der Schweiz mit Partei, Kanton und Amtszeiten.","family":"fc","name":"Bundeskanzler","observations":15, …}, …]}
```

## Contribute {#mitwirken}

Changes go through merge requests and the same gates as the association's own: formatting, Clippy without warnings, tests, seal and drift checks. Security reports, in confidence, to admin@openhelvetia.swiss.

The base tier costs nothing; what the operation lives on is under [About us, Financing](../../../about/financing/index.html).

## Module card {#steckbrief}

State, evidence, download and dependencies are on the infrastructure page: [Politikdaten-Engine](../../../directory/building-blocks/political-data-engine/index.html).

---

Source: generated from public/web/modules.json
