MCP-starterkit: geef AI-agents veilige toegang tot interne systemen
We gebruiken deze starterkit als een agent toegang nodig heeft tot interne systemen, zoals een CRM, een ERP of een documentopslag. Je krijgt vanaf de eerste commit een Model Context Protocol-server in TypeScript, gebouwd op Effect, met login, afgebakende rechten en een registratie van elke aanroep.
Wat erin zit
Inloggen via je identity provider
De server is een OAuth protected resource. MCP-clients vinden via de server je identity provider, of dat nu Keycloak, Auth0, Entra ID of Okta is, en verbinden namens een ingelogde gebruiker. Gehashte, intrekbare API-sleutels zijn er voor jobs en services.
Scopes per tool
Elke tool geeft aan welke scope hij nodig heeft, en één controle toetst die bij elke aanroep, zodat geen enkele tool de check kan overslaan.
Getypeerde tools
Parameters, resultaten en fouten zijn Effect-schema's. Clients krijgen een JSON-schema, foute input wordt geweigerd voordat die je systemen bereikt, en de agent krijgt foutmeldingen waar hij iets mee kan.
Auditlogging
Elke tool-aanroep komt in Postgres met de aanroeper, client, tool, argumenten, uitkomst en duur. Geweigerde aanroepen worden ook vastgelegd.
Rate limits en time-outs
Limieten per aanroeper en per tool, op basis van Redis, en een tijdslimiet op elke aanroep beschermen de systemen achter de server tegen agents die in een lus blijven hangen.
Tests
Tests die de server via een echte MCP-client aansturen en login, scopes, limieten en het auditspoor dekken, plus Postgres-tests die in CI draaien.
Hoe het in elkaar zit
- 01
Verbinden
Een MCP-client, zoals Claude, Cursor of een interne agent, verbindt via streamable HTTP. Zonder token wordt hij naar je identity provider verwezen en doorloopt daar de OAuth-flow.
- 02
Autoriseren
De server controleert het token met de gepubliceerde sleutels van de provider, of zoekt de API-sleutel op, en toetst de scope die de tool vereist.
- 03
Uitvoeren
De tool roept het interne systeem aan via een kleine client die doorgeeft wie de aanroeper is, met rate limits en time-outs.
- 04
Vastleggen
De aanroep komt in het auditlog en er gaat een getypeerd resultaat terug naar de agent.
Een blik op de code
Een read-only tool met een getypeerd resultaat, een scopecheck en een regel in het auditlog.