Andorra public data: BOPA bulletin, statistics, maps, e-tramits procedures and govern.ad pages
Runs on your machine from its package; the steps are below.
Not assessed yet.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx fonts-andorra
MCP client config
{
"mcpServers": {
"andorra-public-sources": {
"command": "uvx",
"args": [
"fonts-andorra"
]
}
}
}Catàleg educatiu i petits clients Python per trobar i consultar les fonts públiques d'Andorra. Documenta com són els endpoints, les condicions de reutilització, el comportament verificat i els paranys pràctics, i exposa una selecció de dades en directe a través de Python, un servidor MCP i un assistent que cita les fonts.
Projecte educatiu independent. No està afiliat al Govern d'Andorra ni a cap de les institucions esmentades.
| ID | Font | Sector | Accés |
|---|---|---|---|
afa-feeds | Andorran Financial Authority feeds | Finances i regulació | feed |
bopa | Butlletí Oficial del Principat d'Andorra | Legislació i butlletins oficials | api, downloads |
carburants | Fuel stations and reference prices | Energia i carburants | arcgis-rest |
cass-estadistiques | CASS statistics downloads | Seguretat social | downloads |
consell-general-feeds | Consell General news feeds | Parlament i informació cívica | feed |
e-tramits | e-tramits procedures | Serveis públics i tràmits | html |
estadistica-api | Andorra Department of Statistics API | Estadística oficial | api |
govern-ad | Govern d'Andorra information pages | Serveis públics i tràmits | html |
meteo-ad | meteo.ad station charts | Meteorologia i clima | html |
sig-arcgis | Govern d'Andorra ArcGIS Enterprise | Geografia i cartografia | arcgis-rest |
transparencia | Transparency portal | Transparència i administració pública | html, downloads |
Les condicions de reutilització de cada font es detallen a Condicions de les dades d'origen i a cada fitxa de sources/.
Cal Python 3.10 o posterior:
python -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/fonts-andorra-mcp
El servidor MCP es comunica per stdio. Configura Claude Desktop, Claude Code o Cursor amb l'ordre instal·lada:
{
"mcpServers": {
"andorra-fonts-publiques": {
"command": "/absolute/path/to/andorra-fonts-publiques/.venv/bin/fonts-andorra-mcp"
}
}
}
Executa el servidor publicat amb uvx:
uvx fonts-andorra
Configuració de Claude Desktop:
{
"mcpServers": {
"andorra": {
"command": "uvx",
"args": ["fonts-andorra"]
}
}
}
Fes una pregunta amb cites fent servir l'API REST de Gemini. Defineix GEMINI_API_KEY a l'entorn; mai no es desa en aquest repositori:
GEMINI_API_KEY=... .venv/bin/fonts-andorra-ask "Quant triga l'autorització inicial de residència i treball?"
.venv/bin/fonts-andorra-ask "Where can I find official unemployment statistics?" --lang en --json
Els clients també es poden importar directament:
from fonts_andorra.clients.estadistica import data, search
tables = search("atur")
rows = data(1070) # Per defecte, startDate=1900 i endDate=2100.
El codi i el catàleg d'aquest repositori es dediquen al domini públic sota CC0-1.0. Això no canvia la llicència del material d'origen:
El catàleg indica les fonts i les condicions una per una. Verifica les condicions de cada element abans de fer-ne un ús comercial o de republicar-lo.
sources/<id>.yaml conté les fitxes de les fonts.schema/source.schema.json i schema/vocab.yaml defineixen el contracte de les fitxes i els vocabularis tancats.indices/dead-routes.yaml recull els dominis que no responen, comprovats el 2026-10-02.catalog.json, llms.txt i llms-full.txt es generen amb python scripts/build.py.python scripts/validate.py comprova l'esquema de les fonts, els vocabularis i els identificadors de fonts relacionades.fonts_andorra/data/index.json conté els títols i URL d'e-tràmits i, del Govern, només títols, URL i encapçalaments de secció; el cos de totes les pàgines es descarrega en directe i es cita, perquè el contingut d'origen té tots els drets reservats. L'assistent cerca tràmits i pàgines del Govern amb BM25 en local i descarrega en directe les pàgines trobades; no fa servir el cercador del web del Govern, que està prohibit.
Per reconstruir-lo a partir d'e-tràmits i del sitemap en català del Govern, executa .venv/bin/python scripts/build_index.py; aquest generador necessita xarxa i, per això, no forma part de la CI.
Les proves funcionen sense connexió i fan servir respostes públiques desades:
.venv/bin/ruff check .
.venv/bin/pytest -q
python scripts/validate.py
python scripts/build.py
ci.yml executa el lint, les proves sense connexió, la validació i la comprovació dels fitxers generats a cada push i pull request; live.yml fa comprovacions setmanals en directe i en penja un informe.
La comprovació de l'assistent de live.yml necessita el secret GEMINI_API_KEY al repositori.
evals/procedures.yaml conté 10 tràmits reals amb la resposta de referència (preu, termini màxim de resolució, període de sol·licitud i si cal anar-hi presencialment), presa de les pàgines d'e-tràmits el 2026-10-02. S'executa amb:
GEMINI_API_KEY=... .venv/bin/python evals/run.py --baseline
Últim resultat (evals/results-2026-10-03.md, gemini-2.5-flash): 10/10 casos superats amb el tràmit correcte citat i 18/18 dades correctes. El mateix model sense fonts n'encerta 3/18. Aquests 10 casos també es van fer servir per ajustar la cerca, així que s'han de considerar un joc de regressió i no pas una avaluació independent.
evals/heldout.yaml conté 20 casos més, escrits un cop acabat l'ajust: 15 tràmits que no s'havien fet servir per ajustar (ca/es/fr/en) i 5 preguntes que cap font d'aquí no pot respondre (el temps, preus de forfets d'esquí, cues a la frontera, el telèfon personal d'un ministre i els dies de vacances de l'usuari), que l'assistent ha de declinar sense donar cap xifra.
GEMINI_API_KEY=... .venv/bin/python evals/run.py --cases evals/heldout.yaml --baseline
evals/results-heldout-2026-10-03-first-run.md): 15/20 segons el puntuador. Tres errors eren del puntuador (no llegia cites escrites com [1, 2] i no reconeixia "no se encontró" com a resposta declinada). Tornant a puntuar les mateixes respostes surt 18/20. Els dos errors reals:
23-09-2026 com si fossin telèfons, i l'assistent no podia donar el període de sol·licitud. Ja està corregit.evals/results-heldout-2026-10-03.md): 20/20, 23/23 dades, 5/5 preguntes sense resposta declinades i 0 cites incorrectes. El mateix model sense fonts n'encerta 6/23. El cas de l'habitabilitat va passar perquè la cerca va retornar uns altres tràmits, no gràcies a cap correcció. La generació de paraules clau no és del tot determinista, així que aquest cas pot canviar.A partir d'aquí aquest joc ja no és estrictament reservat: s'hi va trobar una correcció. Les noves fallades s'han de corregir amb casos nous.
La proposta d'una pàgina per al Govern és a docs/pitch.md.