Skip to main content
Glama

mcp-tenant-isolation

Статический анализатор для многопользовательских SaaS и MCP-серверов. Выявляет утечки данных между арендаторами до попадания в продакшн.

57 детерминированных правил, охватывающих изоляцию арендаторов, фильтры запросов к БД, IDOR, область видимости ключей кэша, RLS, пробелы в схеме и специфические риски MCP (видимость инструментов, префикс кэша, привязка сессии, хранилище учетных данных). Работает с Prisma, Drizzle, сырым SQL, Next.js, Express и Fastify. Включает MCP-сервер для интеграции с Claude Desktop и Cursor.

npm version npm downloads CI Docker License: MIT

Для кого это

  • Разработчики 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

Демо

Terminal Demo

Правила

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

Динамическое пространство имен инструментов

Средняя

Инструменты регистрируются без пространства имен арендатора.

Архитектура

Конвейер сканера работает в шесть этапов:

  1. Парсеры - Babel AST для TS/JS, парсер схемы Prisma, парсер SQL-миграций, обнаружение импорта MCP SDK

  2. IR и граф потоков - Промежуточное представление, захватывающее источники, стоки, защитные механизмы, маршруты, определения инструментов MCP

  3. Движок правил - 57 детерминированных правил, оцениваемых на основе IR. Каждое правило определяет источники, стоки, необходимые защитные механизмы

  4. Фильтр ложных срабатываний - Обнаружение тестовых файлов, оценка достоверности, уточнение паттернов

  5. Формирователи отчетов - Терминал (с вердиктом), JSON, SARIF 2.1.0, AI-дружественный JSON (с подсказками по исправлению), Markdown (отчет для публикации)

  6. CLI и MCP-сервер - mti CLI с командами 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

Инструмент

Описание

scan_tenant_isolation

Сканировать путь к файлу или встроенный код. Возвращает структурированные результаты.

list_tenant_isolation_rules

Возвращает все 57 правил с метаданными. Фильтруется по категории.

explain_tenant_isolation_rule

Возвращает детали правила, соответствие OWASP, ID CWE, предложения по исправлению.

suppress_tenant_isolation_finding

Добавить подавление с причиной и сроком действия.

Интеграция с 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.

Что происходит:

  1. mti scan --format sarif --output results.sarif генерирует файл SARIF 2.1.0

  2. Действие upload-sarif отправляет его в API сканирования кода GitHub

  3. Каждый результат становится оповещением сканирования кода с файлом, строкой, серьезностью и подсказкой по исправлению

  4. Оповещения можно отклонять, исправлять или отслеживать непосредственно в интерфейсе GitHub

  5. Аннотации к пул-реквестам появляются автоматически на измененных файлах

Требования:

  • 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"
}

Поле

Описание

output

Формат вывода по умолчанию: terminal, json, sarif, ai, markdown

framework

Подсказка фреймворка: nextjs-app-router, nextjs-pages, express, fastify, auto

authHelpers

Пользовательские имена функций аутентификации для обнаружения (уменьшает ложные срабатывания)

tenantGuards

Пользовательские имена переменных защиты арендатора помимо стандартных

modelScopes

Переопределение классификации области видимости модели (userScoped, global, tenantScoped)

rulePacks

Пути к пользовательским файлам наборов правил JSON

Форматы отчетов

Формат

Флаг

Сценарий использования

Терминал

--format terminal (по умолчанию)

Консоль разработчика с вердиктом пройдено/не пройдено

JSON

--format json

Программное потребление, передача в другие инструменты

SARIF

--format sarif

GitHub Code Scanning, Azure DevOps

AI JSON

--format ai

Потребление AI-агентом с подсказками по исправлению и контекстом

Markdown

--format 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. Бесплатно и с открытым исходным кодом.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    A
    maintenance
    Security 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.
    39
    604
    5
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    16
    34
    Cryptographic Autonomy 1.0 (Combined Work Exception)
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Cursor that scans codebases for security issues including hardcoded secrets, SAST, vulnerable dependencies, and IaC misconfigurations.
    7
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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