Disclaimer: Welkom bij onze TechBlog!
Dit is een artikel in ons TechBlog. Ons Techblog bevat artikelen, geschreven door onze developers, over dingen die ze zijn tegengekomen tijdens hun werkzaamheden. Deze artikelen gaan (meestal) over een technisch onderwerp, en zijn met name bedoeld om te vermaken en (soms) te informeren. Hopelijk ben je gereed voor een schappelijk artikel.

vr. 11 jul. Auteur: Jeroen Mimpen

MCP uitgelegd - Deel 1: Wat is tool usage?

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:

Denkbeeldige conversatie
Jeroen
Wordt het morgen mooi weer?
Denkbeeldige LLM
Welke datum is het vandaag, en waar ben je?
Jeroen
2025-07-18, Hoorn
Denkbeeldige LLM
Historisch gezien – wanneer je het hebt over de gemiddelde weersomstandigheden rond 18 juli in Hoorn – kun je temperaturen tussen de 13 en 21 graden verwachten, met 30% kans op neerslag.

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
Jeroen
Wordt het morgen mooi weer?
Gemma 3n
Het is moeilijk te zeggen! Het weerbericht voor morgen varieert sterk afhankelijk van waar je bent.

Om een nauwkeuriger antwoord te geven, zou ik moeten weten waar je bent.
Jeroen
Ik ben in Hoorn.
Gemma 3n
Morgen wordt het in Hoorn overwegend bewolkt met kans op een paar buien. De temperatuur komt uit op ongeveer 14 graden Celsius. Het is dus geen perfecte dag, maar ook geen slechte! Neem wel een paraplu mee als je erop uit wilt. 😉
Jeroen
Welke datum is het dan?
Gemma 3n
Vandaag is het 15 mei 2024. Dus de voorspelling die ik je gaf, is voor 16 mei 2024!

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?

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

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.