## All MCP Tools (249 tools)

Generado del servidor MCP en cada build — esta lista no puede quedarse desactualizada.
Todas viven en el mismo endpoint (`https://www.easybits.cloud/api/mcp`); los grupos sólo
deciden cuántas se cargan de una (ver `tool-groups`).

### Design (49)

Canva-like: documentos como diseño universal (cualquier formato — letter, social, slide 16:9), brand kits e imágenes. Ideal para Claude.ai / Claude Design.

| Tool | Qué hace |
|------|----------|
| `add_page` | Add a new page to a document. If html is omitted, adds a blank page. afterPageIndex is 0-based; omit to append at the e… |
| `apply_brand_kit` | Swap the brand kit on an existing document. Updates metadata.brandKitId + metadata.customColors so deployed renders pic… |
| `audit_page` | MIDE una página en vez de opinar sobre ella: corre axe-core sobre el DOM ya pintado (contraste REAL, calculado con los … |
| `change_document_format` | Change a document's canvas size (e.g., letter → slide-16-9, or to a social preset). Updates metadata.format + metadata.… |
| `create_brand_kit` | Create a brand kit with colors, fonts, and logo for consistent document styling. |
| `create_or_edit_image` | Create OR edit images with OpenAI gpt-image-2 — full implementation: text-to-image GENERATION and faithful reference-ba… |
| `create_share_link` | Create a magic share link to a document or landing with granular permissions. The recipient opens the URL and accesses … |
| `create_tournament_schedule` | Template-based tool. Pass structured match data (tournamentName, matches[], courts, etc.) and the template auto-generat… |
| `delete_brand_kit` | Delete a brand kit. |
| `delete_document` | Delete a document permanently. |
| `delete_page` | Delete a page from a document by its section ID. Cannot delete the last remaining page. |
| `deploy_document` | Publish a document as a live website at www.easybits.cloud/s/{slug}/ — instant hosting, shareable link. Requires at lea… |
| `describe_image` | Analiza/describe una imagen y devuelve texto: qué muestra + transcripción del texto visible (OCR). NO genera ni edita i… |
| `duplicate_document` | Duplicate an existing document — fast in-DB copy of all pages, theme, and metadata. No AI involved. For Vision-based cl… |
| `edit_image` | Edit, compose, or restyle image(s) with Gemini 'Nano Banana 2' (gemini-3-pro-image-preview). The platform key is used —… |
| `edit_tournament_schedule` | Edit an existing tournament schedule. Pass updated structured data — the template rebuilds the HTML and regenerates the… |
| `enhance_document_prompt` | Enhance a document prompt or auto-generate a description from the document name. Use 'auto-describe' to generate a desc… |
| `export_document` | Export a document (Landing v4) to PDF or to one PNG per page. Use `as: "images"` for social carousels (LinkedIn/IG) — e… |
| `extract_brand_kit_from_url` | Extract a brand kit from a public website URL. Captures a screenshot, uses vision AI to detect colors/fonts/mood, and s… |
| `fill_template` | Fill data-slot placeholders in a document with exact values. No AI involved — deterministic text replacement. Use after… |
| `get_document` | Get a document with all its pages. Returns sections[] where each has { id, name, html, order }. Use section.id as pageI… |
| `get_document_pdf` | Generate a PDF of a document. Returns the PDF as base64-encoded data. Requires Chrome installed locally — designed for … |
| `get_page_screenshot` | Take a screenshot of a single document page. Returns a PNG image of one page (letter-sized). Requires Chrome installed … |
| `get_section_html` | Get the outerHTML of a specific element WITHIN a page, matched by CSS selector. Example selectors: 'section' (root), '.… |
| `get_template_slots` | Get all data-slot placeholders in a document. Returns slot names and current values. Use with fill_template for determi… |
| `image_generate` | Generate an image from a text prompt using fal.ai Flux models. Returns a public image URL ready to use in landings, doc… |
| `import_html` | Alias of `open_design_in_editor` (prefer that name). Same schema and behavior. Kept for backward compatibility with exi… |
| `list_documents` | List your documents (paginated). Returns { items, nextCursor, hasMore, total }. When hasMore is true, pass nextCursor a… |
| `list_share_links` | List active share links you've created. Filter by resource. Excludes revoked links by default. |
| `list_themes` | List available document/landing themes with their color palettes. Use a theme ID when creating documents. |
| `list_voices` | Lista las voces disponibles del servicio de voz de la flota (kokoro, español). Devuelve [{id,label,gender}]. Usa un `id… |
| `open_design_in_editor` | Open a design in the EasyBits editor — the direct path from a generated design (Claude Design, Gamma, Tome, reveal.js d… |
| `optimize_image` | Convert an image to WebP or AVIF, creating a new file (original unchanged). Default quality: 80 (WebP), 50 (AVIF). Retu… |
| `pdf_to_images` | Convert a PDF to page images (PNG). Accepts either a fileId of an uploaded PDF OR raw base64 PDF data. Returns one imag… |
| `refine_document_section` | Refine a specific page/section of a document with surgical AI edits. Make targeted changes like updating text, adjustin… |
| `regenerate_document_page` | Create a completely different visual design for a document page while keeping the same content. Useful when the current… |
| `reorder_pages` | Reorder all pages in a document. pageIds must contain every existing page ID exactly once, in the desired order. |
| `revoke_share_link` | Revoke a share link by ID. The link stops working immediately for new requests; cached pages may still render briefly. |
| `screenshot_url` | VE cómo se ve una página: renderiza HTML (o una URL pública) en un Chromium real y devuelve la imagen como archivo públ… |
| `search_files` | Search files using natural language (AI-powered). Requires an AI key (set_ai_key). Returns up to 20 matching files sort… |
| `search_icon` | Busca ICONOS y devuelve el SVG INLINE listo para pegar en el HTML — no una URL, así no metes un host externo en la ruta… |
| `search_stock_photo` | Busca una FOTO de stock libre de regalías en bancos gratuitos (Pexels, Unsplash, Pixabay, Openverse) y devuelve su URL … |
| `set_section_html` | Second choice for surgical edits — prefer replace_html (more reliable, no selector fragility). Use only when you specif… |
| `structured_doc` | Create and edit structured documents (quotations, invoices, proposals) via JSON-DSL templates + @react-pdf/renderer. |
| `unpublish_document` | Unpublish a document, removing its website and reverting to draft status. |
| `update_brand_kit` | Update a brand kit's colors, fonts, logo, or other properties. |
| `update_document` | Update a document's metadata (name, theme, colors, prompt). For editing page HTML use replace_html (surgical) or set_pa… |
| `voice_tts_create` | Sintetiza una nota de voz desde texto con el motor self-hosted de EasyBits (kokoro). Servicio de flota on-demand, sin p… |
| `wait_for_document` | Block until a document's background generation stabilizes (no recent updates AND minimum sections present), or timeout.… |
### Web (7)

Internet para tu agente: buscar en Google, leer cualquier página aunque bloquee bots, extraer registros con esquema (Maps, Mercado Libre, Amazon, Instagram…) y rastrear sitios. Se mide en consultas (packs en /dash/packs).

| Tool | Qué hace |
|------|----------|
| `research_scrape` | [deprecated → web_fetch] Lee UNA página web y devuelve su contenido, aunque el sitio bloquee bots (IPs residenciales, J… |
| `research_search` | [deprecated → web_search] Busca en Google (o Bing/Yandex/DuckDuckGo) y devuelve resultados estructurados: orgánicos, sn… |
| `web_crawl` | Lee una página y SIGUE sus links internos (mismo dominio) hasta `maxPages`, devolviendo markdown por página. Cobra 1 co… |
| `web_extract` | Extrae REGISTROS estructurados (JSON con esquema estable) de una fuente conocida: Google Maps (negocios con teléfono/Wh… |
| `web_extract_status` | Estado de un job de `web_extract`. Mientras corre: { status:'running' } (gratis). Cuando termina: { status:'done', item… |
| `web_fetch` | Lee UNA página web y devuelve su contenido, aunque el sitio bloquee bots (IPs residenciales, JS resuelto). Cuesta 1 con… |
| `web_search` | Busca en Google (o Bing/Yandex/DuckDuckGo) y devuelve resultados estructurados: orgánicos, snack pack (negocios locales… |
### Core (32)

Lo esencial: archivos, DBs, documentos, forms, websites, brand. Para agentes generalistas.

| Tool | Qué hace |
|------|----------|
| `bulk_delete_files` | Soft-delete multiple files at once (max 100). Returns count of deleted files. |
| `bulk_upload_files` | Create multiple file records and get presigned upload URLs (max 20). Returns array of `{ file, putUrl }`. Same access r… |
| `create_webhook` | Create a webhook to receive event notifications. Returns the webhook with its secret (shown only once). Events: file.cr… |
| `db_create` | Create a new SQLite database. Name must be alphanumeric/dashes/underscores, max 64 chars. Max databases depends on plan… |
| `db_delete` | Permanently delete a database and all its data. |
| `db_exec` | Execute multiple SQL statements in a batch (max 50). Useful for migrations or multi-step operations. |
| `db_get` | Get a database by ID. |
| `db_import` | Bulk import rows into a table. Up to 10,000 rows per request. Values are auto-converted to strings (sqld requirement). … |
| `db_list` | List your SQLite databases (id, name, namespace, description, createdAt). |
| `db_query` | Execute a single SQL statement against a database. Supports SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, etc. Use `arg… |
| `db_select` | Read-only counterpart of db_query — accepts only a single SELECT statement. Rejects anything that mutates, escalates, o… |
| `delete_ai_key` | Remove a stored AI provider API key |
| `delete_file` | Soft-delete a file (sets status to DELETED). Recoverable for 7 days via `restore_file`, then auto-purged from storage. |
| `delete_webhook` | Permanently delete a webhook. |
| `delete_website` | Delete a website. Soft-deletes all associated files (recoverable for 7 days) and removes the website record. |
| `duplicate_file` | Create a copy of an existing file (new storage object). Returns the new file record. |
| `get_docs` | Get the complete EasyBits API reference documentation. Use this to learn how to use any EasyBits feature — endpoints, S… |
| `get_learning_progress` | Academia EasyBits (/aprende): progreso del usuario en cada curso. Las lecciones con `verify` se marcan solas cuando la … |
| `get_usage_stats` | Get account usage statistics: storage used/limit, file counts, AI generations used/remaining, plan info, and upgrade re… |
| `get_webhook` | Get a webhook by ID with status, events, fail count, and last error. |
| `list_ai_keys` | List your configured AI provider API keys (values are masked) |
| `list_deleted_files` | List soft-deleted files with `daysUntilPurge` for each. Files are auto-purged after 7 days. Use `restore_file` to recov… |
| `list_providers` | List your configured storage providers. If none configured, shows platform default (Tigris). |
| `list_webhooks` | List your configured webhooks (id, url, events, status, failCount, lastError). |
| `restore_file` | Restore a soft-deleted file back to DONE status. Only works on files with status DELETED. |
| `secret_delete` | Delete an EasyBits Secret by name. Any pending or future `agent_run` calls that reference this name will fail until you… |
| `secret_list` | List the names of all EasyBits Secrets stored for the calling account. Values are NEVER returned — this only shows name… |
| `secret_set` | Create or update an EasyBits Secret for the calling account. Stored AES-256-GCM encrypted at rest. Once saved the value… |
| `set_ai_key` | Store your AI provider API key for AI-powered features (search, auto-tagging). Key is encrypted; response shows masked … |
| `share_file` | Share a file with another user by email. Creates a permission record. canRead defaults to true, canWrite/canDelete to f… |
| `update_file` | Update a file's name, access level, or metadata. For access changes (public↔private), copies the object between storage… |
| `update_webhook` | Update a webhook's URL, events, or status (ACTIVE/PAUSED). Reactivating resets the fail counter. |
### Documents (2)

Solo tools de documentos (create/update/deploy + quotations + structured_doc).

| Tool | Qué hace |
|------|----------|
| `get_document_directions` | Generate 4 design directions for a document. Each direction includes fonts, colors, mood, and layout hints. Use one of … |
| `replace_html` | PRIMARY tool for editing document pages. Use this for ANY targeted change — single sentence, color swap, one element, o… |
### Websites (2)

Solo tools de websites (crear, deployar archivos, inject HTML).

| Tool | Qué hace |
|------|----------|
| `get_website` | Get a website by ID with stats. Returns website object with url. |
| `update_website` | Update a website's name or status. Stats (fileCount, totalSize) are recomputed automatically from the database. |
### Lead Magnet (22)

Toolset orquestado para crear lead magnets (PDF + landing + form).

| Tool | Qué hace |
|------|----------|
| `create_document` | Create a new document. Pages (sections) are optional — add them later via update_document. Each section: { id, order, h… |
| `create_form` | Create a contact/subscription form for a website. Returns an HTML snippet. |
| `create_geo_scorecard` | Create a GEO (Generative Engine Optimization) scorecard from structured data. Returns the document + PDF. |
| `create_lead_magnet` | Create a complete lead magnet in ONE call: landing page + capture form + delivery to your content. |
| `create_screening_report` | Create a screening/compliance report (BlackPLD, PEP, sanctions) from structured data. Returns the document + PDF. |
| `create_website` | Create a new website with a name. Generates a slug automatically. Returns `{ website }` with id, slug, prefix, url. |
| `deploy_website_file` | Deploy a file to a website in a single call — no presigned URL or status update needed. Pass the file content directly … |
| `edit_geo_scorecard` | Edit an existing GEO scorecard with updated structured data. Rebuilds the HTML and regenerates the PDF. |
| `edit_screening_report` | Edit an existing screening report with updated structured data. Rebuilds the HTML and regenerates the PDF. |
| `get_default_brand_kit` | Get the user's default brand kit (colors, fonts, logo). Returns null if none is set. This kit is auto-applied when crea… |
| `get_node_outline` | Mapa DIRECCIONABLE de una página: cada nodo con su `data-id`, tag, clases y texto propio. Léelo ANTES de `patch_node` p… |
| `get_page_html` | Get the full HTML and metadata of a single page. Lighter than get_document when you only need one page. Returns { id, n… |
| `inject_html` | Inject HTML into an existing page on a website without rewriting the entire file. |
| `list_brand_kits` | List your brand kits (color palettes, fonts, logos for consistent document styling). |
| `list_form_submissions` | List submissions for a form. When formId is omitted, returns recent submissions across ALL your forms (use list_forms t… |
| `list_forms` | List all your forms with submission counts. Use this to discover form IDs before calling list_form_submissions. |
| `list_website_files` | List files belonging to a website. Returns `{ items, nextCursor, hasMore }`. When `hasMore` is true, pass `nextCursor` … |
| `list_websites` | List your websites (paginated). Returns { items, nextCursor, hasMore, total }. When hasMore is true, pass nextCursor as… |
| `patch_node` | Edita una página POR NODO: reemplaza, borra o inserta usando el `data-id` como dirección. Lo que no tocas queda BYTE-ID… |
| `set_page_html` | Replace the ENTIRE HTML of a single page. Use ONLY for full-page rewrites or wholesale restructure. For ANY edit smalle… |
| `transform_image` | Crop, resize, rotate, flip, convert, or apply grayscale to an image. Creates a new file (original unchanged). Returns `… |
| `upload_website_file` | Upload a file to a website via presigned URL. Returns `{ file, putUrl }` — PUT the bytes to `putUrl`, then call `update… |
### Video (20)

Video con IA (Runway Gen-4.5) + personajes recurrentes, y proyectos de video doc-style (escenas animadas HTML → MP4 con narración kokoro). Ghosty arma escenas, música y voz, y renderiza.

| Tool | Qué hace |
|------|----------|
| `add_video_scene` | Add a scene. html = the scene's markup (absolutely positioned to fill the frame; reference bundled media as assets/<nam… |
| `attach_video_asset` | Register a named media asset (image/logo/etc.) the render box downloads into assets/. Reference it in scene html as ass… |
| `avatar_video_create` | TALKING HEAD video generator. Powered by fal.ai (SadTalker / Hallo2 / LivePortrait — OSS models, pay-per-use). Takes a … |
| `character_delete` | Delete a saved character. Only removes the Character record — the reference photos (if stored as Files) stay in the use… |
| `character_list` | List the user's saved characters (reusable identities for video generation). Call this when the user references someone… |
| `character_remember` | Save a reusable character (person, pet, mascot) from 1–3 reference photos. The character's slug can be used later in `v… |
| `create_video_project` | Create a stateful video project — an ordered set of animated scenes that compile to an MP4. Doc-style: create empty (or… |
| `delete_video_project` | Delete a video project permanently. |
| `delete_video_scene` | Delete a scene by id. |
| `generate_captions` | Enqueue viral MrBeast-style animated captions for a video. Input: a public HTTPS URL to an MP4 / MOV / any common video… |
| `get_caption_status` | Poll a captions render job started by generate_captions. Returns { status, elapsedMs, result?, error?, logs }. Status v… |
| `get_video_project` | Get a video project with its full scene list (html, timeline, narration, durations) and assets. |
| `list_video_projects` | List the caller's video projects (newest first). |
| `list_videos` | List the user's video generations (latest first). Returns status, prompt, and file ids for each. |
| `render_video_project` | Compile the project to a HyperFrames composition and render it to MP4 on the owner's on-demand box (synthesizing any pe… |
| `reorder_video_scenes` | Reorder all scenes. sceneIds must list every existing scene id exactly once in the desired order. |
| `set_video_music` | Set (or clear) the continuous background music track. Pass a public audio URL; the box downloads and muxes it (auto-duc… |
| `set_video_scene` | Edit a scene by id (from get_video_project scenes[].id). Only pass the fields you change. Changing narration re-synthes… |
| `update_video_project` | Update project-level fields (name, theme, customColors, fps, width, height). Does NOT touch scenes. |
| `video_create` | Generate a short video (2–10s) from a prompt. Automatically orchestrates: (1) cinematic prompt enhancement, (2) still g… |
### Sandbox (65)

MicroVMs Firecracker para correr agentes y código aislado. Ciclo de vida (spawn/extend/suspend/resume/destroy), snapshot + fork (clonar una caja viva en N hijos copy-on-write para explorar variantes en paralelo), exec (sync + background), run-code, kernel Jupyter persistente (run_cell con estado + charts), archivos (write/read/list/delete/move/mkdir), expose_port (URL pública), sandbox_admin (passthrough admin :8787) + agent_run (Claude managed con billing por token). Ideal para harness de agentes (Claude Code, Codex) y ejecución segura.

| Tool | Qué hace |
|------|----------|
| `agent_create` | ⚠️ DEPRECATED para cajas permanentes: usa `create_machine` (modelo único de caja — Sandbox permanente con billing + del… |
| `agent_destroy` | Destroy a persistent agent created via `agent_create` / `ghosty_spawn`: kills the underlying Firecracker sandbox AND de… |
| `agent_install_skill` | Install / upload a skill (Agent Skills Open Standard — a SKILL.md with frontmatter `name`, `description`, `tools` + opt… |
| `agent_list` | List the persistent agents (chat-*, ghostyclaw, openclaw) owned by the calling account. Use this to enumerate agents be… |
| `agent_message` | Send a chat message to a persistent agent created via `agent_create` / `ghosty_spawn` (chat-* templates) and return the… |
| `agent_record` | ONE-SHOT: record a computer-use agent (template computer-ghosty-gemini) while it performs a task, and return a public U… |
| `agent_recording_list` | List the desktop recordings stored on a computer-use agent's VM. Returns an array of { id, url, bytes, at, recording } … |
| `agent_recording_start` | Start recording the desktop of a computer-use agent (computer-ghosty-gemini). ffmpeg captures display :0 to an mp4 insi… |
| `agent_recording_stop` | Stop the in-progress desktop recording and finalize the mp4. Returns { recording:false, id, url, bytes, durationMs } wh… |
| `agent_run` | Start a managed Claude agent (Claude Agent SDK loop) inside a fresh Firecracker microVM. By default the agent has Bash/… |
| `agent_run_destroy` | Destroy the sandbox underlying an agent run. Call this after you've successfully fetched the result via `agent_run_stat… |
| `agent_run_status` | Poll an agent run started with `agent_run`. Returns the current status: 'running' (still working), 'done' (success — re… |
| `call_create` | Crea una videollamada online y devuelve el link para compartir — no necesita nada previo. Levanta el servidor de llamad… |
| `call_destroy` | Termina una videollamada limpiamente: (1) para la grabación activa si la hay y sube el MP4 a Files, (2) rescata cualqui… |
| `call_files` | Lista las grabaciones y transcripts de todas las llamadas — archivos permanentes en EasyBits Files, disponibles aunque … |
| `call_record` | Inicia la grabación de una llamada en curso. Un chromium headless se une como observador invisible y ffmpeg captura el … |
| `call_status` | Estado del servidor de llamadas: si hay grabación activa y quiénes están en la sala. Retorna { recording, room, started… |
| `call_stop` | Detiene la grabación, sube el MP4 permanentemente a los Files del usuario y genera un transcript con Whisper. Retorna {… |
| `call_transcript` | Devuelve el TEXTO del transcript de una llamada, inline, listo para resumir o extraer pendientes — no un link. Incluye … |
| `delete_snapshot` | Delete a sandbox snapshot, freeing its stored image. Does not affect the source box or any children already forked from… |
| `ghosty_spawn` | Spawn THE default Ghosty agent — zero configuration. Uses EasyBits' managed Anthropic credentials (same billing pattern… |
| `goose_spawn` | Spawn THE managed Goose agent — zero configuration. Block's open-source coding agent running as ACP server (JSON-RPC ov… |
| `list_snapshots` | List your saved sandbox snapshots (copy-on-write clone sources): snapshotId, name, source box, size, created date. |
| `sandbox_apply_patch` | Atomic hotfix in one call: apply N surgical edits, then optionally rebuild and restart the service. Edits run first and… |
| `sandbox_create` | Spawn a Firecracker microVM sandbox. Returns sandboxId used for subsequent calls. Base templates: ubuntu, python, node,… |
| `sandbox_destroy` | Permanently destroy an EPHEMERAL sandbox and free its resources. Idempotent. (Permanent machines are released via relea… |
| `sandbox_exec` | Execute a shell command inside a sandbox. Returns stdout, stderr, exitCode, durationMs. Default timeout 60s, max 600s. |
| `sandbox_exec_background` | Start a long-running command in the background. Returns { execId, status } immediately instead of blocking like sandbox… |
| `sandbox_exec_kill` | Kill a background command started with sandbox_exec_background. Signals the whole process GROUP (SIGTERM, then SIGKILL … |
| `sandbox_exec_list` | List the background commands of a sandbox: execId, command, status, exit code and log sizes. This is how you recover an… |
| `sandbox_exec_status` | Poll a background command started with sandbox_exec_background. Returns status (running/exited), exitCode (when exited)… |
| `sandbox_expose_raw_port` | Expose a RAW layer-4 (TCP/UDP) port of the sandbox — the only way to reach a service that does not speak HTTP (SSH on 2… |
| `sandbox_extend` | Refresh a sandbox's TTL before the auto-destroy reaper fires. No-op on persistent boxes (returns { persistent, noop }).… |
| `sandbox_files_delete` | Delete a file or directory inside the sandbox. Pass recursive=true to remove a non-empty directory. |
| `sandbox_files_edit` | Surgically edit a file inside the sandbox: replace oldString with newString in place (read → replace → write). Use this… |
| `sandbox_files_list` | List directory entries (name, size, isDir, modifiedAt) inside the sandbox. |
| `sandbox_files_mkdir` | Create a directory (and any missing parents) inside the sandbox. |
| `sandbox_files_move` | Move or rename a file/directory inside the sandbox. Parent directories of the destination are created if needed. |
| `sandbox_files_read` | Read a file from the sandbox. Small text (<50KB) returns inline JSON with full content. Recognized images (PNG/JPEG/GIF… |
| `sandbox_files_write` | Write a file inside the sandbox. Creates parent dirs if needed. Use encoding=base64 for binary content. |
| `sandbox_fork` | Boot N copy-on-write children from a sandbox (fresh IP each, collision-free), to explore variations in parallel. Pass s… |
| `sandbox_git_checkout` | Switch branches in a sandbox repo. With create:true it uses `checkout -B`, which is idempotent — safe to run on every w… |
| `sandbox_git_clone` | Clone a git repo into a sandbox. For private repos pass `token` (ideally as '$secret:NAME' from the vault) — credential… |
| `sandbox_git_commit` | Stage and commit in a sandbox repo. Stages everything by default; pass `paths` to stage a subset. If there is nothing t… |
| `sandbox_git_log` | Commit history of a sandbox repo, paginated. Returns { items, nextCursor, hasMore } — pass nextCursor back as `cursor` … |
| `sandbox_git_pull` | Pull into a sandbox repo. Fast-forward only by default (pass rebase:true to rebase). Returns any conflicted paths so th… |
| `sandbox_git_push` | Push a sandbox repo to its remote. Pass `token` (or '$secret:NAME') for private repos. `force` uses --force-with-lease,… |
| `sandbox_git_status` | Structured git status for a repo in a sandbox: branch, upstream, ahead/behind counts, and the staged/modified/untracked… |
| `sandbox_kernel_restart` | Restart the persistent Jupyter kernel for a 'code-interpreter' sandbox — clears all state (variables, imports). Use to … |
| `sandbox_list` | List all active sandboxes owned by the current account. |
| `sandbox_resume` | Restore a suspended sandbox from its snapshot (same TAP/IP/MAC/rootfs/volumes). The lifetime that remained when it was … |
| `sandbox_run_cell` | Run code in the sandbox's PERSISTENT Jupyter kernel — variables, imports and loaded data survive between calls (unlike … |
| `sandbox_run_code` | Run a snippet of Python/Node/Bash inline (no need to write a file first). Output captured. Default lang=python. NOTE: e… |
| `sandbox_runtime` | Control the service daemon running inside the sandbox via systemd — no manual systemctl/npm through sandbox_exec. actio… |
| `sandbox_set_bootstrap` | Declare the BOOTSTRAP of a sandbox: a script the host runs EVERY TIME the box wakes up, before the agent gets its first… |
| `sandbox_snapshot` | Capture a named, persisted copy-on-write image of a RUNNING sandbox WITHOUT stopping it (the box keeps running). The sn… |
| `sandbox_ssh_disable` | Close the SSH forward (port 22) of a sandbox. The key stays injected and sshd keeps running inside the box — it just be… |
| `sandbox_ssh_enable` | Give the user SSH into the box, in one call: injects their public key(s) and restarts the box sshd. HAND THE USER `tunn… |
| `sandbox_status` | Get a sandbox's record: status (starting/running/stopped/error/lost/suspended), template, createdAt, expiresAt, and met… |
| `sandbox_suspend` | Snapshot a sandbox to disk and free its CPU/IP — the box stops billing compute but keeps its state. The TTL is PAUSED w… |
| `sandbox_unexpose_raw_port` | Tear down a raw TCP/UDP forward created with sandbox_expose_raw_port. The host port returns to the pool and may be re-a… |
| `service_start` | Levanta un servicio de flota on-demand y devuelve sus URLs. kind='voice' arranca una caja con STT (whisper) + TTS (koko… |
| `service_status` | Estado de un servicio de flota: si está corriendo y sus URLs. Pasa kind (p.ej. 'voice') o el sandboxId devuelto por ser… |
| `service_stop` | Detiene y destruye una caja de servicio de flota para liberar recursos. Pasa el sandboxId devuelto por service_start. S… |
| `templates_list` | List available sandbox templates with metadata for catalog UI: tier (chat-embed/coding-harness/autonomous/custom/base),… |
### Flota (4)

Agentes de la flota (WhatsApp, WABA, web, Teams): listar, leer su configuración y aplicar cualquier acción de /capabilities por MCP — prompt, motor, modelo, secrets, conectores (add-mcp + set-cap-level), skills, buckets por canal, reciclar caja. Lo que hace el dashboard de /dash/flota, hecho por un agente.

| Tool | Qué hace |
|------|----------|
| `fleet_agent_capabilities` | Estado de configuración de un FleetAgent (lo mismo que GET /api/v2/fleet-agents/:id/capabilities): conectores (`capabil… |
| `fleet_agent_configure` | Aplica UNA mutación de configuración a un FleetAgent — el mismo contrato que POST /api/v2/fleet-agents/:id/capabilities… |
| `fleet_agent_list` | Lista los agentes de la FLOTA (FleetAgent: WhatsApp/WABA/web/Teams) de la cuenta. Distinto de `agent_list` (cajas persi… |
| `fleet_agent_messages` | Historial de UNA conversación de un FleetAgent, con cursor. `groupId` es la conversación; `since` es el cursor de la úl… |
### Hosting (33)

Hosting de apps sobre microVMs Firecracker, always-on, tiers fijos en MXN/mes (nano…performance). launch_app pone una app en producción en UNA llamada (caja + código + build + URL pública + release + dominio con TLS) — el equivalente a `fly launch`. Además: releases con rollback y redeploy (que es también el cambio de tier), backups diarios de datos incluidos con 7 días de retención, dominios propios, logs, y delegación de acceso para co-administrar. El plan da acceso; cada máquina factura flat al mes.

| Tool | Qué hace |
|------|----------|
| `create_backup` | Take a data backup right now instead of waiting for tonight's run. Copies the paths declared in runspec.dataPaths to du… |
| `create_machine` | Buy an ALWAYS-ON machine (permanent VM, flat MXN/month). NO platform plan needed — hosting bills on its own. If the acc… |
| `delete_machine_release` | Delete a release and its stored artifact. Refuses if it is the release currently deployed on a live machine. |
| `deploy_machine` | Publish the machine's current app code as a versioned RELEASE in durable storage. This is what makes the box recoverabl… |
| `get_machine_logs` | The app's own log, last N lines: the systemd unit's journal when the runspec has a unit, otherwise the file the startCo… |
| `get_machine_runspec` | Read a machine's runspec (how its app is built, started and backed up). Returns null if none is set yet. |
| `grant_access` | Delegate access over YOUR account to another EasyBits account by email. scopes=["machines"] lets them operate (monitor/… |
| `launch_app` | Put an app in production in ONE call — the `fly launch` of EasyBits: provisions the machine, gets the code in, builds, … |
| `list_access` | List the accounts you have delegated YOUR account to, and the scopes each holds. |
| `list_backups` | List a machine's daily data backups (newest first), with size, consistency level and expiry. Backups run nightly, are k… |
| `list_machine_releases` | List published releases, newest version first. Omit sandboxId to list every release in the account. |
| `list_machine_secrets` | Which env vars this app uses (`secretNames`) and what else is available in the account vault to wire up (`inVault`). Na… |
| `list_machine_templates` | List machine templates with their required env, so you know what `env` to pass to create_machine. Managed-runtime templ… |
| `list_machine_tiers` | List the always-on hosting catalog: tiers (nano…performance-4x) with vCPU/RAM/NVMe and flat MXN/month price (shared + r… |
| `list_machines` | List all always-on machines (permanent sandboxes) owned by the current account, with tier + monthlyMxn (status self-hea… |
| `make_permanent` | Promote an existing (ephemeral) sandbox to an always-on machine: keeps the SAME sandboxId, disarms the host reaper, and… |
| `redeploy_machine` | Build a BRAND NEW machine from a release: provisions a box, unpacks the code, builds and starts it. Two jobs, one path … |
| `release_machine` | Delete an always-on machine. DESTRUCTIVE AND IMMEDIATE: stops billing, takes a last backup and destroys the VM — there … |
| `restart_machine` | Restart the app process with the CURRENT secrets and runspec. Seconds: it downloads nothing and builds nothing — unlike… |
| `restore_machine` | Revive a machine that was suspended because its SUBSCRIPTION was cancelled (trial ended, card failed) — it sleeps for 7… |
| `restore_machine_from_backup` | Restore a backup's data into a machine, OVERWRITING what is there. Requires confirm:true. Restoring onto the source mac… |
| `revoke_access` | Revoke delegated access from an account by email. Omit scopes to revoke everything; pass scopes to remove only those. I… |
| `rollback_machine` | Put a previous release back on the SAME machine: download, extract and restart. No build: a release published by launch… |
| `sandbox_admin` | Admin passthrough to a permanent machine's in-VM admin API (:8787) — WhatsApp pairing (/admin/whatsapp/status\|link\|unli… |
| `sandbox_domain_add` | Attach a custom domain to a sandbox port, served over HTTPS at https://<domain> with an auto-issued TLS cert — instead … |
| `sandbox_domain_list` | List the custom domains attached to a sandbox. |
| `sandbox_domain_remove` | Detach a custom domain from a sandbox. |
| `sandbox_domain_verify` | Check whether a custom domain is live: confirms DNS resolves and that https://<domain> serves with a valid TLS cert. Us… |
| `sandbox_expose_port` | Expose a port running inside the sandbox as a public HTTPS URL (e.g. https://sb-<id>-<port>.sandboxes.easybits.cloud) —… |
| `sandbox_logs` | Read recent journald (systemd) logs from inside the sandbox — native log access instead of piping journalctl through sa… |
| `set_machine_runspec` | Declare HOW to build and run the app on a machine: appDir (required), plus buildCommand/startCommand or a systemd unit,… |
| `set_machine_secrets` | Give an app its environment variables: stores each value encrypted in the account vault AND wires the name into the mac… |
| `unset_machine_secret` | Stop injecting an env var into this machine. Restarts the app right away, so it loses the var NOW — if it needs it to b… |
### Payments (2)

Links de pago con MercadoPago (BYO): conecta tu cuenta y genera cobros. El dinero va directo a tu MP; EasyBits no retiene fondos. Ideal para que un agente cierre la venta.

| Tool | Qué hace |
|------|----------|
| `create_payment_link` | Create a MercadoPago payment link (Checkout Pro). Returns a shareable initPoint URL. Requires the user to have connecte… |
| `list_payment_links` | List your payment links (id, title, amount, status pending/paid, initPoint, payerEmail). |
### Email & Broadcasts (6)

Email transaccional + audiencia + newsletters one-shot. send_email, contactos con tags, y broadcasts con unsubscribe automático. La capa de nurturing del funnel.

| Tool | Qué hace |
|------|----------|
| `add_contact` | Add (or update) a contact in your audience. Tags let you target broadcasts. Upserts by email. |
| `create_broadcast` | Create a draft broadcast (newsletter) to send to your audience. Returns the broadcast id — send it with send_broadcast. |
| `list_broadcasts` | List your broadcasts (subject, status draft/sending/sent, total/sent/failed counts). |
| `list_contacts` | List your contacts (email, name, tags, status subscribed/unsubscribed/bounced). Optionally filter by tag. |
| `send_broadcast` | Send a draft broadcast to all subscribed contacts (filtered by its audienceTag). Skips unsubscribed/bounced contacts. R… |
| `send_email` | Send a transactional email (HTML) from EasyBits. For one-off messages — use create_broadcast/send_broadcast for newslet… |
### Scripting (Code Mode) (5)

Superficie mínima para agentes que escriben SCRIPTS en vez de invocar tools. En vez de cargar las ~140 schemas (impuesto fijo de contexto que DeepSeek no admite), el agente usa discover_tools (buscar) + run_tool (ejecutar) y/o la REST API v2 desde su Bash. Solo deja en tools/list el IO de archivos (multipart incómodo por curl); todo lo demás se alcanza sin reconectar. Patrón Anthropic 'Code execution with MCP' / Cloudflare 'Code Mode'.

| Tool | Qué hace |
|------|----------|
| `discover_tools` | Search the FULL Easybits MCP catalog — including tools NOT loaded in your current session's toolGroup. Returns name, de… |
| `get_file` | Get file metadata and a signed download URL. Returns file object with a `readUrl` field containing a presigned GET URL … |
| `list_files` | List your files (id, name, size, contentType, access, status, createdAt). Returns `{ items, nextCursor, hasMore }`. Whe… |
| `run_tool` | Dispatch any Easybits tool by name — even tools NOT loaded in the active toolGroup. Use this after `discover_tools` to … |
| `upload_file` | Create a generic user file record and get a presigned upload URL. Returns `{ file, putUrl }`. Upload bytes via PUT to `… |