Agent-kanalen
Een LLM-agent leest e-mails, roept tools aan, krijgt MCP-toolschema’s te zien en schrijft naar geheugen. Dat zijn de kanalen waarlangs indirecte prompt-injectie, MCP tool poisoning en geheugenvergiftiging binnenkomen. De gebruikersprompt is daarbij vaak volkomen onschuldig.
monsys inspecteert die kanalen niet inline en blokkeert niets (zie de drie invariants). Het legt vast wat de agent te lezen kreeg, gehasht en geredacteerd, en maakt er twee deterministische signalen van: injectie-indicatoren en schema-drift. Een mens oordeelt.
Wat je instuurt
Section titled “Wat je instuurt”Vier getypeerde events op een span van de bestaande SDK-envelope; de exacte velden staan in de envelope-spec.
| Event | Wanneer |
|---|---|
tool_call |
de agent roept een tool aan (naam + argumenten) |
tool_result |
een tool geeft iets terug dat het model te lezen krijgt |
mcp_schema |
een MCP-server toont een toolbeschrijving en input-schema |
memory_write |
de agent schrijft iets naar lang-termijngeheugen |
De SDK’s hebben er helpers voor (span.tool_result(...),
span.mcpSchema(...), s.MemoryWrite(...)). De hub past dezelfde redactie
toe als op prompts: PII wordt vervangen door een gelabelde hash-token, en in
de database staat alleen de sha256 plus metadata.
Injectie-indicatoren
Section titled “Injectie-indicatoren”Op alles wat het model te lezen krijgt (tool-resultaten, schema’s, geheugen) draaien elf benoemde regexes. Geen model, geen score: een treffer is een label op het event.
| Indicator | Waar het op let |
|---|---|
ignore_previous |
“ignore/disregard previous instructions” |
role_override |
“you are now …”, “new instructions:” |
system_prompt_exfil |
“reveal/print the system prompt” |
tool_invocation |
“call/invoke/run the … tool/function/api” |
secrecy |
“do not tell the user” |
hidden_html |
HTML-commentaar met instructies |
zero_width |
onzichtbare Unicode-tekens |
markdown_exfil |
afbeelding-link met querystring naar een extern domein |
shell_pipe |
curl … | sh |
prompt_delimiters |
[INST], <<SYS>>, ### system |
base64_blob |
lange base64-reeks |
Een treffer maakt een melding ai_injection in de actie-inbox (kritiek bij
tool_invocation, shell_pipe, markdown_exfil of drie of meer
indicatoren tegelijk; anders waarschuwing). De melding vertelt welke tool of
bron het was en verwijst naar de trace. Jij beslist of de bron te vertrouwen
is; monsys verandert niets aan de agent.
MCP-schema-drift
Section titled “MCP-schema-drift”Tool poisoning is per definitie een wijziging van de toolbeschrijving. monsys houdt per (app, server, tool) een canonieke sha256 bij van beschrijving + input-schema. Verandert die, dan:
- komt er een rij in het wijzigingslog met oude en nieuwe hash;
- verschijnt melding
ai_mcp_driftin de inbox (en als push); - telt de wijziging als configuratie-drift in de Trust Score (5 punten per open wijziging, maximaal 30, tenant-breed) tot je ze bevestigt.
Bevestigen doe je in het portaal (AI → Agent-kanalen → Bevestig als
bedoeld) of via POST /api/v1/ai/mcp-schemas/ack. Een bedoelde update van
een tool is dus één klik; een onverwachte blijft zichtbaar.
In het portaal en het bewijs
Section titled “In het portaal en het bewijs”- AI → Agent-kanalen: tellers per soort (30 dagen), het schema-register met drift-status, de events met indicator-chips.
- Actie-inbox en app: de meldingen
ai_injectionenai_mcp_drift. - Evidence pack:
agent_events.jsonl(elk event met hash en indicatoren) enmcp_schemas.json(register + wijzigingen in de periode), beide met hun sha256 in het Ed25519-gesigneerde manifest. - API:
GET /api/v1/ai/agent-channels/summary,GET /api/v1/ai/agent-events?indicators=1,GET /api/v1/ai/mcp-schemas.
Onze eigen MCP-connector
Section titled “Onze eigen MCP-connector”De Claude Connector is zelf een agent-kanaal.
Daarom geeft tools/list een _meta mee: de sha256 van de canonieke
toolcatalogus, een Ed25519-handtekening met de hub-sleutel en de entry in het
transparency log (kind = mcp.tool_catalog).
Wie de hash bewaart, kan later aantonen welke toolbeschrijvingen Claude te
zien kreeg; een gewijzigde catalogus is een nieuwe, publieke log-entry.
Wat dit niet is
Section titled “Wat dit niet is”Geen firewall, geen LLM-as-judge, geen blokkade in het request-pad en geen scan van trainingsdata. Wil je enforcement, koppel dan je eigen gate op onze webhook; monsys levert het bewijs dat een auditor onder AI Act art. 15 en NIS2 art. 21 kan verifiëren.