Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
io.github.gonnagetapower/kelvia-mcp (MCP) Server
The Kelvia MCP server enables AI agents to fully operate the Kelvia task manager. It supports task-management concepts including boards, tasks, sprints, roles, worklogs, and a day planner, exposing these capabilities through the Model Context Protocol.
๐ ๏ธ Key Features
Boards
Tasks
Sprints
Roles
Worklogs
Day planner
๐ Use Cases
Agent-driven task planning and execution in Kelvia
Managing work across sprints with roles and worklogs
Using kanban-style boards for agent workflows
โก Developer Benefits
Integrates with Model Context Protocol (MCP)
Targets AI-agent task management workflows
Repository and package metadata available (CI badge, npm version, MIT license)
โ ๏ธ Limitations
Only described at a high level in the provided source excerpt (no details on specific tool names, schemas, or authentication).
Kelvia is a shared task manager for
people and coding agents. One concrete use: hand off an unfinished task from
Claude Code to Codex.
The guide includes a copyable repo-file handoff that works without Kelvia,
then shows when a shared task helps. Through the
Model Context Protocol, an agent can create
and update tasks, move work across a Kanban board, comment, log time, run stages,
and plan the day. Its changes stay visible and attributed in the same UI the
human uses.
The server exposes 58 tools and works with Claude Code, Codex, Cursor, and
other MCP clients. The hosted endpoint uses OAuth, so there is no API token to
paste into the recommended setup. A local stdio mode is
available for CI and clients without remote MCP support.
Add https://mcp.kelvia.app/mcp in Settings โ Tools & MCP
The first connection opens Kelvia in the browser for OAuth approval. After it
connects, ask the client: List my Kelvia boards.
Why Kelvia MCP
Complete workflow coverage โ create and triage tasks, move work across a
board, log time, run stages, and plan a day. Not a read-only bridge.
Controlled write access โ agent keys have read/create/edit/delete scopes
intersected with the agent's role on each board.
Visible agent activity โ changes, comments, and worklogs appear in Kelvia;
supported task changes can be reverted by a human in the app.
Load only what you need โ toolsets let a client publish one
part of the product instead of all 58 tools.
Modern remote auth โ Streamable HTTP with OAuth 2.1 + PKCE, or a Bearer
token when an explicit agent identity is required.
A local option when you need one โ stdio for clients
without remote MCP support, for CI, and for keeping the key on one machine.
See it work
From the client side โ one prompt, and the agent reads the board, decides what
matters, files a follow-up task and comments on the blocker:
A real session against mcp.kelvia.app, typeset from its transcript.
create_task really did create #17, and add_task_comment really did comment
on #9 โ which is what the rest of this section shows.
And from the product side. Everything below was created by an agent over this
server โ the board, the tasks, the discussion, and the logged time.
An agent creating and triaging tasks on a Kelvia board
Every change an agent makes is attributed to it and filterable, so a human can
review exactly what happened rather than trusting a summary:
The personal day planner is part of the surface too, so an agent can block out
the work it just triaged:
Hosted quick start (recommended)
The production endpoint is:
text
https://mcp.kelvia.app/mcp
OAuth is the default. The client opens Kelvia in a browser, you approve access,
and the client stores and refreshes its OAuth credentials. No API token needs to
be pasted into a configuration file.
Claude Code
bash
claude mcp add --transport http --scope user kelvia https://mcp.kelvia.app/mcp
claude mcp list
Start Claude Code, enter /mcp, choose kelvia, and complete Authenticate in
the browser. After authentication, verify the connection with:
The Codex app, CLI, and IDE extension share the same MCP configuration on a
Codex host. In an interactive Codex session, use /mcp to inspect the server.
Open Cursor Settings โ Tools & MCP, enable kelvia, and select Connect to
complete OAuth in the browser. Ask Cursor to list your Kelvia boards after it
reports the server as connected.
Agent-key authentication
OAuth acts as the approving Kelvia user. Use an agent key instead when the
connection needs its own identity, board membership, role, expiry, and granular
read/create/edit/delete scopes.
Create one in Kelvia โ Profile โ Agents:
Create an agent identity.
Add it to only the required boards and choose its board role.
Create a key with the minimum required scopes and an expiry date.
Copy the klv_โฆ value when shown; Kelvia stores only its hash.
Codex with an agent key
Keep the token in the environment; Codex stores only the variable name:
Claude Code expands environment variables in MCP JSON. Single quotes below keep
your shell from expanding the token into its command history:
bash
export KELVIA_API_TOKEN='klv_your_agent_key'
claude mcp add-json --scope user kelvia \
'{"type":"http","url":"https://mcp.kelvia.app/mcp","headers":{"Authorization":"Bearer ${KELVIA_API_TOKEN}"}}'
claude mcp list
Do not put tokens in URLs. The Streamable HTTP endpoint accepts authentication
only through the Authorization header.
Local stdio setup
Most people should use the hosted endpoint above. Running the server
locally does not keep your tasks on your machine โ they live in Kelvia either
way, and the local process talks to the same API. What it changes is the path
your credential takes, and which clients can connect.
Use stdio when one of these applies:
Your client cannot do remote MCP or OAuth. The major clients can, but
older versions, some IDE plugins, and locked-down machines where a browser
redirect will not open, cannot.
You are automating in CI, where nobody is around to approve an OAuth
prompt. (An agent key against the hosted endpoint also works โ this just
removes a dependency.)
Your key should not leave the machine. With the hosted endpoint your
token reaches mcp.kelvia.app and stays in its memory for the session; over
stdio it only ever goes to the Kelvia API.
Requirements: Node.js 20+.
Run the published package without installing anything:
bash
npx kelvia-mcp
Or build from source (Node.js 20+ and pnpm 9+), then use an absolute path to
dist/index.js in client configuration:
bash
git clone https://github.com/gonnagetapower/kelvia-mcp.git
cd kelvia-mcp
pnpm install
pnpm build
MCP Bundle for Claude Desktop
For local installation in Claude Desktop, build the MCP Bundle (.mcpb):
bash
pnpm run bundle:mcpb
This produces build/kelvia-mcp-<version>.mcpb. Open that file in Claude
Desktop and enter a dedicated Kelvia agent key when prompted. The bundle is a
packaged form of the same local stdio server; for the hosted OAuth connection,
use the recommended quick start instead.
Claude Code (stdio)
bash
claude mcp add --scope user \
--env KELVIA_API_TOKEN=klv_your_agent_key \
--transport stdio kelvia -- node /absolute/path/to/kelvia-mcp/dist/index.js
The server also publishes two prompts (create_task_from_pr and
triage_board_backlog) and two schema resources under kelvia://schema/โฆ.
Every tool carries MCP annotations โ readOnlyHint, destructiveHint,
idempotentHint โ so a client can auto-approve reads and prompt before a
delete. 22 of the 58 tools are read-only.
Toolsets
The full surface costs about 45 KB of JSON schema in every session. Load only
the parts a workflow needs:
Toolset
Tools
What it 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
get_current_user is always published. Omitting the setting, or naming a
toolset that does not exist, publishes everything.
bash
# stdio: environment variable
KELVIA_TOOLSETS=tasks,planner npx kelvia-mcp
# hosted: header (preferred)
X-MCP-Toolsets: tasks,planner
# hosted: query parameter, for clients that cannot set headers
https://mcp.kelvia.app/mcp?toolsets=tasks,planner
tasks,planner publishes 21 tools and about 20 KB of schema instead of 45 KB.
Good first prompts
text
List my Kelvia boards.
text
On board "product", show open high-priority tasks and suggest a triage order.
Do not modify anything.
text
Create a task on board "product" titled "Fix the login redirect", assign high
priority, and show me the created task.
text
Plan today using my three most urgent assigned tasks. Show the proposed blocks
before creating them.
Security model
Remote tokens are accepted only in the Authorization: Bearer โฆ header.
OAuth uses authorization-code flow with PKCE and dynamic client registration.
OAuth tokens cannot manage account credentials, personal API tokens, agents,
or MCP connections.
Agent keys are hashed at rest, revocable, optionally expiring, and limited by
both key scopes and board roles.
Remote sessions appear in the Kelvia profile and can be revoked.
Legacy SSE exists for older clients at /sse; it may require a query token
because browser EventSource cannot set headers. Prefer /mcp so credentials
never enter URLs, browser history, or proxy access logs.
Treat MCP servers as privileged integrations. Review a requested write before
approving it, use a dedicated agent key for automation, and grant only the
boards and scopes the workflow needs.
The MCP Bundle connects to the Kelvia API and sends the requests needed to
perform the actions you ask it to take. It does not run a separate analytics or
advertising service. Review the Kelvia Privacy Policy
and the AI and MCP Data Processing Policy
before installing it.
Self-hosting the HTTP endpoint
Setting PORT switches the process from stdio to Streamable HTTP.
Then check GET /health, which reports the available transports and toolsets.
Environment variables
Variable
Mode
Purpose
KELVIA_API_TOKEN
stdio
Agent key or personal token
KELVIA_API_URL
both
API base; defaults to https://api.kelvia.app/api
KELVIA_TOOLSETS
both
Comma-separated toolsets; default all
PORT
hosted
Enables HTTP mode and selects the listening port
MCP_PUBLIC_URL
hosted
Public protected-resource origin
MCP_AUTHORIZATION_SERVER
hosted
OAuth authorization-server origin
MCP_ALLOWED_ORIGINS
hosted
Comma-separated CORS allowlist
MCP_RATE_LIMIT
hosted
Requests per token per minute; default 300
MCP_INSTANCE_COUNT
hosted
Number of HTTP instances
MCP_STICKY_SESSIONS
hosted
Required for multi-instance legacy SSE
Streamable HTTP is stateless at the MCP transport layer. Legacy SSE sessions
are stored in process memory, so SSE requires one instance or sticky sessions.
Troubleshooting
Needs authentication / HTTP 401 โ complete OAuth from the client's MCP
panel, or verify that the Bearer-token environment variable is available to
the client process.
HTTP 403 โ the key lacks a required scope, the agent lacks the required
board role, or the email/account state blocks that operation.
Server connects but a board is missing โ add the agent identity to that
board, or approve OAuth as a user who already has access.
Connection closed in stdio mode โ run pnpm build, use an absolute path,
and confirm Node.js 20+ plus KELVIA_API_TOKEN are present.
No tools visible โ check claude mcp list, codex mcp list, or Cursor's
Tools & MCP panel, then restart/reload the client after changing config.
Large task output โ use compact list_tasks, filter by board/status, then
call get_task for one record instead of requesting detailed lists.
Too many tools for the client โ narrow the surface with
toolsets.
Health and OAuth discovery:
text
GET https://mcp.kelvia.app/health
GET https://mcp.kelvia.app/.well-known/oauth-protected-resource/mcp
GET https://api.kelvia.app/.well-known/oauth-authorization-server
Development
bash
pnpm install
pnpm run lint
pnpm run typecheck:strict
pnpm run test
pnpm run test builds the package, initializes the stdio server through the
official MCP client SDK, and verifies the published tools, annotations,
toolsets, prompts, resources, and server instructions.
See CONTRIBUTING.md for how this repository relates to the
Kelvia monorepo and what a tool change needs to touch.