Skip to main content
Glama

すべての企業がAIエージェントを導入したいと考えています。しかし、データベースの鍵をエージェントに渡してもよいと考えている企業はありません。

Cordonは、その信頼のギャップを埋めます。


デモ

https://github.com/user-attachments/assets/153d978f-6303-443a-b49b-b4ec7ebf0452


Related MCP server: border-patrol-mcp

課題

Model Context Protocol (MCP) により、AIエージェントにデータベース、ファイルシステム、API、クラウドインフラなどの強力なツールへのアクセスを簡単に提供できるようになりました。

しかし、MCPには組み込みのセキュリティモデルがありません。監査ログも、承認ワークフローも、レート制限もありません。現在、AIエージェントは「オフ」か「フル管理者権限」のどちらかであり、その中間が存在しません。

これが、AIエージェントの本番環境導入を阻む最大の障壁となっています。

解決策

Cordonは、LLMとMCPサーバーの間に配置されるセキュリティゲートウェイです。

これはファイアウォール、監査人、そしてリモートコントロールとして機能し、AIエージェントが何を行い、何を行えないかについて、完全な可視性と権限をあなたに提供します。

┌─────────┐      ┌──────────┐      ┌──────────────┐
│  LLM /  │ ──▶  │  Cordon  │ ──▶  │  MCP Server  │
│  Agent  │ ◀──  │ Gateway  │ ◀──  │  (database,  │
└─────────┘      └──────────┘      │   fs, APIs)  │
                   │               └──────────────┘
                   ├── Policy Engine
                   ├── Audit Logger
                   └── Approval Workflows

インフラの変更は不要。書き換えも不要。設定ファイルは1つだけです。


クイックスタート

ステップ 1 — 初期化

プロジェクト内(claude_desktop_config.jsonが存在する場所)で以下を実行します:

npx cordon-cli init

これにより、既存のClaude DesktopのMCP設定が読み取られ、cordon.config.tsが生成され、すべてのツール呼び出しがCordonを経由するようにClaude Desktopにパッチが適用されます。

ステップ 2 — 開始

npx cordon-cli start

Cordonが起動し、MCPサーバーに接続してツール呼び出しのインターセプトを開始します。Claude Desktopを再起動すれば、すべてのツール呼び出しがゲートウェイを経由するようになります。

手動設定

手動での設定を好む場合は、グローバルにインストールして設定を作成してください:

npm install -g cordon-cli
cordon init

cordon initを実行するとcordon.config.tsが生成されます:

import { defineConfig } from 'cordon-sdk';

export default defineConfig({
  servers: [
    {
      name: 'database',
      transport: 'stdio',
      command: 'npx',
      args: ['-y', '@my-org/db-mcp-server'],
      policy: 'read-only',        // Block all write operations
    },
    {
      name: 'github',
      transport: 'stdio',
      command: 'npx',
      args: ['-y', '@modelcontextprotocol/server-github'],
      policy: 'approve-writes',   // Reads pass; writes require approval
      tools: {
        delete_branch: 'block',   // Never, regardless of approval
      },
    },
  ],

  audit: {
    enabled: true,
    output: 'stdout',             // or 'file'
  },

  approvals: {
    channel: 'terminal',
    timeoutMs: 60_000,            // auto-deny after 60s if no response
  },
});

Cordonを選ぶ理由

Cordonなし

Cordonあり

エージェントがツールに無制限にアクセス可能

ツールごとの詳細なポリシー

エージェントの行動が可視化されない

すべての呼び出しの構造化された監査証跡

「エージェントがテーブルを削除した?」

リアルタイムのターミナル承認

読み取りと書き込みが同じ扱い

approve-writesにより読み取りは自動通過

コンプライアンスチームがAIに反対

エクスポート可能な監査ログ


機能

ポリシーエンジン

ツールごと、サーバーごと、またはグローバルにルールを定義できます。ツールレベルのポリシーはサーバーポリシーを上書きします。

// Server-level default
policy: 'approve-writes',

// Per-tool overrides
tools: {
  query:        'allow',    // reads: pass through
  execute:      'approve',  // writes: pause for human approval
  drop_table:   'block',    // catastrophic: always reject
  list_tables:  'log-only', // audit but don't interrupt
},

ヒューマン・イン・ザ・ループ承認

ツール呼び出しに承認が必要な場合、Cordonはエージェントを一時停止し、ターミナルで直接あなたに確認を求めます:

╔══════════════════════════════════════╗
║  ⚠  APPROVAL REQUIRED               ║
╚══════════════════════════════════════╝
  Server : database
  Tool   : execute_sql
  Args   :
  {
    "query": "DELETE FROM sessions WHERE expires_at < NOW()"
  }

  [A]pprove  [D]eny
  >

エージェントは待機します。あなたが判断を下します。

監査ログ

すべてのツール呼び出しは、リクエスト、ポリシー決定、レスポンス、タイミングを含む構造化されたJSONとしてログに記録されます。stdoutにパイプしたり、コンプライアンスチームのためにファイルに書き出したりできます。

{"event":"tool_call_received","callId":"...","serverName":"database","toolName":"execute_sql","timestamp":1773434469641}
{"event":"approval_requested","callId":"...","serverName":"database","toolName":"execute_sql","timestamp":1773434469641}
{"event":"tool_call_approved","callId":"...","serverName":"database","toolName":"execute_sql","timestamp":1773434471203}
{"event":"tool_call_completed","callId":"...","durationMs":34,"isError":false,"timestamp":1773434471237}

読み取り専用モード

サーバー全体のすべての書き込み操作をブロックするポリシー設定です。何が書き込みとみなされるかについて推測する必要はありません。Cordonはツール名からそれを検出します。

policy: 'read-only'  // any tool starting with write/create/update/delete/drop/execute/... is blocked

非表示ツール

モデルに決して見せるべきではないツールに対して使用します。呼び出し時に拒否するだけでなく、tools/listレスポンスから完全に除外します。プロンプトインジェクションの表面を閉じます。モデルがツールの存在を知らなければ、それを呼び出すように騙すことはできません。

{
  name: 'database',
  policy: 'approve-writes',
  tools: {
    drop_table:      'block',   // call attempts are rejected
    internal_admin:  'hidden',  // not advertised to the client at all
  },
}

クローズドワールド・ツールカタログ

アップストリームサーバーがアドバタイズする正確なツールセットを宣言します。将来のリリースでアップストリームが新しいツールを追加しても、明示的に許可するまでCordonは自動的にブロックします。

{
  name: 'postgres',
  command: 'npx',
  args: ['-y', '@modelcontextprotocol/server-postgres', process.env.POSTGRES_URL!],
  policy: 'read-only',
  knownTools: ['query', 'list_tables', 'describe_table'],  // your approved surface
  onUnknownTool: 'block',                                  // default when knownTools is set
}

次回のPostgres MCPリリースでtruncate_tableが追加された場合、Cordonはポリシー更新なしでstderr警告を出してブロックします。後方互換性のあるオープンワールド動作が必要な場合は、knownToolsを未定義のままにしてください。


仕組み

Cordonは単一の集約型MCPプロキシとして動作します。Claude DesktopがMCPサーバーに直接接続する代わりに、Cordonに接続します。Cordonが内部でサーバーを管理します。

Before:  Claude ──▶ MCP Server A (full access)
         Claude ──▶ MCP Server B (full access)

After:   Claude ──▶ Cordon ──▶ MCP Server A (governed)
                          ──▶ MCP Server B (governed)

LLMクライアントとMCPサーバーは一切変更する必要がありません。cordon initが設定のパッチ適用を処理します。


設定

ポリシーアクション

ポリシー

動作

allow

即座に通過

block

拒否 — エージェントはエラーを受け取る

approve

ターミナルでの人間による承認待ちで一時停止

approve-writes

読み取りは通過、書き込みは承認が必要

read-only

すべての書き込み操作をブロック

log-only

通過させるが、監査ログにフラグを立てる

hidden

tools/listから除外 — モデルは存在を知らない

ポリシーはサーバーレベル(全ツールのデフォルト)またはツールごと(サーバーデフォルトを上書き)に設定できます:

{
  name: 'my-server',
  policy: 'approve-writes',   // server default
  tools: {
    safe_read:   'allow',     // override: always allow
    nuke_db:     'block',     // override: always block
  },
}

承認チャンネル

チャンネル

ステータス

terminal

利用可能 — ターミナルでの対話型プロンプト

slack

利用可能 — Block Kitメッセージ、HMAC検証済みインタラクション

web

v0.3で対応予定

webhook

v0.3で対応予定

監査出力

出力

ステータス

stdout

利用可能

file

利用可能 — ローカルファイルへのJSON行書き出し

hosted

利用可能 — Cordonダッシュボードへのイベント送信

otlp

v0.3で対応予定


パッケージ

パッケージ

説明

cordon-cli

CLI — npx cordon-cli start

cordon-sdk

TypeScript設定SDK — defineConfig()および全型定義

@getcordon/core

コアプロキシエンジン — ポリシー評価、監査ログ、承認管理


ロードマップ

  • [x] 集約モデルを備えたMCPプロキシ(複数のサーバー、1つのゲートウェイ)

  • [x] ポリシーエンジン — allow, block, approve, approve-writes, read-only, log-only, hidden

  • [x] クローズドワールド・ツールカタログ — knownTools + onUnknownTool による将来を見据えたアップストリーム制御

  • [x] TTYセーフなプロンプトを備えたターミナル承認チャンネル

  • [x] Slack承認チャンネル — Block Kitメッセージ、応答のポーリング

  • [x] stdout、ファイル、またはホスト型ダッシュボードへの構造化JSON監査ログ

  • [x] cordon init — Claude Desktop設定の自動読み取りとパッチ適用

  • [x] レート制限 — スライディングウィンドウ、グローバル/サーバーごと/ツールごと

  • [x] ホスト型ダッシュボード — 監査ログ履歴、CSV/JSONエクスポート、GitHub OAuth

  • [x] Stripe課金 — 無料およびProプラン

  • [ ] OpenTelemetryエクスポート

  • [ ] チームアカウントと集中ガバナンス

  • [ ] HTTP/SSEトランスポートサポート


例

本番データベーステーブルを削除しようとするエージェントをCordonがインターセプトする動作デモについては、examples/security-showcase を参照してください。

cd examples/security-showcase
npm install
npm run demo

ユースケース

個人開発者 — ローカルのClaude/Cursor環境を保護します。エージェントが何を呼び出しているかを正確に把握し、危険な操作を本番環境に到達する前にブロックします。

スタートアップチーム — 自信を持ってエージェントを導入します。すべてのツール呼び出しがログに記録され、書き込みには承認が必要となり、コンプライアンスチームのための証跡が残ります。

エンタープライズ — すべてのAIエージェント導入における集中ガバナンス。ポリシー・アズ・コード、構造化ログ、SOC2対応の監査証跡への明確な道筋を提供します。


連携ツール

  • Agent Toolbelt — すぐに使えるMCPツール(Web検索、フェッチ、ファイルシステムなど)の型付きツールキットです。これをClaude Desktopに組み込み、Cordon経由でルーティングすることで、ポリシー強制と監査ログを実現します。Agent Toolbeltはエージェントに力を与え、Cordonはそれを使う前に確認させることを保証します。

  • Build & Ship MCP Tools — 独自のMCPサーバーをゼロから構築する方法を解説するコンパニオンコースです。モジュール6では、Cordonを使用したサーバーの保護について解説しています。


貢献

Cordonはオープンソースであり、貢献を歓迎します。

git clone https://github.com/marras0914/cordon.git
cd cordon
npm install
npm run build
npm run dev

ライセンス

MIT — 詳細は LICENSE を参照してください。


Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Security gateway that wraps any MCP server with per-tool policies, approval gates, and optional Ed25519-signed decision receipts. Shadow mode logs every tool call without blocking; enforce mode applies block, rate-limit, and minimum-tier rules. Receipts are independently verifiable offline with no accounts needed.
    5
    789 npm
    10
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A policy-enforcing MCP gateway that intercepts all tool calls to downstream MCP servers, applying allow/deny/ask rules with human approval and audit logging for safe access to dangerous tools.
    8 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server that provides a security gateway for AI agents, enforcing allow/confirm/deny policies on tool calls and requiring human approval for risky operations, with full audit logging.
    -