Je typt: "Welke facturen van Jansen B.V. staan nog open?" De assistent zoekt eerst de relatie op en haalt daarna de openstaande posten op. Twee tool-aanroepen, in de goede volgorde, zonder dat je een toolnaam noemde. Wie heeft die keuze gemaakt? Niet Ledger Botje: het taalmodel. Maar het model kiest uit wat de server het laat zien, en op basis van wat die server erover vertelt. In deze post lees je hoe dat werkt.
Stap 1: de server publiceert een lijst met tools
Bij het verbinden vraagt de AI-client via het Model Context Protocol welke tools er zijn. De MCP-server van Ledger Botje antwoordt met een lijst, en elke tool in die lijst heeft vier onderdelen:
| Onderdeel | Voorbeeld | Waar het model het voor gebruikt |
|---|---|---|
| Naam | cashflow_receivables_search | herkennen van domein, onderwerp en actie |
| Beschrijving | "Zoek en filter vorderingen op klantcode, status of vervaldatum…" | bepalen wanneer de tool past, en wanneer niet |
| Parameters | accountCode, status, limit | invullen van de aanroep |
| Annotaties | readOnlyHint, destructiveHint | inschatten of de tool iets wijzigt |
De AI-client geeft die lijst mee aan het taalmodel, naast je vraag. Het model ziet dus geen code en geen database, alleen deze beschrijvingen.
Stap 2: wat er vooraf al uit de lijst valt
Voordat het model iets kiest, heeft de server al bepaald wat er in de lijst staat. Wat er niet in staat, kan het model niet aanroepen. Dat is bewust de plek waar je rechten regelt, en niet de prompt:
- Schrijfmodus. Staat schrijven uit in de instellingen, dan ontbreken alle tools die iets in Exact Online wijzigen.
- Toolselectie per koppeling. Per AI-client kun je een eigen set tools kiezen, met een standaard per administratie voor clients die later koppelen.
- Vrijgave per bedrijf en per collega. De beheerder bepaalt welke tools het bedrijf gebruikt en kan een collega verder beperken of op alleen-lezen zetten. Een laag kan alleen weghalen, nooit toevoegen.
- Beheerderstools. Tools in testfase zijn alleen zichtbaar voor beheerders.
De tools die beginnen met admin_, zoals admin_switch om van administratie te wisselen, blijven altijd beschikbaar. Copilot Studio gebruikt per agent hooguit 70 tools; daar is een toolselectie dus geen luxe maar een noodzaak.
Stap 3: het model kiest op naam en beschrijving
Nu legt het model je vraag naast de lijst. Drie dingen helpen het daarbij.
Vaste naamgeving. Elke toolnaam volgt het patroon domein, onderwerp, actie: sales_orders_create, financial_reporting_balance_search, accounts_search. Een vraag over "een order aanmaken" landt zo vanzelf bij de tools die met sales_orders beginnen en op create eindigen.
Beschrijvingen die zeggen wanneer wél en wanneer niet. Een goede beschrijving vertelt niet alleen wat een tool doet, maar ook welke tool je beter kunt gebruiken. Zo zegt financial_reporting_balance_search dat zoeken op het woord "omzet" rekeningen mist en dus niet geschikt is om omzet op te tellen, dat omzet als credit negatief staat, en dat je voor een dashboard beter groupBy gebruikt dan pagina na pagina losse rijen. Zulke zinnen sturen het model weg van een tool die op het eerste gezicht past maar een verkeerd antwoord geeft.
Volgorde in de beschrijving. Veel taken vragen meerdere stappen. Een boeking heeft een relatie nodig, een bijlage moet eerst geüpload worden voordat je hem koppelt. De beschrijving noemt die volgorde, en het model maakt er een reeks aanroepen van. Bij de vraag over Jansen B.V. is dat eerst accounts_search en dan cashflow_receivables_search.
Elke tool heeft daarnaast een parameter context, waarin het model kort zegt waarom het de tool aanroept. Dat komt in de log van de aanroep, en zo zien we bij een melding niet alleen welke tool gekozen werd, maar ook waarom.
Stap 4: bij een schrijfactie volgt een bevestiging
De annotaties uit stap 1 zeggen of een tool alleen leest (readOnlyHint) en of hij iets onomkeerbaars doet (destructiveHint). AI-clients gebruiken dat om bij schrijfacties om toestemming te vragen; hoe dat eruitziet, verschilt per client. Voor tools met grote gevolgen gaat de beschrijving een stap verder. financial_entries_match (afletteren) vraagt het model om eerst de posten, bedragen en het saldo te tonen en pas na jouw akkoord aan te roepen, omdat ontkoppelen alleen in Exact Online zelf kan.
Stap 5: het antwoord bepaalt de volgende stap
Na een aanroep leest het model het resultaat en beslist het opnieuw: klaar, of nog een tool? Ook daar stuurt de server mee:
- Leeg resultaat. Heeft de breedste zoekopdracht niets opgeleverd, dan zegt de tool
STOP, zodat het model niet eindeloos varianten probeert. Bij een te streng filter zegt hij welk filter je kunt verruimen. - Einde van de lijst. Een lege pagina na de eerste geeft
pastEnd: true: verder bladeren heeft geen zin. - Versheid. Rapportagetools melden hoe oud hun cijfers zijn, en een onvolledige verversing staat als
cacheRefreshin het antwoord. - Verbinding. Werkt de verbinding met Exact Online niet, dan staat in het antwoord wat de gebruiker moet doen, en dat het model de aanroep niet moet herhalen.
Een fout is dus geen dood spoor maar een instructie. Dat scheelt aanroepen, en het voorkomt dat een assistent een order twee keer aanmaakt omdat hij dacht dat de eerste mislukt was.
Zo krijg je sneller de juiste tool
- Noem object en actie. "Maak een verkooporder aan voor…" is beter dan "zet dit even in Exact".
- Noem de administratie als je er meerdere hebt. De assistent wisselt dan eerst met
admin_switch. - Zeg wat niet mag. "Alleen opzoeken, niets wijzigen" is een duidelijke grens voor het model. Wil je het zeker weten, zet schrijven dan uit.
- Beperk de toolselectie tot wat je gebruikt. Minder keuze betekent minder kans op een verkeerde keuze, en bij Copilot Studio is het nodig.
- Begin met een prompt uit de promptbibliotheek. Die zijn getest op de juiste tools en volgorde.
- Meld het als het misgaat. Vraag de assistent om
admin_feedbackte gebruiken. Met die meldingen en decontextuit de log passen we beschrijvingen aan.
Wie bepaalt wat
| Beslissing | Wie |
|---|---|
| Welke tools beschikbaar zijn | Ledger Botje, op basis van abonnement, schrijfmodus, toolselectie en vrijgave |
| Wat een tool doet en wanneer hij past | Ledger Botje, via naam, beschrijving en parameters |
| Welke tool wordt aangeroepen, en in welke volgorde | het taalmodel van je AI-assistent |
| Of een schrijfactie doorgaat | jij, via de bevestiging van de client, en Exact Online zelf |
Alle tools met hun beschrijving staan in de toolcatalogus. Loopt een koppeling vast, lees dan MCP-koppeling problemen oplossen.