The MCP server is now a ROS node and the only way in or out, per the owner's decision that ROS never leaves the robot. It serves MCP on the USB address only with a bearer token, keeps the stable tool name look() (which waits for the next camera frame, so it is never stale, and passes the camera's JPEG through), and registers turn_head/head_position only when a head is fitted, which today it is not. While an authenticated client is connected it republishes the agent heartbeat on /hermes/state, so the face wakes on connect and sleeps about 40 s after the client leaves; look() also makes the face squint. The token is generated on the Pi into /etc/robot-mcp.env (root:hermes, 640) and never printed. Verified end to end from talos with a real MCP client over the USB link: tools listed, a 157 KB JPEG back in 0.08 s, a wrong token refused, the Wi-Fi path dropped by the firewall. Host config snippets now point at 10.55.0.2. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
23 lines
1.2 KiB
Bash
Executable File
23 lines
1.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# One unit runs the whole robot (face, camera, vision, audio, MCP bridge) via the hermes_bringup launch file, so
|
|
# the face is up whenever the robot is powered, and everything is ROS. Each node is its own process
|
|
# and is respawned by the launch file, so one crash cannot take the others down.
|
|
# Replaces the earlier standalone robot-face.service. Run as root from this directory. Re-runnable.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
# The MCP bridge's bearer token: created once, readable only by root and the service user, and never
|
|
# printed (read it yourself with `sudo cat /etc/robot-mcp.env` when configuring the host).
|
|
if [ ! -s /etc/robot-mcp.env ]; then
|
|
(umask 077; printf 'ROBOT_MCP_TOKEN=%s\n' "$(openssl rand -hex 32)" > /etc/robot-mcp.env)
|
|
fi
|
|
chown root:hermes /etc/robot-mcp.env
|
|
chmod 640 /etc/robot-mcp.env
|
|
install -m 644 robot-cpu-performance.service robot.service /etc/systemd/system/
|
|
systemctl disable --now robot-face.service 2>/dev/null || true
|
|
rm -f /etc/systemd/system/robot-face.service
|
|
systemctl daemon-reload
|
|
systemctl enable --now robot-cpu-performance.service
|
|
systemctl enable robot.service
|
|
systemctl restart robot.service
|
|
echo "robot.service enabled and started"
|