
Model Context Protocol
Het Model Context Protocol (MCP) is al al enige tijd flink populair aan het worden. Niet gek ook, want zoals veel mensen hebben ervaren kan je met MCP de capaciteiten van je bestaande LLM's ongelooflijk uitbreiden. Wij zijn er natuurlijk ook behoorlijk enthousiast over en zijn hier ook regelmatig mee bezig.
Ik schreef al eerder over een van mijn eerste experimenten met MCP-servers in een eerder blogartikel (Het recept voor een eindeloze taak). In dat artikel beloofde ik ook dat we binnenkort een blogserie zouden starten waarin we deze concepten uitgebreid zouden gaan verkennen. Het is tijd om die belofte waar te maken. In deze blogserie gaan we duidelijkheid proberen te geven over MCP.
Maar om dat te doen, moeten we het eerst hebben over tool use
.
Kennis en context
En voordat we het over tool use
kunnen hebben, moet ik eerst nog een stapje terug doen, en het gaan hebben over de werking van LLM's.
LLM's zijn heel goed in het genereren of voorspellen van teksten. Het is een simplificatie, maar we kunnen voor het gemak het 'brein' van de LLM zien als één groot bestand, met daarin een grote verzameling van verbanden en samengeperste kennis, waarmee de LLM bepaalt welke reactie hij produceert op basis van de voorgaande tekst.
Deze kennis is 'statisch': een LLM zal geen nieuwe weetjes of feitjes meer leren. En de kennis van een LLM heeft daarom een 'cutoff date'. Dat wil zeggen dat alle kennis die een LLM heeft van voor deze datum is.

Het weer 🌤️
Stel dat we nu de klassieke vraag aan de LLM stellen: wordt het morgen mooi weer?
De LLM weet dit niet, want deze kennis is niet aanwezig in zijn 'brein'. Maar de LLM heeft mogelijk wel een hoop kennis over weerpatronen. Hij zou dus kunnen kijken wat de normale weersverwachting is rond deze datum en op basis daarvan een antwoord kunnen formuleren. Maar dan loopt de LLM eerst nog tegen een ander probleem aan: een LLM weet niet wat de datum van vandaag is, dus weet ook niet wat de datum van 'morgen' is.
Wat kan de LLM nu doen? Hij kan dit aan de gebruiker vragen.
Hieronder een denkbeeldige conversatie over hoe dat zou kunnen lopen:
Het kan ook zijn dat de LLM zich er niet bewust van is dat deze niet weet welke datum het is. Ik was in de eerste instantie namelijk vrij verbaasd toen Gemma 3n mij niet om de datum vroeg.
Het volgende gesprek vond plaats op 3 juli, op mijn lokale computer:
Gemma 3n is nogal breedsprakig, dus hier en daar heb ik de reacties (flink) ingekort. Maar de teksten zelf zijn inhoudelijk onveranderd.
Ik heb daarna nog 3 keer een nieuw gesprek gestart met de vraag wat de datum was, en kreeg 3 verschillende antwoorden: 14 mei, 16 mei en 26 april 2024.
In andere woorden:
De LLM is aan het hallucineren 😱
Pas dus goed op met plannen maken op basis van de weersvoorspelling van een LLM!

Volgende keer toch even verifiëren of het klopt wat de LLM schrijft?
De systeemprompt
Maar mijn LLM weet de datum wel!
Ja, waarschijnlijk heb je tijdens je eigen chatsessies al meegemaakt dat de LLM de datum wel weet. Hoe kan dat? Dit komt hoogstwaarschijnlijk door de systeemprompt.
Wanneer je met een LLM gaat praten, is jouw bericht niet het 'eerste' bericht wat de LLM te zien krijgt. De LLM krijgt namelijk vooraf al een prompt met daarin globale instructies. De prompt van ChatGPT zou er bijvoorbeeld zo uit kunnen zien:
Jij bent ChatGPT, een behulpzame en vriendelijke AI-assistent. Beantwoord vragen duidelijk en beknopt. Gebruik een positieve toon en geef waar mogelijk praktische tips. Het is vandaag 2025-07-03.
Maar natuurlijk staat lang niet alles staat deze systeemprompt. Sterker nog: je wilt deze zo klein mogelijk houden, want je hebt namelijk ook nog te maken met de context window. Een context window is de maximale hoeveelheid ruimte die een LLM beschikbaar heeft om tekst (eigenlijk tokens) te kunnen verwerken. De context window bevat alles: de systeemprompt, jouw berichten, de berichten van de LLM. Hoe langer een chat duurt, hoe meer deze context window dus groeit. En als je dus begint met een ongelooflijk grote systeemprompt, is er minder ruimte over voor de uiteindelijke chatberichten.
de systeemprompt
De datum van vandaag is nu dus aanwezig in de context van de LLM. Zouden we dat in theorie ook niet gewoon met de weersvoorspelling kunnen doen? Als we nou gewoon de systeemprompt uitbreiden met de weersverwachting van de komende week, dan kan de LLM een correct antwoord geven op onze vraag!
Maar die aanpak heeft natuurlijk wel enkele nadelen:
- Het heeft alleen nut als de gebruiker een vraag stelt die binnen ons bereik valt. Als hij bijvoorbeeld vraagt of het over 8 dagen mooi weer is, of bijvoorbeeld het weer van zijn vakantiebestemming wilt weten, zijn we weer terug bij af.
- Zelfs als de gebruiker een vraag stelt die binnen het bereik valt, kan het zijn dat precies die informatie niet erin zit. Bijvoorbeeld: hoeveel uur zon wordt er morgen verwacht? Zijn er pollen in de lucht?
- En het grootste gedeelte van de tijd komt het weer waarschijnlijk helemaal niet ter sprake. Maar we hebben wel de context van deze LLM gevuld met allerlei ongebruikte informatie.
Idealiter zou je dus deze specifieke informatie over het weer alleen willen toevoegen aan de context wanneer dit relevant is voor het gesprek. En dat is precies een van de mogelijkheden die je krijgt door middel van tool use
.
Tool use
Nu we duidelijk hebben wat we bedoelen met de begrippen context en systeemprompt, en wat de limitaties hiervan zijn, kunnen we het gaan hebben over tool use.
In het vorige hoofdstuk opperden we het idee om de systeemprompt van de LLM te vullen met de data van de weersvoorspelling. Maar in plaats daarvan, zetten we nu iets anders in deze systeemprompt: namelijk de manier hoe de LLM deze informatie zelf op kan halen, wanneer de LLM besluit dat dit nodig is. In andere woorden: we geven de LLM een tool
die hij kan gebruiken om deze data zelf op te halen.
We nemen weer ons verzonnen ChatGPT-systeemprompt als voorbeeld:
Jij bent ChatGPT, een behulpzame en vriendelijke AI-assistent. Beantwoord vragen duidelijk en beknopt. Gebruik een positieve toon en geef waar mogelijk praktische tips. Het is vandaag 2025-07-03, en de gebruiker bevindt zich in Hoorn.
Jij hebt de mogelijkheid om de 'weersvoorspellingstool' aan te roepen. Je kunt een verzoek sturen naar deze tool om de weersvoorspelling van een datum + locatie te krijgen.
-- en dan volgen hier wat technische instructies hoe dit moet --
En nu is onze LLM dus in staat om de weersvoorspelling zelf op te vragen, en heeft hij opeens toegang tot 'dynamische' informatie.
De mogelijkheden van tool use
Wat hierboven eigenlijk is gebeurd, is dat we de mogelijkheden van onze LLM hebben uitgebreid - hij kan opeens letterlijk meer. De LLM zelf is niet veranderd. De LLM heeft nog steeds hetzelfde statische brein. Maar toch zijn de capaciteiten van deze LLM toegenomen, omdat hij nu een tool erbij heeft.
Je kunt je misschien voorstellen dat het hier niet bij hoeft te blijven. We kunnen immers veel meer tools bedenken die onze LLM zou kunnen gebruiken. Denk bijvoorbeeld aan:
- De huidige datum en tijd ophalen
- Informatie ophalen uit je agenda
- Acties uitvoeren op je lokale computer, zoals het vinden van foto's of het opruimen van bestanden
Hoe meer tools je aan je LLM toevoegt, hoe krachtiger deze wordt! De mogelijkheden hiervoor lijken bijna eindeloos. Deze capaciteiten zijn bijvoorbeeld ook essentieel voor de goede werking van recente AI-IDE omgevingen zoals Cursor en Windsurf.

Hoe meer tools, des te meer mogelijkheden een LLM krijgt
Er is alleen wel één nadeel. Het is een hoop (maat)werk om deze tools steeds toe te voegen. Want iedere tool werkt weer op zijn eigen manier, heeft zijn eigen instructies en stappen. Het zou bijvoorbeeld best kunnen dat mijn collega Mark eindelijk zijn tool klaar heeft waarmee je de tijden kunt ophalen wanneer de spoorwegovergang op onze route gesloten is, maar voor het integreren van deze tool in mijn systeemprompt zijn er weer heel andere configuraties en installaties nodig dan bijvoorbeeld die van de weersvoorspellingen.
Wat een gedoe! Zou hier niet een oplossing voor zijn?
Jullie weten vast wel waar dit naar toe gaat. In ons volgende artikel kunnen we het eindelijk gaan hebben over MCP en hoe MCP dit probleem oplost.