govoss Codi obert
de govern

Per a agents i desenvolupadors

Preneu les dades, no extragueu la pàgina

Tot el que mostra aquest lloc està disponible com a JSON estàtic — 3.553 entrades en una sola petició. Sense clau, sense límit de peticions, sense paginació, sense compte. CORS obert. Última reconstrucció: 2026-09-23T16:40:54Z.

Punts d'accés

Mides mesurades en construir el lloc, de manera que no poden divergir del que se serveix.

Cada entrada, en una sola petició. Sense clau, sense paginació, sense límit de peticions.

3.553 entrades6.7 MB sense comprimir750 KB gzip

Índex invertit: de producte privatiu a alternatives de codi obert. Dues peticions responen un inventari de llicències.

314 productes amb correspondència192 KB sense comprimir19 KB gzip

Un fitxer per país, 16 en total. ⚠ El codi és el país del CATÀLEG que ha llistat el programari, no el nivell d'administració que l'ha publicat — aquí no es distingeix entre l'àmbit municipal, el regional i l'estatal.

16 països1.3 MB sense comprimir142 KB gzip

Els catàlegs recollits, les seves vies d'accés i els recomptes d'entrades, a més dels que es van examinar i descartar, amb els motius.

19 catàlegs24 KB sense comprimir9 KB gzip

Recomptes, el vocabulari controlat de funcions i països, i generated_at. Consulteu això, no les pàgines.

senyal de frescor28 KB sense comprimir9 KB gzip

Última execució, resultats per pas, qüestions obertes. Si la màquina continua funcionant.

salut de la construcció4 KB sense comprimir1 KB gzip

Una entrada, i els camps que porten regles


Un registre real — LibreOffice — retallat als camps que val la pena explicar.

{
  "id": "opensource-muenchen-de-libreoffice-metadata",
  "name": "LibreOffice",
  "description": "LibreOffice is a powerful free and open source office suite",
  "country": "DE",
  "countries": [
    "DE",
    "FR",
    "GLOBAL",
    "IT"
  ],
  "source": "DE/opensource.muenchen.de",
  "sources": [
    "DE/opensource.muenchen.de",
    "FR/sill",
    "GLOBAL/dpg",
    "IT/developers-italia"
  ],
  "repo_url": "https://github.com/tdf/libreoffice-metadata",
  "licence": "LGPL-3.0-or-later AND MPL-2.0+",
  "licence_spdx": null,
  "wikidata": "Q10135",
  "catalogue_count": 4,
  "catalogues": [
    {
      "source": "IT/developers-italia",
      "label": "Developers Italia",
      "country": "IT",
      "catalogue_url": "https://developers.italia.it/en/software",
      "entry_url": null,
      "name_there": "LibreOffice"
    },
    {
      "source": "FR/sill",
      "label": "SILL",
      "country": "FR",
      "catalogue_url": "https://code.gouv.fr/sill",
      "entry_url": "https://code.gouv.fr/sill/detail?name=LibreOffice",
      "name_there": "LibreOffice"
    },
    "... 2 more"
  ],
  "replaces": [
    {
      "product": "Microsoft Office",
      "vendor": "Microsoft",
      "confidence": "strong",
      "kind": "software"
    },
    {
      "product": "Microsoft 365",
      "vendor": "Microsoft",
      "confidence": "partial",
      "kind": "service"
    }
  ],
  "link_dead": false,
  "repo_archived": false,
  "last_checked": "2026-09-23T15:45:30Z",
  "translated_from": null,
  "excluded": false
}
licence

null when the upstream catalogue did not state a real SPDX identifier. It is never guessed from the repository - an spdx-named field holding 'GPLv3+' is worse than a null, because a consumer will trust the name.

entry_url

null when a catalogue has no per-entry page. A constructed link would 404 for about 40% of one source, so it is left empty instead.

link_dead

true only after TWO consecutive failed checks. Single 404s oscillate - an unstable signal is worse than a steady wrong one, because it trains you to ignore the report.

replaces

hand-curated, not inferred. Each carries `confidence` (strong/partial/adjacent) and `kind`: software replaces the software, service means the paid item is hosting or content, paid-tier means it is a commercial edition of something already open source.

excluded

the entry was harvested but held out of the default view - forks, CI plumbing, deployment recipes, locale bundles. It keeps `exclude_reason` and stays in the data; it is flagged, never deleted.

translated_from

set when the description is machine-translated, with the original in `description_original`. Absent means the publisher wrote it in English - the two are never conflated.

variant_of

set when this entry is a version of another catalogue entry - a city's own Consul Democracy, Bulgaria's fork of CKAN - with `via` saying how that is known (publiccode, fork or curated) and `evidence`. Never inferred from names. To count software rather than deployments, skip these entries.

catalogues

one object per government catalogue that lists this software, each with a deep link, so a cross-listing claim can be verified upstream rather than taken on trust.

La regla que ho governa tot: un valor que el catàleg d'origen no indicava és null. Mai no s'endevina ni s'omple a partir d'una cerca. Llegiu null com a “el govern no ho va dir”, no com a “no ho sabem” — la diferència importa si esteu a punt de publicar una afirmació sobre qui llicencia què.

Servidor MCP

5 eines sobre les mateixes dades públiques.

{
  "mcpServers": {
    "govoss": {
      "url": "https://mcp.govoss.cat"
    }
  }
}

Afegiu-ho a la configuració del vostre client MCP. Sense clau ni compte. El servidor llegeix el mateix JSON públic que tothom, de manera que mai no pot retornar res que no continguin les dades publicades.

search_entries(query?: string, country?: string, function?: string, source?: string, licence?: string, limit?: number = 20)

Full-text search over name, description, owner and also-known-as, with optional facet filters. Every filter is AND-ed.

retorna matching entries, most-catalogued first, with variant_of / variant_count

find_replacements(product: string)

The procurement question, answered from an invoice line: give it 'Qualtrics' and it returns the open source alternatives, each marked strong / partial / adjacent and software / service / paid-tier.

retorna entries that can replace that product, with confidence and kind

get_entry(id: string)

Fetch a single entry by its stable id, including the deep links back to each government catalogue that lists it.

retorna one entry, every field

list_sources(include_survey?: boolean = false)

Where the data comes from, with each catalogue's access route and entry count. With include_survey, also the ones checked and rejected and why - which saves repeating a dead end.

retorna the catalogues harvested, optionally those surveyed and rejected

get_stats((none))

How big the catalogue is, when it was last harvested, and the controlled vocabulary for functions and countries.

retorna counts, category enum, freshness

Bones pràctiques


Cache it for a week

The catalogue is rebuilt on Mondays. Polling more often than that cannot return anything new; `generated_at` in /meta.json tells you when it last changed.

Use the MCP server for interactive work

If an agent needs a handful of entries rather than all 3,070, the server does the filtering server-side and returns kilobytes instead of megabytes.

no

Don't drive a browser at the HTML

The first consumer of this catalogue probed eight dead API paths and then ran a headless browser. Everything the page shows comes from entries.json, which is one request and always current.

no

Don't probe for endpoints

There are five, they are all on this page, and there is no /v2, no GraphQL and no undocumented search to discover. /api/entries, /api/catalog, /catalog.json and /data.json redirect here because they are what the first consumer tried.

Llicència i citació


La compilació és CC BY 4.0 i el codi del procés és MIT. No ens pertoca tornar a llicenciar les entrades individuals — cadascuna descriu programari publicat per un catàleg governamental sota les condicions pròpies d'aquell país, i totes enllacen a la seva font. Citeu el govern per a un fet sobre un projecte; citeu aquest catàleg per al conjunt.

govoss-catalog (2026-09-23). Union catalogue of government open source software. https://govoss.cat, CC BY 4.0.