mcp-tenant-isolation
mcp-tenant-isolation
멀티 테넌트 SaaS 및 MCP 서버 코드를 위한 정적 분석 스캐너입니다. 프로덕션에 도달하기 전에 테넌트 간 데이터 유출을 잡아냅니다.
테넌트 격리, 데이터베이스 쿼리 필터, IDOR, 캐시 키 범위 지정, RLS, 스키마 격차, MCP 특정 위험(도구 가시성, 캐시 접두사, 세션 바인딩, 자격 증명 저장소)을 다루는 57개의 결정론적 규칙이 있습니다. Prisma, Drizzle, 원시 SQL, Next.js, Express, Fastify와 함께 작동합니다. Claude Desktop 및 Cursor 통합을 위한 MCP 서버가 포함되어 있습니다.
대상 사용자
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단계로 작동합니다:
파서 - TS/JS용 Babel AST, Prisma 스키마 파서, SQL 마이그레이션 파서, MCP SDK 임포트 감지
IR 및 흐름 그래프 - 소스, 싱크, 가드, 라우트, MCP 도구 정의를 캡처하는 중간 표현
규칙 엔진 - IR에 대해 평가되는 57개의 결정론적 규칙. 각 규칙은 소스, 싱크, 필요한 가드를 정의합니다.
거짓 양성 필터 - 테스트 파일 감지, 신뢰도 점수, 패턴 개선
리포터 - 터미널(판정 포함), JSON, SARIF 2.1.0, AI 친화적 JSON(수정 힌트 포함), Markdown(공유 가능한 보고서)
CLI 및 MCP 서버 -
mtiCLI (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 도구
도구 | 설명 |
| 파일 경로 또는 인라인 코드를 스캔합니다. 구조화된 결과를 반환합니다. |
| 모든 57개 규칙을 메타데이터와 함께 반환합니다. 카테고리별로 필터링 가능합니다. |
| 규칙 세부 정보, OWASP 매핑, CWE ID, 수정 제안을 반환합니다. |
| 이유와 만료일을 포함한 억제를 추가합니다. |
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 활성화 저장소 모두에서 작동합니다.
작동 방식:
mti scan --format sarif --output results.sarif가 SARIF 2.1.0 파일을 생성합니다.upload-sarif액션이 이를 GitHub의 코드 스캐닝 API로 보냅니다.각 결과는 파일, 라인, 심각도, 수정 힌트와 함께 코드 스캐닝 알림이 됩니다.
알림은 GitHub UI에서 직접 해제, 수정 또는 추적할 수 있습니다.
변경된 파일에 대해 풀 리퀘스트 주석이 자동으로 나타납니다.
요구 사항:
워크플로에
permissions: security-events: writeSARIF 파일은 업로드 단계 전에 생성되어야 합니다.
설정
프로젝트 루트에 .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개 모든 규칙에 대한 수정 힌트
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. 무료 및 오픈 소스.
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