Skip to content

docs: say that the guard filters tools/list, not just calls - #5

Merged
maverick0628 merged 1 commit into
mainfrom
docs/guard-tools-list-filtering
Aug 5, 2026
Merged

docs: say that the guard filters tools/list, not just calls#5
maverick0628 merged 1 commit into
mainfrom
docs/guard-tools-list-filtering

Conversation

@maverick0628

Copy link
Copy Markdown
Owner

What

The README described gateway-proxy guard as a tool allowlist enforced at the wire. That undersells it.

Denial happens twice, and the first one matters more. tools/list is filtered to the allowlist before the client ever sees it, so a denied tool is never advertised to the model. It cannot attempt what it is not shown. The call-time block is the backstop for a client that asks for a tool it was not offered.

Why it needed saying

The behaviour was real but only documented in a bash comment inside the verification snippet in docs/mcp-guardrails.md. The front door never mentioned it, and the decision-tiers table read as though deny were purely a call-time check.

Confirmed against a real run: with policies/coinbase.policy.json loaded, tools/list through the guard returns only coinbase_products_ticker and coinbase_balance. coinbase_orders_create and coinbase_transfer do not appear at all.

Changes

  • README.md — one paragraph in "What makes it interesting", including the default-deny consequence: an unknown tool stays blocked until someone adds it rather than allowed until someone notices.
  • docs/mcp-guardrails.md — makes the two-stage denial explicit under the decision-tiers table.

Docs only. No code, no behaviour change.

🤖 Generated with Claude Code

The README described the guard as a tool allowlist enforced at the wire, which
undersells it. Denial happens twice and the first one matters more: tools/list
is filtered to the allowlist before the client sees it, so a denied tool is
never advertised to the model at all. The call-time block is the backstop.

That behaviour was only documented in a bash comment in the verification
snippet, so the front door never said it and the decision-tiers table read as
if deny were purely a call-time check.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@maverick0628
maverick0628 merged commit 8f2f38c into main Aug 5, 2026
1 check passed
@maverick0628
maverick0628 deleted the docs/guard-tools-list-filtering branch August 5, 2026 18:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant