mcpField
C
Cordon for MCP

Cordon for MCP

本地服务
getcordon.com安全213 周前更新

关于 Cordon for MCP

Cordon 是位于 LLM 与 MCP 服务之间的安全网关,面向需要限制 Agent 工具权限并审计调用的团队。它通过策略、审批和日志管理工具调用。

主要功能

  1. 01按工具和服务配置策略
  2. 02终端或 Slack 人工审批
  3. 03记录结构化调用审计日志
  4. 04只读与 SQL 感知策略
  5. 05隐藏工具并限制工具目录
  6. 06按调用序列追加策略约束

适用场景

  1. 01限制数据库写入并要求审批
  2. 02追踪 Agent 的工具调用以供审计
  3. 03阻止上游新增工具自动开放
  4. 04约束敏感读取后的后续操作

MCP 相关

Cordon 聚合并代理 MCP 服务,在 LLM 客户端与上游服务之间拦截工具调用。支持 stdio 和 HTTP 传输,并向 MCP 客户端提供受策略控制的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"marras0914-cordon": {
"command": "npx",
"args": [
"-y",
"@getcordon/cli"
]
}
}
}
启动命令npx -y @getcordon/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@getcordon/cli0.3.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Cordon for MCP

MCP 工具调用的安全网关

网站 • 文章

快速入门 • 为什么选择 Cordon • 工作原理 • 配置 • 路线图 • 参与贡献

npm 版本 许可证 星标数


每家公司都想部署 AI Agent,却没有公司愿意把数据库的钥匙交给 Agent。

Cordon 消除了信任鸿沟。

来自 Agent Toolbelt 的维护者——25+ 个 MCP 工具,每周 npm 下载量约 1,600 次。


演示

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


问题

Model Context Protocol (MCP) 让 AI Agent 能够轻松使用强大的工具,例如数据库、文件系统、API 和云基础设施。

但 MCP 没有内置的安全模型。没有审计日志,没有审批工作流,也没有速率限制。如今,AI Agent 要么完全关闭,要么拥有完整管理员权限,两者之间别无选择。

这是阻碍 AI Agent 进入生产环境的最大障碍。

解决方案

Cordon 是一个安全网关,位于大模型与 MCP 服务之间。

它兼具防火墙、审计器和远程控制的作用,让你完全掌握 AI Agent 可以和不可以执行的操作。

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

无需更改基础设施,无需重写。只需一个配置文件。


快速入门

步骤 1 — 初始化

在项目目录中运行(该目录下应存在 claude_desktop_config.json):

npx @getcordon/cli init

这会读取你现有的 Claude Desktop MCP 配置,生成 cordon.config.ts,并修改 Claude Desktop,使所有工具调用都经由 Cordon 转发。

步骤 2 — 启动

npx @getcordon/cli start

Cordon 启动后会连接到你的 MCP 服务,并开始拦截工具调用。重启 Claude Desktop 后,每次工具调用都会经由网关转发。

手动设置

如果你希望手动配置,可以全局安装并创建配置文件:

npm install -g @getcordon/cli
cordon init

cordon init 会生成一个 cordon.config.ts:

import { defineConfig } from '@getcordon/policy';

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; the request is retained
                                  // and replayable if approved late
  },
});

为什么选择 Cordon

不使用 Cordon使用 Cordon
Agent 可不受限制地访问工具按工具设置细粒度策略
无法了解 Agent 执行过什么操作为每次调用生成结构化审计记录
“Agent 刚才是不是删了张表?”在终端实时审批
读操作和写操作一视同仁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 会暂停 Agent,并直接在终端中提示你:

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

  [A]pprove  [D]eny
  >

Agent 会等待,由你决定。

更喜欢使用 Slack?在控制面板中点击 Add to Slack,只需连接一次工作区,无需创建或粘贴机器人令牌,然后设置 approvals: { channel: 'slack' }。遇到标记的调用时,系统会向你的频道发送一张“批准 / 拒绝”卡片,并暂停等待人工点击;审核者的姓名也会写入审计记录。请参阅 Slack 审核设置。

如果迟迟无人回复。 调用会被拒绝,Agent 会继续运行,但请求不会丢失。Cordon 会保留待审核请求及其完整上下文,控制面板也会将其列在 发生的更改 → 超时的审核 下。如果有人在请求过期后批准了卡片,这一迟到的决定仍会被记录,调用也可以重新运行:

cordon replay <callId>

重放会执行该工具,并将结果连同原因 replay of late-approved call 记录到同一审计流中。它恢复的是工具调用,而非 Agent 的会话——发起请求的 Agent 早已结束运行。只有在超时后获批的调用才能重放,因为重放已经运行过的调用会导致重复执行。

审计日志

每次工具调用都会记录为结构化 JSON——包括请求、策略决策、响应和耗时。你可以将其通过管道发送到标准输出,也可以写入文件,供合规团队使用。

{"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
  },
}
SQL 感知策略

对于数据库 MCP 服务,如果一个工具可以接受任意 SQL(Postgres、SQLite、BigQuery 等),仅凭工具名称进行启发式判断并不够精确——名称 query 并不能告诉你 Agent 即将执行的是 SELECT 还是 DROP TABLE。Cordon 内置了两种策略,会解析 SQL 本身,并根据语句类型作出判断。

tools: {
  // Allow SELECTs (including CTEs that wrap a SELECT). Block everything else.
  query: 'sql-read-only',

  // Reads pass; writes (INSERT/UPDATE/DELETE/DROP/ALTER/...) pause for human approval.
  execute: 'sql-approve-writes',

  // When the tool takes SQL in a different arg name:
  run: { action: 'sql-read-only', sqlArg: 'statement' },
}

默认情况下,两种策略都使用 PostgreSQL 方言(其他方言将在后续支持),并采用失败即关闭的方式:无法解析的 SQL 会被拦截,而非放行。AST 解析器可以正确将提示注入模式(如 SELECT 1; DROP TABLE users;)和包裹在块注释中的关键字识别为写操作。

封闭世界工具目录

声明上游服务应公开的确切工具范围。当上游在未来版本中添加新工具时,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 会拦截它并向标准错误输出警告,无需更新策略。将 knownTools 保持为未定义,即可维持向后兼容的开放世界行为。

每个 Agent 的策略 + 调用图约束

Tier 1 演示 — read_data 成功,write_file 被调用图规则阻止

每个工具的策略可以拦截危险的单次调用。调用图规则可以拦截危险的调用序列——也就是以非预期顺序使用允许的工具。典型示例:Agent 使用 read_data(允许)读取敏感数据,然后用 write_file(也允许)将其写入磁盘。单独来看,每次调用都没问题。问题在于调用序列。

Cordon 的调用图规则会在每个工具的策略之上应用,且是累加的——它们只能提高严重级别,绝不会降低。

export default defineConfig({
  // Optional identity for this Cordon process. Surfaced in audit logs.
  agentId: 'et-acquisition-agent',

  servers: [{
    name: 'demo-db',
    transport: 'stdio',
    command: 'npx',
    args: ['-y', '@my-org/db-mcp'],
    policy: 'approve-writes',
  }],

  callGraph: [
    // Reading data and then writing to disk is the exfil shape — block it,
    // even though write_file would only require approval on its own.
    { from: 'read_data', to: 'write_file', action: 'block',
      reason: 'No file writes after database reads.' },

    // Glob matching: any send_* tool right after a database read needs human approval.
    { from: 'read_data', to: 'send_*', action: 'approve' },

    // `*` matches anything: after a privileged read, every next call must be approved.
    { from: 'sensitive_read', to: '*', action: 'approve' },
  ],
});

规则如何与每个工具的策略结合(严重级别累加):

严重级别顺序:allow < approve < block。

只有当调用图规则的动作严重级别高于每个工具的决策时,该规则才会生效。这意味着:

  • action: 'block' 规则会覆盖 allow 的每个工具策略 ✓
  • action: 'approve' 规则会覆盖 allow,但不会降低 block ✓
  • action: 'allow' 规则绝不会削弱更严格的基准策略——它不会产生任何效果
  • 多条规则同时匹配时,严重级别最高的规则生效(配置顺序无关紧要)

单向棘轮——只能收紧,绝不放宽。

审计日志增加链上下文。 每个 tool_call_received 事件现在都会携带 previousTool(上次成功执行的工具)。规则触发时,被阻止或需要审批的事件还会包含 callGraphRule: { from, to }:

{"event":"tool_call_received","toolName":"write_file","previousTool":"read_data","..."}
{"event":"tool_call_blocked","toolName":"write_file","reason":"No file writes after database reads.","previousTool":"read_data","callGraphRule":{"from":"read_data","to":"write_file"},"..."}

v1 的适用范围(如果你要在生产环境中发布每个 Agent 的策略,请阅读此部分):

在 stdio 模式(以及当前的单租户 HTTP 模式)下,一个 Cordon 进程服务于一个 Agent 身份——因此,配置中的 agentId 标识的是此部署,而不是每次调用的运行时身份。多租户 HTTP 网关(一个 Cordon 实例托管多个具有不同策略的 Agent)仍在排期中——届时 agentId 将支持从 HTTP 标头获取,无需重写配置。

lastTool 仅在上游正常返回时才会更新。被阻止、拒绝以及传输失败的调用不会推进调用链。v1 无法防范探测行为——攻击者尝试 fs:delete(被阻止)后再调用 http:post 时,http:post 会根据探测之前的工具进行评估,而不是根据探测本身。我们有意采用这种设计:记录每次被阻止的尝试,会过于频繁地将那些被阻止一次后继续执行的合法流程误判为异常。等有了真实的对抗性滥用数据后再重新评估。


工作原理

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)

你的大模型客户端和 MCP 服务完全不需要更改。cordon init 会处理配置修改。

HTTP 传输(n8n 和其他通过 HTTP 通信的 MCP 客户端)

对于通过 HTTP 使用 MCP 通信的客户端——n8n 的 MCP Client Tool 节点、无法生成子进程的托管 Agent,以及其他需要网络端点的客户端——Cordon 可以作为 HTTP 监听器运行,而不是使用 stdio。

export CORDON_GATEWAY_TOKEN=your-secret-token
npx @getcordon/cli start --http --port 7777
# [cordon] HTTP gateway listening on http://127.0.0.1:7777/mcp

也可以在配置中设置:

import { defineConfig } from '@getcordon/policy';

export default defineConfig({
  servers: [ /* your upstream MCP servers */ ],
  gateway: {
    transport: 'http',
    authToken: process.env.CORDON_GATEWAY_TOKEN!,
    port: 7777,
    host: '127.0.0.1',  // localhost-only by default; set to '0.0.0.0' to expose externally
  },
});

客户端通过 Authorization: Bearer <your-token> 请求头连接到 http://your-host:7777/mcp。此传输实现了 MCP Streamable HTTP 规范——一个端点同时提供 SSE 响应流和直接 JSON 响应,并通过请求头中的会话 ID 处理会话复用。

所有策略执行、审计日志记录和审批工作流在不同传输方式下的工作方式都相同——变化的只有线路协议。

从 n8n 连接。 将 MCP Client Tool 节点指向你的 Cordon URL,并将 Bearer 令牌设为凭据。已弃用的仅支持 SSE 的端点形式(旧版 n8n 使用旧版 MCP SSE 规范)不受支持——Cordon 仅提供当前的 Streamable HTTP 传输,n8n 正在迁移到该传输。

单租户。 当前的 HTTP 传输是单租户的:所有会话共用相同的上游 MCP 服务、策略配置和身份验证令牌。多租户托管网关(从请求头读取每次调用的 agentId,并使用每租户策略)已列入路线图。


配置

策略操作
策略行为
allow立即放行
block拒绝——Agent 会收到错误
approve暂停,等待在终端中进行人工审批
approve-writes读取操作直接放行;写入操作需要审批
read-only阻止所有写入操作
log-only放行,但在审计日志中标记
hidden从 tools/list 中过滤掉——模型不会看到它
sql-read-only解析 SQL 参数,允许 SELECT/WITH-SELECT,阻止其他所有内容(无法解析时默认拒绝)
sql-approve-writes解析 SQL 参数,允许读取操作,暂停写入操作以等待人工审批,阻止无法解析的内容

策略可在服务级别设置(适用于所有工具的默认策略),也可针对单个工具设置(覆盖服务默认策略):

{
  name: 'my-server',
  policy: 'approve-writes',   // server default
  tools: {
    safe_read:   'allow',     // override: always allow
    nuke_db:     'block',     // override: always block
  },
}
审批渠道
渠道状态
terminal可用——在终端中进行交互式提示
slack可用——一键添加到 Slack(OAuth)、由服务器发布的 Block Kit 卡片、经 HMAC 验证的交互,以及记录中捕获的审批人信息
web将在 v0.3 推出
webhook将在 v0.3 推出
审计输出
输出状态
stdout可用
file可用——将 JSON 行写入本地文件
hosted可用——将事件发送到 Cordon 仪表板
otlp将在 v0.3 推出

软件包

软件包描述
@getcordon/cliCLI——npx @getcordon/cli start
@getcordon/policyTypeScript 配置 SDK——defineConfig() 和所有类型
@getcordon/core核心代理引擎——策略评估器、审计日志记录器、审批管理器

路线图

  • 带聚合器模型的 MCP 代理(多个服务,一个网关)
  • 策略引擎 — 允许、阻止、审批、审批写入、只读、仅记录、隐藏
  • 封闭世界工具目录 — 使用 knownTools + onUnknownTool 控制上游接口,面向未来
  • SQL 感知策略 — sql-read-only / sql-approve-writes 在调用时解析 SQL 参数(PostgreSQL 方言)
  • 终端审批通道,提供兼容 TTY 的提示
  • Slack 审批通道 — Block Kit 消息,并轮询响应
  • 将结构化 JSON 审计日志输出到 stdout、文件或托管式仪表板
  • cordon init — 自动读取 Claude Desktop 配置并进行修改
  • 速率限制 — 滑动窗口,全局 / 按服务 / 按工具
  • 托管式仪表板 — 审计日志历史记录、CSV/JSON 导出、GitHub OAuth,个人用户免费
  • 按 Agent 设置策略 + 调用图约束 — 根据调用序列阻止操作,并采用累加式严重级别
  • HTTP/Streamable HTTP 传输 — 面向 n8n 和支持 HTTP 的 MCP 客户端的单租户网关
  • 漂移检测 — 在仪表板中查看“本周 Agent 的行为发生了哪些变化”
  • 策略建议 — 分析审计历史记录,并提出调用图规则和关卡建议
  • 持久化审批 — 超时的审批会被保留、显示,并可通过 cordon replay 重新执行
  • 多租户 HTTP 网关 — 多个 Agent 共用一个 Cordon 实例,并通过请求头中的 agentId 区分每次调用
  • OpenTelemetry 导出
  • 团队账户和集中式治理

示例

请参阅 examples/security-showcase,了解 Cordon 拦截试图删除生产数据库表的 Agent 的实际演示。

cd examples/security-showcase
npm install
npm run demo

使用场景

企业 — 对所有 AI Agent 部署进行集中式治理。策略即代码、结构化日志,并为符合 SOC2 要求的审计跟踪提供清晰路径。

创业团队 — 放心部署 Agent。每次工具调用都会记录,写入操作需要审批,合规团队也能查看审计记录。

独立开发者 — 保护本地 Claude/Cursor 环境。准确了解 Agent 调用了什么工具,并在危险操作进入生产环境之前将其阻止。


协作工具

  • Agent Toolbelt — 一套类型化的现成 MCP 工具(网页搜索、获取内容、文件系统等)。将它接入 Claude Desktop,再通过 Cordon 路由这些工具调用,以强制执行策略并记录审计日志。Agent Toolbelt 为 Agent 提供能力;Cordon 则确保它们在使用之前先征求许可。

  • Build & Ship MCP Tools — 配套课程,循序渐进地讲解如何从头到尾构建自己的 MCP 服务。共 7 个模块、33 节课;模块 0 免费,模块 6 讲解如何使用 Cordon 保护 MCP 服务。


参与贡献

Cordon 是开源项目,欢迎贡献。

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

许可证

MIT — 详情请参阅 LICENSE。


别再盲目信任,开始实施治理。
⭐ 在 GitHub 上点亮 Star

隐私 · 条款 · 支持 · 合作伙伴
© 2026 Elephant Tortoise LLC

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。