Remote MCP servers run as separate processes or on different machines, communicating with UFO² over HTTP or stdio. This enables cross-platform automation, process isolation, and distributed workflows.
Cross-Platform Automation: Remote servers enable Windows UFO² agents to control Linux systems, mobile devices, and hardware through HTTP MCP servers running on those platforms.
HTTP MCP servers run as standalone HTTP services, accessible via REST-like endpoints.
Advantages:
- Cross-platform communication (Windows ↔ Linux, Windows ↔ Hardware)
- Language-agnostic (server can be in Python, Go, Rust, etc.)
- Network-accessible (local or remote deployment)
- Stateless design (each request is independent)
Use Cases:
- Linux command execution from Windows
- Hardware device control (Arduino, robot arms, test fixtures)
- Mobile device automation (Android, iOS via robot arm)
- Distributed multi-machine workflows
Stdio MCP servers run as child processes, communicating via stdin/stdout.
Advantages:
- Process isolation (sandboxed execution)
- Clean resource management (process lifetime)
- Standard protocol (works with any language)
Use Cases:
- Custom Python/Node.js tools running in separate environments
- Third-party MCP servers
- Sandboxed execution for security
Type: Action (HTTP deployment)
Purpose: Control hardware devices (Arduino HID, BB-8 test fixture, robot arm, mobile devices)
Deployment: HTTP server on hardware controller machine
Agent: HardwareAgent
Tools: 30+ hardware control tools
→ See complete HardwareExecutor documentation for all hardware control tools, deployment instructions, and usage examples.
Type: Action (HTTP deployment)
Purpose: Execute shell commands on Linux systems
Deployment: HTTP server on Linux machine
Agent: LinuxAgent
Tools: 2 tools for command execution and system info
→ See complete BashExecutor documentation for Linux command execution, security guidelines, and systemd setup.
Type: Action + Data Collection (HTTP deployment, dual-server)
Purpose: Android device automation via ADB
Deployment: HTTP servers on machine with ADB access
Agent: MobileAgent
Ports: 8020 (data collection), 8021 (action)
Tools: 13+ tools for Android automation
Architecture: Runs as two HTTP servers that share a singleton state manager for coordinated operations:
- Mobile Data Collection Server (port 8020): Screenshots, UI tree, device info, app list, controls
- Mobile Action Server (port 8021): Tap, swipe, type, launch apps, press keys, control clicks
→ See complete MobileExecutor documentation for all Android automation tools, dual-server architecture, deployment instructions, and usage examples.
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
String | ✅ Yes | Unique server identifier |
type |
String | ✅ Yes | Must be "http" |
host |
String | ✅ Yes | Server hostname or IP |
port |
Integer | ✅ Yes | Server port number |
path |
String | ✅ Yes | HTTP endpoint path |
reset |
Boolean | ❌ No | Reset on context switch (default: false) |
| Field | Type | Required | Description |
|---|---|---|---|
namespace |
String | ✅ Yes | Unique server identifier |
type |
String | ✅ Yes | Must be "stdio" |
command |
String | ✅ Yes | Executable command |
start_args |
List[String] | ❌ No | Command-line arguments |
env |
Dict | ❌ No | Environment variables |
cwd |
String | ❌ No | Working directory |
reset |
Boolean | ❌ No | Reset on context switch (default: false) |
HardwareAgent:
default:
action:
- namespace: HardwareExecutor
type: http
host: "192.168.1.100"
port: 8006
path: "/mcp"Server Start:
python -m ufo.client.mcp.http_servers.hardware_mcp_server --host 0.0.0.0 --port 8006See the HardwareExecutor documentation for complete deployment instructions.
LinuxAgent:
default:
action:
- namespace: BashExecutor
type: http
host: "192.168.1.50"
port: 8010
path: "/mcp"Server Start:
python -m ufo.client.mcp.http_servers.linux_mcp_server --host 0.0.0.0 --port 8010See the BashExecutor documentation for systemd service setup.
MobileAgent:
default:
data_collection:
- namespace: MobileDataCollector
type: http
host: "192.168.1.60" # Android automation server
port: 8020
path: "/mcp"
action:
- namespace: MobileExecutor
type: http
host: "192.168.1.60"
port: 8021
path: "/mcp"Server Start:
# Start both servers (recommended - they share state)
python -m ufo.client.mcp.http_servers.mobile_mcp_server --server both --host 0.0.0.0 --data-port 8020 --action-port 8021See the MobileExecutor documentation for complete deployment instructions and ADB setup.
CustomAgent:
default:
action:
- namespace: CustomProcessor
type: stdio
command: "python"
start_args: ["-m", "custom_mcp_server"]
env:
API_KEY: "secret_key"
cwd: "/path/to/server"Recommended Practices:
- ✅ Use HTTP for cross-platform automation
- ✅ Use stdio for process isolation
- ✅ Validate remote server connectivity before deployment
- ✅ Set appropriate timeouts for long-running commands
- ✅ Use environment variables for sensitive credentials
Anti-Patterns to Avoid:
- ❌ Don't expose HTTP servers to public internet without authentication
- ❌ Don't hardcode credentials in configuration files
- ❌ Don't forget to start remote servers before client connection
- MCP Overview - MCP architecture and deployment models
- Local Servers - In-process servers
- MCP Configuration - Complete configuration reference
- Action Servers - Action execution overview
- Creating Custom MCP Servers Tutorial - Step-by-step guide for HTTP/Stdio servers
- HardwareExecutor - Complete hardware control reference
- BashExecutor - Complete Linux command reference