---
title: "Безопасность и видимость"
description: "Как MCP-гейтвей защищает данные: права проверяются на каждом вызове, чужие пространства не видны, у инструментов нет выхода в сеть, удаление обратимо."
---

# Безопасность и видимость

Дать агенту прямой доступ к движку хранения — значит собрать «lethal trifecta»: приватные данные × недоверенный контент заметок × исходящий канал. Любая из осей сама по себе безобидна, но вместе они позволяют инъекции в заметке увести ваши данные наружу. MCP-гейтвей Notarium разрывает **каждую** ось конструкцией, а не настройкой. Это не обёртка ради удобства — это граница доверия.

## Трифекта разорвана конструкцией

- **Нет исходящего канала.** У всех инструментов выставлен `openWorldHint:false` — ни один инструмент не ходит в сеть. Нет переноса или копирования между пространствами — внутренняя утечка данных тоже закрыта. Уводить данные некуда.
- **Недоверенный контент обезврежен.** Инструкции сервера статичны и **никогда** не смешиваются с содержимым заметок: контент не подмешивается ни в описания инструментов, ни в server `instructions`. Так инъекция в теле заметки не станет командой агенту.
- **Деструктив только обратимый.** `delete_note` шлёт заметку в корзину; восстановление и безвозвратную очистку делает **человек**, не агент. Это и есть линия «агент не делает необратимого».

## Проверка прав на каждом вызове

Права проверяются дважды. Сначала `tools/list` фильтруется потолком токена — `read`-токен просто не видит пишущие инструменты. Затем каждый `tools/call` дополнительно проверяет доступ к конкретному пространству (`can(principal, action, {space})`). Формула прав — `effective = scopes(token) ∩ grants(principal)`: права токена (потолок действий) пересекаются с живым членством в пространствах. Отзыв гранта сужает токен мгновенно.

Management-действия (выпуск токенов, управление членами) лежат **выше** `write` — утёкший токен уровня `write` не выпустит новый токен и не выдаст доступ.

## Отказ = 404, не 403

Отказ в доступе отдаётся как **404** («нет такого»), а не 403 («нельзя»). Так по кодам ответа нельзя перебором выяснить, какие заметки или пространства существуют за пределами выданных прав. Чужое пространство недостижимо в принципе и неотличимо от несуществующего.

```mermaid
flowchart TD
  call[tools/call] --> listed{инструмент в<br/>потолке токена?}
  listed -->|нет| gone[инструмента нет в tools/list]
  listed -->|да| acl{can principal,<br/>action, space?}
  acl -->|нет| notfound[404 · анти-enumeration]
  acl -->|да| exec[выполнить · провенанс в журнал]
```

## Обезвреживание недоверенного контента

Всё, что уходит агенту — title, snippet, content, frontmatter — очищается перед отправкой: у псевдо-control-тегов (`<system>`, `<instructions>` и подобных) обезвреживаются угловые скобки. Заметка, в которую кто-то вписал «системную инструкцию», приедет агенту как обычный текст, а не как команда.

## История правок видна

Каждая правка записывает в [историю правок](/docs/concepts/versioning/), кто её сделал — конкретный человек или агент. `get_note` и `recall` умеют вернуть, кто правил заметку: человек или агент, какой именно. Инъекция, прошедшая через агента, остаётся видимой и отслеживаемой.

> [!important] Что это значит на практике
> Даже полностью скомпрометированный промптом агент ограничен своим токеном: он не выйдет в сеть, не дотянется до чужого пространства, не сделает необратимого удаления и не выдаст себе прав. Худшее, что он может, — обратимая правка в пределах своих прав, с полным провенансом в журнале.

## Граница: не E2EE

Notarium **осознанно не делает** сквозного шифрования. Умный сервер — поиск, семантика, история, агенты — требует доступа к plaintext. Приватность здесь строится на self-host и владении файлами, а не на E2EE. Модель угроз гейтвея защищает от компрометации **агента**, а не от компрометации хоста, которому вы и так доверяете свои файлы.

## Дальше

- [Подключение агента](/docs/agents/connect/) — токены, права и OAuth-фасад.
- [Аудит извлечения](/docs/agents/audit/) — наблюдаемость того, что агент искал.
- [Интент-инструменты](/docs/agents/intent-tools/) — почему набор именно такой.
