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.
| Tool | Wat | Typische Claude-vraag |
|---|---|---|
monsys_kpi_summary | Fleet-snapshot: Trust Score, open alerts, open detections, SLA-status | "Geef me een morning briefing van mijn infra" |
monsys_list_agents | Actieve hosts met tag-filter | "Welke production-servers zijn online?" |
monsys_get_agent | Detail per host: CPU/mem/disk + open alerts | "Hoe staat web-edge-01 er voor?" |
monsys_trust_score | Trust Score + 8 componenten + 7d delta | "Is mijn Trust Score verbeterd deze week?" |
monsys_list_alerts | Open alerts gefilterd op severity/category/agent | "Welke critical alerts staan open?" |
monsys_list_detections | Detection events (24u/7d/30d) | "Waren er security events gisteren?" |
monsys_get_detection | Drill-down: volledige context + gerelateerde events + suggesties | "Leg me dit detection event uit" |
monsys_acknowledge_detection | Sluit een detection na investigatie | "Ack detection event DEV-2026-0441" |
monsys_list_kernel_cves | Open kernel CVEs met affected_hosts count | "Welke kernel CVEs zijn nog open?" |
monsys_list_os_cves | OS-pakket CVEs van OSV.dev | "Welke npm CVEs heeft mijn fleet?" |
monsys_list_sla_overview | SLA targets met observed% en error budget | "Hoe ver zit ik van mijn SLA-drempel?" |
monsys_audit_log_search | Grep 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:
- TOTP-verificatie van de operator
- Een reden van minimaal 20 tekens
- 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:
- Hostnames en IP-adressen
- Alert-titels en beschrijvingen
- Detection event metadata (src_ip, target_user)
- Trust Score-cijfers
- CVE-identificatoren
Wat NIET door Claude's API gaat:
- Geen agent-side raw data (de connector leest hub-DB, niet host-resources)
- Geen geheimen of credentials
- Geen audit-log raw bodies (alleen event_type + metadata)
- Geen AI observability trace-inhoud (prompts/completions)
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.