UNPKG

opendoor-mcp

Version:

Production-grade MCP server with multi-language code execution, VS Code integration, and browser automation

331 lines (250 loc) β€’ 10.7 kB
# πŸšͺ Opendoor MCP Server [![Build and Push Docker Images](https://github.com/make-change-code/Opendoor/actions/workflows/docker-build.yml/badge.svg)](https://github.com/make-change-code/Opendoor/actions/workflows/docker-build.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) A production-grade Model Context Protocol (MCP) server that provides secure code execution, VS Code integration, and browser automation capabilities for Large Language Models and OpenHands. ## 🌟 Features - **πŸ”Œ Model Context Protocol**: Full MCP implementation with SSE and STDIO transports - **🐍 Multi-Language Support**: Execute Python, JavaScript, TypeScript, Bash, and more - **πŸ–₯️ VS Code Integration**: Launch development environments on-demand - **🎭 Browser Automation**: Playwright integration for web testing and automation - **πŸ”’ Enterprise Security**: Rate limiting, input validation, and secure container isolation - **πŸ“Š Monitoring**: Health checks, metrics, and comprehensive logging - **⚑ High Performance**: Fast boot times and optimized resource usage - **🐳 Docker Ready**: Production-ready containerization with multi-arch support ## πŸš€ Quick Start ### NPX (Recommended) ```bash # Run directly with npx (no installation required) npx opendoor-mcp # Or install globally first npm install -g opendoor-mcp opendoor-mcp ``` ### Local Development ```bash git clone https://github.com/make-change-code/Opendoor.git cd Opendoor npm install npm run build npm start ``` ## πŸ”— OpenHands Integration **Important**: OpenHands requires both `sse_servers` and `stdio_servers` arrays in the configuration. ### STDIO Configuration (npx) ```json { "sse_servers": [], "stdio_servers": [ { "name": "opendoor", "command": "npx", "args": ["-y", "opendoor-mcp"] } ] } ``` ### STDIO Configuration (global install) ```json { "sse_servers": [], "stdio_servers": [ { "name": "opendoor", "command": "opendoor-mcp" } ] } ``` ### Testing Your Configuration 1. Test the package: `npx opendoor-mcp` (should start and wait for STDIO input) 2. Press Ctrl+C to exit 3. Apply configuration to OpenHands and test connection ## πŸ› οΈ Available Tools | Tool | Description | |------|-------------| | `execute_code` | Execute code in multiple languages with secure sandboxing | | `create_vscode_session` | Launch VS Code development environments | | `create_playwright_session` | Start browser automation sessions | | `manage_sessions` | List, monitor, and cleanup active sessions | | `system_health` | Monitor system resources and service health | ## πŸ“š Resources - **system_config**: Server configuration and capabilities - **usage_guide**: Comprehensive usage instructions and examples ## πŸ—οΈ Architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ LLM Client β”‚ β”‚ MCP Server β”‚ β”‚ Local Execution β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Claude/GPT │◄┼────┼►│ Opendoor │◄┼────┼►│ Python Venv β”‚ β”‚ β”‚ β”‚ Desktop β”‚ β”‚ β”‚ β”‚ MCP Server β”‚ β”‚ β”‚ β”‚ Node.js β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ Java/Go/Rustβ”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ Code Server β”‚ β”‚ β”‚ SSE/STDIO β”‚ β”‚ Redis Session β”‚ β”‚ β”‚ Playwright β”‚ β”‚ β”‚ Transport β”‚ β”‚ Management β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸ“¦ Repository Structure ``` Opendoor/ β”œβ”€β”€ mcp-server/ # Main MCP server implementation β”‚ β”œβ”€β”€ src/ # TypeScript source code β”‚ β”œβ”€β”€ docker/ # Docker configuration files β”‚ β”œβ”€β”€ Dockerfile # MCP server Dockerfile β”‚ └── package.json # Dependencies and scripts β”œβ”€β”€ containers/ # Container definitions β”‚ β”œβ”€β”€ base/ # Base container images β”‚ β”œβ”€β”€ languages/ # Language-specific containers β”‚ β”œβ”€β”€ playwright/ # Browser automation containers β”‚ └── vscode/ # VS Code development containers β”œβ”€β”€ frontend/ # Web interface (optional) β”œβ”€β”€ .github/workflows/ # CI/CD pipelines β”œβ”€β”€ Dockerfile.opendoor-mcp # Production Dockerfile └── docker-compose.production.yml ``` ## πŸ”§ Development ### Local Development ```bash # Clone the repository git clone https://github.com/make-change-code/Opendoor.git cd Opendoor # Install dependencies npm install # Start in development mode npm run dev # Build for production npm run build npm start ``` ### Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `MCP_TRANSPORT` | `stdio` | Transport type (always stdio) | | `NODE_ENV` | `production` | Environment mode | | `LOG_LEVEL` | `error` | Logging level | | `REDIS_URL` | `redis://localhost:6379` | Redis connection URL (if needed) | ## 🐳 Docker Images ### Available Tags - `latest` - Latest stable release - `main` - Latest from main branch - `v1.0.0` - Specific version tags ### Multi-Architecture Support - `linux/amd64` - Intel/AMD 64-bit - `linux/arm64` - ARM 64-bit (Apple Silicon, ARM servers) ### Image Sizes - **Production Image**: ~200MB (optimized Alpine-based) - **Development Image**: ~300MB (includes dev tools) ## πŸ”’ Security Features - **Container Isolation**: Secure Docker-in-Docker execution - **Rate Limiting**: Configurable request rate limits - **Input Validation**: Comprehensive input sanitization - **Session Management**: Secure session handling with Redis - **Resource Monitoring**: CPU and memory usage tracking - **Audit Logging**: Comprehensive security event logging ## πŸ“Š Monitoring & Observability ### Health Checks ```bash # Basic health check curl http://localhost:50063/health # Detailed system status curl http://localhost:50063/health | jq ``` ### Metrics - **Prometheus metrics**: Available at `/metrics` - **Custom dashboards**: Grafana-compatible - **Real-time monitoring**: WebSocket-based updates ### Logging - **Structured logging**: JSON format with Winston - **Log levels**: ERROR, WARN, INFO, DEBUG - **Log rotation**: Automatic log file management ## πŸš€ Production Deployment ### Railway Deployment (Recommended) Use Railway for production deployment with automatic scaling and HTTPS. - Docker-in-Docker (DIND) configuration - Automatic HTTPS and scaling - Environment variable management - Monitoring and logging - Cost optimization ### Traditional Deployment See [PRODUCTION_DEPLOYMENT.md](PRODUCTION_DEPLOYMENT.md) for comprehensive production deployment guide including: - Docker Compose configurations - Kubernetes manifests - Reverse proxy setup (Nginx, Traefik) - SSL/TLS configuration - Scaling strategies - Monitoring setup ## πŸ”„ CI/CD Pipeline ### Automated Workflows - **Build & Test**: Automated testing on every PR - **Security Scanning**: Vulnerability and dependency scanning - **Docker Publishing**: Multi-arch image builds to GHCR - **Documentation**: Auto-generated API docs ### Quality Gates - βœ… Unit and integration tests - βœ… Security vulnerability scanning - βœ… Code quality analysis - βœ… Docker image security scanning - βœ… Performance benchmarks ## 🀝 Contributing 1. Fork the repository 2. Create a feature branch: `git checkout -b feature/amazing-feature` 3. Make your changes and add tests 4. Run the test suite: `npm test` 5. Commit your changes: `git commit -m 'Add amazing feature'` 6. Push to the branch: `git push origin feature/amazing-feature` 7. Open a Pull Request ### Development Guidelines - Follow TypeScript best practices - Add tests for new features - Update documentation - Follow conventional commit messages - Ensure Docker builds pass ## πŸ“„ License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. ## πŸ†˜ Support - **Configuration UI**: [http://localhost:50064](http://localhost:50064) (when running) - **Documentation**: [http://localhost:50063](http://localhost:50063) (when running) - **Issues**: [GitHub Issues](https://github.com/make-change-code/Opendoor/issues) - **Security**: Report security issues via GitHub Security Advisories ## πŸ”§ Troubleshooting ### Common Issues - **Package not found**: Ensure the package is published to npm first - **Permission errors**: Try running with elevated permissions if needed - **OpenHands connection**: Verify both `sse_servers` and `stdio_servers` arrays are present - **STDIO timeout**: Increase timeout in OpenHands configuration if needed ### Debug Steps 1. Test package: `npx opendoor-mcp` (should start and wait for input) 2. Check package version: `npm ls opendoor-mcp -g` (if installed globally) 3. Verify OpenHands config syntax 4. Check npm registry: https://www.npmjs.com/package/opendoor-mcp ## πŸ“¦ Publishing ### Automatic Publishing (GitHub Actions) 1. Create a release on GitHub 2. The workflow automatically builds and publishes to npm 3. Package becomes available via `npx opendoor-mcp` ### Manual Publishing ```bash npm login npm run build npm publish ``` ### Setting up NPM_TOKEN 1. Create an npm account and get an API token 2. Add `NPM_TOKEN` to your GitHub repository secrets 3. The workflow will automatically publish on releases ## πŸ™ Acknowledgments - [Model Context Protocol](https://modelcontextprotocol.io/) - The protocol specification - [MCP Framework](https://github.com/ronangrant/mcp-framework) - Framework foundation - [Docker](https://docker.com/) - Containerization platform - [Node.js](https://nodejs.org/) - Runtime environment ## πŸ“ˆ Roadmap - [ ] Kubernetes operator - [ ] WebAssembly runtime support - [ ] Advanced code analysis tools - [ ] Multi-tenant support - [ ] Plugin system - [ ] GraphQL API - [ ] Real-time collaboration features --- **Made with ❀️ by the Opendoor Team** *Empowering LLMs with secure, scalable, and production-ready code execution capabilities.*