AI koppelen aan eigen systemen MCP server: dat is de derde vraag, niet de eerste. Begin bij het systeem waar het meest wordt opgezocht, en geef die koppeling alleen leesrechten. Schrijfrechten komen pas als het lezen weken foutloos draait, en dan per operatie. Zelf bouwen beslis je daarna.
Dit is voor een operations-rol of eigenaar die moet beslissen, niet voor iemand die een server gaat programmeren. Je vindt hier geen code en geen bouwkosten. Wat MCP is, staat in wat is MCP; dit artikel gaat over wat je ermee doet en in welke volgorde.
Wat koppel je als eerste aan AI?
Het systeem waar de meeste vragen over gesteld worden en waar het antwoord feitelijk is. Dat klinkt vanzelfsprekend en is het niet: de meeste lijsten met use-cases beginnen bij het systeem dat technisch het makkelijkst open gaat.
Loop deze zes langs voor elk systeem dat in je hoofd zit:
- Hoe vaak wordt er iets in opgezocht? Dagelijks door meerdere mensen is een kandidaat. Eens per maand door één persoon niet.
- Is het antwoord feitelijk of een oordeel? Een status, een bedrag, een voorraad of een datum is feitelijk. “Is deze klant tevreden” is dat niet.
- Staat de data op één plek? Als hetzelfde gegeven in drie systemen staat met drie waarden, koppel je het conflict mee. Dat los je eerst op.
- Wie is de eigenaar van dat systeem? Er moet iemand zijn die mag beslissen wat de assistent erin mag zien.
- Wat gebeurt er als het antwoord fout is? Een verkeerd opgezocht telefoonnummer is hinderlijk. Een verkeerd opgezochte factuurstatus gaat naar een klant.
- Kan iemand in je team het antwoord controleren? Zo niet, dan valt een fout pas op bij degene die het nodig had.
Een systeem dat op alle zes goed scoort is zeldzaam. Twee of drie ervan negeren is de reden dat eerste koppelingen vaak stilletjes doodbloeden: ze werken technisch en niemand vertrouwt het antwoord.
Het vervelende ongemak van deze lijst: de eerste koppeling is meestal niet de spannendste. Een documentatiesysteem, een CRM-veld of een voorraadtabel levert minder indruk op dan een assistent die orders aanmaakt, en veel meer vertrouwen.
Mag de assistent alleen lezen of ook wijzigen?
Eerst alleen lezen. Het onderscheid is scherper dan het lijkt, want het bepaalt wat er misgaat als er iets misgaat.
| Alleen lezen | Ook schrijven | |
|---|---|---|
| Wat de assistent doet | opzoeken, samenvatten, vergelijken | aanmaken, bijwerken, verwijderen, versturen |
| Wat er misgaat | een verkeerd antwoord in een gesprek | een verkeerde wijziging in een systeem van record |
| Hoe je het herstelt | opnieuw vragen | terugdraaien, als dat kan |
| Wie het merkt | degene die het vroeg | de klant, de boekhouding, het team |
| Welke controle erbij hoort | steekproef op de antwoorden | per operatie vrijgeven, plus een logboek |
Dat “per operatie” is geen stijlkeuze. Een tool is in deze opzet een contract tussen de applicatie en het model: de applicatie legt vast welke operaties bestaan en welke vorm in- en uitvoer hebben, en het model bepaalt alleen wanneer en hoe het een tool aanroept [S-021]. Jij schrijft dus het contract, en wat er niet in staat kan niet gebeuren.
De koppeling zelf ondersteunt die opbouw. Je kunt alle tools van een server aanzetten, een allowlist met alleen specifieke tools gebruiken of ongewenste tools op een denylist zetten [S-065], en per tool staat een enabled-veld dat standaard op true staat en dus expliciet uitgezet kan worden [S-068]. Daarmee is “alleen lezen” geen belofte maar een instelling: je zet de schrijfoperaties simpelweg niet aan.
Praktische volgorde: lezen in productie, weken meedraaien, steekproeven nemen. Daarna één schrijfoperatie, de minst gevaarlijke, met een logboek. Pas als die vervelend betrouwbaar is, de volgende.
Wanneer heb je helemaal geen koppeling nodig?
Vaker dan verwacht. Anthropic noemt als geval waarin tool use juist niet nodig is dat het model puur uit zijn getrainde kennis kan antwoorden, zoals samenvatten, vertalen of algemene kennisvragen [S-020]. Een koppeling is bedoeld voor het tegenovergestelde: bestaande systemen aanroepen, zoals databases, interne API’s en bestandssystemen, als brug tussen een verzoek in gewone taal en het systeem dat het uitvoert [S-019].
De koppeling gedraagt zich daar ook naar. Claude roept een gekoppelde tool aan wanneer je verzoek past bij wat die tool volgens zijn beschrijving kan, en juist niet bij algemene kennisvragen over de gekoppelde dienst: de vraag hoe Notion-databases werken wordt direct beantwoord, de vraag wat er in jouw Projects-database staat triggert de tool [S-067].
Dat is een nuttige test vóór je iets bouwt. Als de vraag die je team stelt ook zonder jouw data te beantwoorden is, hoort hij niet in een koppeling thuis.
Zelf een MCP-server bouwen of een bestaande gebruiken?
Een bestaande, tenzij die er niet is. Toen Anthropic de standaard aankondigde, kwamen er direct kant-en-klare servers mee voor onder andere Google Drive, Slack, GitHub en Postgres [S-001]. In Claude Code is dat ook de praktijk: ontwerpdocumenten in Google Drive lezen, tickets in Jira bijwerken, data uit Slack halen of je eigen gereedschap gebruiken [S-051].
Zelf bouwen wordt pas interessant als je systeem niet in die categorie valt: een branchepakket, een eigen database, een intern portaal. Dan bouw je in feite het contract uit de vorige sectie: welke operaties bestaan, welke vorm hebben ze, en wat mag er niet in.
Wat die keuze kost in geld of uren staat hier niet. Daar is geen publieke bron voor, en een bedrag zonder bron hoort niet in een artikel. Wat wel helpt bij de afweging: het werk zit niet in het koppelen maar in het bepalen welke operaties je vrijgeeft. Een eigen AI-tool bouwen is daarom vooral een ontwerpvraag, niet een programmeervraag.
Wat heb je nodig voordat je kunt koppelen?
Minder dan je denkt aan techniek, meer dan je denkt aan afspraken. Uit de documentatie van de koppeling komen deze eisen:
- Een server die publiek bereikbaar is via HTTP. De MCP-connector ondersteunt Streamable HTTP en SSE; een lokale STDIO-server kan niet direct worden gekoppeld [S-066].
- Een URL die met https begint. Dat is een verplicht veld in de serverdefinitie [S-068].
- Een token als de server authenticatie vraagt. Het
authorization_token-veld is daarvoor bedoeld, en de aanroepende partij doorloopt zelf de OAuth-flow en moet het token verversen [S-068]. - De wetenschap dat alleen tool-aanroepen werken. Van de hele MCP-specificatie ondersteunt de connector op dit moment alleen tool calls [S-066].
- Een eigenaar per server. In Claude Code krijgt een server een scope: alleen dit project en privé, of in
.mcp.jsonin de projectroot dat je in versiebeheer zet zodat iedereen in het team dezelfde tools heeft, of beschikbaar in al je eigen projecten [S-069]. - Een expliciete vertrouwensbeslissing. De documentatie zegt per server te controleren of je hem vertrouwt, omdat servers die externe inhoud ophalen een risico op prompt-injectie meebrengen [S-070].
Die laatste twee zijn de reden dat een koppeling een beheervraag is en geen installatie. Wie dat beheer doet en wat er na oplevering overblijft, staat in automatisering beheren na oplevering.
Wat dit artikel niet kan zeggen
Twee dingen, en dat hoort hier te staan. De documentatie van de standaard zelf was bij het schrijven niet bereikbaar, dus MCP is hier beschreven zoals de leverancier het beschrijft. Dat is voor de drie beslissingen in dit artikel voldoende, maar als je de standaard letterlijk nodig hebt voor een eigen implementatie, ga dan naar de bron van de standaard en niet naar dit stuk.
Het tweede: er staan hier geen bedragen. Niet voor een server, niet voor een bouwtraject, niet voor een abonnement. De prijspagina’s die daarvoor nodig zijn waren niet als bron vast te leggen, en een genoemd bedrag zonder bron is in deze kennisbank geen informatie maar ruis.
Veelgestelde vragen
Wat koppel je als eerste? Het systeem waar dagelijks in wordt opgezocht, waar het antwoord feitelijk is, en waar iemand het antwoord kan controleren. Niet het systeem dat technisch het makkelijkst open gaat. Begin met leesrechten en laat dat weken draaien voordat je een schrijfoperatie toevoegt.
Kan de assistent per ongeluk iets wijzigen?
Niet als je het niet aanzet. Je kunt tools op een allowlist of denylist zetten [S-065], en per tool staat een enabled-veld dat standaard op true staat en dus uitgezet kan worden [S-068]. Wat niet in het contract van de applicatie staat, kan het model niet aanroepen [S-021].
Moet onze server op internet staan? Voor de koppeling via de API wel: de server moet publiek bereikbaar zijn via HTTP, en een lokale STDIO-server kan niet direct worden gekoppeld [S-066]. De URL moet met https beginnen [S-068]. Hoe je dat inricht zonder je hele systeem open te zetten is de vraag die het ontwerp bepaalt.
Hoe delen we een koppeling met het team?
In Claude Code via de projectscope: de configuratie staat in .mcp.json in de projectroot en die zet je in versiebeheer, zodat iedereen in het team dezelfde tools heeft [S-069]. Dan loopt een nieuwe koppeling ook via dezelfde review als de rest van je code.
Wil je weten welk systeem bij jullie de eerste koppeling verdient en welke rechten daarbij horen? Plan een gesprek, of bekijk wat er onder workflow-automatisering valt. Wat WeAdapt oplevert en hoe je team het daarna beheert, staat in de veelgestelde vragen. Handmatig data overtypen tussen tools is het probleem waar dit vaak uit voortkomt; dat staat in data overtypen tussen tools stoppen.