# Process MCP tools

Process tools control Solo-managed process entries: commands, terminals, agents, and stopped entries.

## Tools

- `list_processes` — List process entries in the effective project scope, including commands, terminals, agents, and stopped entries.
- `get_process_status` — Read detailed status for one process, including `input_deliveries`: pending and recent automated input deliveries from this app session. Each delivery has a `status` of `pending`, `delivering`, `delivered`, `undelivered`, or `uncertain`.
- `rename_process` — [Rename a process](../commands/renaming.md) in the Solo UI.
- `select_process` — Select a process in the Solo UI so its terminal surface is attached and rendered.
- `start_process` — Start one existing Solo process entry. This can start a stored command, terminal, or agent. Use `spawn_process(kind="terminal")` to create a new terminal. Prefer `spawn_agent` to create a new agent; `spawn_process(kind="agent")` remains the generic fallback. Only command processes must be trusted in the Solo UI before MCP can start them.
- `stop_process` — Gracefully stop one running process.
- `restart_process` — Restart one existing Solo process entry. This can restart a stored command, terminal, or agent. Use `spawn_process(kind="terminal")` to create a new terminal. Prefer `spawn_agent` to create a new agent; `spawn_process(kind="agent")` remains the generic fallback. Only command processes must be trusted in the Solo UI before MCP can restart them.
- `send_input` — Send text (`input`) or raw bytes (`bytes`, such as `[13]` for Enter or `[3]` for Ctrl+C) to a running process. Text is followed by Enter unless `submit: false`. For agents, `intent` chooses how text is delivered; see [How agent messages are delivered](#how-agent-messages-are-delivered). Optional `wait_ms`, clamped to 250–10,000 ms, returns the rendered output tail after delivery completes.
- `close_process` — Remove one stored Solo terminal or Solo agent from the project. Use `stop_process` or `restart_process` for command processes.

## Notes

[Command trust](../commands/trust-security.md) still matters. MCP can start or restart trusted command processes, but untrusted command entries must be reviewed in the Solo UI first.

`stop_process` and `restart_process` refuse to stop or restart the MCP caller's own Solo process unless you pass `confirm_self_stop: true`. Likewise, if `close_process` targets the caller's own process, it requires `confirm_self_close: true`. Set these only when the user explicitly asked that process to stop, restart, or close itself.

## How agent messages are delivered

For agents, `send_input` text with the default `intent: "message"` joins the same queue as [timer](./timers.md) deliveries. Queued messages:

- arrive in order, behind earlier timer and MCP messages to the same agent;
- wait while you've typed in that terminal in the last few seconds, and while the program [reports that it is blocked](../terminal/program-status.md);
- arrive as a bracketed paste when the agent has paste mode on, and Solo waits for the agent to read the text before sending Enter.

Use `intent: "interaction"` only for a deliberate answer to, or edit of, the agent's current prompt; it's written right away as keystrokes. Raw `bytes` and `submit: false` are always interactions. For commands and terminals, input is always written directly.

Raw bytes made only of Tab, newline, or carriage return (up to 8 bytes) are queued behind earlier messages too, and they're dropped if you type in the meantime so an automated Enter never submits your draft. Any other bytes, such as Ctrl+C or Escape, go to the agent immediately.

If an interrupted submission may have left a draft in the agent's composer, Solo holds further automated input until the process restarts.

## Delivery outcomes

`send_input` returns within 30 seconds:

| Outcome | What it means |
| --- | --- |
| Delivered | The bytes reached the terminal. |
| Pending, with a `delivery_id` | Solo accepted the message and will deliver it. Don't resend; check `get_process_status` for that delivery. |
| Timed out with `accepted: false` | Nothing was queued or sent. It's safe to retry. |
| Timed out with `delivery_uncertain: true` | The input was handed to the terminal but delivery isn't confirmed. Don't resend; check `get_process_output` and `get_process_status`. |

Delivered means the bytes were written to the terminal, not that the agent accepted them or started a turn. Silence from the agent isn't evidence that resending text or Enter is safe. Pending messages belong to the current process run and app session; they aren't replayed after a restart.

For a new process, use `spawn_process(kind="terminal")` for a terminal or prefer `spawn_agent` for an agent. The generic `spawn_process(kind="agent")` path remains available. See [Agent and terminal tools](/docs/mcp-tools/agent-terminal).

---

Are you a human? Read this doc on the web: https://soloterm.com/docs/mcp-tools/process
