rmcp-presence
Auditable, permissioned environmental awareness for agentic AI systems.
Give your AI eyes and hands without giving it a shell.
Why This Exists
You could give your AI bash access. But should you?
| Approach | Auditable | Sandboxed | Cross-platform | Safe |
|---|---|---|---|---|
| Shell access | ❌ Logs everything | ❌ Full system access | ❌ Platform-specific | ❌ Injection risks |
| rmcp-presence | ✅ Every tool call logged | ✅ Only enabled tools | ✅ Sensors + actuators | ✅ No arbitrary execution |
170 tools. One binary. Zero shell access.
cargo install rmcp-presence
What It Can Do
Perceive (Sensors)
- System stats, CPU, memory, disk, processes, temps
- Displays, USB devices, cameras, microphones, Bluetooth
- Network status, public IP, interfaces
- Git repository status, weather forecasts
- Battery, idle time
Act (Actuators)
- Clipboard read/write
- Volume control, media playback
- Screenshots, camera capture, audio recording
- File management (trash, open)
- Reminders and notifications
- Print files and documents
- Local LLM management (Ollama)
Control (Linux)
- Window management (i3)
- Mouse and keyboard automation (xdotool)
- Service management (systemd)
- Power management (suspend, hibernate, lock)
- Brightness, Bluetooth, per-app audio
Composite Tools
8 composites provide environmental snapshots in a single call:
| Composite | What You Get |
|---|---|
get_context |
System state, datetime, user, battery, idle |
get_peripherals |
Displays, USB, cameras, mics, bluetooth |
get_network_info |
Online status, public IP, interfaces |
get_audio_status |
Volume, mute, devices, now playing |
get_git_info |
Branch, commit, working tree, remotes |
get_workspace_status |
Workspaces, focused window, outputs |
get_bluetooth_status |
Adapter, paired devices, connections |
get_ollama_status |
Models installed, models running |
One tool call instead of many. Less context, faster orientation.
Architecture
┌──────────────────────────────────────────────────────────────┐
│ rmcp-presence │
│ (single binary, 13MB) │
├──────────────────────────────────────────────────────────────┤
│ Layer 3: Linux │ 79 tools — Linux only │
│ (conditional) │ i3, xdotool, mpris, systemd, │
│ │ brightness, bluer, dbus, │
│ │ logind, pulseaudio │
├──────────────────────────────────────────────────────────────┤
│ Layer 2: Actuators │ 48 tools — Cross-platform │
│ (all platforms) │ clipboard, audio, trash, open, │
│ │ screenshot, camera, mic, │
│ │ ollama, breakrs, printers │
├──────────────────────────────────────────────────────────────┤
│ Layer 1: Sensors │ 35 tools — Cross-platform │
│ (all platforms) │ sysinfo, display, idle, git, │
│ │ network, usb, battery, weather │
├──────────────────────────────────────────────────────────────┤
│ Composites │ 8 tools — Quick orientation │
└──────────────────────────────────────────────────────────────┘
| Platform | Tools |
|---|---|
| macOS | ~83 |
| Windows | ~83 |
| Linux | 170 |
Runtime Configuration
Disable tools without recompiling. Perfect for restricting capabilities per-deployment.
# ~/.config/rmcp-presence/tools.toml
disabled = [
"suspend", # Don't let AI sleep the system
"poweroff", # Definitely not
"print_file", # No unsupervised printing
]
Every tool has an off switch.
Security Model
rmcp-presence is designed for supervised AI deployments:
- No shell access — AI cannot execute arbitrary commands
- Typed parameters — Every tool has a JSON schema defining valid inputs
- Runtime restrictions — Disable dangerous tools via config
- Audit trail — MCP logs every tool invocation
- No persistence — Tools are stateless; AI can’t install backdoors
This is not a replacement for proper sandboxing. It’s a safer alternative to giving AI bash.
The Story
This started as 17 separate MCP servers. Each one useful, but scattered. Configure one here, another there, remember which works on which platform…
Then the realization: why make people install 17 servers when they could install one?
Built in a 14-hour marathon session with Claude. 170 tools. Cross-platform sensors, cross-platform actuators, full Linux desktop control. One binary.
The next morning: replaced 17 MCP servers with one config line. Dogfooding complete.
The Vision
“Your AI shouldn’t be trapped in a tab — but it shouldn’t have root either.”
AI assistants are evolving from chatbots to agents. They need to perceive and act on their environment. But giving them a shell is dangerous.
rmcp-presence is the middle ground: presence without privilege.
Links
- GitHub: sqrew/rmcp-presence
- crates.io: rmcp-presence
- Install:
cargo install rmcp-presence
Related Crates
rmcp-presence consolidates 21 individual crates. They’re still available:
rmcp-sensors · rmcp-clipboard · rmcp-audio · rmcp-trash · rmcp-open · rmcp-screenshot · rmcp-breakrs · rmcp-ollama · rmcp-i3 · rmcp-xdotool · rmcp-mpris · rmcp-systemd · rmcp-brightness · rmcp-bluer · rmcp-dbus · rmcp-logind · rmcp-pulseaudio · rmcp-camera · rmcp-microphone · rmcp-printers
Built with Claude. 170 tools. One binary. Zero shell access.
Pour toujours. 💙