使用说明
日文版本: Readme.ja.md
mcp yoshi
用于MCP(模型上下文协议)工具通信的实时安全过滤器。作为Claude Code钩子运行,检查发送到MCP工具和从MCP工具接收的数据,以评估安全性。
为什么
- 97%的MCP工具描述不充分,13%与实际实施不一致(研究论文)
- 现有工具(mcp扫描、mcp漂移检测器)仅提供静态或预运行检查
- 不存在实时通信过滤器
mcp-yoshi在通信时检查数据,并在检测到问题时立即阻止或发出警告。
特性
出站检查(数据发送到MCP服务器)
| ID | 检查 | 检测目标 |
|---|---|---|
| OUT-001 | API密钥模式 | 用于AWS、OpenAI、GitHub、Slack、Google、Stripe等的API密钥。 |
| OUT-002 | 私钥 | RSA/EC/DSA/OPENSSH私钥 |
| OUT-003 | 高熵字符串 | 32+个字符的随机字符串 |
| OUT-004 | 环境值模式 | 密码、机密、令牌等的环境变量值。 |
| OUT-005 | PII模式 | 电子邮件地址、电话号码、信用卡号码 |
| OUT-006 | 大有效载荷 | 请求超过50KB的有效载荷(批量数据泄露) |
| OUT-007 | 路径遍历 | 敏感路径,如/etc/passwd、~/.ssh/、C:\Windows| |
入站检查(从MCP服务器接收的数据)
| ID | 检查 | 检测目标 |
|---|---|---|
| IN-001 | 提示注入 | 指令覆盖,如“忽略以前的指令” |
| IN-002 | Shell命令嵌入 | 通过命令注入 $(...), ; rm, | bash等等。 |
| IN-003 | 可疑URL/SSRF | javascript:URI、URL缩短器、内部网络、云元数据(169.254.169.254等) |
| IN-004 | 脚本注入 | <script>, eval(), document.cookie等等。 |
| IN-005 | 工具定义篡改 | 工具描述中嵌入的隐藏指令(12种模式) |
| IN-006 | ASCII走私 | 不可见的Unicode字符(U+E0000标签块,零宽度字符) |
| IN-007 | Base64编码有效载荷 | 根据现有模式重新检查解码的Base64内容 |
| IN-008 | 响应大小限制 | 响应超过512KB(上下文窗口中毒预防) |
| IN-009 | 隐藏字段 | 未声明字段,如 _hidden, $meta |
| IN-010 | 滥用激励 | 阻止凭据请求和命令执行提示 |
| IN-011 | 取样注射 | 嵌入式LLM标记器([INST], <<SYS>>, <|im_start|>等等) |
| IN-012 | 记录泄漏 | 数据泄露说明(“将此数据发送到…”、“调用记录工具”等) |
| IN-013 | 对话标记 | 对话标记(Human:, Assistant:)在线路开始处注入 |
| IN-014 | 响应中的凭据 | stdout/stderr中的剩余凭据(AWS/OpenAI/GitHub密钥、承载令牌、私钥) |
| IN-015 | 参数覆盖 | overrideConfig 关键共同发生 mcpServerConfig/NODE_OPTIONS/executablePath 用于允许列表绕过攻击(CVE-2026-40933相关) |
| IN-017 | 路径遍历 | ../ 目录遍历+敏感路径引用 basePath/filePath/filename (/etc/, /root/, C:\Windows\, /proc/) |
| IN-018 | 查询注入 | SQL/Cypher/NoSQL注入——块: UNION SELECT, DROP TABLE, MATCH...DELETE, ;-- /警告: ' OR ', sleep() |
| IN-019 | 沙盒逃逸 | 虚拟机/功能/全局访问(globalThis.process.mainModule.require, constructor.constructor() vm2逃逸等) |
| IN-020 | 标头欺骗 | 信任边界绕过(x-request-from: internal, x-forwarded-for: 127.0.0.1等等) |
| IN-021 | 浏览器启动RCE | 木偶师/剧作家 executablePath 指向shell二进制文件(/bin/sh, /usr/bin/nc等等) |
速率限制(通信模式)
| ID | 检查 | 检测目标 |
|---|---|---|
| RATE-001 | 快速火灾探测 | 在60秒内调用同一工具10次以上时发出警告 |
Rug Pull检测(工具定义篡改)
| ID | 检查 | 检测目标 |
|---|---|---|
| RUG-001 | 工具定义已更改 | 检测工具定义中的SHA-256哈希值更改 |
| SHADOW-001 | 工具跟踪 | 检测来自不同服务器的同名工具注册 |
在第一次调用时,记录工具定义哈希值。后续检测到更改的调用将触发警告。哈希值将持久化在 ~/.mcp-yoshi/tool-hashes.json,实现跨会话检测。
NFKC标准化(反混淆)
NFKC标准化 在所有入站/出站检查之前应用。这通过全角字符透明地检测混淆(例如。, ignore 编码为全宽)和Unicode兼容字符。
三级判决
| 判决 | 行为 |
|---|---|
| 通过 | 未发现任何问题。执行正常进行 |
| 警告 | 警告被添加到克劳德的上下文中。执行继续 |
| 块 | 工具执行被阻止(出站)/显示警告(入站) |
需求
- Node.js 18+
安装
npm install -g mcp-yoshi
设置
# Automatically add hook configuration to Claude Code's settings.json
mcp-yoshi init
# For project-level configuration
mcp-yoshi init --project
这将自动配置以下挂钩:
PreToolUse:比赛mcp__.*->出境支票PostToolUse:比赛mcp__.*->入境支票
用法
设置后,mcp-yoshi自动运行。每次调用MCP工具时都会运行检查。
查看日志
# Show the last 20 log entries
mcp-yoshi logs
# Show the last 50 entries at WARN level or above
mcp-yoshi logs --tail 50 --level warn
# Show BLOCK entries only
mcp-yoshi logs --level block
统计报告
# Show detection statistics for the past 7 days
mcp-yoshi stats
# Past 30 days
mcp-yoshi stats --days 30
查看配置
mcp-yoshi config
允许列表(受信任的服务器)
您可以将特定的MCP服务器注册为受信任的,以跳过检查。 这在以下情况下运行 你自己的责任,但日志记录仍在继续(严重程度:跳过)。
# Add a server to the allowlist (reason recommended)
mcp-yoshi allow memory --reason "Internal knowledge graph, trusted"
# Allow with expiry date
mcp-yoshi allow memory --reason "Temporary exception" --expires 2027-01-01
# Allow once only (auto-removed after first use)
mcp-yoshi allow memory --once --reason "One-time migration"
# List the allowlist
mcp-yoshi allow --list
# Remove from the allowlist
mcp-yoshi allow --remove memory
您还可以直接在中配置它 ~/.mcp-yoshi/config.json:
{
"allowlist": [
{ "server": "memory", "reason": "Internal knowledge graph", "addedAt": "2026-03-12T00:00:00.000Z" },
{ "server": "temp-srv", "reason": "Migration", "expires": "2026-12-31", "allowOnce": true }
]
}
SIEM导出
以SIEM兼容格式导出被阻止的事件:
# JSONL format (Splunk, Datadog)
mcp-yoshi export --format jsonl --days 30
# CEF format (ArcSight, QRadar)
mcp-yoshi export --format cef
# ECS format (Elastic)
mcp-yoshi export --format ecs
项目级别严重性覆盖
创建 .mcp-yoshi.json 在项目根目录中覆盖每个项目的严重性:
{
"severity": {
"BLOCK": ["apiKeys", "privateKeys"],
"WARN": ["highEntropy"]
}
}
配置
创建 ~/.mcp-yoshi/config.json 以覆盖默认设置。
{
"logLevel": "warn",
"checks": {
"outbound": {
"highEntropy": false
}
},
"servers": {
"*": { "enabled": true },
"memory": { "enabled": true },
"trusted-server": { "enabled": false }
},
"severity": {
"WARN": ["highEntropy", "pii", "suspiciousUrls", "base64Payload", "largePayload", "responseSizeLimit", "hiddenFields", "rapidFire"],
"BLOCK": ["apiKeys", "privateKeys", "promptInjection", "shellCommands", "scriptInjection", "toolTampering", "envValues", "asciiSmuggling", "pathTraversal", "elicitationAbuse"]
}
}
每台服务器配置
使用 servers 部分用于控制每个MCP服务器的过滤器打开/关闭和检查项目。
{
"servers": {
"*": { "enabled": true },
"trusted-internal": { "enabled": false },
"external-api": {
"enabled": true,
"checks": {
"outbound": { "pii": false },
"inbound": { "promptInjection": true }
}
}
}
}
| 密钥 | 描述 |
|---|---|
"*" |
默认设置(应用于未定义的服务器) |
"<server-name>" |
适用于工具匹配 mcp__<server-name>__* |
enabled: false->完全跳过对该服务器的检查checks->覆盖每台服务器的全局设置
配置参考
| 选项 | 默认值 | 描述 |
|---|---|---|
logDir |
~/.mcp-yoshi/logs |
日志输出目录 |
logLevel |
info |
info:记录所有内容, warn:警告及以上, none:无日志记录 |
checks.outbound.* |
true |
启用/禁用单个出站检查 |
checks.inbound.* |
true |
启用/禁用单个入站检查 |
servers |
{"*": {"enabled": true}} |
每台服务器打开/关闭 |
severity.WARN |
["highEntropy", "pii", "suspiciousUrls", ...] |
检查分类为WARN的ID |
severity.BLOCK |
["apiKeys", "privateKeys", "promptInjection", ...] |
检查分类为BLOCK的ID |
卸载
# Remove hook configuration
mcp-yoshi uninstall
# Remove the package
npm uninstall -g mcp-yoshi
与现有工具的比较
| 工具 | 时间 | 范围 |
|---|---|---|
| mcp扫描 | 预运行(静态检查) | 工具定义安全 |
| mcp漂移探测器 | 定期(变化检测) | 工具定义篡改 |
| mcp yoshi | 实时(通信期间) | 传输/接收数据的安全性 |
安全建议
关于 .mcp.json 在外部存储库中
克隆外部存储库时,MCP服务器在其 .mcp.json 应被视为 不可信的.恶意攻击 .mcp.json 已报告自动注册工具的文件。
- 做 不 添加来自外部的服务器
.mcp.json对排外主义者 - 在启用mcp-yoshi检查的情况下使用它们
- 检查可疑工具调用的日志
备注
- 演出:钩子在每次MCP工具调用时运行,会增加轻微的延迟(大约几十毫秒)。如果这是一个问题,请更改
logLevel到"warn"或将受信任的服务器设置为enabled: false - 假阳性:高熵字符串和PII模式可能与合法数据匹配。如果经常出现误报,请禁用相关检查或将其严重性降级为警告
- 探测范围:检测基于正则表达式模式匹配和NFKC规范化。高度模糊的攻击或未知模式可能无法被发现。我们建议将mcp-yoshi与其他安全工具(如mcp-scan)一起使用
- 地毯拉力检测:工具定义哈希值保存在
~/.mcp-yoshi/tool-hashes.json。如果文件损坏,它会自动从空状态重新启动
许可证
麻省理工学院
