Skip to main content
Glama

mcp-tenant-isolation

マルチテナントSaaSおよびMCPサーバーコードのための静的解析スキャナー。クロスアカウントのデータ漏洩を本番環境に到達する前に検出します。

57の決定論的ルールで、テナント分離、データベースクエリフィルター、IDOR、キャッシュキーのスコープ、RLS、スキーマのギャップ、MCP固有のリスク(ツール可視性、キャッシュプレフィックス、セッションバインディング、クレデンシャルボールト)をカバー。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

デモ

Terminal Demo

ルール

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つの段階で動作します:

  1. パーサー - TypeScript/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のcode scanning 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

デフォルトの出力形式:terminaljsonsarifaimarkdown

framework

フレームワークヒント:nextjs-app-routernextjs-pagesexpressfastifyauto

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