| type | handoff | ||||
|---|---|---|---|---|---|
| project | tasker-mcp | ||||
| path | D:\servers\tasker-mcp | ||||
| phase | Phase 6: Phone Setup & E2E Testing | ||||
| progress | 5/6 | ||||
| status | active | ||||
| temperature | hot | ||||
| git |
|
||||
| created | 2026-01-16 12:49:00 UTC | ||||
| updated | 2026-01-17 01:45:00 UTC | ||||
| generated | 2026-01-17 01:45:00 UTC |
Phase 6: Phone Setup & E2E Testing - UNIVERSAL EXECUTOR WORKING
Claude can now control the phone via eval(). The XML import approach failed, so we pivoted to a "Universal Executor" pattern:
Claude → HTTP POST → Tasker (port 1821) → JavaScriptlet eval() → Phone action
| Command | Status | Example |
|---|---|---|
flash |
✅ Working | {"type":"flash","msg":"Hi"} |
eval |
✅ Working | {"type":"eval","code":"flash('test')"} |
say (TTS) |
✅ Working | {"type":"say","text":"Hello"} |
get |
✅ Working | {"type":"get","name":"BATT"} |
shell |
Untested | {"type":"shell","cmd":"ls"} |
tap |
Needs AI_Tap task | {"type":"tap","x":500,"y":1000} |
text |
Needs AI_Text task | {"type":"text","input":"hello"} |
- Phase 1: Project setup
- Phase 2: Go server implementation
- Phase 3: Tasker profile hardening
- Phase 4: Integration with master-mcp-proxy
- Phase 5: android-mcp Repair + Tasker Bridge
- Phase 6: Phone Setup & E2E Testing <- IN PROGRESS
- Tailscale connectivity (100.98.193.61)
- Port 1821 HTTP working
- Claude_Executor task created (JavaScriptlet + HTTP Response)
- Basic commands working (flash, eval, say, get)
- Create AI_Tap task (AutoInput)
- Create AI_Text task (AutoInput)
- Full integration test
- Update tasker-mcp Go code to use new endpoint
| Blocker | Severity | Notes |
|---|---|---|
| XML Import fails | ABANDONED | "failed to import profile data" - gave up, using Universal Executor instead |
| Component | Status |
|---|---|
| Tasker profile: Claude_Executor | ✅ Created |
| HTTP trigger: POST /exec on 1821 | ✅ Working |
| JavaScriptlet with eval() | ✅ Working |
| HTTP Response action | ✅ Added (no more timeouts) |
| AutoInput installed | ✅ Yes |
| AI_Tap task | ❌ Not created yet |
| AI_Text task | ❌ Not created yet |
| File | Purpose |
|---|---|
/sdcard/Download/claude_executor.js |
Full JavaScriptlet code (on phone) |
D:\servers\android-mcp\mcp_server\unified\android_mcp.py |
Fixed SSH fallback (added tailscale_ip) |
D:\servers\tasker-mcp\CLAUDE.md |
Added gotcha about android tools |
Problem: SSH to phone was flaky when remote.
Root Cause: Code used elif so tailscale_ip was never tried when tailscale_hostname existed.
Fix:
- Added
tailscale_ip: "100.98.193.61"to phone config - Changed
eliftoifso both IP and hostname are tried - Order: local IP → Tailscale IP → MagicDNS hostname
Files changed:
android_mcp.py:169- added tailscale_ipandroid_mcp.py:726-729- fixed fallback logic
-
Create AI_Tap task (for AutoInput screen taps):
- Tasks → + → name: AI_Tap
- Add Plugin → AutoInput → Action
- Action Type: Click, Click Type: Point
- X: %par1, Y: %par2
-
Create AI_Text task (for AutoInput typing):
- Tasks → + → name: AI_Text
- Add Plugin → AutoInput → Action
- Action Type: Text
- Text: %par1
-
Test full capabilities (shell, file ops, wifi toggle, etc.)
-
Optional: Update tasker-mcp Go code to call /exec endpoint
Location: /sdcard/Download/claude_executor.js
Handles: flash, eval, run, shell, set, get, say, clip, read, write, wifi, vol, bright, tap, text
- User has AutoInput installed and enabled
- XML import is fundamentally broken for this Tasker version - don't retry
- Universal Executor gives ~80% phone control without root
- TTS works - Claude can speak to user
- Session ended because user needs to be home to create AutoInput tasks (Tasker kicks out when switching apps)
/start tasker-mcp
Create the two AutoInput tasks (AI_Tap, AI_Text), then test full control.