5 min

# Connect and ask from an MCP client

Cassis works with any client that supports remote MCP servers over Streamable HTTP. Add one server URL, authenticate, and the agent answers from your ontology with the SQL attached.

**Prerequisites:** a Cassis account (a [demo account](/start/try/) counts) and an MCP-compatible client.

## Add the server

The endpoint is the same in every client: `https://app.getcassis.com/mcp/`, using Streamable HTTP. Add it as a remote MCP server. If the client supports MCP OAuth, it opens a browser for sign-in. A non-interactive client can use an [API key](/setup/api-keys/) as a bearer token instead.

Here are the exact steps for three common clients:

Claude Code Claude Desktop Cursor

```bash
claude mcp add --transport http cassis https://app.getcassis.com/mcp/
```

Or commit a project-scoped config, which carries no secret and works for everyone on the repo:

```json
{
"mcpServers": {
  "cassis": {
    "type": "http",
    "url": "https://app.getcassis.com/mcp/"
  }
}
}
```

Settings, then Connectors, then **Add custom connector**. Paste `https://app.getcassis.com/mcp/`.

Settings, then MCP, then **Add new MCP server**. Paste `https://app.getcassis.com/mcp/`, transport HTTP.

With OAuth, the client stores and refreshes the token after you sign in. An expired session simply starts the flow again.

## Check the connection

Ask your client something that makes it call Cassis:

```text
Which Cassis projects can you see?
```

The agent calls `list_projects` and returns the projects your Cassis account can reach.

## Ask a real question

Type it as you would to a colleague:

### MCP client example

**User:** Which product categories had the highest delivered GMV last year?

**Plan awaiting approval:** Rank product categories by delivered GMV in the most recent full calendar year in the data, returning the top categories with their GMV in EUR.

-   “Last year” means the most recent full calendar year in the data.
-   Category means `PRODUCTS.CATEGORY`, not department.
-   Return the top 10.

**User:** Yes, run it.

**Answer:** The top delivered-GMV categories are led by bed\_bath\_table (€6.96M), followed by watches\_gifts (€6.76M) and health\_beauty (€6.57M). The response also contains SQL, ten rows, objects used, and the pinned ontology version.

The client renders the plan in the conversation. When Cassis needs your decision, correct or approve the assumptions before it runs. The answer includes SQL, results when the project has a live warehouse, provenance, and the published ontology version. Presentation differs by client; the response contract is in [ask\_question](/reference/mcp/ask-question/).

## How it behaves

- **Ask normally** The client chooses `ask_question`; you do not need to write tool calls.

- **Decisions wait** A question with a genuine fork returns a plan and waits for your approval. Reply with a correction when an assumption is wrong.

- **Follow-ups keep context** Same chat, new question. The chat stays pinned to the ontology version it started on.

- **Answers come from the published ontology** Not from a colleague’s branch, and not from an unmerged pull request. `get_project_status` says which version you are on.

## What the agent cannot reach

An MCP agent can ask questions, inspect project status and the warehouse schema, and triage detected issues. It cannot read or edit the ontology; that work happens in a repository checkout.

An agent that changes definitions uses a checkout and opens a pull request: [Curate a git-managed project](/curate/agent/). The full list is the [capability matrix](/reference/capabilities/).

**Non-interactive agents and CI use an API key instead.** A scheduled job or a custom agent that cannot open a browser sends a long-lived key as a bearer token to the same endpoint. See [API keys](/setup/api-keys/).
