mcp-tenant-isolation
mcp-tenant-isolation
Статический анализатор для многопользовательских SaaS и MCP-серверов. Выявляет утечки данных между арендаторами до попадания в продакшн.
57 детерминированных правил, охватывающих изоляцию арендаторов, фильтры запросов к БД, IDOR, область видимости ключей кэша, RLS, пробелы в схеме и специфические риски MCP (видимость инструментов, префикс кэша, привязка сессии, хранилище учетных данных). Работает с Prisma, Drizzle, сырым SQL, Next.js, Express и Fastify. Включает MCP-сервер для интеграции с Claude Desktop и Cursor.
Для кого это
Разработчики SaaS, создающие многопользовательские приложения, которым нужно выявлять утечки данных между арендаторами
Разработчики MCP-серверов, создающие инструменты для работы с данными в разрезе арендаторов
Команды безопасности, которым нужна изоляция арендаторов в рамках CI/CD
Разработчики AI-агентов, которые хотят, чтобы их агенты сканировали код по запросу
Related MCP server: @squirex.dev/mcp-server
Зачем
Сканеры безопасности общего назначения (Snyk, Semgrep, CodeQL) не понимают паттерны изоляции арендаторов или архитектуру MCP-серверов. Утечки данных между арендаторами остаются незамеченными. Этот инструмент заполняет этот пробел с помощью 57 целенаправленных детерминированных правил.
Каждое правило является детерминированным и воспроизводимым. Никакого машинного обучения, никаких ложных предположений. Каждое правило проверяет конкретные паттерны кода, наличие защитных механизмов и пути потоков данных. Вы получаете одинаковые результаты при каждом запуске.
Установка
npm install -g mcp-tenant-isolation
# or use npx (no install needed)
npx mcp-tenant-isolation scan ./src
# or use Docker (no Node.js needed)
docker run --rm -v $(pwd):/code subodhkc/mcp-tenant-isolation scan /code/srcБыстрый старт
mti scan ./src
mti scan ./src --format sarif --output results.sarif
mti scan ./src --format markdown --output TENANT-ISOLATION-REPORT.md
mti scan ./src --format ai --output findings.json
mti scan ./src --severity HIGH
mti initДемо
Правила
42 Общих правила для многопользовательских систем
Префикс | Категория | Кол-во | Серьезность | Описание |
TCM | Управление контекстом арендатора | 6 | Критическая | ID арендатора из сессий, а не из ввода клиента. Распространение контекста через асинхронные границы. |
DBQ | Изоляция запросов к БД | 10 | Критическая | Каждый запрос, затрагивающий данные в разрезе арендатора, должен содержать фильтр по арендатору. |
IDOR | Предотвращение IDOR | 5 | Критическая | Поиск по ID должен проверять принадлежность арендатору. |
CSI | Изоляция кэша и сессий | 4 | Высокая | Ключи кэша и данные сессий должны быть в разрезе арендатора. |
API | Безопасность API | 3 | Высокая | Ограничение скорости с учетом арендатора и ограничение области видимости ответов. |
FSI | Изоляция файлового хранилища | 4 | Высокая | Доступ к S3, Blob и файловой системе должен быть в разрезе арендатора. |
LOG | Логирование и аудит | 4 | Средняя | Журналы аудита должны включать контекст арендатора. |
SCH | Схема и миграции | 6 | Высокая | Модели Prisma и SQL-миграции должны включать колонки арендатора. |
15 Специфических правил MCP
ID | Название | Серьезность | Описание |
MCP-001 | Ограничение видимости инструментов | Критическая | Обработчик инструмента не имеет фильтра разрешения/запрета на основе арендатора. |
MCP-002 | Префикс арендатора в ключе кэша | Критическая | Результаты инструмента кэшируются без префикса арендатора. |
MCP-003 | Привязка сессии к пользователю+арендатору | Критическая | ID сессии используется как единственная авторизация. |
MCP-004 | Обмен токенами (RFC 8693) | Высокая | Исходный токен передается вместо обмена токенами. |
MCP-005 | Ограничение скорости на арендатора | Средняя | Отсутствует ограничение скорости на вызовы инструментов для каждого арендатора. |
MCP-006 | Пространство имен векторного хранилища для арендатора | Высокая | Общее векторное хранилище без пространств имен арендаторов. |
MCP-007 | Инъекция в описание инструмента | Средняя | Описание инструмента может обойти изоляцию. |
MCP-008 | Область видимости хранилища учетных данных для арендатора | Критическая | Хранилище учетных данных хранит токены без привязки к арендатору. |
MCP-009 | Общий сервисный аккаунт | Высокая | Один общий ключ API для всех вызовов API арендаторов. |
MCP-010 | Очистка сессии при отключении | Средняя | Отсутствует детерминированная очистка сессии. |
MCP-011 | Идентификатор арендатора в телеметрии | Низкая | Телеметрия удаляет идентификатор арендатора. |
MCP-012 | Локальная привязка (127.0.0.1) | Высокая | MCP-сервер привязывается к 0.0.0.0 вместо 127.0.0.1. |
MCP-013 | Корневая директория файловой системы для арендатора | Высокая | Обработчик инструмента обращается к файловой системе без корня арендатора. |
MCP-014 | Утечка артефактов между арендаторами | Высокая | Хранилище артефактов без префикса арендатора. |
MCP-015 | Динамическое пространство имен инструментов | Средняя | Инструменты регистрируются без пространства имен арендатора. |
Архитектура
Конвейер сканера работает в шесть этапов:
Парсеры - Babel AST для TS/JS, парсер схемы Prisma, парсер SQL-миграций, обнаружение импорта MCP SDK
IR и граф потоков - Промежуточное представление, захватывающее источники, стоки, защитные механизмы, маршруты, определения инструментов MCP
Движок правил - 57 детерминированных правил, оцениваемых на основе IR. Каждое правило определяет источники, стоки, необходимые защитные механизмы
Фильтр ложных срабатываний - Обнаружение тестовых файлов, оценка достоверности, уточнение паттернов
Формирователи отчетов - Терминал (с вердиктом), JSON, SARIF 2.1.0, AI-дружественный JSON (с подсказками по исправлению), Markdown (отчет для публикации)
CLI и MCP-сервер -
mtiCLI с командами scan/init/rules/suppress/baseline/mcp. MCP-сервер предоставляет 4 инструмента
MCP-сервер
Пакет включает MCP-сервер для интеграции с AI-агентами. Он работает локально через транспорт stdio (не требует хостинга):
{
"mcpServers": {
"tenant-isolation": {
"command": "npx",
"args": ["-y", "mcp-tenant-isolation", "mcp"]
}
}
}Добавьте это в конфигурацию вашего Claude Desktop, Cursor или другого MCP-клиента, чтобы ваш AI-агент мог сканировать код на предмет проблем с изоляцией арендаторов по запросу.
Инструменты MCP
Инструмент | Описание |
| Сканировать путь к файлу или встроенный код. Возвращает структурированные результаты. |
| Возвращает все 57 правил с метаданными. Фильтруется по категории. |
| Возвращает детали правила, соответствие OWASP, ID CWE, предложения по исправлению. |
| Добавить подавление с причиной и сроком действия. |
Интеграция с CI/CD
Вариант 1: Готовое действие GitHub (самый простой)
Добавьте это в .github/workflows/tenant-isolation.yml:
name: Tenant Isolation Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: subodhkc/mcp-tenant-isolation@v1
with:
path: ./src
severity: HIGH
fail-on: HIGHЗапускает сканирование, загружает SARIF в GitHub Code Scanning, создает артефакт отчета в Markdown и завершает workflow ошибкой, если обнаружены результаты HIGH или CRITICAL.
Вариант 2: Ручной npx
# .github/workflows/tenant-isolation.yml
name: Tenant Isolation Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx mcp-tenant-isolation scan ./src --format sarif --output results.sarif
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarifКоды выхода
Код | Значение |
0 | Результаты не найдены |
1 | Результаты найдены |
2 | Ошибка (неверная конфигурация, ошибка парсинга и т.д.) |
Интеграция с GitHub Code Scanning
Когда вы загружаете вывод SARIF с помощью github/codeql-action/upload-sarif@v3, результаты появляются на вкладке Security > Code scanning alerts вашего репозитория. Это работает как с бесплатными репозиториями, так и с репозиториями, где включен Advanced Security.
Что происходит:
mti scan --format sarif --output results.sarifгенерирует файл SARIF 2.1.0Действие
upload-sarifотправляет его в API сканирования кода GitHubКаждый результат становится оповещением сканирования кода с файлом, строкой, серьезностью и подсказкой по исправлению
Оповещения можно отклонять, исправлять или отслеживать непосредственно в интерфейсе GitHub
Аннотации к пул-реквестам появляются автоматически на измененных файлах
Требования:
permissions: security-events: writeв вашем workflowФайл SARIF должен быть создан до шага загрузки
Конфигурация
Создайте .mtirc.json в корне вашего проекта:
{
"rules": {
"severity": {
"DBQ-001": "HIGH",
"MCP-001": "CRITICAL"
},
"exclude": ["DBQ-010"]
},
"paths": {
"include": ["src/**/*"],
"exclude": ["**/*.test.ts", "**/*.spec.ts"]
},
"suppressions": ".mti-suppressions.json",
"baseline": ".mti-baseline.json"
}Расширенная конфигурация
{
"rules": {
"severity": { "DBQ-001": "HIGH" },
"exclude": ["DBQ-010"]
},
"paths": {
"include": ["src/**/*"],
"exclude": ["**/*.test.ts"]
},
"output": "terminal",
"framework": "nextjs-app-router",
"authHelpers": ["requireAuth", "getServerSession", "withAuth"],
"tenantGuards": ["organizationId", "tenantId", "workspaceId"],
"modelScopes": {
"userScoped": ["User", "UserSession"],
"global": ["Tenant", "AuditLog"]
},
"rulePacks": ["./custom-rules.json"],
"suppressions": ".mti-suppressions.json",
"baseline": ".mti-baseline.json"
}Поле | Описание |
| Формат вывода по умолчанию: |
| Подсказка фреймворка: |
| Пользовательские имена функций аутентификации для обнаружения (уменьшает ложные срабатывания) |
| Пользовательские имена переменных защиты арендатора помимо стандартных |
| Переопределение классификации области видимости модели (userScoped, global, tenantScoped) |
| Пути к пользовательским файлам наборов правил JSON |
Форматы отчетов
Формат | Флаг | Сценарий использования |
Терминал |
| Консоль разработчика с вердиктом пройдено/не пройдено |
JSON |
| Программное потребление, передача в другие инструменты |
SARIF |
| GitHub Code Scanning, Azure DevOps |
AI JSON |
| Потребление AI-агентом с подсказками по исправлению и контекстом |
Markdown |
| Отчет для публикации в PR, командном ревью, документации |
# Generate a Markdown report for a PR
mti scan ./src --format markdown --output TENANT-ISOLATION-REPORT.md
# Upload SARIF to GitHub Code Scanning
mti scan ./src --format sarif --output results.sarifТехнологический стек
Парсинг AST: @babel/parser (TypeScript, JSX), парсер схемы Prisma, парсер SQL-миграций
Движок правил: Декларативный паттерн RuleSpec с обнаружением защитных механизмов и сбором доказательств
CLI: Commander
MCP: @modelcontextprotocol/sdk (транспорт stdio)
Вывод: Терминал (с вердиктом), JSON, SARIF 2.1.0, AI JSON (с исправлением), Markdown
Тестирование: Vitest
План развития
v1.6.2 (Текущая)
57 правил (42 общих + 15 специфических для MCP)
Поддержка TypeScript и JavaScript
Анализ схемы Prisma
Анализ SQL-миграций (RLS, колонки арендатора, индексы)
CLI (mti) с выводом в терминал, JSON, SARIF, AI JSON, Markdown
Вердикт пройдено/не пройдено в терминале и отчетах Markdown
Подсказки по исправлению для всех 57 правил
MCP-сервер для интеграции с AI-агентами
Политика подавления с истечением срока
Отслеживание базовой линии с diff
Переопределение серьезности в .mtirc.json
Пользовательские наборы правил (JSON)
Настраиваемые вспомогательные функции аутентификации и защитные механизмы арендатора
Классификация области видимости модели с переопределениями конфигурации
Обнаружение фреймворка (Next.js, Express, Fastify)
Фильтрация путей, не относящихся к продакшну
v1.7.0 (Запланировано)
Поддержка Python (FastAPI, Django, Flask)
Анализ ORM SQLAlchemy
Режим наблюдения (mti scan --watch)
Расширение для VS Code
v2.0.0 (Будущее)
Тестовый полигон для состязания двух арендаторов во время выполнения
Поддержка языков Go и Ruby
Инкрементальное сканирование с кэшем AST
Ссылки
Лицензия
MIT. Бесплатно и с открытым исходным кодом.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceSecurity MCP server with 300+ rules for AI-generated code. Scans Next.js, Supabase, Clerk, Stripe, Prisma, Hono, GraphQL and 20+ modules. Zero config, runs locally.396045Apache 2.0
- AlicenseAqualityDmaintenanceMCP server that scans Salesforce Agentforce metadata for security vulnerabilities using 61+ SAST rules, integrating into AI coding workflows to guard against OWASP LLM top 10 risks.1634Cryptographic Autonomy 1.0 (Combined Work Exception)
- AlicenseAqualityAmaintenanceMCP server for Cursor that scans codebases for security issues including hardcoded secrets, SAST, vulnerable dependencies, and IaC misconfigurations.7MIT
- Alicense-qualityDmaintenanceMulti-language SAST and AI-powered fuzzing MCP server for Claude Code integration, enabling static and dynamic security analysis of code.MIT
Related MCP Connectors
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Hosted MCP server for structured code review passes on human- and AI-written code. Free tier.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/actions-marketplace-validations/subodhkc_mcp-tenant-isolation'
If you have feedback or need assistance with the MCP directory API, please join our Discord server