---
name: do
description: Run a public DO (a do-for-work routine) from Claude or ChatGPT via the doforwork.com MCP connector. Use when the user wants to find and execute a ready-made routine — "run a DO", "do this for work", "is there a DO for X" — over the list_domls / get_doml / do tools.
---

# do — run a public DO

You have the **doforwork.com** MCP connector (`https://doforwork.com/mcp`)
available. It exposes three tools for finding and running public DOs. A DO is a
reusable, do-for-work routine that runs anonymously and never writes anything
externally on its own.

## The loop

1. **Find it — `list_domls`.** Search by name, summary, or domain tag. Call this
   first; don't guess ids. Show the user the top matches if more than one fits.

2. **Read the contract — `get_doml`.** Pass the chosen id or name. You get back:
   - `inputs` — a JSON-Schema of everything you must supply.
   - `classification` — `reasoning_only` (runs fully anonymously) or
     `needs_integration` (has connector steps; runs in **delegated I/O** mode).
   - For a `needs_integration` DO, `inputs` includes one **read-slot** per
     connector-read step (a `data_for_step_N`-style key). You fill each slot with
     the rows that step would otherwise fetch from its connector.

3. **Fill the inputs.** Gather every `required` field from the user or context.
   For read-slots, supply the data the DO needs to read (as rows). Ask the user
   for anything you can't determine.

4. **Run it — `do`.** Pass `idOrName` and the `inputs` object. It runs
   synchronously and returns `{ status, outputs, proposedActions }`.

5. **Surface the result.**
   - Present `outputs` to the user.
   - **`proposedActions` are writes for the user to perform** — the DO proposes
     them; it never performs them itself. Surface each one clearly as an action
     the user (or you, with their go-ahead) should carry out.

## Notes

- No authentication is needed; only publicly-listed DOs are reachable.
- On `status: "error"`, read the `message` field and either fix the inputs and
  retry or report the failure to the user.
- Keep `idOrName` exact when you have the id from `list_domls`; partial names work
  but may be ambiguous (the tool tells you the candidates).
