Server data from the Official MCP Registry
Parliament OData, Swissvotes, referendums, voting results
Parliament OData, Swissvotes, referendums, voting results
Valid MCP server (1 strong, 3 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
3 files analyzed Β· 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-malkreide-swiss-democracy-mcp": {
"args": [
"swiss-democracy-mcp"
],
"command": "uvx"
}
}
}From the project's GitHub README.
π¨π Part of the Swiss Public Data MCP Portfolio β connecting AI models to Swiss institutional data sources.
π English | π©πͺ Deutsche Version
An MCP server providing access to Swiss direct democracy data, covering all federal popular votes since 1848 and elections since 1900.
Β«Wie hat der Kanton ZΓΌrich bei der AHV 21 Initiative 2022 abgestimmt,
und welche Parteien unterstΓΌtzten die Vorlage?Β»
β democracy_search_votes(keyword="AHV 21", year_from=2022)
β democracy_get_cantonal_results(vote_number="551")
β democracy_get_party_positions(vote_number="551")
β More use cases by audience β
| Source | Coverage | Auth |
|---|---|---|
| Swissvotes (Uni Bern) | All federal votes since 1848 Β· 874 columns Β· party positions Β· cantonal results | None β |
| BFS / opendata.swiss | Real-time & archive (since 1981) Β· municipality level | None β |
| SRGSSR Polis | Votes & elections since 1900 Β· municipality detail | OAuth2 key |
| Tool | Description |
|---|---|
democracy_search_votes | Search all federal popular votes since 1848 by keyword, date range, legal form, outcome, policy domain |
democracy_get_vote_detail | Full details for a specific vote: official title, parliamentary positions, national result, signatures |
democracy_get_party_positions | Party recommendations (FDP, SP, SVP, Die Mitte, GPS, GLP, β¦) with campaign finance data |
democracy_get_cantonal_results | Results for all 26 cantons: yes%, turnout, accepted flag |
democracy_list_vote_dates | List all voting dates with number of proposals per date |
| Tool | Description |
|---|---|
democracy_bfs_list_vote_dates | List all BFS voting dates (archive + current) |
democracy_bfs_get_vote_results | Real-time or archived results at national, cantonal, or municipality level |
| Tool | Description |
|---|---|
democracy_polis_list_votations | Historical votations since 1900 with municipality-level data |
democracy_polis_get_votation_detail | Full Polis detail, optionally with all municipality results |
democracy_polis_list_elections | National Council, Council of States, and cantonal elections since 1900 |
Add to claude_desktop_config.json:
{
"mcpServers": {
"swiss-democracy": {
"command": "uvx",
"args": ["swiss-democracy-mcp"],
"env": {
"SRGSSR_CONSUMER_KEY": "your_key_here",
"SRGSSR_CONSUMER_SECRET": "your_secret_here"
}
}
}
}
The
SRGSSR_*variables are optional. Without them, all Swissvotes and BFS tools remain fully functional. Only the Polis tools require credentials.
pip install swiss-democracy-mcp
# Bind to all interfaces ONLY inside a container/cloud environment:
MCP_TRANSPORT=streamable_http MCP_HOST=0.0.0.0 MCP_PORT=8000 python -m swiss_democracy_mcp.server
MCP_HOST defaults to 127.0.0.1 (loopback). Set MCP_HOST=0.0.0.0 only
inside a sandboxed container/cloud deployment β never on a local machine, where
it would expose the server to your whole network.
βββββββββββββββββββββββββββββββββββββββββββββββ
β Claude / LLM Host β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββ
β MCP (stdio / Streamable HTTP)
ββββββββββββββββΌβββββββββββββββββββββββββββββββ
β swiss-democracy-mcp β
β β
β βββββββββββββββββββββββββββββββββββββββ β
β β Swissvotes CSV Cache (24h TTL) β β
β β All 874 columns, since 1848 β β
β ββββββββββββββββ¬βββββββββββββββββββββββ β
β β β
β ββββββββββββββββΌβββββββββββββββββββββββ β
β β BFS / opendata.swiss (no auth) β β
β β Real-time & archive since 1981 β β
β ββββββββββββββββ¬βββββββββββββββββββββββ β
β β β
β ββββββββββββββββΌβββββββββββββββββββββββ β
β β SRGSSR Polis (OAuth2, optional) β β
β β Votes & elections since 1900 β β
β βββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββ
Transport: stdio for Claude Desktop Β· Streamable HTTP for cloud/Render.com
Auth pattern: No-Auth-First β Swissvotes & BFS work without any credentials
Cache: Swissvotes CSV is loaded once at startup and cached for 24 hours
All configuration is via environment variables (see .env.example):
| Variable | Default | Purpose |
|---|---|---|
MCP_TRANSPORT | stdio | stdio (local) or streamable_http (cloud) |
MCP_HOST | 127.0.0.1 | HTTP bind address β set 0.0.0.0 only in a container |
MCP_PORT | 8000 | HTTP port |
LOG_LEVEL | INFO | structured JSON logs go to stderr |
SRGSSR_CONSUMER_KEY / SRGSSR_CONSUMER_SECRET | β | optional, only for democracy_polis_* tools |
Secrets are held as SecretStr and never logged. See
docs/secret-management.md and
docs/security.md.
This server intentionally exposes Tools only (no Resources or Prompts). It is
a Phase-1 read-only data wrapper (see docs/roadmap.md); the
tool surface is small (10 use-case-oriented tools) and every response is
self-contained with source provenance. Resources (e.g. vote://{anr}) are a
candidate for a later phase once the URI scheme stabilises.
The protocol version is the one negotiated by mcp[cli]>=1.6.0 (FastMCP). SDK
updates are tracked monthly via Dependabot; protocol bumps are recorded in
CHANGELOG.md.
Combine with other servers in the Swiss Public Data MCP portfolio:
Example multi-server query:
Β«Vergleiche die Abstimmungsresultate zur AHV-Reform mit der Altersstruktur der KantoneΒ»
β swiss-democracy-mcp + swiss-statistics-mcp
swissvotes.ch, opendata.swiss, *.bfs.admin.ch, api.srgssr.ch), HTTPS only. Caller-supplied URLs (the BFS result_url) are additionally resolved and rejected if they point at private, loopback or cloud-metadata IP ranges.limit and date ranges conservative. The server enforces a 30s timeout per request.# Unit tests (no network required)
PYTHONPATH=src pytest tests/ -m "not live" -v
# Live tests (require network access)
PYTHONPATH=src pytest tests/ -m "live" -v
See CONTRIBUTING.md (π©πͺ Deutsch).
See SECURITY.md (π©πͺ Deutsch) for the security posture and vulnerability reporting.
MIT β see LICENSE.
Data licenses:
Be the first to review this server!
by Modelcontextprotocol Β· Developer Tools
Read, search, and manipulate Git repositories programmatically
by Modelcontextprotocol Β· Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno Β· Developer Tools
Toleno Network MCP Server β Manage your Toleno mining account with Claude AI using natural language.