Skip to main content
Glama

FastMCP OAuth Server

by jcamier
1
  • Apple
  • Linux

FastMCP OAuth Server with Auth0

A modular FastMCP server implementation with Auth0 OAuth 2.0 authentication

Features

  • 🔐 OAuth 2.0 Authentication with Auth0
  • 🛠️ FastMCP Integration for AI tool serving
  • 🔍 Debugging Support with health checks
  • 📊 Structured Logging throughout the application

Project Structure

mcp-oauth/ ├── server/ # FastMCP server (OAuth-secured) │ ├── app.py # Main server application │ ├── oauth.py # Auth0 OAuth provider │ ├── config.py # Configuration management │ └── exceptions.py # Custom exceptions ├── client/ # MCP client (OAuth-enabled) │ ├── client.py # Main client implementation │ ├── auth_handler.py # OAuth authentication handler │ └── cli.py # Command-line interface ├── demos/ # Usage demonstrations │ ├── basic_demo.py # Complete OAuth flow demo │ └── weather_demo.py # Weather tool demo ├── pyproject.toml # Project configuration and dependencies ├── .env # Environment variables (create from template below) └── README.md # This file

Quick Start

1. Install Dependencies

# Create virtual environment uv venv # Activate virtual environment source .venv/bin/activate # On macOS/Linux # .venv\Scripts\activate # On Windows # Install dependencies uv sync

2. Configure Auth0

  1. Create Auth0 Application:
    • Go to Auth0 Dashboard → Applications
    • Click "Create Application"
    • Create a Name and choose "Regular Web Application"
    • Add http://localhost:8080/callback to the Allowed Callback URL's on Settings tab
    • Note down: Domain, Client ID, Client Secret from your Settings tab
  2. Configure Callback URLs:
    http://localhost:8000/auth0/callback
  3. Configure Logout URLs:
    http://localhost:8000
  4. Create API (Optional):
    • Go to APIs → Create API
    • Set identifier (e.g., https://mcp-server.example.com)
    • This becomes your AUTH0_AUDIENCE

3. Environment Variables

Create a .env file in the project root using .env.example as a template:

# Auth0 Configuration (Required) AUTH0_DOMAIN=your-tenant.auth0.com AUTH0_CLIENT_ID=your_auth0_client_id_here AUTH0_CLIENT_SECRET=your_auth0_client_secret_here AUTH0_AUDIENCE=your_api_identifier_here # MCP Server Configuration MCP_HOST=localhost MCP_PORT=8000 MCP_DEBUG=false MCP_ISSUER_URL=http://localhost:8000 # OAuth Scopes Configuration DEFAULT_SCOPES=openid profile email REQUIRED_SCOPES=read:mcp write:mcp # Security Settings TOKEN_EXPIRY_SECONDS=3600 ENABLE_CLIENT_REGISTRATION=true

4. Run the Server

uv run python -m server

The server will start on http://localhost:8000

curl http://localhost:8000/health

5. Test with the Client

Interactive CLI:

uv run python -m client # Or: uv run python client/cli.py

Run Demos:

# Basic OAuth flow demo uv run python -m demos # Or: uv run python demos/basic_demo.py # Weather tool demo uv run python demos/weather_demo.py

Architecture Overview

Modular Design

This project demonstrates clean separation of concerns:

config.py - Configuration Management
  • Auth0Config: Auth0-specific settings with validation
  • MCPConfig: MCP server configuration
  • AppConfig: Combined application configuration
  • load_config(): Environment variable loading with defaults
oauth.py - OAuth Provider
  • Auth0OAuthProvider: Complete OAuth 2.0 implementation
  • Handles authorization flows, token exchange, and validation
  • Integrates with Auth0 APIs
  • Manages client registration and scopes
exceptions.py - Error Handling
  • MCPOAuthError: Base exception class
  • Auth0Error: Auth0-specific errors
  • TokenValidationError: Token-related errors
  • AuthorizationError: Authorization failures
app.py - Main Application
  • create_oauth_provider(): OAuth provider factory
  • create_mcp_server(): MCP server with tools
  • create_app(): FastAPI application setup
  • Route handlers and middleware configuration

API Endpoints

OAuth Endpoints

  • GET /.well-known/oauth-authorization-server - OAuth discovery
  • GET /auth0/callback - Auth0 callback handler

MCP Endpoints

  • POST /mcp - MCP protocol endpoint (requires authentication)

Utility Endpoints

  • GET /health - Health check
  • GET /debug/auth0 - Auth0 configuration debug (development only)

MCP Tools

The server includes example tools that require authentication:

get_weather(city: str)

Mock weather data for a given city.

get_user_info()

Returns current authenticated user information.

protected_action(action: str)

Demonstrates a protected action requiring authentication.

Usage Examples

Testing with MCP Inspector

# Install MCP Inspector npm install -g @modelcontextprotocol/inspector # Test the server npx @modelcontextprotocol/inspector http://localhost:8000/mcp

Testing with cURL

# Health check curl http://localhost:8000/health # Debug Auth0 configuration curl http://localhost:8000/debug/auth0 # OAuth discovery curl http://localhost:8000/.well-known/oauth-authorization-server

Development

Code Quality

The project follows Python best practices:

  • Type hints throughout the codebase
  • Docstrings for all classes and functions
  • Structured logging with appropriate levels
  • Error handling with custom exceptions
  • Configuration validation with clear error messages

Testing

# Install development dependencies uv sync --extra dev # Run tests (when implemented) uv run pytest tests/

Code Formatting

# Format code uv run black . # Sort imports uv run isort . # Lint with ruff uv run ruff check . uv run ruff format .

Production Considerations

Security

  1. Environment Variables: Never commit .env files
  2. CORS Configuration: Restrict allow_origins in production
  3. Token Storage: Replace in-memory storage with Redis/database
  4. HTTPS: Always use HTTPS in production
  5. Secrets Management: Use proper secret management systems

Scaling

  1. Database: Replace in-memory storage with persistent storage
  2. Caching: Add Redis for token caching
  3. Load Balancing: Configure for multiple instances
  4. Monitoring: Add application monitoring and metrics

Configuration

Update the following for production:

# In app.py - CORS configuration app.add_middleware( CORSMiddleware, allow_origins=["https://yourdomain.com"], # Restrict origins allow_credentials=True, allow_methods=["GET", "POST"], # Restrict methods allow_headers=["Authorization", "Content-Type"], # Restrict headers )

Troubleshooting

Common Issues

  1. Auth0 Configuration Errors
    • Verify callback URLs match exactly
    • Check Auth0 domain format (no https://)
    • Ensure client secret is correct
  2. Token Validation Failures
    • Check token expiration
    • Verify required scopes are granted
    • Ensure proper audience configuration
  3. CORS Issues
    • Update CORS configuration for your client domain
    • Check preflight request handling

Debug Mode

Enable debug mode for detailed logging:

MCP_DEBUG=true uv run python -m server

License

MIT License - see LICENSE file for details.

Support

For issues and questions:

Related MCP Servers

  • -
    security
    F
    license
    -
    quality
    A Model Context Protocol server implementation that enables connection between OpenAI APIs and MCP clients for coding assistance with features like CLI interaction, web API integration, and tool-based architecture.
    Last updated -
    33
    Python
    • Linux
    • Apple
  • A
    security
    F
    license
    A
    quality
    A server that enables AI to access external services through the Model Context Protocol, specifically integrating with an authentication system to obtain login tickets.
    Last updated -
    1
    TypeScript
  • -
    security
    F
    license
    -
    quality
    A Model Context Protocol server that requires user authentication via Auth0 before enabling secure API access on behalf of the authenticated user.
    Last updated -
    TypeScript
  • -
    security
    A
    license
    -
    quality
    A FastMCP-powered Model Context Protocol server for Google Ads API integration with automatic OAuth 2.0 authentication Connect Google Ads API directly to MCP Clients with seamless OAuth 2.0 authentication, automatic token refresh, GAQL querying, and keyword research capabilities.
    Last updated -
    27
    Python
    MIT License
    • Apple

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jcamier/mcp-oauth'

If you have feedback or need assistance with the MCP directory API, please join our Discord server