OAuth Scopes for MCP: Complete Guide
Authentication answers one question:
Who are you?
Authorization answers another:
What are you allowed to do?
OAuth Scopes are one of the primary mechanisms used to answer the second question.
Rather than giving every application unrestricted access, OAuth allows clients to request only the permissions they need. The Authorization Server grants those permissions by issuing an Access Token containing (or associated with) specific scopes, while the MCP server validates those scopes before executing protected operations.
This approach follows the principle of least privilege, reducing security risks and limiting the impact of compromised credentials.
Whether you're building an MCP server, integrating OAuth into an AI assistant, or deploying enterprise automation, understanding OAuth scopes is essential for designing secure authorization.
Quick Answer
OAuth scopes define the permissions an application requests when obtaining an Access Token. MCP servers validate those scopes before allowing access to protected tools and resources, ensuring clients receive only the minimum privileges required.
What Are OAuth Scopes?
An OAuth scope represents a specific permission or capability that an application wants to access.
Rather than granting unrestricted access, OAuth allows applications to request only a limited set of capabilities.
For example:
files:readfiles:writeissues:readrepositories:readuser:profile
A simplified authorization process looks like this:
OAuth Client
│
Request Scope
files:read
│
▼
Authorization Server
│
Grant Scope
│
▼
Access Token
The Access Token then represents the permissions that were granted during authorization.
Why MCP Uses OAuth Scopes
Remote MCP servers often expose many different capabilities.
For example, a documentation server might allow:
- searching documentation
- reading files
- updating pages
- publishing content
- deleting resources
Not every application should receive every permission.
Instead, OAuth scopes allow the Authorization Server to grant only the capabilities required for a specific task.
This minimizes unnecessary access while improving overall security.
The Principle of Least Privilege
One of the core security principles behind OAuth is least privilege.
Instead of granting every application full access to every protected resource, clients should request only the scopes required for their current task.
For example, if an AI assistant only needs to search documentation, it should not request permission to modify or delete documents.
Application
│
Needs:
✓ Read Documentation
✗ Delete Documentation
│
▼
Request:
docs:read
By limiting granted permissions, organizations reduce the potential impact of compromised Access Tokens while making authorization decisions easier to audit.
The MCP authorization specification explicitly recommends requesting only the scopes necessary for the requested operation.
Common OAuth Scope Examples
OAuth itself does not define standard scope names.
Instead, Authorization Servers define scopes appropriate for their own APIs and MCP servers.
Typical examples include:
| Scope | Description |
|---|---|
files:read | Read files |
files:write | Modify files |
repositories:read | Read repositories |
repositories:write | Update repositories |
issues:read | Read issues |
issues:write | Create or modify issues |
user:profile | Read user profile information |
admin | Administrative capabilities |
Different MCP servers may expose completely different scope names depending on the services they protect.
How Clients Request Scopes
During OAuth authorization, the client specifies which scopes it wants.
The Authorization Server evaluates that request and decides which scopes to grant.
A simplified flow looks like this:
OAuth Client
│
Request
files:read
files:write
│
▼
Authorization Server
│
Grant Approved Scopes
│
▼
Access Token
The granted scopes may be identical to the requested scopes, or they may be reduced depending on authorization policies.
Applications should never assume every requested scope will automatically be approved.
Discovering Available Scopes
Before requesting permissions, OAuth clients need to know which scopes an MCP server supports.
The MCP authorization model provides two primary discovery mechanisms.
Protected Resource Metadata
Remote MCP servers can publish metadata describing their OAuth configuration.
This metadata may include a scopes_supported field listing the scopes that clients are expected to request.
Protected Resource Metadata
│
├── authorization_servers
├── resource
└── scopes_supported
Using published metadata allows clients to request appropriate scopes without guessing or relying on hardcoded values.
WWW-Authenticate Challenges
If a request fails because additional permissions are required, the MCP server may return a WWW-Authenticate challenge indicating the required scope.
A simplified example:
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer
error="insufficient_scope",
scope="files:write"
Rather than failing permanently, the client can begin a new OAuth authorization flow requesting the additional scope.
This makes authorization adaptive while still following the principle of least privilege.
Step-Up Authorization
Applications do not always know every permission they will need when the user first signs in.
For that reason, MCP supports step-up authorization.
Instead of requesting broad permissions immediately, the client requests additional scopes only when new functionality becomes necessary.
Client
│
Request files:read
│
▼
Access Token
│
Read Files ✔
Write Files ✘
│
403 insufficient_scope
│
Request files:write
│
▼
New Access Token
This approach reduces unnecessary privileges while allowing applications to expand access incrementally as users perform new tasks.
It also improves user trust by avoiding requests for permissions that are never actually used.
Scope Validation
Receiving an Access Token does not automatically authorize every operation.
Before executing a protected tool or returning sensitive data, the MCP server validates whether the Access Token contains the required scopes.
A typical validation process looks like this:
Incoming Request
│
▼
Read Access Token
│
▼
Extract Granted Scopes
│
▼
Required Scope?
│
┌────┴────┐
│ │
Yes No
│ │
▼ ▼
Execute 403 Forbidden
Even if an Access Token is valid and unexpired, a request should still be denied if it lacks the necessary scope for the requested operation.
This separation between authentication and authorization is a fundamental principle of OAuth.
Scopes vs Permissions
Although these terms are often used interchangeably, they describe different concepts.
A scope represents a capability that an application requests during authorization.
A permission is the server's final authorization decision when a specific operation is performed.
| OAuth Scope | Permission |
|---|---|
| Requested by the client | Enforced by the MCP server |
| Granted during OAuth authorization | Evaluated during request processing |
| Represents requested capabilities | Determines whether an operation is allowed |
| OAuth concept | Authorization concept |
For example, an application may receive the files:write scope, but the MCP server could still prevent modifications to protected files based on organizational policies or additional access-control rules.
Scopes define what the application is allowed to request, while permissions determine whether a particular action is ultimately authorized.
Common Scope Errors
Most scope-related problems occur when an application requests too few permissions or attempts an operation outside the granted scopes.
HTTP 403 Forbidden
The most common response indicates that authentication succeeded, but the Access Token does not contain sufficient privileges.
A typical response might include:
HTTP/1.1 403 Forbidden
WWW-Authenticate: Bearer
error="insufficient_scope",
scope="files:write"
The response tells the client which additional scope is required.
Rather than requesting every available permission upfront, the client can begin a new authorization flow requesting only the missing scope.
Requesting Too Many Scopes
Applications should avoid requesting broad permissions "just in case."
For example:
Requested:
✓ files:read
✓ files:write
✓ admin
✓ delete
✓ manage-users
If the application only needs to read documentation, requesting administrative scopes unnecessarily increases risk and may cause users to deny authorization.
Assuming Granted Scopes
Clients should never assume that every requested scope has been approved.
Authorization Servers may:
- deny specific scopes
- reduce requested permissions
- apply organizational policies
- require additional approval
Applications should always work with the scopes that were actually granted.
Enterprise MCP Deployments
Large organizations often protect many independent MCP servers.
Different services expose different capabilities, making OAuth scopes an important authorization mechanism.
For example:
Documentation MCP
├── docs:read
└── docs:write
Git MCP
├── repos:read
└── repos:write
Issue Tracker MCP
├── issues:read
└── issues:write
Rather than issuing one unrestricted Access Token, organizations can grant only the permissions needed for each workflow.
This approach:
- limits accidental access
- reduces attack surface
- simplifies auditing
- improves compliance
- supports least privilege
Security Best Practices
OAuth scopes should be designed with security in mind.
Request Only What You Need
Applications should request the minimum scopes necessary for the current task.
Avoid requesting administrative or write permissions unless they are genuinely required.
Prefer Step-Up Authorization
Instead of requesting every permission during the initial login, request additional scopes only when users attempt actions that require them.
This improves both security and user trust.
Keep Scope Definitions Granular
Smaller, well-defined scopes provide more precise authorization than broad, catch-all permissions.
For example:
files:readfiles:write
are preferable to a single:
files:*
when finer control is possible.
Validate Scopes on Every Request
Servers should validate required scopes for every protected operation rather than assuming previous requests established sufficient authorization.
Each request should be evaluated independently.
Want to analyze your API security?
Import your OpenAPI spec and generate a Security Report automatically.
Conclusion
OAuth scopes provide fine-grained authorization for remote MCP servers by defining exactly which capabilities an application may access.
Rather than granting unrestricted permissions, clients request only the scopes they need, Authorization Servers approve appropriate scopes, and MCP servers validate those scopes before executing protected operations.
Combined with Access Tokens, PKCE, step-up authorization, and the principle of least privilege, OAuth scopes form one of the most important security mechanisms in modern MCP deployments.
Continue learning:
- OAuth Authorization Code for MCP — Learn how scopes are granted during user authorization.
- OAuth Access Tokens for MCP — Understand how granted scopes travel with Access Tokens.
- OAuth Client Credentials for MCP — Learn how machine-to-machine applications use OAuth scopes.
- OAuth Bearer Tokens for MCP — Explore how Access Tokens are transmitted securely.
- OAuth PKCE for MCP — Protect delegated authorization against interception attacks.
- MCP OAuth — Understand the complete OAuth authorization model for remote MCP servers.