trayfeel
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@trayfeelMake the tray do a happy dance motion"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TrayFeel
Plug-and-play CD/DVD tray emotive actuator for AI agents.
TrayFeel turns a Linux optical drive into a physical body-language channel: open, close, pulse, wiggle, and a catalog of named emotions — exposed as a Python library, CLI, MCP server, and optional HTTP daemon.
Linux-first. MIT licensed. Pure-Python ioctl path (no eject binary required).
Requirements
Python 3.10+
Linux with
/dev/sr*optical drive supportingOPEN_TRAY/CLOSE_TRAYUser membership in the
cdromgroup (typical on Ubuntu/Debian)
sudo usermod -aG cdrom "$USER"
# log out and back in, then:
groups # should list cdromInstall
pip install trayfeel
# or from a checkout:
pip install -e ".[dev]"Optional env (see .env.example):
Variable | Purpose |
| Force device path (default: first |
| Bearer token for HTTP daemon |
| Optional |
| Daemon bind (default |
Quick start
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")Safety
TrayFeel refuses reckless motion by default:
Exclusive flock per device (
~/.cache/trayfeel/…)Rate limit (default 30 actions/minute)
Minimum interval between motions (default 200 ms)
Disc guard — slam patterns (
pulse,wiggle,nod, …) refused while a disc is present unlessforce=TrueCooldown after many open/close cycles
Override with --force / force=True when you intentionally accept the risk.
Emotions
Named choreographies 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-runPrimitives
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
Add to claude_desktop_config.json:
{
"mcpServers": {
"trayfeel": {
"command": "trayfeel",
"args": ["mcp"]
}
}
}Cursor
Add an MCP server entry pointing at the same command (trayfeel mcp or python -m trayfeel mcp). Ensure the environment has cdrom group permissions.
Tool schemas for OpenAI / Claude function calling live in examples/openai_tools.json and examples/claude_tools.json. Agent skill notes: examples/agent_skill.md.
HTTP daemon
For LAN agents that cannot attach stdio MCP:
export TRAYFEEL_TOKEN="$(openssl rand -hex 16)"
trayfeel daemon --host 0.0.0.0 --port 8765Method | Path | Body |
GET |
| — |
GET |
| — |
GET |
| — |
POST |
|
|
POST |
|
|
Send Authorization: Bearer $TRAYFEEL_TOKEN when a token is configured.
Vision (optional)
If TRAYFEEL_CAMERA=/dev/video0 is set and ffmpeg is installed, trayfeel vision captures a frame via V4L2 and returns a best-effort brightness/edge heuristic. Missing camera or ffmpeg returns ok: false with a reason — it never crashes the process.
Library layout
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.pyLicense
MIT — Copyright (c) 2026 TrayFeel contributors
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