Build1 distinct publisher3 min readPublished
OAuth always allowed a token narrower than the request. What changes is that the client owner now declares which scopes a user may refuse, and the application has to read the token response to learn what it actually got.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The interesting line of code is not in the consent screen. It is at the token endpoint. You exchange the authorization code, and the response comes back with a scope parameter that lists what the user actually granted. Cloudflare's instruction is to inspect that parameter rather than treat a successful exchange as proof you received everything you asked for [14]. Under the old behavior a client could request a subset of its configured scopes, but the user's only moves were approve or deny, so the request and the grant were the same string [3].
Now look at the sample configuration. It declares four scopes and lists two of them in `optional_scopes` [5]. That leaves two the user cannot decline: `user-details.read` and `workers-scripts.write` [1]. Cloudflare's own recommended pattern for agents is to require read access to whatever the agent queries and make write access optional [17]. The sample marks `workers-kv-storage.write` optional and keeps `workers-scripts.write` mandatory, so it does not follow that pattern [2]. Either the illustration is deliberately showing a client that genuinely needs one write path, or the example got written after the docs.
None of the underlying latitude is new. RFC 6749 already lets an authorization server issue a token with a narrower scope than the one requested, and what has changed is providers surfacing that in the consent interface as agent integrations make broad requests routine [13]. GitHub documents that users can edit scopes and grant less than requested, and tells developers to handle it [8]. Google shows granular checkboxes for non-sign-in scopes [9]. Microsoft Entra reports the granted set in the token's `scp` claim [10]. The delta Cloudflare adds is that the developer, not the provider, decides which entries are droppable, and marking one required means a user narrowing the request cannot strip something the application needs to function [11][12].
For that lever to be worth pulling, you need a product that has a coherent shape with the optional scope missing. Cloudflare's guidance is to degrade: disable the feature and say so, rather than emit a 403 that the user reads as a broken integration [16]. Umesh Malik, a software engineer who writes on AI and developer tooling, frames the bind this replaces as a choice between requesting minimal permissions and breaking advanced use cases, or requesting everything and watching users bounce [18]. Marking a scope optional only escapes that bind if the agent checks the granted set before acting and stops cleanly when the authority is absent [17]. If it improvises instead, you have moved the failure from a screen the user was reading to a call they were not watching. Cloudflare's motivating case is concrete enough: an MCP server may request a broad permission set because an agent could in theory use all of it, while most users would not want an agent holding that much access [2]. An agent comparing inventory does not need to change prices, and one checking order status does not need to issue refunds [19].
Ranked by verification strength, evidence, and original report placement.
As Cloudflare puts it, an MCP server might request a broad set of permissions because in theory an agent could use all of them, while most users would not want an agent to have that much access.
Umesh Malik, a software engineer who writes on AI and developer tooling, says developers are left with two bad choices: request minimal permissions and break advanced use cases, or request everything and watch users bounce from the consent screen.
An agent that reads inventory to compare products does not need permission to change prices, one that checks order status does not need authority to issue refunds, and one that reads supplier records during research does not need payment access.
Cloudflare has added optional OAuth scopes, letting users deselect individual permissions on the consent screen instead of approving or denying an application's full request; client owners mark which scopes may be dropped, and Cloudflare names MCP servers as the motivating case.
Until now Cloudflare OAuth handled consent as all or nothing: a client could request a subset of its configured scopes, but once it had, the user could approve everything or deny.
Developers who wanted finer control built a custom scope-selection screen before the consent flow.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · September 2, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Agent Plugins 1.0.0 standardises file paths. Anthropic still owns the behaviour.1 distinct publisher
product
Teleport puts the developer's Linux desktop inside the audit trail, and takes the SSH keys with it1 distinct publisher
product
A 2x LLM bill is not a bug report: token spend is an observability problem1 distinct publisher
build
Grok 4.6 lands in Copilot two days after launch, and the model picker becomes a procurement problem1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Documented mechanics, one telling
The mechanics are checkable in a way most launch coverage isn't: a configuration snippet you can read, a named token-response field, and a stated per-flow evaluation rule. InfoQ also cross-checks the novelty claim against GitHub's, Google's and Microsoft's published behaviour and against RFC 6749 instead of taking Cloudflare's word. What holds the score down is that every fact about Cloudflare's implementation comes from Cloudflare through a single outlet, with no one reporting the feature working — or breaking — in a live integration.
Shipped, nobody using it yet
The feature exists and is opt-in — and opt-in is the whole problem for measuring uptake here. Not one application, MCP server or agent is named as having declared an optional scope. The million-plus authorizations Cloudflare cites describe its wider third-party OAuth surface since June, not this release, and the surrounding MCP and Azure DevOps developments show the ecosystem grappling with agent authority rather than adopting Cloudflare's answer to it.
Mildly oversold, and already discounted
Framing a consent-screen checkbox as an agent permissions advance stretches slightly — the grant still happens once, before the agent does anything, and RFC 6749 has permitted narrower tokens all along. But this reporting deflates its own subject: it says plainly that OAuth didn't change, that Cloudflare isn't first, and that the real addition is developer control over which permissions are droppable. The residual gap is the recommended-practice one, where the sample configuration holds a write scope mandatory while the accompanying advice says write access should be optional.
Vendor-shaped, competitor-adjacent
Cloudflare authored the mechanics, the guidance and the only usage figure, and benefits from being read as the platform taking agent permissions seriously — including from the observation that Microsoft's Entra-based MCP server can't connect the popular clients. The outside voice InfoQ quotes is a developer who writes about AI tooling, useful for framing the bind but not an independent check on the implementation. Working the other way: the release is free, opt-in, and matches what competitors already do, so there's little to sell here.
Firm on mechanics, thin on the world
How the feature works can be trusted at close to face value — it's documented, specific, and consistent with what the OAuth specification permits. What can't be trusted is anything about consequence: who turns it on, whether users actually decline scopes, whether integrations degrade gracefully or just 403. One outlet, one vendor, no field evidence, so confidence tracks the documentation rather than the outcome.