
What's Allowed
io.github.stcmain由 GitHub 账号 stcmain 发布v0.1.2更新于 Oct 24, 2026
Merged agent permission rules: which settings file wins, and which rules your client ignores.
概览
一个本地 MCP 服务器,读取为 Claude Code 代理权限提供配置的各个设置文件,报告哪个文件生效、哪些规则被静默忽略。
- 可以做什么
- 汇总合并后的权限全貌:参与贡献的设置文件、deny/ask/allow 规则数量、生效的默认模式、整体放行规则与钩子,以及有多少规则行为异常。按优先级列出设置来源,包括是否存在、解析状态、规则数量,以及前导斜杠锚定到哪里。报告每条文档行为与表面意图不符的规则,并给出原因和文档中的替代写法。展示无人值守时会发生什么:默认模式、整体放行、额外目录、模式守卫和钩子命令。
- 适用场景
- 当你为编码代理写了 deny 或 allow 规则、想知道它们是否真正生效时使用;当多个设置文件被合并、需要看清哪个文件胜出时也适用。它解释客户端权限视图为何如此显示,但不会判断某条假设命令是否会被允许。
- 运行要求
- 作为本地 stdio 进程运行,通常通过 npx 调用 whats-allowed-mcp 包,或使用 Claude Desktop 扩展包。无需配置、环境变量或 API 密钥;若用户配置已迁移,会遵循 CLAUDE_CONFIG_DIR。它只从磁盘读取设置文件。
安装
在 SourceWeft 中
- 打开 控制台中的 What's Allowed,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
whats-allowed-mcp
[npm] [License: MIT] [stcmain/whats-allowed-mcp MCP server]
You wrote a deny rule. Did it do anything? An MCP server that reads every settings file feeding your agent's permissions, shows which one wins, and lists the rules your client accepts and then ignores.
Why
Permission rules for a coding agent are not in one file. They are in up to five at once: a machine-wide managed policy, the project file your team commits, a git-ignored local file, your user file, and whatever a session wrote. They are merged, and then evaluated deny → ask → allow, where the first match wins and specificity does not break the tie.
That merge is hard enough. The part that actually bites is that several rule shapes are accepted and then quietly do nothing:
Write(docs/**)— file permissions are checked againstEdit(path)andRead(path)rules only. AWrite,NotebookEdit,MultiEditorGlobpath rule is accepted and never consulted.Bash(command:rm *)— a rule can't match a tool's primary content field with theparam:valueform. It is ignored, because a compound command would bypass it."mcp__*"inallow— an unanchored allow glob is skipped and auto-approves nothing.Read(/.env)in user settings — a single leading slash anchors at the settings source, so that rule protects~/.claude/.env, not the.envin each of your projects.Bash(git push origin main)inallowunder aBash(git push *)indeny— a deny rule cannot carry allowlist exceptions, so the allow rule is unreachable.
Claude Code warns about some of these at startup, in a scrollback you have already lost by the time you care. Nothing collects them, nothing tells the agent itself, and nothing shows you the merged picture across all five files at once. This does.
What it looks like
Given a project .claude/settings.json:
…and a user ~/.claude/settings.json with "deny": ["Read(/.env)"] and "defaultMode": "acceptEdits", whats_allowed returns (paths shortened here):
Seven rules. Five of them do something other than what they read as — and the one everybody would have bet on, Write(.env*), is never consulted at all.
Tools
Install
Claude Desktop (one-click, no terminal): download the latest whats-allowed-mcp-<version>.dxt from Releases and open it with Claude Desktop (double-click, or Settings → Extensions → Install Extension…). The server and its dependencies ship inside the bundle — no npm, no Node install.
Register with Claude Code (available in every session):
Or in any MCP client config:
From source
Published as whats-allowed-mcp on npm and as io.github.stcmain/whats-allowed-mcp in the MCP Registry.
No configuration. No environment variables. Respects CLAUDE_CONFIG_DIR when you have moved your user config.
What it checks, and what it refuses to guess
Every finding corresponds to behaviour Anthropic documents, and every one links to the paragraph it comes from. There is no risk score, no severity ranking and no "suspicious rule" heuristic — those produce confident nonsense on ordinary configurations.
Reported:
- Path rules on
Write/NotebookEdit/MultiEdit/Glob, which file permission checks never consult Tool(param:value)rules aimed at a tool's primary content field, which are ignored outright- Unanchored tool-name globs in
allow, which auto-approve nothing :*used anywhere but the end of a shell pattern, where the colon is literal/pathrules in user settings, which anchor at the config directory rather than at your project- Trailing
*with no word boundary —Bash(ls*)also matcheslsof - Allow rules on commands that run other commands (
npx,docker exec,bash -c,xargs,devbox run…), which approve whatever follows them - Bash rules that try to constrain a URL, which the docs themselves call fragile
- Allow rules a deny or ask rule reaches first
- Rules declared in more than one file
Deliberately not reported:
- Whether your rules express what you want. That is a judgement about intent and this server does not have one.
- Shadowing that needs a wildcard solver. An allow rule is only called unreachable when the blocking rule is a prefix pattern that provably covers it. Anything subtler is left alone rather than guessed at, so this under-reports on purpose.
- A verdict for a hypothetical command. See below.
Honest limitations
- It does not simulate your client's decision. There is no "would
git pushbe allowed" tool, and that is a design choice: Claude Code's built-in read-only command set, wrapper stripping (timeout,nice,xargs…), compound-command splitting, sandbox state and PreToolUse hook results all participate in the real answer. A static verdict would be confidently wrong often enough to be worth less than no answer. Use/permissionsin your client for the live view; use this to understand why it says what it says. - Command-line flags are invisible.
--allowedTools,--disallowedTools,--permission-modeand--settingssit between managed policy and local settings, and they are not on disk. - Session rules added through
/permissionsland in files this server reads, but rules added for one session only do not. - It reports; it does not fix. Nothing is edited, and no finding is ever a recommendation to delete a rule. Where the docs give a corrected form, it is quoted; where they don't, the finding stops at the observation.
~/.claude/settings.local.jsonis reported but not ranked. It exists and Claude Code writes to it; the published precedence table lists four scopes and does not include it. This server refuses to invent its position.- Claude Code's schema is the model. Other clients with their own permission systems are not parsed.
- It never reads git history, and it does not tell you who added a rule or when.
git log -p .claude/settings.jsondoes that better.
Design notes / threat model
- No child processes. No shell. No network. No writes. The only Node APIs used are
node:fsreads,node:pathandnode:os. There is nochild_processimport anywhere in the source, so nothing in a settings file can be executed by reading it — including the hook commands andapiKeyHelperscripts it reports on. envvalues are never read — only names. Settings files are one of the most common places for a plaintext API key, and a tool that pasted one into a context window would be worse than the problem it solves. The same applies toapiKeyHelper: presence is reported, the script is neither read nor run.- Settings-authored strings are fenced and labelled. Rule text and hook commands have to be shown to be useful. They are emitted inside inline code spans with backticks neutralised, pipes escaped and newlines flattened, so a crafted string cannot break out of the span or out of a markdown table, and each block carries a standing note that the quoted text is data from a file, not instructions.
diris the one model-controlled path, and it is bounded by construction: resolved, real-pathed, and required to be an existing directory. From there only fixed filenames are read —.claude/settings.json,.claude/settings.local.json, the user config file, the platform's managed-policy path. No globbing, no traversal, no arbitrary file reads.- Bounded work: a 2 MB ceiling per file, a capped walk when looking for the project root, and files that fail to parse are reported as unparsed rather than partially guessed at.
- Findings are conservative by construction. Every check is anchored to documented behaviour; anything that would need a judgement call about intent is not reported at all. For a tool people use to decide whether a guard rail is real, under-reporting is the correct failure mode.
Who makes this
Built by Shift The Culture — we run a one-person company on AI agents and ship the tooling we needed ourselves. This server is free and MIT-licensed, no strings.
It has three siblings, all also free and MIT:
- whats-running-mcp — what is actually running on the box right now, instead of what an old transcript claims.
- whats-loaded-mcp — what is eating your context window before you type: skill descriptions, memory files and their imports.
- whats-inherited-mcp — what a checkout you did not write tells your agent to do: instruction files, hooks, and the MCP servers it declares.
The rest of that tooling is paid:
- Agent Fleet Ops Kit ($29) — the other failure modes of running three or four agents on one box: two sessions editing the same checkout, a dev server nobody owns (so the agent tests a different app than it edits), and MCP servers leaked from crashed sessions that hold ports and RAM for weeks. Prefer PayPal? Same kit on Payhip.
- Agent Reliability Kit ($29) — a Stop hook and two CLIs that block a turn when an agent claims "done" against a repo, URL, or build that was never actually checked. Prefer PayPal? Same kit on Payhip.
The server above stays free and MIT either way — it has no upsell in it, no telemetry, and no dependency on the paid kits.
Sponsors
This server is MIT and stays MIT. There is no pro edition, no telemetry, and nothing held back from the free build. Sponsorship is how the maintenance gets paid for without any of that changing.
No sponsors yet — the first slot is open. Company sponsors get their name or logo in this section, in the three sibling servers, and on the sponsor page. Tiers, exactly what the placement is, and what it explicitly does not buy: https://shifttheculture.media/sponsor
Individuals: https://paypal.me/ShiftTheCultureLLC — any amount, no perks, no tier.
License
MIT © Zachary Pampu
来源:README.md,提交 0678fae
工具
0版本历史
1- v0.1.2最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分