Endpoint and authentication
The Cassis MCP server exposes the answering engine, project state, the warehouse schema, and the issue queue to analytics agents. Users type in natural language; the client picks the tool and calls it.
Endpoint
- URL
https://app.getcassis.com/mcp/- Transport
- Streamable HTTP. No stdio mode.
- Auth
- OAuth 2.1 for interactive clients, or a long-lived API key as a bearer token for non-interactive agents and scripts. Any Cassis account works, including a sample-demo signup.
- Keys
- Prefix
sk-k6-, issued by any member from API keys in the account menu, valid for up to a year, and optionally scoped to one project. A key acts as the person who created it. See API keys.
With OAuth, the client opens a browser, you sign in with your Cassis account, and the token is stored and refreshed automatically. Signing in with Google needs an address Google reports as verified; otherwise the sign-in ends with access_denied. If your account moves to another organization, the next token refresh asks you to reconnect. Deactivated accounts and accounts awaiting approval cannot refresh their connection.
Connecting a client
Any client that supports remote MCP servers over Streamable HTTP can connect. Add the endpoint above and use OAuth when the client supports it; the tabs below are examples for three common clients.
claude mcp add --transport http cassis https://app.getcassis.com/mcp/ Or type /mcp inside Claude Code. For a project-scoped, secret-free config committed to the repository:
{
"mcpServers": {
"cassis": {
"type": "http",
"url": "https://app.getcassis.com/mcp/"
}
}
} Settings, then Connectors, then Add custom connector. Paste the endpoint URL and sign in when the browser opens.
Settings, then MCP, then Add new MCP server. Paste the endpoint URL, transport HTTP.
For a non-interactive agent, load an API key into the environment and send it instead of running OAuth:
curl -H "Authorization: Bearer ${CASSIS_API_KEY}" https://app.getcassis.com/mcp/ The tool surface
Eleven tools in five groups, ten for an API key scoped to one project, which is not offered list_projects. The server is read-heavy on purpose: it answers questions, records feedback on them, reports project status, reads the source schema, and triages detected issues. Beyond your own chats, its only write is update_issue_status.
| Group | Tools | What for |
|---|---|---|
| Query | ask_question, submit_feedback | Ask about the data and get an answer, the SQL, and the results, then rate the conversation |
| Discovery | ping, list_projects | Confirm the server is reachable, and find the project to work with |
| Project state | get_project_status, get_source_schema | Read what is published, the git-sync state, and the schema beneath the context |
| Issue triage | list_issues, get_issue, get_issue_evidence, update_issue_status | Work the queue of problems detected from real conversations and failing evals |
| Evals | get_eval_run | Read an eval run’s status and per-case results |
Every tool except ping and list_projects takes an optional project_id, the project’s UUID. With an API key scoped to one project, it defaults to that project and naming any other project returns an error. The server’s instructions to the client name the key’s project and say to omit project_id. With OAuth or an unscoped key, start with list_projects to find the project, and pass its id to every other tool; leaving it out returns an error.
There is no context tool
The server does not read or edit the context. An agent reads it as files in a checkout, changes it there, and opens a pull request, which is why agent-driven curation requires the git path.
| To do this | Use |
|---|---|
| Read the current context | A repository checkout. cassis context pull materializes one |
| Change the context | Edit the files in the repository, then open a pull request. See the git-managed curation workflow |
| Validate a change | cassis context check, cassis context fmt |
| Test that a change works | cassis context test |
| Check for regressions | cassis eval run |
| Publish | Merge to the default branch. Cassis imports and publishes a new version |
Client behavior matters. Surface a plan and its assumptions when ask_question returns needs_execution, and execute it only after the user approves. Preserve chat_id for follow-ups. For context work, use a repository checkout and the CLI. Stop at the pull request unless the repository owner explicitly authorizes the agent to merge after required checks pass. Asking questions over MCP does not require a local CLI install.
Error convention
Every tool reports a failure as an error key in place of its normal fields, rather than raising. Expired or revoked credentials return HTTP 401: OAuth clients re-run the flow, and an API key has to be replaced. Full limits are in Limits and errors.