# 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, and valid for up to a year. A key acts as the person who created it. See [Members and roles](/setup/members/).

With OAuth, the client opens a browser, you sign in with your Cassis account, and the token is stored and refreshed automatically. An expired session just re-runs the flow.

## 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 Code Claude Desktop Cursor

```bash
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:

```json
{
"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:

```bash
curl -H "Authorization: Bearer ${CASSIS_API_KEY}" https://app.getcassis.com/mcp/
```

## The tool surface

Twelve tools in six groups. The server is read-heavy on purpose: it answers questions, reports project status, reads the source schema, reads the data-source review queue, and triages detected issues. Its only write is `update_issue_status`.

| Group | Tools | What for |
| --- | --- | --- |
| Query | [ask\_question](/reference/mcp/ask-question/) | Ask about the data and get an answer, the SQL, and the results |
| Discovery | [ping](/reference/mcp/projects/), [list\_projects](/reference/mcp/projects/) | Confirm the server is reachable, and find the project to work with |
| Project state | [get\_project\_status](/reference/mcp/projects/), [get\_source\_schema](/reference/mcp/source-schema/) | Read what is published, the git-sync state, and the schema beneath the ontology |
| Data source review | [list\_source\_changes](/reference/mcp/source-changes/), [get\_source\_change](/reference/mcp/source-changes/) | Read the schema drift waiting for review; approving or dismissing stays in the app |
| Issue triage | [list\_issues](/reference/mcp/issues/), [get\_issue](/reference/mcp/issues/), [get\_issue\_evidence](/reference/mcp/issues/), [update\_issue\_status](/reference/mcp/issues/) | Work the queue of problems detected from real conversations and failing evals |
| Evals | [get\_eval\_run](/reference/mcp/evals/) | Read an eval run’s status and per-case results |

Every tool takes `project_id` except `ping` and `list_projects`. Start with `list_projects` to find it.

## There is no ontology tool

The server does not read or edit the ontology. 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](/build/git-connect/).

| To do this | Use |
| --- | --- |
| Read the current ontology | A repository checkout. [`cassis ontology pull`](/reference/cli/ontology/) materializes one |
| Change the ontology | Edit the files in the repository, then open a pull request. See [the git-managed curation workflow](/curate/agent/) |
| Validate a change | [cassis ontology check](/reference/cli/ontology/), [cassis ontology fmt](/reference/cli/ontology/) |
| Test that a change works | [cassis ontology test](/reference/cli/ontology/) |
| Check for regressions | [cassis eval run](/reference/cli/eval/) |
| 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 ontology 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](/reference/limits/).
