{"id":30444452,"url":"https://github.com/icanhasjonas/run-claude-docker","last_synced_at":"2025-08-30T03:12:51.118Z","repository":{"id":309803323,"uuid":"1037568791","full_name":"icanhasjonas/run-claude-docker","owner":"icanhasjonas","description":"Run claude code in somewhat safe and isolated yolo mode","archived":false,"fork":false,"pushed_at":"2025-08-14T21:01:05.000Z","size":208,"stargazers_count":29,"open_issues_count":0,"forks_count":4,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-23T10:05:01.249Z","etag":null,"topics":["claude","claude-code","docker"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/icanhasjonas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-13T19:19:03.000Z","updated_at":"2025-08-21T12:08:59.000Z","dependencies_parsed_at":"2025-08-13T23:16:06.780Z","dependency_job_id":"269d51d2-b665-4b84-aa8e-6cb5368f67e7","html_url":"https://github.com/icanhasjonas/run-claude-docker","commit_stats":null,"previous_names":["icanhasjonas/run-claude-docker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/icanhasjonas/run-claude-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icanhasjonas%2Frun-claude-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icanhasjonas%2Frun-claude-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icanhasjonas%2Frun-claude-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icanhasjonas%2Frun-claude-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/icanhasjonas","download_url":"https://codeload.github.com/icanhasjonas/run-claude-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/icanhasjonas%2Frun-claude-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272797746,"owners_count":24994643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-30T02:00:09.474Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","claude-code","docker"],"created_at":"2025-08-23T10:02:15.988Z","updated_at":"2025-08-30T03:12:51.101Z","avatar_url":"https://github.com/icanhasjonas.png","language":"Shell","funding_links":[],"categories":["Tooling 🧰","AI Coding Agents","Tools \u0026 Utilities","Cloud \u0026 DevOps"],"sub_categories":["General","Claude Code"],"readme":"# Claude Code Docker Runner\n\nRun claude code in somewhat safe and isolated yolo mode\n\n## Features\n\n- 🚀 **Standalone Script**: Single file contains everything - Dockerfile, MCP servers, configuration\n- 🤖 **Pre-configured MCP Servers**: Unsplash, Context7, and Playwright ready to use\n- 🔧 **Auto-build**: Automatically builds Docker image if it doesn't exist\n- 🔒 **Secure**: Host system protected by Docker boundaries with read-only mounts\n- ⚡ **Fast Setup**: No manual Docker builds or MCP configuration needed\n- 🔄 **Persistent Container**: Reuses existing container for faster startup\n\n## Table of Contents\n\n- [Quick Start](#quick-start)\n  - [Prerequisites](#prerequisites)\n  - [Basic Usage](#basic-usage)\n- [Script Options](#script-options)\n  - [Build Commands](#build-commands)\n  - [Runtime Options](#runtime-options)\n  - [Container Persistence](#container-persistence)\n- [What's Included](#whats-included)\n  - [Embedded Dockerfile](#embedded-dockerfile)\n  - [MCP Servers](#mcp-servers)\n  - [Environment Variables](#environment-variables)\n  - [Volume Mounts](#volume-mounts)\n- [Testing the Setup](#testing-the-setup)\n- [Advanced Usage](#advanced-usage)\n  - [Custom Image Names](#custom-image-names)\n  - [Verbose Output](#verbose-output)\n  - [Environment Variable Setup](#environment-variable-setup)\n- [Security Notes](#security-notes)\n  - [Container Security](#container-security)\n  - [Dangerous Permissions](#dangerous-permissions)\n  - [Best Practices](#best-practices)\n- [Troubleshooting](#troubleshooting)\n  - [Permission Issues](#permission-issues)\n  - [Authentication Issues](#authentication-issues)\n  - [Image Not Found](#image-not-found)\n  - [Container Management](#container-management)\n- [How It Works](#how-it-works)\n- [Contributing](#contributing)\n  - [Development Workflow](#development-workflow)\n  - [Key Points for Contributors](#key-points-for-contributors)\n  - [Testing Container Changes](#testing-container-changes)\n- [Visual Workflow](#visual-workflow)\n\n## Quick Start\n\n### Prerequisites\n\n- Docker installed and running\n- Claude authentication configured (`claude auth`)\n- Environment variables for MCP servers (e.g., `UNSPLASH_ACCESS_KEY`)\n\n### Basic Usage\n\n```bash\n# Download the script (single file needed)\ncurl -O https://raw.githubusercontent.com/icanhasjonas/run-claude-docker/main/run-claude.sh\nchmod +x run-claude.sh\n\n# Interactive shell (auto-pulls from Docker Hub on first run, reuses existing container)\n./run-claude.sh\n\n# Run specific command\n./run-claude.sh claude --dangerously-skip-permissions \"analyze this codebase\"\n\n# Custom workspace\n./run-claude.sh -w /path/to/project\n\n# If run-claude.sh fails due to architecture issues, build locally\n./run-claude.sh --build\n```\n\n## Script Options\n\n### Build Commands\n\n```bash\n# Build Docker image and exit\n./run-claude.sh --build\n\n# Force rebuild image and continue\n./run-claude.sh --rebuild\n```\n\n### Runtime Options\n\n```bash\n# Custom workspace\n./run-claude.sh -w /path/to/project\n\n# Custom Claude config path\n./run-claude.sh -c /path/to/.claude\n\n# Custom container name (default: claude-code)\n./run-claude.sh -n my-claude-container\n\n# Custom image name\n./run-claude.sh -i my-claude:v1.0\n\n# One-shot with cleanup (removes container after exit)\n./run-claude.sh --rm --no-interactive claude auth status\n\n# Safe mode (no dangerous permissions)\n./run-claude.sh --safe\n\n# Non-interactive mode\n./run-claude.sh --no-interactive\n\n# Recreate container (remove existing and create new)\n./run-claude.sh --recreate\n\n# Help\n./run-claude.sh --help\n```\n\n### Container Persistence\n\nBy default, the script creates a persistent container named `claude-code` that is reused across runs:\n\n- **First run**: Creates and starts the container\n- **Subsequent runs**: Reuses the existing container for faster startup\n- **Container running**: Executes commands in the running container\n- **Container stopped**: Restarts the existing container preserving all changes\n\nThis behavior significantly reduces startup time and preserves any modifications made inside the container (installed packages, configuration changes, etc.).\n\n## What's Included\n\n### Embedded Dockerfile\n\nThe script contains a complete Dockerfile that includes:\n\n- Ubuntu 22.04 base image\n- Claude Code installation\n- Go, Node.js, Python, and build tools\n- Pre-built Unsplash MCP server\n- All MCP servers pre-configured\n\n### MCP Servers\n\nAutomatically configured and ready to use:\n\n- **Unsplash**: Photo search and download (`unsplash-mcp-server`)\n- **Context7**: AI context service (`https://mcp.context7.com/mcp`)\n- **Playwright**: Browser automation (`@playwright/mcp@latest`)\n\n### Environment Variables\n\n#### Script Configuration\n\n- `CLAUDE_CODE_IMAGE_NAME` - Override default Docker Hub image (default: `icanhasjonas/claude-code`)\n\n#### Automatically forwarded from host\n\n- `UNSPLASH_ACCESS_KEY`\n- `OPENAI_API_KEY`\n- `NUGET_API_KEY`\n- `CLAUDE_DANGEROUS_MODE=1`\n- `NODE_OPTIONS=--max-old-space-size=8192`\n- `TERM` - Terminal settings for proper color support\n\n#### Claude Authentication Forwarding\n\nThe script automatically forwards Claude authentication and OAuth credentials from your host system:\n\n- **OAuth Account**: Preserves your Claude login session\n- **User Settings**: Maintains preferences and onboarding state\n- **Permissions**: Automatically enables bypass permissions mode in container\n- **Subscription**: Forwards subscription and access cache information\n\nThis ensures seamless authentication without needing to re-login inside the container.\n\n### Volume Mounts\n\nAutomatically mounted:\n\n- Workspace: `$(pwd)` → `/home/$(whoami)/workspace`\n- Claude config: `~/.claude` → `/home/$(whoami)/.claude`\n- SSH keys: `~/.ssh` → `/home/$(whoami)/.ssh` (read-only)\n- Git config: `~/.gitconfig` → `/home/$(whoami)/.gitconfig` (read-only)\n\n### Authentication Integration\n\nThe script makes a best effort to forward your Claude authentication into the container session:\n\n- **Seamless Login**: Your existing Claude authentication is automatically available (after initial setup)\n- **OAuth Preservation**: Maintains your logged-in state and subscription access\n- **Config Merging**: Intelligently merges host Claude configuration with container settings\n- **Permission Bypass**: Automatically enables bypass permissions mode for streamlined operation\n\n**Important:** On your first run, you may need to run `claude /login` inside the container. After that initial authentication, your login state is preserved and forwarded automatically for future runs.\n\n## Testing the Setup\n\n### 1. First Run (Auto-pull)\n\n```bash\n# First run will automatically pull the pre-built image from Docker Hub\n./run-claude.sh claude auth status\n\n# If not authenticated, you'll need to login (usually only required once)\n./run-claude.sh claude /login\n\n# Test MCP servers are working\n./run-claude.sh claude \"search for sunset photos on unsplash\"\n```\n\n### 2. Test Build Commands\n\n```bash\n# Build image only (useful for CI/CD)\n./run-claude.sh --build\n\n# Force rebuild (get latest updates)\n./run-claude.sh --rebuild\n```\n\n### 3. Test File Operations\n\n```bash\n# Create test project\nmkdir test-project\ncd test-project\necho \"console.log('hello');\" \u003e test.js\n\n# Test Claude with file modification\n./run-claude.sh claude --dangerously-skip-permissions \"add error handling to test.js\"\n\n# Check if file persists on host\ncat test.js\n```\n\n### 4. Test MCP Integration\n\n```bash\n# Test Unsplash MCP\n./run-claude.sh claude \"find a photo of mountains using unsplash\"\n\n# Test Playwright MCP\n./run-claude.sh claude \"take a screenshot of google.com\"\n```\n\n## Advanced Usage\n\n### Custom Image Names\n\n```bash\n# Use custom image name\n./run-claude.sh -i my-claude:v1.0\n\n# Build with custom name\n./run-claude.sh -i my-claude:v1.0 --build\n```\n\n### Verbose Output\n\n```bash\n# Show docker command being executed\nRUN_CLAUDE_VERBOSE=1 ./run-claude.sh\n\n# Example output:\n# Running Claude Code container...\n# Command: docker run --rm -it --privileged --name claude-code-1234567890 ...\n```\n\n### Environment Variable Setup\n\n```bash\n# Set required environment variables\nexport UNSPLASH_ACCESS_KEY=\"your-key-here\"\nexport OPENAI_API_KEY=\"your-openai-key\"\n\n# Use custom Docker image\nexport CLAUDE_CODE_IMAGE_NAME=\"myregistry/my-claude-code\"\n./run-claude.sh\n\n# Or use .env file approach\necho \"UNSPLASH_ACCESS_KEY=your-key\" \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\n## Security Notes\n\n### Container Security\n\n- ✅ **Host isolation**: Host system protected by Docker boundaries\n- ✅ **Read-only mounts**: SSH keys and system configs mounted read-only\n- ✅ **User isolation**: Runs as non-root user inside container\n- ⚠️ **Privileged mode**: Required for dangerous permissions functionality\n\n### Dangerous Permissions\n\n- Container has `--privileged` flag for full system access within container\n- Claude runs with `--dangerously-skip-permissions` by default\n- Only use with trusted code and repositories\n- All file modifications are contained within mounted volumes\n\n### Best Practices\n\n1. Only mount directories you want Claude to access\n2. Use read-only mounts for sensitive configs\n3. Regularly rebuild image for security updates\n4. Monitor container resource usage\n5. Use temporary containers (`--rm`) for one-shot commands\n\n## Troubleshooting\n\n### Permission Issues\n\n```bash\n# Fix workspace permissions\ndocker run --rm -v $(pwd):/workspace claude-code:latest sudo chown -R claude:claude /workspace\n```\n\n### Authentication Issues\n\n**First Time Setup:**\n\nOn your very first run, you may need to authenticate Claude inside the container:\n\n```bash\n# Check Claude authentication status\n./run-claude.sh claude auth status\n\n# If not authenticated, login (this is usually only needed once)\n./run-claude.sh claude /login\n```\n\nAfter the initial `/login`, the script automatically forwards your authentication between the host and container, so you shouldn't need to re-authenticate in future runs.\n\n**Note:** The authentication forwarding works most of the time but isn't bulletproof. If you encounter auth issues, try running `/login` again inside the container.\n\n**Troubleshooting Authentication:**\n\n```bash\n# Check Claude config\n./run-claude.sh claude auth status\n\n# Re-authenticate if needed\n./run-claude.sh claude auth\n\n# Or use the web login method\n./run-claude.sh claude /login\n```\n\n### Image Not Found\n\n```bash\n# Force rebuild image\n./run-claude.sh --rebuild\n\n# Or build only\n./run-claude.sh --build\n\n# Check existing images\ndocker images | grep claude\n```\n\n### Container Management\n\n```bash\n# List containers\ndocker ps -a | grep claude\n\n# Stop persistent container\ndocker stop claude-code\n\n# Remove persistent container\ndocker rm claude-code\n\n# Or use the script to recreate\n./run-claude.sh --recreate\n```\n\n## How It Works\n\n```\n┌─────────────────────────────────────────────────────────────────────────────────┐\n│                                HOST SYSTEM                                      │\n├─────────────────────────────────────────────────────────────────────────────────┤\n│  ./run-claude.sh                                                                │\n│      │                                                                          │\n│      ├─ 1. Check if Docker image exists                                         │\n│      │     ├─ NO  → Build embedded Dockerfile                                   │\n│      │     └─ YES → Continue                                                    │\n│      │                                                                          │\n│      ├─ 2. Check if container exists                                            │\n│      │     ├─ RUNNING   → Execute in existing container                         │\n│      │     ├─ STOPPED   → Start existing container (preserves state)            │\n│      │     └─ MISSING   → Create new container                                  │\n│      │                                                                          │\n│      └─ 3. Mount volumes \u0026 forward env vars                                     │\n│             │                                                                   │\n│             ▼                                                                   │\n├─────────────────────────────────────────────────────────────────────────────────┤\n│  DOCKER CONTAINER (Ubuntu 25.04 + Claude + MCP)                                 │\n│                                                                                 │\n│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐                  │\n│  │   Unsplash MCP  │  │   Context7 MCP  │  │ Playwright MCP  │                  │\n│  │   (Pre-built)   │  │   (HTTP/Web)    │  │   (npm global)  │                  │\n│  └─────────────────┘  └─────────────────┘  └─────────────────┘                  │\n│                                 │                                               │\n│  ┌─────────────────────────────────────────────────────────────┐                │\n│  │               CLAUDE CODE                                   │                │\n│  │         (--dangerously-skip-permissions)                    │                │\n│  └─────────────────────────────────────────────────────────────┘                │\n│                                 │                                               │\n│  ┌─────────────────────────────────────────────────────────────┐                │\n│  │  ZSH + Oh-My-Zsh + LazyVim + Dev Tools                      │                │\n│  │  • Node.js (via fnm)  • Go  • Python  • Git  • Build tools  │                │\n│  └─────────────────────────────────────────────────────────────┘                │\n│                                                                                 │\n│  MOUNTED VOLUMES (Read/Write):                                                  │\n│  • ~/.claude      → Container config                                            │\n│  • $(pwd)         → Working directory                                           │\n│                                                                                 │\n│  MOUNTED VOLUMES (Read-Only):                                                   │\n│  • ~/.ssh         → SSH keys                                                    │\n│  • ~/.gitconfig   → Git configuration                                           │\n│                                                                                 │\n│  ENV FORWARDED:                                                                 │\n│  • API Keys (Unsplash, OpenAI, etc.)                                            │\n│  • CLAUDE_DANGEROUS_MODE=1                                                      │\n│  • Claude Authentication \u0026 OAuth                                                │\n│  • Terminal settings (TERM)                                                     │\n└─────────────────────────────────────────────────────────────────────────────────┘\n\n🔒 ISOLATION BENEFITS:\n  ✅ Host system protected by Docker boundaries\n  ✅ All dangerous operations contained in container\n  ✅ Persistent containers with preserved state\n  ✅ Pre-configured MCP servers ready to use\n\n⚠️  YOLO MODE:\n  • Container runs with --privileged flag\n  • Claude runs with --dangerously-skip-permissions\n  • Use only with trusted projects!\n```\n\nThe `run-claude.sh` script is completely self-contained:\n\n1. **Embedded Dockerfile**: Contains a complete Ubuntu 22.04 setup with Claude Code\n2. **Auto-detection**: Checks if Docker image exists, pulls from Docker Hub if missing, builds only with `--build` or `--rebuild`\n3. **Container Persistence**: Reuses existing `claude-code` container for faster startup\n4. **MCP Setup**: Automatically configures Unsplash, Context7, and Playwright servers\n5. **Environment Forwarding**: Passes through API keys, configurations, and Claude authentication\n6. **Volume Management**: Mounts workspace and config directories automatically\n7. **User Matching**: Creates container user matching your host user\n\nNo separate files needed - just the single `run-claude.sh` script!\n\n## Contributing\n\nPull requests are welcome! Feel free to contribute improvements, bug fixes, or new features.\n\n### Development Workflow\n\nThe Dockerfile is **embedded directly** in the `run-claude.sh` script to maintain the self-contained nature of the tool. When making changes to the container configuration:\n\n1. **Edit the embedded Dockerfile** in the `generate_dockerfile_content()` function\n2. **Test your changes** by rebuilding the container:\n\n   ```bash\n   # Build new image and test (doesn't run container)\n   ./run-claude.sh --build\n\n   # Or rebuild and run container immediately\n   ./run-claude.sh --rebuild\n   ```\n\n3. **Export for standalone use** (optional):\n\n   ```bash\n   # Export current Dockerfile for inspection or external use\n   ./run-claude.sh --export-dockerfile Dockerfile\n   ```\n\n### Key Points for Contributors\n\n- **Single source of truth**: The `generate_dockerfile_content()` function contains the authoritative Dockerfile\n- **No separate Dockerfile**: Everything is embedded to maintain the self-contained design\n- **Always test rebuilds**: After changing container configuration, use `--rebuild` to test\n- **Both build options available**:\n  - `--build`: Just builds the image (useful for testing build process)\n  - `--rebuild`: Builds image and runs container (full testing)\n\n### Testing Container Changes\n\n```bash\n# After editing the embedded Dockerfile:\n\n# Option 1: Build only (test build process)\n./run-claude.sh --build\n\n# Option 2: Rebuild and test (full workflow)\n./run-claude.sh --rebuild\n\n# Option 3: Export and inspect\n./run-claude.sh --export-dockerfile debug.dockerfile\nless debug.dockerfile\n```\n\nThis workflow ensures that the container changes are properly tested while maintaining the tool's self-contained design.\n\n## Visual Workflow\n\n```mermaid\nflowchart TD\n    Start([🚀 ./run-claude.sh]) --\u003e CheckImage{🐳 Docker Image\u003cbr/\u003eExists?}\n\n    CheckImage --\u003e|No| PullImage[📥 Try Pull from\u003cbr/\u003eDocker Hub]\n    PullImage --\u003e PullSuccess{Pull Success?}\n    PullSuccess --\u003e|Yes| TagImage[🏷️ Tag as\u003cbr/\u003eclaude-code:latest]\n    PullSuccess --\u003e|No| BuildImage[🔨 Build from\u003cbr/\u003eEmbedded Dockerfile]\n    TagImage --\u003e CheckContainer\n    BuildImage --\u003e CheckContainer\n    CheckImage --\u003e|Yes| CheckContainer{📦 Container\u003cbr/\u003eExists?}\n\n    CheckContainer --\u003e|Missing| CreateContainer[⚡ Create New Container\u003cbr/\u003ewith Volumes \u0026 Env]\n    CheckContainer --\u003e|Stopped| StartContainer[♻️ Start Existing\u003cbr/\u003eContainer\u003cbr/\u003e\u003csmall\u003e🎯 Preserves State\u003c/small\u003e]\n    CheckContainer --\u003e|Running| ExecContainer[🔄 Execute in\u003cbr/\u003eRunning Container]\n\n    CreateContainer --\u003e RunCommand{💻 Command\u003cbr/\u003eProvided?}\n    StartContainer --\u003e RunCommand\n    ExecContainer --\u003e RunCommand\n\n    RunCommand --\u003e|Yes| ExecuteCmd[⚡ Execute:\u003cbr/\u003eclaude --dangerously-skip-permissions]\n    RunCommand --\u003e|No| InteractiveShell[🐚 Interactive Shell\u003cbr/\u003ezsh + oh-my-zsh]\n\n    ExecuteCmd --\u003e MCPServers[🤖 MCP Servers Available]\n    InteractiveShell --\u003e MCPServers\n\n    MCPServers --\u003e Unsplash[📸 Unsplash\u003cbr/\u003ePhoto Search]\n    MCPServers --\u003e Context7[🧠 Context7\u003cbr/\u003eAI Context]\n    MCPServers --\u003e Playwright[🎭 Playwright\u003cbr/\u003eBrowser Automation]\n\n    Unsplash --\u003e WorkInContainer[🛠️ Work in Isolated\u003cbr/\u003eContainer Environment]\n    Context7 --\u003e WorkInContainer\n    Playwright --\u003e WorkInContainer\n\n    WorkInContainer --\u003e PersistChanges[💾 Changes Persist\u003cbr/\u003ein Container]\n    PersistChanges --\u003e End([✅ Complete])\n\n    %% Styling\n    classDef startEnd fill:#e1f5fe,stroke:#01579b,stroke-width:3px,color:#000\n    classDef decision fill:#fff3e0,stroke:#e65100,stroke-width:2px,color:#000\n    classDef process fill:#f3e5f5,stroke:#4a148c,stroke-width:2px,color:#000\n    classDef container fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px,color:#000\n    classDef mcp fill:#fff8e1,stroke:#f57f17,stroke-width:2px,color:#000\n\n    class Start,End startEnd\n    class CheckImage,PullSuccess,CheckContainer,RunCommand decision\n    class PullImage,TagImage,BuildImage,CreateContainer,StartContainer,ExecContainer,ExecuteCmd,InteractiveShell,WorkInContainer,PersistChanges process\n    class MCPServers,Unsplash,Context7,Playwright mcp\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficanhasjonas%2Frun-claude-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ficanhasjonas%2Frun-claude-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ficanhasjonas%2Frun-claude-docker/lists"}