Functionele omschrijving
Moeilijkheidsgraad:

De tools achter de configuratiedeur /mcpconfig: waarmee een omgeving wordt ingericht. Producten en prijzen, het front en het thema, e-mailsjablonen en de boekingsworkflow. Een sleutel met scope config opent deze deur; hoe je verbindt staat in Een AI-agent verbinden met de MCP-server. Het dagelijkse werk zit achter een andere deur — zie MCP operationele tools.

Plan en toepassen zijn twee tools

Elke schrijvende handeling bestaat hier uit twee tools: ..._plan laat zien wat er zou veranderen en schrijft niets, ..._apply voert het uit. Dat is geen formaliteit maar de kern van hoe deze deur veilig te gebruiken is: je laat een plan zien aan iemand die er ja op zegt, en pas dan wordt er iets geschreven. Ze hebben elk hun eigen recht, dus je kunt iemand wel laten kijken en niet laten wijzigen.

Een _apply die niets aantreft om te wijzigen is een succes en geen fout: als de waarde al stond zoals gevraagd, meldt het antwoord dat er niets veranderde. Een client die zijn antwoord kwijtraakte kan dus gewoon opnieuw proberen.

Twee sloten en het productieslot

Voordat hier iets geschreven wordt, moeten twee sloten open staan: één die de leverancier zet voor de hele omgeving, en één die de licentiehouder zelf zet. Staat er één dicht, dan wordt ook het plan geweigerd — anders zou de deur die je niet open kunt doen wel in detail vertellen wat erachter staat.

Daarbovenop geldt voor de zwaarste tools een derde voorwaarde: op een productieomgeving worden ze helemaal niet uitgevoerd. Dat zijn de tools met niveau 2 in de tabel hieronder — de statussen en de automatische statusovergangen. Die verzetten bepaalt welke e-mail bij welke statuswijziging uitgaat, en dat is bij de eerstvolgende taakverwerking echte post aan echte klanten. Thema-CSS wijzigen mag wel op productie: dat is te zien en terug te draaien.

De tools

ToolsLezen/schrijvenNiveauOmschrijving
env_describe / config_diff_vs_baseline / recent_changeslezen-Wat is deze omgeving, wat wijkt af van een verse installatie, en wat is er onlangs gewijzigd
object_explain / pricing_explain / availability_why_not_bookablelezen-Uitleg bij één product: de instellingen, de prijsopbouw, en waarom het op een datum niet boekbaar is
object_create / object_update / object_set_periods / object_set_extras / object_set_participantsschrijven1Producten aanmaken en wijzigen, met hun periodes, extra opties en deelnemerstypen
product_set_activeschrijven1Een product aan- of uitzetten
combi_create / combi_updateschrijven1Arrangementen samenstellen
theme_describe / theme_set_variables / theme_set_css / theme_set_logo / theme_rebuildlezen/schrijven1Het front-thema: kleuren en variabelen, eigen CSS, logo, en opnieuw compileren
theme_patch_cssschrijven1Een deel van de eigen CSS wijzigen: een kleur, een regel of een benoemd blok, zonder de hele stylesheet opnieuw te sturen
media_upload_linkschrijven1Een eenmalige uploadlink naar de mediabibliotheek, voor een logo, stylesheet of lettertype
media_fetchschrijven1Een bestand van de eigen website naar de mediabibliotheek halen
brand_set_logoschrijven1Het huisstijllogo
content_block_describe / content_block_create / content_block_updatelezen/schrijven1De blokken waaruit een frontpagina is opgebouwd
content_block_deleteschrijven1Een blok verwijderen. Geweigerd zolang het nog ergens gebruikt wordt: op een pagina, in een thema, in een ander blok of in een formulier
menu_describe_items / menu_set_itemslezen/schrijven1De items van een menu als lijst: volgorde, uitklapmenu's, de pagina waar een item naartoe gaat en het label per taal
page_describe / page_create / page_updatelezen/schrijven1Contentpagina's in het front
page_list / page_check_linkslezen-Alle contentpagina's, en welke interne links in menu's, contentblokken en de homepage nergens naartoe gaan
page_deleteschrijven1Een pagina verwijderen. Geweigerd als een andere taalversie ernaar verwijst, tenzij je die verwijzing meteen laat opruimen
theme_set_menuschrijven1Welk menu de kop van een thema per taal toont
homepage_setschrijven1Welke pagina het front opent als een bezoeker op het basisadres komt
template_describe / template_create / template_update / template_section_setlezen/schrijven1E-mail- en pdf-sjablonen en hun kop-, voet- en css-onderdelen
workflow_describelezen-De hele boekingsworkflow in één antwoord: statussen, handmatige en automatische overgangen, en welk sjabloon bij welke overgang hoort — inclusief controles op sjablonen die nergens meer naar wijzen
status_setschrijven2Een boekingsstatus wijzigen: of hij bezetting inneemt, en waar iemand een boeking met de hand naartoe mag verplaatsen
auto_set / auto_deleteschrijven2Automatische statusovergangen: van welke status naar welke, op welk moment, en welke e-mail of sms daarbij hoort
language_listlezen-De talen van de omgeving (actief, standaard) en welke onderdelen vertaalbaar zijn
language_activateschrijven1Een fronttaal aan- of uitzetten; het plan telt wat er in die taal nog leeg staat
language_missing_reportlezen-Per onderdeel de teksten die in de brontaal wel en in de nieuwe taal nog niet gevuld zijn, met de brontekst erbij
translation_get / translation_setlezen/schrijven1Vertalingen lezen en opslaan, tot 50 tegelijk, over alle vertaalbare onderdelen heen

Het front inrichten

Een front bestaat uit contentblokken, pagina's die die blokken tonen, een menu, een thema en een homepage. Met de tools gaat dat in deze volgorde: blokken maken en vullen (content_block_create, content_block_update), er pagina's van maken (page_create), het menu vullen (menu_set_items), het menu aan het thema koppelen (theme_set_menu) en de homepage kiezen (homepage_set). Tot slot laat page_check_links zien of er nog links zijn die nergens naartoe gaan.

Onderweg wordt een aantal dingen bewaakt, zodat een fout niet pas bij de bezoeker opvalt:

  • De inhoud van een contentblok wordt vóór het opslaan gecontroleerd, op dezelfde manier als in de editor. Tekst die de pagina zou breken, zoals een losse accolade of een {if} zonder {/if}, wordt geweigerd. Plaats JavaScript en CSS met accolades tussen {literal} en {/literal}.
  • Het menu in de kop wordt per taal gekozen, en een taal zonder menu valt niet terug op een andere taal. Het plan van theme_set_menu noemt elke actieve taal die daarna geen menu heeft.
  • Een menu dat voor één taal is ingesteld, heeft alleen labels in die taal nodig. Een menu voor alle talen heeft een label in elke actieve taal nodig.
  • De homepage is één instelling voor alle talen. Wisselt een bezoeker van taal, dan volgt het front de gekoppelde taalversie van die pagina. Het plan van homepage_set waarschuwt voor elke actieve taal waarin de pagina geen versie heeft.
  • De linkcontrole kijkt alleen naar links waar een bezoeker op klikt. JavaScript telt niet mee, ook als daar iets als location.href in staat.

Logo en huisstijl aanleveren

Een logo of een complete stylesheet plak je niet in het gesprek met je assistent. Dat is traag, en één verkeerd teken maakt het bestand onbruikbaar. Het bestand gaat eerst naar de mediabibliotheek van je omgeving, en daarna verwijst de assistent ernaar.

  1. Bestand aanleveren. Vraag de assistent om een uploadlink (media_upload_link). Open de link, kies het bestand en klik op Uploaden. Staat het logo al op je eigen website, dan kan de assistent het ook zelf ophalen (media_fetch).
  2. Laten gebruiken. De assistent zet het bestand daarna als logo (brand_set_logo of theme_set_logo) of als stylesheet van het thema (theme_set_css). Je hoeft niets in de admin te plakken.

Voorbeeld: "Maak het logo op onze site en in de bevestigingsmail het logo dat ik nu upload, en maak de knoppen donkergroen." De assistent maakt een uploadlink, zet na je upload het logo, en past alleen de knopkleur aan met theme_patch_css. De rest van de stylesheet blijft onaangeroerd.

  • Een uploadlink werkt één keer en is standaard 15 minuten geldig. Wordt een bestand geweigerd, bijvoorbeeld omdat het geen afbeelding is, dan blijft de link bruikbaar.
  • Toegestaan: afbeeldingen (png, jpg, gif, webp, svg, ico), stylesheets (css) en lettertypen (woff, woff2, ttf, otf), tot 5 MB. Het bestandstype wordt uit de inhoud bepaald, niet uit de naam.
  • Ophalen kan alleen van de eigen domeinen van je licentie. Dat zijn de domeinen in de instelling CORS - Toegestane domeinen.
  • Voor deze tools heb je het recht menu_config_manage_media (media beheren) nodig, en de sloten hierboven moeten open staan.
  • Bij een kleine wijziging controleert theme_patch_css eerst of de stylesheet nog dezelfde is als toen de assistent hem las. Is hij tussendoor in de admin gewijzigd, dan wordt de wijziging geweigerd en leest de assistent hem opnieuw.

Een extra taal toevoegen

Zet je een fronttaal aan, dan wordt er niets gekopieerd. Alles wat nog geen tekst in die taal heeft, blijft in het front leeg: de productnamen, de opties, de statussen, de labels van velden, de contentblokken, het menu en de pagina's. Er valt vrijwel nergens iets terug op de standaardtaal. De taaltools maken van dat handwerk één gestructureerde klus:

  1. language_activate_plan laat zien hoeveel teksten er per onderdeel nog leeg staan. Pas na akkoord zet language_activate_apply de taal aan.
  2. language_missing_report geeft de werkvoorraad: per onderdeel welke teksten ontbreken, met de brontekst erbij.
  3. De agent vertaalt en translation_set_plan laat per tekst zien wat er zou veranderen. translation_set_apply slaat het op.

Drie dingen worden altijd bewaakt. Een tekst die al gevuld is, wordt niet overschreven, tenzij dat uitdrukkelijk gevraagd wordt. Codes als {NAME} of ##OWNER_ID## en de HTML-opmaak van een tekst moeten na het vertalen precies zo terugkomen. En een tekst mag niet langer zijn dan het veld toestaat. Voor een contentpagina in een nieuwe taal is een eigen url nodig; die wordt niet van de oorspronkelijke pagina overgenomen.

E-mail- en pdf-sjablonen vallen hier buiten: dat zijn aparte documenten per taal, en die maak je met de sjabloontools.

Voor al deze tools is het recht menu_config_language nodig, plus het recht van het scherm waar de tekst normaal bewerkt wordt. Wie de producten niet mag wijzigen, kan ze via AI dus ook niet vertalen.

De exacte, altijd actuele lijst met alle invoervelden vraag je op met de standaard MCP-methode tools/list op de deur zelf. Wat je terugkrijgt hangt af van je rechten, dus een kortere lijst dan hier betekent meestal dat een recht ontbreekt.

BETA. Deze deur is nieuw en wordt nog doorontwikkeld. Toolnamen, invoervelden en niveaus kunnen tussen releases wijzigen zonder overgangsperiode. Gebruik de plan-variant voordat je iets toepast, en bouw er nog geen productie-integratie op die niet stuk mag.