@floomhq/floom 5.1.8 → 5.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,400 +1,400 @@
1
- # Floom CLI + MCP
2
-
3
- Floom lets agents create, update, run, watch, and delete worker automations through an HTTP MCP endpoint backed by the hosted Floom Cloud API. The package installs into Claude Code, Cursor, VS Code, Windsurf, Continue, or any harness that accepts an MCP HTTP or stdio server entry.
4
-
5
- Floom ships as a single npm package that exposes:
6
-
7
- - **`floom` CLI** - `login`, `workspaces`, `workers`, `run`, `runs`, `secrets`, `mcp`, `whoami`, `logout`, plus an `install` shortcut that wires the MCP server into Claude Code / Cursor / Continue. `workeros` remains a compatibility alias for older installs.
8
- - **HTTP MCP endpoint** - `floom mcp install` writes an HTTP transport entry (`url` + `headers`) pointing at hosted Floom Cloud by default. No local subprocess is required.
9
- - **`floom-mcp` stdio server** - legacy stdio path; `workeros-mcp` still works as an alias. Use this for harnesses that do not support HTTP MCP transport.
10
-
11
- The CLI targets hosted Floom Cloud by default. Self-hosted/local mode is only for operators already running their own Floom API:
12
-
13
- | Mode | API base | Auth | Workspaces |
14
- |------|----------|------|------------|
15
- | **Hosted** (default) | `https://workeros-api.floom.dev` | browser/device login or bearer token | multi-workspace |
16
- | **Self-hosted** | `http://localhost:8000` or your API URL | `x-floom-secret` when `FLOOM_SECRET` is set | local workspace |
17
-
18
- ## Hosted Quickstart
19
-
20
- ```bash
21
- npx -y @floomhq/floom mcp install --target claude
22
- ```
23
-
24
- `mcp install` is the one-command hosted setup path. It targets Floom Cloud by
25
- default, starts browser login only when no valid hosted credentials are saved,
26
- selects the active workspace, and writes the MCP config for the client. Use
27
- `--target cursor`, `--target vscode`, `--target windsurf`, `--target continue`,
28
- or `--target generic` for other clients.
29
-
30
- For CLI use outside an MCP client:
31
-
32
- ```bash
33
- npm i -g @floomhq/floom@latest
34
- floom login
35
- floom workers list
36
- floom run <worker-id> --input key=value
37
- ```
38
-
39
- ## Self-Hosted Quickstart
40
-
41
- For the default local API at `http://localhost:8000`:
42
-
43
- ```bash
44
- npm i -g @floomhq/floom@latest
45
- floom login --local
46
- floom workers list
47
- ```
48
-
49
- For a custom self-hosted API base, set env vars instead of passing an `--api`
50
- flag:
51
-
52
- ```bash
53
- WORKEROS_API_BASE=http://localhost:8000 floom login --local
54
- FLOOM_API_BASE=http://localhost:8000 floom doctor
55
- ```
56
-
57
- If your local API runs without `FLOOM_SECRET`, login is not required for basic local development. For a protected self-hosted API, set `FLOOM_SECRET` on the backend and use the matching secret when the CLI prompts.
58
-
59
- If the self-hosted engine has user-header scope enabled (it requires `x-floom-user` alongside the shared secret), pass the identity with the `--user` flag or `WORKEROS_USER` env var:
60
-
61
- ```bash
62
- WORKEROS_API_BASE=http://127.0.0.1:8011 WORKEROS_API_SECRET=<secret> WORKEROS_USER=<user> floom whoami
63
- # or
64
- floom --user <user> whoami
65
- ```
66
-
67
- `WORKEROS_API_BASE` + `WORKEROS_API_SECRET` select self-hosted (OSS) mode and take precedence over any saved hosted credentials file; `mcp install` bakes `x-floom-user` into the generated client config when it is set.
68
-
69
- Credentials live at `~/.config/floom/credentials.json` (mode 0600). Existing `~/.config/workeros/credentials.json` files are still read for compatibility. `floom logout` clears both paths.
70
-
71
- ## MCP install
72
-
73
- ```bash
74
- npx -y @floomhq/floom mcp install
75
- ```
76
-
77
- Targets hosted Floom Cloud unless self-hosted env vars or local login are used.
78
- It auto-detects the first existing config file and reuses saved hosted
79
- credentials when possible. To target a specific harness:
80
-
81
- ```bash
82
- floom mcp install --target claude # ~/.claude/settings.json
83
- floom mcp install --target cursor # ~/.cursor/mcp.json
84
- floom mcp install --target vscode # .vscode/mcp.json (workspace-local)
85
- floom mcp install --target windsurf # ~/.codeium/windsurf/mcp_config.json
86
- floom mcp install --target continue # ~/.continue/.continuerc.json
87
- floom mcp install --target generic # prints JSON snippet for manual paste
88
- ```
89
-
90
- ## Switching the active context
91
-
92
- ```bash
93
- floom workspace list # all workspaces your credentials can access, active marked with *
94
- floom workspace switch <name> # by name or id; fails (exit 1) if not authenticated for it
95
- floom mcp list # configured MCP servers (connections of kind "mcp")
96
- floom mcp switch <name> # set the active MCP server by label
97
- floom mcp test [name] # live probe (initialize + tools/list); defaults to the active server
98
- ```
99
-
100
- Switches persist in `~/.config/floom/credentials.json` and apply to every later CLI invocation. `workspaces`/`use` remain as aliases of `workspace`/`switch`. Workspace switching works in both modes: hosted deployments scope by membership, self-hosted deployments scope local workspaces via the legacy `x-workeros-workspace` header (which the CLI sends on every request, and `mcp install` bakes into the client config - re-run `mcp install` after switching to repoint installed MCP clients).
101
-
102
- Re-running the installer updates the existing `floom` entry, and migrates an older `workeros` entry instead of duplicating it.
103
-
104
- ## Supported targets
105
-
106
- | Target | Config file written | Config shape |
107
- |---|---|---|
108
- | `claude` | `~/.claude/settings.json` | `{ mcpServers: { floom: {...} } }` |
109
- | `cursor` | `~/.cursor/mcp.json` | `{ mcpServers: { floom: {...} } }` |
110
- | `vscode` | `.vscode/mcp.json` (workspace) | `{ mcpServers: { floom: {...} } }` |
111
- | `windsurf` | `~/.codeium/windsurf/mcp_config.json` | `{ mcpServers: { floom: {...} } }` |
112
- | `continue` | `~/.continue/.continuerc.json` | `{ mcpServers: [ { name:"floom", ... } ] }` |
113
- | `generic` | (no file) | prints JSON snippet to stdout |
114
-
115
- All targets write **HTTP MCP transport** (`url` + `headers`) - no local subprocess is spawned. The MCP endpoint is hosted on the Floom API server.
116
-
117
- ```json
118
- {
119
- "mcpServers": {
120
- "floom": {
121
- "url": "https://workeros-api.floom.dev/mcp/<workspace_id>",
122
- "headers": {
123
- "Authorization": "Bearer <floom_token>"
124
- }
125
- }
126
- }
127
- }
128
- ```
129
-
130
- ### HTTP transport (recommended - written by `floom mcp install`)
131
-
132
- Claude Code / Cursor / VS Code / Windsurf (`mcpServers` object shape), hosted
133
- Cloud:
134
-
135
- ```json
136
- {
137
- "mcpServers": {
138
- "floom": {
139
- "url": "https://workeros-api.floom.dev/mcp/<workspace_id>",
140
- "headers": {
141
- "Authorization": "Bearer <floom_token>"
142
- }
143
- }
144
- }
145
- }
146
- ```
147
-
148
- The published binary stays connected for that handshake when launched as `npx -p @floomhq/floom floom-mcp`.
149
-
150
- ## Manual self-hosted config
151
-
152
- Use this section only when you run your own Floom API. Hosted users should let
153
- `floom mcp install` generate the config above.
154
-
155
- Claude Code / Cursor / VS Code / Windsurf (`mcpServers` object shape, HTTP MCP):
156
-
157
- ```json
158
- {
159
- "mcpServers": {
160
- "floom": {
161
- "url": "http://localhost:8000/mcp-tools/serve",
162
- "headers": {
163
- "x-floom-secret": "<WORKEROS_API_SECRET>"
164
- }
165
- }
166
- }
167
- }
168
- ```
169
-
170
- Continue (`~/.continue/.continuerc.json`, array shape, HTTP MCP):
171
-
172
- ```json
173
- {
174
- "mcpServers": [
175
- {
176
- "name": "floom",
177
- "url": "http://localhost:8000/mcp-tools/serve",
178
- "headers": {
179
- "x-floom-secret": "<WORKEROS_API_SECRET>"
180
- }
181
- }
182
- ]
183
- }
184
- ```
185
-
186
- Replace `http://localhost:8000` with your deployed API base URL when connecting
187
- to a remote self-hosted instance.
188
-
189
- ### Stdio transport (fallback - for harnesses that do not support HTTP MCP)
190
-
191
- ```json
192
- {
193
- "mcpServers": {
194
- "floom": {
195
- "command": "npx",
196
- "args": ["-p", "@floomhq/floom", "floom-mcp"],
197
- "env": {
198
- "WORKEROS_API_SECRET": "<WORKEROS_API_SECRET>",
199
- "WORKEROS_API_BASE": "http://localhost:8000"
200
- }
201
- }
202
- }
203
- }
204
- ```
205
-
206
- Or launch directly if the package is already installed: `node /path/to/@floomhq/floom/dist/server.js`.
207
-
208
- ## Worker bundle CLI flow
209
-
210
- Use this path when a fresh agent has a local `workers/<id>/` folder and needs a repeatable create/edit/deploy loop:
211
-
212
- ```bash
213
- floom login
214
- floom workers contract
215
- floom workers templates list
216
- floom workers templates get python-script
217
- floom workers validate ./workers/<id>
218
- floom workers push ./workers/<id>
219
- floom run <id> --inputs-file docs/workers/inputs/<id>.json
220
- floom workers info <id>
221
- ```
222
-
223
- `workers validate` is offline. It checks that `worker.yml` parses, the entry file exists, the runtime is declared, and E2B Composio workers do not use the local `composio execute` CLI. For structured connection declarations it also verifies that referenced tool slugs are covered by `allowed_tools`.
224
-
225
- `workers push` uses `POST /workers` for new workers and `PUT /workers/{id}` for existing workers. If an older API returns 404/405 for source updates, upgrade the API before editing workers in place.
226
-
227
- Clean up stale or superseded workers without leaving the CLI:
228
-
229
- ```bash
230
- floom workers disable <id> # keep the worker but stop it running on triggers
231
- floom workers enable <id> # re-enable a disabled worker
232
- floom workers delete <id> # permanently remove it (and its runs/artifacts); prompts unless --yes
233
- ```
234
-
235
- `workers delete` asks for confirmation; pass `-y/--yes` to skip the prompt (also required in non-interactive shells). `workers disable` is the reversible, soft option (`enabled=false`) for hiding a worker from triggers without deleting it.
236
-
237
- ## Tools
238
-
239
- > **For full worked examples per tool, end-to-end recipes (deploy a worker from prompt, port a Claude skill, schedule + webhook + composio triggers), and the agent draft contract, see [docs/AGENT-COOKBOOK.md](../../docs/AGENT-COOKBOOK.md).**
240
-
241
- ### Workers
242
- | Tool | Description |
243
- | --- | --- |
244
- | `workers.list` | List available Floom workers. |
245
- | `workers.get` | Read one worker, including config and recent run metadata. |
246
- | `workers.contract` | Read the canonical worker.yml/run.py/SKILL.md authoring contract. |
247
- | `workers.templates.list` | List golden worker templates agents should start from. |
248
- | `workers.templates.get` | Return a full template bundle with `worker_yml` plus `run_py` or `skill_md`. |
249
- | `workers.validate` | Validate a proposed worker bundle before creating it. |
250
- | `workers.create` | Create a worker from validated `worker_yml` plus `run_py` or `skill_md`. |
251
- | `workers.update` | Patch trigger, cron, default inputs, capabilities, or rotate webhook secret. |
252
- | `workers.delete` | Delete a worker and dependent run data. |
253
- | `workers.run` | Start a manual worker run with input values. |
254
- | `workers.logs` | Fetch cross-run log history, filterable by level and time. |
255
- | `workers.stats` | 7-day run statistics for a specific worker. |
256
- | `workers.timeseries` | Daily run counts and success/failure trend over N days. |
257
- | `workers.sample_input` | Get example input values for a worker's fields. |
258
- | `workers.archive` | Archive a worker (reversible). |
259
- | `workers.restore` | Restore an archived worker to active status. |
260
- | `workers.reload` | Reload all workers from disk on a self-hosted deployment. |
261
- | `workers.versions` | List saved versions of a worker. |
262
- | `workers.rollback` | Restore a worker to a previous version. |
263
- | `workers.alerts.list` | List configured alerts for a worker. |
264
- | `workers.alerts.create` | Add a failure/approval/success alert via webhook or email. |
265
- | `workers.alerts.delete` | Remove a worker alert. |
266
-
267
- ### Runs
268
- | Tool | Description |
269
- | --- | --- |
270
- | `runs.list` | List runs, optionally filtered by worker id or status. |
271
- | `runs.get` | Read one run with logs, outputs, artifacts, and approval state. |
272
- | `runs.watch` | Stream SSE run events until a terminal state. |
273
- | `runs.cancel` | Cancel an in-progress run. |
274
- | `runs.replay` | Replay a completed or failed run with the same inputs. |
275
-
276
- ### Approvals
277
- | Tool | Description |
278
- | --- | --- |
279
- | `approvals.list` | List pending approval requests across all workers. |
280
- | `approvals.approve` | Approve a pending run so it continues executing. |
281
- | `approvals.reject` | Reject a pending run, stopping it. |
282
-
283
- ### Secrets
284
- | Tool | Description |
285
- | --- | --- |
286
- | `secrets.list` | List secret names and status. |
287
- | `secrets.set` | Create or update a secret value. |
288
- | `secrets.delete` | Delete a secret. |
289
- | `secrets.test` | Verify a secret exists without revealing its value. |
290
-
291
- ### Connections
292
- | Tool | Description |
293
- | --- | --- |
294
- | `connections.list` | List configured app connections. |
295
- | `connections.add_mcp` | Add an MCP server connection. |
296
- | `connections.delete` | Remove a connection. |
297
- | `connections.status` | Check connection health and auth status. |
298
- | `connections.test` | Run a live connectivity check on a connection. |
299
-
300
- ### Contexts (Brain Packs)
301
- | Tool | Description |
302
- | --- | --- |
303
- | `contexts.list` | List context folders. |
304
- | `contexts.create` | Create a new brain pack context. |
305
- | `contexts.delete` | Delete a brain pack and all its files. |
306
- | `contexts.read` | Read a file from a context. |
307
- | `contexts.write` | Create or update a file in a context. |
308
- | `contexts.upload` | Upload a binary file to a context. |
309
- | `contexts.delete_file` | Delete a specific file from a context. |
310
- | `contexts.versions` | List saved versions of a brain pack. |
311
- | `contexts.rollback` | Restore a brain pack to a previous version. |
312
-
313
- ### Triggers & Integrations
314
- | Tool | Description |
315
- | --- | --- |
316
- | `triggers.list` | List integration triggers, globally or per worker/app. |
317
- | `integrations.catalog` | Browse all available integrations. |
318
-
319
- ### Workspace
320
- | Tool | Description |
321
- | --- | --- |
322
- | `workspace.chat` | Send a message to the workspace agent and get a reply. |
323
- | `workspace.instructions.get` | Read current workspace agent system prompt. |
324
- | `workspace.instructions.set` | Update workspace agent system prompt. |
325
- | `workspace.versions` | List version history of workspace instructions. |
326
- | `workspace.rollback` | Restore workspace instructions to a previous version. |
327
-
328
- ### Conversations
329
- | Tool | Description |
330
- | --- | --- |
331
- | `conversations.list` | List past workspace agent conversations. |
332
- | `conversations.get` | Retrieve a full conversation by ID. |
333
-
334
- ### System
335
- | Tool | Description |
336
- | --- | --- |
337
- | `system.overview` | Full workspace dashboard - health, runs, pending approvals, alerts. |
338
- | `system.stats` | 7-day aggregate run statistics across the whole workspace. |
339
- | `system.info` | Platform version and configuration flags. |
340
- | `system.alerts` | Active system-wide alerts. |
341
-
342
- ## Quick example - write + deploy + verify a worker in one MCP session
343
-
344
- ```js
345
- // 1. Create
346
- await workers.create({
347
- worker_yml: `
348
- schema_version: "0.3"
349
- name: text-summarizer
350
- title: Text Summarizer
351
- description: Summarizes any text in 3 bullets using GPT-4.1.
352
- entrypoint: run.py
353
- exec:
354
- command: python run.py
355
- runtime: python311
356
- runner: e2b
357
- entry: run.py
358
- inputs:
359
- - { name: text, kind: scalar, type: textarea, required: true, label: Text }
360
- outputs:
361
- - { name: summary, kind: file, media_type: text/markdown, path: out/summary.md, required: true, label: Summary }
362
- secrets: [OPENAI_API_KEY]
363
- capabilities:
364
- secrets: [OPENAI_API_KEY]
365
- network: { egress: true }
366
- trigger: { type: manual }
367
- `,
368
- run_py: `
369
- def run(inputs, context):
370
- client = context.openai()
371
- r = client.chat.completions.create(
372
- model="gpt-4.1-mini",
373
- messages=[
374
- {"role": "system", "content": "Summarize in 3 bullets."},
375
- {"role": "user", "content": inputs["text"]},
376
- ],
377
- )
378
- summary = r.choices[0].message.content
379
- context.write_output("summary", summary)
380
- return {"summary": summary}
381
- `,
382
- });
383
-
384
- // 2. Run
385
- const { run_id } = await workers.run({
386
- id: "text-summarizer",
387
- inputs: { text: "Lorem ipsum dolor sit amet..." },
388
- });
389
-
390
- // 3. Watch until terminal
391
- const watched = await runs.watch({ id: run_id });
392
- console.log(watched.status);
393
-
394
- // 4. Verify
395
- const { run } = await runs.get({ id: run_id });
396
- console.log(run.status); // "succeeded"
397
- console.log(run.output?.summary);
398
- ```
399
-
400
- See [docs/AGENT-COOKBOOK.md section 1](../../docs/AGENT-COOKBOOK.md) for the full annotated walkthrough plus six more recipes (agent mode, Gmail trigger, cron schedule, webhook, approval gate, claude-skill port).
1
+ # Floom CLI + MCP
2
+
3
+ Floom lets agents create, update, run, watch, and delete worker automations through an HTTP MCP endpoint backed by the hosted Floom Cloud API. The package installs into Claude Code, Cursor, VS Code, Windsurf, Continue, or any harness that accepts an MCP HTTP or stdio server entry.
4
+
5
+ Floom ships as a single npm package that exposes:
6
+
7
+ - **`floom` CLI** - `login`, `workspaces`, `workers`, `run`, `runs`, `secrets`, `mcp`, `whoami`, `logout`, plus an `install` shortcut that wires the MCP server into Claude Code / Cursor / Continue. `workeros` remains a compatibility alias for older installs.
8
+ - **HTTP MCP endpoint** - `floom mcp install` writes an HTTP transport entry (`url` + `headers`) pointing at hosted Floom Cloud by default. No local subprocess is required.
9
+ - **`floom-mcp` stdio server** - legacy stdio path; `workeros-mcp` still works as an alias. Use this for harnesses that do not support HTTP MCP transport.
10
+
11
+ The CLI targets hosted Floom Cloud by default. Self-hosted/local mode is only for operators already running their own Floom API:
12
+
13
+ | Mode | API base | Auth | Workspaces |
14
+ |------|----------|------|------------|
15
+ | **Hosted** (default) | `https://workeros-api.floom.dev` | browser/device login or bearer token | multi-workspace |
16
+ | **Self-hosted** | `http://localhost:8000` or your API URL | `x-floom-secret` when `FLOOM_SECRET` is set | local workspace |
17
+
18
+ ## Hosted Quickstart
19
+
20
+ ```bash
21
+ npx -y @floomhq/floom mcp install --target claude
22
+ ```
23
+
24
+ `mcp install` is the one-command hosted setup path. It targets Floom Cloud by
25
+ default, starts browser login only when no valid hosted credentials are saved,
26
+ selects the active workspace, and writes the MCP config for the client. Use
27
+ `--target cursor`, `--target vscode`, `--target windsurf`, `--target continue`,
28
+ or `--target generic` for other clients.
29
+
30
+ For CLI use outside an MCP client:
31
+
32
+ ```bash
33
+ npm i -g @floomhq/floom@latest
34
+ floom login
35
+ floom workers list
36
+ floom run <worker-id> --input key=value
37
+ ```
38
+
39
+ ## Self-Hosted Quickstart
40
+
41
+ For the default local API at `http://localhost:8000`:
42
+
43
+ ```bash
44
+ npm i -g @floomhq/floom@latest
45
+ floom login --local
46
+ floom workers list
47
+ ```
48
+
49
+ For a custom self-hosted API base, set env vars instead of passing an `--api`
50
+ flag:
51
+
52
+ ```bash
53
+ WORKEROS_API_BASE=http://localhost:8000 floom login --local
54
+ FLOOM_API_BASE=http://localhost:8000 floom doctor
55
+ ```
56
+
57
+ If your local API runs without `FLOOM_SECRET`, login is not required for basic local development. For a protected self-hosted API, set `FLOOM_SECRET` on the backend and use the matching secret when the CLI prompts.
58
+
59
+ If the self-hosted engine has user-header scope enabled (it requires `x-floom-user` alongside the shared secret), pass the identity with the `--user` flag or `WORKEROS_USER` env var:
60
+
61
+ ```bash
62
+ WORKEROS_API_BASE=http://127.0.0.1:8011 WORKEROS_API_SECRET=<secret> WORKEROS_USER=<user> floom whoami
63
+ # or
64
+ floom --user <user> whoami
65
+ ```
66
+
67
+ `WORKEROS_API_BASE` + `WORKEROS_API_SECRET` select self-hosted (OSS) mode and take precedence over any saved hosted credentials file; `mcp install` bakes `x-floom-user` into the generated client config when it is set.
68
+
69
+ Credentials live at `~/.config/floom/credentials.json` (mode 0600). Existing `~/.config/workeros/credentials.json` files are still read for compatibility. `floom logout` clears both paths.
70
+
71
+ ## MCP install
72
+
73
+ ```bash
74
+ npx -y @floomhq/floom mcp install
75
+ ```
76
+
77
+ Targets hosted Floom Cloud unless self-hosted env vars or local login are used.
78
+ It auto-detects the first existing config file and reuses saved hosted
79
+ credentials when possible. To target a specific harness:
80
+
81
+ ```bash
82
+ floom mcp install --target claude # ~/.claude/settings.json
83
+ floom mcp install --target cursor # ~/.cursor/mcp.json
84
+ floom mcp install --target vscode # .vscode/mcp.json (workspace-local)
85
+ floom mcp install --target windsurf # ~/.codeium/windsurf/mcp_config.json
86
+ floom mcp install --target continue # ~/.continue/.continuerc.json
87
+ floom mcp install --target generic # prints JSON snippet for manual paste
88
+ ```
89
+
90
+ ## Switching the active context
91
+
92
+ ```bash
93
+ floom workspace list # all workspaces your credentials can access, active marked with *
94
+ floom workspace switch <name> # by name or id; fails (exit 1) if not authenticated for it
95
+ floom mcp list # configured MCP servers (connections of kind "mcp")
96
+ floom mcp switch <name> # set the active MCP server by label
97
+ floom mcp test [name] # live probe (initialize + tools/list); defaults to the active server
98
+ ```
99
+
100
+ Switches persist in `~/.config/floom/credentials.json` and apply to every later CLI invocation. `workspaces`/`use` remain as aliases of `workspace`/`switch`. Workspace switching works in both modes: hosted deployments scope by membership, self-hosted deployments scope local workspaces via the legacy `x-workeros-workspace` header (which the CLI sends on every request, and `mcp install` bakes into the client config - re-run `mcp install` after switching to repoint installed MCP clients).
101
+
102
+ Re-running the installer updates the existing `floom` entry, and migrates an older `workeros` entry instead of duplicating it.
103
+
104
+ ## Supported targets
105
+
106
+ | Target | Config file written | Config shape |
107
+ |---|---|---|
108
+ | `claude` | `~/.claude/settings.json` | `{ mcpServers: { floom: {...} } }` |
109
+ | `cursor` | `~/.cursor/mcp.json` | `{ mcpServers: { floom: {...} } }` |
110
+ | `vscode` | `.vscode/mcp.json` (workspace) | `{ mcpServers: { floom: {...} } }` |
111
+ | `windsurf` | `~/.codeium/windsurf/mcp_config.json` | `{ mcpServers: { floom: {...} } }` |
112
+ | `continue` | `~/.continue/.continuerc.json` | `{ mcpServers: [ { name:"floom", ... } ] }` |
113
+ | `generic` | (no file) | prints JSON snippet to stdout |
114
+
115
+ All targets write **HTTP MCP transport** (`url` + `headers`) - no local subprocess is spawned. The MCP endpoint is hosted on the Floom API server.
116
+
117
+ ```json
118
+ {
119
+ "mcpServers": {
120
+ "floom": {
121
+ "url": "https://workeros-api.floom.dev/mcp/<workspace_id>",
122
+ "headers": {
123
+ "Authorization": "Bearer <floom_token>"
124
+ }
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ ### HTTP transport (recommended - written by `floom mcp install`)
131
+
132
+ Claude Code / Cursor / VS Code / Windsurf (`mcpServers` object shape), hosted
133
+ Cloud:
134
+
135
+ ```json
136
+ {
137
+ "mcpServers": {
138
+ "floom": {
139
+ "url": "https://workeros-api.floom.dev/mcp/<workspace_id>",
140
+ "headers": {
141
+ "Authorization": "Bearer <floom_token>"
142
+ }
143
+ }
144
+ }
145
+ }
146
+ ```
147
+
148
+ The published binary stays connected for that handshake when launched as `npx -p @floomhq/floom floom-mcp`.
149
+
150
+ ## Manual self-hosted config
151
+
152
+ Use this section only when you run your own Floom API. Hosted users should let
153
+ `floom mcp install` generate the config above.
154
+
155
+ Claude Code / Cursor / VS Code / Windsurf (`mcpServers` object shape, HTTP MCP):
156
+
157
+ ```json
158
+ {
159
+ "mcpServers": {
160
+ "floom": {
161
+ "url": "http://localhost:8000/mcp-tools/serve",
162
+ "headers": {
163
+ "x-floom-secret": "<WORKEROS_API_SECRET>"
164
+ }
165
+ }
166
+ }
167
+ }
168
+ ```
169
+
170
+ Continue (`~/.continue/.continuerc.json`, array shape, HTTP MCP):
171
+
172
+ ```json
173
+ {
174
+ "mcpServers": [
175
+ {
176
+ "name": "floom",
177
+ "url": "http://localhost:8000/mcp-tools/serve",
178
+ "headers": {
179
+ "x-floom-secret": "<WORKEROS_API_SECRET>"
180
+ }
181
+ }
182
+ ]
183
+ }
184
+ ```
185
+
186
+ Replace `http://localhost:8000` with your deployed API base URL when connecting
187
+ to a remote self-hosted instance.
188
+
189
+ ### Stdio transport (fallback - for harnesses that do not support HTTP MCP)
190
+
191
+ ```json
192
+ {
193
+ "mcpServers": {
194
+ "floom": {
195
+ "command": "npx",
196
+ "args": ["-p", "@floomhq/floom", "floom-mcp"],
197
+ "env": {
198
+ "WORKEROS_API_SECRET": "<WORKEROS_API_SECRET>",
199
+ "WORKEROS_API_BASE": "http://localhost:8000"
200
+ }
201
+ }
202
+ }
203
+ }
204
+ ```
205
+
206
+ Or launch directly if the package is already installed: `node /path/to/@floomhq/floom/dist/server.js`.
207
+
208
+ ## Worker bundle CLI flow
209
+
210
+ Use this path when a fresh agent has a local `workers/<id>/` folder and needs a repeatable create/edit/deploy loop:
211
+
212
+ ```bash
213
+ floom login
214
+ floom workers contract
215
+ floom workers templates list
216
+ floom workers templates get python-script
217
+ floom workers validate ./workers/<id>
218
+ floom workers push ./workers/<id>
219
+ floom run <id> --inputs-file docs/workers/inputs/<id>.json
220
+ floom workers info <id>
221
+ ```
222
+
223
+ `workers validate` is offline. It checks that `worker.yml` parses, the entry file exists, the runtime is declared, and E2B Composio workers do not use the local `composio execute` CLI. For structured connection declarations it also verifies that referenced tool slugs are covered by `allowed_tools`.
224
+
225
+ `workers push` uses `POST /workers` for new workers and `PUT /workers/{id}` for existing workers. If an older API returns 404/405 for source updates, upgrade the API before editing workers in place.
226
+
227
+ Clean up stale or superseded workers without leaving the CLI:
228
+
229
+ ```bash
230
+ floom workers disable <id> # keep the worker but stop it running on triggers
231
+ floom workers enable <id> # re-enable a disabled worker
232
+ floom workers delete <id> # permanently remove it (and its runs/artifacts); prompts unless --yes
233
+ ```
234
+
235
+ `workers delete` asks for confirmation; pass `-y/--yes` to skip the prompt (also required in non-interactive shells). `workers disable` is the reversible, soft option (`enabled=false`) for hiding a worker from triggers without deleting it.
236
+
237
+ ## Tools
238
+
239
+ > **For full worked examples per tool, end-to-end recipes (deploy a worker from prompt, port a Claude skill, schedule + webhook + composio triggers), and the agent draft contract, see [docs/AGENT-COOKBOOK.md](../../docs/AGENT-COOKBOOK.md).**
240
+
241
+ ### Workers
242
+ | Tool | Description |
243
+ | --- | --- |
244
+ | `workers.list` | List available Floom workers. |
245
+ | `workers.get` | Read one worker, including config and recent run metadata. |
246
+ | `workers.contract` | Read the canonical worker.yml/run.py/SKILL.md authoring contract. |
247
+ | `workers.templates.list` | List golden worker templates agents should start from. |
248
+ | `workers.templates.get` | Return a full template bundle with `worker_yml` plus `run_py` or `skill_md`. |
249
+ | `workers.validate` | Validate a proposed worker bundle before creating it. |
250
+ | `workers.create` | Create a worker from validated `worker_yml` plus `run_py` or `skill_md`. |
251
+ | `workers.update` | Patch trigger, cron, default inputs, capabilities, or rotate webhook secret. |
252
+ | `workers.delete` | Delete a worker and dependent run data. |
253
+ | `workers.run` | Start a manual worker run with input values. |
254
+ | `workers.logs` | Fetch cross-run log history, filterable by level and time. |
255
+ | `workers.stats` | 7-day run statistics for a specific worker. |
256
+ | `workers.timeseries` | Daily run counts and success/failure trend over N days. |
257
+ | `workers.sample_input` | Get example input values for a worker's fields. |
258
+ | `workers.archive` | Archive a worker (reversible). |
259
+ | `workers.restore` | Restore an archived worker to active status. |
260
+ | `workers.reload` | Reload all workers from disk on a self-hosted deployment. |
261
+ | `workers.versions` | List saved versions of a worker. |
262
+ | `workers.rollback` | Restore a worker to a previous version. |
263
+ | `workers.alerts.list` | List configured alerts for a worker. |
264
+ | `workers.alerts.create` | Add a failure/approval/success alert via webhook or email. |
265
+ | `workers.alerts.delete` | Remove a worker alert. |
266
+
267
+ ### Runs
268
+ | Tool | Description |
269
+ | --- | --- |
270
+ | `runs.list` | List runs, optionally filtered by worker id or status. |
271
+ | `runs.get` | Read one run with logs, outputs, artifacts, and approval state. |
272
+ | `runs.watch` | Stream SSE run events until a terminal state. |
273
+ | `runs.cancel` | Cancel an in-progress run. |
274
+ | `runs.replay` | Replay a completed or failed run with the same inputs. |
275
+
276
+ ### Approvals
277
+ | Tool | Description |
278
+ | --- | --- |
279
+ | `approvals.list` | List pending approval requests across all workers. |
280
+ | `approvals.approve` | Approve a pending run so it continues executing. |
281
+ | `approvals.reject` | Reject a pending run, stopping it. |
282
+
283
+ ### Secrets
284
+ | Tool | Description |
285
+ | --- | --- |
286
+ | `secrets.list` | List secret names and status. |
287
+ | `secrets.set` | Create or update a secret value. |
288
+ | `secrets.delete` | Delete a secret. |
289
+ | `secrets.test` | Verify a secret exists without revealing its value. |
290
+
291
+ ### Connections
292
+ | Tool | Description |
293
+ | --- | --- |
294
+ | `connections.list` | List configured app connections. |
295
+ | `connections.add_mcp` | Add an MCP server connection. |
296
+ | `connections.delete` | Remove a connection. |
297
+ | `connections.status` | Check connection health and auth status. |
298
+ | `connections.test` | Run a live connectivity check on a connection. |
299
+
300
+ ### Contexts (Brain Packs)
301
+ | Tool | Description |
302
+ | --- | --- |
303
+ | `contexts.list` | List context folders. |
304
+ | `contexts.create` | Create a new brain pack context. |
305
+ | `contexts.delete` | Delete a brain pack and all its files. |
306
+ | `contexts.read` | Read a file from a context. |
307
+ | `contexts.write` | Create or update a file in a context. |
308
+ | `contexts.upload` | Upload a binary file to a context. |
309
+ | `contexts.delete_file` | Delete a specific file from a context. |
310
+ | `contexts.versions` | List saved versions of a brain pack. |
311
+ | `contexts.rollback` | Restore a brain pack to a previous version. |
312
+
313
+ ### Triggers & Integrations
314
+ | Tool | Description |
315
+ | --- | --- |
316
+ | `triggers.list` | List integration triggers, globally or per worker/app. |
317
+ | `integrations.catalog` | Browse all available integrations. |
318
+
319
+ ### Workspace
320
+ | Tool | Description |
321
+ | --- | --- |
322
+ | `workspace.chat` | Send a message to the workspace agent and get a reply. |
323
+ | `workspace.instructions.get` | Read current workspace agent system prompt. |
324
+ | `workspace.instructions.set` | Update workspace agent system prompt. |
325
+ | `workspace.versions` | List version history of workspace instructions. |
326
+ | `workspace.rollback` | Restore workspace instructions to a previous version. |
327
+
328
+ ### Conversations
329
+ | Tool | Description |
330
+ | --- | --- |
331
+ | `conversations.list` | List past workspace agent conversations. |
332
+ | `conversations.get` | Retrieve a full conversation by ID. |
333
+
334
+ ### System
335
+ | Tool | Description |
336
+ | --- | --- |
337
+ | `system.overview` | Full workspace dashboard - health, runs, pending approvals, alerts. |
338
+ | `system.stats` | 7-day aggregate run statistics across the whole workspace. |
339
+ | `system.info` | Platform version and configuration flags. |
340
+ | `system.alerts` | Active system-wide alerts. |
341
+
342
+ ## Quick example - write + deploy + verify a worker in one MCP session
343
+
344
+ ```js
345
+ // 1. Create
346
+ await workers.create({
347
+ worker_yml: `
348
+ schema_version: "0.3"
349
+ name: text-summarizer
350
+ title: Text Summarizer
351
+ description: Summarizes any text in 3 bullets using GPT-4.1.
352
+ entrypoint: run.py
353
+ exec:
354
+ command: python run.py
355
+ runtime: python311
356
+ runner: e2b
357
+ entry: run.py
358
+ inputs:
359
+ - { name: text, kind: scalar, type: textarea, required: true, label: Text }
360
+ outputs:
361
+ - { name: summary, kind: file, media_type: text/markdown, path: out/summary.md, required: true, label: Summary }
362
+ secrets: [OPENAI_API_KEY]
363
+ capabilities:
364
+ secrets: [OPENAI_API_KEY]
365
+ network: { egress: true }
366
+ trigger: { type: manual }
367
+ `,
368
+ run_py: `
369
+ def run(inputs, context):
370
+ client = context.openai()
371
+ r = client.chat.completions.create(
372
+ model="gpt-4.1-mini",
373
+ messages=[
374
+ {"role": "system", "content": "Summarize in 3 bullets."},
375
+ {"role": "user", "content": inputs["text"]},
376
+ ],
377
+ )
378
+ summary = r.choices[0].message.content
379
+ context.write_output("summary", summary)
380
+ return {"summary": summary}
381
+ `,
382
+ });
383
+
384
+ // 2. Run
385
+ const { run_id } = await workers.run({
386
+ id: "text-summarizer",
387
+ inputs: { text: "Lorem ipsum dolor sit amet..." },
388
+ });
389
+
390
+ // 3. Watch until terminal
391
+ const watched = await runs.watch({ id: run_id });
392
+ console.log(watched.status);
393
+
394
+ // 4. Verify
395
+ const { run } = await runs.get({ id: run_id });
396
+ console.log(run.status); // "succeeded"
397
+ console.log(run.output?.summary);
398
+ ```
399
+
400
+ See [docs/AGENT-COOKBOOK.md section 1](../../docs/AGENT-COOKBOOK.md) for the full annotated walkthrough plus six more recipes (agent mode, Gmail trigger, cron schedule, webhook, approval gate, claude-skill port).