Technische deep-dive · 2026-05-25

De monsys Claude Connector: MCP, OAuth 2.1 en waarom de agent nooit autonoom handelt

Vanuit een Claude-chat vragen stellen over je infra. Hoe de MCP-server werkt, welke 12 tools beschikbaar zijn, en waarom we bewust geen autonome Emergency Actions toestaan.

Wanneer je de monsys Claude Connector instelt, kan je vanuit een Claude-chat vragen stellen als "welke servers hebben een open kritische CVE?" of "wat is de Trust Score van mijn tenant?". Claude roept dan via MCP tools aan op de monsys-hub en geeft je een samenvatting.

Dit artikel beschrijft hoe die connector technisch werkt, welke OAuth-flow gebruikt wordt, welke tools beschikbaar zijn, en — misschien belangrijker — wat de connector bewust niet doet.

MCP: Model Context Protocol in één alinea

MCP is een open protocol (Anthropic, eind 2024) dat definieert hoe een AI-model tools kan aanroepen op externe servers. Een MCP-server publiceert een lijst van beschikbare tools via een JSON-RPC-interface. De client (Claude) roept tools aan door een tools/call-request te sturen met de tool-naam en argumenten.

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "monsys_list_alerts",
    "arguments": {
      "severity": "critical",
      "limit": 10
    }
  }
}

De MCP-server (monsys hub op api.monsys.ai) verwerkt de call, haalt data op uit de database, en retourneert een gestructureerde response. Claude interpreteert die response en formuleert een antwoord.

OAuth 2.1 met PKCE: de auth-flow

De connector gebruikt OAuth 2.1 met PKCE (Proof Key for Code Exchange). Dat is de huidige best-practice voor publieke clients (zoals browser-gebaseerde apps) die geen client-secret veilig kunnen opslaan.

Discovery

Claude detecteert de OAuth-configuratie via:

GET https://api.monsys.ai/.well-known/oauth-authorization-server

Response:
{
  "issuer": "https://api.monsys.ai",
  "authorization_endpoint": "https://app.monsys.ai/mcp/oauth/authorize",
  "token_endpoint": "https://api.monsys.ai/mcp/oauth/token",
  "registration_endpoint": "https://api.monsys.ai/mcp/oauth/register",
  "scopes_supported": ["mcp.read", "mcp.acknowledge"],
  "response_types_supported": ["code"],
  "code_challenge_methods_supported": ["S256"]
}

Registratie

Een client (je eigen script, of Claude) registreert zichzelf:

curl -X POST https://api.monsys.ai/mcp/oauth/register \
  -H "Content-Type: application/json" \
  -d '{
    "client_name": "claude-desktop",
    "redirect_uris": ["https://claude.ai/oauth/callback"]
  }'

# Response:
# { "client_id": "mcp_a1b2c3...", "client_secret": null }

Geen client_secret — dit is een publieke client.

Authorization flow

1. Client genereert PKCE:
   verifier  = random_bytes(32).hex()
   challenge = base64url(sha256(verifier))

2. Redirect naar authorization endpoint:
   https://app.monsys.ai/mcp/oauth/authorize
     ?client_id=mcp_a1b2c3
     &redirect_uri=https://claude.ai/oauth/callback
     &response_type=code
     &scope=mcp.read
     &code_challenge=<challenge>
     &code_challenge_method=S256

3. Gebruiker logt in bij monsys en approveert scopes

4. Redirect terug met authorization code:
   https://claude.ai/oauth/callback?code=<code>

5. Token exchange:
   POST /mcp/oauth/token
     grant_type=authorization_code
     &code=<code>
     &redirect_uri=...
     &client_id=mcp_a1b2c3
     &code_verifier=<verifier>

6. Response:
   {
     "access_token": "mat_...",
     "token_type": "Bearer",
     "expires_in": 3600,
     "scope": "mcp.read"
   }

Token TTL is 1 uur. Daarna moet opnieuw geauthenticeerd worden.

De 12 beschikbare tools

Alle tools behalve één zijn read-only. De scope mcp.read geeft toegang tot de read-tools; mcp.acknowledge is nodig voor de enige write-tool.

ToolWatTypische Claude-vraag
monsys_kpi_summaryFleet-snapshot: Trust Score, open alerts, open detections, SLA-status"Geef me een morning briefing van mijn infra"
monsys_list_agentsActieve hosts met tag-filter"Welke production-servers zijn online?"
monsys_get_agentDetail per host: CPU/mem/disk + open alerts"Hoe staat web-edge-01 er voor?"
monsys_trust_scoreTrust Score + 8 componenten + 7d delta"Is mijn Trust Score verbeterd deze week?"
monsys_list_alertsOpen alerts gefilterd op severity/category/agent"Welke critical alerts staan open?"
monsys_list_detectionsDetection events (24u/7d/30d)"Waren er security events gisteren?"
monsys_get_detectionDrill-down: volledige context + gerelateerde events + suggesties"Leg me dit detection event uit"
monsys_acknowledge_detectionSluit een detection na investigatie"Ack detection event DEV-2026-0441"
monsys_list_kernel_cvesOpen kernel CVEs met affected_hosts count"Welke kernel CVEs zijn nog open?"
monsys_list_os_cvesOS-pakket CVEs van OSV.dev"Welke npm CVEs heeft mijn fleet?"
monsys_list_sla_overviewSLA targets met observed% en error budget"Hoe ver zit ik van mijn SLA-drempel?"
monsys_audit_log_searchGrep op audit_log per event_type/actor/time"Wie heeft afgelopen week Emergency Actions uitgevoerd?"

Elke tool-call wordt gelogd

Dit is geen bijzaak — het is een architecturele garantie. Elke tool-aanroep via de Claude Connector wordt opgeslagen in mcp_call_log:

CREATE TABLE mcp_call_log (
    id          UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    tenant_id   UUID NOT NULL,
    user_id     UUID NOT NULL,
    tool_name   TEXT NOT NULL,
    args_hash   TEXT NOT NULL,
    result_status TEXT NOT NULL,
    duration_ms INT NOT NULL,
    called_at   TIMESTAMPTZ DEFAULT NOW()
);

Raw argumenten worden niet opgeslagen (PII-risico), alleen de SHA256-hash. De log is opvraagbaar via de audit-tool zelf:

monsys_audit_log_search(event_type='mcp_tool_invoked', since='7d')

Voor compliance-contexts is dit belangrijk: als Claude namens een operator data heeft opgevraagd, staat dat in het audit trail.

Waarom de connector read-mostly is

De meest gestelde vraag bij security-teams: "Kan Claude automatisch Emergency Actions uitvoeren?"

Nee. Bewust niet.

Destructieve acties — IsolateNetwork, KillProcess, kernel-updates, user-lockout — vereisen:

  1. TOTP-verificatie van de operator
  2. Een reden van minimaal 20 tekens
  3. Een Emergency Action Token (EAT) die door de hub gesigneerd wordt met Ed25519

Dat proces kan niet worden geautomatiseerd via de Claude Connector. De enige write-tool is monsys_acknowledge_detection — het afsluiten van een detection-event na investigatie, wat volledig reversibel is en gelogd wordt.

De reden is principieel, niet technisch: een AI-agent die autonoom netwerkisolatie kan uitvoeren op productieservers is een ander risico-model dan een AI-agent die je helpt informatie te verzamelen en beslissingen voor te bereiden. Wij kiezen voor het tweede.

Dit sluit aan bij het human-in-the-loop principe dat ook Anthropic's eigen CLUE-systeem gebruikt: Claude suggereert, de operator beslist.

Sovereignty: wat gaat er door Claude's API?

Dit verdient een expliciete sectie. Wanneer je de connector gebruikt, gaan de tool-responses door Anthropic's API om door het model verwerkt te worden. Dat betekent:

Wat WEL door Claude's API gaat:

Wat NIET door Claude's API gaat:

Voor de meeste NIS2-contexts is dit acceptabel. Voor overheidsinstanties of sectoren met strenge data-residency-vereisten (defensie, bepaalde zorg) is de connector per-tenant opt-in en kan hij uitgeschakeld blijven.

De connector is een hulpmiddel voor operators die hun infra via natural language willen bevragen. Hij is niet bedoeld als autonome security-agent.

Een praktisch voorbeeld: morning briefing als Claude-routine

Sla dit op als Claude-routine (dagelijks 08:00):

Open de monsys connector. Roep monsys_kpi_summary aan.
Geef een Slack-stijl update:
- Trust Score: X/100 (delta vs gisteren: +/-)
- Open critical alerts: N
- Open detections (24u): N
Als er critical detections zijn, roep ook monsys_list_detections(since=24h, ack=open) aan
en geef per event één regel: [agent] [rule_kind] [eerste gezien]

Claude assembleert de data via twee tool-calls, correleert waar nodig, en geeft je een leesbare samenvatting — zonder dat je naar het dashboard hoeft.


De Claude Connector is gedocumenteerd in docs.monsys.ai/nl/hub/claude-connector. Eerste vijf servers gratis, OAuth-flow werkt direct na registratie: monsys.ai/nl/signup.

Terug naar blog