Claude meets Bob: an AI agent controlling a physical robot via MCP
Something clicked this week that I want to share: I opened Claude Code, typed a question, and a robot in the next room responded. No HTTP client. No curl commands. No custom glue code. Just a conversation.
This is what the OpenCastor MCP integration looks like in practice.
What it looks like
With castor mcp configured in ~/.claude.json, Claude Code gets 14 new tools — discoverable automatically via /mcp:
castor__robot_status— live status (LoA 0)castor__robot_telemetry— sensor + system datacastor__robot_navigate— navigation commands (LoA 1)castor__robot_estop— emergency stop (always LoA 0)castor__send_command— raw RCAN dispatchcastor__get_config/castor__set_config— config read/write (LoA 2)castor__robot_attest— compliance attestation- …and 6 more
Here’s a real exchange while debugging a session:
Me: What’s Bob’s current CPU temp and active model?
Claude: [calls castor__robot_telemetry] Bob is running at 48.5°C with claude-opus-4-6 via Anthropic. RAM usage is at 62%, disk at 69%. No thermal concerns.
No context switching. No app. Claude just knew.
Access control that actually ships
Every tool is gated by Level of Assurance (LoA). Claude Code’s token is LoA 3 on my setup — full trust, because it’s me on my own machine. A third-party agent integration would get LoA 1 at most. ESTOP is always LoA 0 — Protocol 66 isn’t optional, not even for Claude.
Why MCP fits Physical AI
REST APIs need you to know the API. MCP tools are self-describing — Claude discovers what Bob can do from the schema and composes calls. When I asked it to “check if Bob is healthy and optimize for current RAM headroom,” it made four sequential tool calls and proposed a config change before asking me to confirm.
That’s a multi-step physical AI workflow with zero custom code on my end.
Every action is signed
Tool calls that mutate robot state produce a RCAN v2.2 envelope: LoA, agent identity, sequence number, ML-DSA-65 signature. castor audit --tail shows the full provenance. Automatic, signed, immutable.
Setup
castor mcp token --name claude --loa 3
castor mcp install --client claude
Requires OpenCastor v2026.3.29.1+. Docs at opencastor.com/docs/mcp.
The thing that surprised me most: I’ve been using this daily. When something breaks on Bob, I just ask Claude — and Claude can check. That’s the shift.