Limits and errors
Every cap and every failure mode in one place, across the MCP server and the CLI.
Asking questions
- Question timeout
- 5 minutes. A question that takes longer returns an error and closes the chat turn.
- Rows per query
- Cassis fetches at most 10,000 rows per query. A larger result shows as “10,000+ rows” in the app, and the answer says it was cut and suggests aggregating, filtering, or downloading the CSV.
- Result rows
- Up to 100 rows inline over MCP, with
truncatedmarking a capped result set. For more, narrow the question or ask for aggregates. - CSV download
- Download CSV in the app runs the query again and fetches up to 200,000 rows. A file cut at that limit says so.
- Zero rows
- Not an error. The query ran and matched nothing.
- Null results
- The SQL was not executed. On a schema-only project that is always the case: see Run without a warehouse connection.
- Not answerable
- The question needs information, context or data that Cassis cannot supply. Read the explanation, then provide the missing information, narrow the question or repair its source before retrying. See ask_question.
- Model overloaded
- When the model is briefly overloaded or rate-limited, the tool returns a plain-language message rather than a raw error. Retry in a moment.
MCP server
- Transport
- Stateless Streamable HTTP: each POST has its own transport. Transport state is not kept between requests. GET and DELETE are refused.
- Source schema detail
get_source_schemadetails at most 20 tables per call. Call it again for more, or usecassis schema pullfor a full local snapshot.- Error convention
- Handle three levels: returned
errorfields, MCP tool errors (including parameter validation and service failures), and HTTP authentication failures such as 401. - Roles
- Reads need an active account in the project’s organization.
update_issue_statusneeds the editor or admin role. Chats are author-only over MCP: an org admin can read a colleague’s chat in the web app but not through the server, and only the chat’s author can rate it withsubmit_feedback. - Credential expiry
- Expired or revoked credentials return HTTP 401. OAuth clients re-run the flow automatically; an API key has to be replaced.
- Unreachable project
- Querying a project the authenticated user cannot access returns an error rather than an empty result.
CLI
| Code | Meaning |
|---|---|
0 | Success. For check, advisory warnings never change this. For test, every probe completed, whatever the outcome. For dbt check, with or without findings |
1 | The thing failed on its own terms: validation findings, failed eval cases (with --repeat, a case that failed every attempt), a duplicate eval case, a case id that does not exist, a failed or stale schema plan, a rejected dbt upload, or verify stopping at a failing step |
2 | Usage error: missing API key or project, no context directory, an unreadable file, a tree over the size limits, context upload or schema push run outside a git checkout or with uncommitted context files, or a dbt command without a manifest.json or with an artifact over the size limits |
3 | Transport or API error: unreachable API, invalid key, inaccessible project, another run already active, out of credits, a timeout, or Cassis failing while it processes a dbt upload (push again) |
130 | Ctrl-C during eval run. The run is cancelled server-side |
- Tree size
- Commands that send the local tree accept up to 20,000 context files (YAML plus
domains/**/README.md) and 100 MB total, sized for roughly 10,000 modeled tables. Beyond that the CLI fails fast with exit 2 before uploading anything. If you hit it, check--base-path. On cassis-cli older than 1.5.1 the client stops at the previous ceiling of 2,000 files and 5 MB, whatever the server accepts. - DDL size
cassis schema plan,applyandpushsend the file inline, and the API rejects a DDL over 10 MB. A whole-warehouse export above that is planned schema by schema, which the commands handle: a file speaks only for the schemas it contains. See Review schema updates.- Eval run timeout
- 30 minutes by default,
--timeoutto change it. The run continues server-side if the CLI stops waiting. - Schema plan timeout
- 30 minutes for
schema plan,applyandpush,--timeoutto change it. The plan keeps computing server-side, andcassis schema apply --plan <id>resumes the wait. - Probe duration
context testis one full agent run per question, roughly 30 to 90 seconds each.
Imports and publishing
- Failure is safe
- On malformed YAML or a missing required field, Cassis keeps its previous context. Nothing is half-imported.
- Idempotence
- Re-uploading identical content with the CLI creates no new version. A GitHub App merge that touches the context path always creates one, recording the merged commit.
- Complete replacement
- Every import and publish replaces the complete context. This is why a project should have one editing path: see Choose how your context is managed.
Failure-by-failure fixes for the git loop are in Troubleshoot git and publishing.