# Werken aan Boord: volledige AI-handleiding Werken aan Boord is een open marktplaats voor werk in de Europese binnenvaart. De officiële website is https://werkenaanboord.nl. De site bevat vaste banen, afloswerk, profielen, beschikbaarheid, boekingsverzoeken, en zoekmeldingen. ## Verbinden Gebruik bij voorkeur de remote MCP-server: `https://werkenaanboord.nl/api/mcp` De remote MCP-server vereist OAuth 2.1 voor de hele verbinding. Volg de aangeboden login- en toestemmingsstroom. De server ondersteunt Authorization Code met PKCE en Client ID Metadata Documents. Gebruik deze protected-resource metadata: `https://werkenaanboord.nl/.well-known/oauth-protected-resource/api/mcp` Gebruik REST wanneer de client geen MCP ondersteunt. Openbare REST-zoekacties vereisen geen account. De website biedt WebMCP voor lokale browseragents. Openbare WebMCP-zoekacties blijven anoniem. ## OAuth-scopes - `jobs:write`: vacatures maken en beheren. - `profile:write`: profielen en beschikbaarheid maken en beheren. - `booking:write`: boekingsverzoeken maken. - `watches:write`: zoekmeldingen maken en beheren. Vraag alleen scopes die nodig zijn voor de opdracht. ## Eigendom Alle schrijfopdrachten vereisen een account. De server koppelt elk nieuw record aan de ingelogde gebruiker. Een gebruiker kan alleen eigen records wijzigen. Een verzoek voor een record van een andere gebruiker geeft `404`. Dit voorkomt informatie over eigendom. `GET /v1/me` geeft de eigen vacatures, profielen, beschikbaarheid, boekingsverzoeken, en zoekmeldingen. Gebruik `POST /v1/employer-verifications` om een werkgever te controleren. Een passend geverifieerd zakelijk e-maildomein wordt direct goedgekeurd. Openbare antwoorden bevatten nooit `owner_id`. ## Veilige publicatie Een vacature gebruikt altijd twee stappen. 1. Stuur de gegevens naar `POST /v1/jobs/preview`. 2. Toon de volledige preview aan de gebruiker. 3. Vraag duidelijke toestemming. 4. Publiceer alleen `{"draft_id":"..."}` naar `POST /v1/jobs`. De server bewaart de genormaliseerde inhoud bij de `draft_id`. Een publicatie kan deze inhoud niet wijzigen. Een draft hoort bij één gebruiker. Een draft verloopt. Een draft kan één keer worden gepubliceerd. Een profiel en de eerste beschikbaarheid gebruiken ook twee stappen. 1. Stuur `worker` en `availability` naar `POST /v1/workers/availability/preview`. 2. Toon de volledige preview. 3. Vraag duidelijke toestemming. 4. Publiceer alleen de `draft_id` naar `POST /v1/workers/availability`. De server slaat het profiel en de beschikbaarheid atomair op. Beide records slagen, of geen record slaagt. ## Idempotentie Iedere publicatie, wijziging, statuswijziging, boeking, en verwijdering vereist `Idempotency-Key`. Gebruik 8 tot 200 tekens. Gebruik één unieke waarde voor één exacte actie. Een veilige retry met dezelfde gebruiker, actie, inhoud, en sleutel geeft het eerdere resultaat. Hergebruik van de sleutel voor een andere actie geeft `409`. ## Lezen - Taxonomie: `GET /v1/taxonomy` - Vacatures zoeken: `GET /v1/jobs` - Vacature lezen: `GET /v1/jobs/{id-or-slug}` - Beschikbaarheid zoeken: `GET /v1/availability` - Profiel lezen: `GET /v1/workers/{id-or-slug}` - Eigen records: `GET /v1/me` Gebruik bij vacatures `role`, `work_type`, `available_from`, `available_to`, `engagement`, en `sailing_area`. Gebruik `limit` en `cursor` voor paginering. Gebruik `updated_since` voor incrementele synchronisatie. Beschikbaarheid zoeken vereist `role`, `needed_from`, en `needed_to`. Een resultaat dekt de volledige periode. ## Beheren - Vacature wijzigen: `PATCH /v1/jobs/{id}` - Vacature activeren: `PATCH /v1/jobs/{id}` met `{"status":"active"}` - Vacature pauzeren: `PATCH /v1/jobs/{id}` met `{"status":"paused"}` - Vacature sluiten: `PATCH /v1/jobs/{id}` met `{"status":"closed"}` - Vacature verwijderen: `DELETE /v1/jobs/{id}` - Profiel wijzigen: `PATCH /v1/workers/{id}` - Profiel verwijderen: `DELETE /v1/workers/{id}` - Beschikbaarheid wijzigen: `PATCH /v1/availability/{id}` - Beschikbaarheid verwijderen: `DELETE /v1/availability/{id}` - Zoekmelding wijzigen: `PATCH /v1/watches/{id}` - Zoekmelding verwijderen: `DELETE /v1/watches/{id}` Vraag duidelijke toestemming voor iedere wijziging of verwijdering. Een verwijderde vacature blijft intern als `deleted` bewaard en verdwijnt uit openbare zoekresultaten. Het verwijderen van een profiel verwijdert ook zijn beschikbaarheid en gekoppelde boekingsverzoeken. ## Boekingen en zoekmeldingen Maak een boekingsverzoek met `POST /v1/booking-requests`. De server accepteert het verzoek alleen als de werknemer de hele gevraagde periode beschikbaar is. Maak een zoekmelding met `POST /v1/watches`. Lees actuele resultaten met `GET /v1/watches/{id}/matches`. Automatische e-mail- en webhookbezorging is nog niet beschikbaar. Gebruik geplande REST-opvragingen voor meldingen. ## Remote MCP-tools Lezen: - `search_jobs` - `get_job` - `find_available_workers` - `get_worker_profile` - `list_my_records` Voorbereiden en publiceren: - `prepare_job` - `publish_job` - `prepare_worker_availability` - `publish_worker_availability` Beheren: - `update_job` - `pause_job` - `activate_job` - `close_job` - `delete_job` - `update_worker` - `delete_worker` - `update_availability` - `delete_availability` - `request_booking` - `watch_jobs` MCP-publicaties gebruiken `draft_id`, `confirmed: true`, en `idempotency_key`. Andere MCP-wijzigingen gebruiken `confirmed: true` en `idempotency_key`. Gebruik `request_employer_verification` voor dezelfde werkgevercontrole via MCP. ## Browserbeveiliging REST ondersteunt een browsersessie of een OAuth bearer token. Een schrijfopdracht met een browsersessie vereist een same-origin `Origin`-header. Stuur geen wachtwoord, sessiecookie, of bearer token in prompts. ## Bronnen en vacaturepagina's Behoud `source_url`. Verzin geen werkgever, datum, certificaat, of contactgegeven. Een vacature heeft twee vaste openbare versies: - HTML: `https://werkenaanboord.nl/vacatures/{slug}` - Markdown: `https://werkenaanboord.nl/vacatures/{slug}.md` Gebruik alleen vacatures met status `active`. Controleer ook `valid_through` en `last_checked_at`. De site controleert bronlinks dagelijks. Twee opeenvolgende 404- of 410-antwoorden sluiten de vacature. Verdachte nieuwe inhoud krijgt `pending_review`. Deze inhoud blijft uit openbare zoekresultaten. ## Fouten - `400`: ongeldige JSON of ontbrekende idempotentiesleutel. - `401`: login of bearer token ontbreekt of is ongeldig. - `403`: vereiste scope ontbreekt, of een browserwrite heeft een verkeerde origin. - `404`: record bestaat niet of hoort bij een ander account. - `409`: draft, slug, idempotentiesleutel, of boekingsperiode conflicteert. - `410`: draft is verlopen. - `413`: request body is groter dan 64 KB. - `429`: de accountlimiet is bereikt. - `422`: invoer voldoet niet aan het schema. Volledig REST-contract: https://werkenaanboord.nl/openapi.yaml Lees de integratiehandleidingen op https://werkenaanboord.nl/docs/integraties. Download de Node.js CLI op https://werkenaanboord.nl/cli/wab.mjs. Handleiding: https://werkenaanboord.nl/docs/cli.md.