文/Laban(優創智能 AI 導入工程師)
MCP 工具標註(annotations)是 MCP 伺服器替每個工具宣告的四個提示:是否唯讀、是否可能造成破壞、重複呼叫是否結果相同、是否接觸外部世界。我們讀取了 REA 6.7.0 的全部 207 個 MCP 工具標註。結論先講:只有 5 個工具標成唯讀,31 個標成可能造成破壞;企業讓 AI 代理接上 REA 時,不該整個伺服器放行,而是依標註分成三級:靜態分析自動執行、會執行目標的擷取與除錯每次核准、會寫入裝置的工具預設禁用。
REA 是什麼、合法界線在哪,請先看REA 是什麼?讓 AI Agent 拆解軟體的開源 MCP 工具。本文只處理下一個問題:代理接上 REA 之後,哪些工具可以讓它自己按? 實際應用可參考用 REA 實測自家官網。
一、實測數字:207 個工具怎麼標?
2026 年 11 月 9 日,我們對本機的 REA 6.7.0 MCP 伺服器送出 tools/list 請求,取得 207 個工具,每個工具都明確填寫了四個標註:
| 標註 | 意義 | 標為「是」的工具數 |
|---|---|---|
| readOnlyHint | 只讀取,不改變環境 | 5 |
| destructiveHint | 可能造成破壞性修改 | 31 |
| idempotentHint | 重複呼叫結果相同 | 167 |
| openWorldHint | 會接觸外部世界(網路、裝置、其他程式) | 100 |
5 個唯讀工具都是讀取 REA 自己產生的結果:取得證據包、列出未知項、驗證未知項是否解決、評估重建涵蓋率、查詢 GDB 工作階段狀態。換句話說,只要碰到分析目標本身,REA 就不把工具標成唯讀。
二、31 個「可能造成破壞」的工具在做什麼?
我們把這 31 個工具依用途分成五組:
| 組別 | 工具 | 會改變什麼 |
|---|---|---|
| 情境擷取 | capture_browser_scenario、capture_electron_scenario、capture_native_ui_scenario、capture_process_scenario、observe_native_calls、observe_web_execution | 實際執行或操作目標程式、網站;可能改變帳號狀態、檔案或服務 |
| 動態插樁與除錯 | instrument_with_frida、load_frida_script、resume_frida_session、gdb_console、close_gdb_session、start_rizin_debug_session、rizin_debug_command、close_rizin_debug_session、execute_rizin_command、cutter_command | 注入腳本、改變執行中程式的狀態;gdb_console 的說明是「不受限的 GDB 指令」 |
| Android 裝置操作 | install_adb_package、uninstall_adb_package、push_adb_file、start_adb_app、stop_adb_app、start_adb_activity | 在連接的手機或模擬器上安裝、移除 App、寫入檔案、啟動或停止程式 |
| 分析資料庫標註 | annotate_native_function、set_address_name、set_addresses_names、set_comment、set_inline_comment、set_bookmark、unset_bookmark | 修改分析工作階段裡的名稱與註解;依 Ghidra 的說明,原始執行檔不會被寫入 |
| 工作階段管理 | close_binary、export_evidence_bundle | 關閉分析工作階段、匯出檔案 |
這五組的風險差很多。 修改分析資料庫裡的函式名稱,最壞情況是註解被改亂;在手機上安裝 App 或對執行中程式注入 Frida 腳本,影響的是真實環境。所以「destructiveHint 為真」不能一律同等處理。
三、為什麼連「列出字串」都不是唯讀?
list_strings(列出程式中的字串)標成非唯讀、非破壞、不接觸外部。原因要看 rea capabilities 的副作用說明:以 Ghidra 分析時,這類操作會啟動 Ghidra 程序並寫入檔案系統,因為 Ghidra 需要建立暫時專案;REA 說明這個專案在關閉時刪除,原始執行檔不被寫入。
副作用標籤(rea capabilities) | 意義 |
|---|---|
| launches_process | 會啟動外部程式(如 Ghidra、Hopper) |
| may_write_filesystem | 可能寫入檔案(暫存專案、匯出檔) |
| may_show_ui | 可能跳出視窗(如 Hopper 圖形介面) |
| may_access_network | 可能連網(例如透過網路連到 IDA 的 MCP 轉接) |
| mutates_artifact | 會修改分析資料庫的內容 |
我們的解讀:REA 的標法偏保守,寧可標成非唯讀,也不宣稱沒有副作用。這對企業是好事,但也代表權限規則不能只看 readOnlyHint,否則幾乎所有工具都得人工核准,代理就沒法用了。
四、三級核准規則(編輯建議)
| 級別 | 判斷條件 | 典型工具 | 規則 |
|---|---|---|---|
| 第一級:自動執行 | 非破壞,且不接觸外部世界 | list_strings、procedure_pseudo_code、xrefs、inspect_managed_members、get_evidence_bundle | 允許代理直接呼叫 |
| 第二級:每次核准 | 非破壞但接觸外部世界;或破壞範圍限於分析工作階段 | inspect_web_page、list_adb_devices、inspect_artifact、set_comment、capture_browser_scenario | 每次呼叫前由人確認目標與參數 |
| 第三級:預設禁用 | 破壞且會改變真實環境 | install_adb_package、uninstall_adb_package、push_adb_file、instrument_with_frida、gdb_console、execute_rizin_command | 預設拒絕;確有需要時,在隔離環境由工程師手動執行 |
capture_browser_scenario 標為破壞,我們放在第二級,因為它在 launch 模式下用臨時瀏覽器設定檔,結束後關閉;但如果改用 connect 模式連到你已登入的瀏覽器,REA 的說明寫明會先把頁面導到起始網址,可能清掉未儲存的表單內容。用 connect 模式時,應升到第三級。
五、Claude Code 權限設定範例
Claude Code 的 MCP 工具名稱格式是 mcp__<伺服器名稱>__<工具名稱>。以下是依三級規則寫成的專案設定片段(.claude/settings.json),伺服器名稱以 rea 為例,工具清單只列代表,實際請依你匯出的完整清單補齊:
{
"permissions": {
"allow": [
"mcp__rea__list_strings",
"mcp__rea__procedure_pseudo_code",
"mcp__rea__xrefs",
"mcp__rea__inspect_managed_members",
"mcp__rea__get_evidence_bundle"
],
"ask": [
"mcp__rea__inspect_web_page",
"mcp__rea__inspect_artifact",
"mcp__rea__capture_browser_scenario",
"mcp__rea__set_comment"
],
"deny": [
"mcp__rea__install_adb_package",
"mcp__rea__uninstall_adb_package",
"mcp__rea__push_adb_file",
"mcp__rea__instrument_with_frida",
"mcp__rea__gdb_console",
"mcp__rea__execute_rizin_command"
]
}
}
設定要放在專案層級並納入版本控制,讓團隊用同一份規則;個人設定不要覆寫成整個伺服器放行。其他代理工具(Codex、Cursor)的設定方式不同,但分級邏輯一樣。
六、5 步驟:從工具清單到權限設定
步驟 1:匯出目前版本的工具清單與標註
對你安裝的 REA 版本執行一次 MCP tools/list,存下工具名稱與四個標註,檔名標上版本號。不要依賴本文的數字,你的版本可能不同。
步驟 2:依標註自動分出三級草稿
用一支小腳本依第四節的判斷條件分級:非破壞且不接觸外部的放第一級,其餘先放第二級,破壞且屬於裝置操作、插樁、除錯的放第三級。這一步是純規則,交給腳本,不交給模型判斷。
步驟 3:人工檢查第二、三級的邊界
由一位懂逆向工具的工程師逐一看第二、三級工具,對照 rea capabilities 的副作用說明,調整級別。特別注意需要連到你已登入瀏覽器或實體裝置的工具。
步驟 4:寫進專案權限設定
依分級寫成代理的權限設定(如第五節範例),放在專案層級並納入版本控制,第一級進允許清單、第二級進詢問清單、第三級進拒絕清單。
步驟 5:每次升級 REA 後重做比對
REA 更新頻繁。每次升級後重跑步驟 1,比對新增工具與標註變化,新工具在完成分級前一律放在詢問清單。
驗收標準:做完五步,你要能回答三個問題:目前 REA 版本有幾個工具、各在哪一級;哪些工具代理永遠不能自己呼叫;上次升級後新增了哪些工具、放在哪一級。三題都答得出來,代理才算「接上」REA。
七、結語:標註是起點,判斷還是人做
REA 替每個工具誠實標上副作用,讓企業有了分級的依據,這比許多 MCP 伺服器只給名稱和說明進步很多。但標註是伺服器自己宣告的提示,不是保證;MCP 規範也提醒用戶端不應只因標註就信任一個工具。分級規則最後要由懂工具的人確認,寫進設定,並在每次升級時複查。
如果你正在規劃讓團隊的 AI 代理接上外部工具,想先把權限邊界訂清楚,歡迎填寫諮詢表單,我們可以從一次代理工具盤點開始。延伸閱讀:AI 代理的權限邊界怎麼設。
免責說明:本文數字取自 2026 年 11 月 9 日對本機 REA 6.7.0(npm 套件 rea-agents)MCP 伺服器的 tools/list 回應與 rea capabilities 輸出,其他版本可能不同。三級核准規則為編輯建議,不是 REA 專案的官方建議。逆向工程是否合法依軟體授權合約與適用法律而定,本文不是法律意見,也不代表對該專案的背書。
參考來源
- morluto/rea,GitHub 專案頁(2026-11-09 查詢):https://github.com/morluto/rea
- rea-agents,npm 套件頁(2026-11-09 查詢,最新版 6.8.0):https://www.npmjs.com/package/rea-agents
- Model Context Protocol,Tools 規範(工具標註):https://modelcontextprotocol.io/specification/2025-06-18/server/tools
- 優創智能,REA 6.7.0
tools/list與rea capabilities輸出(2026-11-09)
相關推薦與延伸閱讀
- REA 是什麼?讓 AI Agent 拆解軟體的開源 MCP 工具:實測與企業風險:REA 是讓 Claude Code、Codex 等 AI Agent 透過 MCP 拆解無原始碼軟體的開源工具,適合研究自有或已獲授權的軟體,不能用來破解授權
- Uber 一週只有 4 趟叫車來自 AI 代理:台灣企業該不該現在為代理下單開入口?:AI 代理下單目前仍是極小眾,台灣企業應先縮短自家 LINE 與官網的下單步驟,再決定要不要為代理開專用入口。Uber 財報會議揭露,十月最忙一週約 3.2 億
- AI Agent 工具週報 10/19–10/26:Claude Code、Codex、Agent Skills 等 7 件事:AI Agent 工具週報 10/19–10/26:本週主軸是治理而非新模型。Claude Code 補企業權限、Agent Skills 進 Linux 基金

