# ============================================ # OAUTH TOKEN EXCHANGE QUICK START (Advanced) # ============================================ # Advanced OAuth deployment with RFC 8693 token exchange # Use for: Deployments requiring separate MCP and Nextcloud tokens # Features: Dual-audience tokens, enhanced security boundaries # # Copy this file to .env and configure # ===== REQUIRED SETTINGS ===== # Your Nextcloud instance URL (without trailing slash) NEXTCLOUD_HOST=https://nextcloud.example.com # Enable token exchange mode ENABLE_TOKEN_EXCHANGE=true # ===== REQUIRED: LEAVE USERNAME/PASSWORD EMPTY ===== # OAuth mode activates when these are NOT set NEXTCLOUD_USERNAME= NEXTCLOUD_PASSWORD= # ===== OPTIONAL: EXPLICIT MODE DECLARATION ===== # Recommended for clarity MCP_DEPLOYMENT_MODE=oauth_token_exchange # ===== OPTIONAL: PRE-REGISTERED OAUTH CLIENT ===== # If you pre-register the OAuth client instead of using DCR: #NEXTCLOUD_OIDC_CLIENT_ID=your-client-id #NEXTCLOUD_OIDC_CLIENT_SECRET=your-client-secret # MCP Server URL (for OAuth redirects) NEXTCLOUD_MCP_SERVER_URL=http://localhost:8000 # ===== OPTIONAL: TOKEN EXCHANGE TUNING ===== # Cache TTL for exchanged tokens (default: 300 seconds = 5 minutes) TOKEN_EXCHANGE_CACHE_TTL=300 # ===== OPTIONAL: SEMANTIC SEARCH ===== # AI-powered semantic search with automatic background operation setup # # Note: ENABLE_SEMANTIC_SEARCH automatically enables background operations # in token exchange mode, just like in OAuth single-audience mode # ENABLE_SEMANTIC_SEARCH=true # Vector Database (required for semantic search) QDRANT_URL=http://qdrant:6333 # Embedding Provider (required for semantic search) OLLAMA_BASE_URL=http://ollama:11434 OLLAMA_EMBEDDING_MODEL=nomic-embed-text # Token Storage (required for background operations - auto-enabled by semantic search) # Generate encryption key: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" TOKEN_ENCRYPTION_KEY=your-encryption-key-here TOKEN_STORAGE_DB=/app/data/tokens.db # ===== OPTIONAL: DOCUMENT PROCESSING ===== # Extract text from PDFs, images, DOCX for semantic search #ENABLE_DOCUMENT_PROCESSING=true #ENABLE_UNSTRUCTURED=true #UNSTRUCTURED_API_URL=http://unstructured:8000 # ===== TOKEN EXCHANGE MODE EXPLANATION ===== # In this mode: # 1. MCP clients authenticate with tokens scoped to "mcp-server" audience # 2. Server exchanges MCP tokens for Nextcloud tokens on each request # 3. Provides clear separation between MCP session and Nextcloud access # 4. Enables fine-grained token lifecycle management # # When to use: # - Strict security requirements (separate token contexts) # - Complex multi-service architectures # - Need independent token expiration policies # # When NOT to use: # - Simple deployments (use oauth_single_audience instead) # - High-performance requirements (token exchange adds latency) # For more configuration options, see env.sample