Je winkelwagen is leeg
Producten die je toevoegt, verschijnen hier.
JMAP past beter bij AI-agents dan IMAP of POP3: JSON over HTTPS, batching en alleen wat veranderd is. Met RFC-bronnen, de eerlijke kant en wat nu al kan.
Samenvatting: jmap ai agents en hun toepassingen
Een AI-agent werkt in losse tool-calls met JSON-argumenten. JMAP is JSON over HTTPS, bundelt zoeken en ophalen in één request en geeft alleen terug wat sinds de vorige keer veranderd is. Daarom is het een betere basis dan IMAP of POP3. Weinig providers bieden JMAP aan, KeurigOnline ook niet: bij ons koppel je een agent via IMAP, met een apart mailadres en wachtwoord voor de agent.
Steeds meer mensen hangen een AI-agent aan hun mailbox. Claude, ChatGPT of een eigen script leest via een MCP
KeurigOnline zegtMCPMCP (Model Context Protocol) is een open standaard waarmee AI-assistenten verbinding maken met externe tools en gegevensbronnen.-server je mail, vat die samen en schrijft concepten. Het protocol onder die koppeling bepaalt hoeveel stappen, tokens en lijmcode dat kost. Bij jmap ai agents is de stelling van dit stuk simpel: JMAP past beter bij een agent dan IMAP
KeurigOnline zegtIMAPIMAP (Internet Message Access Protocol) is een protocol voor het ontvangen en beheren van e-mail op een externe server. en POP3
KeurigOnline zegtPOP3POP3 (Post Office Protocol versie 3) is een e-mailprotocol waarmee je berichten van een mailserver downloadt en lokaal opslaat..
Daar hoort meteen een kanttekening bij. Weinig mailproviders bieden JMAP aan, en wij ook niet. Dit artikel gaat dus over welke basis beter is, en over wat je vandaag al kunt. Weet je nog niet wat JMAP is? Lees dan eerst wat JMAP is en hoe het werkt.

Een agent werkt in losse stappen. Elke stap is een tool-call: een JSON
KeurigOnline zegtJSONJSON (JavaScript Object Notation) is een tekstformaat waarmee websites, apps en API's gegevens uitwisselen.-object met argumenten volgens een inputSchema in JSON Schema, verstuurd met tools/call over JSON-RPC 2.0[4]. Bouw je zelf een agent met tool calling, dan zie je hetzelfde patroon terug bij Google Genkit configureren voor agentic applicaties.
Daaruit volgen vier eisen aan het mailprotocol eronder:
Die vier eisen zijn de meetlat voor de rest van dit artikel. POP3 valt er direct af. Het kent geen mappen en geen synchronisatie: de mailbox is één platte lijst berichten om te downloaden[6]. Voor een agent is dat het slechtste startpunt.
IMAP is een sessie met status. Een verbinding zit in een van vier states, en je moet eerst een mailbox selecteren voordat commando's op berichten werken. "Only one mailbox can be selected at a time in a connection"[3]. Daarnaast stuurt de server untagged *-responses in een eigen tekstsyntax, die de MCP-server zelf moet parsen.
JMAP werkt anders. Elk verzoek is één HTTPS
KeurigOnline zegtHTTPSHTTPS (HyperText Transfer Protocol Secure) is HTTP over een versleutelde TLS-verbinding tussen browser en webserver.-POST naar de apiUrl met één JSON-object, en elk verzoek is geauthenticeerd en staat op zichzelf[1]. Dat is dezelfde vorm als een tool-call.
Voor de MCP-server maakt dat veel uit. Bij JMAP is zijn werk grotendeels doorgeven: JSON
KeurigOnline zegtJSONJSON (JavaScript Object Notation) is een tekstformaat waarmee websites, apps en API's gegevens uitwisselen. in, JSON uit. Bij IMAP moet hij een open verbinding met status bijhouden, de geselecteerde map onthouden en tekstresponses omzetten naar JSON voor elke losse call van de agent.
Een JMAP-request bevat een lijst methodCalls. Met een argument dat begint met # en een ResultReference (resultOf, name, path) haalt de ene call zijn argument uit het resultaat van een eerdere call in hetzelfde request[1]. Zoeken en ophalen passen zo in één tool-call. Dat betekent minder agent-stappen, minder wachttijd en minder tokens in de context.
Dit request zou een agent-tool kunnen sturen om de tien nieuwste mails in de inbox te lezen:
{
"using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],
"methodCalls": [
["Email/query", {
"accountId": "u1",
"filter": { "inMailbox": "mb-inbox", "after": "2026-11-01T00:00:00Z" },
"sort": [{ "property": "receivedAt", "isAscending": false }],
"limit": 10
}, "q"],
["Email/get", {
"accountId": "u1",
"#ids": { "resultOf": "q", "name": "Email/query", "path": "/ids" },
"properties": ["from", "subject", "receivedAt", "preview"]
}, "g"]
]
}Zo lees je het:
u1 komt uit primaryAccounts in de Session.mb-inbox heeft de agent één keer opgehaald met ["Mailbox/query", {"accountId": "u1", "filter": {"role": "inbox"}}, "m"]. Mailbox-ids veranderen nooit, dus hij kan het id bewaren[2].#ids is de back-reference: Email/get krijgt de ids uit het resultaat van call q.Let op: een back-reference werkt alleen op het hoogste niveau van het arguments-object.
"#inMailbox" binnen filter is dus geen geldige back-reference.Mailbox/query overnemen.Met IMAP doet de MCP-server voor hetzelfde resultaat: verbinden, LOGIN, SELECT INBOX, SEARCH SINCE, FETCH, en daarna de untagged responses parsen.
Email/query filtert en sorteert op de server. Het filter kent onder meer inMailbox, after, before, from, subject, text en hasAttachment, te combineren met AND, OR en NOT. Sorteren op receivedAt moet elke server ondersteunen[2]. Met collapseThreads krijgt de agent één mail per thread.
Met properties in Email/get haalt de agent alleen afzender, onderwerp en preview op. De volledige MIME-body blijft op de server tot hij die echt nodig heeft. Zo blijft de output klein.
Elke mailbox heeft ook een role, zoals inbox, sent of drafts, los van de vertaalde naam. Twee mailboxen met dezelfde role in één account mogen niet bestaan[2]. Een agent hoeft dus niet te raden tussen "Sent" en "Verzonden items".
IMAP kan overigens ook op de server zoeken, met het SEARCH-commando[3]. JMAP onderscheidt zich in de vorm: filters als JSON en vaste roles in plaats van mapnamen.
Een agent die elk kwartier kijkt, hoeft niet de hele inbox opnieuw te lezen. Hij stuurt Email/changes met de sinceState van de vorige keer en krijgt terug welke berichten created, updated of destroyed zijn, met hasMoreChanges als er meer is. Servers horen dat te kunnen berekenen voor elke state string van de afgelopen 30 dagen[1]. De agent bewaart dus één string tussen twee runs.
Wil je een agent die reageert op nieuwe mail in plaats van te pollen? Dan biedt JMAP push via EventSource (text/event-stream op de eventSourceUrl) of via een PushSubscription[1].
IMAP heeft hiervoor ook oplossingen: IDLE, en de extensies CONDSTORE en QRESYNC voor efficiënte synchronisatie[7]. Bij JMAP is het één state string in JSON, zonder open verbinding die de MCP-server in leven moet houden.
Bij JMAP zit versturen in hetzelfde protocol. De capability urn:ietf:params:jmap:submission dekt Identity (de afzenderadressen) en EmailSubmission[2]. Met EmailSubmission/set en onSuccessUpdateEmail verplaatst de server het concept na verzending naar Sent en haalt hij het $draft-keyword weg[2].
Bij IMAP loopt versturen via SMTP
KeurigOnline zegtSMTPSMTP (Simple Mail Transfer Protocol) is het protocol waarmee mailprogramma's en mailservers e-mail versturen.. Dat is een tweede protocol met een eigen verbinding, eigen authenticatie en eigen foutmeldingen. Daarna moet de verzonden mail nog apart in de Sent-map worden opgeslagen. Voor een agent betekent JMAP één credential en één API
KeurigOnline zegtAPIEen API (Application Programming Interface) is een set regels en protocollen waarmee softwareapplicaties met elkaar kunnen communiceren en gegevens uitwisselen., tegenover twee protocollen die de MCP-server aan elkaar moet knopen.
Juist dat gemak maakt een bevestigingsstap belangrijk. Hoe je die inricht, lees je verderop bij de risico's.
RFC 8620 schrijft geen authenticatiemethode voor: "How to obtain credentials is out of scope for this document"[1]. Basic auth is "NOT RECOMMENDED". Gebruikt een server het toch, dan hoort hij per client een apart app-wachtwoord te laten aanmaken dat je los kunt intrekken[1].
OAuth met Bearer-tokens en scopes is dus een keuze van de server, geen eis van JMAP. Het past wel goed bij MCP
KeurigOnline zegtMCPMCP (Model Context Protocol) is een open standaard waarmee AI-assistenten verbinding maken met externe tools en gegevensbronnen.. Autorisatie in MCP is optioneel, maar over HTTP
KeurigOnline zegtHTTPHTTP (HyperText Transfer Protocol) is het protocol dat de communicatie tussen webclients en servers mogelijk maakt. is die gebaseerd op OAuth 2.1 met een Authorization: Bearer-header[5]. JMAP is daarmee niet vanzelf veiliger dan IMAP
KeurigOnline zegtIMAPIMAP (Internet Message Access Protocol) is een protocol voor het ontvangen en beheren van e-mail op een externe server.. De veiligheid hangt af van hoe de server toegang regelt.
Dan de ontdekking. Een geauthenticeerde GET op de Session geeft capabilities, accounts, primaryAccounts, apiUrl en eventSourceUrl terug[1]. De agent ziet zelf of de server versturen ondersteunt en waar hij zijn requests heen stuurt, zonder dat iemand dat in een config hoeft te zetten.
Weinig partijen. Fastmail is de bekende provider. Aan serverkant zijn er onder meer Stalwart, Cyrus IMAP en Apache
KeurigOnline zegtApacheApache HTTP Server is een open source webserver ontwikkeld door de Apache Software Foundation. James[8]. De grote namen staan er niet bij.
Gmail en Microsoft 365 hebben geen JMAP. Ze hebben wel eigen JSON-API's met OAuth-scopes, en daar praten agents nu al mee. De Gmail API kent scopes als gmail.readonly. Een messages.list geeft alleen id en threadId terug, dus per mail is een extra messages.get nodig[10]. Microsoft Graph heeft permissies als Mail.ReadBasic en Mail.Read[11].
Het Dovecot-team heeft geen plannen voor JMAP[9]. KeurigOnline draait Dovecot, dus bij ons krijg je IMAP en POP3 en geen JMAP. De basis van het protocol zelf staat in ons artikel JMAP: wat is dat?
Zonder JMAP kan het ook. Het kost de MCP-server alleen meer vertaalwerk.
Een agent veilig koppelen in 3 stappen
Hoeveel mailadressen je hebt, hangt af van je pakket: 5 bij Start, 10 bij Plus en onbeperkt bij Pro en bij Business hosting. Wil je MCP ook voor je website gebruiken? Lees dan hoe WordPress MCP werkt en hoe je AI-agents inzet op je WordPress-site.
Inkomende mail is input van onbekenden. Een mail kan instructies bevatten die de agent als opdracht leest: indirecte prompt injection. OWASP noemt precies dit scenario, een "LLM
KeurigOnline zegtLLMEen LLM (large language model) is een AI-model dat met enorme hoeveelheden tekst is getraind om taal te begrijpen en te schrijven.-powered email assistant" die zo werd misbruikt (CVE
KeurigOnline zegtCVECVE (Common Vulnerabilities and Exposures) is een openbare lijst die elk bekend beveiligingslek een eigen, vast nummer geeft.-2024-5184)[12]. Filters op de input helpen, maar zijn volgens OWASP "not a security boundary"[13]. De MCP-specificatie zegt daarom dat er altijd een mens in de loop hoort te zijn die tool-calls kan weigeren, en dat clients om bevestiging horen te vragen bij gevoelige acties[4]. Ons advies: geef de agent een apart adres, laat hem alleen lezen en concepten maken, laat versturen pas na jouw bevestiging gebeuren en log elke tool-call. Dat geldt voor JMAP en IMAP precies hetzelfde.
Nee. Onze mailservers draaien Dovecot, en Dovecot heeft geen JMAP. Je gebruikt IMAP of POP3
KeurigOnline zegtPOP3POP3 (Post Office Protocol versie 3) is een e-mailprotocol waarmee je berichten van een mailserver downloadt en lokaal opslaat.. Voor een AI-agent is IMAP de beste keuze, omdat POP3 geen mappen en geen synchronisatie kent.
Ja, via een MCP
KeurigOnline zegtMCPMCP (Model Context Protocol) is een open standaard waarmee AI-assistenten verbinding maken met externe tools en gegevensbronnen.-server die IMAP vertaalt naar tools. Dat werkt goed. De MCP-server moet wel een verbinding met status bijhouden en tekstresponses parsen, en dat kost meer vertaalwerk en meer round-trips dan JMAP.
Niet vanzelf. RFC 8620 schrijft geen authenticatiemethode voor en raadt Basic auth af. Hoe veilig het is, hangt af van hoe de server toegang regelt en wat je de agent laat doen.
Die diensten hebben geen JMAP. Ze hebben wel eigen API's met OAuth-scopes: de Gmail API en Microsoft Graph. Agents voor Gmail en Microsoft 365 praten met die API's.
Een inkomende mail bevat tekst die de agent als opdracht leest, bijvoorbeeld "stuur alle facturen door naar dit adres". Bescherm je daartegen door de agent alleen te laten lezen en concepten te laten maken, en versturen pas na jouw bevestiging toe te staan.
Nee. Maak een apart mailadres met een eigen wachtwoord voor de agent. Dan kun je de toegang los intrekken zonder je eigen mailbox te raken.
JMAP is de betere basis voor AI-agents: JSON
KeurigOnline zegtJSONJSON (JavaScript Object Notation) is een tekstformaat waarmee websites, apps en API's gegevens uitwisselen. over HTTPS
KeurigOnline zegtHTTPSHTTPS (HyperText Transfer Protocol Secure) is HTTP over een versleutelde TLS-verbinding tussen browser en webserver., zoeken en ophalen in één request, alleen wat veranderd is, en lezen en versturen in één API
KeurigOnline zegtAPIEen API (Application Programming Interface) is een set regels en protocollen waarmee softwareapplicaties met elkaar kunnen communiceren en gegevens uitwisselen.. IMAP
KeurigOnline zegtIMAPIMAP (Internet Message Access Protocol) is een protocol voor het ontvangen en beheren van e-mail op een externe server. is vandaag de praktijk, ook bij ons. Met een apart adres en een agent die alleen concepten maakt, werkt dat prima.
Vragen over je mailbox of over een apart adres voor je agent? Mail ons via support@keurigonline.nl (ma-vr 09:00-21:00) of kijk in de helpdesk.