The MCP tools
wsp serves its verbs as MCP tools over stdio to an agent on your computer. The tools and the command line call the same functions, so an agent that forks a workspace here forks the one you see in your sidebar, and a thread it opens is a thread you can answer.
Install
wsp mcp install --agent <id> writes the server into that agent's own MCP config, puts the wsp skill into its skills folder, and adds wsp's own marked section to the instructions the current folder keeps: AGENTS.md for every agent and CLAUDE.md beside it for Claude Code.
wsp mcp install --agent claude
wsp mcp install --agent codex
wsp mcp install --agent gemini
wsp mcp install --agent opencode
A second run replaces the marked section where it stands, so there is only ever one and everything around it is untouched. A file whose end marker somebody deleted is repaired to one section rather than given a second begin marker. --remove takes the section back out, leaving the file's other lines byte for byte, and leaves the config and the skill where they are.
--agent repeats to do several in one call, and one failing id costs the others nothing. Off a terminal, a run that names none takes every agent whose own command is on the PATH. --json answers with one line holding the server command every config now runs, what each agent took, its docs naming the files the section went into, and a failures array.
Only agents the catalog knows an MCP config for get the server: claude, codex, gemini, opencode. Others get the skill and a by-hand line. The tools show up after the agent restarts; the wsp command line does the same job until then.
The tools
Each tool's inputs are in parentheses. A flag on the command line is the input of the same name on the tool.
| tool | inputs | what it does |
|---|---|---|
workspaces |
the workspace rows as the sidebar lists them | |
threads |
workspace | the sidebar's thread rows: agent, state, who opened it, the folder it works in, the title |
threads_wait |
threads, timeout | blocks until one of the named threads leaves running; answers with its id, status, duration, cost and the reply's last line under finished; timedOut true when the timeout passed |
new |
name, from, size | a workspace forked from the golden's head, or from a project golden by name or snapshot id; booted and reachable when it returns |
fork |
workspace, name, size, task, agent, model, effort, access, cwd, notify | a sibling from the source's golden version; with a task, its first thread |
snapshot |
workspace | a project golden: the golden plus the loaded project as it stands |
pause |
workspace | naps the machine |
wake |
workspace | wakes the machine and answers with its state |
rename |
workspace, name | names the workspace on this computer |
forget |
workspace | drops a workspace whose machine is gone; refused while it exists |
delete |
workspace, confirm | deletes the machine at the provider and drops the record; deletes only with confirm true |
thread_new |
workspace, task, agent, model, effort, access, cwd, notify, title, detach | opens a thread and follows its first turn to the reply, or with detach returns the id at once |
thread_rename |
thread, title | names the thread in the agent's own store on the machine |
thread_read |
thread, last | the thread's messages as the app lists them: who each one is, when the runtime recorded it, the text, and every tool call folded to one line; with last, the final reply alone, whole, and a row under it when the thread has started another turn since |
send |
thread, message, model, effort, access, detach | a message into an existing thread |
stop |
thread | ends the thread's running turn; the machine stays up |
exec |
workspace, argv, cwd | runs a command on the machine, each word as given; output lines, the exit code and the folder |
folders |
folder, hidden | the folders inside one folder on this computer, for naming one to import |
import |
workspace, folder, yes, keep, cut, agents, replace | lands a folder on the machine at its path here; without yes, keep or cut it answers with the plan and moves nothing |
export |
workspace, folder, from, replace, agents | brings a folder and the agent sessions keyed to it home |
terminal_config |
scheme | the Ghostty config on this computer as the app's terminal pane applies it |
recipe_scan |
project | reads this computer and answers with every option, writing nothing |
recipe |
tick, set, signin, add, add_check, why, project, out | writes the recipe for a machine |
thread_new, send and exec wake a paused workspace themselves before running, so a paused one needs no wake first.
A thread_new without detach blocks for the whole turn, which can be minutes or hours. An agent whose own conversation nothing can write into starts threads with detach true and reads their ends with threads_wait, one finished thread per call.
Only on the command line
wsp up, wsp down, wsp status, wsp init, wsp doctor and wsp mcp have no tool, since each starts, stops or installs something on the person's computer. An agent that needs one runs it from a shell. See Driving wsp from an agent for the order.
Failures
A tool answers a failure as a tool error whose structured content is the same object the command line prints under --json: {"error": "<the line>", "class": "usage", "exit": 3}. A call whose inputs do not fit the schema is refused by the server before the tool runs. The classes are on The contract.