MCP Server
The Autoblow MCP server lets AI assistants that support the Model Context Protocol control your Autoblow Ultra or Vacuglide. You ask in plain words (“start slow”, “write me a 10-minute session that slowly builds”, “stop”) and the assistant calls the matching device commands for you.
Every HTTP API command is available as a tool, except SPIFFS diagnostics. The VacuPump and the Ultra 2 are not supported yet.
What you need
Section titled “What you need”- A device token. Follow the Ultra setup guide or the Vacuglide setup guide to get yours.
- An online device. The server can only reach a device that is connected to the Autoblow cloud. On the Vacuglide, hold the mode button for about 2.5 seconds to turn online mode on.
- An AI app that supports remote MCP servers, also called connectors.
Connect
Section titled “Connect”The server runs at:
https://mcp.autoblow.com/mcpSend your device token in the Authorization header:
Authorization: Bearer YOUR_DEVICE_TOKENClaude Code
Section titled “Claude Code”claude mcp add --transport http autoblow https://mcp.autoblow.com/mcp \ --header "Authorization: Bearer YOUR_DEVICE_TOKEN"Apps that only take a URL
Section titled “Apps that only take a URL”Some apps let you add a connector by URL but cannot set headers. For those, put the token in the URL:
https://mcp.autoblow.com/mcp?token=YOUR_DEVICE_TOKENMore than one device
Section titled “More than one device”Each connection controls the one device its token belongs to. To use an Ultra and a Vacuglide, add two connections, each with its own token, for example autoblow-ultra and autoblow-vacuglide.
Try it
Section titled “Try it”Once connected, ask your assistant things like:
- “Is my Vacuglide connected?”
- “Start slow.” / “A little faster.” / “Set it to 60%.”
- “Full strokes on my Ultra, 40% speed.”
- “Write me a 10-minute session that slowly builds and ends strong.”
- “A steady 120 BPM rhythm.”
- “Stop.”
For a request that describes a pattern, the assistant writes a script and uploads it with sync_script_upload_funscript, then plays it with sync_script_start.
Stopping
Section titled “Stopping”ultra_oscillate_stop and vacuglide_target_speed_stop stop the device whatever it is doing, including a playing script. When you ask your assistant to stop, it calls one of these.
The assistant needs a moment to decide to call the tool, so saying “stop” is not instant. The buttons on the device always work.
Both devices
Section titled “Both devices”| Tool | What it does |
|---|---|
get_connection_status | Whether the device is online, its type and its cluster |
get_device_info | Device type, hardware and firmware version, firmware status, MAC address |
get_state | Current mode, selected local script, speeds and sync script position |
local_script_start / local_script_stop | Resume or pause the local script |
local_script_list | The local scripts loaded on the device, by slot (on the Ultra this also pauses the device) |
local_script_swap / local_script_move | Reorder local script slots |
sync_script_upload_funscript | Upload a funscript (time in ms, position 0 to 100) and load it, ready to play |
sync_script_upload_funscript_url | Download a funscript from a URL and load it |
sync_script_upload_csv / sync_script_upload_csv_url | Same, for time_ms,position CSV scripts |
sync_script_load_token | Load a previously uploaded script by its token |
sync_script_start / sync_script_stop | Play the loaded script from a position, or pause it |
sync_script_offset | Shift the script against the video, in ms (positive runs the device ahead) |
sync_script_loop | Loop the script on or off |
firmware_update_info / firmware_update_start | Check for and install the latest firmware |
Autoblow Ultra
Section titled “Autoblow Ultra”| Tool | What it does |
|---|---|
ultra_oscillate_set | Stroke between two positions at a speed (all 0 to 100; the positions at least 10 apart) |
ultra_oscillate_start | Resume oscillating with the last settings |
ultra_oscillate_stop | Stop, whatever the Ultra is doing |
ultra_goto | Move the stroker to a position at a speed |
ultra_local_script_set | Play a local script (0 to 9) at a speed level (0 to 9) |
ultra_local_script_replace | Replace a local script slot with a script from the library |
Vacuglide
Section titled “Vacuglide”| Tool | What it does |
|---|---|
vacuglide_target_speed_set | Run the motor at a speed, 0 to 100% |
vacuglide_target_speed_stop | Stop, whatever the Vacuglide is doing |
vacuglide_local_script_set | Play a local script (0 to 29) from the start |
vacuglide_local_script_replace | Replace a local script slot with a script from the library |
vacuglide_valve_stroke_plus / vacuglide_valve_stroke_minus | Open or close the stroke plus or stroke minus valve |
A tool for one device refuses to run on the other.
Scripts and speed limits
Section titled “Scripts and speed limits”Scripts that the assistant writes are funscripts: a list of { at, pos } actions, with time in ms and position from 0 to 100. The two devices play them differently, and the tool descriptions tell the assistant how:
- Ultra: the stroker follows the positions. A move can be at most 400 position units per second (a full 0 to 100 move takes at least 250 ms) and at least 70 ms long.
- Vacuglide: the speed of each move sets the motor speed. 600 position units per second is 100% (a 0 to 100 move in about 170 ms), and faster moves are capped there. Below about 25 units per second (4%) the motor stalls.
Uploaded scripts are stored for 9 days under the token the upload returns, so you can load them again with sync_script_load_token.
Troubleshooting
Section titled “Troubleshooting”| What you see | What to do |
|---|---|
{ "connected": false } | The device is offline. Turn it on and put it in online mode. |
HTTP 401 | The request has no device token. Check the Authorization header or the ?token= URL. |
| ”This tool is for the Autoblow Ultra; the device is a vacuglide” | The assistant picked the other device’s tool. Ask again, naming your device. |
| A request is rejected before it reaches the device | A value is out of range, for example a speed above 100. |