CASE STUDY / AI AGENTS
Using Claude Code and MCP to maintain a real WordPress website.
這個網站本身就是專案的產出:你現在看到的頁面是由 AI Agent 透過受限的 MCP 介面建立與維護的。
Idea
把 LLM 接上一個真實、對外運作的系統,最大的問題不是「AI 能不能寫內容」,而是「要給它多少權限」。最省事的做法是給 shell 或資料庫存取;但那等於把整台主機的風險交給一個非決定性的執行者。
這個專案的做法相反:先定義 Agent 需要完成的任務,再把這些任務拆成一組最小的能力,透過 MCP 以工具形式暴露出來。Agent 只能做被明確允許的事,其他一律不存在於介面上。
Architecture

Human
↓
Claude Code
↓
MCP (capability-scoped tools)
↓
WordPress
人負責意圖與驗收;Claude Code 負責規劃與執行;MCP 是唯一的執行通道,同時也是權限邊界;WordPress 是被維護的目標系統。Agent 沒有任何繞過 MCP 的路徑。
Capability-based Least Privilege
權限不是以「使用者角色」給予,而是以「能力」定義。每一個工具對應一個具體且範圍受限的動作,沒有通用的逃生門。
AGENT CAN
- 讀取內容
- 建立與修改 Page
- 發布內容
- 管理 Navigation
- 設定 Homepage
- 管理 Media
AGENT CANNOT
- shell
- SQL
- user management
- plugin install
- theme install
- arbitrary wp_option
Safety Design
- 沒有通用執行能力:沒有 shell、沒有任意 SQL、沒有任意 option 寫入,因此不存在「透過一個工具做到所有事」的路徑。
- 寫入前先建立 revision:修改既有的已發布內容會先保留 WordPress revision,錯誤可還原。
- 新內容一律從 draft 開始:建立工具強制 draft 狀態,發布是一個獨立且明確的動作。
- 不觸碰身分與執行環境:使用者、外掛、主題、憑證都在能力範圍之外。
- 唯讀的環境資訊:Agent 可讀取維護所需的中介資訊(如主題已註冊的 menu location),但不暴露資料庫憑證或設定檔。
Why It Matters
把 Agent 接進既有系統的關鍵不在模型能力,而在介面設計。介面決定了 Agent 能造成的最大影響;能力切得夠細,Agent 就能在不需要人工逐步確認的情況下自主完成整段工作,同時把最壞情況限制在可還原的範圍內。
這也是我看待 AI 應用的一致立場:AI 進入系統的方式,本身就是一個系統設計問題。
Tech Stack
Claude Code · MCP · WordPress REST / PHP plugin · Gutenberg blocks · Self-hosted deployment