mirror of
https://github.com/mcp-use/mcp-use.git
synced 2026-09-14 18:06:01 +08:00
aca5f9c040
* feat: Add PRM in the metadata discovery * fix: fallback anyway to PRM * feat: Implement complete discovery logic * feat: Final implementation of CIMD * feat: Implement PKCE * feat: Add scope from WWW-Authenticate * feat: Add all URLs possible styles * feat: Update tests and example * docs: Update docs * fix: linting * docs: update API documentation * fix: correct typos in OAuth metadata and error messages - Updated the comment in ProtectedResourceMetadata to use the correct abbreviation (PRM). - Fixed a typo in the OAuthAuthenticationError message regarding code challenge support. - Corrected the comment for legacy client paths to use "pre-registered" instead of "pre-reggistered". * feat: restructure authentication documentation and add new methods - Updated the authentication section in to group authentication methods under a new Authentication category with an icon. - Removed the old file and replaced it with new documentation files for Bearer Token, Custom Auth, and OAuth 2.1. - Introduced an overview page for authentication methods, detailing usage and configuration for each method. - Enhanced security best practices and examples for each authentication type to improve clarity and usability. * refactor: improve debug logging for OAuth metadata discovery - Updated debug messages to provide clearer context by specifying the issuer or host being queried during OAuth and OpenID Connect metadata discovery. - Enhanced error logging to remove redundant information, focusing on the failure reason without repeating the URL. * fix: correct abbreviation in ProtectedResourceMetadata documentation - Updated the abbreviation from PRC to PRM in the ProtectedResourceMetadata section to ensure accuracy in the documentation. * fix(oauth): correct RFC 8414 well-known URL construction for path-based issuers The OAuth metadata discovery was incorrectly constructing .well-known URLs by appending to the issuer instead of inserting between host and path. RFC 8414 specifies that for an issuer like https://github.com/login/oauth, the .well-known URL should be: https://github.com/.well-known/oauth-authorization-server/login/oauth We were incorrectly building: https://github.com/login/oauth/.well-known/oauth-authorization-server This fix: - Implements correct RFC 8414 URL construction (insert between host/path) - Supports OpenID Connect style as fallback (append to issuer) - Removes GitHub-specific hardcode since discovery now works correctly - Adds documentation comments explaining the two standards Ref: https://www.rfc-editor.org/rfc/rfc8414.html#section-3 * chore: oauth examples * docs: enhance OAuth endpoint discovery documentation - Updated the OAuth documentation to clarify how `mcp-use` discovers OAuth endpoints using both OAuth 2.0 and OpenID Connect standards. - Added a table detailing the URL construction methods for each standard. - Included examples for better understanding and a note on fallback behavior when the issuer has no path. * response to bs codeql * fix: update API URL Updated the GitHub API URL in the configuration to the correct endpoint for OAuth operations. --------- Co-authored-by: Enrico Toniato <2827496+tonxxd@users.noreply.github.com> Co-authored-by: pietrozullo <pietro.zullo@gmail.com>
162 lines
3.9 KiB
Plaintext
162 lines
3.9 KiB
Plaintext
---
|
|
title: "Authentication Overview"
|
|
description: "mcp-use supports multiple authentication methods for MCP servers including OAuth 2.1, bearer tokens, and custom authentication."
|
|
icon: "key"
|
|
---
|
|
|
|
## Overview
|
|
|
|
MCP servers can require authentication to protect resources and control access. `mcp-use` handles authentication automatically based on your configuration.
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
A["auth: string"] --> Bearer["Bearer Token"]
|
|
B["auth: { }"] --> OAuth["OAuth 2.1"]
|
|
C["auth: httpx.Auth"] --> Custom["Custom Auth"]
|
|
|
|
Bearer --> R["Authorization: Bearer token"]
|
|
OAuth --> R
|
|
Custom --> R
|
|
```
|
|
|
|
## Choose Your Method
|
|
|
|
<CardGroup cols={1}>
|
|
<Card title="Bearer Token" icon="ticket" href="/python/client/authentication/bearer">
|
|
**Simplest option**
|
|
|
|
Use a static API key or token. Best for services that issue long-lived credentials.
|
|
|
|
```python
|
|
"auth": "sk-your-api-key"
|
|
```
|
|
</Card>
|
|
<Card title="OAuth 2.1" icon="shield-check" href="/python/client/authentication/oauth">
|
|
**MCP standard**
|
|
|
|
Full OAuth flow with automatic discovery, PKCE, and token refresh. Required by many MCP servers.
|
|
|
|
```python
|
|
"auth": { "scope": "read write" }
|
|
```
|
|
</Card>
|
|
<Card title="Custom Auth" icon="wrench" href="/python/client/authentication/custom">
|
|
**Full control**
|
|
|
|
Use any `httpx.Auth` object for Basic, Digest, or custom authentication schemes.
|
|
|
|
```python
|
|
"auth": BasicAuth("user", "pass")
|
|
```
|
|
</Card>
|
|
</CardGroup>
|
|
|
|
## Quick Start Examples
|
|
|
|
<Tabs>
|
|
<Tab title="OAuth (Auto)">
|
|
For servers with OAuth support, just provide the URL:
|
|
|
|
```python
|
|
from mcp_use import MCPClient
|
|
|
|
config = {
|
|
"mcpServers": {
|
|
"linear": {
|
|
"url": "https://mcp.linear.app/sse"
|
|
# OAuth discovery + DCR happens automatically
|
|
}
|
|
}
|
|
}
|
|
|
|
client = MCPClient(config=config)
|
|
```
|
|
|
|
`mcp-use` will:
|
|
1. Discover the authorization server
|
|
2. Register a client (or use CIMD/pre-registered credentials)
|
|
3. Open your browser for authorization
|
|
4. Store and refresh tokens automatically
|
|
</Tab>
|
|
<Tab title="OAuth (Pre-registered)">
|
|
For servers requiring manual OAuth app registration:
|
|
|
|
```python
|
|
config = {
|
|
"mcpServers": {
|
|
"github": {
|
|
"url": "https://api.githubcopilot.com/mcp/",
|
|
"auth": {
|
|
"client_id": "your-github-client-id",
|
|
"client_secret": "your-github-client-secret",
|
|
"scope": "repo",
|
|
"callback_port": 8080
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
</Tab>
|
|
<Tab title="Bearer Token">
|
|
For API keys or static tokens:
|
|
|
|
```python
|
|
import os
|
|
|
|
config = {
|
|
"mcpServers": {
|
|
"api": {
|
|
"url": "https://api.example.com/mcp/sse",
|
|
"auth": os.getenv("API_KEY")
|
|
}
|
|
}
|
|
}
|
|
```
|
|
</Tab>
|
|
<Tab title="No Auth">
|
|
For public servers:
|
|
|
|
```python
|
|
config = {
|
|
"mcpServers": {
|
|
"public": {
|
|
"url": "https://public.example.com/mcp/sse"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Token Storage
|
|
|
|
Authentication tokens are stored securely on disk:
|
|
|
|
```
|
|
~/.mcp_use/tokens/
|
|
├── {server}.json # Access tokens
|
|
└── registrations/
|
|
└── {server}_registration.json # OAuth client credentials
|
|
```
|
|
|
|
<Warning>
|
|
Add `~/.mcp_use/` to your `.gitignore` to avoid committing credentials.
|
|
</Warning>
|
|
|
|
## Debugging
|
|
|
|
Enable verbose logging to troubleshoot authentication:
|
|
|
|
```python
|
|
from mcp_use import set_debug
|
|
|
|
set_debug(2) # Shows full OAuth flow, discovery, and token exchange
|
|
```
|
|
|
|
## Security Best Practices
|
|
|
|
- **Environment variables** - Never hardcode credentials in source code
|
|
- **Token rotation** - Rotate long-lived tokens regularly
|
|
- **Minimal scopes** - Request only the permissions you need
|
|
- **HTTPS only** - All OAuth endpoints use HTTPS (except localhost callbacks)
|