From 9ef9fff2b0c3f1a44b62bf1a246795dfc710530a Mon Sep 17 00:00:00 2001 From: Chris Coutinho Date: Mon, 13 Oct 2025 18:08:01 +0200 Subject: [PATCH] docs: Update Docs --- docs/running.md | 440 +++++++++++++++++++++++++++++++++ docs/troubleshooting.md | 531 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 971 insertions(+) create mode 100644 docs/running.md create mode 100644 docs/troubleshooting.md diff --git a/docs/running.md b/docs/running.md new file mode 100644 index 0000000..5c91b50 --- /dev/null +++ b/docs/running.md @@ -0,0 +1,440 @@ +# Running the Server + +This guide covers different ways to start and run the Nextcloud MCP server. + +## Prerequisites + +Before running the server: + +1. **Install the server** - See [Installation Guide](installation.md) +2. **Configure environment** - See [Configuration Guide](configuration.md) +3. **Set up authentication** - See [OAuth Setup](oauth-setup.md) or [Authentication](authentication.md) + +--- + +## Quick Start + +Load your environment variables and start the server: + +```bash +# Load environment variables from .env +export $(grep -v '^#' .env | xargs) + +# Start the server +uv run nextcloud-mcp-server +``` + +The server will start on `http://127.0.0.1:8000` by default. + +--- + +## Running Locally + +### Method 1: Using nextcloud-mcp-server CLI (Recommended) + +The CLI provides a simple interface with built-in defaults: + +#### OAuth Mode + +```bash +# Auto-detected when NEXTCLOUD_USERNAME/PASSWORD not set +uv run nextcloud-mcp-server + +# Explicitly force OAuth mode +uv run nextcloud-mcp-server --oauth + +# OAuth with custom host and port +uv run nextcloud-mcp-server --oauth --host 0.0.0.0 --port 8080 + +# OAuth with pre-configured client +uv run nextcloud-mcp-server --oauth \ + --oauth-client-id abc123 \ + --oauth-client-secret xyz789 + +# OAuth with specific apps only +uv run nextcloud-mcp-server --oauth \ + --enable-app notes \ + --enable-app calendar +``` + +#### BasicAuth Mode (Legacy) + +```bash +# Auto-detected when NEXTCLOUD_USERNAME/PASSWORD are set +uv run nextcloud-mcp-server + +# Explicitly force BasicAuth mode +uv run nextcloud-mcp-server --no-oauth + +# BasicAuth with specific apps +uv run nextcloud-mcp-server --no-oauth \ + --enable-app notes \ + --enable-app webdav +``` + +### Method 2: Using uvicorn + +For more control over server options (workers, reload, etc.): + +```bash +# Load environment variables +export $(grep -v '^#' .env | xargs) + +# Run with uvicorn +uv run uvicorn nextcloud_mcp_server.app:get_app \ + --factory \ + --host 127.0.0.1 \ + --port 8000 \ + --reload # Enable auto-reload for development +``` + +See all uvicorn options at [https://www.uvicorn.org/settings/](https://www.uvicorn.org/settings/) + +### Method 3: Using Python Module + +```bash +# Load environment variables +export $(grep -v '^#' .env | xargs) + +# Run as Python module +python -m nextcloud_mcp_server.app --oauth --port 8000 +``` + +--- + +## Running with Docker + +### Basic Docker Run + +```bash +# OAuth mode +docker run -p 127.0.0.1:8000:8000 --env-file .env --rm \ + ghcr.io/cbcoutinho/nextcloud-mcp-server:latest --oauth + +# BasicAuth mode +docker run -p 127.0.0.1:8000:8000 --env-file .env --rm \ + ghcr.io/cbcoutinho/nextcloud-mcp-server:latest +``` + +### Docker with Persistent OAuth Storage + +```bash +docker run -p 127.0.0.1:8000:8000 --env-file .env \ + -v $(pwd)/.oauth:/app/.oauth \ + --rm ghcr.io/cbcoutinho/nextcloud-mcp-server:latest --oauth +``` + +### Docker Compose + +Create `docker-compose.yml`: + +```yaml +version: '3.8' + +services: + mcp: + image: ghcr.io/cbcoutinho/nextcloud-mcp-server:latest + command: --oauth --enable-app notes --enable-app calendar + ports: + - "127.0.0.1:8000:8000" + env_file: + - .env + volumes: + - ./oauth-storage:/app/.oauth + restart: unless-stopped +``` + +Start the service: + +```bash +# Start in foreground +docker-compose up + +# Start in background +docker-compose up -d + +# View logs +docker-compose logs -f + +# Stop the service +docker-compose down +``` + +--- + +## Server Options + +### Host and Port + +```bash +# Bind to all interfaces (accessible from network) +uv run nextcloud-mcp-server --host 0.0.0.0 --port 8000 + +# Bind to localhost only (default, more secure) +uv run nextcloud-mcp-server --host 127.0.0.1 --port 8000 + +# Use a different port +uv run nextcloud-mcp-server --port 8080 +``` + +**Security Note:** Using `--host 0.0.0.0` exposes the server to your network. Only use this if you understand the security implications. + +### Transport Protocols + +The server supports multiple MCP transport protocols: + +```bash +# Streamable HTTP (recommended) +uv run nextcloud-mcp-server --transport streamable-http + +# SSE - Server-Sent Events (default, deprecated) +uv run nextcloud-mcp-server --transport sse + +# HTTP +uv run nextcloud-mcp-server --transport http +``` + +> [!WARNING] +> SSE transport is deprecated and will be removed in a future version of the MCP spec. Please migrate to `streamable-http`. + +### Logging + +```bash +# Set log level (critical, error, warning, info, debug, trace) +uv run nextcloud-mcp-server --log-level debug + +# Production: use warning or error +uv run nextcloud-mcp-server --log-level warning +``` + +### Selective App Enablement + +By default, all supported Nextcloud apps are enabled. You can enable specific apps only: + +```bash +# Available apps: notes, tables, webdav, calendar, contacts, deck + +# Enable all apps (default) +uv run nextcloud-mcp-server + +# Enable only Notes +uv run nextcloud-mcp-server --enable-app notes + +# Enable multiple apps +uv run nextcloud-mcp-server \ + --enable-app notes \ + --enable-app calendar \ + --enable-app contacts + +# Enable only WebDAV for file operations +uv run nextcloud-mcp-server --enable-app webdav +``` + +**Use cases:** +- Reduce memory usage and startup time +- Limit functionality for security/organizational reasons +- Test specific app integrations +- Run lightweight instances with only needed features + +--- + +## Development Mode + +For active development with auto-reload: + +```bash +# Using uvicorn with reload +uv run uvicorn nextcloud_mcp_server.app:get_app \ + --factory \ + --reload \ + --host 127.0.0.1 \ + --port 8000 \ + --log-level debug +``` + +Or use the CLI with reload flag: + +```bash +uv run nextcloud-mcp-server --reload --log-level debug +``` + +--- + +## Connecting to the Server + +### Using MCP Inspector + +MCP Inspector is a browser-based tool for testing MCP servers: + +```bash +# Start MCP Inspector +uv run mcp dev + +# In the browser: +# 1. Enter server URL: http://localhost:8000 +# 2. Complete OAuth flow (if using OAuth) +# 3. Explore tools and resources +``` + +### Using MCP Clients + +MCP clients (like Claude Desktop, LLM IDEs) can connect to your server: + +1. Configure the client with your server URL +2. Complete OAuth authentication (if enabled) +3. Start interacting with Nextcloud through the LLM + +--- + +## Verifying Server Status + +### Check Server Health + +```bash +# Test if server is responding +curl http://localhost:8000/health + +# Expected response: HTTP 200 OK +``` + +### Check OAuth Configuration + +Look for these log messages on startup: + +**OAuth mode:** +``` +INFO OAuth mode detected (NEXTCLOUD_USERNAME/PASSWORD not set) +INFO Configuring MCP server for OAuth mode +INFO OIDC discovery successful +INFO OAuth client ready: ... +INFO OAuth initialization complete +``` + +**BasicAuth mode:** +``` +INFO BasicAuth mode detected (NEXTCLOUD_USERNAME/PASSWORD set) +INFO Initializing Nextcloud client with BasicAuth +``` + +--- + +## Process Management + +### Running as a Background Service + +#### Using systemd (Linux) + +Create `/etc/systemd/system/nextcloud-mcp.service`: + +```ini +[Unit] +Description=Nextcloud MCP Server +After=network.target + +[Service] +Type=simple +User=your-user +WorkingDirectory=/path/to/nextcloud-mcp-server +EnvironmentFile=/path/to/.env +ExecStart=/path/to/uv run nextcloud-mcp-server --oauth +Restart=on-failure +RestartSec=10 + +[Install] +WantedBy=multi-user.target +``` + +Enable and start: + +```bash +sudo systemctl daemon-reload +sudo systemctl enable nextcloud-mcp +sudo systemctl start nextcloud-mcp +sudo systemctl status nextcloud-mcp +``` + +#### Using Docker Compose + +See [Docker Compose section](#docker-compose) above - includes `restart: unless-stopped`. + +### Monitoring Logs + +```bash +# Local installation with systemd +sudo journalctl -u nextcloud-mcp -f + +# Docker +docker logs -f + +# Docker Compose +docker-compose logs -f mcp +``` + +--- + +## Performance Tuning + +### Multiple Workers + +For production deployments with higher load: + +```bash +# Using CLI (if supported) +uv run nextcloud-mcp-server --workers 4 + +# Using uvicorn +uv run uvicorn nextcloud_mcp_server.app:get_app \ + --factory \ + --workers 4 \ + --host 0.0.0.0 \ + --port 8000 +``` + +### Production Settings + +```bash +# Recommended production configuration +uv run nextcloud-mcp-server \ + --oauth \ + --host 127.0.0.1 \ + --port 8000 \ + --log-level warning \ + --transport streamable-http \ + --workers 2 +``` + +--- + +## Troubleshooting + +### Server won't start + +Check logs for errors: +```bash +uv run nextcloud-mcp-server --log-level debug +``` + +Common issues: +- Environment variables not loaded - See [Configuration](configuration.md#loading-environment-variables) +- Port already in use - Try a different port with `--port` +- OAuth configuration errors - See [Troubleshooting](troubleshooting.md) + +### Can't connect to server + +1. Verify server is running: `curl http://localhost:8000/health` +2. Check firewall settings +3. Verify host binding (use `0.0.0.0` to allow network access) +4. Check OAuth authentication if enabled + +### OAuth authentication fails + +See [Troubleshooting OAuth](troubleshooting.md) for detailed OAuth troubleshooting. + +--- + +## See Also + +- [Configuration Guide](configuration.md) - Environment variables +- [OAuth Setup](oauth-setup.md) - OAuth authentication setup +- [Troubleshooting](troubleshooting.md) - Common issues and solutions +- [Installation](installation.md) - Installing the server diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md new file mode 100644 index 0000000..31ffb96 --- /dev/null +++ b/docs/troubleshooting.md @@ -0,0 +1,531 @@ +# Troubleshooting + +This guide covers common issues and solutions for the Nextcloud MCP server. + +## OAuth Issues + +### Issue: "OAuth mode requires NEXTCLOUD_HOST environment variable" + +**Cause:** The `NEXTCLOUD_HOST` environment variable is not set or empty. + +**Solution:** + +```bash +# Ensure NEXTCLOUD_HOST is set in your .env file +echo "NEXTCLOUD_HOST=https://your.nextcloud.instance.com" >> .env + +# Load environment variables +export $(grep -v '^#' .env | xargs) + +# Verify it's set +echo $NEXTCLOUD_HOST +``` + +--- + +### Issue: "OAuth mode requires either client credentials OR dynamic client registration" + +**Cause:** The Nextcloud OIDC app either: +1. Is not installed +2. Doesn't have dynamic client registration enabled +3. Isn't providing a registration endpoint + +**Solution:** + +**Option 1: Enable dynamic client registration** + +1. Verify OIDC app is installed: + - Navigate to Nextcloud **Apps** → **Security** + - Install "OpenID Connect user backend" if not present + +2. Enable dynamic client registration: + - Go to **Settings** → **OIDC** (Administration) + - Enable "Allow dynamic client registration" + +3. Verify the registration endpoint exists: + ```bash + curl https://your.nextcloud.instance.com/.well-known/openid-configuration | jq '.registration_endpoint' + # Should output: "https://your.nextcloud.instance.com/apps/oidc/register" + ``` + +**Option 2: Provide pre-configured credentials** + +Register a client and add credentials to `.env`: + +```bash +# On your Nextcloud server +php occ oidc:create \ + --name="Nextcloud MCP Server" \ + --type=confidential \ + --redirect-uri="http://localhost:8000/oauth/callback" + +# Add to .env +echo "NEXTCLOUD_OIDC_CLIENT_ID=" >> .env +echo "NEXTCLOUD_OIDC_CLIENT_SECRET=" >> .env +``` + +See [OAuth Setup Guide](oauth-setup.md) for detailed instructions. + +--- + +### Issue: "Stored client has expired" + +**Cause:** Dynamically registered OAuth clients expire (default: 1 hour). + +**Solution:** + +**Option 1: Restart the server** (automatic re-registration) + +```bash +# Server checks credentials at startup and re-registers if expired +uv run nextcloud-mcp-server --oauth +``` + +**Option 2: Use pre-configured credentials** (recommended for production) + +```bash +# Register permanent client via Nextcloud CLI +php occ oidc:create \ + --name="Nextcloud MCP Server" \ + --type=confidential \ + --redirect-uri="http://localhost:8000/oauth/callback" + +# Add to .env +NEXTCLOUD_OIDC_CLIENT_ID= +NEXTCLOUD_OIDC_CLIENT_SECRET= +``` + +**Option 3: Increase expiration time** + +```bash +# Via Nextcloud occ command (default: 3600 seconds) +php occ config:app:set oidc expire_time --value "86400" # 24 hours +``` + +--- + +### Issue: "HTTP 401 Unauthorized" when calling Nextcloud APIs + +**Cause:** OAuth Bearer tokens may not work with certain Nextcloud endpoints due to session handling in the CORS middleware. + +**Background:** The `user_oidc` app's CORS middleware interferes with Bearer token authentication for non-OCS endpoints (like Notes API). This affects app-specific APIs but not OCS APIs. + +**Solution:** + +A patch for the `user_oidc` app is required to fix Bearer token support. See [oauth2-bearer-token-session-issue.md](oauth2-bearer-token-session-issue.md) for: +- Detailed explanation of the issue +- Patch to apply to the `user_oidc` app +- Link to upstream pull request + +**Affected endpoints:** +- Notes API (`/apps/notes/api/`) +- Other app-specific endpoints + +**Unaffected endpoints:** +- OCS APIs (`/ocs/v2.php/`) +- Capabilities endpoint + +--- + +### Issue: "Permission denied" when reading/writing OAuth client credentials file + +**Cause:** The server cannot access the OAuth client storage file (default: `.nextcloud_oauth_client.json`). + +**Solution:** + +```bash +# Check file permissions +ls -la .nextcloud_oauth_client.json + +# Fix file permissions (should be 0600 - owner read/write only) +chmod 600 .nextcloud_oauth_client.json + +# Ensure the directory is writable +chmod 755 $(dirname .nextcloud_oauth_client.json) + +# If the file doesn't exist, ensure the directory is writable so it can be created +mkdir -p $(dirname .nextcloud_oauth_client.json) +``` + +--- + +### Issue: "OIDC discovery failed" or "Cannot reach OIDC discovery endpoint" + +**Cause:** The server cannot reach the Nextcloud OIDC discovery endpoint. + +**Solution:** + +1. Verify the Nextcloud URL is correct: + ```bash + echo $NEXTCLOUD_HOST + # Should be the full URL: https://your.nextcloud.instance.com + ``` + +2. Test the discovery endpoint manually: + ```bash + curl https://your.nextcloud.instance.com/.well-known/openid-configuration + # Should return JSON with OIDC configuration + ``` + +3. Check network connectivity: + ```bash + ping your.nextcloud.instance.com + ``` + +4. Verify OIDC app is installed and enabled in Nextcloud + +5. Check firewall rules if using Docker + +--- + +### Switching Between OAuth and BasicAuth + +#### To switch from BasicAuth to OAuth: + +```bash +# 1. Remove or comment out USERNAME/PASSWORD in .env +sed -i 's/^NEXTCLOUD_USERNAME/#NEXTCLOUD_USERNAME/' .env +sed -i 's/^NEXTCLOUD_PASSWORD/#NEXTCLOUD_PASSWORD/' .env + +# 2. Ensure NEXTCLOUD_HOST is set +grep NEXTCLOUD_HOST .env + +# 3. Restart server with OAuth +export $(grep -v '^#' .env | xargs) +uv run nextcloud-mcp-server --oauth +``` + +#### To switch from OAuth to BasicAuth: + +```bash +# 1. Add USERNAME/PASSWORD to .env +echo "NEXTCLOUD_USERNAME=your-username" >> .env +echo "NEXTCLOUD_PASSWORD=your-password" >> .env + +# 2. Restart server (BasicAuth auto-detected, or use --no-oauth) +export $(grep -v '^#' .env | xargs) +uv run nextcloud-mcp-server --no-oauth +``` + +--- + +## Configuration Issues + +### Issue: Environment variables not loaded + +**Cause:** Environment variables from `.env` file are not loaded into the shell. + +**Solution:** + +**On Linux/macOS:** +```bash +# Load all variables from .env +export $(grep -v '^#' .env | xargs) + +# Verify variables are set +env | grep NEXTCLOUD +``` + +**On Windows (PowerShell):** +```powershell +# Load variables from .env +Get-Content .env | ForEach-Object { + if ($_ -match '^\s*([^#][^=]*)\s*=\s*(.*)$') { + [Environment]::SetEnvironmentVariable($matches[1].Trim(), $matches[2].Trim(), "Process") + } +} + +# Verify variables are set +Get-ChildItem Env:NEXTCLOUD* +``` + +**With Docker:** +```bash +# Docker automatically loads .env when using --env-file +docker run -p 127.0.0.1:8000:8000 --env-file .env --rm \ + ghcr.io/cbcoutinho/nextcloud-mcp-server:latest +``` + +--- + +### Issue: ".env file not found" + +**Cause:** The `.env` file doesn't exist or is in the wrong location. + +**Solution:** + +```bash +# Create .env from sample +cp env.sample .env + +# Edit with your Nextcloud details +nano .env # or vim, code, etc. + +# Ensure you're in the correct directory when running commands +pwd # Should be in the project directory containing .env +``` + +--- + +### Issue: "Invalid Nextcloud credentials" + +**Cause:** BasicAuth credentials are incorrect or the app password has been revoked. + +**Solution:** + +1. **Verify username:** + ```bash + # Username should match your Nextcloud login + echo $NEXTCLOUD_USERNAME + ``` + +2. **Generate a new app password:** + - Log in to Nextcloud + - Go to **Settings** → **Security** + - Under "Devices & sessions", create a new app password + - Update `.env` with the new password + +3. **Test credentials manually:** + ```bash + curl -u "$NEXTCLOUD_USERNAME:$NEXTCLOUD_PASSWORD" \ + "$NEXTCLOUD_HOST/ocs/v2.php/cloud/capabilities" \ + -H "OCS-APIRequest: true" + # Should return XML with capabilities + ``` + +--- + +## Server Issues + +### Issue: "Address already in use" / Port conflict + +**Cause:** Another process is using port 8000. + +**Solution:** + +**Option 1: Use a different port** +```bash +uv run nextcloud-mcp-server --port 8080 +``` + +**Option 2: Find and kill the process using the port** +```bash +# On Linux/macOS +lsof -ti:8000 | xargs kill -9 + +# On Windows +netstat -ano | findstr :8000 +taskkill /PID /F +``` + +**Option 3: Stop other MCP server instances** +```bash +# Check for running instances +ps aux | grep nextcloud-mcp-server + +# Kill specific process +kill +``` + +--- + +### Issue: Server starts but can't connect + +**Cause:** Server is bound to localhost only, or firewall is blocking connections. + +**Solution:** + +1. **Check server binding:** + ```bash + # Bind to all interfaces to allow network access + uv run nextcloud-mcp-server --host 0.0.0.0 --port 8000 + ``` + +2. **Test connectivity:** + ```bash + # Test from same machine + curl http://localhost:8000/health + + # Test from network (if using --host 0.0.0.0) + curl http://:8000/health + ``` + +3. **Check firewall:** + ```bash + # Linux (ufw) + sudo ufw allow 8000/tcp + + # Linux (firewalld) + sudo firewall-cmd --add-port=8000/tcp --permanent + sudo firewall-cmd --reload + ``` + +--- + +### Issue: Server crashes or restarts frequently + +**Cause:** Various issues including memory limits, uncaught exceptions, or OAuth token expiration. + +**Solution:** + +1. **Check logs with debug level:** + ```bash + uv run nextcloud-mcp-server --log-level debug + ``` + +2. **Monitor resource usage:** + ```bash + # Check memory and CPU + top -p $(pgrep -f nextcloud-mcp-server) + ``` + +3. **Use process manager for automatic restart:** + ```bash + # With systemd (see Running guide for full config) + sudo systemctl restart nextcloud-mcp + + # With Docker Compose (includes restart: unless-stopped) + docker-compose up -d + ``` + +4. **Check for OAuth credential expiration** (if using dynamic registration): + - See ["Stored client has expired"](#issue-stored-client-has-expired) above + +--- + +## Connection Issues + +### Issue: MCP client can't authenticate + +**Cause:** OAuth flow failing or credentials invalid. + +**Solution:** + +**For OAuth:** +1. Verify OAuth is configured correctly: + ```bash + uv run nextcloud-mcp-server --oauth --log-level debug + # Look for "OAuth initialization complete" + ``` + +2. Check that OIDC app is accessible: + ```bash + curl https://your.nextcloud.instance.com/.well-known/openid-configuration + ``` + +3. Verify MCP_SERVER_URL matches your setup: + ```bash + echo $NEXTCLOUD_MCP_SERVER_URL + # Should match the URL clients use to connect + ``` + +**For BasicAuth:** +1. Verify credentials work: + ```bash + curl -u "$NEXTCLOUD_USERNAME:$NEXTCLOUD_PASSWORD" \ + "$NEXTCLOUD_HOST/ocs/v2.php/cloud/capabilities" \ + -H "OCS-APIRequest: true" + ``` + +--- + +### Issue: Tools return errors or don't work + +**Cause:** Missing Nextcloud apps, incorrect permissions, or API issues. + +**Solution:** + +1. **Verify required Nextcloud apps are installed:** + - Notes: Install "Notes" app + - Calendar: Ensure CalDAV is enabled + - Contacts: Ensure CardDAV is enabled + - Deck: Install "Deck" app + +2. **Check user permissions:** + - Ensure the authenticated user has access to the resources + - Check sharing permissions for shared resources + +3. **Test API directly:** + ```bash + # Test Notes API + curl -u "$NEXTCLOUD_USERNAME:$NEXTCLOUD_PASSWORD" \ + "$NEXTCLOUD_HOST/apps/notes/api/v1/notes" + + # Test with OAuth Bearer token + curl -H "Authorization: Bearer $TOKEN" \ + "$NEXTCLOUD_HOST/apps/notes/api/v1/notes" + ``` + +4. **Check server logs for specific errors:** + ```bash + uv run nextcloud-mcp-server --log-level debug + ``` + +--- + +## Getting Help + +If you continue to experience issues: + +### 1. Enable Debug Logging + +```bash +uv run nextcloud-mcp-server --log-level debug +``` + +Review the logs for specific error messages. + +### 2. Verify OIDC Configuration (OAuth mode) + +```bash +# Check OIDC discovery +curl https://your.nextcloud.instance.com/.well-known/openid-configuration + +# Check registration endpoint exists +curl https://your.nextcloud.instance.com/.well-known/openid-configuration | jq '.registration_endpoint' +``` + +### 3. Test Nextcloud API Access + +```bash +# Test OCS API (should work with OAuth) +curl -H "Authorization: Bearer $TOKEN" \ + "$NEXTCLOUD_HOST/ocs/v2.php/cloud/capabilities?format=json" \ + -H "OCS-APIRequest: true" + +# Test app API (may need patch - see oauth2-bearer-token-session-issue.md) +curl -H "Authorization: Bearer $TOKEN" \ + "$NEXTCLOUD_HOST/apps/notes/api/v1/notes" +``` + +### 4. Check Versions + +```bash +# MCP Server version +uv run nextcloud-mcp-server --version + +# Python version +python3 --version + +# Nextcloud version (check in admin panel) +``` + +### 5. Open an Issue + +If problems persist, open an issue on the [GitHub repository](https://github.com/cbcoutinho/nextcloud-mcp-server/issues) with: + +- **Server logs** (with `--log-level debug`) +- **Nextcloud version** +- **OIDC app version** (if using OAuth) +- **Error messages** +- **Steps to reproduce** +- **Environment details** (OS, Python version, Docker vs local) + +--- + +## See Also + +- [OAuth Setup Guide](oauth-setup.md) - OAuth configuration +- [Configuration](configuration.md) - Environment variables +- [Running the Server](running.md) - Server options +- [OAuth Bearer Token Issue](oauth2-bearer-token-session-issue.md) - Required patch