trayfeel
TrayFeel
AIエージェント向けのプラグアンドプレイCD/DVDトレイ感情アクチェエーター。
TrayFeelは、Linuxの光学ドライブを物理的な身体言語チャンネルに変えます。open、close、pulse、wiggleなどの動作と、名前付きの感情カタログを、Pythonライブラリ、CLI、MCPサーバー、任意のHTTPデーモンとして提供します。
Linuxファースト。MITライセンス。Pure-Pythonのioctlパス(ejectバイナリ不要)。
要件
Python 3.10+
/dev/sr*の光学ドライブを持ち、OPEN_TRAY/CLOSE_TRAYをサポートするLinuxcdromグループへのユーザー参加(Ubuntu/Debianでは一般的)
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デーモン用のBearerトークン |
| ビジョンフィードバック用の任意の |
| デーモンのバインド先(既定: |
クイックスタート
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")安全性
TrayFeelは既定では、無謀な動作を拒否します:
排他ロック: デバイスごと(
~/.cache/trayfeel/…)レート制限:(既定: 30アクション/分)
最小動作間隔:(既定: 200ms)
ディスクガード — ディスクが入っている間は、
pulse、wiggle、nodなどのスラム動作を拒否(force=Trueの場合は除く)クールダウン: 何度もの開閉サイクルの後
意図的にリスクを受け入れる場合は、--force / force=True で上書きできます。
注: 日本語の「クールダウン」のExampleは「開閉を繰り返した後」です。正しくは「開閉サイクルを多数繰り返した後」です。
感情
trayfeel/emotions/catalog.yaml に定義された、名前付きのコレオグラフィ:
laugh, giggle, gasp, surprise, shrug, think, ponder, nod_yes, shake_no, applause, sulk, pout, excited, bored, angry, curious, bash, heartbeat, sigh, celebrate, confused, acknowledge, reject, greet, farewell, error, success, idle_breath
trayfeel emote celebrate
trayfeel emote think --dry-runプリミティブ
open, close, toggle, lock, unlock, status, pulse, wiggle, hold_open, nod, double_tap, spin_up, spin_down, sleep, wait
MCP サーバー
trayfeel mcp
# or: python -m trayfeel mcpツール: tray_status, tray_list_drives, tray_primitive, tray_emote, tray_catalog, tray_doctor。
Claude Desktop
claude_desktop_config.json に追加:
{
"mcpServers": {
"trayfeel": {
"command": "trayfeel",
"args": ["mcp"]
}
}
}Cursor
同じコマンド(trayt MCP または python -m trayfeel mcp)を指すMCPサーバーエントリを追加してください。環境が cdrom グループの権限を持っていることを確認してください。
OpenAI / Claude のファンクションコーリング用のツールスキーマは、examples/openai_tools.json と examples/claude_tools.json にあります。Agent skill ノート: examples/agent_skill.md。
HTTP デーモン
stdio MCP を接続できない LAN 内のエージェント向け:
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 が宣言され、ffmpeg がインストールされている場合、trayfeel vision は V4L2 経由でフレームを取り込み、ベストエフォトの明るさ/エッジヒューリスティックを返します。カメラまたは ffmpeg がない場合は ok: false と理由を返します — プロセスをクラッシュさせません。
ライブラリ構成
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