Een Model Context Protocol (MCP) server die AI-assistenten toegang geeft tot politieke documenten en vergaderingen van de gemeente Baarn via de Notubiz API.
- 15 MCP Tools - Vergaderingen, documenten, zoeken, annotaties
- 24 AI Agents - Gespecialiseerde prompts voor verschillende taken
- MCP Resources - Directe toegang tot vergadering- en documentdata
- Semantic Search - AI-gebaseerd zoeken met embeddings
- Automatische Sync - Achtergrond synchronisatie met Notubiz API
- Docker Support - Containerized deployment
De snelste manier om te installeren - één commando en alles wordt automatisch geregeld:
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/tiemenrtuinstra/baarn-raadsinformatie/main/install.sh | bashWindows (PowerShell als Administrator):
irm https://raw.githubusercontent.com/tiemenrtuinstra/baarn-raadsinformatie/main/install.ps1 | iexAls je de broncode wilt bewerken of meer controle wilt over de installatie:
Windows:
git clone https://github.com/tiemenrtuinstra/baarn-raadsinformatie.git
cd baarn-raadsinformatie
.\scripts\install.ps1 # Volledige installatie
.\scripts\install.ps1 -LightBuild # Zonder embeddings (kleinere image)
.\scripts\install.ps1 -SkipDocker # Skip Docker installatie
.\scripts\install.ps1 -SkipClaude # Skip Claude Desktop/CLI installatiemacOS/Linux:
git clone https://github.com/tiemenrtuinstra/baarn-raadsinformatie.git
cd baarn-raadsinformatie
./scripts/install.sh
./scripts/install.sh --light # Lichtgewicht build
./scripts/install.sh --skip-docker # Skip Docker check
./scripts/install.sh --skip-claude # Skip Claude Desktop/CLI installatie- Docker - Installeert Docker Desktop indien nodig
- Environment - Maakt
.envbestand met unieke API key - Build - Bouwt Docker images (~3.5GB of ~1.5GB light)
- Claude (optioneel, skip met
--skip-claude) - Installeert Claude indien nodig:- Windows/macOS: Claude Desktop (via winget/brew of directe download)
- Linux/Chromebook: Claude Code CLI (via npm)
- Dependencies: Node.js wordt automatisch geïnstalleerd indien nodig voor CLI
- AI Tools - Detecteert en configureert (14 tools):
- Claude Desktop
- Claude Code CLI
- OpenAI Codex CLI
- Cursor IDE
- Continue.dev (VS Code/JetBrains)
- Cline (Claude Dev) voor VS Code
- Aider CLI
- Zed Editor
- Windsurf
- Ollama
- GitHub Copilot
- Microsoft Copilot Studio
- Start - Start API server en sync service
De installer werkt ook op Chromebooks met Linux (Crostini) ondersteuning:
# Open de Linux terminal op je Chromebook en voer uit:
curl -fsSL https://raw.githubusercontent.com/tiemenrtuinstra/baarn-raadsinformatie/main/install.sh | bashOpmerkingen:
- Claude Desktop is niet beschikbaar voor Linux/ChromeOS
- De installer installeert automatisch Claude Code CLI via npm als alternatief
- Node.js wordt automatisch geïnstalleerd indien nodig
- Gebruik
--skip-claudeom Claude installatie over te slaan - Docker moet beschikbaar zijn in je Linux container
# Windows
.\scripts\start.ps1 # Start services
.\scripts\start.ps1 -Stop # Stop services
.\scripts\start.ps1 -Logs # Bekijk logs
.\scripts\start.ps1 -Restart # Herstart
# macOS/Linux
./scripts/start.sh start # Start services
./scripts/start.sh stop # Stop services
./scripts/start.sh logs # Bekijk logs
./scripts/start.sh status # Toon statusAls je liever handmatig installeert:
# Clone repository
git clone https://github.com/tiemenrtuinstra/baarn-raadsinformatie.git
cd baarn-raadsinformatie
# Kopieer environment file
cp .env.example .env
# Bouw en start met Docker
docker compose build
docker compose up -d api-server sync-serviceNa installatie is Claude Desktop automatisch geconfigureerd. Handmatig toevoegen aan %APPDATA%\Claude\claude_desktop_config.json (Windows) of ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"baarn-raadsinformatie": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", "/pad/naar/project/.env",
"-v", "/pad/naar/project/data:/app/data",
"baarn-raadsinformatie:latest"]
}
}
}Herstart Claude Desktop en de MCP server is beschikbaar.
baarn-raadsinformatie/
├── mcp_server.py # MCP server entry point
├── api_server.py # REST API server (FastAPI)
├── sync_service.py # Background sync service
├── agents/ # AI agent definities (YAML)
├── analyzers/ # Analyse modules
├── configs/ # Configuratie bestanden
│ ├── openapi.json # OpenAPI schema
│ └── copilot-studio-connector.json
├── core/ # Core modules
│ ├── config.py # Configuratie
│ ├── database.py # SQLite database (WAL mode)
│ └── document_index.py # Embeddings index
├── data/ # Data directory (niet in git)
│ ├── baarn.db # SQLite database
│ ├── cache/ # API cache
│ ├── documents/ # PDF downloads
│ └── images/ # Geëxtraheerde afbeeldingen
├── providers/ # Data providers
│ ├── notubiz_client.py # Notubiz API client
│ ├── meeting_provider.py # Vergaderingen
│ ├── document_provider.py# Documenten + OCR
│ └── ... # Overige providers
├── scripts/ # Scripts
│ ├── install.sh/ps1 # Installatie scripts
│ ├── start.sh/ps1 # Start scripts
│ └── ... # Utility scripts
├── shared/ # Gedeelde utilities
│ ├── logging_config.py # Logging
│ └── cli_progress.py # CLI progress bars
└── tools/ # MCP tool definities
| Tool | Beschrijving |
|---|---|
get_meetings |
Vergaderingen ophalen met filters |
get_meeting_details |
Details van een vergadering |
get_agenda_items |
Agendapunten ophalen |
get_document |
Document met inhoud ophalen |
search_documents |
Keyword zoeken |
semantic_search |
AI zoeken op betekenis |
sync_data |
Data synchroniseren |
add_annotation |
Notities toevoegen |
get_annotations |
Notities ophalen |
get_gremia |
Commissies ophalen |
get_statistics |
Database statistieken |
get_coalitie_akkoord |
Coalitieakkoord info |
update_coalitie_afspraak |
Coalitie-afspraak updaten |
add_visit_report |
Werkbezoek-verslag toevoegen (upload) |
import_visit_reports |
Werkbezoek-verslagen aanmaken uit documenten |
list_visit_reports |
Werkbezoek-verslagen lijst |
get_visit_report |
Werkbezoek-verslag details |
search_visit_reports |
Zoeken in werkbezoek-verslagen |
update_visit_report |
Werkbezoek-verslag bijwerken |
delete_visit_report |
Werkbezoek-verslag archiveren |
link_visit_report_to_meeting |
Verslag koppelen aan vergadering |
index_visit_reports |
Verslagdocumenten indexeren |
De server bevat 24 gespecialiseerde agents:
vergadering-analist- Analyseert vergaderingenstemgedrag-analist- Analyseert stempatronendocument-zoeker- Doorzoekt documentenbeleids-onderzoeker- Onderzoekt beleid
besluit-tracker- Volgt besluitenmotie-tracker- Volgt moties/amendemententoezeggingen-tracker- Volgt toezeggingencoalitie-monitor- Volgt coalitieakkoord
raadslid-assistent- Ondersteunt raadsledenburger-informant- Informeert burgersjournalist-assistent- Ondersteunt journalistenwoo-assistent- Helpt bij Woo-verzoeken
Zie agents/README.md voor volledige lijst
# Build en start
docker compose up -d
# Bekijk logs
docker compose logs -f
# Stop
docker compose downDe sync service synchroniseert automatisch elke 6 uur.
De MCP server werkt met de Claude Code CLI (Anthropic's CLI tool). De installer registreert automatisch de MCP server als Claude Code CLI gedetecteerd wordt.
Handmatig registreren:
# Voeg MCP server toe aan Claude Code
claude mcp add baarn-raadsinformatie -- docker run -i --rm \
--env-file "/pad/naar/baarn-raadsinformatie/.env" \
-v "/pad/naar/baarn-raadsinformatie/data:/app/data" \
-v "/pad/naar/baarn-raadsinformatie/logs:/app/logs" \
baarn-raadsinformatie:latest
# Bekijk geconfigureerde MCP servers
claude mcp list
# Start Claude Code sessie met MCP tools
claude
> wat zijn de vergaderingen van deze week in Baarn?De MCP server werkt ook met de OpenAI Codex CLI. De installer registreert automatisch de MCP server als Codex CLI gedetecteerd wordt.
Handmatig registreren:
# Voeg MCP server toe aan Codex
codex mcp add baarn-raadsinformatie -- docker run -i --rm \
--env-file "/pad/naar/baarn-raadsinformatie/.env" \
-v "/pad/naar/baarn-raadsinformatie/data:/app/data" \
-v "/pad/naar/baarn-raadsinformatie/logs:/app/logs" \
baarn-raadsinformatie:latest
# Bekijk geconfigureerde MCP servers
codex mcp list
# Test de server
codex
> wat zijn de vergaderingen van deze week in Baarn?De server is dan beschikbaar als MCP tooling binnen CLI sessies.
Cursor IDE ondersteunt MCP native. De configuratie staat in .cursor/mcp.json:
{
"mcpServers": {
"baarn-raadsinformatie": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", ".env",
"-v", "./data:/app/data", "baarn-raadsinformatie:latest"]
}
}
}Voor Continue.dev (VS Code/JetBrains), zie .continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [{
"transport": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", ".env",
"-v", "./data:/app/data", "baarn-raadsinformatie:latest"]
}
}]
}
}Cline is een VS Code extensie voor AI-assisted coding. Configuratie in .vscode/settings.json:
{
"cline.mcpServers": {
"baarn-raadsinformatie": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", "${workspaceFolder}/.env",
"-v", "${workspaceFolder}/data:/app/data",
"baarn-raadsinformatie:latest"]
}
}
}Installeer de Cline extensie in VS Code.
Aider is een CLI tool voor AI-assisted coding. Configuratie in .aider.conf.yml:
model: claude-3-5-sonnet-20241022
edit-format: diff
auto-commits: true
# Context bestanden
read:
- README.md
- progress.mdInstalleer en gebruik:
pip install aider-chat
cd baarn-raadsinformatie
aider
# Vraag om context via API
/run curl -s http://localhost:8000/api/meetings?limit=5Zed Editor heeft native MCP support. Configuratie in .zed/settings.json:
{
"context_servers": {
"baarn-raadsinformatie": {
"command": {
"path": "docker",
"args": ["run", "-i", "--rm", "--env-file", ".env",
"-v", "./data:/app/data", "baarn-raadsinformatie:latest"]
}
}
},
"assistant": {
"default_model": {
"provider": "anthropic",
"model": "claude-3-5-sonnet-20241022"
}
}
}Download Zed van zed.dev.
Windsurf is een AI-first code editor. Configuratie in .windsurf/mcp.json:
{
"mcpServers": {
"baarn-raadsinformatie": {
"command": "docker",
"args": ["run", "-i", "--rm", "--env-file", "${workspaceFolder}/.env",
"-v", "${workspaceFolder}/data:/app/data",
"baarn-raadsinformatie:latest"]
}
}
}Cascade configuratie in .windsurf/cascade.json bevat custom commands voor vergaderingen en documenten zoeken.
Importeer configs/copilot-studio-connector.json als Custom Connector:
- Ga naar Power Platform Admin Center
- Maak een Custom Connector met de OpenAPI spec
- Vervang
YOUR_API_HOSTmet je publieke API URL
Zie docs/ollama-integration.md voor integratie met lokale LLMs.
De server bevat ook een REST API die je kunt gebruiken voor ChatGPT Custom GPT Actions.
# Direct
python api_server.py
# Of via Docker
docker compose up api-server -dDe API is beschikbaar op http://localhost:8000:
- Swagger UI:
http://localhost:8000/docs - OpenAPI schema:
http://localhost:8000/openapi.json
De API gebruikt de API_KEY uit .env. Je kunt deze lokaal roteren met:
# Cross-platform (Python)
python scripts/rotate_api_key.py
# macOS/Linux
./scripts/rotate_api_key.sh
# Windows PowerShell
./scripts/rotate_api_key.ps1Herstart daarna je services zodat de nieuwe key actief is.
-
Deploy de API naar een publieke URL (bijv. via ngrok, Cloudflare Tunnel, of een server)
-
Maak een Custom GPT in ChatGPT:
- Ga naar ChatGPT → Explore GPTs → Create
- Geef het een naam: "Baarn Raadsinformatie Assistent"
-
Configureer Actions:
- Klik op "Configure" → "Create new action"
- Import de OpenAPI schema van
/openapi.jsonof kopieer uitopenapi.json - Vervang de server URL met jouw publieke URL
-
Authenticatie:
- Kies "API Key" als authentication type
- Auth Type: "Custom"
- Custom Header Name:
X-API-Key - Voer je API key in (zie
.envfile)
-
Instructies voor de GPT:
Je bent een assistent voor politieke informatie over gemeente Baarn. Gebruik de beschikbare actions om vergaderingen, documenten en coalitieakkoord informatie op te halen. Geef altijd bronverwijzingen.
| Endpoint | Methode | Beschrijving |
|---|---|---|
/api/meetings |
GET | Vergaderingen ophalen |
/api/meetings/{id} |
GET | Vergadering details |
/api/meetings/{id}/agenda |
GET | Agendapunten |
/api/documents/{id} |
GET | Document ophalen |
/api/documents/search |
GET | Keyword zoeken |
/api/documents/semantic-search |
GET | Semantisch zoeken |
/api/gremia |
GET | Commissies ophalen |
/api/coalitie |
GET | Coalitieakkoord |
/api/statistics |
GET | Database statistieken |
/api/annotations |
GET/POST | Annotaties |
De REST API bevat een lokale uploader op http://localhost:8000/upload.
Deze pagina vereist de X-API-Key en gebruikt dezelfde opslag/extractie als de MCP tools.
Je kunt hier bestanden uploaden (PDF/DOCX/PPTX/XLSX) en optioneel direct een werkbezoek-verslag aanmaken.
Gebruik in Docker:
docker compose up api-server -d
# bezoek http://localhost:8000/upload en vul je API key in| Variable | Beschrijving | Default |
|---|---|---|
NOTUBIZ_API_URL |
Notubiz API URL | https://api.notubiz.nl |
NOTUBIZ_API_TOKEN |
API token | - |
FORCE_ORCHESTRATOR |
Forceer routing via orchestrator prompt | true |
ORCHESTRATOR_AGENT_NAME |
Naam van de orchestrator agent | orchestrator |
STORE_FILES_IN_DB |
Sla bestanden op in de database | true |
MAX_FILE_SIZE_MB |
Max bestandsgrootte voor DB opslag | 25 |
LOG_LEVEL |
Log level | INFO |
AUTO_SYNC_ENABLED |
Auto sync aan/uit | true |
AUTO_SYNC_DAYS |
Dagen terug bij sync | 365 |
EMBEDDINGS_ENABLED |
Semantic search | true |
Stel de volgende repo variables in via Settings → Secrets and variables → Actions → Variables:
| Variable | Waarde |
|---|---|
FORCE_ORCHESTRATOR |
true |
ORCHESTRATOR_AGENT_NAME |
orchestrator |
Semantic search met embeddings is standaard ingeschakeld. De benodigde dependencies (sentence-transformers en torch) staan in requirements.txt.
Bij de eerste zoekopdracht wordt het embedding model (paraphrase-multilingual-MiniLM-L12-v2) automatisch gedownload.
Deze server haalt data op via de Notubiz API:
- Vergaderingen en agenda's
- Raadsstukken en documenten
- Commissies en gremia
- Besluiten en moties
MIT License - zie LICENSE voor details.
Bijdragen zijn welkom! Open een issue of pull request.
- Gemeente: Baarn
- Data bron: Notubiz Baarn
