cordon
모든 기업은 AI 에이전트를 배포하고 싶어 합니다. 하지만 어떤 기업도 에이전트에게 데이터베이스의 제어권을 넘겨주려 하지 않습니다.
Cordon이 신뢰의 격차를 메워줍니다.
데모
https://github.com/user-attachments/assets/153d978f-6303-443a-b49b-b4ec7ebf0452
문제점
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단계 — 초기화
프로젝트 내부(claude_desktop_config.json이 있는 곳)에서 다음을 실행하세요:
npx cordon-cli init이 명령은 기존 Claude Desktop MCP 설정을 읽고 cordon.config.ts를 생성하며, 모든 도구 호출이 Cordon을 거치도록 Claude Desktop을 패치합니다.
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 사용 시 |
에이전트가 도구에 무제한 접근 | |
에이전트의 작업 내용 확인 불가 | 모든 호출에 대한 구조화된 감사 추적 |
"에이전트가 테이블을 삭제했나?" | 실시간 터미널 승인 |
읽기와 쓰기를 동일하게 처리 |
|
컴플라이언스 팀이 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
},인간 개입 승인 (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작동 원리
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이 설정 패치를 처리합니다.
설정
정책 동작
정책 | 동작 |
| 즉시 통과 |
| 거부 — 에이전트가 오류 수신 |
| 터미널에서 사람의 승인을 받을 때까지 일시 중지 |
| 읽기는 통과, 쓰기는 승인 필요 |
| 모든 쓰기 작업 차단 |
| 통과시키되 감사 로그에 기록 |
정책은 서버 수준(모든 도구의 기본값) 또는 도구별(서버 기본값 재정의)로 설정할 수 있습니다:
{
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
[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 도구(웹 검색, 가져오기, 파일 시스템 등)의 타입이 지정된 툴킷입니다. 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를 참조하세요.
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/marras0914/cordon'
If you have feedback or need assistance with the MCP directory API, please join our Discord server