Een AI-agent koppelen
CloudQube stelt dezelfde bouwstenen die je dashboard gebruikt beschikbaar aan AI-agents: een
MCP-server op https://cloudqube.eu/mcp en een REST-API op https://cloudqube.eu/agent/v1. Een
agent werkt onder een agentsleutel die jij aanmaakt, en elke sleutel draagt een beleid: op welke
projecten hij werkt, hoeveel projecten hij mag aanmaken, en welke acties op jouw goedkeuring moeten
wachten. Jij blijft de verantwoordelijke eigenaar, en de agent werkt met
een eigen, beperkte sleutel in plaats van met jouw login.
Op welke projecten een sleutel werkt
Section titled “Op welke projecten een sleutel werkt”Een sleutel is vastgezet op één project of geldt voor al je projecten. Vastzetten werkt in
beide richtingen. Een vastgezette sleutel kan niet bij je andere projecten, en kan er ook geen nieuwe
aanmaken, want een project dat hij aanmaakt valt buiten zijn eigen
bereik en is voor hem onzichtbaar zodra het bestaat. project.create op een vastgezette sleutel
antwoordt project_scope_pinned.
“Hoeveel projecten hij mag aanmaken” is dus alleen een instelling bij sleutels voor al je projecten. Zet een sleutel vast als de agent aan iets bestaands werkt; geef hem al je projecten als hij zijn eigen project moet opzetten.
Een nieuw account is beperkt tot één sleutel per project en in totaal één door een agent aangemaakt
project, welke sleutels het ook aanmaakt. Die grenzen vervallen vanzelf zodra het account een
afgeronde betaling heeft die ouder is dan de betwistingstermijn van kaarten en geen chargeback;
policy.status toont het niveau en de ruimte.
Twee manieren om te koppelen
Section titled “Twee manieren om te koppelen”Via URL (OAuth)
Section titled “Via URL (OAuth)”Voeg de server toe en laat de client je aanmelden: hij vindt onze autorisatieserver, opent de CloudQube-login en toont een toestemmingsscherm waarop je een bestaande sleutel kiest of er een aanmaakt met de veilige standaardwaarden. Tokens zijn een uur geldig en vernieuwen zichzelf; een sleutel intrekken beëindigt ze bij de volgende aanroep.
Met een sleutel (bearer)
Section titled “Met een sleutel (bearer)”Maak een sleutel aan onder Account → Agents (hij wordt één keer getoond) en geef hem mee als header. Elke streamable-HTTP-client werkt zo, en de REST-API neemt dezelfde bearer-sleutel.
Mistral is de Europese optie: Le Chat en de Vibe-CLI spreken allebei MCP.
In Le Chat of Mistral Work koppel je via de URL. Open Connectors, klik op + Add Connector, ga naar het
tabblad Custom MCP Connector, zet de server-URL op https://cloudqube.eu/mcp en klik op
Connect. Le Chat herkent OAuth 2.1 en leidt je door het CloudQube-toestemmingsscherm. Een
connector toevoegen is een beheerdersactie; op de plannen Free, Pro en Student is de
accounteigenaar de beheerder.
De Vibe-CLI koppel je met een sleutel, omdat Vibe nog geen OAuth doet voor MCP-servers. Zet dit
in ~/.vibe/config.toml:
[[mcp_servers]]name = "cloudqube"transport = "streamable-http"url = "https://cloudqube.eu/mcp"headers = { "Authorization" = "Bearer cq_ak_..." }Via URL:
claude mcp add --transport http cloudqube https://cloudqube.eu/mcpMet een sleutel:
claude mcp add --transport http cloudqube https://cloudqube.eu/mcp \ --header "Authorization: Bearer cq_ak_..."Cursor leest ~/.cursor/mcp.json (of .cursor/mcp.json in het project):
{ "mcpServers": { "cloudqube": { "url": "https://cloudqube.eu/mcp", "headers": { "Authorization": "Bearer cq_ak_..." } } }}VS Code leest .vscode/mcp.json:
{ "servers": { "cloudqube": { "type": "http", "url": "https://cloudqube.eu/mcp", "headers": { "Authorization": "Bearer cq_ak_..." } } }}Laat headers weg om je in plaats daarvan via URL aan te melden.
Elke MCP-client die streamable HTTP ondersteunt: server-URL https://cloudqube.eu/mcp, en
ofwel zijn OAuth-optie ofwel een header Authorization: Bearer cq_ak_.... De MCP Inspector
werkt op dezelfde manier om dingen uit te proberen.
Wat een agent kan doen
Section titled “Wat een agent kan doen”| Tool | Wat hij doet | Standaardmodus |
|---|---|---|
policy.status |
elke limiet die voor de sleutel geldt, in één aanroep | lezen |
project.list / project.get / project.create / project.delete |
je projecten; verwijderen vraagt jou eerst | aanmaken toegestaan bij een sleutel voor al je projecten, geweigerd bij een vastgezette; verwijderen vraagt |
domain.search |
beschikbaarheid en prijs voor maximaal 10 namen | lezen |
domain.register |
koop een domein in een project voor de prijs die domain.search toonde; goedkeuren is betalen, uit je domeintegoed of bij het afrekenen |
vraagt jou eerst |
domain.set_autorenew |
onze verlenging van het domein aan- of uitzetten; dezelfde instelling als de schakelaar in het dashboard | toegestaan |
dns.list_records / dns.set_record / dns.delete_record |
records op het domein van het project | toegestaan; bij een nieuw account vragen wijzigingen aan MX, TXT, NS en CAA eerst |
mailbox.create / mailbox.status |
een ontvangende mailbox op het domein, records automatisch ingesteld | toegestaan |
mail.send |
versturen vanuit de mailbox van het project, binnen het maandquotum van het project | toegestaan |
site.deploy / site.status |
publiceer een statische site vanuit inline bestanden (MCP) of een zip (REST); spa_routing zet routing voor single-page apps aan of uit; het kale domein verwijst door naar de site |
eerste publicatie per project vraagt |
qube.catalog / qube.install / qube.uninstall |
de diensten die het account kan toevoegen (analytics, monitoring, e-mail, een statische site, enzovoort), er een aan een project toevoegen, er een verwijderen | catalogus is lezen; toevoegen toegestaan; verwijderen vraagt jou eerst |
actions.list / actions.get |
wat de sleutel deed, en de staat van alles wat geparkeerd staat | lezen |
Modi zijn per sleutel en per tool: allow, confirm (parkeert voor jouw goedkeuring) of
deny (staat niet in de toollijst). Geen enkele sleutel kan een DNS-zone verwijderen.
domain.register staat altijd op confirm: je kunt het niet op allow zetten, want jouw
goedkeuring is je toestemming als houder van het domein. De enige keuze bij die tool is confirm of
deny, en het aanmaakscherm stelt hem zo: mag deze sleutel überhaupt domeinen kopen? Een sleutel die
dat mag, vraagt jou nog steeds bij elke aankoop. Lijkt een naam op een bekend merk, dan waarschuwt het
goedkeuringsscherm je; keur hem alleen goed als jij de rechten op die naam hebt. Namen onder .it en .es vereisen
een verklaring die alleen jij kunt afleggen; agents kunnen die niet bestellen. Registreer ze
vanuit het dashboard.
Goedkeuringen en geld
Section titled “Goedkeuringen en geld”Een aanroep die jou nodig heeft geeft meteen pending_approval met een action_id terug, zodat de
agent niet op de aanroep blijft wachten. Je krijgt een e-mail en ziet hem onder Account → Goedkeuringen met de exacte
argumenten; keur goed of af, en de agent haalt het resultaat op via actions.get of de webhook die
je op de sleutel instelde. Goedkeuringen verlopen na 72 uur.
Geld beweegt alleen als jij goedkeurt. Een domeinaankoop wacht op jou, en goedkeuren is de
betaling: uit je domeintegoed als dat de prijs dekt, anders op een afrekenpagina waar de goedkeuring
je naartoe stuurt; de getoonde prijs is exclusief btw, en het verzoek zegt wat er wordt afgeschreven.
Sleutels hebben geen eigen
bestedingslimiet, omdat het enige wat een agent kan kopen zijn domeinen, die altijd op jouw goedkeuring
wachten, en projecten, die meetellen voor het aantal projecten dat de sleutel mag aanmaken. Nieuwe
accounts hebben daarnaast een maandplafond over al hun sleutels, dat policy.status toont. Het account heeft ook limieten voor domeinbestellingen
(hoeveel er binnen de betwistingstermijn van kaarten mag openstaan, en hoeveel bestellingen per dag
en per maand); een bestelling daarboven mislukt met order_limit, en de limieten gaan omhoog naarmate
het account een betaalgeschiedenis opbouwt. Voordat facturatie is ingesteld kan een sleutel nog
steeds alles doen wat geen geld kost, zoals DNS-records wijzigen en een site publiceren. De aanroep
naar de registrar loopt zodra de betaling is afgerond, en actions.get meldt order_status en
daarna de vervaldatum. Een geparkeerd verzoek draagt approval_url, de pagina waar jij beslist.
Elke wijzigende aanroep neemt een idempotency_key; een herhaling geeft de oorspronkelijke uitkomst
terug, dus een nieuwe poging brengt nooit twee keer in rekening en maakt nooit twee keer aan.
Vangrails
Section titled “Vangrails”- Leesacties maken nooit iets aan; een leesactie op een project zonder de betreffende dienst
antwoordt
qube_not_installedin plaats van die te installeren. - Een sleutel bevriest automatisch na een reeks mislukte aanroepen of een chargeback op het account; bevroren sleutels kunnen nog lezen, en je heft de bevriezing op vanuit het dashboard.
- Elke aanroep is één regel in je activiteitenfeed, met argumenten, uitkomst en kosten. We houden zelf ook de uitgaven van agents in de gaten, zodat een op hol geslagen agent binnen het uur opvalt.
- Elk domein wordt geregistreerd op je bedrijfsprofiel. Een agent kan geen eigen houdergegevens aanleveren.
REST-equivalenten
Section titled “REST-equivalenten”| MCP | REST |
|---|---|
project.create |
POST /agent/v1/projects |
domain.search |
GET /agent/v1/domains/search?project_id=…&names=a.eu,b.nl |
domain.register |
POST /agent/v1/domains |
dns.set_record |
PUT /agent/v1/dns/records |
mailbox.create |
POST /agent/v1/mailboxes |
mail.send |
POST /agent/v1/mail/send |
site.deploy |
POST /agent/v1/sites/deploy (multipart zip) |
policy.status |
GET /agent/v1/policy |
actions.get |
GET /agent/v1/actions/{id} |
Schrijfacties nemen een header Idempotency-Key en antwoorden 202 wanneer ze geparkeerd worden.
Elke fout komt in dezelfde vorm terug, bijvoorbeeld
{"error": "over_cap", "message": "..."}.
Ontdekking
Section titled “Ontdekking”- Metadata van de beschermde resource:
https://cloudqube.eu/.well-known/oauth-protected-resource - Autorisatieserver:
https://cloudqube.eu/oauth(dynamische clientregistratie, PKCE)