---
title: "REA 的 207 個 MCP 工具只有 5 個是唯讀：用工具標註替 AI 代理訂三級核准規則"
description: "REA 6.7.0 的 207 個 MCP 工具中，只有 5 個標成唯讀，31 個標成可能造成破壞，例如情境擷取、Frida 插樁、GDB 除錯與安裝 Android App。企業給 AI 代理用 REA，不該整包允許。本文拆解 REA 的工具標註，提出三級核准規則與 Claude Code 權限設定範例。"
canonical: "https://yotron-ai.com/blog/rea-mcp-tool-annotations-agent-approval-policy"
published: "2026-11-09"
last-updated: "2026-11-09"
---

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

REA 6.7.0 的 207 個 MCP 工具中，只有 5 個標成唯讀，31 個標成可能造成破壞，例如情境擷取、Frida 插樁、GDB 除錯與安裝 Android App。企業給 AI 代理用 REA，不該整包允許。本文拆解 REA 的工具標註，提出三級核准規則與 Claude Code 權限設定範例。

> 文／Laban（優創智能 AI 導入工程師）

MCP 工具標註（annotations）是 MCP 伺服器替每個工具宣告的四個提示：是否唯讀、是否可能造成破壞、重複呼叫是否結果相同、是否接觸外部世界。我們讀取了 REA 6.7.0 的全部 207 個 MCP 工具標註。結論先講：**只有 5 個工具標成唯讀，31 個標成可能造成破壞；企業讓 AI 代理接上 REA 時，不該整個伺服器放行，而是依標註分成三級：靜態分析自動執行、會執行目標的擷取與除錯每次核准、會寫入裝置的工具預設禁用。**

REA 是什麼、合法界線在哪，請先看[REA 是什麼？讓 AI Agent 拆解軟體的開源 MCP 工具](/blog/rea-reverse-engineer-anything-ai-agent-guide)。本文只處理下一個問題：**代理接上 REA 之後，哪些工具可以讓它自己按？** 實際應用可參考[用 REA 實測自家官網](/blog/rea-website-third-party-script-audit-use-cases)。

---

## 一、實測數字：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` 為例，工具清單只列代表，實際請依你匯出的完整清單補齊：

```json
{
  "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 代理接上外部工具，想先把權限邊界訂清楚，歡迎[填寫諮詢表單](/contact)，我們可以從一次代理工具盤點開始。延伸閱讀：[AI 代理的權限邊界怎麼設](/blog/ai-agent-permission-boundary-sandbox)。

---

**免責說明**：本文數字取自 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 工具：實測與企業風險](/blog/rea-reverse-engineer-anything-ai-agent-guide)：REA 是讓 Claude Code、Codex 等 AI Agent 透過 MCP 拆解無原始碼軟體的開源工具，適合研究自有或已獲授權的軟體，不能用來破解授權
- [Uber 一週只有 4 趟叫車來自 AI 代理：台灣企業該不該現在為代理下單開入口？](/blog/ai-agent-orders-uber-doordash-reality-check-taiwan)：AI 代理下單目前仍是極小眾，台灣企業應先縮短自家 LINE 與官網的下單步驟，再決定要不要為代理開專用入口。Uber 財報會議揭露，十月最忙一週約 3.2 億
- [AI Agent 工具週報 10/19–10/26：Claude Code、Codex、Agent Skills 等 7 件事](/blog/ai-agent-tools-weekly-2026-10-26)：AI Agent 工具週報 10/19–10/26：本週主軸是治理而非新模型。Claude Code 補企業權限、Agent Skills 進 Linux 基金
