mcp-tenant-isolation
mcp-tenant-isolation
多租户 SaaS 和 MCP 服务器代码的静态分析扫描器。在生产环境之前捕获跨租户数据泄露。
57 条确定性规则,涵盖租户隔离、数据库查询过滤器、IDOR、缓存键作用域、RLS、模式缺口以及 MCP 特定风险(工具可见性、缓存前缀、会话绑定、凭据库)。适用于 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 | 严重 | 租户 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 | 动态工具命名空间 | 中 | 工具注册时没有租户命名空间。 |
架构
扫描器管道分为六个阶段:
解析器 - 用于 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(未来)
运行时双租户对抗测试工具
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