你寫了一個好用的技能(skill):有說明、有範本、有腳本。同事想用,你怎麼給他?把資料夾丟給他?十個人就丟十份 —— 然後你**永遠不知道誰有、誰在用、你改了他同步了沒、想收回也收不回**。這篇講一個實際又可控的做法:把技能收成一台 MCP,大家來接,透過 MCP 取得你的技能;而 MCP 能授權又能記 log —— 你會知道是誰把技能拿走了。
共享資料夾分享技能不可持續:零控管、零紀錄。把技能收成 MCP 服務 —— 大家接同一份、你改一次全員即得、token 知道誰接、log 知道誰拿走了哪個技能。執行仍在對方本機(讀他的真實資料),你只供「說明+範本+腳本」。
- 共享資料夾的死結:改不同步、不知道誰有/誰用、收不回。
- 解法:技能收成 MCP bundle(說明+範本+腳本),對外開 search / get_skill / read_file。
- 可控的關鍵:MCP 能授權(token→誰)+ 稽核 log(誰拿走了什麼) —— 資料夾給不了。
- 擴充 = 加一個資料夾;收回 = 撤一個 token。改一次,全員下次接就是新的。
- 執行留對方本機(讀真實資料才填端點/欄位/金鑰)—— 知識共享、機密不出門。
你不可能用共享資料夾分享技能
先說為什麼「丟資料夾」這條路一開始就錯。技能不是一個檔,是一整包:說明、範本、腳本。你把這包複製給十個人,當下能用,但你立刻失去四件事:
- 同步:你改了範本/修了腳本 bug,十份副本沒人自動更新;
- 可見度:你不知道誰手上有、版本各停在哪;
- 使用狀況:誰在用、用多少、拿去幹嘛 —— 完全黑箱;
- 收回:想停用某個舊技能?副本已經散出去了,收不回。
這不是技能不好,是「分發方式」沒有控管。人越多、技能越多,失控越嚴重。
為什麼共享資料夾必然失控
把「共享資料夾」跟「收成一台 MCP」擺一起看,差別一眼就懂:
| 共享資料夾 | 收成一台 MCP | |
|---|---|---|
| 分發 | 複製一份給每個人 | 大家接同一個 URL |
| 改版 | 每份各自過時 | 改一次,全員下次接即得 |
| 誰在用 | 黑箱 | log 有紀錄:誰拿了什麼 |
| 授權/收回 | 收不回 | token 給/撤,一行搞定 |
| 擴充 | 每加一人一技能都線性膨脹 | 加一個資料夾 |
解法:把技能變成「可被取用」的形式,收上 MCP
做法:把每個技能收成一個 bundle(說明 + 範本 + 腳本),放進一個受管的技能庫;再用一台 MCP 對外開幾個 tool,讓人來查、取說明、抓範本/腳本:
| MCP tool | 做什麼 |
|---|---|
| `search_skills(q)` | 查詢:關鍵字找相關技能 |
| `get_skill(name)` | 取說明 + 檔案清單(有哪些範本/腳本) |
| `read_file(name,path)` | 抓某個範本/腳本的內容(去敏 + 白名單擋 traversal) |
技能就這樣「像提示詞一樣可被取用」—— 別人不用安裝你的資料夾,連上 MCP 就能把你的技能取下來用。
執行留本機、技能上 MCP(兩種 MCP 的分界)
這裡有個關鍵分野,決定能不能遠端共享。MCP 有兩種賣法:
| 執行型 MCP | 技能型 MCP(本文) | |
|---|---|---|
| 賣什麼 | 替你執行動作 | 供說明/範本/腳本 |
| 執行在哪 | server 端 | 對方 agent 自己本機 |
| 能遠端共享? | 要看執行能否搬 server | 可以,純供技能 |
技能型 MCP 不執行、只回文字 → 所以能公開讓大家接,而且**執行在對方本機、讀對方的真實資料**,你的技能(形狀)共享出去,對方的機密(真實端點/金鑰)不會流到你這。這條路數跟我寫過的〈導向型 MCP Gateway〉一致。
架構圖:大家來接一台 MCP
整個拓撲:多人/多 agent 經 Cloudflare 接同一台技能 MCP(授權+log),MCP 回說明/範本/腳本,執行各自在本機、讀各自的真實資料。
流程圖:技能怎麼收進來、怎麼被取用
上半「收容」:某人的技能 → 去敏 + 補治理 → 進技能庫(git)→ MCP 索引;下半「取用」:別人的 agent → token 接上 → get_skill / read_file 抓檔 → 本機跑。每一步都記 log。
可授權:誰能接、誰不能
這是共享資料夾給不了、而 MCP 天生就有的第一件事。連上要帶 token,MCP 用 token 認出是誰,沒 token 或 token 不對 → 擋 401。加人 = 發一個 token,停用 = 撤一個 token,不用重發任何東西。
沒 token → HTTP 401(擋下)
帶 token → 認出身分 → 放行
加人 = tokens 檔加一行 "kg_xxx: 某人"(熱加,免重啟)
收回 = 刪那一行
可稽核:知道是誰把技能拿走了
第二件、也是你最想要的:每一次呼叫都記一行 log —— 誰(token 對應的身分)、呼叫了什麼、拿了哪個技能的哪個檔、什麼時候。真實 log 長這樣:
{"identity":null, "result":"401", "ip":"<ip>","ts":"..."} ← 未授權被擋
{"identity":"Alice","method":"tools/call","tool":"get_skill", "ts":"..."} ← Alice 看了某技能
{"identity":"Bob", "method":"tools/call","tool":"read_file", "ts":"..."} ← Bob 抓走了某腳本
一個技能 = 一包(說明 + 範本 + 腳本)
落地長這樣 —— 每個技能是一個資料夾:
skills/<name>/
SKILL.md 說明(治理 frontmatter + how-to)
templates/*.md 範本(去敏、placeholder)
scripts/*.py 腳本(通用、可跑)
`SKILL.md` 的 frontmatter 就是 Claude Code `SKILL.md` 的治理超集(多了 owner / status / classification / last_reviewed)。所以同一份來源,既能當本地 skill、也能上 MCP。(例如我把〈手寫 .pbip 產 Power BI 報表〉那個技能,就收成這樣一包:說明 + TMDL 範本 + 產生器腳本。)
收 10 個人的技能 = 加 10 個資料夾
收容某人的技能 = 把他那包整包收進技能庫、補治理欄位、去敏、過驗證、PR:
import_skill_bundle <他的技能資料夾>
→ 整包進 skills/<name>/(含他的範本/腳本)
→ 自動補治理 frontmatter(owner 待補)
→ validate(缺欄位 / 洩漏 url·金鑰 → 擋)→ PR review → merge
治理八維度(checklist)
| 維度 | 不治理 | 治理手段 |
|---|---|---|
| 收斂 | 掛 N 個來源,context 爆 | 一台 MCP 索引全部,按需取 |
| 發現 | 不知道有啥、重複造 | search + 技能庫 |
| 擁有者 | 孤兒技能沒人養 | 每個 owner(DRI) |
| 去敏 | URL/欄位/金鑰外洩 | 只給形狀;提交擋、取用再遮 |
| 生命週期 | 過時技能比沒有更糟 | version + last_reviewed;deprecated |
| 授權 | 誰都能拿 | token,依分級授權 |
| 稽核 | 不知道誰拿了 | log:誰/什麼/何時 |
| 觀測 | 不知哪些沒人用 | 用量 → 砍死技能 |
決策樹:你的技能該怎麼發
要給別人 → 往下
不在乎 → 共享資料夾(但別怪失控)
常見問題 FAQ
為什麼不直接用共享資料夾 / plugin?
資料夾複製出去就失控:改不同步、不知道誰有、收不回、更不知道誰在用。MCP 讓「取用」變成一次可授權、可記錄的呼叫。
技能的腳本會在誰的機器上跑?
對方的機器。MCP 只回文字(說明/範本/腳本),對方 agent 抓下來後在自己本機跑、讀自己的真實資料 —— 你的機密不會流出去。
怎麼知道是誰把技能拿走了?
每次呼叫都寫稽核 log:token 對應的身分、呼叫的 tool、拿了哪個技能的哪個檔、時間。你能回答「這技能被誰拿過」、能算用量、能追責。
加一個新技能要動 server 嗎?
不用。加一個技能 = 在技能庫加一個資料夾 → 過驗證 → PR。MCP 下次啟動自動索引,所有接上的人立即有。
發佈留言