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.
Índex invertit: de producte privatiu a alternatives de codi obert. Dues peticions responen un inventari de llicències.
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.
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.
Recomptes, el vocabulari controlat de funcions i països, i generated_at. Consulteu això, no les pàgines.
Última execució, resultats per pas, qüestions obertes. Si la màquina continua funcionant.
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
}licencenull 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_urlnull 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_deadtrue 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.
replaceshand-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.
excludedthe 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_fromset 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_ofset 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.
cataloguesone 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.
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.
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.
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.