mcpField
T
tamperlens

tamperlens

本地服务
tamperlens.com安全02 周前更新

关于 tamperlens

tamperlens-mcp 是用于在文档进入 Agent 上下文前检查完整性、涂黑效果和模型可读安全性的 MCP 服务。它将文件字节发送至 Tamperlens API,并返回风险信号而非判定。

主要功能

  1. 01检查编辑痕迹、元数据、签名和隐藏内容
  2. 02确认涂黑是否移除了底层数据
  3. 03将文档与原件进行比较
  4. 04分流文档并估算处理成本
  5. 05检查同一案件文档间的不一致

适用场景

  1. 01在 Agent 读取前筛查文件
  2. 02分享文档前验证涂黑效果
  3. 03将候选文件与留存原件比较
  4. 04依据分流结果安排文档接收

MCP 相关

通过 MCP 工具提供 Tamperlens 文档检查、分流、涂黑验证、比较和案件审查功能。分析由 Tamperlens REST API 执行,而非在本地完成。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"com-tamperlens": {
"command": "npx",
"args": [
"-y",
"tamperlens-mcp"
],
"env": {
"TAMPERLENS_API_KEY": "<TAMPERLENS_API_KEY>",
"TAMPERLENS_BASE_URL": "<TAMPERLENS_BASE_URL>",
"TAMPERLENS_ALLOWED_DIRS": "<TAMPERLENS_ALLOWED_DIRS>"
}
}
}
}
启动命令npx -y tamperlens-mcp
需要配置的环境变量
TAMPERLENS_API_KEY密钥Optional. Without it the anonymous allowance applies (10 documents/hour); a free key from tamperlens.com/account raises it. compare_documents and inspect_case require a key.
TAMPERLENS_BASE_URLOptional. Defaults to the public deployment at https://tamperlens.com.
TAMPERLENS_ALLOWED_DIRSOptional. Colon- or comma-separated absolute directories to confine local file reads to. Unset means any absolute path the process can read (the default). Set it to an intake directory so a path argument cannot reach secrets like ~/.ssh or a stray .env; symlinks out of a root are resolved and refused.

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

安装包
npmtamperlens-mcp1.43.0

工具

4

收录的工具列表 · 更新于 2 周前

参数类型必填说明
urlstring否用于获取文档的 http:/https: URL。获取操作在本机的网络上本地执行(不会从 Tamperlens 服务端获取),且只会发送字节数据。仅接受 http/https;会跟随重定向并重新检查;最大 10 MB,按接收的字节数强制限制。与 path 二选一,不可同时提供。
pathstring否此机器上文档的绝对路径——PDF、Office 文档或图像。最大 10 MB。与 url 二选一,不可同时提供。
issuerstring否可选的签发方 slug(例如 'chase'),用于进一步将文档与该机构真实文档的结构基线进行比较。仅适用于 PDF;Office 文档和图像会忽略此参数。
policyobject否可选。自定义风险阈值和信号规则;响应会增加根据这些规则计算出的 accept/review/reject 判定。报告的其他内容不变。
policy.rejectnumber否
policy.reviewnumber否
policy.rejectOnarray否
policy.reviewOnarray否

详细介绍

tamperlens-mcp

适用于 Tamperlens 的 MCP 服务——在文档进入 Agent 的上下文之前,询问文档是否被编辑过、其中的涂黑是否有效,以及模型能否安全地读取它。

// Claude Desktop / Claude Code — claude_desktop_config.json or .mcp.json
{
  "mcpServers": {
    "tamperlens": {
      "command": "npx",
      "args": ["-y", "tamperlens-mcp"],
      "env": { "TAMPERLENS_API_KEY": "tl_..." }
    }
  }
}

无需密钥即可试用——不提供密钥时,每小时可匿名处理 10 份文档。在 tamperlens.com/account 获取免费密钥后,每月可处理 50 份文档,无需信用卡。

工具

工具可回答的问题
inspect_document文档写入后是否被编辑过?原始保存后是否追加了修订内容?元数据是否相互矛盾?是否存在编辑器指纹、签名覆盖及完整性问题、隐藏文本、宏、图像中的 AI 生成痕迹——以及文件是否包含面向大模型而非读者的文本?
triage_document这份文档值得导入吗?打开它需要多少成本?这项轻量的预检只检查结构、元数据、签名和存在标记——不逐页遍历内容,I/O 开销只是完整检查的一小部分。返回风险等级、测量出的成本(读取字节数、展开字节数、展开比率),以及一个 triage 区块,列出未检查的页面内容类别。预检结果无异常,不代表文档没有问题——用它来决定如何分流,然后使用 inspect_document 进行完整检查。
check_redaction涂黑是否真的移除了内容?用黑框遮住文本能让人看不到它,却不会从文件中移除它。
compare_documents这是否与我已有的原始文件相同,且未经更改?
inspect_case同一案例的这些文档(例如,三个月的对账单、一张工资单及其对账单)是否相互矛盾?每份文档各有一份报告,另会指出它们共有、但独立文档不应共有的内容:同一文件重复出现、同一基础文件的 /ID 或字体子集标签、相同的创建时间(精确到秒)。指出需要复核的不一致之处,但不作结论。需要密钥;包含 N 份文档的案例按 N 份计费。paths 和/或 urls 合计需提供 2 至 10 个。

支持 PDF、Word、Excel 和 PowerPoint(.docx、.xlsx、.pptx 及启用宏的对应格式),以及 JPEG、PNG、WebP、HEIC/HEIF 和 AVIF。

本地路径或 URL

inspect_document、check_redaction 和 compare_documents(作为 originalUrl/candidateUrl)接受本地 path 或 http/https url,二者只能选其一。inspect_case 接受二者的列表(paths、urls)。url 由本服务在你自己的机器上,通过 你自己的网络获取,并且只有字节数据会被转发给 Tamperlens。这就是为什么该选项放在这里,而不是 REST API 中:由服务器获取调用方提供的 URL,会给 API 主机带来 SSRF 风险;而从你的机器获取,只能访问你本来就能访问的内容。获取过程仍受到保护:仅允许 http/https(每次重定向时都会重新检查)、限制重定向次数、设置 30 秒超时 (可通过 TAMPERLENS_FETCH_TIMEOUT_MS 调整),以及同样的 10 MB 上限;上限按实际接收的字节数强制执行,而不是依赖可能不实的 Content-Length。

它还会检查目标 IP,而不只是 URL 协议:如果 url 指向、重定向到,或通过 DNS 解析到环回、链路本地/元数据(169.254.169.254)、私有或其他不可路由地址,都会被拒绝;实际连接的地址也会固定为已验证的地址,因此 DNS 重绑定无法绕过检查,让内部地址通过。每次重定向都会重新执行检查。如果确实需要从内部主机获取内容,可通过 TAMPERLENS_FETCH_ALLOW_IPS(逗号分隔;默认为空,默认情况下无法访问任何内部地址)将特定地址加入允许列表。

path 参数会读取任意本地文件,并将其字节数据发送到 API。 inspect_document、triage_document、check_redaction、 compare_documents 和 inspect_case 会读取提供的任意本地路径 —— 默认情况下没有目录沙箱,也没有扩展名过滤,因为读取磁盘上的文档就是本服务的全部工作,而且无法预先确定输入目录。设置 TAMPERLENS_ALLOWED_DIRS(见下方环境变量表),即可将读取范围限制在输入目录中;指向根目录之外的符号链接会被解析并拒绝。随后,该文件的字节数据会传输到配置的 Tamperlens 部署。攻击者操控的模型因此可能指定某个私密文件(~/.ssh/id_rsa、 ~/.aws/credentials),并导致其字节数据离开机器。仅在使用可信的 Agent 和输入时运行此服务,这与使用任何可读取本地文件系统的工具时应遵循的原则相同。若要设置严格边界,请使用你控制的目录作为输入目录,并且只传入该目录中的路径。

为什么要将它放在 Agent 前面

文档有两类读者,但只有一类能看到页面。提取流水线会读取标题、关键词、XMP 数据包、注释、附件名称等字段 — 这些字段本来就是供软件读取的。写入其中的文本可以是为了让软件遵从,而非阅读。

inspect_document 会在 Agent 读入文件之前报告这些内容,且本服务会始终省略恢复出的载荷。这并非为了方便:Tamperlens 报告最可能的下一位读者,正是原本要读取该文档的同一个模型;因此,若 MCP 服务将攻击者的句子回显到上下文中,就等于完成了它刚检测出的攻击。你会看到字段、位置和线索类别,但看不到句子。

它不会做什么

  • 不进行本地分析。 每个工具都是对运行中部署的 Tamperlens REST API 的轻量封装。这里没有第二套引擎,因此不会与第一套产生偏差。
  • 不做判定。 Tamperlens 会报告风险信号及其背后的证据,绝不会说“此文档是伪造的”。请结合自己的决策逻辑使用这些信号。
  • 文档不会进入模型的上下文。 工具接收调用方文件系统中的路径(或在此处获取的 URL),并在此端读取字节。若在工具调用中使用 Base64,为了将文档字节传给需要这些字节而非模型的服务,就会让数 MB 的文档进入上下文窗口。
  • 保留情况取决于密钥所属的账户。 API 会在内存中解析文件。不设置 TAMPERLENS_API_KEY(匿名额度)时,不会保留任何内容。使用属于已开启历史记录的账户的密钥时(自保留功能上线以来创建的账户默认开启),API 会保留每次调用的简短派生记录(哈希、信号 ID 和分数;绝不保留文件、文件名或文本),只有账户选择加入时才会保留文件本身。工具结果随后会包含 API 返回的 retention 和 tenantMatches 区块。若要不保留任何内容,请在已登录的控制台会话中使用 PATCH /api/v1/retention 将该密钥设为 retention: none(控制台没有针对单个密钥的开关);此服务不会发送每次调用的 X-Tamperlens-Retention 标头。所有字段列于 tamperlens.com/privacy#retention。

配置

变量默认值含义
TAMPERLENS_API_KEY无可选。未设置时适用匿名额度(每小时 10 份文档)。
TAMPERLENS_BASE_URLhttps://tamperlens.com指向你自己的部署。
TAMPERLENS_FETCH_TIMEOUT_MS30000url 获取的总时限,包括正文和所有重定向。
TAMPERLENS_FETCH_ALLOW_IPS无以逗号分隔的精确 IP 地址;即使存在不可路由地址保护,url 获取仍可访问这些地址。适用于有意访问内部文档存储的情况。留空表示无法访问任何内部地址。
TAMPERLENS_ALLOWED_DIRS无以冒号或逗号分隔的绝对目录,将本地文件读取限制在这些目录内。未设置时,进程可读取任意绝对路径。将其设为收件目录,这样 path 参数就无法访问 ~/.ssh 等机密或意外出现的 .env;若符号链接指向根目录之外,解析后会被拒绝。

链接

所有信号的指南 · 此文件可安全地供你的模型读取吗? · API 参考 · 安全与隐私立场

采用 MIT 许可证。问题反馈与源代码: github.com/haruodev/tamperlens-mcp。

评论

支持 Markdown

第一次接触 MCP?

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

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