Skip to main content
Glama

mcp-tenant-isolation

멀티 테넌트 SaaS 및 MCP 서버 코드를 위한 정적 분석 스캐너입니다. 프로덕션에 도달하기 전에 테넌트 간 데이터 유출을 잡아냅니다.

테넌트 격리, 데이터베이스 쿼리 필터, IDOR, 캐시 키 범위 지정, RLS, 스키마 격차, MCP 특정 위험(도구 가시성, 캐시 접두사, 세션 바인딩, 자격 증명 저장소)을 다루는 57개의 결정론적 규칙이 있습니다. Prisma, Drizzle, 원시 SQL, Next.js, Express, Fastify와 함께 작동합니다. Claude Desktop 및 Cursor 통합을 위한 MCP 서버가 포함되어 있습니다.

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

데모

터미널 데모

규칙

42개의 일반 멀티 테넌트 규칙

접두사

카테고리

개수

심각도

설명

TCM

테넌트 컨텍스트 관리

6

Critical

세션에서 테넌트 ID를 가져오고, 클라이언트 입력은 사용하지 않음. 비동기 경계를 넘어 컨텍스트 전파.

DBQ

데이터베이스 쿼리 격리

10

Critical

테넌트 범위 데이터를 다루는 모든 쿼리는 테넌트 필터를 포함해야 함.

IDOR

IDOR 방지

5

Critical

ID 기반 조회는 테넌트 소유권을 확인해야 함.

CSI

캐시 및 세션 격리

4

High

캐시 키와 세션 데이터는 테넌트 범위여야 함.

API

API 보안

3

High

테넌트 인식 속도 제한 및 응답 범위 지정.

FSI

파일 저장소 격리

4

High

S3, Blob, 파일 시스템 접근은 테넌트 범위여야 함.

LOG

로깅 및 감사

4

Medium

감사 로그는 테넌트 컨텍스트를 포함해야 함.

SCH

스키마 및 마이그레이션

6

High

Prisma 모델 및 SQL 마이그레이션은 테넌트 열을 포함해야 함.

15개의 MCP 특정 규칙

ID

제목

심각도

설명

MCP-001

도구 가시성 범위 지정

Critical

도구 핸들러에 테넌트 기반 허용/거부 필터가 없음.

MCP-002

캐시 키 테넌트 접두사

Critical

테넌트 접두사 없이 도구 결과가 캐시됨.

MCP-003

사용자+테넌트에 세션 바인딩

Critical

세션 ID가 유일한 인증 수단으로 사용됨.

MCP-004

토큰 교환 (RFC 8693)

High

토큰 교환 대신 원본 토큰이 전달됨.

MCP-005

테넌트별 속도 제한

Medium

도구 호출에 테넌트별 속도 제한이 없음.

MCP-006

벡터 저장소 테넌트 네임스페이스

High

테넌트 네임스페이스 없이 공유 벡터 저장소 사용.

MCP-007

도구 설명 인젝션

Medium

도구 설명이 격리를 우회할 수 있음.

MCP-008

자격 증명 저장소 테넌트 범위 지정

Critical

자격 증명 저장소가 테넌트 범위 지정 없이 토큰을 저장함.

MCP-009

공유 서비스 계정

High

모든 테넌트 API 호출에 단일 공유 API 키 사용.

MCP-010

연결 해제 시 세션 정리

Medium

결정론적 세션 정리 없음.

MCP-011

텔레메트리 테넌트 식별자

Low

텔레메트리가 테넌트 식별자를 제거함.

MCP-012

로컬 바인드 (127.0.0.1)

High

MCP 서버가 127.0.0.1 대신 0.0.0.0에 바인딩됨.

MCP-013

파일 시스템 테넌트 루트

High

도구 핸들러가 테넌트 루트 없이 파일 시스템에 접근함.

MCP-014

테넌트 간 아티팩트 유출

High

테넌트 접두사 없이 아티팩트 저장.

MCP-015

동적 도구 네임스페이스

Medium

테넌트 네임스페이스 없이 도구가 등록됨.

아키텍처

스캐너 파이프라인은 6단계로 작동합니다:

  1. 파서 - TS/JS용 Babel AST, Prisma 스키마 파서, SQL 마이그레이션 파서, MCP SDK 임포트 감지

  2. IR 및 흐름 그래프 - 소스, 싱크, 가드, 라우트, MCP 도구 정의를 캡처하는 중간 표현

  3. 규칙 엔진 - IR에 대해 평가되는 57개의 결정론적 규칙. 각 규칙은 소스, 싱크, 필요한 가드를 정의합니다.

  4. 거짓 양성 필터 - 테스트 파일 감지, 신뢰도 점수, 패턴 개선

  5. 리포터 - 터미널(판정 포함), JSON, SARIF 2.1.0, AI 친화적 JSON(수정 힌트 포함), Markdown(공유 가능한 보고서)

  6. CLI 및 MCP 서버 - mti CLI (scan/init/rules/suppress/baseline/mcp 명령어 포함). MCP 서버는 4개의 도구를 제공합니다.

MCP 서버

이 패키지에는 AI 에이전트 통합을 위한 MCP 서버가 포함되어 있습니다. 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 매핑, CWE ID, 수정 제안을 반환합니다.

suppress_tenant_isolation_finding

이유와 만료일을 포함한 억제를 추가합니다.

CI/CD 통합

옵션 1: 사전 구축된 GitHub Action (가장 쉬움)

.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 보고서 아티팩트를 생성하며, 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 통합

github/codeql-action/upload-sarif@v3를 사용하여 SARIF 출력을 업로드하면 결과가 저장소의 Security > Code scanning alerts 탭에 나타납니다. 이는 무료 및 Advanced Security 활성화 저장소 모두에서 작동합니다.

작동 방식:

  1. mti scan --format sarif --output results.sarif가 SARIF 2.1.0 파일을 생성합니다.

  2. upload-sarif 액션이 이를 GitHub의 코드 스캐닝 API로 보냅니다.

  3. 각 결과는 파일, 라인, 심각도, 수정 힌트와 함께 코드 스캐닝 알림이 됩니다.

  4. 알림은 GitHub UI에서 직접 해제, 수정 또는 추적할 수 있습니다.

  5. 변경된 파일에 대해 풀 리퀘스트 주석이 자동으로 나타납니다.

요구 사항:

  • 워크플로에 permissions: security-events: write

  • 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개 모든 규칙에 대한 수정 힌트

  • AI 에이전트 통합을 위한 MCP 서버

  • 만료일이 있는 억제 정책

  • 차이점이 있는 기준선 추적

  • .mtirc.json의 심각도 재정의

  • 사용자 정의 규칙 팩 (JSON)

  • 설정 가능한 인증 헬퍼 및 테넌트 가드

  • 설정 재정의가 있는 모델 범위 분류

  • 프레임워크 감지 (Next.js, Express, Fastify)

  • 비프로덕션 경로 필터링

v1.7.0 (계획)

  • Python 지원 (FastAPI, Django, Flask)

  • SQLAlchemy ORM 분석

  • 감시 모드 (mti scan --watch)

  • VS Code 확장

v2.0.0 (미래)

  • 런타임 2-테넌트 적대적 테스트 하네스

  • 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