
Cordon for MCP
io.github.marras0914由 GitHub 帳號 marras0914 發布v0.3.0更新於 Oct 24, 2026
Cordon for MCP. Security gateway with policy enforcement, audit log, and HITL approvals.
概覽
本機安全閘道,代理 MCP 工具呼叫,在請求送達上游伺服器前套用逐工具策略、稽核日誌與人工核准。
- 可以做什麼
- 把 MCP 用戶端的工具呼叫經由單一彙整代理轉送到已設定的上游 MCP 伺服器
- 依伺服器與依工具套用 allow、block、approve、approve-writes、read-only、log-only、hidden 等策略
- 將被標記的呼叫暫停,在終端機或 Slack 等待人工核准,逾時請求會保留並可重播
- 解析 SQL 參數,放行讀取並攔阻或要求核准寫入,並可用封閉式工具清單限制工具範圍
- 把每次呼叫記錄為結構化 JSON 稽核事件,輸出到標準輸出、檔案或託管儀表板
- 以呼叫圖規則攔阻或要求核准危險的工具呼叫順序
- 適用情境
- 當助理已能存取資料庫、檔案系統或雲端 API 等強力 MCP 伺服器,而你希望在無人看管執行前取得可視性、寫入核准與稽核紀錄時適用。適合想要安全防護的個人開發者,也適合需要策略即程式碼與合規日誌的團隊。
- 執行需求
- 透過 npx 從 npm 套件 @getcordon/cli 在本機執行,需要 Node.js。初始化會讀取並修改現有的 Claude Desktop MCP 設定,並產生 cordon.config.ts。選用的 HTTP 模式需透過 CORDON_GATEWAY_TOKEN 設定 bearer 權杖。Slack 核准需在儀表板連接工作區。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Cordon for MCP,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Cordon for MCP
The Security Gateway for MCP Tool Calls
Quickstart • Why Cordon • How It Works • Configuration • Roadmap • Contributing
[npm version] [license] [stars]
Every company wants to deploy AI agents. No company is willing to give an agent the keys to their database.
Cordon closes the trust gap.
From the maintainer of Agent Toolbelt — 25+ MCP tools, ~1,600 weekly npm downloads.
Demo
https://github.com/user-attachments/assets/153d978f-6303-443a-b49b-b4ec7ebf0452
The Problem
The Model Context Protocol (MCP) has made it trivially easy to give AI agents access to powerful tools — databases, file systems, APIs, cloud infrastructure.
But MCP has no built-in security model. No audit logs. No approval workflows. No rate limits. Today, an AI agent is either off or full admin. There is nothing in between.
This is the single biggest blocker preventing AI agents from reaching production.
The Solution
Cordon is the security gateway that sits between the LLM and your MCP servers.
It acts as a firewall, an auditor, and a remote control — giving you complete visibility and authority over what your AI agents can and cannot do.
No infrastructure changes. No rewrites. One config file.
Quickstart
Step 1 — Initialize
Run this inside your project (where your claude_desktop_config.json exists):
This reads your existing Claude Desktop MCP config, generates cordon.config.ts, and patches Claude Desktop to route all tool calls through Cordon.
Step 2 — Start
Cordon starts, connects to your MCP servers, and begins intercepting tool calls. Restart Claude Desktop and every tool call now flows through the gateway.
Manual setup
If you prefer to configure manually, install globally and create a config:
cordon init generates a cordon.config.ts:
Why Cordon
Features
Policy Engine
Define rules per tool, per server, or globally. Tool-level policies override server policies.
Human-in-the-Loop Approvals
When a tool call requires approval, Cordon pauses the agent and prompts you directly in your terminal:
The agent waits. You decide.
Prefer Slack? Connect your workspace once with Add to Slack in the dashboard — no bot token to create or paste — then set approvals: { channel: 'slack' }. A flagged call posts an Approve / Deny card to your channel and pauses until a human clicks, and the approver's name is written onto the audit record. See the Slack approvals setup.
When nobody answers in time. The call is denied and the agent moves on, but the request isn't lost. Cordon retains the pending approval with its full context, and the dashboard lists it under What changed → Timed-out approvals. If someone approves the card after it expired, that late decision is recorded and the call can be re-run:
The replay executes the tool and logs the outcome to the same audit stream with reason replay of late-approved call. It recovers the tool call, not the agent's session — the agent that asked is long gone. Only a call approved after timing out is replayable, since replaying a call that already ran would double-execute it.
Audit Logging
Every tool call is logged as structured JSON — the request, the policy decision, the response, and timing. Pipe to stdout or write to a file for your compliance team.
Read-Only Mode
One policy setting to block all write operations across a server. Zero guesswork about what counts as a write — Cordon detects it from the tool name.
Hidden Tools
For tools the model should never even see — not just rejected on call, but filtered from the tools/list response entirely. Closes a prompt-injection surface: if the model never knows a tool exists, it can't be tricked into calling it.
SQL-Aware Policies
For database MCP servers where a single tool takes arbitrary SQL (Postgres, SQLite, BigQuery, etc.), tool-name heuristics aren't precise enough — the name query doesn't tell you whether the agent's about to SELECT or DROP TABLE. Cordon ships two policies that parse the SQL itself and decide based on the statement type.
Both policies use the PostgreSQL dialect by default (others coming later) and are fail-closed: unparseable SQL is blocked rather than allowed. Prompt-injection patterns like SELECT 1; DROP TABLE users; and block-comment-wrapped keywords are correctly classified as writes by the AST parser.
Closed-World Tool Catalogs
Declare the exact tool surface your upstream server is expected to advertise. When the upstream adds a new tool in a future release, Cordon blocks it automatically until you explicitly promote it.
If the next Postgres MCP release adds truncate_table, Cordon blocks it with a stderr warning — no policy update needed. Leave knownTools undefined for backwards-compatible open-world behavior.
Per-Agent Policies + Call-Graph Constraints
[Tier 1 demo — read_data succeeds, write_file blocked by call-graph rule]
Per-tool policies catch dangerous individual calls. Call-graph rules catch dangerous sequences — combinations of allowed tools used in unintended order. The classic example: an agent reads sensitive data with read_data (allowed) and then writes it to disk with write_file (also allowed). Each call is fine in isolation. The sequence is the problem.
Cordon's call-graph rules apply on top of your per-tool policy and are additive — they can only raise severity, never lower it.
How rules combine with per-tool policies (additive severity):
Severity ordering: allow < approve < block.
A call-graph rule only takes effect if its action is higher severity than the per-tool decision. That means:
- A rule with
action: 'block'overrides anallowper-tool policy ✓ - A rule with
action: 'approve'overridesallow, but doesn't lower ablock✓ - A rule with
action: 'allow'never weakens a stricter base — it's a no-op - When multiple rules match, the highest-severity one wins (config order doesn't matter)
One-way ratchet — tighten only, never loosen.
Audit log gains chain context. Every tool_call_received event now carries previousTool (what was last successfully executed). Blocked / approval-required events also include callGraphRule: { from, to } when a rule fired:
v1 scoping (read this if you're shipping per-agent policies in production):
In stdio mode (and in the current single-tenant HTTP mode), one Cordon process serves one agent identity — so agentId in config identifies this deployment, not a per-call runtime identity. The multi-tenant HTTP gateway (where one Cordon instance hosts many agents with distinct policies) is still queued — agentId will gain an HTTP-header source then, no config rewrite needed.
lastTool advances only on a clean upstream return. Blocked, denied, and transport-failed calls don't advance the chain. v1 doesn't catch probing — an adversary that attempts fs:delete (blocked) and then http:post will see http:post evaluated against whatever came before the probe, not the probe itself. We chose this on purpose: tracking every blocked attempt false-positives too aggressively on legitimate flows that get blocked once and continue. Revisit when there's real adversarial-misuse data.
How It Works
Cordon runs as a single aggregating MCP proxy. Instead of Claude Desktop connecting directly to your MCP servers, it connects to Cordon. Cordon then manages your servers internally.
Your LLM client and MCP servers don't change at all. cordon init handles the config patching.
HTTP Transport (n8n and other HTTP-speaking MCP clients)
For clients that talk MCP over HTTP — n8n's MCP Client Tool node, hosted agents that can't spawn child processes, anything else that wants a network endpoint — Cordon can run as an HTTP listener instead of stdio.
Or set it in your config:
Clients connect to http://your-host:7777/mcp with an Authorization: Bearer <your-token> header. The transport implements the MCP Streamable HTTP spec — one endpoint serves both SSE response streams and direct JSON responses, with session multiplexing handled by session IDs in headers.
All policy enforcement, audit logging, and approval workflows work identically across transports — only the wire protocol changes.
Connecting from n8n. Point the MCP Client Tool node at your Cordon URL with the Bearer token as the credential. The deprecated SSE-only endpoint shape (older n8n versions on the legacy MCP SSE spec) is not implemented — Cordon ships only the current Streamable HTTP transport, which n8n is migrating to.
Single-tenant. The current HTTP transport is single-tenant: all sessions share the same upstream MCP servers, policy config, and auth token. A multi-tenant hosted gateway (per-call agentId from headers, per-tenant policy) is on the roadmap.
Configuration
Policy actions
Policies can be set at the server level (default for all tools) or per-tool (overrides the server default):
Approval channels
Audit outputs
Packages
Roadmap
- MCP proxy with aggregator model (multiple servers, one gateway)
- Policy engine — allow, block, approve, approve-writes, read-only, log-only, hidden
- Closed-world tool catalogs —
knownTools+onUnknownToolfor future-proof upstream surface control - SQL-aware policies —
sql-read-only/sql-approve-writesparse SQL arguments at call time (PostgreSQL dialect) - Terminal approval channel with TTY-safe prompt
- Slack approval channel — Block Kit messages, polls for response
- Structured JSON audit logging to stdout, file, or hosted dashboard
-
cordon init— auto-reads Claude Desktop config and patches it - Rate limiting — sliding window, global / per-server / per-tool
- Hosted dashboard — audit log history, CSV/JSON export, GitHub OAuth, free for individuals
- Per-agent policies + call-graph constraints — sequence-aware blocking with additive severity
- HTTP/Streamable HTTP transport — single-tenant gateway for n8n and HTTP-speaking MCP clients
- Drift detection — "what changed about how your agents behave this week" in the dashboard
- Suggested policies — analyzes your audit history and proposes call-graph rules and gates
- Durable approvals — timed-out approvals are retained, surfaced, and replayable via
cordon replay - Multi-tenant HTTP gateway — many agents on one Cordon instance with per-call
agentIdfrom headers - OpenTelemetry export
- Team accounts and centralized governance
Examples
See examples/security-showcase for a working demo of Cordon intercepting an agent that attempts to drop a production database table.
Use Cases
Enterprise — Centralized governance across all AI agent deployments. Policy-as-code, structured logs, and a clear path to SOC2-ready audit trails.
Startup Team — Deploy agents with confidence. Every tool call is logged, writes require approval, and your compliance team has a trail.
Solo Developer — Secure your local Claude/Cursor setup. See exactly what your agent is calling and block anything dangerous before it reaches production.
Works great with
-
Agent Toolbelt — a typed toolkit of ready-made MCP tools (web search, fetch, filesystem, and more). Wire it into Claude Desktop, then route those tool calls through Cordon for policy enforcement and audit logging. Agent Toolbelt gives your agents power; Cordon makes sure they ask before using it.
-
Build & Ship MCP Tools — the companion course that walks through building your own MCP servers end to end. 7 modules, 33 lessons; Module 0 is free, Module 6 covers securing your server with Cordon.
Contributing
Cordon is open source and we welcome contributions.
License
MIT — see LICENSE for details.
Stop trusting. Start governing.
⭐ Star on GitHub
Privacy ·
Terms ·
Support ·
Partners
© 2026 Elephant Tortoise LLC
來源:README.md,提交 6e9a1a1
工具
0版本歷史
1- v0.3.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分