Terminal-WOO/open-utrecht-datasets
If you are the rightful owner of open-utrecht-datasets and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Utrecht Open Data Zoeksysteem provides a comprehensive toolkit for accessing, exploring, and downloading open datasets from the municipality of Utrecht via the DCAT API.
Utrecht Open Data Zoeksysteem
Een complete toolkit voor het zoeken, verkennen en downloaden van open datasets van de gemeente Utrecht via de DCAT API.
🎯 Overzicht
Dit project biedt toegang tot de Utrecht Open Data API (https://open.utrecht.nl/api) via:
- Web interface - Moderne, gebruiksvriendelijke browser applicatie
- Command-line tool - Python script voor automatisering en scripting
- MCP Server - Model Context Protocol server voor AI assistenten
Toekomstige ontwikkelingen
De API bevat momenteel datasets in DCAT formaat. In de toekomst komen hier ook Woo (Wet open overheid) documenten en dossiers in vergelijkbaar formaat beschikbaar.
✨ Functionaliteit
Web Interface
- 🔍 Zoeken door alle datasets
- 📊 Visuele weergave in grid layout
- 📖 Gedetailleerde dataset informatie
- ⬇️ Directe downloads in verschillende formaten (CSV, JSON, XML, etc.)
- 🔗 Woo-koppeling: Automatische analyse van Woo-relevantie per dataset
- 📱 Responsive design voor desktop en mobiel
- 🎨 Utrecht huisstijl
Command-line Tool
- Zoeken naar datasets met filters
- Details ophalen van specifieke datasets
- Beschikbare formaten bekijken
- Output in tabel, JSON of compact formaat
- Exporteren naar bestanden
MCP Server
- Integratie met AI assistenten (Claude, etc.)
- Programmatische toegang tot alle datasets
- Utrecht Open Data: 6 tools voor datasets en Woo-analyse
- Data.overheid.nl: 4 tools voor landelijke datasets en organisaties
- Woo-integratie: Koppeling met landelijke Woo-index voor documentrelaties
- Intelligente analyse van dataset-relevantie voor Woo-categorieën
📦 Installatie
Vereisten
- Python 3.6 of hoger
- Moderne webbrowser (Chrome, Firefox, Safari, Edge)
Dependencies installeren
pip install -r requirements.txt
Of met een virtual environment:
python3 -m venv venv
source venv/bin/activate # Op Windows: venv\Scripts\activate
pip install -r requirements.txt
🚀 Gebruik
Web Interface (Aanbevolen)
Let op: De Utrecht Open Data API heeft geen CORS headers. Gebruik daarom de meegeleverde proxy server.
- Start de proxy server:
python3 proxy_server.py
Je ziet:
╔═══════════════════════════════════════════════════════════════╗
║ Utrecht Open Data CORS Proxy Server ║
╚═══════════════════════════════════════════════════════════════╝
✓ Server draait op: http://localhost:8080
- Open je browser op:
http://localhost:8080
- Gebruik de interface:
- Zoek naar datasets via de zoekbalk
- Klik op een dataset tegel voor details
- Bekijk de dataset beschrijving en metadata
- Scroll naar "Downloads" voor beschikbare formaten
- Bekijk de "Woo Koppeling" sectie voor gerelateerde documenten
- Klik op de download knop om data op te halen
Andere poort gebruiken:
python3 proxy_server.py -p 8888
Command-line Tool
Maak het script uitvoerbaar:
chmod +x utrecht_open_data.py
Zoeken naar datasets
Alle datasets ophalen:
./utrecht_open_data.py search
Zoeken met zoekterm:
./utrecht_open_data.py search verkeer
./utrecht_open_data.py search "openbare ruimte"
Met opties:
./utrecht_open_data.py search verkeer -n 10 # Max 10 resultaten
./utrecht_open_data.py search verkeer -f json # JSON output
./utrecht_open_data.py search verkeer -o results.json # Opslaan
Dataset details ophalen
./utrecht_open_data.py get afvalbakken
./utrecht_open_data.py get afvalbakken -f json
Beschikbare formaten bekijken
./utrecht_open_data.py formats afvalbakken
MCP Server
De MCP server maakt de Utrecht Open Data API beschikbaar voor AI assistenten zoals Claude.
MCP Server starten
python3 mcp_server.py
Configuratie voor Claude Desktop
Voeg toe aan je Claude Desktop configuratie (~/Library/Application Support/Claude/claude_desktop_config.json op macOS):
{
"mcpServers": {
"utrecht-opendata": {
"command": "python3",
"args": ["/path/to/open-utrecht-datasets/mcp_server.py"]
}
}
}
Beschikbare MCP Tools
Utrecht Open Data Tools (6):
search_datasets- Zoek naar Utrecht datasetsget_dataset- Haal Utrecht dataset details opget_distributions- Haal beschikbare downloads oplist_all_datasets- Toon alle Utrecht datasetsanalyze_woo_connection- Analyseer relevantie voor Woo-categorieënfind_woo_related_datasets- Zoek datasets gerelateerd aan Woo-onderwerpen
Data.overheid.nl Tools (4) - NIEUW:
dataoverheid_search- Zoek datasets van alle Nederlandse overheidsorganisaties- Ondersteunt filters op organisatie en tags
- 10.000+ datasets beschikbaar
dataoverheid_get_dataset- Haal landelijke dataset details op- Inclusief alle resources en metadata
dataoverheid_list_organizations- Lijst van overheidsorganisaties- CBS, gemeenten, provincies, ministeries, waterschappen
dataoverheid_get_organization- Details van organisatie met datasets- Optioneel inclusief alle datasets van de organisatie
Woo Integratie Gebruiken
De MCP server kan datasets koppelen aan de 9 Woo-categorieën:
- 1a: Convenanten
- 1b: Jaarplannen en jaarverslagen
- 1c: Organisatie en werkwijze
- 1d: Bereikbaarheidsgegevens
- 1e: Subsidies en opdrachten
- 1f: Klachten en bezwaren
- 1g: Adviezen Wob en Woo verzoeken
- 2: Woo-besluiten
- 3: Beschrijvingen van publieke informatie
- 4: Aanvullende actieve openbaarmaking
Voorbeeld in Claude Desktop:
Analyseer de Woo-relevantie van dataset 'parkeren'
Claude zal de analyze_woo_connection tool gebruiken en een rapport genereren met:
- Geëxtraheerde trefwoorden
- Gematchte onderwerpen (verkeer, mobiliteit, etc.)
- Relevante Woo-categorieën met toelichting
- Aanbevelingen voor documentkoppelingen
📖 API Details
Base URL
https://open.utrecht.nl/api
Endpoints
GET /api/datasets- Lijst van datasets (DCAT formaat)GET /api/datasets/{dataset}- Dataset detailsGET /api/datasets/{dataset}/distributions- Beschikbare downloads
DCAT Formaat
De API gebruikt de DCAT (Data Catalog Vocabulary) standaard met namespaced attributen:
dct:title- Titeldct:description- Beschrijvingdct:modified- Laatst gewijzigddct:publisher- Uitgeverdcat:keyword- Trefwoordendcat:accessURL- Download URL
Data.overheid.nl API
Base URL: https://data.overheid.nl/data/api/3/action
Type: CKAN API v3 (volledig gestandaardiseerd)
Belangrijkste endpoints:
package_search- Zoek datasets met filterspackage_show- Haal dataset details oporganization_list- Lijst van organisatiesorganization_show- Organisatie details met datasetstag_list- Alle beschikbare tags
Voorbeelden:
# Zoek naar datasets over "klimaat"
GET /package_search?q=klimaat&rows=10
# Haal dataset op
GET /package_show?id=cbs-energie-kerncijfers
# Lijst organisaties
GET /organization_list?all_fields=true
# CBS datasets
GET /package_search?fq=organization:"cbs-opendata"&rows=20
Filters:
q- Zoekterm (fulltext)fq- Filter query (bijv.organization:"gemeente-utrecht")rows- Aantal resultaten (max 1000)start- Offset voor pagineringsort- Sortering (bijv.metadata_modified desc)
Documentatie: https://docs.ckan.org/en/latest/api/
📁 Projectstructuur
utrecht/
├── README.md # Deze documentatie
├── QUICKSTART.md # Snelstart gids
├── PROJECT_SUMMARY.md # Project overzicht
├── requirements.txt # Python dependencies
├── proxy_server.py # CORS proxy server (voor beide APIs!)
├── utrecht_open_data.py # Utrecht command-line tool
├── dataoverheid.py # Data.overheid.nl module (NIEUW!)
├── mcp_server.py # MCP server voor AI assistenten
├── woo_connector.py # Woo-integratie module
├── index.html # Web interface
├── app.js # JavaScript (backup/legacy)
└── style.css # CSS styling (backup/legacy)
🔧 Technische Details
Web Interface
- Vanilla JavaScript (geen frameworks)
- CORS proxy om browser beperkingen te omzeilen
- Responsive grid layout
- Modal dialogen voor details
- Directe download links
- Asynchrone Woo-analyse per dataset
- Real-time topic en categorie identificatie
Command-line Tool
- Python 3.6+
requestslibrary voor HTTP calls- Ondersteuning voor paginering
- Meerdere output formaten
MCP Server
- Model Context Protocol v1.0
- Streaming output ondersteuning
- JSON-RPC 2.0
- Async/await voor performance
- Woo-integratie met keyword extractie en topic mapping
- 9 Woo-categorieën ondersteund
- Intelligent matching algoritme voor dataset-document relaties
Browser Compatibiliteit
- Chrome 60+
- Firefox 60+
- Safari 12+
- Edge 79+
💡 Voorbeelden
Voorbeeld 1: Zoeken en downloaden via web interface
- Open http://localhost:8080
- Zoek naar "afval"
- Klik op "Afvalbakken"
- Bekijk de dataset details
- Scroll naar "Woo Koppeling" voor gerelateerde onderwerpen
- Scroll naar "Downloads" sectie
- Klik "Download CSV"
Woo Koppeling toont:
- Geïdentificeerde onderwerpen (bijv. "milieu", "openbare ruimte", "beheer")
- Relevante Woo-categorieën (indien van toepassing)
- Link naar Woo-index Utrecht
- Zoektermen voor documentonderzoek
Voorbeeld 2: Alle datasets exporteren naar JSON
./utrecht_open_data.py search -f json -o alle_datasets.json
Voorbeeld 3: Dataset details via command-line
./utrecht_open_data.py get afvalbakken
Output:
================================================================================
Dataset: Afvalbakken
================================================================================
ID: afvalbakken
Beschrijving:
Overzicht van bovengrondse afvalbakken in de gemeente Utrecht...
Keywords: afval, afvalbak
Gepubliceerd: 2021-11-24
================================================================================
Voorbeeld 4: Beschikbare downloads bekijken
./utrecht_open_data.py formats bushaltes
Output:
================================================================================
Beschikbare formaten:
================================================================================
1. Formaat: CSV
URL: https://data.utrecht.nl/.../bushaltes.csv
Grootte: 0.45 MB
================================================================================
Voorbeeld 5: Data.overheid.nl - Zoeken naar CBS datasets
python3 dataoverheid.py
Dan interactief gebruiken, of direct via Python:
from dataoverheid import DataOverheidConnector
connector = DataOverheidConnector()
# Zoek datasets
result = connector.search_datasets(query="klimaat", rows=5)
print(connector.format_search_results(result))
# Zoek datasets van specifieke organisatie
result = connector.search_datasets(
organization="gemeente-utrecht",
rows=10
)
# Haal dataset details op
dataset = connector.get_dataset("cbs-energie-kerncijfers")
print(connector.format_dataset_summary(dataset))
# Lijst organisaties
orgs = connector.list_organizations(all_fields=True)
for org in orgs[:10]:
print(f"{org['title']}: {org['package_count']} datasets")
Voorbeeld 6: Data.overheid.nl via MCP in Claude Desktop
Vraag aan Claude:
Zoek datasets over "duurzaamheid" op data.overheid.nl
Claude's response (gebruikt dataoverheid_search tool):
Gevonden: 248 datasets
1. Duurzaamheidsindicatoren gemeenten
ID: cbs-duurzaamheidsindicatoren-gemeenten
Organisatie: CBS OpenData
Het CBS publiceert verschillende indicatoren...
Formaten: CSV, JSON, XML
2. Energieverbruik woningen
ID: rijkswaterstaat-energieverbruik-woningen
...
Organisaties ophalen:
Toon top 10 overheidsorganisaties op data.overheid.nl
Claude gebruikt dataoverheid_list_organizations tool:
🏛️ Nederlandse overheidsorganisaties op data.overheid.nl
1. CBS OpenData
ID: cbs-opendata
Datasets: 5815
2. CBS Microdata
ID: cbs-microdata
Datasets: 1313
3. Gemeente Amsterdam
ID: gemeente-amsterdam
Datasets: 137
...
Voorbeeld 7: Woo-analyse via MCP in Claude Desktop
Vraag aan Claude:
Analyseer de dataset 'parkeren' op Woo-relevantie
Claude's response (gebruikt analyze_woo_connection tool):
📊 WOO-ANALYSE VOOR DATASET
================================================================================
Dataset: Parkeertarieven Utrecht
ID: parkeren
🔍 GEËXTRAHEERDE TREFWOORDEN
────────────────────────────────────────────────────────────────────────────────
parkeren, tarieven, mobiliteit, verkeer
📌 GEMATCHTE ONDERWERPEN
────────────────────────────────────────────────────────────────────────────────
• verkeer
• mobiliteit
• openbare ruimte
✅ RELEVANTE WOO-CATEGORIEËN
────────────────────────────────────────────────────────────────────────────────
[1b] Jaarplannen en jaarverslagen
→ Kan onderdeel zijn van mobiliteitsplannen
[1c] Organisatie en werkwijze
→ Parkeerbeheer is onderdeel van gemeentelijke werkwijze
[3] Beschrijvingen van publieke informatie
→ Openbare tariefinformatie voor burgers
💡 AANBEVELINGEN
────────────────────────────────────────────────────────────────────────────────
Deze dataset bevat publieke tariefinformatie die relevant kan zijn voor:
- Mobiliteitsbeleid en parkeervisie (Woo 1b)
- Parkeerregelingen en handhavingsprotocollen (Woo 1c)
- Actieve openbaarmaking van tarieven (Woo 3)
🐛 Troubleshooting
Web interface werkt niet
Probleem: Browser toont geen data of CORS error
Oplossing: Start de proxy server:
python3 proxy_server.py
Zorg dat je naar http://localhost:8080 gaat (niet file://).
Proxy server start niet
Probleem: Poort 8080 al in gebruik
Oplossing: Gebruik een andere poort:
python3 proxy_server.py -p 8888
Of check welk proces poort 8080 gebruikt:
lsof -i :8080
Command-line tool: Connection Error
Probleem: Kan API niet bereiken
OplossingCheck internetverbinding en API status:
curl https://open.utrecht.nl/api/datasets
Geen downloads beschikbaar
Sommige datasets hebben geen distributies. Probeer deze datasets die gegarandeerd downloads hebben:
afvalbakken- CSVbushaltes- CSVfietstellingen- CSV
Proxy server werkt niet
- Check of poort 8080 al in gebruik is:
lsof -i :8080 - Probeer een andere poort:
python3 proxy_server.py -p 8888 - Controleer of Python 3.6+ geïnstalleerd is:
python3 --version
MCP Server verbindt niet
Probleem: Claude Desktop ziet de server niet
Oplossing:
- Check of het pad in de config correct is
- Herstart Claude Desktop
- Check de logs:
~/Library/Logs/Claude/mcp*.log
🔗 Woo Integratie Details
Hoe het werkt
De Woo-integratie gebruikt intelligente keyword extractie en topic mapping om datasets te koppelen aan Woo-categorieën:
- Keyword Extractie: Haalt relevante termen uit dataset titel, beschrijving en keywords
- Topic Mapping: Matcht keywords aan onderwerpen (bijv. "parkeren" → "verkeer", "mobiliteit")
- Categorie Matching: Koppelt onderwerpen aan relevante Woo-categorieën
- Rapport Generatie: Genereert leesbaar rapport met aanbevelingen
Topic Mapping
De connector ondersteunt 20+ topic gebieden:
- Afval & Milieu
- Verkeer & Mobiliteit
- Veiligheid & Handhaving
- Onderwijs & Jeugd
- Zorg & Welzijn
- Financiën & Economie
- Cultuur & Recreatie
- Ruimtelijke ordening
- En meer...
Implementatie Details
De Woo-integratie is geïmplementeerd in woo_connector.py:
from woo_connector import WooConnector
connector = WooConnector()
report = connector.generate_woo_report(dataset)
Belangrijke methodes:
extract_keywords(dataset)- Haalt trefwoorden uit datasetmap_to_topics(keywords)- Matcht keywords aan onderwerpenanalyze_dataset(dataset)- Volledige analysegenerate_woo_report(dataset)- Genereert leesbaar rapport
🔮 Toekomstige ontwikkelingen
Woo Documenten & Dossiers
De gemeente Utrecht gaat metadata van Woo documenten en dossiers beschikbaar stellen via dezelfde API in vergelijkbaar DCAT formaat.
Verwachte endpoints:
/api/woo/documents- Woo documenten/api/woo/dossiers- Woo dossiers
Huidige status:
- ✅ Woo-integratie met landelijke index operationeel
- ✅ MCP server met 6 tools beschikbaar
- 🔄 Wachten op Woo document API van gemeente Utrecht
- 📅 Command-line tool Woo subcommando's (gepland)
- 📅 Web interface Woo sectie (gepland)
📊 API Statistieken
Huidige productie data:
- 180 datasets beschikbaar
- DCAT formaat
- Verschillende distributie formaten: CSV, JSON, XML, GeoJSON
📄 Licentie
Dit is een tool voor gebruik met Open Data van de gemeente Utrecht.
Data licentie: Zie https://open.utrecht.nl voor voorwaarden van de data.
Tool licentie: Open source - vrij te gebruiken en aan te passen.
📞 Contact & Ondersteuning
Voor vragen over de data:
- Website: https://www.utrecht.nl
- Email: opendata@utrecht.nl
- Telefoon: 14 030
Voor vragen over deze toolkit:
- GitHub Issues (indien repository beschikbaar)
- Zie projectdocumentatie
🙏 Dankwoord
Data beschikbaar gesteld door de gemeente Utrecht via het Open Data portaal.
Gemaakt met ❤️ voor Open Data