# MCP-server

> Verbind AI-assistenten met Tidal Control via het Model Context Protocol. Instellen voor Claude Desktop, Claude Code, Codex, ChatGPT en elke MCP-client.

Source: https://tidalcontrol.com/nl/docs/ai/mcp

Met de MCP-server verbind je AI-assistenten met Tidal Control. Na verbinding kan je assistent je compliance-gegevens doorzoeken, records aanmaken en bijwerken, relaties tussen entiteiten beheren en KPI's samenvatten, allemaal vanuit een normaal gesprek.

Je bestaande Tidal Control-rechten blijven gelden. Heb je in het portaal alleen leesrechten, dan kan je assistent ook alleen lezen.

## Wat je kunt doen

Na verbinding kun je je AI-assistent vragen om je te helpen met je compliance-werk in Tidal Control. Hieronder een paar voorbeelden van wat mogelijk is.

**Vragen stellen over je compliance-gegevens**

- "Hoeveel risico's met hoge impact hebben geen maatregelen eraan gekoppeld?"
- "Laat alle leveranciers zien met achterstallige beoordelingen."
- "Welke ISO 27001-eisen zijn niet gedekt door een van onze maatregelen?"
- "Wat is het slaagpercentage van onze geautomatiseerde tests deze maand?"

**KPI's en statistieken opvragen**

- "Vat onze SOC 2-compliance samen."
- "Hoeveel middelen zijn toegewezen, beoordeeld en compliant?"
- "Geef me de status van alle issues die de afgelopen 30 dagen zijn aangemaakt."

**Bulkwijzigingen die je normaal handmatig zou doen**

- "Maak issues aan voor elk van deze 12 auditbevindingen en koppel ze aan maatregel AC-01."
- "Archiveer alle leveranciersbeoordelingen die meer dan een jaar geleden zijn verlopen."
- "Voeg Server-1, Server-2 en Server-3 toe aan het plan 'Kwartaal Toegangsreview'."

**Zaken aan elkaar koppelen**

- "Koppel maatregelen CC6.1 tot en met CC6.8 aan risico R-042."
- "Koppel `backup-policy.pdf` als bewijs aan de back-upverificatie van dit kwartaal."
- "Voeg een referentie toe van ISO 27001 A.8.1 aan onze Toegangscontrolebeleid-maatregel."

**Documenten doorzoeken op inhoud**

- "In welk van onze beleidsdocumenten staat iets over thuiswerken?"
- "Zoek het document dat onze incident response-tijdlijn beschrijft."

**Context-bewuste prompts**

Je assistent weet wie je bent, in welke organisatie je werkt en wat vandaag de datum is, dus je kunt dingen zeggen als *"wat heb ik volgende week af te ronden?"* zonder namen of datums uit te schrijven.

**Meer voorbeelden:** voor een stap-voor-stap doorloop op basis van hoe klanten de MCP echt gebruiken (inclusief de tools die elke prompt aanroept), zie [Gebruiksvoorbeelden](/docs/ai/mcp/examples).

## Voordat je begint

Je hebt je **organisatie-ID** nodig. Dat is het deel van de portal-URL waarmee je inlogt. Log je bijvoorbeeld in op `portal.tidalcontrol.com/acme/...`, dan is je organisatie-ID `acme`.

> **info:**

Open in het portaal **Mijn voorkeuren**. Het onderdeel **Verbind je AI-assistent** toont je server-URL met je organisatie-ID al ingevuld, en de instellingen voor elke client hieronder, klaar om te kopiëren.

Vervang `<organisation-id>` in de URL's hieronder door die van jou.

## Verbinden

Kies hieronder je client. Ze hebben allemaal je organisatie-ID nodig, en elke client opent één keer een browser om in te loggen.

### Claude Desktop

> **info:**

Er komt binnenkort een officiële Tidal Control-connector voor Claude. Gebruik tot die tijd de aangepaste connector hieronder.

1. Klik in het **berichtvak** (waar je je prompts typt) op de **+**-knop
2. Ga naar **Connectors** → **Manage connectors**
3. Klik op de **+** naast **Connectors** → **Add custom connector**
4. Vul in:
    - **Name:** Tidal Control
    - **Remote MCP server URL:** `https://mcp.tidalcontrol.com/<organisation-id>`
5. Log in wanneer je browser wordt geopend

### Claude Code

Voer dit uit in je terminal:

```bash
claude mcp add tidalcontrol --transport http https://mcp.tidalcontrol.com/<organisation-id>
```

Er opent een browservenster om in te loggen. Daarna is de verbinding gereed.

### Codex

Registreer de server en log in:

```bash
codex mcp add tidalcontrol --url https://mcp.tidalcontrol.com/<organisation-id>
codex mcp login tidalcontrol
```

### ChatGPT

> **info:**

MCP-ondersteuning is beschikbaar voor **Plus** (alleen web), **Business**-, **Enterprise**- en **Edu**-abonnementen. De Tidal Control MCP-server is remote gehost, wat vereist is door ChatGPT's MCP-integratie.

1. Ga naar **Settings** → **Plugins** en schakel **Developer mode** in onderaan de pagina
2. Klik op de **+** op de **Plugins**-pagina om het venster **New plugin** te openen
3. Vul een naam in (bijvoorbeeld "Tidal Control") en de MCP-server URL:
   ```
   https://mcp.tidalcontrol.com/<organisation-id>
   ```
4. Laat de OAuth-instellingen op de standaardwaarden staan
5. Log in wanneer daarom wordt gevraagd
6. Klik op **Create**
7. Open een nieuw gesprek, klik op **+** en selecteer je plugin uit het toolsmenu

> **info:**

**Plugins heetten voorheen Connectors.** OpenAI heeft dit onderdeel in juli 2026 hernoemd. Oudere handleidingen, waaronder eerdere versies van deze pagina, spreken van **Connectors**, **Create app** of **Advanced Settings**. Zie je die namen nog in ChatGPT, dan zijn de stappen hetzelfde.

Na het testen kan een admin of eigenaar op een Business-, Enterprise- of Edu-abonnement de plugin beschikbaar maken voor de hele workspace via **Workspace Settings** → **Plugins** → **Drafts** → **Publish**.

Na publicatie kunnen teamleden de plugin aanroepen via een `@`-vermelding of via **+** → **More** → plugin selecteren.

### Cursor en VS Code

Vul je organisatie-ID in en klik op je editor. Die opent met de Tidal Control-server al ingevuld; bevestig de installatie en log in wanneer je browser opent.

Liever handmatig? Voeg `https://mcp.tidalcontrol.com/<organisation-id>` toe als externe (HTTP) MCP-server.

### Elke MCP-client

Elke client die MCP over Streamable HTTP met OAuth 2.1 ondersteunt, kan verbinden. Wijs de client naar `https://mcp.tidalcontrol.com/<organisation-id>`. De server publiceert zijn OAuth-endpoints via [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728) en ondersteunt Dynamic Client Registration ([RFC 7591](https://datatracker.ietf.org/doc/html/rfc7591)), dus de meeste clients ontdekken alles automatisch.

## Hoe het werkt

Wanneer je verbinding maakt, ontdekt je AI-tool automatisch hoe het moet authenticeren met Tidal Control. Je logt eenmalig in via je browser met je normale Tidal Control-gegevens. Daarna blijft de verbinding actief onder jouw identiteit.

**Je rechten gelden.** De assistent kan alleen doen wat jouw rol in het portaal toestaat. Een gebruiker met alleen leesrechten kan via MCP geen records aanmaken of wijzigen, net als in het portaal.

## Gebieden die de MCP-server ondersteunt

De MCP-server biedt tools voor alle belangrijke gebieden van Tidal Control:

<table>
  <thead>
    <tr>
      <th>Gebied</th>
      <th>Wat je assistent kan doen</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>Risico's</strong></td>
      <td>Zoeken, aanmaken, bijwerken, archiveren, verwijderen. Risicobeoordelingen beheren. Koppelen aan maatregelen en middelen.</td>
    </tr>
    <tr>
      <td><strong>Maatregelen</strong></td>
      <td>Zoeken, aanmaken, bijwerken, archiveren, verwijderen. Koppelen aan middelen, risico's, plannen en raamwerkreferenties.</td>
    </tr>
    <tr>
      <td><strong>Middelen</strong></td>
      <td>Zoeken, aanmaken, bijwerken, archiveren, verwijderen. CIA-scores, RTO/RPO en serviceniveaus instellen. Koppelen aan maatregelen, risico's en plannen.</td>
    </tr>
    <tr>
      <td><strong>Taken</strong></td>
      <td>Zoeken, aanmaken, bijwerken, sluiten, heropenen en verwijderen van issues, beoordelingen en uitvoeringen. Koppelen aan maatregelen en middelen.</td>
    </tr>
    <tr>
      <td><strong>Opmerkingen</strong></td>
      <td>Opmerkingen bij taken toevoegen, bijwerken en verwijderen.</td>
    </tr>
    <tr>
      <td><strong>Bewijs</strong></td>
      <td>Documenten als bewijs koppelen aan taken.</td>
    </tr>
    <tr>
      <td><strong>Documenten</strong></td>
      <td>Zoeken op filter of op betekenis (semantisch). Aanmaken, bijwerken, verwijderen.</td>
    </tr>
    <tr>
      <td><strong>Documentclassificaties</strong></td>
      <td>Classificaties tussen documenten en typen opzoeken, aanmaken, bijwerken, goedkeuren en verwijderen.</td>
    </tr>
    <tr>
      <td><strong>Vereiste documenten</strong></td>
      <td>Bekijk welke documenten je raamwerken vereisen.</td>
    </tr>
    <tr>
      <td><strong>Raamwerken</strong></td>
      <td>Bekijk raamwerken (ISO 27001, SOC 2, GDPR en meer) en hun referenties.</td>
    </tr>
    <tr>
      <td><strong>Plannen</strong></td>
      <td>Zoeken, aanmaken, bijwerken, archiveren, verwijderen. Koppelen aan middelen en maatregelen. Activiteitsconfiguraties op een plan beheren.</td>
    </tr>
    <tr>
      <td><strong>Leveranciers</strong></td>
      <td>Zoeken, aanmaken, bijwerken, archiveren, verwijderen. Leveranciersbeoordelingen beheren.</td>
    </tr>
    <tr>
      <td><strong>Personeel</strong></td>
      <td>Personen, groepen en platformgebruikers zoeken. Personen en groepen aanmaken en verwijderen.</td>
    </tr>
    <tr>
      <td><strong>Tests</strong></td>
      <td>Geautomatiseerde tests en hun resultaten bekijken.</td>
    </tr>
    <tr>
      <td><strong>Insights & KPI's</strong></td>
      <td>KPI's voor middelen, personeel en leveranciers. Statistieken voor tests, activiteiten en raamwerkcompliance.</td>
    </tr>
    <tr>
      <td><strong>Context</strong></td>
      <td>De huidige gebruiker, huidige organisatie en huidige datum en tijd in jouw tijdzone opzoeken.</td>
    </tr>
  </tbody>
</table>

## Entiteiten koppelen

Je kunt je assistent vragen om entiteiten aan elkaar te koppelen, bijvoorbeeld:

- "Koppel maatregel AC-01 aan risico R-003"
- "Voeg middelen Server-1 en Server-2 toe aan plan Kwartaal Toegangsreview"
- "Verwijder de referentie naar ISO 27001 A.8.1 van deze maatregel"

Deze acties voegen individuele koppelingen toe of verwijderen ze, zonder bestaande relaties te beïnvloeden.

---

## Voor developers

> **info:**

De onderstaande secties zijn voor developers die aangepaste integraties of geautomatiseerde agents bouwen.

### Programmatische toegang (Device Authorization-flow)

Voor geautomatiseerde agents en scripts die geen browser kunnen openen, gebruik je de [OAuth Device Authorization Grant (RFC 8628)](https://datatracker.ietf.org/doc/html/rfc8628):

**Stap 1: Vraag een apparaatcode aan**

```bash
curl -s -X POST https://auth.tidalcontrol.com/realms/<organisation-id>/protocol/openid-connect/auth/device \
  -d "client_id=portal" \
  -d "scope=openid email profile roles portal-roles offline_access"
```

Antwoord:

```json
{
  "device_code": "abc123...",
  "user_code": "ABCD-EFGH",
  "verification_uri": "https://auth.tidalcontrol.com/realms/<organisation-id>/device",
  "expires_in": 600,
  "interval": 5
}
```

**Stap 2: Authenticeer in een browser**

Open de `verification_uri`, voer de `user_code` in en log in. Dit hoeft maar één keer. Sla het refresh token op voor toekomstige sessies.

**Stap 3: Poll voor een token**

```bash
curl -s -X POST https://auth.tidalcontrol.com/realms/<organisation-id>/protocol/openid-connect/token \
  -d "client_id=portal" \
  -d "grant_type=urn:ietf:params:oauth:grant-type:device_code" \
  -d "device_code=abc123..."
```

Retourneert `authorization_pending` totdat de gebruiker goedkeurt. Na goedkeuring:

```json
{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "expires_in": 300,
  "refresh_expires_in": 1800
}
```

**Stap 4: Verbind met MCP**

```bash
curl -X POST https://mcp.tidalcontrol.com/<organisation-id> \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"method":"initialize","params":{...},"jsonrpc":"2.0","id":0}'
```

Vernieuw het token voordat het verloopt. Het token bevat jouw gebruikersidentiteit en rechten.

### Paginering

Zoektools retourneren gepagineerde resultaten met `content`, `hasNext` en `totalElements`. Bestuur de paginering met:

- **sortBy**: `name`, `createdDate`, `lastModifiedDate`, `notBefore` of `expires`
- **sortDirection**: `ASC` of `DESC` (standaard: `DESC`)
- **maxResults**: 1 tot 100 (standaard: 25)

### Ondersteunde standaarden

<table>
  <thead>
    <tr>
      <th>Standaard</th>
      <th>Doel</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><a href="https://datatracker.ietf.org/doc/html/rfc9728">RFC 9728</a></td>
      <td>OAuth Protected Resource Metadata</td>
    </tr>
    <tr>
      <td><a href="https://datatracker.ietf.org/doc/html/rfc8414">RFC 8414</a></td>
      <td>Authorization Server Metadata</td>
    </tr>
    <tr>
      <td><a href="https://datatracker.ietf.org/doc/html/draft-ietf-oauth-client-id-metadata-document-00">CIMD</a></td>
      <td>Client ID Metadata Documents</td>
    </tr>
    <tr>
      <td><a href="https://datatracker.ietf.org/doc/html/rfc7591">RFC 7591</a></td>
      <td>Dynamic Client Registration</td>
    </tr>
    <tr>
      <td><a href="https://datatracker.ietf.org/doc/html/rfc8628">RFC 8628</a></td>
      <td>Device Authorization Grant</td>
    </tr>
    <tr>
      <td>PKCE (S256)</td>
      <td>Vereist voor alle authorization code-flows</td>
    </tr>
  </tbody>
</table>
