Kaneo MCP Server

Read and change tasks, projects, labels, comments and time entries in a Kaneo workspace

Official · kaneo.app TypeScript Local · stdio Productivity

63 popularity score ★ 9.7k ↓ 641/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add kaneo -- npx -y @kaneo/mcp serve
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "kaneo": {
      "command": "npx",
      "args": [
        "-y",
        "@kaneo/mcp",
        "serve"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "kaneo": {
      "command": "npx",
      "args": [
        "-y",
        "@kaneo/mcp",
        "serve"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "kaneo": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@kaneo/mcp",
        "serve"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.kaneo]
command = "npx"
args = ["-y", "@kaneo/mcp", "serve"]
Gemini CLITerminal
gemini mcp add --scope user kaneo npx -- -y @kaneo/mcp serve
Local (from source)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
git clone https://github.com/usekaneo/kaneo.git
cd kaneo
pnpm install
pnpm --filter @kaneo/mcp run build
Claude CodeTerminal
claude mcp add kaneo -- pnpm --filter @kaneo/mcp run start
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "kaneo": {
      "command": "pnpm",
      "args": [
        "--filter",
        "@kaneo/mcp",
        "run",
        "start"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "kaneo": {
      "command": "pnpm",
      "args": [
        "--filter",
        "@kaneo/mcp",
        "run",
        "start"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "kaneo": {
      "type": "stdio",
      "command": "pnpm",
      "args": [
        "--filter",
        "@kaneo/mcp",
        "run",
        "start"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.kaneo]
command = "pnpm"
args = ["--filter", "@kaneo/mcp", "run", "start"]
Gemini CLITerminal
gemini mcp add --scope user kaneo pnpm -- --filter @kaneo/mcp run start

Settings 3

KANEO_API_URL Optional: Origin of the Kaneo API, without /api; defaults to http://localhost:1337.
KANEO_API_KEY Optional: Kaneo API key sent as a Bearer token; skips the browser device sign-in, for headless or Docker use.
KANEO_MCP_CLIENT_ID Optional: Device-flow client ID, default kaneo-mcp; must be listed in the server's DEVICE_AUTH_CLIENT_IDS.

What it does

Kaneo is an open source project management app with kanban boards, run either on Kaneo Cloud or on your own server. This is the MCP server its own team maintains inside the main Kaneo repository and publishes to npm as @kaneo/mcp. It gives an assistant 38 tools covering the signed-in user's workspaces: listing and searching projects and tasks, creating, editing, moving, duplicating and deleting tasks, setting status, assignee and due date, adding comments, logging time, managing labels and linking tasks to one another.

There are two ways to connect, and both expose the same tool set. Every Kaneo instance has a built-in Streamable HTTP endpoint at /api/mcp, protected by OAuth 2.1 with PKCE; the Kaneo docs recommend it for self-hosted setups because it needs no extra process. The npm package is a local stdio server for clients that only speak stdio. It signs in through Kaneo's device authorization flow on the first tool call (it prints a code, opens the browser and waits for approval) and caches the token on disk, or it can use a Kaneo API key instead for headless and Docker use.

Running npx @kaneo/mcp in a terminal starts an interactive installer that writes the server into the config of Cursor (user or project), Claude Desktop or a custom JSON file; the serve subcommand starts the stdio server directly. The API address defaults to a local instance on port 1337 and is changed with KANEO_API_URL.

What it needs

RuntimeNode.js 24+

Node.js 24 or newer for the npm package. A reachable Kaneo instance, either Kaneo Cloud or a self-hosted Kaneo API (default address http://localhost:1337), and a Kaneo account on it. Browser access to the Kaneo web app to approve the device sign-in, or a Kaneo API key created under Settings, Account, Developer. A self-hosted server must allow the kaneo-mcp client ID in DEVICE_AUTH_CLIENT_IDS, which it does by default.

Limits

It only works on Kaneo data the signed-in user can already see; it does not reach other project tools. Time entries can be created and edited but not deleted, since the Kaneo API has no delete endpoint for them. Status values must be column slugs from list_project_columns, and assignees need user IDs from list_workspace_members. Running the package bare in a terminal opens the installer menu rather than the server; the server starts when launched without a TTY or with the serve subcommand.

Who it suits

Suits teams already using Kaneo, on its cloud or self-hosted, who want an assistant to triage, create and update tasks and log time. Because the server is published by the Kaneo team and every instance ships the same tools over HTTP, users whose client supports Streamable HTTP with OAuth can skip the package and connect to their instance's /api/mcp; the npm package is for stdio-only clients or headless setups with an API key. Since many tools write and some delete, it is less suited to read-only use. Teams on Jira, Linear or another tracker need that product's own server instead.

Tools 38

whoami
Show the signed-in Kaneo user
list_workspaces
List workspaces the user belongs to
list_workspace_members
List members of a workspace and their user IDs
list_notifications
List the user's notifications
search
Search tasks, projects, workspaces, comments and activity
list_projects
List projects in a workspace
get_project
Fetch one project's details
create_project
Create a new project
update_project
Change a project's settings
list_project_columns
List a project's board columns and their status slugs
list_tasks
List tasks in a project
get_task
Fetch one task by its ID
get_task_by_ticket_id
Fetch one task by its ticket key such as KAN-12
create_task
Create a task in a project
duplicate_task
Copy a task with its fields and labels, optionally under a new title
update_task
Edit a task's fields
delete_task
Delete a task
move_task
Move a task to another project, optionally into a column
update_task_status
Set a task's status column
update_task_assignee
Change who a task is assigned to
update_task_due_date
Set or change a task's due date
list_task_activity
Show a task's activity history
list_task_time_entries
List time logged on a task
get_time_entry
Fetch one time entry
create_time_entry
Log time against a task
update_time_entry
Edit a logged time entry
list_task_comments
List comments on a task
create_task_comment
Add a comment to a task
update_task_comment
Edit a task comment
delete_task_comment
Remove a task comment
list_workspace_labels
List labels defined in a workspace
create_label
Create a new label
attach_label_to_task
Add a label to a task
detach_label_from_task
Take a label off a task
delete_label
Delete a label
create_task_relation
Link two tasks to each other
get_task_relations
List the tasks linked to a task
delete_task_relation
Remove a link between tasks

Similar servers