trayfeel
TrayFeel
Plug-and-Play-Emotionsaktor für CD/DVD-Laufwerke für KI-Agenten.
TrayFeel verwandelt ein optisches Linux-Laufwerk in einen physischen Körpersprache-Kanal: open, close, pulse, wiggle und einen Katalog benannter Emotionen – verfügbar als Python-Bibliothek, CLI, MCP-Server und optionaler HTTP-Daemon.
Linux-first. MIT-lizenziert. Reiner Python-ioctl-Pfad (kein eject-Binary erforderlich).
Voraussetzungen
Python 3.10+
Linux mit optischem Laufwerk
/dev/sr*, dasOPEN_TRAY/CLOSE_TRAYunterstütztBenutzermitgliedschaft in der Gruppe
cdrom(typisch unter Ubuntu/Debian)
sudo usermod -aG cdrom "$USER"
# log out and back in, then:
groups # should list cdromInstallation
pip install trayfeel
# or from a checkout:
pip install -e ".[dev]"Optionale Umgebungsvariablen (siehe .env.example):
Variable | Zweck |
| Erzwingt Gerätepfad (Standard: erstes |
| Bearer-Token für den HTTP-Daemon |
| Optional |
| Daemon-Bind (Standard |
Schnellstart
trayfeel list-drives
trayfeel doctor
trayfeel status
trayfeel pulse
trayfeel emote laugh
trayfeel emote nod_yes --dry-run
trayfeel catalogPython:
from trayfeel import Tray
with Tray() as tray:
print(tray.status())
tray.run("pulse")
tray.emote("wave")Sicherheit
TrayFeel verweigert standardmäßig riskante Bewegungen:
Exklusives flock pro Gerät (
~/.cache/trayfeel/…)Ratenlimit (Standard: 30 Aktionen/Minute)
Mindestintervall zwischen Bewegungen (Standard: 200 ms)
Disc-Schutz — Slam-Muster (
pulse,wiggle,nod, …) werden bei eingelegter Disc verweigert, außer beiforce=TrueAbklingzeit nach vielen open/close-Zyklen
Mit --force / force=True überschreiben, wenn du das Risiko bewusst akzeptierst.
Emotionen
Benannte Choreografien in trayfeel/emotions/catalog.yaml:
laugh, giggle, gasp, surprise, shrug, think, ponder, nod_yes, shake_no, applause, sulk, pout, excited, bored, angry, curious, wave, heartbeat, sigh, celebrate, confused, acknowledge, reject, greet, farewell, error, success, idle_breath
trayfeel emote celebrate
trayfeel emote think --dry-runPrimitive
open, close, toggle, lock, unlock, status, pulse, wiggle, hold_open, nod, double_tap, spin_up, spin_down, sleep, wait
MCP-Server
trayfeel mcp
# or: python -m trayfeel mcpTools: tray_status, tray_list_drives, tray_primitive, tray_emote, tray_catalog, tray_doctor.
Claude Desktop
Füge Folgendes zu claude_desktop_config.json hinzu:
{
"mcpServers": {
"trayfeel": {
"command": "trayfeel",
"args": ["mcp"]
}
}
}Cursor
Füge einen MCP-Server-Eintrag hinzu, der auf denselben Befehl zeigt (trayfeel mcp oder python -m trayfeel mcp). Stelle sicher, dass die Umgebung über Berechtigungen der Gruppe cdrom verfügt.
Tool-Schemas für OpenAI-/Claude-Funktionsaufrufe befinden sich in examples/openai_tools.json und examples/claude_tools.json. Agent-Skill-Notizen: examples/agent_skill.md.
HTTP-Daemon
Für LAN-Agenten, die kein stdio-MCP anhängen können:
export TRAYFEEL_TOKEN="$(openssl rand -hex 16)"
trayfeel daemon --host 0.0.0.0 --port 8765Methode | Pfad | Body |
GET |
| — |
GET |
| — |
GET |
| — |
POST |
|
|
POST |
|
|
Sende Authorization: Bearer $TRAYFEEL_TOKEN, wenn ein Token konfiguriert ist.
Vision (optional)
Wenn TRAYFEEL_CAMERA=/dev/video0 gesetzt und ffmpeg installiert ist, erfasst trayfeel vision ein Einzelbild über V4L2 und liefert eine Best-Effort-Heuristik für Helligkeit/Kanten. Fehlt Kamera oder ffmpeg, wird ok: false mit einem Grund zurückgegeben – der Prozess stürzt dadurch nie ab.
Bibliotheksstruktur
trayfeel/
core.py # Tray, Emoter
primitives.py # motion primitives
safety.py # flock, rate limits, disc guards
hardware/linux.py
emotions/ # catalog.yaml + engine
mcp_server.py
daemon.py
cli.pyLizenz
MIT — Copyright (c) 2026 TrayFeel-Mitwirkende
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Machine-readable utilities and datasets for AI agents.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/00011110/trayfeel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server