乐于分享
好东西不私藏

加密软件环境下让 AI Agent 读取文件明文:通用 MCP 工具的开发实践

加密软件环境下让 AI Agent 读取文件明文:通用 MCP 工具的开发实践

一、问题背景

公司电脑安装了文件加密软件(如天锐绿盾、IP-Guard、亿赛通、深信服等),所有文件在磁盘上都是密文存储。IDEA、VS Code 等被加密软件列为”白名单进程”的应用,在进程内读取文件时会自动解密,看到的是明文。而其他进程直接读取磁盘,拿到的就是密文。

这带来一个问题:AI 编程助手(如 Claude Code CLI、Claude Code、Cursor、Windsurf、Cline 等)是独立进程,不在白名单内,读取文件时只能拿到密文。

具体表现为:

  • Claude Code 内置的 Read 工具读取 Java 文件,返回的是乱码(文件头 %TSD-Header-###%
  • 内置的 Grep 搜索代码,匹配不到任何内容
  • 内置的 Write / Edit 直接写磁盘,会破坏加密结构

而 Kilo Code(运行在 IDEA 进程内的插件)却能正常读取明文,因为它借用了 IDEA 的进程身份。

二、问题分析

2.1 加密软件的工作原理

文件加密软件(如天锐绿盾、IP-Guard、亿赛通等)通常采用”透明加密”技术:

  1. 白名单进程
    加密软件维护一个受信任进程列表(如 IDEA、VS Code、Node.js 等)。这些进程读取文件时,加密软件的文件系统驱动会自动解密,返回明文;写入文件时,自动加密后落盘。
  2. 非白名单进程
    不在列表中的进程(如 Python、cmd、Claude Code CLI 等),直接读取磁盘上的原始数据,拿到的是密文。

2.2 关键发现

通过实际测试,我发现了一个关键事实:

进程
读取结果
原因
Python (open())
❌ 密文
Python 不在白名单
cmd type 命令
❌ 密文
cmd 不在白名单
PowerShell Get-Content
❌ 密文
PowerShell 不在白名单
Node.js (fs.readFileSync) ✅ 明文 Node.js 在白名单

Node.js 进程被加密软件信任! 这意味着通过 Node.js 的 fs 模块可以正常读写文件明文。

2.3 解决思路

既然 Node.js 能读到明文,而 Claude Code CLI 支持 MCP(Model Context Protocol)协议来扩展工具,那么:

写一个 Node.js MCP Server,提供文件读写工具,让 Claude Code 调用,就能绕过加密限制读取明文。

三、技术方案

3.1 MCP 协议简介

MCP(Model Context Protocol)是由 Anthropic 发起的开放标准协议,类似于 LSP(语言服务器协议)。它允许 AI Agent 通过标准接口调用外部工具。

AI Agent  --(MCP/stdio)-->  MCP Server  --(任意方式)-->  执行操作

MCP Server 可以用任何语言实现,只要遵循协议规范。Claude Code、Cursor、Windsurf、Cline 等主流 AI Agent 都支持 MCP。

3.2 架构设计

Claude Code CLI  --(MCP/stdio)-->  Node.js MCP Server  --(fs.readFileSync)-->  读取明文
  • MCP Server
    用 Node.js 实现,通过 @modelcontextprotocol/sdk 库注册工具
  • 文件操作
    直接使用 Node.js 的 fs 模块,加密软件自动解密/加密
  • 通信方式
    stdio(标准输入输出),Claude Code 自动管理子进程生命周期

3.3 工具设计

替代 Claude Code 内置工具,提供以下 MCP 工具:

MCP 工具
替代内置
功能
read_file
Read
读取单个文件明文
read_files
多次 Read
批量读取多个文件
write_file
Write
写入文件(自动加密落盘)
edit_file
Edit/MultiEdit
精确字符串/正则替换后写回
search_files
Grep
递归搜索文件内容
create_directory
递归创建目录
file_info
查询文件/目录信息
check_status
检查工具运行状态

四、开发实现

4.1 项目初始化

mkdir mcp-read-file-servercd mcp-read-file-servernpm init -ynpm install @modelcontextprotocol/sdk zod

4.2 核心代码

MCP Server 的核心逻辑很简单——用 Node.js fs 模块读写文件,通过 MCP 协议暴露为工具:

const fs require("fs");const { McpServer } = require("@modelcontextprotocol/sdk/server/mcp.js");const { StdioServerTransport } = require("@modelcontextprotocol/sdk/server/stdio.js");const { z } = require("zod");const server new McpServer({ name"read-file-server", version"1.0.0" });// 读取文件明文(Node.js 在加密软件白名单中,自动解密)functionreadFileContent(filePath{  try {    const content = fs.readFileSync(filePath, "utf-8");    return { ok: true, content };  } catch(e) {    return { ok: false, error: e.message };  }}// 注册 read_file 工具server.tool(  "read_file",  "读取指定路径的文件内容(明文)",  { path: z.string().describe("文件路径") },  async ({ path: filePath }) => {    const result readFileContent(filePath);    if(result.ok) {      return { content: [{ type: "text", text: result.content }] };    } else {      return { content: [{ type: "text", text: "❌ " + result.error }], isError: true };    }  });// 启动服务async function main() {  const transport new StdioServerTransport();  await server.connect(transport);}main().catch(console.error);

完整代码包含 8 个工具(read_file、read_files、write_file、edit_file、search_files、create_directory、file_info、check_status),详见项目仓库。

4.3 配置 Claude Code

项目级配置

在项目根目录创建 .mcp.json

{  "mcpServers": {    "read-file-server": {      "command": "node",      "args": ["D:/AiJiamiToolsPlugins/mcp-read-file-server/index.js"]    }  }}

全局配置

claude mcp add read-file-server -s user -- node "D:/AiJiamiToolsPlugins/mcp-read-file-server/index.js"

自动引导(CLAUDE.md)

为了让 Claude Code 自动选择 MCP 工具而非内置工具,在项目根目录创建 CLAUDE.md

# 项目说明本项目文件受加密软件保护,内置工具(Read/Write/Edit/Grep)只能读到密文。## 规则- 读取文件时,必须使用 MCP 工具 `read_file`,不要使用内置 Read- 写入文件使用 `write_file`- 编辑文件使用 `edit_file`- 搜索文件内容使用 `search_files`

配置后,直接说”读取 HomeController.java”,Claude Code 会自动调用 read_file 读取明文。

五、使用效果

5.1 测试验证

通过 MCP 协议调用 read_file 工具读取加密文件:

# 测试 MCP Serverecho '{"jsonrpc":"2.0","id":1,"method":"initialize",...}' | node index.js

返回结果:

{  "content": [{    "type""text",    "text""package com.xxxx.xxxxplatform.controller;\n\nimport ..."  }]}

✅ 成功读取到明文内容(package com.xxxx.xxxxplatform.controller;)。

5.2 实际使用

cd 项目目录claude

输入:

帮我整理 HomeController.java 的接口

Claude Code 自动:

  1. 读取 CLAUDE.md,知道要用 MCP 工具
  2. 调用 read_file(而非内置 Read)读取明文
  3. 分析内容并输出整理结果

六、通用性

这个 MCP 工具不限于 Claude Code,任何支持 MCP 协议的 AI Agent 都可以使用

Agent
支持情况
Claude Code CLI
Cursor
Windsurf
Cline / Roo Code
Continue.dev
Zed

也不限于天锐绿盾,任何加密软件场景下,只要 Node.js 是白名单进程,就能使用本工具

七、在新电脑上部署

只需拷贝 2 个文件:

  • index.js
    (源代码)
  • package.json
    (依赖声明)

新电脑上:

cd mcp-read-file-servernpm install

然后按目标 Agent 的方式配置 MCP 即可。

八、总结

项目
说明
问题
加密软件环境下,AI Agent 内置工具读到密文
发现
Node.js 是加密软件白名单进程,可读明文
方案
Node.js MCP Server,替代内置文件工具
通用性
适用于任何支持 MCP 的 Agent + 任何加密软件
前提
Node.js 需被加密软件列为白名单进程

项目地址

GitHub: https://github.com/hebulin/mcp-read-file-server

欢迎 Star 和 PR!