Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
BAG EPL: Spezialitätenliste, medication and reimbursement data
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"bag-epl": {
"command": "uvx",
"args": [
"bag-epl-mcp"
]
}
}
}Ejecuta esto en tu terminal
claude mcp add bag-epl -- uvx bag-epl-mcpPégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"bag-epl": {
"command": "uvx",
"args": [
"bag-epl-mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"bag-epl": {
"type": "stdio",
"command": "uvx",
"args": [
"bag-epl-mcp"
]
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub malkreide, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (1.0.4) llegó al registro hace 40 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, EmbeddedCI BenchPod
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Drive a BenchPod hardware-in-the-loop bench: power, flash, UART, I2C, CAN, analog and logic.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
\U0001f1e8\U0001f1ed Part of the [Swiss Public Data MCP Portfolio](https://github.com/malkreide)
MCP Server for the Swiss BAG electronic benefits platform (ePL) — Spezialitaetenliste, GGSL, MiGeL
\U0001f1e9\U0001f1ea Deutsche Version
bag-epl-mcp enables AI models to answer questions about mandatory health insurance coverage in Switzerland — in natural language, grounded in real data.
| List | Purpose | Legal basis |
|---|---|---|
| Spezialitaetenliste (SL) | Compulsory-insurance medications | KVG Art. 52 |
| GGSL | Medications for congenital disorders (IV) | IVG Anhang |
| MiGeL | Medical devices & aids | KLV Art. 20 |
Anchor query: *"Is this medication covered by mandatory health insurance?"* → epl_sl_suche: Live lookup in the Spezialitaetenliste (SL) → More use cases by audience →
# Clone the repository
git clone https://github.com/malkreide/bag-epl-mcp.git cd bag-epl-mcp
pip install -e .
uv pip install -e .
Or with uvx (no permanent installation):
uvx bag-epl-mcp
# stdio (for Claude Desktop) — default, opens no network ports
python -m bag_epl_mcp.server
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=8000 \ pip install -e ".[http]" && python -m bag_epl_mcp.server
Transport & host are configured exclusively via environment variables
(
MCP_TRANSPORT,MCP_HOST,MCP_PORT). The default isstdiobound to
nothing;
MCP_HOSTdefaults to127.0.0.1and should only be set to
0.0.0.0inside a container/cloud environment.
Try it immediately in Claude Desktop:
*"Is Methylphenidate (Ritalin) covered by mandatory health insurance?"*
*"Which laws regulate admission to the Spezialitaetenliste?"*
*"Is a wheelchair covered by mandatory insurance?"*
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": { "bag-epl": { "command": "python", "args": ["-m", "bag_epl_mcp.server"] } } }
Or with uvx:
{
"mcpServers": { "bag-epl": { "command": "uvx", "args": ["bag-epl-mcp"] } } }
Render.com (recommended):
pip install -e ".[http]"MCP_TRANSPORT=streamable-httpMCP_HOST=0.0.0.0 (required so the container accepts external traffic)MCP_PORT=8000 (or Render's $PORT)MCP_CORS_ORIGINS='["https://claude.ai"]' to extend the browser CORS allow-listpip install -e ".[http,otel]" and point OTEL_EXPORTER_OTLP_ENDPOINT at your collector. Set MCP_OTEL_ENABLED=0 to disable.python -m bag_epl_mcp.serverhttps://your-app.onrender.com/mcpSecurity note: the server exposes only public, read-only data and uses no
authentication. See
docs/SECURITY.mdfor the threat
model (egress allow-list, host binding, Lethal-Trifecta assessment).
| Tool | Description |
|---|---|
epl_sl_suche | Search the Spezialitaetenliste for compulsory-insurance medications |
epl_ggsl_abfrage | Check GGSL coverage for congenital disorders |
epl_migel_suche | Search the MiGeL for medical devices & aids |
epl_gesuchseingaenge | List pending SL admission requests (transparency) |
epl_rechtskontext | Legal context for coverage questions (WZW criteria) |
epl_server_info | Server status and API phase information |
| Query | Tool |
|---|---|
| *"Is Ritalin covered by insurance?"* | epl_sl_suche |
| *"Which medications for congenital disorder GG-313?"* | epl_ggsl_abfrage |
| *"Is a wheelchair covered?"* | epl_migel_suche |
| *"Which laws regulate the SL?"* | epl_rechtskontext |
Data flow (Phase 1):
bag-epl-mcp (FastMCP)
┌────────────┐ MCP ┌───────────────────────────────┐ HTTPS GET ┌──────────────────┐ │ MCP Client │◀───────▶│ tools (read-only) │─────────────▶│ sl.bag.admin.ch │ │ (Claude │ stdio / │ ├─ epl_sl_suche │ egress │ www.bag.admin.ch │ │ Desktop, │ Stream- │ ├─ epl_ggsl_abfrage │ allow-list │ www.fedlex... │ │ claude.ai)│ able │ ├─ epl_migel_suche │◀─────────────│ (public OGD) │ │ │ HTTP │ ├─ epl_gesuchseingaenge │ (no auth) └──────────────────┘ │ │ │ ├─ epl_rechtskontext │ │ │ │ └─ epl_server_info │ structured JSON logs → stderr └────────────┘ │ resources: epl://uebersicht …│ │ prompts: epl_kassenpflicht…│ └───────────────────────────────┘
Phase roadmap (details in docs/ROADMAP.md):
Phase 1 (current) → legal context + entry points, no data retrieval
Phase 2 (planned) → FHIR/IDMP API, once publicly accessible Phase 3 (vision) → MiGeL + AL via ePL-FHIR
What Phase 1 does, and what it does not. Five of the six tools make no network request at all — there is exactly one outgoing HTTP call in the whole module. They return the legal basis and an entry point, and they now say so. The previous wording, "XML/XLSX downloads + SL website access", advertised a capability with no code path behind it; on 2026-08-08 it was removed rather than implemented, because the underlying source is not machine-readable.
That one HTTP call goes to sl.bag.admin.ch/api/search and receives HTTP 200 with `text/html` — the 51 KB Angular shell. A freely invented path under the same prefix returns the identical response, byte for byte: there is no API at that address. Previously the resulting JSON parse error was caught by a bare except Exception and turned into the claim "the SL database API is not publicly documented" — a statement about the BAG's publishing practice, derived from a parser error. The tool now reports what was measured.
The SL front end calls https://epl.bag.admin.ch/api/sl/ instead, on a different host. That host answers 401 without authentication — but it answers 401 for invented paths too, so this does not establish that any particular route exists. It is deliberately not on the egress allow-list: without verifiable access, adding it would be a grant on suspicion.
MCP protocol version: 2026-07-28 natively, 2025-11-25 as the initialize handshake ceiling. epl_server_info reports the revision the calling connection actually negotiated — derived from the request, not written down here a second time. See MCP Protocol Version for both eras. SDK updates are proposed monthly via Dependabot; the protocol version is reviewed on every mcp SDK bump — see the versioning policy in docs/ROADMAP.md.
limit parameters conservatively.scripts/record_fixtures.py on every run, together with a control request to an invented path. Two BAG pages previously handed out (.../Arzneimittel/geburtsgebrechen-spezialitaetenliste.html and .../Arzneimittel/gesuchseingaenge.html) answered HTTP 404 on 2026-08-08 and were replaced by the entry point that verifiably resolves — not by a guessed replacement URL.eli/cc/1986/40_40_40, no register entry) went unnoticed; the correct ELI is eli/cc/1986/46_46_46.source / provenance block (JSON) or a source-and-licence footer (Markdown) so attribution is preserved.content) and a typed structuredContent validated against a per-tool output schema, so MCP clients can consume results programmatically without parsing prose.This server speaks two protocol eras over the same endpoint. The client's first request on a connection decides which one applies; a later claim from the other era is refused.
| Era | Revision | Who reaches it |
|---|---|---|
initialize handshake | 2024-11-05 … `2025-11-25` | What today's clients speak. The server answers with the revision asked for, or with the 2025-11-25 ceiling when the request asks for something newer. |
| Per-request envelope | `2026-07-28` | A request carrying the 2026-07-28 _meta envelope opens a modern connection. |
Both revisions are pinned in tests/test_protocol_version.py and asserted against the
Solo se muestra el principio; lee el resto en el repo