Wezylnia/toolgate
GitHub: Wezylnia/toolgate
为 MCP 服务器工具提供策略、审批、脱敏、超时和审计能力的 TypeScript 中间件库。
Stars: 2 | Forks: 0
# ToolGateKit
为您的 MCP 工具设置防护机制。
ToolGateKit 是一个 TypeScript 中间件库,专为构建 Model Context Protocol 服务器的开发者设计。它封装了您现有的 MCP 工具处理器,并在处理器运行前检查声明的策略。
当工具需要读取文件、写入数据、调用 API、删除记录、发送消息,或向 AI 智能体公开敏感输出时,都可以使用它。
```
npm install toolgate-mcp
```
## 它解决的问题
MCP 工具本质上只是函数,但一旦智能体可以调用它们,就需要明确的边界限制:
- 该工具可以读取任意路径,还是只能读取 `src/**`?
- `.env`、`secrets/**` 或 `node_modules/**` 是否应该始终被拦截?
- 破坏性工具在运行前是否需要审批?
- 返回输出前是否应隐藏敏感信息?
- 每次工具调用是否都应写入审计日志?
- 如果处理器挂起会发生什么?
ToolGateKit 将这些检查直接置于处理器旁,使得策略清晰可见、易于测试,并与您的服务器代码一起进行版本控制。
## 工作原理
```
policy + handler -> protected handler
```
对于每次调用,ToolGateKit 都会:
1. 评估声明的策略。
2. 拦截需要审批或违反策略的调用。
3. 在支持超时的情况下运行处理器。
4. 如果已启用,则对敏感输出进行脱敏。
5. 如果已配置,则写入审计条目。
6. 返回结构化的成功或错误结果。
## 示例
```
import { createAuditLogger, gate } from "toolgate-mcp";
const audit = createAuditLogger({
file: ".toolgate/audit.jsonl"
});
const readFileTool = gate(
{
name: "read_file",
risk: "read",
allowedPaths: ["src/**", "docs/**"],
deniedPaths: [".env", "secrets/**"],
timeoutMs: 5000,
redact: true,
audit
},
async ({ path }, ctx) => ({
content: await fs.readFile(path, { encoding: "utf8", signal: ctx.signal })
})
);
```
如果智能体请求 `.env`,则不会执行处理器:
```
{
"ok": false,
"error": {
"type": "policy_violation",
"code": "PATH_DENIED",
"message": "Tool 'read_file' is not allowed to access '.env'."
}
}
```
## 核心功能
- 用于 MCP 工具处理器的 `gate(policy, handler)` 包装器
- 适配 MCP 兼容 `content` 和 `isError` 结果的 `gateMcp(policy, handler)` 适配器
- 风险级别:`read`、`write`、`external`、`destructive`
- 对危险工具实施需要审批的拦截机制
- 宿主驱动的异步审批提供程序,提供结构化的拒绝和失败结果
- 具备拒绝优先行为的路径允许列表和拒绝列表
- 网络域名允许列表和拒绝列表
- 命令允许列表和拒绝列表
- 每个受保护处理器的内存速率限制
- 用于路径、URL 和命令的自定义输入提取器
- 针对常见文件系统和外部 API 工具的策略预设
- 基于 `AbortSignal` 的超时处理
- 对常见机密和 token 的默认脱敏
- 只追加的 JSONL 审计日志,通过 `audit: true` 写入 `.toolgate/audit.jsonl`
- 通过 API 或 CLI 进行流式审计日志过滤和摘要
- 导出策略清单以增强可见性
- 快速失败(fail-fast)的运行时策略验证和重复名称配置检查
- 清单 JSON schema 和验证辅助工具
- 用于生成和验证清单的 `toolgate` CLI
- 可预测的结构化错误
## 它不包含的范围
ToolGateKit 不是 MCP 服务器、MCP 客户端、网关、代理、沙盒、审批 UI、智能体框架或身份验证系统。它降低了工具处理器周边的风险,但本身并不能使不安全的处理器代码变得安全。
## 状态
适用于 TypeScript MCP 服务器的 v0.5 版本。优先使用 ESM,要求 Node.js 18+。
## CLI
从 JSON 策略配置生成清单:
```
toolgate manifest --config toolgate.config.json --out policy-manifest.json
```
验证清单:
```
toolgate validate-manifest --file policy-manifest.json
```
在生成清单前验证策略配置:
```
toolgate validate-config --file toolgate.config.json
```
检查审计日志中被拦截的调用:
```
toolgate audit --file .toolgate/audit.jsonl --decision blocked --limit 100
```
## 开发
```
npm install
npm run typecheck
npm test
npm run build
npm audit
```
## 发布
npm 发布仅通过 GitHub Releases 自动进行。普通的提交和推送不会触发发布。
创建一个与包版本匹配的发布标签(例如 `v0.5.1`),发布工作流将在向 npm 发布 `toolgate-mcp` 之前运行测试。请参阅[发布流程](docs/release.md)。
## 文档
- [包 README](packages/mcp/README.md)
- [策略](docs/policies.md)
- [审批](docs/approvals.md)
- [审计日志](docs/audit-logs.md)
- [脱敏](docs/redaction.md)
- [清单](docs/manifest.md)
- [CLI](docs/cli.md)
- [限制](docs/limitations.md)
- [示例](docs/examples.md)
- [MCP 集成](docs/mcp-integration.md)
- [发布流程](docs/release.md)
- [更新日志](CHANGELOG.md)
标签:AI代理, MCP, MITM代理, TypeScript, 中间件, 代码注入, 安全插件, 数据脱敏, 暗色界面, 权限控制, 自动化攻击