Skip to main content
Glama
robotarm

robotarm

by walcorg

robotarm-lab

A dual-arm robot with a camera and dexterous hands, planned by Claude through MCP, executed by a local learned policy (LeRobot) and kept safe by real-time firmware.

Claude decides what to do ("move the cup from station 2 to station 3 with the left hand"). A local policy decides how to move the fingers, 30 times per second. The firmware closes the loop on every joint at 1 kHz and owns every safety limit.

flowchart LR
    subgraph Cloud
        C[Claude<br/>planner<br/>1–3 s per decision]
    end
    subgraph "Local PC"
        M[MCP server<br/>this repo<br/>&lt; 5 ms]
        P[Policy<br/>SmolVLA / ACT<br/>~30 Hz]
        V[Detector<br/>YOLO + ArUco]
    end
    subgraph Robot
        F[Firmware<br/>PID, limits, e-stop<br/>~1 kHz]
        S[Servos + encoders]
        K[Cameras]
    end
    C -- tool call --> M
    M -- result + scene --> C
    M -- task --> P
    P -- joint targets --> F
    F -- PWM / current --> S
    S -- position, current --> F
    K -- frames --> P
    K -- frames --> V
    V -- scene JSON --> M

Design principles

  1. Claude is the planner, never the controller. It sees the scene as JSON (plus an image only when needed), calls a small set of tools and reads back a result code. It is never in a real-time loop.

  2. Objects live in fixed stations. Every object the hands handle sits in a numbered station with self-centring guides and an ArUco marker. Claude addresses stations, not coordinates. This removes most of the uncertainty in manipulation.

  3. Safety lives in firmware and hardware. Joint limits, current limits, watchdog and the e-stop are enforced below every layer that can be wrong, including Claude and the policy.

  4. Same interface from simulation to the real arms. The MCP layer talks to a Backend; the simulated backend, the SO-101 test arms and the custom arms all implement it.

Related MCP server: mcp-esieabot

Design

Concept render

Hydroponic sprouter system with the dual-arm carriage, AI-enhanced render

This image was enhanced with AI (neural rendering) from the CAD concept. It is an illustration, not the engineering model: details such as the spray bar, control cabinet and signage are artistic and may differ from the final design.

Current CAD model

Created with Autodesk Inventor. Dimensions and parts are not final.

Rotating reel and dual-arm carriage: twelve cultivation tubes mounted on two 12-spoke hubs around a central shaft. The reel rotates to bring each tube to the arms. Both arms sit back to back on one sliding carriage that runs along a rail above the reel.

Dual-arm carriage on the rail:

Reel indexing

The reel has no motor: the arms turn it by pushing pegs on the hub, a ratchet keeps it from rolling back, and a spring latch locks it at each of the 12 positions. Design decision.

Earlier iterations

First 3D sketches, also created with Autodesk Inventor.

Reel-shaped grow rack with the arm: cultivation tubes arranged as a reel on a steel frame, with the arm mounted beside it.

Arm: base joint with a large stepper and housing, two links, and smaller steppers at the elbow and the wrist.

Status

Phase

Goal

State

0

Repository, specs, MCP server with simulated backend

✅ this commit

1

Validate the pipeline on LeRobot SO-101 arms

planned

2

Record datasets, train a manipulation policy

planned

3

Design and build the custom arms and hands (Autodesk Inventor)

planned

4

Integrate cameras, stations and Claude on the real cell

planned

Details and exit criteria: docs/roadmap.md.

Try the simulated cell

git clone https://github.com/walcorg/robotarm-lab
cd robotarm-lab
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest -q

# Register the MCP server with Claude Code and talk to the simulated cell
claude mcp add robotarm -- robotarm-mcp --backend sim
claude
> Move the cup to the handover station, then pass it to the right hand and put it in outbound.
> Then bring tube 7 to the arms.

--grip-fail-rate 0.3 makes the simulator drop grasps and --latch-fail-rate 0.2 makes the reel latch miss, so you can see how Claude recovers.

Repository layout

Path

Contents

src/robotarm_lab/

MCP server, validation controller, backends (sim today)

config/workcell.toml

Stations, hands and reach; initial objects for simulation

docs/

Architecture, MCP tool spec, scene schema, safety, roadmap

docs/visualization/

Animated view of one decision travelling from the model to the servos

hardware/

Inventor sources and exports for arms, hands and workcell

firmware/

Joint controller firmware (requirements first, code in phase 1–3)

policy/

LeRobot configs, dataset notes and trained policy cards

Documentation

License

  • Software (everything outside hardware/): MIT

  • Hardware designs in hardware/: CERN-OHL-W-2.0

© 2026 WALCORG

Available Tools

11 tools
bring_tubeB

Turn the cultivation reel forward until tube (1-12) faces the arms. The arms turn it themselves; both hands must be at home and the operating hand empty.

Inputs: tube (required), hand.

get_sceneB

Current objects per station, what each hand holds, and whether the cell is stopped.

Inputs: no named parameters.

get_workcellC

Stations (id and label) and which stations each hand can reach.

Inputs: no named parameters.

homeB

Return a hand to its home pose without releasing what it holds.

Inputs: hand (required).

move_objectB

Move the object in from_station to to_station with one hand ('left' or 'right'), then return that hand home. Nothing moves if the plan is impossible.

Inputs: hand (required), to_station (required), from_station (required).

pickB

Grasp the object in a station. Use for hand-overs; prefer move_object otherwise.

Inputs: hand (required), station (required).

placeC

Release the held object into an empty station.

Inputs: hand (required), station (required).

recent_actionsC

The last n actions with their result codes.

Inputs: n. Returns: result

resetA

Clear a software stop. Only call after the human confirms the cell is safe.

Inputs: no named parameters.

rotate_reelA

Advance the reel a number of positions with one hand. Forward only (ratchet). Prefer bring_tube unless you need an exact number of steps.

Inputs: hand (required), steps (required).

stopA

Halt all motion immediately. Latches until reset.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    B3.3/5.0

    Scored across 11 tools

    Disambiguation4/5

    Most tools target distinct operations, but pick/place/move_object and bring_tube/rotate_reel overlap somewhat in manipulation and reel control. The descriptions explicitly resolve these boundaries by recommending move_object over pick/place for normal transfers and bring_tube over rotate_reel unless exact steps are needed.

    Naming Consistency3/5

    All names use snake_case, but the set mixes bare verbs (pick, place, home, stop, reset) with verb_noun names (move_object, bring_tube, rotate_reel) and a noun-like name (recent_actions). The convention is readable but not a predictable verb_noun pattern throughout.

    Tool Count5/5

    Eleven tools is well within the expected range and each appears to earn its place: state inspection, movement, pick/place, homing, reel control, emergency stop, reset, and action history. The surface is neither bloated nor thin for a robotic workcell controller.

    Completeness4/5

    The set covers sensing, manipulation, reel handling, safety stop/reset, and audit history, which is strong lifecycle coverage for the domain. A notable minor gap is the lack of a direct reel-state query, such as which tube currently faces the arms, though agents can partially work around it via bring_tube or recent_actions.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Bridges Claude Code to CNCjs to enable remote control and monitoring of GRBL-based CNC machines. It provides a comprehensive toolset for managing G-code jobs, machine movement, and safety operations through natural language.
      30
      1
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Enables agents to safely drive a simulated Franka Panda pick-and-place cell through MCP tools, with gated motion, emergency stop, structured errors, and audit logging.
      -
    • F
      license
      A
      quality
      C
      maintenance
      Enables AI agents to discover and safely interact with simulated Seeed reBot robotic arms, reading device state and planning dry-run movements with enforced safety limits.
      5
      -