关于 agent-tool
agent-tool 是面向 AI 编码 Agent 的 MCP 工具服务,提供感知编码和缩进的文件读写、编辑工具,以及 SSH、SFTP、数据库、静态分析等约 40 个工具。它适合需要保持项目约定并控制上下文体量的开发场景。
主要功能
- 01感知编码与缩进的文件读写编辑
- 02保留 EUC-KR、Shift-JIS、GB18030 编码
- 03core 等精简配置档,减少工具 schema 体量
- 04SSH、SFTP 远程执行与文件传输
- 05静态二进制分析与 DAP 调试
- 06Windows GUI 自动化与进程内存工具
适用场景
- 01在使用 Tab 缩进或旧编码的项目中修改代码
- 02通过 SSH 在远程主机执行命令并传输文件
- 03对二进制文件进行反汇编和函数分析
MCP 相关
agent-tool 本身是 MCP 服务,向 Claude Code、Codex CLI、Cursor 等 MCP 客户端暴露文件、进程、网络、数据库和分析等工具。客户端可通过 toolbox 网关按需加载具体操作的字段。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
agent-tool
面向 AI 编码 Agent 的 MCP(Model Context Protocol)工具服务。
为什么?
AI 编码 Agent(Claude Code、Cursor、Codex 等)中的内置工具存在一些已知限制:
- 制表符缩进会出错:大模型会输出空格,但你的项目使用制表符。内置的 Edit 工具会原样写入空格,破坏项目的缩进风格。
- 编码损坏:编辑 EUC-KR、Shift-JIS 或 GB18030 文件时,文件会在不提示的情况下转换为 UTF-8,导致旧项目出错。
- 独立工具过多:让 Agent 查找、安装和配置 Redis CLI、MySQL 客户端、SSH 客户端等工具,既繁琐又容易出错。agent-tool 将 40 种工具打包到一个二进制文件中,并通过精简配置按需提供这些工具。
- 缺少逆向工程支持:内置工具无法反汇编二进制文件、检查 PE/ELF 标头、查找函数边界或搜索交叉引用。agent-tool 提供静态二进制分析(反汇编、使用 PDB/DWARF 类型反编译为 C、交叉引用、函数检测)、DAP 调试器和 CheatEngine 风格的内存工具,让你的 Agent 具备完整的逆向工程能力。
- 网络审查:在某些国家,政府级网络过滤会导致普通的
curl/wget请求失效。agent-tool 默认使用 ECH(加密客户端问候)和 DoH(基于 HTTPS 的 DNS)来绕过这些限制。
agent-tool 通过面向 Agent 的工具解决这些问题:既能保留项目约定,又能控制模型上下文的大小。
支持的 Agent
Claude Code、Codex CLI、Cursor、Windsurf、Cline、Gemini CLI,以及任何兼容 MCP 的 Agent。
默认高效利用大模型上下文
默认的 core 配置仅提供 11 个架构(包括 toolbox),而非全部 40 个。在协议层面的测量中,这将序列化后的工具列表从约 74 KB(full)缩减至 15 KB。若要尽可能减少稳定状态下的上下文占用,请从 --profile core-lite 开始;其 5 个架构约为 6.4 KB,仅提供 read、write、edit、grep 和 toolbox。使用 toolbox(operation="describe", tool="ssh", compact=true, tool_operation="execute") 可仅加载某个操作的字段和必填列表,然后通过 toolbox(operation="call", tool="ssh", arguments={...}) 调用该操作。网关不依赖动态工具列表刷新,因此可与 Codex 等使用固定绑定的客户端配合使用。Describe 会返回与工具及版本绑定的 schema_handle;如果架构仍为最新版本,后续 describe 携带此句柄时会返回简短的“未更改”确认。常用的精简操作包括 SSH 执行、MySQL 查询、文件复制、Windows 截图/剪贴板图像以及静态分析操作。你也可以从 --profile core-lite|coding|remote|analysis|full 开始。
可能较大的文本响应默认限制为 32K 个字符,硬性上限为 128K。截断情况始终会明确显示,支持分页的工具会返回 next_offset 或 next_cursor。本地相对路径会先相对于显式指定的工作区解析,然后再相对于 MCP 客户端根目录解析。
功能
| Tool | 描述 | 状态 |
|---|---|---|
| Edit | 字符串替换,支持智能缩进和保留编码(支持 dry_run) | ✅ |
| Read | 感知编码、带行号的读取。默认读取 400 行/32K 个字符,报告截断情况和精确的 next_offset,安全处理超长行,可选 SHA-256。支持灵活的偏移量和 MCP ImageContent | ✅ |
| Write | 感知编码的文件创建/覆盖 | ✅ |
| Grep | 感知编码的正则搜索,输出预算为 32K,按文件分组的紧凑输出,相对路径,过滤 .gitignore/.ignore/生成目录,检测二进制文件,支持输出模式/上下文,以及不会重复匹配项的确定性 next_cursor 分页 | ✅ |
| Glob | 排序、有界的文件匹配,支持 **、相对路径、过滤 .gitignore/.ignore/生成目录、明确的 has_more,以及确定性游标分页 | ✅ |
| ListDir | 有界/可分页的目录列表。支持 max_entries + 续接游标、目录/文件筛选、条目名称 glob 筛选、仅计数模式、平铺/树形输出 | ✅ |
| Diff | 比较两个文件并输出统一差异(感知编码)。如果文件仅换行符不同或仅末尾换行符不同,会说明这一点,而不是返回空差异 | ✅ |
| Patch | 将统一差异补丁应用到文件(支持 dry_run)。每行保留自己的行结束符,因此混合 CRLF/LF 的文件不会被重写 | ✅ |
| Checksum | 计算文件哈希(md5、sha1、sha256) | ✅ |
| FileInfo | 文件元数据(大小、编码、混合行结束符计数、缩进、行数) | ✅ |
| ConvertEncoding | 转换文件编码(EUC-KR ↔ UTF-8、添加/移除 BOM 等) | ✅ |
| Delete | 安全删除文件/目录,包括紧凑批量删除最多 100 个 file_paths。目录需要 recursive=true;支持受保护根目录、阻止符号链接、限制错误数量,以及 dry_run 预览 | ✅ |
| Rename | 原子重命名或移动文件/目录(dry_run) | ✅ |
| ProcList | 列出正在运行的进程 — PID、名称、命令行、内存。自动屏蔽敏感参数。可按名称或端口筛选 | ✅ |
| ProcKill | 按 PID 或端口终止、挂起或恢复进程。支持进程树终止、信号选择(kill/term/hup/int/stop/cont)、僵尸进程处理(Linux)、dry_run | ✅ |
| ProcExec | 以新进程执行命令。支持前台/后台/挂起启动、超时/环境变量,以及安全压缩重复诊断信息并提供限时原始输出检索 | ✅ |
| SSH | SSH 执行,捕获输出头尾各 32K、提供原始字节数、正确处理非零退出错误,并支持后台作业(start/status/tail/cancel)。支持感知认证的连接池、主机密钥验证、ProxyJump、IPv6 | ✅ |
| SSHKey | 在 PuTTY PPK v3、传统 PEM、现代 OpenSSH 和 PKCS#8 之间转换本地私钥。自动检测输入格式,支持加密的 PPK/OpenSSH 输出,以 0600 权限写入,且绝不返回密钥材料 | ✅ |
| SFTP | 通过 SSH 传输文件并管理远程文件系统。支持 upload、download、ls、stat、mkdir、rm、chmod、rename。复用 SSH 会话池。每次传输最多 2 GB | ✅ |
| Bash | 持久化 Shell 会话,保留工作目录/环境变量,安全压缩重复诊断信息并提供限时原始输出检索。会话池(最多 5 个,空闲超时 30 分钟)。Unix:bash/sh;Windows:PowerShell/git-bash/cmd | ✅ |
| Download | 从 URL 下载文件到磁盘。默认使用 ECH + DoH。防止 SSRF。支持 HTTP/SOCKS5 代理。原子写入。最多 2 GB | ✅ |
| HTTPReq | 使用任意方法执行 HTTP 请求(GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS)。支持使用自定义标头、正文、代理进行 API 测试。防止 SSRF | ✅ |
| Query | 根据点号表示法路径(例如 dependencies.react、services.web.ports[0]、users[*].email),从 JSON、YAML 或 TOML 文件中读取一个值;根据扩展名或 format 确定格式。减少大型配置文件的令牌消耗 | ✅ |
| Copy | 复制文件/目录,支持原子写入并保留权限。递归复制目录。Windows 锁定文件回退处理(将正在运行的 exe/DLL 重命名至旁侧)。dry_run 预览 | ✅ |
| Mkdir | 创建目录,可选权限模式(八进制,例如 0755)。默认递归创建(mkdir -p)。dry_run 预览 | ✅ |
| MultiRead | 一次读取最多 50 个文件,共享 32K 调用预算,默认每个文件最多读取 200 行,安全处理超长行,并提供每个文件/整体的续读元数据。哈希需选择启用 | ✅ |
| RegexReplace | 在文件/目录中进行正则查找与替换。保留编码和行结束符,支持捕获组($1、$2)。跳过二进制文件。dry_run 预览 | ✅ |
| NetCheck | 网络诊断:external_ip(公共 IPv4/IPv6,支持服务提供商回退)、dns(通过 DoH 或系统解析器查询 A/AAAA/MX/CNAME/TXT/NS/SOA)、tls(证书主题、颁发者、到期时间、SAN、TLS 版本、密码套件)、port(TCP OPEN/CLOSED 及响应时间) | ✅ |
| MySQL | 在 MySQL/MariaDB 上执行 SQL 查询。SELECT 结果以表格形式显示,可配置行/列/单元格/总输出限制;DML 显示受影响的行数。分页请使用 SQL LIMIT/OFFSET | ✅ |
| Redis | 执行 Redis 命令并按类型格式化输出。支持 TLS。阻止危险命令(FLUSHALL、SHUTDOWN 等) | ✅ |
| SLOC | 按语言统计源代码行数。支持检测 70 多种语言、按文件/语言分类统计、空行统计、max_depth 控制 | ✅ |
| Debug | 通过 DAP(Debug Adapter Protocol)进行交互式调试。全面支持 DAP,变量、补全、模块和已加载源文件均提供有界值/输出和分页。已使用 dlv(Go)、debugpy(Python)、codelldb(C/C++/Rust)测试。可与任何兼容 DAP 的适配器配合使用。支持 Stdio 和 TCP 模式。注意:vsdbg(Microsoft)需要 VS Code 许可证,不能单独使用 — 可使用 codelldb 或 netcoredbg 作为开源替代方案 | ✅ |
| Analyze | 静态二进制分析与逆向工程。将 x86/x64 PE/ELF 函数反编译为 C(Gosleigh,是 Ghidra 反编译器核心的 Go 移植版,在具有时间/内存限制的隔离工作进程中运行);自动读取匹配的 PE PDB(内置读取器,无需 DIA SDK;pdb_force 可加载 GUID 不匹配的 PDB)或嵌入的 DWARF,以便在反编译中获取函数名称、原型、struct/enum 类型、全局数据、位域和局部变量(名称与类型)(函数中提及的 struct/enum 会在函数之后打印,并附带成员偏移量和 enum 值;type_info 可按名称打印其他类型信息),并在 disassemble、call_graph 和 function_at 中获取名称和精确函数边界;对 MSVC 修饰名称进行反修饰;Go 二进制文件使用 Go ABI;像 Ghidra 一样检测不返回的函数;agent-tool decompile-all 将整个二进制文件导出为 JSONL 语料库;x86/x64/ARM/ARM64 反汇编;语义 x86/x64 指令搜索(助记符、寄存器、立即数、内存位移),支持全面恢复可执行偏移、CFG 置信度、函数名称、目标/结果筛选,以及并行不动点寄存器/栈/只读常量追踪,涵盖 ABI 感知的调用和尾调用(对 stdcall 参数清理建模,并从导入的 DLL 中读取 x86 导入信息);PE/ELF/Mach-O 解析,支持有界、可分页的 PE 导入输出;针对地址、包含文本的字符串或 struct 字段(Class::member,需通过反编译确认)执行 xref,涵盖代码、立即数和数据指针(vtable 槽),每个引用均标注其所属函数;函数发现/调用图(无 PDB 时的函数边界与匹配的 PDB 边界相比,大型 x64 映像中 100% 的地址、x86 中 99.5% 的地址一致;支持通过 thunk 和尾跳转查找调用方,以及 vtable 引用)、指针/RTTI/vtable/struct 分析、imphash、Rich 标头、DWARF、字符串、十六进制转储、模式搜索、熵、overlay 检测和二进制差异。无全局文件大小限制 | ✅ |
| Memtool | CheatEngine 风格的进程内存工具 — 搜索/筛选/读取/写入内存值、read_chain(解析 base+offset 指针链,一次调用批量处理)、实时反汇编(x86/x64/ARM/ARM64)、撤销、struct 模式搜索、指针扫描、内存差异。大型扫描使用磁盘支持的快照。会话管理支持空闲超时。适用于 Windows(ReadProcessMemory)和 Linux(/proc/pid/mem)。Windows 在提升权限时会自动启用 SeDebugPrivilege;可选择启用 force_dacl,绕过同一用户进程自行强化的 DACL(之后恢复原设置) | ✅ |
| Wintool | Windows GUI 自动化 — 查找/枚举窗口和子控件、截取屏幕截图(通过 PrintWindow 获取 ImageContent PNG)、读取剪贴板图像、读取/设置文本、点击、输入、发送原始消息、显示/隐藏/最小化/最大化、移动/调整大小、关闭、聚焦。截图/剪贴板默认返回 ImageContent(可通过 save_path 选项输出到文件)。让 AI Agent 能够“查看”并与 GUI 应用交互。仅适用于 Windows | ✅ |
| CodeGraph | 完全内嵌的语义代码图谱:Go 标准库 AST,加上用于 C/C++、Python、C#、Rust 和 Java 的延迟压缩 tree-sitter WASM。支持声明/定义身份、返回链和泛型/别名传播、传递包含、经校准的重载证据、虚拟/接口分派、宏/回调边、构建条件来源信息,以及多根工作区。无需编译器、语言服务器、外部二进制文件、大模型调用或令牌消耗 | ✅ |
| SetConfig | 更改运行时设置(编码、文件大小限制、符号链接、工作区等) | ✅ |
| Help | 内置 Agent 使用指南(编码、缩进、故障排除) | ✅ |
主要改进
智能缩进
大模型通常输出空格,但许多项目使用制表符。AgentTool 会自动转换缩进,以匹配文件现有的风格。
- 读取
.editorconfig中的indent_style和indent_size - 根据内容检测进行回退(前 100 行)
- 保护旧文件:如果实际内容与
.editorconfig矛盾,则不会转换
保留编码
编辑会保留原始文件编码,而不是强制使用 UTF-8。
- 检测优先级:BOM →
.editorconfig字符集 → 无 BOM 的 UTF-16 → 有效 UTF-8 → chardet 自动检测 → 回退编码 - 支持:UTF-8、UTF-8 BOM、EUC-KR、Shift-JIS、ISO-8859-1、UTF-16(LE/BE,带或不带 BOM)等
- ASCII 不会触发误报:会直接验证有效的 UTF-8,因此纯 ASCII 文件不会触发低置信度警告
- 换行符:可检测 LF、CRLF、CR 和混合换行符的文件。无论文件使用 CRLF 还是 LF(包括混合使用两者的文件),
edit都能匹配多行old_string;由edit/regexreplace插入的文本会遵循插入位置所在区域的换行符风格,因此文件其余部分的字节保持不变
防止目录列表占用过多令牌
listdir 默认每页返回 500 个条目;有更多条目时会返回 next_cursor。可使用 directories_only、files_only、name_pattern(例如 A*)或 include 中的多个 OR 模式来缩小结果范围。只需要匹配的文件/目录数量时,请使用 counts_only=true。
释放闲置内存
在没有工具调用 30 分钟后,服务会将堆内存归还给操作系统。stdio MCP 服务无法区分已被放弃的客户端和暂时安静的客户端——启动它的进程可能仍在运行,虽然已经用完它,却依然保持管道打开,因此永远不会收到 EOF;根据这种猜测退出,会导致只是暂停的会话中断。释放内存是更安全的折中:曾读取 50MB 文件的实例会恢复到约 20MB 的基线,而不是在机器后续运行期间一直占用 200MB。已打开的 shell 和 ssh 会话不会受影响,客户端可观察到的行为也不会改变。
快速开始
- 从 Releases 下载适用于你操作系统的二进制文件
- 运行
agent-tool install(针对特定 Agent 时,运行agent-tool install claude) - 重启 IDE / Agent
- 完成——精简的核心工具立即可用;
toolbox可按需介绍并调用所有其他工具
或者直接让你的 AI Agent 帮你完成:
“从 https://github.com/knewstimek/agent-tool/releases/latest 下载 agent-tool 并运行
agent-tool install”
任何功能完善的 AI 编码 Agent(Claude Code、Codex 等)都能自动完成下载 → 安装 → 重启的完整流程。
推荐:告知 Agent 优先使用 agent-tool
安装后,Agent 可以使用 agent-tool,但可能仍会默认使用内置工具(Read、Edit 等)。若要确保 Agent 优先使用 agent-tool 具备编码感知和智能缩进的工具,请添加以下其中一条指令。
代码导航提示:对于大型项目,将此内容添加到 CLAUDE.md / AGENTS.md,以启用基于 AST 的代码导航:
At the start of a session, run codegraph(op="index", path="<project_root>") to build a code index.
For several repositories sharing one graph, use codegraph(op="index", path="<db_root>", roots=["<source_root_1>", "<source_root_2>"]). Source-root provenance prevents unrelated projects with the same symbol names from contaminating candidates while explicit/transitive includes can still cross roots.
Then use codegraph for structural queries (find, callers, callees, methods, inherits) instead of grep.
选择 严格或宽松:
| 模式 | 适用场景 | 指令 |
|---|---|---|
| 严格 | 包含非 UTF-8 文件或混合缩进的项目 | ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools. agent-tool preserves file encoding and respects .editorconfig indentation settings. |
| 宽松 | 一般项目 | Prefer agent-tool MCP tools (mcp__agent-tool__*) over built-in file tools when available. |
添加位置:
Claude Code — CLAUDE.md(单个项目)或全局指令
单个项目 — 添加到项目的 CLAUDE.md:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.
全局(所有项目)— 添加到 ~/.claude/CLAUDE.md:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.
强制执行 — 在权限级别通过 ~/.claude/settings.json 禁用内置文件工具:
{
"permissions": {
"deny": ["Read", "Edit", "MultiEdit", "Write", "Glob", "Grep"]
}
}
这样会使 Claude Code 的内置文件工具不可用,从而强制 Agent 使用 agent-tool。如果希望严格执行而不依赖提示词指令,建议采用此方式。
Codex CLI — model_instructions.md(全局)
- 添加到
~/.codex/config.toml(顶层,而非[mcp_servers.*]内部):
model_instructions_file = "~/.codex/model_instructions.md"
- 创建
~/.codex/model_instructions.md:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.
- 重启 Codex。
单个项目 — 改为添加到项目的 AGENTS.md。
Cursor / Windsurf / Cline — .cursorrules 或 AGENTS.md
添加到项目的 .cursorrules、.windsurfrules 或 AGENTS.md:
ALWAYS use agent-tool MCP tools (mcp__agent-tool__*) instead of built-in file tools.
安装
自动安装(推荐)
# Register with all detected agents (full auto-approve — all tools)
agent-tool install
# Safe mode — only auto-approve local file tools (no SSH, HTTP, DB, shell)
agent-tool install --safe-approve
# No auto-approve — manual approval required for every tool call
agent-tool install --no-auto-approve
# Register with a specific agent
agent-tool install claude
agent-tool install claude --safe-approve
# Uninstall (removes agent-tool entry only, preserves other settings)
agent-tool uninstall # from all agents
agent-tool uninstall claude # from specific agent
安装权限级别:
| 级别 | 标志 | 自动批准的工具 |
|---|---|---|
| 完全(默认) | (无) | 所有工具(mcp__agent-tool__* 通配符) |
| 安全 | --safe-approve | 29 个仅限本地的工具(读取、编辑、写入、grep、glob 等)——不包括 SSH、HTTP、DB、bash、进程控制 |
| 无 | --no-auto-approve | 无工具——每次调用都需要手动批准 |
批准级别与架构配置无关:安装时可以批准整个命名空间,
而服务仍以节省令牌的 core 配置启动。
toolbox 不会由 --safe-approve 自动批准,这是有意为之,
因为它的 operation=call 网关可以调用网络、shell、数据库和进程控制
工具。安全模式用户应逐一审核每次 toolbox 批准;除非有意信任整个
AgentTool 命名空间,否则应避免授予永久允许规则。
手动设置
Claude Code / Cursor / Cline(settings.json 或 mcp.json):
{
"mcpServers": {
"agent-tool": {
"command": "/path/to/agent-tool"
}
}
}
Codex CLI(~/.codex/config.toml):
[mcp_servers.agent-tool]
command = "/path/to/agent-tool"
选项
# Select the initial schema profile (default: core)
agent-tool --profile core-lite
# Set fallback encoding for projects with non-UTF-8 files
agent-tool --fallback-encoding EUC-KR
配置是预设方案:core-lite(读取/写入/编辑/grep/toolbox)、core(11 个
架构)、coding(在 core 基础上扩展更多文件/构建/shell 工具)、remote、analysis
和 full。运行时,优先使用与客户端无关的 toolbox 网关:operation=describe 会返回一个工具的架构
(compact=true 加上 tool_operation 可将其限制为单个操作),而
operation=call 则通过稳定的 toolbox 绑定调用该工具。重新发送返回的
schema_handle,即可避免再次收到未变化的架构。当命令
诊断信息被压缩后,operation=output 可通过报告的 ID 获取有界的原始输出,有效期为 30 分钟;需要分页时会报告 next_offset。enable、
disable 和 profile 仍可供支持
tools/list_changed 的客户端使用;固定绑定的客户端则始终可以继续使用网关。
环境变量
设置 AGENT_TOOL_FALLBACK_ENCODING 和/或 AGENT_TOOL_PROFILE,以避免反复传入 CLI 标志:
# Windows (no admin required)
setx AGENT_TOOL_FALLBACK_ENCODING EUC-KR
setx AGENT_TOOL_PROFILE coding
# Linux / macOS (add to ~/.bashrc or ~/.zshrc)
export AGENT_TOOL_FALLBACK_ENCODING=EUC-KR
export AGENT_TOOL_PROFILE=coding
优先级:CLI 标志 > 环境变量 > 默认值(UTF-8)。
本地 SSH/SFTP 连接配置
SSH 和 SFTP 接受 connection_profile 或会话本地的 connection_id,
因此无需重复填写主机、用户、密钥和跳转主机字段。配置文件从 OS 用户配置目录下的 agent-tool/connections.json 读取;使用 AGENT_TOOL_CONNECTION_PROFILE_FILE 可覆盖其位置。如果将此文件放在工作区内,请将其保留在本地并明确加入忽略列表。
{
"connections": {
"dev": {
"host": "192.0.2.10",
"user": "builder",
"key_file": "/local/path/to/id_ed25519",
"host_key_check": "strict",
"trusted": true
}
}
}
首次调用会返回不透明的 connection_id,30 分钟内可供这两种工具重复使用。本地配置默认设为 trusted:true;将其设为 trusted:false,即可在每次调用时显示私有地址警告,而不是每个连接池连接只显示一次。这只影响显示;SSRF 拦截和云元数据保护保持不变。SSH 还支持 quiet、echo_command 和 result_only;最后一个选项会返回以 stdout、stderr 和 exit_code 为核心的精简 JSON。SFTP 支持 quiet、result_only 和 upload_many(最多 100 个文件)。
对于 Windows PowerShell,请使用 powershell_script 而不是 command 传入脚本文本。
SSH 会通过一条简短 PowerShell 命令的标准输入上传唯一的 UTF-8 临时 .ps1 文件,
使用简短的 PowerShell 启动器执行其内容,并在成功或失败后将其删除。使用 -EncodedCommand(或 -enc、-ec、-e)的独立
powershell[.exe] / pwsh[.exe] 命令会在达到 8,000 个 UTF-16 代码单元时自动暂存。安全配置文件、交互、线程单元和执行策略选项会保留;不支持的选项或 shell 后缀需要明确传入 powershell_script。脚本大小上限为 4 MiB。
不要求使用 SFTP,包括连接旧版 Windows SSH 服务器时。
{"operation":"execute","connection_profile":"dev","powershell_script":"Write-Output 'hello'","result_only":true}
准备和前台执行共用 timeout_sec。
后台脚本使用相同的上传和清理流程,然后提供 job_id,用于查询状态、查看尾部输出或取消。
远程启动器会尝试在 finally 中清理;确认执行完成后,也会通过 SSH 进行有时限的清理。取消或连接中断并不能证明远程执行已终止,因此工具会将删除工作留给远程启动器;如果无法确认执行完成或清理情况,则会报告 cleanup_warning。此警告与脚本的退出代码和捕获的输出分开。
本地 SSH 私钥转换
ssh_key 可转换私钥文件,过程中不会通过网络发送其内容,也不会在响应中返回密钥材料。输入格式会自动检测为 PPK、PEM、PKCS#8 或 OpenSSH。输出格式可以是 ppk、pem、pkcs8 或 openssh。
{
"operation": "convert",
"input_path": "server.pem",
"output_path": "server.ppk",
"output_format": "ppk",
"input_passphrase": "",
"output_passphrase": "",
"overwrite": false
}
PPK 输出使用第 3 版。带密码短语保护的 PPK 输出使用 Argon2id、
AES-256-CBC 和 HMAC-SHA-256;受保护的 OpenSSH 输出使用 OpenSSH 的现代
加密格式。传统 PEM 和 PKCS#8 输出不会加密;如需加密输出,请使用 openssh 或 ppk。新文件的权限模式为 0600;除非设置 overwrite=true,否则不会替换现有文件。
运行时配置
Agent 可以通过 set_config 在运行时更改设置,无需重启:
| 参数 | 描述 | 默认值 |
|---|---|---|
fallback_encoding | 自动检测失败时使用的回退编码 | UTF-8 |
encoding_warnings | 显示编码检测警告 | true |
max_file_size_mb | 读取/编辑/grep 的最大文件大小(MB) | 100 |
allow_symlinks | 允许从 tar 归档中提取符号链接 | false |
workspace | 显式指定本地工作区根目录。否则依次使用第一个 MCP 客户端根目录和 cwd | (MCP root/cwd) |
allow_http_private | 允许 webfetch/download/httpreq 访问私有 IP | false |
allow_mysql_private | 允许 mysql 工具访问私有 IP | true |
allow_redis_private | 允许 redis 工具访问私有 IP | true |
allow_ssh_private | 允许 ssh/sftp 工具访问私有 IP | true |
enable_doh | 全局启用 HTTPS 上的 DNS(webfetch/download/httpreq/dnslookup) | true |
enable_ech | 全局启用加密客户端问候(webfetch/download/httpreq) | true |
构建
go build -trimpath -ldflags="-s -w" -o agent-tool .
交叉编译:
GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o agent-tool .
GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="-s -w" -o agent-tool .
GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o agent-tool.exe .
发布
受保护的 GitHub 工作流会运行测试、构建所有声明的资产、创建 MCPB 和校验和,并验证上传的字节。从干净且已推送的 master 分支开始,触发仅构建的试运行:
.\scripts\release.ps1
试运行成功后,发布 main.go 中声明的版本:
.\scripts\release.ps1 -Publish
该工作流要求在 docs/releases/vVERSION.md 中提供已跟踪的说明。发布操作会创建附注标签和 GitHub Release,然后使用已发布 MCPB 的哈希更新 server.json。当 RepoPlane 将此仓库用作工作区时,也可以通过仓库本地的 catalog/ 清单发现相同的试运行、发布和状态操作。
故障排除
文本乱码(编码问题)
如果韩文、日文或其他非 ASCII 文本显示为乱码:
选项 1:将 charset 添加到 .editorconfig:
[*]
charset = euc-kr
选项 2:设置环境变量(持久生效):
setx AGENT_TOOL_FALLBACK_ENCODING EUC-KR # Windows
export AGENT_TOOL_FALLBACK_ENCODING=EUC-KR # Linux
选项 3:CLI 标志(仅当前会话生效):
agent-tool --fallback-encoding EUC-KR
面向 Agent 的内置帮助
agent-tool 包含一个 agent_tool_help 工具,Agent 可调用它获取使用指南。当 Agent 遇到编码警告或文本乱码时,可以调用:
{ "tool": "agent_tool_help", "arguments": { "topic": "encoding" } }
可用主题:overview、encoding、indentation、tools、troubleshooting
安全
agent-tool 提供强大的系统访问能力(SSH、MySQL、Redis、文件操作、HTTP 请求)。 与 AI 编码 Agent 搭配使用时,请注意提示词注入风险:
- SSRF 防护:无论设置如何,云元数据 IP(169.254.x.x、fe80::/10)始终会被屏蔽。可通过
set_config按协议配置私有 IP 访问权限(allow_http_private、allow_mysql_private、allow_redis_private、allow_ssh_private) - DLP(数据丢失防护):所有出站 HTTP 请求正文都会扫描敏感数据模式(PEM 私钥、AWS 访问密钥、GitHub/GitLab 令牌、Slack 令牌、.env 文件转储),并会在传输前拦截
- 提示词注入警告:允许的私有 IP 连接会显示简短警告;受信任的本地 SSH/SFTP 配置文件则会在每个连接池连接上显示一次
- Zip Slip 防护:会拦截包含
../路径遍历的归档条目(zip 和 tar 均适用) - Zip Bomb 防护:单个文件大小上限为 1GB,总解压大小上限为 5GB
- 符号链接:默认跳过。可通过
set_config allow_symlinks=true启用(仅限 tar;zip 符号链接始终跳过)。即使启用,也会拦截指向输出目录以外的符号链接 - 文件大小限制:可配置的最大文件大小(默认 100MB)可防止大型文件导致 OOM。可通过
set_config max_file_size_mb=N调整 - 编码安全:chardet 使用 64KB 样本(而非整个文件)以提高内存效率
为确保最高安全性,请在批准 AI Agent 的工具调用前进行审核,尤其是 SSH 命令、发往外部 URL 的 HTTP 请求和数据库查询。
技术栈
- 语言:Go
- MCP SDK:github.com/modelcontextprotocol/go-sdk
- 编码:saintfish/chardet + golang.org/x/text
- 分发:单个二进制文件(交叉编译)
- 反编译器:Gosleigh,内嵌 Ghidra x86/x64 语言规范
- PDB:gopdb(PDB 7.0 读取器和 MSVC 符号反混淆器)
许可证
反编译器(Gosleigh)及其内嵌的 Ghidra 语言规范采用 Apache License 2.0 许可;Gosleigh 是 Ghidra 反编译器的重新实现,由美国国家安全局开发(https://github.com/NationalSecurityAgency/ghidra)。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。