Basic tool authorization
Basic tool authorization is the first deliberate access control layer on MCP tool usage: a version-controlled ruleset saying which agents can call which tools, under what conditions, written down rather than clicked through.
- 1-3 MCP servers are configured (e.g., Git, Jira, documentation)
- MCP setup is documented but configured manually per developer
- Agents authenticate before they can use a tool server
- MCP server configurations are shared via repository (not local-only)
- At least one MCP server provides internal documentation or codebase context
- MCP server configuration files (mcp.json or equivalent)
- Setup documentation for MCP server installation per developer
- MCP server authentication configuration
What It Is
Basic tool authorization is the first deliberate access control layer on MCP tool usage: decisions about which agents can call which tools, under what conditions. At L1 (Zero MCP), authorization is moot - there are no tools to authorize. At L2 with 1-3 MCP servers, basic authorization means establishing read-only versus read-write boundaries, scoping tool access to the relevant data (one Jira project, not all Jira projects), and writing down - in a file that gets reviewed and committed - which tool calls that modify or delete data are denied outright and which must stop and ask.
The most important basic authorization decision is read vs. write. Read-only MCP tools carry minimal risk: an agent that can read your git history, your Jira tickets, and your documentation cannot cause damage with those tools. Write-capable tools are categorically different: a tool that can create Jira tickets, push git commits, or send Slack messages can cause real problems if called incorrectly. Basic tool authorization separates these categories explicitly, usually by starting with read-only tools and adding write tools incrementally with explicit human approval steps.
Claude Code implements basic authorization through its permission model, and in August 2026 the industry settled a question it had been arguing about all year: the control is the written rule, not the human click. Developers approve 97% of the permission prompts they are shown. In Anthropic's 1,053-person study, humans caught 13.6% of dangerous commands while a classifier caught 89%; across 40,000 runs, human approval accuracy was 66.3%, and npm run was waved through 52.5% of the time. A prompt that is always answered "yes" is not a control, it is a latency tax. Claude Code's auto mode became the default on 14 August for Pro, Max and Team accounts, with a circuit breaker at 3 consecutive or 20 total blocks.
This is not a return to letting the agent do whatever it likes, and reading it that way is the expensive mistake. Two declarative rule layers run before the classifier is consulted at all. permissions.deny blocks outright, and neither the classifier nor the agent's stated intent can override it. permissions.ask forces a prompt, and an explicit ask rule counts as your stated intent, so the classifier cannot auto-approve past it. Auto mode remains opt-in on Claude Enterprise, the Claude API, Bedrock, Google Cloud and Microsoft Foundry; org-managed defaults do not move on their own. So the mature form of basic tool authorization is a reviewed, version-controlled deny/ask ruleset that lives in the repository and goes through code review - not a human clicking approve, and not the classifier either. The human's judgment moves from the moment of the call to the moment the rule is written.
The starting shape of that ruleset is still read versus write. Read-only tools go in the allowed set. Anything that mutates external state starts in ask while you learn what the agent actually does with it, and anything genuinely destructive - deleting branches, touching production, rotating credentials - goes in deny and stays there. As evidence accumulates for a specific operation, you move that operation between layers by editing a file that someone reviews, which is a decision with a name attached to it.
Basic tool authorization also includes scoping: configuring each MCP server to expose only the data relevant to the current context. A Jira MCP server configured with a global admin token has access to every ticket in the organization. That's a much larger attack surface than a server configured with a read-only token scoped to a single project. Even at the basic level, applying the principle of least privilege to MCP tool configuration reduces risk significantly.
One protocol change is worth knowing about even at L2, because it alters where authorization decisions live. The MCP specification finalised on 28 July 2026 and adopted through August has a stateless core: the initialize/initialized handshake and the Mcp-Session-Id header are gone, so servers sit behind plain load balancers and run serverless. Practically, that means there is no session to attach a permission decision to. Every tool call arrives on its own and must carry its own authorization, which is a better model anyway but catches out anyone who assumed "we authorized at connect time" was enough. The same release hardens auth along RFC 9207 and 8707 lines and introduces a formal 12-month deprecation policy, under which Roots, Sampling and Logging are marked for removal. If your first three MCP servers lean on any of those, you have a year, and you should spend some of it now rather than all of it in month eleven.
Why It Matters
- Prevents the most common MCP accidents - write-capable tools called incorrectly can create junk tickets, push incomplete code, or trigger unwanted notifications; basic read/write separation prevents these accidents without blocking read access
- Establishes the security posture before scaling - it's much easier to design authorization correctly for 3 servers than to retrofit it onto 30 servers; getting the pattern right at L2 pays compounding security dividends
- Creates the trust ladder for agent autonomy - starting every write in
askand every irreversible action indenygives you a ladder with rungs; as the team observes agent behavior and builds confidence, specific operations move down a layer through a reviewed change to the ruleset rather than through habit - Satisfies initial compliance requirements - many organizations have data governance policies that require access controls on systems that handle sensitive data; basic MCP authorization is the minimum viable compliance posture
- Makes tool behavior auditable - even basic authorization, when combined with logging, creates a record of what tools were called by which agents and when; this audit trail is the foundation for more sophisticated governance at L4
Getting Started
- Classify each MCP tool as read or write - for each tool exposed by each MCP server, explicitly categorize it: does it only read data, or can it modify or create data? This classification drives every other authorization decision.
- Configure read-only credentials by default - create service accounts or API tokens with the minimum required permissions: read access to git history, read access to the relevant Jira project, read access to docs. Use these tokens for MCP server configuration. Do not use personal tokens or admin accounts.
- Write the deny/ask ruleset and commit it - in Claude Code, configure
permissions.denyfor anything that must never happen regardless of context or stated intent, andpermissions.askfor write tools you have not yet built evidence about. Commit both to the repository and review changes to them the way you review any other security-relevant code. The rule is the control; the prompt is only what the rule produces. - Scope service accounts to the minimum necessary data - a Jira token scoped to one project cannot accidentally expose data from another project. Apply least privilege scoping to every MCP server credential from the start.
- Log all tool calls - enable logging in your MCP server configuration so that every tool invocation (tool name, parameters, response, agent identity) is recorded. This log is both a debugging tool and the foundation for future audit capabilities.
- Review write operations weekly - for the first month after deploying write-capable tools, review the tool call log weekly. Look for unexpected patterns: tools called more than expected, called with unexpected parameters, or called in sequences that suggest the agent is doing something other than what was intended.
Use separate MCP server configurations for read-only and read-write tool sets. This makes it easy to verify that a specific agent session has only read access: check which configuration it's using. Mixing read and write tools in a single server makes it harder to audit access patterns.
Common Pitfalls
Using admin credentials for MCP server connections. It's tempting to use your personal admin token because it "just works" for everything. This is a significant security risk: if the agent misbehaves or the token leaks, it has admin access to your entire system. Create dedicated, scoped service accounts for MCP connections and treat them as production credentials.
Approving write operations without reading them. Human approval for write operations is only as valuable as the quality of the review, and the 2026 evidence says the quality is poor: developers approve 97% of prompts, humans caught 13.6% of dangerous commands against a classifier's 89%, and approval accuracy across 40,000 runs was 66.3%. Training the team to read more carefully helps at the margin, but the structural fix is to stop relying on the click. Anything you genuinely cannot afford belongs in deny, where no amount of prompt fatigue can wave it through.
Treating auto mode as the end of authorization. The opposite mistake, and the more expensive one this month. Auto-approval by classifier sits underneath your declarative rules, not instead of them: deny blocks outright and cannot be argued past, and an explicit ask rule counts as your stated intent so the classifier will not auto-approve over it. A team that reads "auto mode is the default now" as "we no longer write permission rules" has removed the only layer that was doing reliable work. Note also that auto mode remains opt-in on Claude Enterprise, the API, Bedrock, Google Cloud and Microsoft Foundry, so what your laptop does and what your CI does may differ.
Not revoking tokens when a developer leaves. Manually configured MCP tokens are often tied to individual developer accounts. When a developer leaves, their tokens should be revoked - but with manual setup, there's no centralized registry of what tokens exist. This is one of the arguments for centralized credential management (L3), but at L2 you can mitigate it with a documented offboarding checklist.
Conflating "the agent asked for approval" with "it's safe to approve." An agent that requests write access because it misunderstood the task is still asking for approval. The human approval step is not a rubber stamp; it's a judgment call. If the proposed write operation doesn't match what you asked the agent to do, the correct response is denial and clarification, not approval.
How Different Roles See It
Bob's team has just deployed their first write-capable MCP tool: an agent can now create Jira comments to summarize its work. One developer accidentally approved a tool call that created 15 comments on 15 different tickets because the agent misinterpreted the task scope. The comments are harmless but embarrassing, and Bob wants to prevent similar incidents.
What Bob should do: Bob should treat this incident as a calibration opportunity, not a failure. The right response is to tighten the authorization scope: configure the Jira write tool to require specifying the exact ticket ID in the approval confirmation, making it impossible to accidentally approve a bulk operation. Bob should also add a "dry run" capability where the agent describes what it would write before requesting approval to do so. These two changes - scoped approvals and dry runs - are basic authorization improvements that can be implemented in an afternoon and prevent the entire class of "agent did more than I expected" incidents.
Sarah is trying to quantify the risk-benefit tradeoff for giving agents write access to developer tools. She knows write access dramatically expands what agents can do autonomously, but she's getting pushback from the security team who want evidence that the authorization model is sound.
What Sarah should do: Sarah should document the authorization model explicitly and present it to the security team as a controls proposal, not a technology decision. The controls are: read-only credentials as the default, a committed and code-reviewed deny/ask ruleset covering every write operation, scoped service accounts with minimum permissions, and a weekly audit log review. Presenting the ruleset as an artifact under change control lands far better with a security team than "a developer will be prompted," which they will correctly read as a 97%-yes rate. This is a defensible controls framework even to a skeptical security team. Sarah should also propose a 30-day pilot of write-capable tools under these controls, with a review meeting at the end to evaluate the incident rate. A clean 30-day pilot (zero unauthorized writes, all approvals reviewed) is the evidence the security team needs to trust the pattern at scale.
Victor wants to move to a more automated workflow where agents can push commits and create PRs without requiring his approval for every operation. He's confident in his ability to review agent output, but he knows the team's current basic authorization model requires approval for all writes.
What Victor should do: Victor should build the case for selective auto-approval by accumulating evidence. For 30 days, approve all write operations and log the quality: how often did the write operation match his intent? How often did it require modification or reversal? At the end of 30 days, operations with a 95%+ accuracy rate are candidates for auto-approval. Victor should propose this evidence-based approach to Bob as the path to agent autonomy: not "trust the agent," but "here are the specific operations where we've demonstrated the agent is reliable enough for auto-approval." This converts the authorization discussion from a philosophical debate to an engineering decision based on empirical data.
Further Reading
From the Field
Recent releases, projects, and discussions relevant to this maturity level.
How This Guide Changed
What each edition changed in this guide, newest first.
- V1.6September 2026LATEST
Rewrote the control itself. After a year of treating the permission prompt as the authorization layer, the evidence became impossible to ignore - developers approve 97% of prompts, humans caught 13.6% of dangerous commands against a classifier's 89% - and Claude Code's auto mode became the default in August for Pro, Max and Team accounts. The guide now describes basic tool authorization as a committed, code-reviewed
deny/askruleset that runs before any classifier and cannot be argued past, with a matching warning that reading "auto mode by default" as "we no longer write rules" removes the only layer doing reliable work. It also notes that the stateless MCP core leaves no session to hang a permission decision on, and starts the 12-month clock on Roots, Sampling and Logging. - V1.0March 2026
The original entry started where authorization actually starts, at the least glamorous decision available: read versus write. Its position was that an agent which can read git history and tickets carries almost no risk, that an agent which can push commits or create tickets is a different category of thing entirely, and that the line between them should be drawn narrowly and widened one tool at a time.
Where does your team actually sit on this?
This guide describes one level of one area. Run the assessment to place your team across all 16 areas, see which gates you have passed, and get a report you can take to your stakeholders.
MCP & Tool Integration