
1. 加密软件环境下 AI Agent 读不到明文到底卡在哪公司电脑装了透明加密软件之后磁盘上的文件其实是密文存储的。IDEA、VS Code 这类被加密软件列入白名单的进程在进程内部读文件时会被文件系统驱动自动解密所以你看到的是正常代码而 Claude Code CLI、Python、cmd 这些不在白名单里的进程直接读磁盘拿到的就是密文文件头往往是一串类似%TSD-Header-###%的标记后面跟着乱码。这个现象会直接毁掉 AI 编程助手的体验。Claude Code 内置的 Read 工具读 Java 文件返回乱码内置 Grep 搜代码一条都匹配不到内置 Write / Edit 直接写磁盘还可能破坏加密结构把原本能正常打开的文件写坏。而跑在 IDEA 进程里的插件却一切正常因为它借用了 IDEA 的进程身份天然在白名单内。我试过最直接的思路既然某个进程能读到明文那就让 AI Agent 通过这个进程去读。实测下来Node.js 在很多企业加密软件的白名单里fs.readFileSync读出来就是明文。于是方案就清晰了——写一个 Node.js 的 MCP Server把文件读写能力暴露成工具让 Claude Code 调用它而不是用内置工具。这篇就把这套通用 MCP 工具的开发实践和 TaoToken 配置一次讲透适合被加密软件困住、又想用 AI Agent 干活的开发者。2. 前置准备MCP 协议认知与 TaoToken 统一通道2.1 MCP 是什么为什么它能解决这个问题MCPModel Context Protocol是 Anthropic 发起的开放标准定位类似 LSP语言服务器协议。它让 AI Agent 通过标准接口调用外部工具通信方式常见的是 stdio。链路是这样的Claude Code CLI --(MCP/stdio)-- Node.js MCP Server --(fs.readFileSync)-- 读取明文MCP Server 可以用任何语言写只要遵循协议。Claude Code、Cursor、Windsurf、Cline、Continue.dev、Zed 这些主流 Agent 都支持 MCP。所以这套方案不绑定某一个工具通用性很强。2.2 为什么还要配 TaoTokenMCP 解决的是读文件的问题但 Agent 本身要调用大模型才能干活。如果你在公司网络里直连各家模型 API往往会遇到通道不稳定、Key 分散管理、不同模型要配不同地址的问题。TaoToken 提供统一的 Key 和 API 通道把模型调用收敛到一个入口Claude Code 的settings.json里配一次就行。官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址https://taotoken.net/api需要先去控制台创建 Key再按下面的配置填进去。模型对话、Coding Plan、API Keys、接入文档这些入口在文末 CTA 里都有对应 deep link。2.3 环境依赖Node.js 建议 18 以上npm 随 Node 一起装。确认一下版本node -v npm -v如果node -v输出正常说明 Node.js 已经在白名单里能跑这一步很关键——后面所有读取明文的能力都依赖它。3. 可复制配置MCP Server 骨架 TaoToken settings.json3.1 项目初始化mkdir mcp-read-file-server cd mcp-read-file-server npm init -y npm install modelcontextprotocol/sdk zodmodelcontextprotocol/sdk是官方 SDKzod用来定义工具参数的类型校验。3.2 核心代码骨架MCP Server 的核心逻辑很朴素用 Node.js 的fs模块读写文件通过 MCP 协议暴露成工具。下面是可以直接跑的骨架const fs require(fs); const path require(path); 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 在加密软件白名单中readFileSync 会自动解密返回明文 function readFileContent(filePath) { try { const content fs.readFileSync(filePath, utf-8); return { ok: true, content }; } catch (e) { return { ok: false, error: e.message }; } } 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 }] }; } return { content: [{ type: text, text: 读取失败: result.error }], isError: true }; } ); server.tool( write_file, 写入文件内容落盘时自动加密, { path: z.string(), content: z.string() }, async ({ path: filePath, content }) { try { fs.writeFileSync(filePath, content, utf-8); return { content: [{ type: text, text: 写入成功: filePath }] }; } catch (e) { return { content: [{ type: text, text: 写入失败: e.message }], isError: true }; } } ); server.tool( search_files, 递归搜索目录下匹配的内容, { dir: z.string(), keyword: z.string() }, async ({ dir, keyword }) { const hits []; function walk(current) { for (const name of fs.readdirSync(current)) { const full path.join(current, name); const stat fs.statSync(full); if (stat.isDirectory()) { if (name node_modules || name .git) continue; walk(full); } else { try { const text fs.readFileSync(full, utf-8); if (text.includes(keyword)) hits.push(full); } catch (_) {} } } } walk(dir); return { content: [{ type: text, text: hits.join(\n) || 无匹配 }] }; } ); async function main() { const transport new StdioServerTransport(); await server.connect(transport); } main().catch(console.error);完整版可以再补read_files批量读、edit_file精确替换后写回、create_directory、file_info、check_status这几个工具逻辑都是对fs的封装照着上面的写法扩展即可。3.3 配置 Claude Code 的 MCP项目级配置在项目根目录建.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.js3.4 配置 TaoToken 统一通道Claude Code 的settings.json里把模型通道指向 TaoTokenKey 从控制台创建后填进去{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: 你的_TaoToken_Key } }注意ANTHROPIC_BASE_URL只填到/api不要带多余路径Key 不要提交到 Git 仓库建议用环境变量或本地配置文件管理。3.5 用 CLAUDE.md 引导 Agent 选对工具光配 MCP 还不够Claude Code 默认还是会用内置 Read。在项目根目录建CLAUDE.md# 项目说明 本项目文件受加密软件保护内置工具Read/Write/Edit/Grep只能读到密文。 ## 规则 - 读取文件必须使用 MCP 工具 read_file不要用内置 Read - 写入文件使用 write_file - 编辑文件使用 edit_file - 搜索文件内容使用 search_files这样 Agent 每次进项目都会先读这份规则自动切换到 MCP 工具。4. 验证请求确认 Agent 真的读到了明文4.1 先单独测 MCP Server不经过 Agent直接给 Server 发一条 initialize 请求确认它能起来echo {jsonrpc:2.0,id:1,method:initialize,params:{protocolVersion:2024-11-05,capabilities:{},clientInfo:{name:test,version:1.0}}} | node index.js如果返回里带serverInfo和read-file-server说明 Server 正常。再发一条 tools/list 看工具是否注册成功。4.2 在 Claude Code 里实测cd 你的项目目录 claude然后输入读取 HomeController.java预期行为Claude Code 先读CLAUDE.md知道要用 MCP 工具调用read_file返回内容应该是正常的package com.xxxx.xxxxplatform.controller;开头而不是%TSD-Header-###%乱码。4.3 成功结果长这样{ content: [ { type: text, text: package com.xxxx.xxxxplatform.controller;\n\nimport ... } ] }看到package开头就说明明文读取成功。接着可以让它做点实际工作比如帮我整理 HomeController.java 的接口它会自动走 read_file 读明文再分析。5. 本篇常见错排查5.1 读出来还是乱码先确认 Node.js 是否真的在白名单里。单独跑一段脚本验证node -e console.log(require(fs).readFileSync(某个加密文件.java,utf-8).slice(0,50))如果这里输出乱码说明 Node.js 不在白名单需要找 IT 把 Node.js 加进加密软件的信任进程列表。这是整套方案的前提绕不过去。5.2 Agent 还是用内置 Read大概率是CLAUDE.md没生效或位置不对。确认它在项目根目录且文件名大小写正确。也可以在对话里直接说用 read_file 工具读强制它切换。5.3 MCP Server 启动失败常见原因是args里的路径写错Windows 下反斜杠要转义或改用正斜杠。另外确认npm install已经跑过node_modules存在。用node index.js手动跑一次看有没有报错。5.4 写入后文件打不开内置 Write 直接写磁盘会破坏加密结构所以一定要用 MCP 的write_file。如果已经写坏了从版本控制或备份恢复别继续用内置工具写。5.5 TaoToken 请求报鉴权错误检查ANTHROPIC_AUTH_TOKEN是否填了完整 KeyANTHROPIC_BASE_URL是否为https://taotoken.net/api。Key 失效就去控制台重新生成一个。6. 继续往下走把通道和工具都配齐到这里MCP 工具负责读得到明文TaoToken 负责调得动模型两件事分开配、互不干扰。如果你还在排障阶段建议先把 API Keys 和接入文档过一遍确认 Key 和地址没问题创建和管理 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmcp_read_file接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmcp_read_file想先验证模型通道是否通可以直接在模型对话里发一条测试模型对话https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmcp_read_file如果你打算长期用 Claude Code 做编码和 Agent 任务Coding Plan 会更省心Key 和额度统一管理Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmcp_read_fileClaude Code 专属接入说明在这里Claude Code 接入https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmcp_read_file最后提醒一句这套 MCP 工具不限于 Claude CodeCursor、Windsurf、Cline、Zed 都能用也不限于某一种加密软件只要 Node.js 是白名单进程逻辑就成立。换新电脑时把index.js和package.json拷过去跑一次npm install再按目标 Agent 的方式配 MCP 就行。真正容易踩的坑从来不是代码而是忘了确认 Node.js 到底在不在白名单里——先跑那条node -e验证比什么都省时间。