# Limits {#limits}


All nine tools are read-only. Repeating a call does not create a second side effect. The tools read Elova's retained records. They do not reach the public web or live n8n.

Annotations on every tool:

| Annotation | Value | Meaning |
| --- | --- | --- |
| `readOnlyHint` | `true` | The tool does not modify Elova or n8n |
| `destructiveHint` | `false` | The tool does not delete or overwrite |
| `idempotentHint` | `true` | The same arguments read the same retained view, apart from later collection |
| `openWorldHint` | `false` | The tool does not search outside Elova |

These are client hints. Authorization still runs on every call.


## What is never returned {#what-is-never-returned}


- n8n URLs and credentials
- workflow parameters, settings, and credentials
- node connections and a workflow graph
- node inputs, outputs, and raw execution payloads
- error stacks
- tracing identifiers
- dedicated identity or email fields
- aggregate token `usage` on statistics (`usage` is always `null`)

Customer-controlled names and error text can still contain personal information. Review the client before you approve access.


## Pages {#pages}


| Tool | Page |
| --- | --- |
| `get_many_workspaces` | `limit` 1–50, default 50. Cursor max 1024 characters |
| `get_many_instances` | One list, at most 20. No cursor |
| `get_many_sync_jobs` | `limit` 1–50, default 50, from the newest 100 jobs. No cursor |
| `get_many_executions` | `limit` 1–50, default 50. Cursor max 4096 characters |
| `get_many_workflows` | `limit` 1–50, default 50. Cursor max 4096 characters |

Keep the same filters and the same `limit` when you send `cursor`. A cursor is bound to the account, approval generation, eligible workspace set, filters, and page size.

- A changed binding returns `VALIDATION_ERROR`. That includes a different eligible workspace set, a different limit or filter, or a tampered cursor.
- Loss of the selected workspace can return `NOT_FOUND` instead.
- `MCP_CURSOR_STALE` means the retained snapshot or source changed. The text is `MCP_CURSOR_STALE: Read settings changed. Restart without a cursor.`

Discard the cursor and start again without one. Do not treat every authorization change as `MCP_CURSOR_STALE`.

`nextCursor: null` means this filter has no further page. It does not mean history is complete. Read `coverage`.


## Truncation inside a record {#truncation-inside-a-record}


| Flag | Bound |
| --- | --- |
| `workflowNameTruncated` | Execution label shortened to 100 Unicode code points |
| `nameTruncated` | Workflow name shortened to 200 Unicode code points |
| `nodesTruncated` | Node inventory prefix, at most 1000 nodes and 32 KiB |
| `history.truncated` | Diagnostic prefix, at most 64 nodes, 128 runs, 16 usage rows per run, and 48 KiB |
| `truncated` on sync jobs | More jobs exist in the newest-100 window than `limit` |

`nodeCount` includes nodes omitted from the inventory. A shortened name is display data. The local UUID remains the selector.


## Time and history {#time-and-history}


- `period` is `today`, `7d`, `30d`, or `all`
- Execution list `period` defaults to `all`
- Undated executions are included only for `all`
- Statistics require `timeZone`. Execution lists default to the workspace zone
- Statistics return at most 30 buckets
- `coverage.partial` is always `true`
- Reads do not fill gaps by calling n8n


## Request and rate limits {#request-and-rate-limits}


Each running MCP process applies these limits:

- request body at most 32 KiB
- response at most 256 KiB
- request deadline 30 seconds
- 4 concurrent requests globally
- 2 concurrent requests per account
- 60 requests per minute per approval

A limit response is HTTP 429 with `Retry-After`. Wait and retry the same read. Do not send a write to work around it. There is no write tool.


## Connection limits {#connection-limits}


- Approval expiry is 1, 7, or 30 days, and never more than 30 days
- One approval can include at most 50 workspaces
- The approval page lists at most 200 eligible workspaces
- An account can have at most 100 active approvals
- Access tokens last at most 5 minutes
- A refresh token cannot be reused
- The shipped identity configuration ends an idle sign-in session after 30 minutes and ends every sign-in session after 30 days

The approval expiry can end access sooner than the sign-in session ceiling.
