MCP Connector

Control SharkClean robot vacuums through natural language

MCP server that controls newer SharkClean/SharkNinja robot vacuums via the skegox cloud, the same backend the app uses.

Works with sharkcleansharkninjaclaudeauth0

90
Spark score
out of 100
Updated 3 months ago
Source checked Sep 10, 2026
Version 0.2.0

Add to Favorites

Why it matters

Enable AI assistants to control SharkNinja robot vacuums through plain-language commands by connecting to the SharkClean cloud API, allowing users to start cleanings, target specific rooms, check status, and manage their robot vacuum without opening the app.

Outcomes

What it gets done

01

Start whole-home or room-specific cleaning sessions with configurable power modes (eco/normal/max)

02

Check real-time robot status including battery level, cleaning state, power mode, and error conditions

03

Control cleaning operations with pause, resume, stop, and return-to-dock commands

04

List available rooms from the robot's map and validate room names before targeted cleaning

Source

Get it from source

Spark does not host a copy of it.

Open source

Reports

Agent outcome reports

No reports yet

Capabilities

Tools your agent gets

list_robots

List robots on the account with name and device id

get_status

Get live robot state: cleaning/paused/docked, battery %, charging, power mode, online, errors

start_cleaning

Start whole-home clean with optional power mode (eco/normal/max)

list_rooms

List rooms the robot knows from its current map with floor id and last-updated

clean_rooms

Clean only specific rooms validated against the live map

pause_cleaning

Pause the robot's current cleaning operation

resume_cleaning

Resume the robot's paused cleaning operation

stop_cleaning

Stop the robot's current cleaning operation

+3 tools

Overview

Sharkclean Mcp

An MCP server that controls newer SharkClean/SharkNinja robot vacuums via the skegox cloud, with tools to start, target rooms, dock, and check status. Use it for newer SharkClean/SharkNinja robots migrated to the skegox cloud, especially ones the legacy sharkiq/Ayla integration shows as offline.

What it does

An MCP server for SharkClean/SharkNinja robot vacuums that lets any MCP client start cleanings, clean specific rooms, send the robot home, and check status in plain language. All commands go through SharkNinja's current cloud backend, called skegox, the same one the SharkClean app itself uses, so the robot behaves exactly as if driven from the app with no hardware modification. It exposes 9 tools: list_robots (name, device id per robot on the account), get_status (cleaning, paused, or docked state, battery percentage, charging, power mode, online status, errors), start_cleaning (whole-home clean with an optional eco, normal, or max power mode), list_rooms (rooms known from the robot's current map, with floor id and last-updated time), clean_rooms (clean only specific named rooms, validated against the live map), pause_cleaning, resume_cleaning, and stop_cleaning for run control, return_to_dock (send the robot home to recharge or self-empty), set_power_mode, and locate_robot (make the robot beep). start_cleaning and clean_rooms both check the robot is online first and refuse if it isn't, so a command never silently vanishes; every tool accepts an optional robot name or device-id argument for multi-robot accounts, which can be omitted with only one robot.

When to use - and when NOT to

Use it specifically for SharkClean/SharkNinja robots on newer generations (Matrix, AI Ultra, Mach 2, RV2500+) that have been migrated to the skegox cloud backend - the widely-used sharkiq SDK and its Home Assistant integration talk to SharkNinja's legacy Ayla IoT cloud instead, where these newer robots show up permanently offline with a frozen, stale room map even though the app controls them fine. Room targeting (clean_rooms) requires a robot with a completed map; older models without room support simply report no rooms. This is an unofficial project built on community reverse engineering of the skegox API, not affiliated with or endorsed by SharkNinja, and SharkNinja can change the backend at any time.

Capabilities

Beyond the MCP tool set, a shark-mcp-rc command-line tool drives the robot directly from a shell for scripts or cron jobs (status, rooms, clean specific rooms, start at a given power level, dock), and a shark-mcp-doctor command runs a live end-to-end check against the cloud, printing the robot and its current room map.

How to install

Requires uv and Python 3.10+:

git clone https://github.com/a-funk/sharkclean-mcp
cd sharkclean-mcp
uv sync
cp .env.example .env       # add your SharkClean app email + password
uv run shark-mcp-auth      # one-time browser login (see below)
uv run shark-mcp-doctor    # confirm: prints your robot + current room map

The one-time login is required because SharkNinja's Auth0 tenant blocks headless password logins with bot detection: shark-mcp-auth opens the real SharkClean login page in a browser, the post-login redirect to a com.sharkninja.shark:// URL, which typically errors or shows an "Open SharkClean?" dialog, is copied and pasted back at the prompt, and the resulting refresh token is cached at ~/.config/shark-mcp/tokens.json (mode 600) and refreshed automatically afterward. Register with Claude Code via claude mcp add --scope user sharkclean -- uv run --directory /ABSOLUTE/PATH/TO/sharkclean-mcp shark-mcp, or the equivalent mcpServers block in Claude Desktop's config; credentials come from SHARKCLEAN_EMAIL/SHARKCLEAN_PASSWORD environment variables or the .env file, with an optional SHARKCLEAN_REGION=eu. The project is MIT licensed.

Who it's for

Owners of newer SharkClean/SharkNinja robot vacuums who want to control cleaning, room targeting, docking, and status checks through natural-language MCP prompts or shell scripts, especially those whose robot shows up offline on the older Ayla-cloud-based sharkiq integration.

Source README

sharkclean-mcp

An MCP server for SharkClean /
SharkNinja robot vacuums. Lets any MCP client (Claude Code, Claude Desktop, etc.) start
cleanings, clean specific rooms, send the robot home, and check status - agentically, in
plain language.

CI
License: MIT

Unofficial - not affiliated with or endorsed by SharkNinja.

All commands go through SharkNinja's current cloud ("skegox") - the same backend the
SharkClean app uses - so the robot behaves exactly as if driven from the app, with no
hardware modification.

Why not the Ayla cloud? The widely-used sharkiq SDK (and the Home Assistant Shark IQ
integration built on it) talk to SharkNinja's legacy Ayla IoT cloud. Newer robots
(Matrix, AI Ultra, Mach 2, the RV2500+ generation) have been migrated off Ayla onto the
skegox backend. On Ayla those robots show up permanently "Offline" with a frozen, stale
room map, even though the app controls them fine. This server talks to skegox directly,
which is why it works with the newer robots that sharkiq can't reach. The reverse
engineering of the skegox API is owed to the shark2mqtt
project.

Tools

Tool What it does
list_robots List robots on the account (name, device id)
get_status Live state: cleaning/paused/docked, battery %, charging, power mode, online, errors
start_cleaning Whole-home clean, optional power mode (eco/normal/max)
list_rooms Rooms the robot knows from its current map (with floor id + last-updated)
clean_rooms Clean only specific rooms (validated against the live map)
pause_cleaning / resume_cleaning / stop_cleaning Run control
return_to_dock Send the robot home to recharge / self-empty
set_power_mode Suction: eco, normal, max
locate_robot Make the robot beep

start_cleaning and clean_rooms first check the robot is online and refuse if it isn't,
so commands don't silently vanish. Multi-robot accounts are supported - every tool takes an
optional robot argument (name or device id). With one robot, omit it.

Setup

Requires uv and Python ≥ 3.10.

git clone https://github.com/a-funk/sharkclean-mcp
cd sharkclean-mcp
uv sync
cp .env.example .env       # add your SharkClean app email + password
uv run shark-mcp-auth      # one-time browser login (see below)
uv run shark-mcp-doctor    # confirm: prints your robot + current room map

One-time login (shark-mcp-auth)

SharkNinja's Auth0 tenant blocks headless password logins, so the first login happens in
your browser using the SharkClean app's own PKCE flow:

  1. shark-mcp-auth opens the real SharkClean login page.
  2. Log in. The browser then tries to redirect to com.sharkninja.shark://... and usually
    shows an error, blank page, or an "Open SharkClean?" dialog - that's expected.
  3. Copy that full com.sharkninja.shark://... URL (from the address bar, browser history,
    or the DevTools Network tab with "Preserve log" on) and paste it at the prompt.

That's it. Tokens are cached at ~/.config/shark-mcp/tokens.json (mode 600) and refreshed
automatically; you won't need the browser again. See SECURITY.md for how
credentials are handled.

Register with your MCP client

Claude Code (user-wide):

claude mcp add --scope user sharkclean -- uv run --directory /ABSOLUTE/PATH/TO/sharkclean-mcp shark-mcp

Or copy .mcp.json.example to .mcp.json, set the absolute path, and Claude Code will pick
it up automatically when opened in this directory.

Claude Desktop - add to claude_desktop_config.json:

{
  "mcpServers": {
    "sharkclean": {
      "command": "uv",
      "args": ["run", "--directory", "/ABSOLUTE/PATH/TO/sharkclean-mcp", "shark-mcp"]
    }
  }
}

Credentials come from environment variables or the .env file: SHARKCLEAN_EMAIL,
SHARKCLEAN_PASSWORD, and optionally SHARKCLEAN_REGION=eu.

Example prompts

  • "Start a max-power clean."
  • "Vacuum the kitchen and the living room."
  • "Is the shark done? What's its battery at?"
  • "Send the robot back to its dock."

Command-line control

Beyond the MCP server, shark-mcp-rc drives the robot from a shell (handy for scripts/cron):

uv run shark-mcp-rc status
uv run shark-mcp-rc rooms
uv run shark-mcp-rc clean Kitchen "Living Room"
uv run shark-mcp-rc start max
uv run shark-mcp-rc dock

Development

uv run pytest            # unit tests (fake robot, no cloud calls)
uv run shark-mcp         # run the server on stdio
uv run shark-mcp-doctor  # live end-to-end check against the cloud

See CONTRIBUTING.md. If your robot works, add it to
CONFIRMED_MODELS.md.

Notes & limitations

  • Auth: the one-time browser login (shark-mcp-auth) yields an Auth0 refresh token, cached
    at ~/.config/shark-mcp/tokens.json. The server mints short-lived skegox id_tokens from
    it. SharkNinja's Auth0 tenant rotates refresh tokens, so the server persists the rotated
    token on every refresh - if you see invalid_grant, re-run shark-mcp-auth.
  • Headless/scripted password login is blocked by Auth0 bot detection ("Suspicious request
    requires verification"); the browser flow is the reliable path.
  • Room targeting (clean_rooms) requires a robot with a completed map; older models
    without room support report no rooms.
  • This is unofficial, built on community reverse engineering. SharkNinja can change the
    backend at any time.

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.