Skip to main content
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) — 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’s login page. After you sign in, 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:
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:
kaneo-mcp install --target cursor-user -y
Use --help to see all available targets and flags:
kaneo-mcp install --help

Point to a self-hosted instance

When generating config, pass your Kaneo base URL:
kaneo-mcp install --target cursor-user -y --api-url https://kaneo.example.com
Or set it via environment variable:
VariableDescription
KANEO_API_URLKaneo API origin. Default: http://localhost:1337. Do not include /api.
KANEO_MCP_CLIENT_IDDevice auth client ID. Default: kaneo-mcp.
If you override KANEO_MCP_CLIENT_ID, make sure it is included in DEVICE_AUTH_CLIENT_IDS.

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

Debugging

To run the stdio server directly:
npx @kaneo/mcp serve
When running from source in this monorepo:
pnpm --filter @kaneo/mcp run build
pnpm --filter @kaneo/mcp run start