# Limits and errors

> What each plan allows in accounts, seats and calls, when the allowance period starts, what counts against it, and what every refusal message means.

[Documentation](https://www.getmcpads.com/docs) / [Concepts](https://www.getmcpads.com/docs/concepts/discovery)

Plans are priced on how much you connect, not on how much you ask. Every paid plan has unlimited tool calls; what grows with the plan is the number of ad accounts you can expose and the number of people who can reach them.

Plans

| Plan | Ad accounts | Seats | Tool calls | Writes |
| --- | --- | --- | --- | --- |
| Free | 1 | 1 | 200 per period | No |
| Pro | 5 | 5 | Unlimited | Yes |
| Team | 15 | 15 | Unlimited | Yes |
| Agency | 50 | 50 | Unlimited | Yes |

> **Note** Only the Free plan has a call allowance. On a paid plan a call is never refused for volume. The rate limits on the next page still apply, because those protect the advertising platforms rather than the bill.

## When the period starts

The allowance runs from the day you signed up to the same day the following month, not from the first of the calendar month. Sign up on the 28th and your period ends on the 28th. Where a month is too short, as with the 31st in February, it ends on the last day of that month, and the original day comes back the month after.

## What counts

- On the Free plan only. Paid plans do not count calls at all.
- One tool call is one unit, whether it reads one row or ten thousand.
- A call routed through `run_tool` counts once, not twice.
- `list_accounts`, `search_tools` and `describe_tool` do not count.
- A refused call does not count. Being over quota, or asking for an account you did not tick, costs nothing.

## Refusal codes

Every refusal carries two content blocks: a sentence for the person reading the chat, and a JSON block for the agent, with a stable code, whether retrying can help, whether a human is needed, and the next action. The codes are a public contract: they are deprecated, never renamed.

| Code | Retry helps | Human needed | Meaning |
| --- | --- | --- | --- |
| `UNKNOWN_TOOL` | No | No | The name matches nothing. search_tools finds the right one. |
| `UNKNOWN_SKILL` | No | No | The slug matches nothing. search_skills finds the right one. |
| `ACCOUNT_NOT_ALLOWED` | No | No | The account was not ticked. list_accounts shows what is. |
| `NO_ACCOUNT_SELECTED` | No | Yes | The platform is connected but nothing is exposed yet. |
| `PLATFORM_NOT_CONNECTED` | No | Yes | No active connection for that platform. |
| `WRITE_NOT_ON_PLAN` | No | Yes | The tool exists; the plan has no writes. |
| `CALL_ALLOWANCE_REACHED` | No | Yes | The Free plan allowance is spent for this period. |
| `RATE_LIMITED` | Yes | No | A platform ceiling would be crossed; the message names the delay. |
| `TOOL_NOT_ON_ENDPOINT` | Yes | No | Dedicated URL for another source; the message names the right one. |
| `DATABASE_UNAVAILABLE` | Yes | No | Transient. Nothing was changed on any ad account. |
| `PLATFORM_ERROR` | Yes | No | The advertising platform itself refused; its message is quoted. |
| `BAD_ARGUMENTS` | No | No | The call is malformed; the message names the missing piece. |

## Reading a refusal

A refusal says which check failed and what would fix it. It is meant to be actionable by the agent without asking a human, except where only a human can act.

| Refusal | What it means | What to do |
| --- | --- | --- |
| `not among the ... accounts allowed` | The account was not ticked in the dashboard. | Call `list_accounts`, use one of those. Only the account owner can add more. |
| `No ... account has been selected` | The platform is connected but nothing is exposed. | Hand back to the account owner. |
| Write refused on the current plan | The tool exists but the plan has no writes. | Read tools still work. Upgrading is a human decision. |
| Call allowance reached | The Free plan quota is spent. | It resets on the sign-up day of the month. Paid plans have no call limit. |
| Tool not available on this endpoint | A dedicated per-source URL was used for another platform's tool. | The message names the URL that serves it. |

---

This page as HTML: https://www.getmcpads.com/docs/concepts/limits
Every page under /docs is available as Markdown: append `.md`, or send `Accept: text/markdown`.
