A lightweight remote command execution bridge client with MCP integration
Project description
Castrel Proxy
A lightweight remote command execution bridge client that connects to a server via WebSocket to receive and execute commands, with MCP (Model Context Protocol) integration.
✨ Features
- ✅ Secure Pairing: Pair with server using verification codes
- ✅ Persistent Configuration: Configuration saved in
~/.castrel/config.yaml - ✅ Unique Identifier: Generate stable client ID based on machine characteristics
- ✅ WebSocket Connection: Real-time bidirectional communication
- ✅ Command Execution: Execute shell commands with whitelist security
- ✅ Document Operations: Read, write, and edit files remotely
- ✅ Auto Reconnect: Automatically reconnect when connection is lost
- ✅ Timeout Control: Command execution timeout protection
- ✅ MCP Integration: Connect to local MCP services and sync tools information
📦 Installation
Via pip
pip install castrel-proxy
From source
git clone https://github.com/castrel-ai/castrel-proxy.git
cd castrel-proxy
pip install -e .
🚀 Quick Start
1. Pair with Server
castrel-proxy pair <verification_code> <server_url>
Example:
castrel-proxy pair eyJ0cyI6MTczNTA4ODQwMCwid2lkIjoiZGVmYXVsdCIsInJhbmQiOiIxMjM0NTYifQ https://server.example.com
2. Start Bridge Service
# Run in background (default)
castrel-proxy start
# Run in foreground
castrel-proxy start --foreground
# Press Ctrl+C to stop (foreground mode only)
3. Stop Bridge Service
# Stop background daemon
castrel-proxy stop
4. Check Status
castrel-proxy status
5. View Logs
# View last 50 lines (default)
castrel-proxy logs
# View last 100 lines
castrel-proxy logs -n 100
# Follow logs in real-time
castrel-proxy logs -f
📖 Documentation
- Installation Guide
- Configuration Guide
- Daemon Mode Guide
- MCP Integration
- API Reference
- Protocol Specification
- Migration Guide
🔧 Configuration
Bridge Configuration (~/.castrel/config.yaml)
Pairing information is saved automatically:
server_url: "https://server.example.com"
verification_code: "ABC123"
client_id: "a1b2c3d4e5f6"
workspace_id: "default"
paired_at: "2025-12-22T10:30:00Z"
MCP Configuration (~/.castrel/mcp.json)
Configure MCP services (optional):
{
"mcpServers": {
"filesystem": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"],
"env": {}
}
}
}
See examples/mcp.json.example for more examples.
Command Whitelist (~/.castrel/whitelist.conf)
Configure allowed commands for security:
# Add commands one per line
ls
cat
git
python
# etc.
🏗️ Architecture
┌─────────────────────────────────────────────────┐
│ Bridge Client (Local) │
│ │
│ ┌──────────────────────────────────────────┐ │
│ │ CLI Commands │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────┼─────────────┐ │
│ │ │ │ │
│ ┌───▼────┐ ┌────▼─────┐ ┌───▼─────┐ │
│ │ Core │ │ MCP │ │ Network │ │
│ │ Config │ │ Manager │ │ Client │ │
│ └────────┘ └──────────┘ └──────────┘ │
│ │ │ │
│ ┌─────▼─────┐ │ │
│ │ MCP │ │ │
│ │ Servers │ │ │
│ └───────────┘ ┌────▼─────┐ │
│ │ Command │ │
│ │ Executor │ │
│ └──────────┘ │
└─────────────────────────────────────────────────┘
│
│ WebSocket
▼
┌─────────────────────────────────────────────────┐
│ Bridge Server (Remote) │
│ /api/v1/bridge/ws?client_id=xxx&code=yyy │
└─────────────────────────────────────────────────┘
🛠️ Development
Setup Development Environment
# Clone repository
git clone https://github.com/castrel-ai/castrel-proxy.git
cd castrel-proxy
# Install dependencies and sync environment
uv sync
Run Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=castrel_proxy
# Run specific test file
pytest tests/test_core.py
Code Quality
# Format code
black src/
# Lint code
flake8 src/
# Type checking
mypy src/
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🔒 Security
For security concerns, please see SECURITY.md or contact security@example.com.
📮 Contact
- Issues: GitHub Issues
- Discussions: GitHub Discussions
🙏 Acknowledgments
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file castrel_proxy-0.1.5.tar.gz.
File metadata
- Download URL: castrel_proxy-0.1.5.tar.gz
- Upload date:
- Size: 40.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a6a360ab9c5df8ed88c091182ab27e8bb374b3d738a1963cf1369b9dfb37f32
|
|
| MD5 |
0e5eb85f4e4195771405d27a7e46765d
|
|
| BLAKE2b-256 |
098c2a5c8ae0b9eb206f4e54df4fd4bbe137f97faafd93c78f769d6c8e666cf6
|
File details
Details for the file castrel_proxy-0.1.5-py3-none-any.whl.
File metadata
- Download URL: castrel_proxy-0.1.5-py3-none-any.whl
- Upload date:
- Size: 45.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
186542b8dcaf79f22ffba6065cfe9893308f980b7bd160f4d129815e4a58aa7b
|
|
| MD5 |
eb7f364658dcd6b46ee08c8d9aa56c67
|
|
| BLAKE2b-256 |
124e2cb9ad33625457406b28fea9934306db44a53fd9aaa528086dec9b34b4fc
|