# Troubleshooting

## Connection

| Symptom | Cause | Solution |
|---|---|---|
| `401 Unauthorized` | token wrong, expired or revoked | create a new token and enter it in the client |
| `429 Too Many Requests` | more than 60 requests per minute | wait a moment, check the agent for loops |
| client shows no tools | address without `/api/mcp`, or header missing | check with the [`curl` call](https://lalabase.com/docs/en/mcp/setup/other-clients) |
| client cannot connect | client speaks only SSE or to local processes | use a client with HTTP transport |

## Answers from the server

Every answer carries a machine field in `_meta`: `lalabase/kind` on a result, such as `ok` or
`empty`, and `lalabase/code` on an error, on a refusal also `lalabase/reason`.

| Message | Code | Cause and solution |
|---|---|---|
| This token is read-only; writes are not permitted. | `read_only` | Write with a read-only token. Turn off **Read-only access** on the token. |
| Missing required arguments: project_id | `invalid_input` | The agent named no project. `list_projects` provides the id. |
| Project not found or not accessible. | `not_found` | Wrong id, project outside the reach or, for the code tools, no right to the repository. |
| No ticket found for … | `empty` in `lalabase/kind` | The ticket does not exist, or you may not read it. |
| Not authorized. | `forbidden` | The ticket is readable, but you lack the right for this action. |
| exactly one change per call … | `invalid_input` | `update_ticket` with more than one change. Split into two calls. |
| status is not a status of this project … | `refused` | Wrong status key. The values are in `meta.available_statuses`. |
| a user in this change cannot be assigned in this project | `refused` | The person cannot be assigned to the project. |
| this project has no status field | `refused` | The project has no status field. |
| notification is archived … | `refused` | An archived notification cannot be marked. |
| create failed: … | `refused` | Lalabase refuses the ticket, for example because of a wrong status key. Read the message. |
| AI features are disabled for this organisation. | `refused` | AI was switched off after the repository was read in. `search_code_symbols` needs it. |
| idempotency_key already used with different parameters | `invalid_input` | The same key with other arguments. Use a new key. |

## Common surprises

**The status filter returns zero hits.** Status belongs to the project. Let the agent call
`list_tickets` once without a filter and read `meta.available_statuses`.

**The people directory is "not found".** The token does not reach all projects of the organisation.

**Organisations are missing from the inbox.** The token does not reach them. For all organisations
you need **All organisations, including future ones**.

**Code tools return nothing.** The repository is not connected or not read in yet. Without
[AI switched on](https://lalabase.com/docs/en/guides/ai/enable-disable) it is never read in. If you may not
see it, Lalabase reports the project as not found, even though tickets of the same project work.
