VectorClaw
# ๐ค VectorClaw
<div align="center">
[](https://github.com/danmartinez78/VectorClaw/actions/workflows/ci.yml)
[](https://www.python.org/downloads/)
[](https://pypi.org/project/vectorclaw-mcp/)
[](LICENSE)
[](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
Scored across 24 tools
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.
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.
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.
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.