MCP tools, permissions, and approvals
Goal: Treat every MCP tool as a button that changes the outside world—match approval to blast radius.
Best for: Anyone who connected a first server and now sees tool prompts.
Every tool prompt is a chance to Deny. Read the name and arguments before Allow becomes habit.
Tools are functions the model may call (search, create draft, list files). Approvals are how you stay in control. “Always allow” is convenient and dangerous for send/delete/pay.
Every tool is a door. Approvals are locks. Read the permission in plain words before you click Allow—especially write, send, delete, pay.
Read the permission aloud once before Allow. If you cannot explain it to a friend, deny and ask for a narrower scope.
Why beginners skip this
Approving every tool permission at once feels easy—one bad approve can egress. Minimum privilege + human confirm.
Step 1 — Read the tool name before approving
When a prompt appears, read tool name, argument preview, and destination; refuse if you cannot restate it.
Step 2 — Default policy
Default from this table: read light, write heavier, send/delete heaviest—when unsure, escalate approval.
| Tool kind | Default |
|---|---|
| Read / search / list | Allow once or Ask |
| Create draft (you still send) | Ask |
| Send / post / delete / purchase | Ask every time or human-only |
| Broad filesystem write | Deny until you have a sandbox path |
Example
Filled prompt
Job: Connect/review scopes for “MCP tools, permissions, and approvals”. Prefer read/draft. Ask-every-time on leave-the-system.
Boundaries: draft only; Unknowns [?]; no silent send; no invented metrics.
Return: checkable artifact + one-minute pass/fail for mcp-tools-permissions-and-approvals.
What good output looks like
- Matches named constraints for “Treat every MCP tool like a button that can change”
- Unknowns labeled; no invented owners/metrics
- Stops before irreversible actions
- Pass/fail markable in ≤60s
Step 3 — Session hygiene
If you mashed Always allow, revoke or reconnect and reset; write which tools you trust this week and park it by the screen.
Example
Filled prompt
Approvals screen shows: mail.read, mail.send, calendar.write all "always allow".
Rewrite approvals to match blast radius: read can auto; send/write ask-every-time.
Return before/after table. I will revoke one write today.
What good output looks like
- Ask-every-time on leave-the-system tools
- Kill-switch owner named
- Pass/fail: dry-run only today
- Read/draft preferred over write for “Treat every MCP tool like a button that can change”
Save this card
Card: Treat every MCP tool as a button that changes the outside world—match approval to blast radius. Keep this beside the tool; read before you start.
Before you start
Open the MCP panel on the account you keep. For “Treat every MCP tool like a button that can,” decide read/draft vs write before any Connect. Ask-every-time on leave-the-system. Guide: mcp-tools-permissions-and-approvals. Keep the real job visible the whole time; a blank box means stop and fetch the artifact first.
How to use this week
This week list tools on a real MCP: each tool read / write / external; any out-of-ring action needs human confirm.
Say it aloud
Before Allow, read the scope in one sentence you could text a friend. If you cannot, Deny.
Default deny writes
Week-one default: read and draft. Writes earn trust with a named job.
Keep it real
Run this guide’s Practice now on work you will actually ship this week—not a fictional scenario. Dated notes beat perfect theory.
Do not bookmark-only
Finish Practice now, then tick this guide on your path. Titles unread are not skills.
Reality check
Open this guide beside a live task. If you cannot name the task, pick one before reading further.
Close the loop
Write one line: next time I approve every tool permission at once, I refuse go.
Example
Filled prompt
Live artifact this week for: Treat every MCP tool like a button that can change something—set approvals to match blast
Name real files/people. No invented facts; label Unknowns; stop before send/delete.
Return working prompt + one pass/fail check I can mark in a minute.
What good output looks like
- Kill-switch owner named
- Read/draft preferred over write for “Treat every MCP tool like a button that can change”
- Pass/fail: dry-run only today
- Ask-every-time on leave-the-system tools
Red flag
Send/delete without a human gate; approvals mismatched to blast radius—raise the gate.
Pitfalls
| Pitfall | Fix |
|---|---|
| Approving unread argument previews | Read first |
| Always-allow for send tools | Never for high radius |
| Same policy for all servers | Per-server least privilege |
Example
Filled prompt
Temptation: skip the habit for mcp-tools-permissions-and-approvals to save five minutes.
Job still: Treat every MCP tool like a button that can
Smallest correct pass: Done visible · checkable artifact · Unknowns [?].
Boundaries: draft only; no silent send; no invented metrics.
Return: artifact + refuse-line said aloud.
What good output looks like
- Names the shortcut refused (specific to mcp-tools-permissions-and-approvals)
- Still delivers checkable output for “MCP tools, permissions, and approvals”
- Unknowns labeled; draft-only
- Pass/fail: refuse-line dated (mcp-tools-permissions-and-approvals #4)
Practice now
Least set: start with zero tools; add one with why (Asia/Shanghai).
Screenshot perms: save permission dialog screenshot on Save (Asia/Shanghai).
Deny default: new tools start denied until a why-line exists (Asia/Shanghai).
Click-map drill: list every approval click required this run (Asia/Shanghai).
Approvals drill: list which tool calls require human click—empty list is a smell (Asia/Shanghai).
Thin-spot drill: rewrite the Save card with real nouns from your work (repo, doc, inbox). Generic placeholders fail the drill.
Tonight split a real MCP tool set into low/high risk columns; high-risk runs only after approval.
One sentence takeaway
Each tool read / write / external; out-of-ring always needs human confirm.
Word-floor practice
Run the Today card once on a real artifact. Write pass/fail + never-do with date Asia/Shanghai. If you only skimmed, do not mark this guide done.
Next
MCP 工具、权限与审批
目标: 把每个 MCP 工具当成会改动外界的按钮;点允许前,让审批力度配得上影响范围。
适合: 已经连上第一个服务器、开始看到工具确认框的人。
每一次工具确认框,都是一次可以说「不」的机会。别让「允许」变成条件反射:先读工具名和参数。
工具是模型可能调用的功能(搜索、创建草稿、列文件)。审批是你保持控制的方式。对发送、删除、付款,「始终允许」省事,但危险。
每个工具都是一扇门,批准就是那把锁。点允许前,用大白话把权限读一遍:尤其是写、发、删、付。
点允许前大声读一遍权限。要是讲给朋友听都讲不清,就先拒绝,再要更窄的范围。
为什么新手跳过
工具权限一次批完像省事;一次误批就能出站。最小权限 + 人工确认。
步骤 1——批准前先读工具名
弹出确认时,先看三样:工具名、参数预览、要动到哪里。看不懂就先拒绝,回到对话里用白话问它到底想干什么,问清了再决定。
步骤 2——默认策略
按下表给默认策略:读轻、写重、发送/删除最重;不确定就升一档审批。
| 工具类型 | 默认 |
|---|---|
| 读 / 搜索 / 列表 | 允许一次或询问 |
| 创建草稿(仍由你发送) | 询问 |
| 发送 / 发帖 / 删除 / 购买 | 每次询问或仅真人 |
| 宽泛文件系统写入 | 有沙箱路径前拒绝 |
实例
填好的提示词
把这些范围译成新手能懂的风险白话:calendar.read、calendar.write、mail.send。建议第一周允许哪些。
边界:不编造;未知标 [?];发送前停下。
完成检查:一分钟内能判过/不过。
像样的输出大概长这样
- 用大白话解释:read=看日程,write=改日程,send=真的发信
- 第一周建议只开 calendar.read,write/send 先关
- 说明「始终允许」为什么不适合发送类
- 输出短到能念给非技术朋友听
- 不编造你们团队其实没有的审批角色
步骤 3——会话卫生
要是误点了「始终允许」,立刻撤销或重连重置;本周信任哪些工具,写下来贴在显示器边。
实例
填好的提示词
为使用 AI 连接器的小团队写 6 条批准政策卡:谁能批准发送、默认拒绝写入、每次允许都记日志。
卡片短到可贴显示器;禁止「始终允许」作为默认。
边界:不编造;未知标 [?];发送前停下。
完成检查:一分钟内能判过/不过。
像样的输出大概长这样
- 正好 6 条,覆盖:谁能批发送、默认拒写入、允许要记日志
- 默认拒写入写得很硬,例外必须点名任务
- 每次「允许」留一行:谁、何时、哪个工具
- 语气像小团队公约,不是法律文书
- 不引入你们还没设立的「安全委员会」之类头衔
保存这张卡
记下:本周拒绝的一项权限 + 修好的一次工具报错原文。标上日期。
开始前
先说清本周那件活,以及最小范围(只读 / 草稿 / 写入)。说不清,就先别接。
本周怎么用
本周给一个真 MCP 列工具清单:每工具可读/可写/可外发;超圈一律人工确认。
大声说出来
点允许前,用一句能发给朋友的话把范围说出来。说不清就先拒绝。
默认拒绝写入
第一周默认:只读和草稿。写入权限要用说得清的具体工作来换信任。
保持真实
用本周真要交付的工作做「现在就练一次」,别编假场景。带日期的实操笔记,比完美理论管用。
别只收藏
先做完「现在就练一次」,再在学习路径上打勾。只收藏不练,标题变不成真本事。
现实核对
把这篇指南放在真实任务旁边。说不出任务,就先挑一件再往下读。
闭环
写下一行:下次工具权限一次批完,我拒绝放行。
红旗
工具权限一次批完,一次误批就能出站;最小权限 + 人工确认。
常见坑
| 坑 | 改法 |
|---|---|
| 参数都没读就批准 | 先读工具名和参数预览 |
| 发送类点「始终允许」 | 影响大的操作绝不要「始终允许」 |
| 所有服务器套同一套策略 | 按服务器分别设最小权限 |
现在就练一次
今晚就练:给一个真 MCP 列工具清单:每工具可读/可写/可外发;超圈一律人工确认。
一句话带走
每工具可读/可写/可外发;超圈一律人工确认。
下一步
← Back to home · Learn · Tools · Compare · Start