cordon
Каждая компания хочет внедрить ИИ-агентов. Но ни одна компания не готова дать агенту ключи от своей базы данных.
Cordon устраняет разрыв в доверии.
Демонстрация
https://github.com/user-attachments/assets/153d978f-6303-443a-b49b-b4ec7ebf0452
Related MCP server: border-patrol-mcp
Проблема
Model Context Protocol (MCP) сделал невероятно простым предоставление ИИ-агентам доступа к мощным инструментам — базам данных, файловым системам, API, облачной инфраструктуре.
Но у MCP нет встроенной модели безопасности. Нет журналов аудита. Нет рабочих процессов одобрения. Нет ограничений по частоте запросов. Сегодня ИИ-агент либо выключен, либо имеет полные права администратора. Промежуточного варианта не существует.
Это главное препятствие, мешающее ИИ-агентам выйти в продакшн.
Решение
Cordon — это шлюз безопасности, который находится между LLM и вашими серверами MCP.
Он действует как файрвол, аудитор и пульт дистанционного управления, предоставляя вам полный контроль и видимость того, что ваши ИИ-агенты могут и чего не могут делать.
┌─────────┐ ┌──────────┐ ┌──────────────┐
│ LLM / │ ──▶ │ Cordon │ ──▶ │ MCP Server │
│ Agent │ ◀── │ Gateway │ ◀── │ (database, │
└─────────┘ └──────────┘ │ fs, APIs) │
│ └──────────────┘
├── Policy Engine
├── Audit Logger
└── Approval WorkflowsНикаких изменений в инфраструктуре. Никаких переписываний кода. Один файл конфигурации.
Быстрый старт
Шаг 1 — Инициализация
Запустите это внутри вашего проекта (там, где находится claude_desktop_config.json):
npx cordon-cli initЭто считывает вашу существующую конфигурацию MCP для Claude Desktop, создает cordon.config.ts и патчит Claude Desktop для маршрутизации всех вызовов инструментов через Cordon.
Шаг 2 — Запуск
npx cordon-cli startCordon запускается, подключается к вашим серверам MCP и начинает перехватывать вызовы инструментов. Перезапустите Claude Desktop, и теперь каждый вызов инструмента будет проходить через шлюз.
Ручная настройка
Если вы предпочитаете настраивать вручную, установите пакет глобально и создайте конфигурацию:
npm install -g cordon-cli
cordon initcordon 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 |
Агент имеет неограниченный доступ к инструментам | Гранулярные политики для каждого инструмента |
Нет видимости того, что делали агенты | Структурированный журнал аудита каждого вызова |
"Агент только что удалил таблицу?" | Одобрение в реальном времени через терминал |
Чтение и запись обрабатываются одинаково |
|
Команда безопасности против ИИ | Журналы аудита готовы к экспорту |
Функции
Механизм политик
Определяйте правила для каждого инструмента, сервера или глобально. Политики уровня инструмента переопределяют политики сервера.
// 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
},Одобрение человеком (Human-in-the-Loop)
Когда вызов инструмента требует одобрения, 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 берет на себя патчинг конфигурации.
Конфигурация
Действия политики
Политика | Поведение |
| Пропускать немедленно |
| Отклонить — агент получает ошибку |
| Приостановить до одобрения человеком в терминале |
| Чтение проходит; запись требует одобрения |
| Все операции записи блокируются |
| Пропускать, но помечать в журнале аудита |
| Фильтровать из tools/list — модель никогда не видит его |
Политики могут быть установлены на уровне сервера (по умолчанию для всех инструментов) или для каждого инструмента (переопределяет настройки сервера):
{
name: 'my-server',
policy: 'approve-writes', // server default
tools: {
safe_read: 'allow', // override: always allow
nuke_db: 'block', // override: always block
},
}Каналы одобрения
Канал | Статус |
| Доступно — интерактивный запрос в терминале |
| Доступно — сообщения Block Kit, взаимодействия с проверкой HMAC |
| Ожидается в v0.3 |
| Ожидается в v0.3 |
Вывод аудита
Вывод | Статус |
| Доступно |
| Доступно — строки JSON записываются в локальный файл |
| Доступно — отправка событий на дашборд Cordon |
| Ожидается в v0.3 |
Пакеты
Пакет | Описание |
| CLI — |
| TypeScript SDK для конфигурации — |
| Основной движок прокси — оценщик политик, журнал аудита, менеджер одобрений |
Дорожная карта
[x] Прокси MCP с моделью агрегатора (несколько серверов, один шлюз)
[x] Механизм политик — allow, block, approve, approve-writes, read-only, log-only, hidden
[x] Каталоги инструментов «закрытого мира» —
knownTools+onUnknownToolдля контроля поверхности вышестоящих серверов[x] Канал одобрения через терминал с TTY-безопасным запросом
[x] Канал одобрения через Slack — сообщения Block Kit, опросы для ответа
[x] Структурированное JSON-логирование аудита в stdout, файл или на дашборд
[x]
cordon init— автоматическое чтение и патчинг конфигурации Claude Desktop[x] Ограничение частоты запросов (Rate limiting) — скользящее окно, глобально / на сервер / на инструмент
[x] Хостинг-дашборд — история журналов аудита, экспорт в CSV/JSON, GitHub OAuth
[x] Биллинг Stripe — бесплатный и Pro тарифы
[ ] Экспорт OpenTelemetry
[ ] Командные аккаунты и централизованное управление
[ ] Поддержка транспорта HTTP/SSE
Примеры
Смотрите examples/security-showcase для работающей демонстрации того, как Cordon перехватывает агента, пытающегося удалить таблицу в продакшн-базе данных.
cd examples/security-showcase
npm install
npm run demoВарианты использования
Разработчик-одиночка — Обезопасьте свою локальную настройку Claude/Cursor. Видьте точно, что вызывает ваш агент, и блокируйте все опасное до того, как это попадет в продакшн.
Команда стартапа — Развертывайте агентов с уверенностью. Каждый вызов инструмента логируется, запись требует одобрения, а у вашей команды безопасности есть история действий.
Корпорация — Централизованное управление всеми развертываниями ИИ-агентов. Политики как код, структурированные логи и четкий путь к аудиту, соответствующему SOC2.
Отлично работает с
Agent Toolbelt — типизированный набор готовых инструментов MCP (поиск в сети, fetch, файловая система и многое другое). Подключите его к 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.
Maintenance
Related MCP Connectors
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Security & DLP proxy for MCP: tool-poisoning scans, PII redaction on tool args/results. Beta.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
Related MCP Servers
- AlicenseBqualityCmaintenanceSecurity 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.5789 npm10MIT
- AlicenseNot gradedqualityBmaintenanceA 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 npmMIT
- FlicenseNot gradedqualityCmaintenanceMCP 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.-
- AlicenseNot gradedqualityBmaintenanceProvides a human-in-the-loop approval gateway for AI agents, enforcing policies and audit logging for MCP-compatible tool calls.Apache 2.0