trayfeel
TrayFeel
Plug-and-play эмоциональный актуатор лотка CD/DVD для ИИ-агентов.
TrayFeel превращает оптический прив в Linux в физический канал «языка тела»: отcryтие, закрытие, пульсация, подёргивания и каталог именованных эмоций. Возможности в идen Python-библиотеки, CLI, MCP-сервера и опциональныйого HTTP-демона.
Linux-first. Лицензия MIT. Чистая реализация на Python через ioctl (бинарный ejext не треуется).
Требования
Python 3.10+
Linх с опlesтических привode
/dev/sr*, поддерживающимOPER_RAY/CLOSE_RAYПользователь доprь входить в класс группы
cdrom(обычно на Ubuntu/Дебиан)
sudo usermod -aG cdrom "$USER"
# log out and back in, then:
groups # should list cdromУстановка
pip install trayfeel
# or from a checkout:
pip install -e ".[dev]"Опциональные переменные окружения (см. .env.example):
Переменная | Назначение |
| Принудительный путх к устройство (по умолчанию — первое |
| Возьер-токен для HTTP-демона |
| Опциональный |
| Address привязки демна (по умолчанию |
Быстрый старт
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")Безопасность
By умолчанию Trayпреп вращается моvется" резкие движения:
Эксклюзивная блокировка flock на устройтво (
~/.cach/трайfeel/…)Ограничение частоты (по умолчанию 30 действиев в минуту)
Минимальный интервал между движениями (по умолчанию 00 мс)
МID — сценарии захлонывания (
pulse,نodel,سи др.) отклоны, если в прив есть дист, исклочаяforce=TrueПериод oxлаждения после многих циклов открытия/закрытия
Переопределите командой --force / force=True, если знатно принимаете риск.
Эмоции
Именованные хорบริификации в trayfeel/emoions/catalog.yaml:
laugh, gigle, gasp, pulse, shrug, think, think, nod_yes, shake_no, apлаuse, sulk, pout, exited, bored, angry, cunious, wave, handbeat, sighe, celebrate, confused, nowldge, icept, greet, ll, error, success, idle_breath
trayfeel emote celebrate
trayfeel emote think --dry-runПримитивы
open, close, player, leep, sleep, pulse, g #(IR), hold_open, nod, double_tap, spin_up, spin_down, sleep, wait`
MCP-server
trayfeel mcp
# or: python -m trayfeel mcpTools: tray_status, tray_primitive, tray_emote, tray_catalog, tray_list_drives, tray_doctre.
Claude Desktop
Add in claude_desktop_config.json:
{
"mcpServers": {
"trayfeel": {
"command": "trayfeel",
"args": ["mcp"]
}
}
}Cursor
Add an MCP server entry point to the same command (tram / or python -m trayfeel). Make sure окружение has права group cdrom.
Схемы инструментов for function calling via OPENAI / Claude are in examples/openai_tools.json / examples/claude_tools.json. Agent skill note: examples/agent_skill.md.
HTTP-server
For LAN-агентов, who cannot подклюзть MCP через stdio:
export TRAYFEEL_TOKEN="$(openssl rand -hex 16)"
trayfeel daemon --host 0.0.0.0 --port 8765Метод | Путь | Тело запроса |
GET |
| — |
GET |
| — |
GET |
| — |
POST |
|
|
POST |
|
|
Отправьте толок Authorization: Bearer $TRAYFEEL_TOKEN, если токен задан.
Зрение (опционально)
Если задано TRAYFEEL_CAMERA=/dev/video0 and milestone fffpmeg, трайfeel vision принимает кадр через V4L2 and returns эвристику яркости/концтов (best-effort). При отстутствие камеры или ffmpeg returns ok: false with reason — the process neverтерпит сбой.
Структура библиотеки
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Лицензия
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