跳至主要內容
首頁/部落格/REA 的 207 個 MCP 工具只有 5 個是唯讀:用工具標註替 AI 代理訂三級核准規則
REAMCPAI 代理權限Claude Code逆向工程資安治理

REA 的 207 個 MCP 工具只有 5 個是唯讀:用工具標註替 AI 代理訂三級核准規則

·約 14 分鐘閱讀
REA 的 207 個 MCP 工具只有 5 個是唯讀:用工具標註替 AI 代理訂三級核准規則
發布:
約 14 分鐘閱讀

文/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 專案的官方建議。逆向工程是否合法依軟體授權合約與適用法律而定,本文不是法律意見,也不代表對該專案的背書。

參考來源


相關推薦與延伸閱讀

常見問題

MCP 工具標註(annotations)是什麼?
MCP 伺服器在列出工具時,可以替每個工具附上四個提示:readOnlyHint(是否只讀取、不改變環境)、destructiveHint(是否可能造成破壞性修改)、idempotentHint(重複呼叫是否結果相同)、openWorldHint(是否會接觸外部世界,例如網路、裝置或其他程式)。AI 代理的用戶端可以依這些提示決定是否要求人工核准。它們是伺服器自己宣告的提示,不是保證。
REA 為什麼只有 5 個工具是唯讀?
因為多數分析工具雖然不改原始檔案,但會啟動外部程式並寫入暫存檔。依 `rea capabilities` 的說明,Ghidra 的分析操作會啟動程序並寫入檔案系統(暫時專案在關閉時刪除,原始執行檔不被寫入)。所以它們標成「非唯讀、非破壞」,這是誠實的標法,也代表不能用「唯讀」當成自動放行的唯一條件。
哪些 REA 工具最需要人工核准?
標成可能造成破壞且會接觸外部的工具:網站、Electron、原生介面與程序的情境擷取(會實際執行或操作目標),Frida 插樁、GDB 與 Rizin 除錯(能改變執行中程式的狀態),以及 Android 裝置的安裝、移除、推送檔案與啟動 App。這些都會改變真實環境的狀態。
可以直接在 Claude Code 允許整個 REA 伺服器嗎?
技術上可以,但不建議。整個伺服器放行,等於讓代理不經詢問就能安裝 Android App、注入 Frida 腳本或執行任意 GDB 指令。建議只把靜態分析類工具放進允許清單,情境擷取與除錯放進每次詢問清單,裝置寫入類工具放進拒絕清單。
REA 更新後,這份分級要重做嗎?
要複查。REA 更新頻繁,6.7.0 有 207 個 MCP 工具,新版本可能新增工具或調整標註。建議每次升級後重新匯出工具清單,比對新增與標註有變化的工具,再更新權限設定。
分享這篇文章:
FacebookLINE

準備好讓 AI 幫你工作了嗎?

現在開始你的數位轉型,預約 30 分鐘諮詢,我們協助你找到最合適的 AI 切入點。

30 分鐘深度了解你的業務,給你具體建議

Content Standards

內容維護與資料來源

內容維護與更正

內容維護窗口:優創智能 YOTRON 內容團隊。個別文章的作者、發布與內容更新日期以該頁標示為準。

網站版本更新:

資料來源與方法

文章中的外部資料、工具規格與比較基準以文內連結及標示日期為準;觀點、測試方法與實作建議由優創智能內容團隊整理。

聯絡與內容更正(Contact)

需要查核、補充或更正內容,可透過聯絡頁,或寄信至info@yotron-ai.com。公司與團隊資訊可見關於我們。

聯絡方式:電話02-2720-8130、Email info@yotron-ai.com。