Qdrant RBAC — MCP-сервер для Claude Code: доступ по ролям
Раздаёт доступ к Qdrant по ролям: на входе OIDC-токен, на выходе JWT с ограниченными правами. Нужен, когда векторной базой пользуются несколько команд.
Открыть на GitHubЧто делает 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 сервер работать не будет.
Какие задачи решает
- выдать аналитику только чтение по одной коллекции
- спрятать конфиденциальные документы от части команды
- менять права без правки конфигов и перезапуска
- проверить OIDC-токен до обращения к векторной базе
- свести права нескольких ролей на одной коллекции
Примеры запросов агенту
- Выдай роли data-scientist доступ rw на коллекцию embeddings_v2
- Покажи, какие документы видит моя роль в коллекции embeddings_v2
- Добавь к гранту роли support политику doc_policy с запретом по полю acl_tags
Как установить Qdrant RBAC
Установка
Команды запуска нет в реестре MCP — смотрите README репозитория
По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о Qdrant RBAC
Как установить Qdrant RBAC в Claude Code?
Готовой команды установки для Claude нет. Сервер запускают через Docker: `docker run --rm -p 8000:8000 -e OIDC_ISSUER_URL=... -e OIDC_AUDIENCE=mcp-server -e QDRANT_URL=http://qdrant:6333 -e QDRANT_JWT_SECRET=<секрет> ghcr.io/fidonis/qdrant-mcp-rbac:latest, после чего подключают клиент к эндпоинту /mcp`.
Что делает Qdrant RBAC?
Проверяет OIDC-токен клиента и выпускает под него JWT для Qdrant с правами его ролей. Так один и тот же вызов MCP-инструмента возвращает разным людям разные данные.
Какие алгоритмы подписи принимает сервер?
Только RS256, RS384, RS512, ES256, ES384 и ES512. Алгоритм берётся из ключа подписи, а не из заголовка токена, поэтому HS* и none отклоняются.