Blank white background with no objects or features visible.

EMEA, hallo! TrueFoundry breidt zijn aanwezigheid uit in Europa, het Midden-Oosten en Afrika. Lees meer. →

Stdio vs Streamable HTTP voor MCP: Wat er verandert wanneer je overstapt van lokale ontwikkeling naar enterprise-deployment

DoorBoyu Wang

Bijgewerkt: November 10, 2026

Gepubliceerd: November 9, 2026

Stdio is prima voor de laptop van de ontwikkelaar. Streamable HTTP is wat enterprise-deployments daadwerkelijk nodig hebben. We lopen door beide transports — wire format, verbindingslifecycle, auth, audit en benchmarks — en laten zien wat er verandert wanneer een MCP-omgeving opschaalt voorbij één gebruiker.

Belangrijkste inzichten
  • → Stdio is JSON-RPC 2.0 over newline-gescheiden stdin/stdout. Streamable HTTP (MCP-spec 2025-03-26) is JSON-RPC 2.0 over één HTTP-endpoint dat POST en GET ondersteunt, met optionele Server-Sent Events voor streaming.
  • → Stdio is een proces-per-gebruiker-model. 50 ontwikkelaars verdeeld over 8 servers betekent ~400 gelijktijdige processen verspreid over 50 laptops — een deployment-topologie die operationeel moeilijk centraal te beheren is, ongeacht de beschikbare ruwe resources.
  • → Stdio heeft geen auth op transportlaagniveau (alleen omgevingsvariabelen) en geen natuurlijk centraal onderscheppingspunt voor audit — audit en identiteit moeten out-of-band, per host worden gereconstrueerd. Streamable HTTP leidt elke call door één ingress met een Authorization-header die een gateway structureel kan onderscheppen.
  • → Op dezelfde machine schaaft stdio een paar milliseconden af van een enkele tool call en geeft het je gratis foutisolatie. Wat Streamable HTTP je biedt, in ruil voor de gateway die je moet beheren, is centrale controle over de zaken waar enterprises op schaal typisch om geven: identiteit, audit, rate-limiting, RBAC en horizontale schaalbaarheid op de serverlaag.
  • → Migratie is een transportwissel, geen herschrijving. De MCP SDK's scheiden transport van tool-logica; het converteren van een stdio-server kost typisch een patch van vijf regels.

Een vrijdagmiddag bij Northwind. Zes maanden na de uitrol van Cargo Copilot stelt de security lead van Northwind het engineeringteam een routineuze auditvraag: welke ontwikkelaars hebben de afgelopen 30 dagen de interne klantdata-MCP-tool aangeroepen, en tegen welke klant-ID's? Het team heeft elk JSON-RPC-bericht dat ooit door die tools is verzonden — in de stderr-logs van het lokale Cursor-proces van elke ontwikkelaar. Verspreid over vijftig laptops. Zonder gedeelde tijdstempelbron, zonder schema en zonder manier om deze te correleren. Het kost een week om de vraag te beantwoorden, en het antwoord is onvolledig. De oorzaak is geen nalatigheid. Het is de transportkeuze die ze zes maanden geleden hebben gemaakt.

Northwind begon waar de meeste teams beginnen: stdio MCP-servers, één per machine van de ontwikkelaar. Dat is de juiste standaard voor lokale experimenten — en de verkeerde standaard voor al het andere. Dit artikel legt uit waarom, met de details van de wire formats, de deployment-modellen en het migratiepad.

1. Stdio Transport: Hoe JSON-RPC 2.0 werkt over stdin/stdout

De MCP-transportspecificatie definieert stdio in één alinea: de client start de server als een subproces; de server leest JSON-RPC 2.0-berichten van stdin en schrijft antwoorden naar stdout. Elk bericht is één regel UTF-8-tekst, afgesloten met een newline. De server mag logs naar stderr schrijven; hij MAG NIETS naar stdout schrijven dat geen geldig MCP-bericht is.

Een enkele tool call van agent naar server is één regel JSON:

De framing-regels zijn eenvoudig maar onvermurwbaar. De MCP-specificatie vereist dat berichten op een enkele regel staan, dus conforme servers escapen alle interne newline-tekens als \n tijdens JSON-serialisatie. Wat de framing in productie daadwerkelijk breekt, is niet-JSON-vervuiling van stdout: een verdwaald print()-statement, een niet-opgevangen exception traceback, een debug-log die per ongeluk naar stdout is geleid in plaats van stderr, of een server die vergeet om stdout na elk bericht te flushen. In al deze gevallen ziet de client een ongeldig bericht of wacht hij voor altijd op een antwoord dat technisch gezien al geschreven is. Elke MCP SDK wordt geleverd met een stdio-transportimplementatie, precies om deze randgevallen het probleem van iemand anders te maken.

Wat stdio je geeft in ruil voor die beperkingen is procesisolatie. De agent beheert de lifecycle van de server: wanneer de agent afsluit, eist het besturingssysteem het proces weer op. Er is geen netwerk, geen auth-handshake, geen firewall-vraagstuk. Voor lokale ontwikkeling is dit precies wat je wilt.

2. Streamable HTTP Transport: Request-Response en SSE-modi

Streamable HTTP, geïntroduceerd in MCP-spec 2025-03-26 en behouden in de revisie van november 2025, vervangt het oudere HTTP+SSE-transport door een ontwerp met één endpoint. De server exposeert één URL (bijv. /mcp) die zowel POST als GET accepteert. Clients POSTEN JSON-RPC-berichten; servers reageren met een enkele JSON-body of upgraden naar een Server-Sent Events-stream voor langdurige calls. Er is geen afzonderlijk "events"-endpoint.

De client geeft aan wat hij kan accepteren; de server kiest de responsmodus. Hier is een tool call in HTTP-vorm:

Drie details zijn operationeel van belang. De Mcp-Session-Id-header bindt requests aan een sessie en wordt bij de initialisatie door de server toegewezen — deze blijft alleen behouden over pod-restarts heen als de server de sessiestatus externaliseert. De Accept-header is verplicht: volgens de spec MOETEN clients zowel application/json als text/event-stream vermelden, en een conforme server kan een ontbrekende of onvolledige Accept weigeren met HTTP 406 Not Acceptable (volgens HTTP-semantiek; 415 Unsupported Media Type geldt voor incompatibele Content-Type, niet voor Accept). En volgens de beveiligingssectie van de spec MOETEN servers de Origin-header bij elke verbinding valideren om DNS rebinding-aanvallen op lokaal gebonden servers te voorkomen — een normatieve vereiste, geen aanbeveling, met HTTP 403 Forbidden als voorgeschreven reactie op een ongeldige Origin.

3. Verbindingslifecycle: Proces-per-gebruiker vs Stateless HTTP

De twee transports modelleren verbindingen compleet anders, en dit is waar de operationele kloof ontstaat.

Eigenschap Stdio Streamable HTTP
Procesmodel Typisch één serverproces per clientverbinding. De client beheert de lifecycle. Sommige implementaties multiplexen tools of poolen subprocessen, maar het algemene patroon is één-per-client. Eén serverproces bedient meerdere clients gelijktijdig. Lifecycle losgekoppeld van een specifieke client.
Koude start Betaalt bij elke nieuwe verbinding de kosten voor het starten van een proces + laden van modules (Python/Node typisch 200–400 ms). Betaalt de koude start eenmalig bij deployment of autoscaling. Vervolgrequests hergebruiken het draaiende proces.
Sessiestatus Impliciet — bevindt zich in het proces. Crashes leiden tot verlies. Expliciet — Mcp-Session-Id-header. Server kan externaliseren naar Redis voor veerkracht.
Foutmodus Servercrash verbreekt de verbinding van één gebruiker. Andere gebruikers merken niets; hun processen staan er los van. Servercrash beïnvloedt alle actieve requests op die pod. Beperkt door replica's en graceful drains.
Netwerk Geen. Alleen lokale pipes. TCP + TLS. Werkt door firewalls; kan worden geloadbalanced.

Voor een enkele ontwikkelaar die lokaal werkt, is het proces-per-verbinding-model van stdio een feature, geen bug — procesisolatie is gratis, en de koude start vindt eenmalig plaats wanneer de IDE opent. Het moment dat meer dan één gebruiker de server nodig heeft, wordt dat model de beperkende factor.

4. Multi-Tenancy: Waarom Stdio op schaal tegen de lamp loopt

De stdio-beperking die op enterprise-schaal breekpunten veroorzaakt, is eerder rekenkundig dan ingenieurstechnisch: typische stdio MCP-deployments draaien één proces per (gebruiker, server)-tuple, zonder ingebouwde deling tussen gebruikers. Sommige implementaties multiplexen meerdere tool-definities binnen één subproces, en een paar poolen subprocessen, maar het algemene deployment-patroon in de praktijk — en degene die in de officiële SDK's zit — is één proces per gebruiker per server.

Bij Northwind draaien 50 ontwikkelaars elk een IDE met acht gekoppelde MCP-servers. Dat zijn 400 stdio-processen tijdens piekuren, verdeeld over 50 laptops. Elk proces neemt geheugen in beslag (een Python MCP-server met een paar dependencies zit rond de 60–120 MB residentieel geheugen; een Node-server is vergelijkbaar), houdt file descriptors open en onderhoudt een actieve runtime die geblokkeerd is op stdin. De totale resource footprint is niet catastrofaal — 400 kleine processen vallen ruim binnen het budget van moderne hardware — maar de werkelijke kosten zijn operationeel in plaats van computationeel: het aantal processen fragmenteert de control plane.

Het moeilijkere probleem zijn servers met een gedeelde status. Stel je voor dat de interne Logistics API MCP-server bij het opstarten een customer-graph van 200 MB in het geheugen cached. Bij stdio laadt de machine van elke ontwikkelaar zijn eigen kopie. Bij Streamable HTTP houden twee pod-replica's de graph vast voor het hele bedrijf. Zelfde data, twee grootte-ordes minder geheugen in totaal, plus de cache is warm voor alle gebruikers omdat deze gedeeld wordt.

Het is de moeite waard om de andere kant van de medaille te benoemen. Het gedecentraliseerde model van stdio heeft reële voordelen die een ervaren infrastructure-team terecht zal aanhalen: sterke foutisolatie (de gecrashte server van de ene ontwikkelaar beïnvloedt niemand anders), geen afhankelijkheid van een gedeelde ingress, geen centrale auth-uitval die de hele omgeving platlegt, en minimale infrastructuur om te beheren. Voor kleine teams, zeer vertrouwde lokale workflows of air-gapped omgevingen kunnen die eigenschappen echt opwegen tegen de operationele voordelen van een centrale HTTP-laag. Het argument in dit artikel is niet dat stdio slecht is; het is dat de foutmodi die het afwentelt op de organisatie — gefreagmenteerde audit, gedistribueerde credentials, geen centrale rate limiting — precies de kop opsteken wanneer een omgeving groeit van "een paar power users" naar "gedeelde infrastructuur met compliance-verplichtingen."

Figuur 1. Architecturale impact naast elkaar bij 50 ontwikkelaars verdeeld over 8 MCP-servers. Stdio waaiert uit naar ~400 gelijktijdige processen; Streamable HTTP consolideert naar een kleine replica-set achter een enkele ingress.

Dit is de beperking die de documentatie van de TrueFoundry MCP Gateway expliciet maakt:

"Alleen MCP-servers die gebruikmaken van streamable-http transport (stateful/stateless) worden ondersteund voor verbinding via Gateway proxy."
— TrueFoundry MCP Gateway SDK usage docs

Een gateway heeft een HTTP-endpoint nodig dat hij kan onderscheppen. In de praktijk vereisen centrale gateway-deployments een HTTP-gerichte transportlaag, wat de reden is waarom stdio-servers typisch worden gewrapped met mcp-proxy (meer hierover in §8). De architecturale beslissing "welk transport leveren we mee" is daarom ook de beslissing "kunnen we hier een gateway voor zetten."

5. Auth Injection: Waar elk transport tekortschiet

Stdio heeft geen auth op transportlaagniveau. De MCP-specificatie is expliciet: stdio-implementaties moeten credentials uit de omgeving halen, niet uit een OAuth-flow. In de praktijk betekent dit dat de machine van elke ontwikkelaar API-keys bevat in shell-omgevingsvariabelen, in editor-instellingen of in een configuratiebestand dat op Slack wordt gedeeld wanneer iemand bij het team komt. De credentials bevinden zich waar het proces draait.

Streamable HTTP heeft de Authorization-header. Een gateway kan de inkomende credential valideren voordat het request de server bereikt, deze omwisselen voor een downstream-credential volgens het geconfigureerde uitgaande auth-model, en calls weigeren die niet aan het beleid voldoen — dit alles zonder de applicatiecode aan te raken. Het op headers gebaseerde model is wat centrale identiteit, RBAC en OAuth-token-brokering überhaupt mogelijk maakt.

De praktische impact is het meest zichtbaar tijdens het roteren van credentials. Bij stdio vereist een gelekt GitHub-token dat elke machine van een ontwikkelaar wordt opgespoord die het token gecached heeft — via editor-instellingen, dotfiles, wachtwoordbeheerders en de onvermijdelijke kopieën die ontwikkelaars maakten om elkaar te helpen. Bij HTTP is dezelfde rotatie één update bij de gateway, en elk volgend request gebruikt de nieuwe credential. De transportkeuze is niet de enige reden waarom centrale auth werkt, maar het is wel de keuze die het mogelijk maakt.

6. Audit Trails: Wat de Gateway wel en niet kan zien

Stdio mist een natuurlijk centraal onderscheppingspunt. Er is geen socket om af te tappen, geen proxy om tussen te plaatsen, geen header om te loggen — dus moet een gestructureerde audit out-of-band worden gereconstrueerd via lokale forwarders, stderr-collectors, eBPF-tracing of proces-supervisors die zijn gedeployed op elke host waar een server draait. Dat is te bouwen, maar het is een operationeel programma op zich, los van de applicatie. Het enige eersterangs verslag van wat er binnen een stdio MCP-sessie is gebeurd, is wat de server zelf naar stderr verkoos te schrijven — ongestructureerde, per-proces, onbetrouwbare tijdstempels, geen correlatie-ID, geen identiteit van de aanroeper. Voor een enkele ontwikkelaar die lokaal debugt, is dat genoeg. Voor een securityteam dat een incident over vijftig laptops heen moet reconstrueren, is dat het niet.

Streamable HTTP exposeert elke tool call op de HTTP-laag, waar een gateway deze structureel kan onderscheppen. Een minimaal audit-record van de TrueFoundry gateway ziet er ongeveer zo uit:

Het audit-record is geen logregel die de server verkoos uit te sturen. Het is metadata die de gateway op basis van de structuur genereert. Hetzelfde record bestaat voor elke tool call over alle MCP-servers in de omgeving heen, met een consistent schema, monotone tijdstempels en een identiteit die is gekoppeld aan de inkomende credential. Dat is de eigenschap waarmee het securityteam van Northwind de vraag op vrijdagmiddag in één query kan beantwoorden in plaats van in een week.

7. Latency Benchmarks: Sequentiële vs parallelle tool calls op beide transports

Op de laptop van de ontwikkelaar is stdio sneller per call. over een netwerk met een realistische belasting wint Streamable HTTP op de metrieken die meeschalen. Hier is de opbouw.

Een opmerking over de onderstaande cijfers
Dit zijn technische schattingen samengesteld uit gepubliceerde benchmarks van elk onderliggend onderdeel (processtart, JSON-RPC-parsing, HTTP- en TLS-overhead). Het is geen gemeten TrueFoundry-productietelemetrie. Elk team zou server-timing-headers moeten instrumenteren en elke regel moeten vervangen door gemeten cijfers uit hun eigen deployment.

‍

Enkele sequentiële tool call

Scenario p50 p95 Wat draagt bij
Stdio (warme start, lokaal) ~0,3–1 ms ~2–3 ms Pipe write + JSON parse + tool-logica. Geen enkel netwerkverkeer.
Stdio (koude start) ~250–400 ms ~600 ms+ Python/Node module-laadtijd domineert volgens gepubliceerde runtime-benchmarks; gebeurt één keer per IDE-sessie.
Streamable HTTP (hetzelfde datacenter) ~5–10 ms ~15–25 ms TLS-hergebruik + JSON parse + serverafhandeling. TLS 1.3 beperkt de handshake tot één round-trip bij de eerste verbinding, daarna hergebruikt.
Streamable HTTP (cross-regio) ~50–120 ms ~200 ms+ Gedomineerd door round-trip-time. Co-locate de gateway met veelgebruikte MCP-servers.

Tien parallelle tool calls

Waar de transports het meest uiteenlopen:

Scenario Totale tijd voor 10 calls Waarom
Stdio (enkel proces) Nieuwe verzoeken vertragen sterk bij parallelle piekbelasting JSON-RPC ID's staan antwoorden buiten volgorde toe op protocolniveau, maar veel stdio MCP-implementaties delen één runtime-eventloop en één stdout-writer. Request-afhandeling, stdout-schrijfopdrachten en runtime-executie kruisen allemaal één procesgrens, wat de doorvoer serialiseert bij hoge parallelle belasting.
Stdio (één proces per call) 10 koude starts parallel Het gelijktijdig opstarten van 10 processen veroorzaakt een fork-storm en concurrentie bij het laden van modules.
Streamable HTTP (één pod) Begrensd door het concurrency-budget van de pod; 10 calls overlappen HTTP-servers draaien van nature gelijktijdige request-handlers; 10 calls overlappen als de server async is.
Streamable HTTP (N pods achter een gateway) Lineaire schaling tot aan de rate limit van de gateway Loadbalancer verdeelt calls over pods; alleen begrensd door horizontale capaciteit.

De korte versie: stdio wint op latency bij een enkele call in het beste geval (warme start, dezelfde machine) en houdt het foutdomein klein. Wat HTTP inlevert op ruwe latency bij een enkele call, wint het terug in de operationele beheersing die enterprises op schaal meestal nodig hebben — replicatie, parallellisme via gelijktijdige handlers, centrale rate-limiting en observeerbaarheid op de gatewaylaag. En omdat de LLM-call die elke tool-aanroep omgeeft typisch honderden milliseconden duurt, is een HTTP-overhead van 5–10 ms zelden de dominante kostenpost in verhouding tot het werk dat wordt uitgevoerd.

8. Migratiegids: Een Stdio-server converteren naar Streamable HTTP

Migratie is een wissel op de transportlaag. De tools zelf — hun invoerschema's, hun handlers, hun afhankelijkheden — blijven ongewijzigd. Er zijn twee paden, afhankelijk van de vraag of je de broncode van de server beheert.

Pad A: wijzig het transport in je eigen server

Als je de MCP-server zelf hebt geschreven, is de wijziging ongeveer vijf regels. Met fastmcp is het verschil tussen transportmodi een enkel run()-argument:

Pad B: wrap een stdio-server met mcp-proxy

Veel open-source MCP-servers worden uitsluitend voor stdio geleverd — de officiële GitHub-, Slack- en filesystem-servers, plus de meeste community-opties. Voor deze servers raadt TrueFoundry aan ze te wrappen met mcp-proxy en ze te deployen als een reguliere service. De wrapper handelt HTTP af, start het stdio-kindproces en sluisst JSON-RPC tussen beide heen en weer. Vanuit het perspectief van de gateway is de geewrappte server niet te onderscheiden van een native HTTP-server.

De exacte flags hangen af van welke mcp-proxy-implementatie wordt gebruikt — de TypeScript-variant (punkpeye/mcp-proxy) accepteert --server stream zoals hier getoond; de Python-variant (sparfenyuk/mcp-proxy) gebruikt --transport streamablehttp met het gewrapte commando als een positioneel argument. Controleer in ieder geval de huidige upstream README voordat je een runbook oplevert, aangezien CLI-flags tussen releases kunnen wijzigen.

Eenmaal gewrapt, wordt de server op dezelfde manier geregistreerd bij de gateway als elke HTTP MCP-server — zie ons eerdere artikel over OAuth op de MCP-laag voor het configuratiemodel. Migratie is zelden een codeproject; het is een deployment-en-registratieproject.

9. Veelgestelde vragen

Is stdio verouderd (deprecated)?

Nee. Stdio is het juiste transport voor lokale ontwikkeling en voor elke configuratie waarbij de client en server dezelfde machine en één enkele gebruiker delen. De MCP-spec definieert beide transports als eersterangs. Wat verouderd is, is het oudere HTTP+SSE-transport (gescheiden endpoints voor POST en GET-SSE), dat is vervangen door Streamable HTTP.

Kan ik beide transports op dezelfde server draaien?

Ja. Met de meeste MCP SDK's kan een enkele server aan meerdere transports worden gebonden. Een veelvoorkomend patroon is stdio voor lokale dev en Streamable HTTP voor productie, geschakeld via een omgevingsvariabele of command-line flag. Tool-logica wordt gedeeld; alleen de transportinitialisatie verschilt.

Hoe zit het met Server-Sent Events (SSE) als een losstaand transport?

Het oudere HTTP+SSE-transport uit de spec van 2024-11-05 gebruikte twee endpoints — één voor POST-berichten, één voor de SSE-stream. Dit is officieel verouderd sinds de spec van 2025-03-26, hoewel servers het actief kunnen houden voor backwards compatibility met oudere clients. Nieuwe implementaties moeten zich richten op Streamable HTTP.

Voegt de gateway latency toe aan elke tool call?

Ja, maar de kosten zijn klein. Een gezonde gateway voegt een paar milliseconden toe op het cache-hit path (token-lookup + RBAC + JWT-verificatie). Vergeleken met de omliggende LLM-call (typisch honderden milliseconden tot seconden) en de downstream MCP-server, is de overhead zelden de dominante kostenpost. Zie ons eerdere artikel over OAuth op de MCP-laag voor de volledige latency-opbouw.

Hoe zit het met WebSockets?

Maakt geen deel uit van de huidige MCP-transportspecificatie. Streamable HTTP met SSE dekt de streaming-usecase af zonder dat er WebSocket-infrastructuur nodig is, wat moeilijker te loadbalancen en te beveiligen is dan gewone HTTP. De MCP-auteurs hebben bewust gekozen voor HTTP-semantiek.

Waar past TrueFoundry in dit plaatje?

De TrueFoundry MCP Gateway is een ingress uitsluitend voor Streamable HTTP gericht op MCP-servers binnen je enterprise. Stdio-servers bereiken de gateway via mcp-proxy-wrappers (zie §8). Eenmaal geregistreerd krijgt elke server een uniforme identiteit, RBAC, audit en OAuth-broker-laag op de gateway-tier, ongeacht hoe de upstream server oorspronkelijk is geïmplementeerd.

Neem de volgende stap

Als je MCP op een niet-triviale schaal draait, is de meest waardevolle oefening het inventariseren van elke MCP-server die actief in gebruik is, deze te markeren als uitsluitend stdio of HTTP-geschikt, en te beslissen welke het eerst worden overgezet. Stdio-only servers achter mcp-proxy plaatsen is een routinematig patroon; de migratie past meestal in een enkele sprint.

Begin hier: TrueFoundry MCP Gateway SDK usage docs. Of boek een enterprise-architectuurreview met ons team.

Verdere literatuur

Bronvermeldingen zijn overal inline gelinkt. De onderstaande lijst verzamelt alle URL's voor printbaarheid en ter bescherming tegen dode links.

Opmerking: Northwind Logistics is een fictief bedrijf dat is gebruikt om het ontwerp te verankeren in een concrete implementatie. Latency-cijfers in §7 zijn technische schattingen op basis van gepubliceerde component-benchmarks, geen gemeten TrueFoundry-productietelemetrie.

‍

Probeer het nu.

Eén gateway voor al je modellen, MCP-servers en agents. Geen creditcard nodig.

Start gratis
Inhoudsopgave

Eén gateway voor elk LLM, elke agent en elke MCP-server

Boek een gesprek van 30 minuten met onze AI-expert

Demo aanvragen

De snelste manier om je AI te bouwen, beheren en schalen

Demo boeken
Samenvatten met
ChatGPT logo by OpenAI
Perplexity AI logo
Blurry red snowflake on white background, symmetrical frosty design with soft edges and abstract shape.

Ontdek meer

Geen items gevonden.
TrueFoundry offers scalable alternatives for Vercel AI Gateway limitations
November 10, 2026
|
5 min leestijd

Vercel AI Review 2026: Wij hebben het getest, zodat jij dat niet hoeft te doen

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Vendor lock-in voorkomen met de AI Gateway van TrueFoundry

Geen items gevonden.
November 10, 2026
|
5 min leestijd

TrueFoundry en de MCP-gatewayrevolutie: inzichten uit het Gartner-rapport van 2025

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Gids voor MCP-authenticatie in Claude Code 2026

Geen items gevonden.
Geen items gevonden.

Recente blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.
Volg een korte producttour
Start producttour
Product Tour