mcp-tenant-isolation
mcp-tenant-isolation
Escáner de análisis estático para código SaaS multiinquilino y servidor MCP. Detecta fugas de datos entre inquilinos antes de llegar a producción.
57 reglas deterministas que cubren aislamiento de inquilinos, filtros de consultas en bases de datos, IDOR, delimitación de claves de caché, RLS, brechas de esquema y riesgos específicos de MCP (visibilidad de herramientas, prefijo de caché, vinculación de sesión, almacén de credenciales). Funciona con Prisma, Drizzle, SQL sin procesar, Next.js, Express y Fastify. Incluye un servidor MCP para integración con Claude Desktop y Cursor.
¿Para quién es esto?
Creadores de SaaS que envían aplicaciones multiinquilino y necesitan detectar fugas de datos entre inquilinos
Desarrolladores de servidores MCP que construyen herramientas que manejan datos con alcance de inquilino
Equipos de seguridad que necesitan aislamiento de inquilinos como parte de CI/CD
Desarrolladores de agentes de IA que quieren que sus agentes escaneen código bajo demanda
Related MCP server: @squirex.dev/mcp-server
Por qué
Los escáneres de seguridad de propósito general (Snyk, Semgrep, CodeQL) no entienden los patrones de aislamiento de inquilinos ni la arquitectura de servidores MCP. Las fugas de datos entre inquilinos pasan desapercibidas. Esta herramienta llena ese vacío con 57 reglas deterministas diseñadas específicamente para ello.
Cada regla es determinista y reproducible. Sin aprendizaje automático, sin conjeturas falsas. Cada regla verifica patrones de código específicos, presencia de protecciones y rutas de flujo de datos. Obtienes los mismos resultados en cada ejecución.
Instalar
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/srcInicio rápido
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 initDemo
Reglas
42 Reglas generales para multiinquilino
Prefijo | Categoría | Conteo | Gravedad | Descripción |
TCM | Gestión del contexto de inquilino | 6 | Crítico | ID de inquilino desde sesiones, no desde entrada del cliente. Propagación del contexto a través de límites asíncronos. |
DBQ | Aislamiento de consultas a la BD | 10 | Crítico | Toda consulta que toque datos con alcance de inquilino debe incluir un filtro de inquilino. |
IDOR | Prevención de IDOR | 5 | Crítico | Las búsquedas por ID deben verificar la pertenencia al inquilino. |
CSI | Aislamiento de caché y sesión | 4 | Alto | Las claves de caché y los datos de sesión deben tener alcance de inquilino. |
API | Seguridad de API | 3 | Alto | Limitación de tasa consciente de inquilino y delimitación de respuestas. |
FSI | Aislamiento de almacenamiento de archivos | 4 | Alto | El acceso a S3, Blob y sistema de archivos debe tener alcance de inquilino. |
LOG | Registro y auditoría | 4 | Medio | Los registros de auditoría deben incluir el contexto de inquilino. |
SCH | Esquema y migraciones | 6 | Alto | Los modelos de Prisma y las migraciones SQL deben incluir columnas de inquilino. |
15 Reglas específicas de MCP
ID | Título | Gravedad | Descripción |
MCP-001 | Delimitación de visibilidad de herramientas | Crítico | El manipulador de herramientas no tiene un filtro de permiso/rechazo basado en inquilino. |
MCP-002 | Prefijo de inquilino en claves de caché | Crítico | Resultados de herramientas almacenados en caché sin prefijo de inquilino. |
MCP-003 | Vinculación de sesión a usuario+inquilino | Crítico | ID de sesión utilizado como única autorización. |
MCP-004 | Intercambio de tokens (RFC 8693) | Alto | Token original reenviado en lugar de intercambio de tokens. |
MCP-005 | Limitación de tasa por inquilino | Medio | Sin limitación de tasa por inquilino en las llamadas a herramientas. |
MCP-006 | Espacio de nombres de inquilino en almacén de vectores | Alto | Almacén de vectores compartido sin espacios de nombres de inquilino. |
MCP-007 | Inyección en descripción de herramienta | Medio | La descripción de la herramienta podría omitir el aislamiento. |
MCP-008 | Delimitación de inquilino en almacén de credenciales | Crítico | El almacén de credenciales guarda tokens sin delimitación de inquilino. |
MCP-009 | Cuenta de servicio compartida | Alto | Una única clave API compartida para todas las llamadas API de inquilinos. |
MCP-010 | Limpieza de sesión al desconectar | Medio | Sin limpieza determinista de sesiones. |
MCP-011 | Identificador de inquilino en telemetría | Bajo | La telemetría elimina el identificador de inquilino. |
MCP-012 | Enlace local (127.0.0.1) | Alto | El servidor MCP se vincula a 0.0.0.0 en lugar de 127.0.0.1. |
MCP-013 | Raíz de sistema de archivos por inquilino | Alto | El manipulador de herramientas accede al sistema de archivos sin raíz de inquilino. |
MCP-014 | Fuga de artefactos entre inquilinos | Alto | Almacenamiento de artefactos sin prefijo de inquilino. |
MCP-015 | Espacio de nombres dinámico de herramientas | Medio | Herramientas registradas sin espacio de nombres de inquilino. |
Arquitectura
El flujo del escáner funciona en seis etapas:
Analizadores sintácticos - AST de Babel para TS/JS, analizador de esquema Prisma, analizador de migraciones SQL, detección de importación del SDK de MCP
IR y grafo de flujo - Representación intermedia que captura fuentes, sumideros, protecciones, rutas, definiciones de herramientas MCP
Motor de reglas - 57 reglas deterministas evaluadas contra el IR. Cada regla define fuentes, sumideros, protecciones requeridas
Filtro de falsos positivos - Detección de archivos de prueba, puntuación de confianza, refinamiento de patrones
Generadores de informes - Terminal (con veredicto), JSON, SARIF 2.1.0, JSON amigable para IA (con sugerencias de corrección), Markdown (informe compartible)
CLI y servidor MCP - CLI
mticon comandos scan/init/rules/suppress/baseline/mcp. El servidor MCP expone 4 herramientas
Servidor MCP
El paquete incluye un servidor MCP para integración con agentes de IA. Se ejecuta localmente mediante transporte stdio (sin necesidad de alojamiento):
{
"mcpServers": {
"tenant-isolation": {
"command": "npx",
"args": ["-y", "mcp-tenant-isolation", "mcp"]
}
}
}Añade esto a la configuración de tu cliente MCP (Claude Desktop, Cursor, etc.) para que tu agente de IA pueda escanear código en busca de problemas de aislamiento de inquilinos bajo demanda.
Herramientas MCP
Herramienta | Descripción |
| Escanea una ruta de archivo o código en línea. Devuelve hallazgos estructurados. |
| Devuelve las 57 reglas con metadatos. Filtrable por categoría. |
| Devuelve detalles de la regla, mapeo OWASP, ID de CWE, sugerencias de corrección. |
| Agrega una supresión con motivo y fecha de expiración. |
Integración CI/CD
Opción 1: Acción predefinida de GitHub (más fácil)
Añade esto a .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: HIGHEjecuta el escaneo, sube SARIF a GitHub Code Scanning, genera un artefacto de informe en Markdown y falla el flujo de trabajo si se detectan hallazgos de gravedad ALTA o CRÍTICA.
Opción 2: npx manual
# .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.sarifCódigos de salida
Código | Significado |
0 | Sin hallazgos |
1 | Hallazgos encontrados |
2 | Error (configuración inválida, error de análisis, etc.) |
Integración con GitHub Code Scanning
Cuando subes la salida SARIF usando github/codeql-action/upload-sarif@v3, los hallazgos aparecen en la pestaña Seguridad > Alertas de escaneo de código de tu repositorio. Esto funciona tanto con repositorios gratuitos como con aquellos habilitados para Advanced Security.
Qué sucede:
mti scan --format sarif --output results.sarifgenera un archivo SARIF 2.1.0La acción
upload-sariflo envía a la API de escaneo de código de GitHubCada hallazgo se convierte en una alerta de escaneo de código con archivo, línea, gravedad y sugerencia de corrección
Las alertas pueden descartarse, corregirse o rastrearse directamente en la interfaz de GitHub
Las anotaciones en solicitudes de extracción aparecen automáticamente en los archivos modificados
Requisitos:
permissions: security-events: writeen tu flujo de trabajoEl archivo SARIF debe generarse antes del paso de subida
Configuración
Crea .mtirc.json en la raíz de tu proyecto:
{
"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"
}Configuración avanzada
{
"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"
}Campo | Descripción |
| Formato de salida predeterminado: |
| Sugerencia de framework: |
| Nombres de funciones de autenticación personalizadas a detectar (reduce falsos positivos) |
| Nombres de variables de protección de inquilino personalizadas más allá de los valores predeterminados |
| Sobrescribe la clasificación de alcance del modelo (userScoped, global, tenantScoped) |
| Rutas a archivos JSON de paquetes de reglas personalizadas |
Formatos de informe
Formato | Bandera | Caso de uso |
Terminal |
| Consola para desarrolladores con veredicto de aprobado/rechazado |
JSON |
| Consumo programático, canalización a otras herramientas |
SARIF |
| GitHub Code Scanning, Azure DevOps |
AI JSON |
| Consumo por agentes de IA con sugerencias de corrección y contexto |
Markdown |
| Informe compartible para solicitudes de extracción, revisión en equipo, documentación |
# 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.sarifStack tecnológico
Análisis AST: @babel/parser (TypeScript, JSX), analizador de esquema Prisma, analizador de migraciones SQL
Motor de reglas: patrón declarativo RuleSpec con detección de protecciones y construcción de evidencia
CLI: Commander
MCP: @modelcontextprotocol/sdk (transporte stdio)
Salida: Terminal (con veredicto), JSON, SARIF 2.1.0, AI JSON (con corrección), Markdown
Pruebas: Vitest
Hoja de ruta
v1.6.2 (Actual)
57 reglas (42 generales + 15 específicas de MCP)
Soporte para TypeScript y JavaScript
Análisis de esquemas Prisma
Análisis de migraciones SQL (RLS, columnas de inquilino, índices)
CLI (mti) con salida en terminal, JSON, SARIF, AI JSON, Markdown
Veredicto de aprobado/rechazado en informes de terminal y Markdown
Sugerencias de corrección para las 57 reglas
Servidor MCP para integración con agentes de IA
Política de supresión con fecha de expiración
Seguimiento de línea base con diff
Sobrescritura de gravedad en .mtirc.json
Paquetes de reglas personalizadas (JSON)
Ayudantes de autenticación y protecciones de inquilino configurables
Clasificación de alcance de modelo con sobrescrituras de configuración
Detección de framework (Next.js, Express, Fastify)
Filtrado de rutas que no son de producción
v1.7.0 (Planificado)
Soporte para Python (FastAPI, Django, Flask)
Análisis de ORM SQLAlchemy
Modo de vigilancia (mti scan --watch)
Extensión para VS Code
v2.0.0 (Futuro)
Banco de pruebas adversarial de dos inquilinos en tiempo de ejecución
Soporte para los lenguajes Go y Ruby
Escaneo incremental con caché de AST
Enlaces
Licencia
MIT. Gratuito y de código abierto.
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