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
Markdown
# πͺ Opendoor MCP Server
[](https://github.com/make-change-code/Opendoor/actions/workflows/docker-build.yml)
[](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.*