Model Context Protocol

Kelvia MCP documentation

The MCP server opens Kelvia boards, tasks, comments, worklogs, stages, members, tags and the day plan to AI clients: Claude Code, Cursor, Codex CLI and any compatible agent. 58 tools — the whole product.

Transport: Streamable HTTP, stdio, legacy SSE Auth: OAuth 2.1 + PKCE; agent key optional

Overview

Kelvia MCP is a Model Context Protocol server that proxies your AI client's actions into the Kelvia REST API. The client sees a set of tools like list_tasks, create_task, add_task_comment and calls them as needed.

Mode When to use Auth
remote /mcp Hosted MCP server, teams, multiple users or clients. OAuth; agent key optional.
stdio Local single-user setup: the client spawns the MCP process itself. KELVIA_API_TOKEN in the process environment.
legacy /sse Older clients that require the SSE transport. Bearer header; query token only for legacy SSE.

Quick start

  1. Connect your account

    Add the hosted server to your MCP client and approve access in Kelvia when the browser opens. No token needs to be copied for the standard setup.

  2. Pick a transport

    For the hosted MCP use https://mcp.kelvia.app/mcp. For a local run, build the kelvia-mcp package and connect it as a stdio server.

  3. Add the config to your client

    Use one of the examples below for Cursor, Claude Code, Codex CLI or local stdio.

  4. Verify the connection

    Ask the client: “List my Kelvia boards”. If the agent sees your boards, move on to tasks, comments and worklogs.

Authorization and permissions

Hosted clients use OAuth by default: Kelvia opens in the browser, asks you to approve access and lets the client refresh its credentials. For autonomous agents, use a dedicated agent key with its own authorship, scopes and independent revocation.

Recommended: use OAuth for Claude Code, Codex and Cursor. If you choose an agent key, send it only in the Authorization: Bearer <token> header. Never put a token in a URL.
Mechanism What it gives you
Agent key Comments, worklogs and tasks are authored by the agent, not by a person.
Key scopes Limit operations: read, create, edit, delete.
Board role Key permissions intersect with the OWNER / ADMIN / MEMBER / VIEWER role.
Key revocation Once revoked or the agent is disconnected, further requests get 401.

Connecting clients

Cursor, remote HTTP

Add the server to ~/.cursor/mcp.json or a project-level .cursor/mcp.json, then select Connect in Cursor Settings → Tools & MCP.

{
  "mcpServers": {
    "kelvia": {
      "url": "https://mcp.kelvia.app/mcp"
    }
  }
}

Claude Code, remote HTTP

claude mcp add --transport http --scope user kelvia https://mcp.kelvia.app/mcp
claude mcp list

Codex app, CLI and IDE extension

Add the server, complete OAuth in the browser and verify the shared Codex configuration:

codex mcp add kelvia --url https://mcp.kelvia.app/mcp
codex mcp login kelvia
codex mcp list

Local stdio

Build the MCP package first:

pnpm --filter kelvia-mcp build
# or
pnpm run build:mcp

Then connect the built file as a local MCP server:

{
  "mcpServers": {
    "kelvia": {
      "command": "node",
      "args": ["/absolute/path/to/kelvia-mcp/dist/index.js"],
      "env": {
        "KELVIA_API_TOKEN": "klv_your_token",
        "KELVIA_API_URL": "https://api.kelvia.app/api"
      }
    }
  }
}

MCP tools

The 58 tools are grouped below. Argument names in MCP use snake_case; the server maps them onto REST API fields where needed.

Boards and structure

list_boards, get_board, create_board, update_board, archive_board, unarchive_board, delete_board, get_board_activity

list_board_columns, create_board_stage, update_board_stage, delete_board_stage, reorder_board_stages, start_board_stage, complete_board_stage, reopen_board_stage, materialize_board_backlog_stage

Tasks

list_tasks, get_task, get_task_by_number, create_task, update_task, reorder_task, delete_task, get_task_activity, get_task_summary, set_task_summary, list_calendar_tasks

Comments and worklogs

get_task_comments, add_task_comment, update_task_comment, delete_task_comment

get_task_worklogs, add_task_worklog, update_task_worklog, delete_task_worklog

Day plan

list_daily_plan_blocks, create_daily_plan_block, update_daily_plan_block, set_daily_plan_block_status, reorder_daily_plan_blocks, delete_daily_plan_block, list_daily_plan_definitions, list_overdue_daily_plan_blocks, list_daily_tasks

Members, invitations, tags

list_board_members, update_board_member, remove_board_member

list_board_invitations, create_board_invitation, revoke_board_invitation, list_my_invitations, accept_board_invitation, decline_board_invitation

list_board_tags, list_tags, create_board_tag, get_current_user

Annotations

Every tool declares readOnlyHint, destructiveHint and idempotentHint, so a client can approve reads on its own and ask before a delete. 22 of the 58 tools are read-only.

Toolsets

The full set costs about 45 KB of JSON schema in every session. Load only what a workflow needs — tasks,planner publishes 21 tools and about 20 KB. get_current_user is always published; an empty or unknown value publishes everything.

Toolset Tools Covers
boards 9 Boards, columns, board activity.
tasks 12 Tasks, task activity, AI summaries.
comments 8 Comments and worklogs.
stages 8 Sprints and milestones.
members 9 Members, roles, invitations.
planner 8 Personal time-blocking day plan.
tags 3 Board and workspace tags.
# stdio — environment variable
KELVIA_TOOLSETS=tasks,planner npx kelvia-mcp

# remote — header, preferred
X-MCP-Toolsets: tasks,planner

# remote — query parameter, for clients that cannot set headers
https://mcp.kelvia.app/mcp?toolsets=tasks,planner

Prompts & resources

The MCP server also publishes prompts and resources so the client never has to guess the schema.

Type Name Purpose
Prompt create_task_from_pr Draft a task from pull request context.
Prompt triage_board_backlog Suggest an order for working through a board backlog.
Resource kelvia://schema/board-config Schema of statuses, priorities and permission keys.
Resource kelvia://schema/task-mutations Expected arguments for creating and updating tasks.

Operations

Environment variables

Variable Mode Description
KELVIA_API_TOKEN stdio Personal token or agent key klv_....
KELVIA_API_URL both Backend API base URL. Defaults to https://api.kelvia.app/api.
KELVIA_TOOLSETS both Comma-separated toolsets to publish. Defaults to all.
PORT remote If set, the server starts in HTTP/SSE mode. If not — stdio.
MCP_PUBLIC_URL remote Public MCP server URL, advertised as the OAuth resource.
MCP_AUTHORIZATION_SERVER remote Authorization server origin. Usually the backend without the /api suffix.
MCP_ALLOWED_ORIGINS remote CSV CORS allowlist. If unset, the origin is reflected.
MCP_RATE_LIMIT remote Max requests per token per minute, falling back to the IP for anonymous requests. Defaults to 300.
MCP_INSTANCE_COUNT, MCP_STICKY_SESSIONS remote SSE Hints for the multi-instance legacy SSE warnings.

Health and discovery

GET /health reports the live transports and the available toolsets. OAuth discovery lives at /.well-known/oauth-protected-resource/mcp on the MCP server and /.well-known/oauth-authorization-server on the backend.

Legacy SSE and scaling

Legacy SSE keeps sessions in process memory. If GET /sse and POST /messages land on different instances, the client can get 404 Session not found. SSE needs a single instance or sticky sessions. Streamable HTTP on /mcp does not have this problem.

Troubleshooting

Symptom What to check
401 Unauthorized Complete OAuth in the client, or check the agent-key environment variable, revocation and scopes.
The agent doesn't see a board Is the user or agent a member of the board; is the role sufficient.
404 Session not found on SSE Sticky sessions or a single instance for legacy SSE; better yet, switch to /mcp.
A tool can't modify a task Edit scope, board role, correct board_slug or id.
Codex CLI won't connect to remote MCP Run codex mcp login kelvia, then check the server with codex mcp list.