一、问题背景

公司电脑安装了文件加密软件(天锐绿盾),所有文件在磁盘上都是密文存储。IDEA、VS Code 等被加密软件列为"白名单进程"的应用,在进程内读取文件时会自动解密,看到的是明文。而其他进程直接读取磁盘,拿到的就是密文。
在这里插入图片描述

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

具体表现为:

  • 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-server
cd mcp-read-file-server
npm init -y
npm 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 在加密软件白名单中,自动解密)
function readFileContent(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 Server
echo '{"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-server
npm 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!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐