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サーバーが127.0.0.1ではなく0.0.0.0にバインドしている。 |
MCP-013 | ファイルシステムのテナントルート | 高 | ツールハンドラーがテナントルートなしでファイルシステムにアクセスしている。 |
MCP-014 | クロスアカウント成果物漏洩 | 高 | テナントプレフィックスなしの成果物ストレージ。 |
MCP-015 | 動的ツール名前空間 | 中 | テナント名前空間なしでツールが登録されている。 |
アーキテクチャ
スキャナーパイプラインは6つの段階で動作します:
パーサー - TypeScript/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のcode scanning 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