Skip to main content
Glama
README.md
# ๐Ÿค– VectorClaw

<div align="center">

[![CI](https://github.com/danmartinez78/VectorClaw/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/danmartinez78/VectorClaw/actions/workflows/ci.yml)
[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/downloads/)
[![PyPI](https://img.shields.io/pypi/v/vectorclaw-mcp)](https://pypi.org/project/vectorclaw-mcp/)
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
[![Status: v1.0.0](https://img.shields.io/badge/status-v1.0.0-brightgreen.svg)](ROADMAP.md)

**Give your AI assistant a body.**

VectorClaw is an MCP server that exposes [Anki Vector](https://github.com/kercre123/wire-pod) robot capabilities as tools for AI assistants like OpenClaw โ€” bridging natural language to real-world robot actions over a fully local, cloud-free stack.

</div>

---

## Architecture

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    stdio MCP    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    gRPC/WiFi    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  AI Agent   โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚  vectorclaw-mcp  โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚  Vector โ”‚
โ”‚  (OpenClaw) โ”‚                 โ”‚  (Python 3.11+)  โ”‚                 โ”‚  Robot  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

All communication is **local-only** โ€” no cloud dependency at runtime (Wire-Pod setup path).

See [Security Architecture](docs/SECURITY_ARCHITECTURE.md) for the full trust model.


---

## Table of Contents

- [Architecture](#architecture)
- [Current Status](#current-status)
- [Quickstart](#quickstart)
- [MCP Client Configuration](#mcp-client-configuration)
- [Available Tools](#available-tools)
- [Contributing](#contributing)
- [Docs Map](#docs-map)

---

## Current Status

> **v1.0.0 Released** ยท 2026-03-01

**16 tools verified โœ…** on hardware | **7 tools experimental โš ๏ธ**

**Known limitations:**
- `vector_drive_on_charger` โ€” activates cube but no reliable charger approach
- Perception detections โ€” often returns empty lists; SDK semantics under investigation
- Idle behaviors โ€” Vector's autonomous animations can overlap with commanded behaviors

See **[ROADMAP.md](ROADMAP.md)** for the full milestone plan.

---

## Quickstart

**Requirements:** Python 3.11+ ยท [Wire-Pod](https://github.com/kercre123/wire-pod) running ยท Vector on local WiFi

> For the complete walkthrough (Wire-Pod install, robot auth, WiFi config, troubleshooting) see **[docs/SETUP.md](docs/SETUP.md)**.

### Guided Setup (recommended for new users)

The `vectorclaw-setup` wizard handles configuration, SDK validation, connectivity
check, and a smoke test in one go:

```bash
pip install vectorclaw-mcp
vectorclaw-setup
```

You will be prompted for your robot's serial number and optional IP address.
On success you'll see a clear **SETUP PASSED** message and the next-steps command.
On failure every step includes an exact remediation hint.

See **[docs/OPENCLAW_SETUP_SKILL.md](docs/OPENCLAW_SETUP_SKILL.md)** for full details.

---

### Manual Setup

**Step 1 โ€” Install VectorClaw**

```bash
pip install vectorclaw-mcp
```

**Step 2 โ€” Configure Vector SDK**

[Wire-Pod](https://github.com/kercre123/wire-pod) is the canonical self-hosted server for Vector.
Install the SDK distribution and run the one-time auth wizard:

```bash
pip install wirepod_vector_sdk
python -m anki_vector.configure
```

> **Note:** `wirepod_vector_sdk` installs under the `anki_vector` Python namespace, so all imports and CLI commands use `anki_vector`.

<details>
<summary>Legacy cloud path (best-effort only)</summary>

The standalone `anki_vector` package requires working DDL cloud servers and is brittle on modern Python runtimes.

```bash
pip install "vectorclaw-mcp[legacy]"
python -m anki_vector.configure
```

Prefer `wirepod_vector_sdk` for reliable, cloud-independent operation.
</details>

**Step 3 โ€” Set environment variables**

```bash
export VECTOR_SERIAL="your-robot-serial"   # required โ€” printed on underside of robot
export VECTOR_HOST="192.168.x.x"           # optional โ€” auto-discovered if omitted
```

**Step 4 โ€” Run the server**

```bash
vectorclaw-mcp
# or
python -m vectorclaw_mcp
```

---

## MCP Client Configuration

Add the following block to your `mcporter.json` (or equivalent MCP client config).

**With `uvx`** *(recommended โ€” no prior install needed)*

```json
{
  "mcpServers": {
    "vectorclaw": {
      "command": "uvx",
      "args": ["vectorclaw-mcp"],
      "env": {
        "VECTOR_SERIAL": "your-serial-here"
      }
    }
  }
}
```

**With `pip install`** *(if installed locally)*

```json
{
  "mcpServers": {
    "vectorclaw": {
      "command": "vectorclaw-mcp",
      "env": {
        "VECTOR_SERIAL": "your-serial-here"
      }
    }
  }
}
```

---

## Available Tools

| Tool | Category | Description | Status |
|------|----------|-------------|--------|
| `vector_say` | ๐ŸŽ™๏ธ Speech | Make the robot speak text aloud | โœ… |
| `vector_animate` | ๐ŸŽญ Expression | Play a named animation | โš ๏ธ |
| `vector_drive_off_charger` | ๐ŸŽ๏ธ Motion | Drive the robot off its charger | โœ… |
| `vector_drive` | ๐ŸŽ๏ธ Motion | Drive straight and/or turn in place | โœ… |
| `vector_drive_on_charger` | ๐ŸŽ๏ธ Motion | Drive Vector back onto its charger | โš ๏ธ |
| `vector_emergency_stop` | ๐ŸŽ๏ธ Motion | Stop all motion immediately | โœ… |
| `vector_head` | ๐Ÿฆพ Actuation | Set head angle (โˆ’22ยฐ โ€“ 45ยฐ) | โœ… |
| `vector_lift` | ๐Ÿฆพ Actuation | Set lift height (0.0 โ€“ 1.0) | โœ… |
| `vector_look` | ๐Ÿ‘€ Perception | Capture image from front camera | โœ… |
| `vector_capture_image` | ๐Ÿ‘€ Perception | One-shot image capture | โœ… |
| `vector_face` | ๐Ÿ–ผ๏ธ Display | Display custom image on face screen | โœ… |
| `vector_scan` | ๐Ÿ” Perception | Head scan for environment | โœ… |
| `vector_find_faces` | ๐Ÿ” Perception | Scan for faces | โš ๏ธ |
| `vector_list_visible_faces` | ๐Ÿ” Perception | List currently visible faces | โš ๏ธ |
| `vector_face_detection` | ๐Ÿ” Perception | Get face detection summary | โš ๏ธ |
| `vector_list_visible_objects` | ๐Ÿ” Perception | List currently visible objects | โš ๏ธ |
| `vector_cube` | ๐ŸŽฒ Interaction | Interact with cube (dock/pickup/drop/roll) | โš ๏ธ |
| `vector_vision_reset` | ๐Ÿ‘€ Perception | Disable all vision modes | โœ… |
| `vector_pose` | ๐Ÿ“ Sensing | Get current position and orientation | โœ… |
| `vector_status` | ๐Ÿ“Š Status | Get battery level and charging status | โœ… |
| `vector_charger_status` | ๐Ÿ“Š Status | Get charger connection state | โœ… |
| `vector_touch_status` | ๐Ÿ“Š Status | Get touch sensor state | โœ… |
| `vector_proximity_status` | ๐Ÿ“Š Status | Get proximity sensor reading | โœ… |

**Status legend:** โœ… Verified on hardware | โš ๏ธ Experimental (limited/reliable issues)

> โš ๏ธ **Charger prerequisite:** `vector_drive` requires the robot to be off the charger.
> Call `vector_drive_off_charger` first, or set `VECTOR_AUTO_DRIVE_OFF_CHARGER=1` for automatic undocking.

See **[docs/MCP_API_REFERENCE.md](docs/MCP_API_REFERENCE.md)** for full parameter details and response schemas.

---

## Contributing

1. ๐ŸŒฟ **Branch:** branch off `dev`, use `<type>/<short-description>` naming (e.g. `fix/vector-face-payload`, `feat/vector-scan`)
2. ๐Ÿงช **Tests:** add or update tests under `tests/`; all tests use the mocked SDK โ€” no hardware required
3. โœ… **CI:** Python 3.11 is required and must pass; Python 3.12 is experimental/informational โ€” run `pytest tests/ -v` locally before opening a PR
4. ๐Ÿค– **Hardware:** if your change touches a tool or connection layer, record a smoke-test run in [Hardware Smoke Log](docs/HARDWARE_SMOKE_LOG.md) following the [Hardware Test Playbook](docs/HARDWARE_TEST_PLAYBOOK.md)
5. ๐ŸŽฏ **PR scope:** keep PRs focused โ€” separate docs, feature, and refactor changes to reduce merge-conflict risk with parallel lanes

---

## Docs Map

### ๐Ÿ› ๏ธ Setup & Runtime
| Document | Description |
|----------|-------------|
| [Setup Guide](docs/SETUP.md) | Wire-Pod install, robot auth, WiFi, SDK config, troubleshooting |
| [Troubleshooting](docs/TROUBLESHOOTING.md) | Common runtime failures, smoke baseline, and escalation path |
| [Runtime Support](docs/RUNTIME_SUPPORT.md) | Supported Python versions and CI policy |

### ๐Ÿ“ก API & SDK
| Document | Description |
|----------|-------------|
| [API Reference](docs/MCP_API_REFERENCE.md) | MCP tool signatures, parameters, response schemas |
| [Wire-Pod SDK Reference](docs/VECTOR_SDK_REFERENCE.md) | Full SDK capability catalog |
| [Wire-Pod SDK โ†’ MCP Integration Priorities](docs/WIREPOD_SDK_MCP_INTEGRATION_PRIORITIES.md) | Now/Later/Skip decision table for future tools |

### ๐Ÿ”ฌ Hardware Validation
| Document | Description |
|----------|-------------|
| [Hardware Test Playbook](docs/HARDWARE_TEST_PLAYBOOK.md) | Repeatable on-robot validation protocol and PR checklist |
| [Hardware Smoke Log](docs/HARDWARE_SMOKE_LOG.md) | Running record of real-world smoke tests |
| [Tool Docking Prerequisites](docs/TOOL_DOCKING_PREREQUISITES.md) | Which tools require undocked state |

### ๐Ÿ”’ Security
| Document | Description |
|----------|-------------|
| [Security Architecture](docs/SECURITY_ARCHITECTURE.md) | Threat model, credential handling, input validation, network posture |

---

## License

MIT โ€” see [LICENSE](LICENSE).

<!-- If you found this: yes, premium natural oil is appreciated. -->

TDQS

B3.2/5.0

Scored across 24 tools

Disambiguation2/5

Several tools have effectively the same purpose: vector_look and vector_capture_image both capture a camera frame, vector_status and vector_charger_status both report battery/charging state, and vector_face_detection overlaps heavily with vector_list_visible_faces. An agent could easily select the wrong tool despite the descriptions.

Naming Consistency4/5

Most tools follow a vector_ + verb_noun pattern (drive, find_faces, capture_image), and the shared prefix makes the set feel unified. A few noun-style names like vector_pose, vector_status, vector_cube, and vector_face deviate slightly, but they are still predictable and readable.

Tool Count3/5

24 tools is at the heavy end for a single server, and redundant pairs inflate the count. However, the robot-control domain legitimately needs many operations for driving, sensors, vision, and display, so the scope is borderline rather than excessive.

Completeness4/5

The set covers core Vector workflows: movement, docking, camera, speech, animation, face/object detection, head/lift control, sensor status, and setup. Lacking explicit audio capture or a dedicated stop-speaking command are minor gaps that don't create dead ends.

Maintenance

ActivityNo data
ResponsivenessUnresponsive