home · demo · events · compare: remote-trustfall-project-mcp-settings

TrustFall-style project-defined MCP onboarding risk

MCP02MCP04Human-in-the-Loopresources/readtools/call

What just happened in your session

vulnerablecompare-vuln-remote-trustfall-project-mcp-settings2026-09-07T15:43:25.834375+00:00
side effect landed in /app/var/process-ledger.jsonl
defendedcompare-def-remote-trustfall-project-mcp-settings2026-09-07T15:43:25.834570+00:00
blocked by per_server_consent_policy · logged to var/telemetry.jsonl
Tool description that differed: run_demo

poisoned

Run the canonical TrustFall scenario for this mode and return the DemoResult JSON.

sanitised

Run the canonical TrustFall scenario for this mode and return the DemoResult JSON.

Vulnerable mode

violation_detected: truesecret_exfiltrated: false
✗ The attack succeeded
where it landed
  • var/process-ledger.jsonl
  • sandbox/effects/project-mcp-started-<session>.txt
trust decision
Folder trusted
True
Per server consent
False
Started server
drift-mock.project-helper
Started record
{5 keys}
Proof artifact
/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
telemetry events for this run
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
sandbox_file_written impact-runnersandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt allowed_by_vulnerable_mode
impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt
permission_change_applied trustfall.project_mcp_settingsdrift-mock.project-helper allowed_by_vulnerable_mode
trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent
Background
A project-level mcp.json file lists MCP servers the IDE auto-connects to on open. The vulnerable client treats discovery as enablement: simply seeing a new server in the file is enough to add its tool surface to the agent. A malicious project ships its own server entry; on first open the agent silently gains the attacker's tools.

Defended mode

violation_detected: truesecret_exfiltrated: falseblocked_by: per_server_consent_policy
✓ The defense blocked the attack
where it landed
  • var/telemetry.jsonl
rule that fired
per_server_consent_policy
trust decision
Folder trusted
True
Per server consent
False
Started server
None
Capability diff
[2 items]
telemetry events for this run
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
policy_decision policy.per_server_consent_policydrift-mock.project-helper blocked
policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'
Background
per_server_consent_policy decouples discovery from enablement. Every newly discovered server requires an explicit grant_per_server_consent before its tools become callable; auto-connect on open is refused and surfaced as a consent-required event.
Background on this attack class

TrustFall-style project-defined MCP onboarding demo. The mock repository ships an `.mcp.json` and a `.claude/settings.json` that point at an "additional" MCP server. Vulnerable: a single folder- trust acceptance is enough to start the project-defined server. Defended: per-server explicit consent is required after folder trust.

Developer view: raw outputs, tools/list, MCP Inspector
Vulnerable mount: http://mcp-sec.data.mayflower.tech/mcp/trustfall-project-mcp-settings/vulnerable/
Defended mount: http://mcp-sec.data.mayflower.tech/mcp/trustfall-project-mcp-settings/defended/
Open in MCP Inspector: run npx @modelcontextprotocol/inspector locally and paste either URL above as a Streamable HTTP server.
DemoResult: vulnerable
{
  "experiment": "remote-trustfall-project-mcp-settings",
  "mode": "vulnerable",
  "violation_detected": true,
  "secret_exfiltrated": false,
  "blocked_by": [],
  "events": [
    {
      "type": "trust_decision",
      "folder_trusted": true,
      "per_server_consent": false,
      "started_server": "drift-mock.project-helper",
      "started_record": {
        "ts": "2026-09-07T15:43:25.833349+00:00",
        "server_id": "drift-mock.project-helper",
        "origin": "project_dot_mcp_json",
        "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
        "experiment": "remote-trustfall-project-mcp-settings"
      },
      "proof_artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  ]
}
DemoResult: defended
{
  "experiment": "remote-trustfall-project-mcp-settings",
  "mode": "defended",
  "violation_detected": true,
  "secret_exfiltrated": false,
  "blocked_by": [
    "per_server_consent_policy"
  ],
  "events": [
    {
      "type": "trust_decision",
      "folder_trusted": true,
      "per_server_consent": false,
      "started_server": null,
      "capability_diff": [
        "tools/call",
        "resources/read"
      ]
    }
  ]
}
tools/list (vulnerable)
run_demo
description
Run the canonical TrustFall scenario for this mode and return the DemoResult JSON.
inputSchema
{
  "properties": {
    "session_id": {
      "default": "mcp-vulnerable",
      "title": "Session Id",
      "type": "string"
    },
    "grant_per_server_consent": {
      "default": false,
      "title": "Grant Per Server Consent",
      "type": "boolean"
    }
  },
  "title": "run_demoArguments",
  "type": "object"
}
tools/list (defended)
run_demo
description
Run the canonical TrustFall scenario for this mode and return the DemoResult JSON.
inputSchema
{
  "properties": {
    "session_id": {
      "default": "mcp-defended",
      "title": "Session Id",
      "type": "string"
    },
    "grant_per_server_consent": {
      "default": false,
      "title": "Grant Per Server Consent",
      "type": "boolean"
    }
  },
  "title": "run_demoArguments",
  "type": "object"
}
telemetry: vulnerable
[
  {
    "event_id": "evt_c1ff8daf42377e71",
    "ts": "2026-07-26T03:20:16.486651+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_785406d9a5952f7f",
    "ts": "2026-07-26T03:20:16.486779+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  },
  {
    "event_id": "evt_2dc1e7ffccce3fdc",
    "ts": "2026-08-19T08:56:24.832661+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_10cf514b2fd618e8",
    "ts": "2026-08-19T08:56:24.832721+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  },
  {
    "event_id": "evt_c7bda72592677c62",
    "ts": "2026-08-29T11:19:29.198601+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_f407cd40a524cb37",
    "ts": "2026-08-29T11:19:29.198786+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  },
  {
    "event_id": "evt_fa4f62edda2a22ec",
    "ts": "2026-09-07T14:02:16.170461+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_12b4fd9c4257a71a",
    "ts": "2026-09-07T14:02:16.170599+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  },
  {
    "event_id": "evt_a9be24bed282d8fe",
    "ts": "2026-09-07T14:02:59.192174+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_c23e1d5c6b3348e5",
    "ts": "2026-09-07T14:02:59.192340+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  },
  {
    "event_id": "evt_9707f62193d23e82",
    "ts": "2026-09-07T14:04:38.698843+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_5020f8f201789d5c",
    "ts": "2026-09-07T14:04:38.698925+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  },
  {
    "event_id": "evt_d182acf29968e076",
    "ts": "2026-09-07T15:43:25.834166+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "sandbox_file_written",
    "severity": "info",
    "message": "impact-runner: file written: project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
    "data": {
      "actor": "impact-runner",
      "target": "sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": "CANARY_remote_trustfall_project_mcp_settings_41ed043a755abf078d0d0605",
      "artifact": "/app/sandbox/effects/project-mcp-started-compare-vuln-remote-trustfall-project-mcp-settings.txt"
    }
  },
  {
    "event_id": "evt_892464362f6fca92",
    "ts": "2026-09-07T15:43:25.834375+00:00",
    "session_id": "compare-vuln-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "vulnerable",
    "event_type": "permission_change_applied",
    "severity": "info",
    "message": "trustfall.project_mcp_settings: project-defined MCP server 'drift-mock.project-helper' started after folder trust without per-server consent",
    "data": {
      "actor": "trustfall.project_mcp_settings",
      "target": "drift-mock.project-helper",
      "policy_decision": "allowed_by_vulnerable_mode",
      "canary_id": null,
      "artifact": "/app/var/process-ledger.jsonl",
      "capabilities": "tools/call, resources/read"
    }
  }
]
telemetry: defended
[
  {
    "event_id": "evt_2c97c3978fdac63f",
    "ts": "2026-07-26T03:20:16.486883+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  },
  {
    "event_id": "evt_38e8a69bc5d29e5e",
    "ts": "2026-08-19T08:56:24.832774+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  },
  {
    "event_id": "evt_6a4069d82c049c2f",
    "ts": "2026-08-29T11:19:29.198961+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  },
  {
    "event_id": "evt_cbe0eb3c53c7d0cd",
    "ts": "2026-09-07T14:02:16.170715+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  },
  {
    "event_id": "evt_dac15450d7568898",
    "ts": "2026-09-07T14:02:59.192517+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  },
  {
    "event_id": "evt_258034a016857afb",
    "ts": "2026-09-07T14:04:38.699075+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  },
  {
    "event_id": "evt_d254c0f2c5a9ebdd",
    "ts": "2026-09-07T15:43:25.834570+00:00",
    "session_id": "compare-def-remote-trustfall-project-mcp-settings",
    "experiment": "remote-trustfall-project-mcp-settings",
    "mode": "defended",
    "event_type": "policy_decision",
    "severity": "warning",
    "message": "policy.per_server_consent_policy: folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'",
    "data": {
      "actor": "policy.per_server_consent_policy",
      "target": "drift-mock.project-helper",
      "policy_decision": "blocked",
      "canary_id": null,
      "artifact": null,
      "reason": "folder trust is not enough; per-server consent is required to start 'drift-mock.project-helper'"
    }
  }
]