# Qdrant RBAC

Раздаёт доступ к Qdrant по ролям: на входе OIDC-токен, на выходе JWT с ограниченными правами. Нужен, когда векторной базой пользуются несколько команд.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed
- Автор: Fidonis
- Лицензия: MIT · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/Fidonis/qdrant-mcp-rbac
- Обновлён: 2026-10-19
- HTML: https://affpapa.org/nevibecode/mcp/qdrant-rbac

## Что делает

Сервер на FastMCP поднимает Qdrant поверх streamable HTTP и проверяет каждый запрос по OIDC-токену. Подпись, срок, audience и issuer сверяются с ключами провайдера через JWKS; принимаются только RS256, RS384, RS512, ES256, ES384 и ES512. Симметричные алгоритмы и токены без подписи отбрасываются. Роли читаются из `realm_access.roles` и из `resource_access.<client>.roles`.

Дальше `JWTBuilder` собирает для пользователя отдельный токен Qdrant. Роль из `RBAC_ADMIN_ROLE` получает global-manage сразу, остальным `AclResolver` отдаёт права из коллекции `_rbac_acl` — по умолчанию она называется так. Права лежат данными внутри Qdrant, а не в конфигах, поэтому админ меняет их на ходу через MCP-инструменты. Точка на каждый грант имеет id `uuid5(role, collection)`, так что повторная выдача ничего не дублирует.

Кроме уровня коллекции есть `doc_policy` — фильтр по отдельным документам. Он подставляется как `must` в `search_collection`, `search_collection_by_text`, `scroll_collection` и `list_documents`, а фильтр самого вызывающего сохраняется рядом. Гранты без `doc_policy` открывают всю коллекцию. Для документов, которым нужен контроль, зарезервировано необязательное поле `acl_tags`: без него документ в default-deny гранте просто не попадёт в выдачу. Без совпадающего секрета в `QDRANT_JWT_SECRET` и `api-key` Qdrant сервер работать не будет.

## Требования
- Нужно: Docker
- Переменные окружения: `OIDC_ISSUER_URL`, `OIDC_AUDIENCE`, `QDRANT_URL`, `QDRANT_JWT_SECRET` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Установка**
- Команды запуска нет в реестре MCP — смотрите README репозитория

## Когда брать
- выдать аналитику только чтение по одной коллекции
- спрятать конфиденциальные документы от части команды
- менять права без правки конфигов и перезапуска
- проверить OIDC-токен до обращения к векторной базе
- свести права нескольких ролей на одной коллекции

## Примеры запросов агенту
- Выдай роли data-scientist доступ rw на коллекцию embeddings_v2
- Покажи, какие документы видит моя роль в коллекции embeddings_v2
- Добавь к гранту роли support политику doc_policy с запретом по полю acl_tags

## Похожие
- [REA](https://affpapa.org/nevibecode/mcp/rea.md) — MCP-сервер · ★ 392262
- [World Monitor](https://affpapa.org/nevibecode/mcp/world-monitor.md) — MCP-сервер · ★ 89609
- [mcp](https://affpapa.org/nevibecode/mcp/kubeshark-mcp.md) — MCP-сервер · ★ 12110
- [Robin: AI-Powered Dark Web OSINT](https://affpapa.org/nevibecode/mcp/robin-ai-powered-dark-web-osint.md) — MCP-сервер · ★ 7718
- [jshookmcp](https://affpapa.org/nevibecode/mcp/jshookmcp.md) — MCP-сервер · ★ 2066
- [OpenOSINT](https://affpapa.org/nevibecode/mcp/openosint.md) — MCP-сервер · ★ 1816

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
