lineus-mcp
# Line-us, revived
Software for the [Line-us](https://www.line-us.com) robot drawing arm: a small pen
plotter that started on Kickstarter, a three-servo arm that speaks G-code over TCP on the
local network.
<p align="center">
<img src="docs/line-us-drawing.webp" width="360"
alt="Claude Code on a monitor answers 'Yes, I can draw', and below it the Line-us arm writes Yes! in cursive, then draws a harmonograph and a flower">
<br>
<em>Asked to draw, the agent answers “Yes, I can draw” — and does, through lineus-mcp (2× speed).</em>
</p>
There are two ways to drive it here, for two different hands on the pen:
```
an AI agent ──▶ lineus-mcp ──┐
├──▶ lineus-core ──▶ TCP 1337 ──▶ Line-us
a person ──▶ lineus-jog ──┘
```
| Package | For | What it is |
|---|---|---|
| [lineus-mcp](packages/lineus-mcp) | agents | An MCP server: a scene language, single-stroke handwriting, doodles, and a preview that simulates what the pen will really do |
| [lineus-jog](packages/lineus-jog) | people | A window that moves the arm live from the keyboard, mouse or a gamepad, and calibrates the pen depth while you draw |
| [lineus-core](packages/lineus-core) | both | The arm as measured: its reach, pen model, coordinate mapping and connection |
<p align="center">
<img src="docs/line-us-drawing.jpg" width="640"
alt="A Line-us arm with a blue pen on white paper, under the handwritten word Yes!, a star, a looping harmonograph and flowers">
<br>
<em>The same page later, from above, the arm still at work on the last flower.</em>
</p>
The arm takes one connection at a time. Both tools let go of it when they are not using
it, so you can draw with an agent and jog by hand without restarting either.
## Install
Each tool installs on its own, straight from GitHub; neither pulls in the other's
dependencies.
```sh
uvx --from 'git+https://github.com/BenTeoNeb/lineus-mcp#subdirectory=packages/lineus-mcp' lineus-mcp
```
```sh
uvx --from 'git+https://github.com/BenTeoNeb/lineus-mcp#subdirectory=packages/lineus-jog' lineus-jog
```
How to register the MCP server with Claude Code, Claude Desktop or another client is in
[its README](packages/lineus-mcp/README.md#install). Both read the same `LINEUS_*`
environment variables, so set `LINEUS_HOST` (and any pen calibration) once for both.
## Development
A [uv workspace](https://docs.astral.sh/uv/concepts/projects/workspaces/): one lockfile,
one environment, one test run.
```sh
uv sync --all-packages # every package, with pytest and ruff
uv run pytest # all three packages: no robot, no network, a few seconds
uv run ruff check packages
```
## Safety
- Preview before drawing.
- Never expose port 1337 to the internet. There is no authentication.
## Licence
MIT — see [LICENSE](LICENSE).
TDQS
Scored across 17 tools
The preview_*/draw_* pairing gives each tool a clear render-vs-execute role, and distinct modalities (paths, svg, text, scene) separate the rest. Some overlap remains: preview_scene explicitly supersedes preview_paths and its text producer overlaps preview_text/draw_text, but the descriptions steer the agent well.
The dominant pattern is verb_noun (get_status, get_job, preview_paths, draw_scene, plan_scene, list_fonts, get_example). A few deviate (bare 'abort', 'home', and the noun 'doodles'), but overall it is predictable and readable.
17 tools is on the heavier side but each preview/draw pair and helper (plan_scene, list_fonts, get_example, doodles) earns its place. Nothing feels redundant or padded.
Strong lifecycle coverage: status/job monitoring, abort/home, orientation calibration, four input modalities with preview and execute, plus cost planning, font enumeration, examples, and doodle sourcing. Minor gaps like explicit queue management or pen/feed control are easy to work around.