> ## Documentation Index
> Fetch the complete documentation index at: https://kaneo.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Kaneo MCP Server

> Connect Kaneo to MCP clients like Cursor and Claude Desktop using the official Kaneo MCP server.

Kaneo supports the Model Context Protocol (MCP) in two ways:

1. **Built-in HTTP endpoint**: every Kaneo instance exposes `/api/mcp` out of the box. No extra setup, no extra process.
2. **Stdio package** ([`@kaneo/mcp`](https://www.npmjs.com/package/@kaneo/mcp)): the official Kaneo MCP package on npm, a local stdio server for clients that prefer stdio transport.

Both offer the same tools for managing workspaces, projects, tasks, comments, and labels.

## Built-in HTTP endpoint

Every Kaneo API instance ships with a Streamable HTTP MCP endpoint. This is the recommended approach for self-hosted deployments.

Point your MCP client at:

```
https://your-kaneo-instance.com/api/mcp
```

On first connect, you will be redirected to Kaneo to sign in and explicitly approve the MCP client. After approval, all MCP tools run as your authenticated user.

The endpoint implements OAuth 2.1 with PKCE for authentication. Discovery metadata is available at:

* `/.well-known/oauth-protected-resource/api/mcp`
* `/.well-known/oauth-authorization-server/api`

## Stdio package

The `@kaneo/mcp` package runs a local stdio MCP server and authenticates with Kaneo using device authorization. Use this when your MCP client requires stdio transport.

### Prerequisites

* Node.js 20 or newer
* A running Kaneo API
* Access to the Kaneo web app to approve device login

By default, self-hosted Kaneo allows both `kaneo-cli` and `kaneo-mcp` as device auth client IDs.

### Install and register

Use the recommended interactive installer:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
npx @kaneo/mcp
```

The installer lets you choose where to register the server configuration:

* Cursor (user-wide)
* Cursor (project-level)
* Claude Desktop
* Custom JSON config path

You can also run the explicit install command:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
kaneo-mcp install --target cursor-user -y
```

Use `--help` to see all available targets and flags:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
kaneo-mcp install --help
```

### Point to a self-hosted instance

When generating config, pass your Kaneo base URL:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
kaneo-mcp install --target cursor-user -y --api-url https://kaneo.example.com
```

Or set it via environment variable:

| Variable              | Description                                                                |
| --------------------- | -------------------------------------------------------------------------- |
| `KANEO_API_URL`       | Kaneo API origin. Default: `http://localhost:1337`. Do not include `/api`. |
| `KANEO_MCP_CLIENT_ID` | Device auth client ID. Default: `kaneo-mcp`.                               |

If you override `KANEO_MCP_CLIENT_ID`, make sure it is included in [`DEVICE_AUTH_CLIENT_IDS`](/docs/core/installation/environment-variables).

### Authentication flow

On the first tool call that needs Kaneo access, the MCP server:

1. Requests a device code from Kaneo
2. Prints a verification URL and user code
3. Opens the browser when possible
4. Polls until you approve sign-in
5. Stores credentials in `~/.config/kaneo-mcp/credentials.json`

## Available tools

Both the HTTP endpoint and stdio package expose the same tools:

* Session: `whoami`, `list_workspaces`
* Projects: `list_projects`, `get_project`, `create_project`, `update_project`
* Tasks: `list_tasks`, `get_task`, `create_task`, `update_task`, `move_task`, `update_task_status`
* Comments: `list_task_comments`, `create_task_comment`
* Labels: `list_workspace_labels`, `create_label`, `attach_label_to_task`, `detach_label_from_task`, `delete_label`
* Task relations: `create_task_relation`, `get_task_relations`, `delete_task_relation`

## Debugging

To run the stdio server directly:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
npx @kaneo/mcp serve
```

When running from source in this monorepo:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
pnpm --filter @kaneo/mcp run build
pnpm --filter @kaneo/mcp run start
```
