Skip to main content
Glama
00011110

trayfeel

by 00011110

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*, das OPEN_TRAY / CLOSE_TRAY unterstützt

  • Benutzermitgliedschaft in der Gruppe cdrom (typisch unter Ubuntu/Debian)

sudo usermod -aG cdrom "$USER"
# log out and back in, then:
groups   # should list cdrom

Installation

pip install trayfeel
# or from a checkout:
pip install -e ".[dev]"

Optionale Umgebungsvariablen (siehe .env.example):

Variable

Zweck

TRAYFEEL_DEVICE

Erzwingt Gerätepfad (Standard: erstes /dev/sr*)

TRAYFEEL_TOKEN

Bearer-Token für den HTTP-Daemon

TRAYFEEL_CAMERA

Optional /dev/videoN für visuelles Feedback

TRAYFEEL_HOST / TRAYFEEL_PORT

Daemon-Bind (Standard 127.0.0.1:8765)

Schnellstart

trayfeel list-drives
trayfeel doctor
trayfeel status
trayfeel pulse
trayfeel emote laugh
trayfeel emote nod_yes --dry-run
trayfeel catalog

Python:

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 bei force=True

  • Abklingzeit 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-run

Primitive

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 mcp

Tools: 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 8765

Methode

Pfad

Body

GET

/health

GET

/status

GET

/catalog

POST

/primitive

{"name":"pulse","open_ms":300}

POST

/emote

{"name":"wave"}

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.py

Lizenz

MIT — Copyright (c) 2026 TrayFeel-Mitwirkende

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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