# Limits

> Plan limits (records, calls per minute, session history) and the hard limits of the MMW server.

On this page you will learn how many records and calls each plan gives you, how much session history is kept, and which limits apply to every call regardless of plan.

## Personal plans

| Plan | Price | Records | Calls per minute |
| --- | --- | --- | --- |
| Free | $0, 3-day trial | 250 | 60 |
| Starter | $5 per month | up to 5,000 per project | 120 |
| Pro | $35 per month | up to 100,000 | 120 |
| Enterprise | $117 per month | up to 1,000,000 | 300 |
| On-Premise | by agreement | by agreement | — |

Enterprise also includes an SLA and an NDA. The record limit and the per-minute call limit apply **per project**: a key is bound to a project, and all its calls count against that project. Payment and plan changes: [Plans and billing](/account/plans-and-billing/).

## Session history

Quotas for syncing Claude Code and Codex sessions through the [local agent](/agent/session-history/):

| Plan | Storage | Retention |
| --- | --- | --- |
| Free | 25 MB | 7 days |
| Starter | 100 MB | 30 days |
| Pro | 500 MB | 90 days |
| Enterprise | 20 GB | full history |

The agent does not upload sessions older than the plan's retention (their count shows in `skipped_by_plan_history` of [`mmw_sync_status`](/reference/mmw-sync-status/)). When storage runs out, the agent stops uploading and reports `quota_exceeded`. If the server is temporarily short of space, the agent waits and uploads later; nothing is lost.

## Organizations

$18 per seat per month, or $14 with annual billing, minimum 5 seats. A seat is an active member; offboarded people and contractors whose term has expired do not take seats. Pilot: 14 days, up to 10 seats. See [Organization billing](/organizations/billing/).

## Server limits

These apply on every plan.

| Limit | Value | Error when exceeded |
| --- | --- | --- |
| `content` length in `remember` | up to 100,000 characters | `content exceeds maximum allowed length` |
| `derived_from` in `remember` | up to 50 IDs | `derived_from accepts at most 50 memory ids` |
| `confidence` | 0 to 1 | `confidence must be between 0 and 1` |
| `limit` in `search` | 1–50, default 10 | none: the value is clamped |
| `X-Idempotency-Key` | 1–256 printable ASCII characters | `invalid X-Idempotency-Key` |
| Account requests | sliding 60-second window; 300 requests by default | `MCP rate limit exceeded` |
| Records per workspace and per account | technical server limits | `maximum number of memories exceeded for workspace` / `… for tenant` |
| Concurrent integration calls | per project settings | `project gateway concurrency limit exceeded` |
| Integration response time and size | per project settings | `downstream timeout`, `downstream response size limit exceeded` |
| Status inheritance by summaries | up to 3 levels of `derived_from` | — |
| `preview` in `graph_relations` | first 120 characters | — |

Access-related time limits:

| What | Duration |
| --- | --- |
| claude.ai OAuth token | 30 days |
| Organization invitation | 7 days, single use, for a specific email |
| Telegram bot link code | 10 minutes, single use |

## What happens when you hit a limit

- **Record limit:** `remember` is rejected with `project memory limit exceeded`, while `search`, `validate_memory` and `forget` keep working. Delete what you no longer need with [`forget`](/reference/forget/) or upgrade.
- **Per-minute call limit:** the call is rejected with `project call limit exceeded` or `MCP rate limit exceeded`. After a minute calls go through again.
- **Subscription ends:** during the grace period memory is read-only, then the account is suspended. Notice texts are on the [Errors](/reference/errors/) page.

The per-project per-minute limit also covers integration calls through `gateway_call`. The local `mmw_sync_status` tool answers without contacting the server and does not count.

## Next steps
