BètaGratisGeen accountAlleen lezen

    Live OV-data voor je AI-agent

    Met de MCP-server van ov-nu.nl kan je AI-assistent vragen beantwoorden als “waar is mijn bus nu?” en “haal ik de tram nog?”. Hij gebruikt dezelfde live data als de kaart: alle bussen, trams, metro’s, treinen en veerboten in Nederland.

    Server-URL

    Streamable HTTP
    https://ov-nu.nl/api/mcp

    Wat is het?

    Het Model Context Protocol (MCP) is een open standaard waarmee AI-assistenten externe gereedschappen gebruiken. Koppel je ov-nu.nl, dan kan je assistent zelf haltes opzoeken, vertrektijden met live vertraging ophalen, een rit volgen en zien waar voertuigen op dit moment rijden.

    Endpoint
    https://ov-nu.nl/api/mcp
    Transport
    Streamable HTTP (stateless, JSON-antwoorden)
    Authenticatie
    Geen
    Limiet
    60 verzoeken per minuut per IP-adres
    Dekking
    Heel Nederland: bus, tram, metro, trein en veerboot
    Taal
    Nederlands (tools en antwoorden)

    Koppelen aan je agent

    Kies je client. Overal gebruik je dezelfde URL; je hebt geen API-sleutel nodig. Menunamen kunnen per versie iets afwijken.

    Claude (claude.ai, desktop en mobiel)

    Voeg ov-nu.nl toe als aangepaste connector. Daarna is hij beschikbaar in de web-app, de desktop-app en op je telefoon.

    1. Open Instellingen → Connectors.
    2. Kies Aangepaste connector toevoegen (Add custom connector).
    3. Vul als naam ov-nu in en als URL https://ov-nu.nl/api/mcp. Laat de OAuth-velden leeg.
    4. Zet de connector in een gesprek aan via het menu met tools onder het invoerveld.

    Bij Team- en Enterprise-abonnementen voegt een beheerder connectors toe voor de hele organisatie. Welke abonnementen aangepaste connectors ondersteunen, kan veranderen.

    Claude Code

    Eén commando in je terminal:

    Terminal
    claude mcp add --transport http ov-nu https://ov-nu.nl/api/mcp

    Controleer daarna in Claude Code met /mcp of de server verbonden is. Voeg --scope user toe om hem in al je projecten te gebruiken.

    ChatGPT

    ChatGPT koppelt eigen MCP-servers via de ontwikkelaarsmodus.

    1. Open Instellingen → Apps & connectors → Geavanceerd en zet Ontwikkelaarsmodus aan.
    2. Kies Maken (Create). Vul als naam ov-nu in en als URL https://ov-nu.nl/api/mcp.
    3. Kies bij authenticatie Geen authenticatie, bevestig dat je de app vertrouwt en sla op.
    4. Start een nieuw gesprek, open het +-menu, kies Ontwikkelaarsmodus en zet ov-nu aan.

    De ontwikkelaarsmodus is een bètafunctie. Beschikbaarheid en menunamen verschillen per abonnement en per versie.

    OpenAI Codex CLI

    Via het commando of in je configuratiebestand:

    Terminal
    codex mcp add ov-nu --url https://ov-nu.nl/api/mcp
    ~/.codex/config.toml
    [mcp_servers.ov-nu]
    url = "https://ov-nu.nl/api/mcp"

    Gemini CLI

    Via het commando of in je instellingen. Gebruik voor deze server httpUrl, niet url.

    Terminal
    gemini mcp add --transport http ov-nu https://ov-nu.nl/api/mcp
    ~/.gemini/settings.json
    {
      "mcpServers": {
        "ov-nu": {
          "httpUrl": "https://ov-nu.nl/api/mcp"
        }
      }
    }

    Controleer in Gemini CLI met /mcp of de server verbonden is.

    Cursor

    Voeg de server toe aan je globale of projectconfiguratie:

    ~/.cursor/mcp.json (of .cursor/mcp.json in je project)
    {
      "mcpServers": {
        "ov-nu": {
          "url": "https://ov-nu.nl/api/mcp"
        }
      }
    }

    VS Code (GitHub Copilot)

    Werkt in de agentmodus van Copilot Chat.

    .vscode/mcp.json
    {
      "servers": {
        "ov-nu": {
          "type": "http",
          "url": "https://ov-nu.nl/api/mcp"
        }
      }
    }

    Of gebruik MCP: Add Server in het opdrachtenpalet en kies HTTP.

    Windsurf

    Voeg de server toe aan de MCP-configuratie van Windsurf:

    ~/.codeium/windsurf/mcp_config.json
    {
      "mcpServers": {
        "ov-nu": {
          "serverUrl": "https://ov-nu.nl/api/mcp"
        }
      }
    }

    Andere clients (alleen lokale servers)

    Ondersteunt je client alleen lokale (stdio) MCP-servers, zoals het configuratiebestand van Claude Desktop? Gebruik dan de brug mcp-remote. Daarvoor moet Node.js geïnstalleerd zijn.

    Configuratie (bijvoorbeeld claude_desktop_config.json)
    {
      "mcpServers": {
        "ov-nu": {
          "command": "npx",
          "args": [
            "-y",
            "mcp-remote",
            "https://ov-nu.nl/api/mcp"
          ]
        }
      }
    }

    Wat je agent ermee kan

    De server biedt zes tools. Ze lezen alleen: je agent kan niets wijzigen of versturen. Elk antwoord bevat het tijdstip (now) en eventuele voorbehouden (notes).

    search_stops

    Zoekt haltes op naam en/of in de buurt van een coördinaat. Geeft per halte alle stop_ids (elk perron en elke rijrichting), de locatie en de lijnen die er stoppen.

    Parameters: query, near (lat/lng), radius_m, limit

    Bijvoorbeeld: "Welke haltes zijn er bij de Dam in Amsterdam?"

    get_stop_departures

    Komende vertrekken bij een halte: geplande en verwachte tijd, vertraging, uitval, perron en, als beschikbaar, waar het voertuig nu is.

    Parameters: stop_ids, minutes_ahead (max. 240), line, limit

    Bijvoorbeeld: "Wanneer gaat de volgende tram bij de Dam, en is hij op tijd?"

    get_trip_details

    Volgt één rit: alle haltes met geplande en verwachte tijden, welke haltes al gepasseerd zijn en de live positie van het voertuig.

    Parameters: trip_id

    Bijvoorbeeld: "Hoe laat komt mijn tram aan bij De Boelelaan/VU?"

    find_live_vehicles

    Zoekt voertuigen die nu rijden, op lijn, vervoerder, voertuig- of treinnummer en/of locatie. Minstens één filter is verplicht.

    Parameters: line, operator, vehicle_number, near, radius_m, limit

    Bijvoorbeeld: "Waar rijden de bussen van lijn 300 nu?"

    find_direct_connections

    Ritten die zonder overstap van halte A naar halte B gaan, met live vertrek- en aankomsttijden. Dit is bewust geen reisplanner.

    Parameters: from_stop_ids, to_stop_ids, minutes_ahead, limit

    Bijvoorbeeld: "Gaat er binnen een uur een rechtstreekse bus van Utrecht Centraal naar de Padualaan?"

    get_data_status

    Hoe actueel de data is: aantal live voertuigen per vervoerder, leeftijd van de nieuwste positie en van de live ritinformatie.

    Parameters: geen

    Bijvoorbeeld: "Welke vervoerders leveren nu live posities?"

    Tips voor goede antwoorden

    • Noem de halte zoals op het bord: “Amsterdam, Dam” of “Utrecht Centraal”. Je agent zoekt hem dan eerst op.
    • Tijden zijn Nederlandse tijd. Staat er realtime: false, dan is alleen de dienstregeling bekend.
    • Live posities kunnen tot ongeveer twee minuten oud zijn.
    • Een rit volgen? Vraag je agent om het voertuig te volgen tot het bij jouw halte is.

    Wat de server niet kan

    • Geen reisplanner. Er worden geen reizen met overstappen of looproutes berekend. Voor een volledig reisadvies: 9292.nl of de NS-app.
    • Treinen: wel live posities, maar vaak geen live vertraging of spoorwijziging.
    • Geen tarieven, drukte, storingsberichten of aangekondigde werkzaamheden.
    • Geen adressen of bezienswaardigheden zoeken: alleen haltenamen en coördinaten.
    • Niet elke vervoerder levert live posities. Ontbreekt een voertuig, dan kan de rit toch gewoon rijden.

    Dit staat ook in de beschrijving van de server zelf. Een goede agent vertelt het je dus als je iets vraagt wat niet kan.

    Testen zonder agent

    Met de MCP Inspector kun je de tools in je browser uitproberen. Kies daar transport Streamable HTTP en vul de server-URL in.

    Terminal
    npx @modelcontextprotocol/inspector

    Of vraag de lijst met tools direct op:

    Terminal
    curl https://ov-nu.nl/api/mcp \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

    Krijg je HTTP 429, dan zit je boven de limiet van 60 verzoeken per minuut. Wacht het aantal seconden uit de Retry-After-header af.

    Veelgestelde vragen

    Wat is de MCP-server van ov-nu.nl?

    Een gratis Model Context Protocol-server waarmee AI-assistenten zoals Claude en ChatGPT live openbaar-vervoerdata van heel Nederland opvragen: vertrektijden met vertraging, ritten en voertuigposities van bus, tram, metro, trein en veerboot.

    Hoe koppel ik ov-nu.nl aan Claude?

    Ga in Claude naar Instellingen → Connectors, kies Aangepaste connector toevoegen en vul als URL https://ov-nu.nl/api/mcp in. In Claude Code gebruik je het commando: claude mcp add --transport http ov-nu https://ov-nu.nl/api/mcp

    Hoe koppel ik ov-nu.nl aan ChatGPT?

    Zet in ChatGPT onder Instellingen → Apps & connectors → Geavanceerd de ontwikkelaarsmodus aan. Maak daarna een connector met URL https://ov-nu.nl/api/mcp en kies Geen authenticatie.

    Heb ik een API-sleutel of account nodig?

    Nee. De MCP-server is gratis en vraagt geen account of API-sleutel. Er geldt een limiet van 60 verzoeken per minuut per IP-adres.

    Kan mijn AI-agent hiermee een reis plannen?

    Nee, de server is geen reisplanner en berekent geen overstappen of looproutes. Hij vindt wel rechtstreekse ritten tussen twee haltes. Voor een volledig reisadvies gebruik je 9292.nl of de NS-app.

    Welke data gebruikt de MCP-server?

    Dezelfde data als de live kaart van ov-nu.nl: voertuigposities via NDOV Loket (KV6 en NS-treinposities), live ritinformatie van openOV en de dienstregeling van OVapi.

    Data, voorwaarden en privacy

    • Live voertuigposities: NDOV Loket (KV6 en NS-treinposities).
    • Live ritinformatie: GTFS-realtime van openOV.
    • Dienstregeling: GTFS van OVapi, dagelijks bijgewerkt.

    De data wordt geleverd zoals hij is, zonder garantie op juistheid of beschikbaarheid. Gebruik hem niet als enige bron voor tijdkritische beslissingen. Dit is een bètadienst: tools en antwoorden kunnen nog veranderen.

    De MCP-server bewaart geen vragen of antwoorden. Je IP-adres wordt alleen kort in het geheugen gebruikt voor de verzoeklimiet. Wat je agent met de antwoorden doet, valt onder de voorwaarden van je AI-aanbieder.

    Vragen of feedback? Mail naar [email protected].