swimlane-mcp
swimlane-mcp is a read-only MCP server that lets you explore your configured KanbanFlow boards, tasks, comments, and tracked time.
List boards (
list_boards): columns in order, swimlanes, colors with team names/descriptions, members, and where "me" was found.List a person's tasks (
list_tasks): tasks of "me" or any named person across all/selected boards and columns, with board, column, swimlane, color, labels, and people resolved to names, plus counts and ametablock.Search tasks (
search_tasks): find tasks whose text contains a query across boards/columns, in name, description, labels, custom fields, or subtasks, withmatchedFieldsper task.Get one task in full (
get_task): complete description, status, people, labels, color meaning, time tracking, subtasks, custom fields, and comments with authors and dates.List comments (
list_comments): most recent comments across boards (newest first), optionally filtered by text or by mentions of a person.List time entries (
list_time_entries): tracked intervals with who/when/how long/on which task, broken down by day and person, over a chosen window or specific task ids.Read-only and safe: every tool is annotated
readOnlyHint, so hosts can run them without prompting; no tool modifies a board.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@swimlane-mcp show me all my tasks across my KanbanFlow boards"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
swimlane-mcp
An unofficial, read-only Model Context Protocol server for KanbanFlow. It lets any MCP client (Claude Desktop, Claude Code, Cursor, VS Code, OpenCode…) list the tasks of a person — you, or anyone you name — across all the boards you configure. It is not tied to any board or team: each person configures their own boards.
Built on TanStack AI (@tanstack/ai + @tanstack/ai-mcp).
Not affiliated with KanbanFlow. KanbanFlow is a trademark of its owner; this project only uses its public API.
Design principles
Transparent data, no hidden opinions. The server returns what the KanbanFlow API returns, with ids resolved to names. It never decides what a column, color or label means — every team uses KanbanFlow differently. The model infers it from each board (column names, the names/descriptions the team gave each color).
Honest about completeness. Every response carries a
metablock: filters applied, filters that matched nothing, boards that failed, columns that were only partially loaded (KanbanFlow pages big "done" columns) and how to load the rest.Any board, any team. Nothing is tied to a specific board: configure one token per board you want to use.
Read-only. No tool can modify a board. All tools are annotated
readOnlyHint, so hosts can run them without asking.
Related MCP server: KnBn MCP Server
Tools
Tool | What it returns |
| The configured boards: columns (in order), swimlanes, colors with the team's names/descriptions, members, and on which boards "me" was found. |
| The tasks of one person (default: "me") on every configured board, optionally only some boards or columns. Tasks come with board, column, swimlane, color, labels and people resolved to names, plus counts per board and column. |
| Tasks whose text contains a query, across boards and columns (name, description, labels, custom fields or subtasks). Each task says which fields matched. KanbanFlow has no search endpoint, so it filters what it loads and reports partially loaded columns. |
| One task in full — complete description, status, people, labels, color with the team's meaning, time tracking, subtasks and custom fields — plus its comments (author names and dates) to see mentions and discussion. |
| The most recent comments across the boards (newest first), with author, task and board resolved. Pass a person to get only the comments that mention them: KanbanFlow has no mention field, so it looks for the person's name inside the text. |
| The tracked time of a window, entry by entry: who tracked it, when it started and ended, how long it lasted and on which task. This is the only tool that breaks time down by day and by person; every other tool only knows the accumulated total of a task. |
A person can be given by email, full name, part of the name or user id. It is matched on each board separately; the response says how it matched (matchedBy), which boards the person is not on, and warns when a partial name matches several people.
See TOOLS.md for parameters and output format.
Configuration
Variable | Required | Description |
| Yes* | API tokens of your boards, comma separated. KanbanFlow creates one token per board: board menu → Settings → API & Webhooks. |
| Yes* | A single board token. Can be combined with |
| No | Who "me" is: your email (recommended — it is the same on every board), full name or user id. |
| No | API base URL (default |
* At least one token is required. If a token fails (revoked, wrong…), the other boards keep working and the response lists the failed one by its position — tokens are never shown.
Installation
Recommended: use npx with @latest and --prefer-online to request the latest published release whenever the MCP server starts, without manually reinstalling the package. This needs Node.js 24+ and registry access. Newly published releases can take a few minutes to become available.
Setup | How updates are picked up |
| Checks npm metadata when the server starts; restart the MCP connection/client after a release. |
Downloaded | Contains a bundled version; download and install the new |
Global | Uses the installed version; rerun |
No running server updates in place. Publishing a release does not restart clients, change their configuration or replace their installed copies. Use the npx setup below if you want new tools on the next server startup.
Claude Desktop extension (easy setup, manual updates)
Download
swimlane-mcp-….mcpbfrom the latest release.Double-click it and press Install.
Paste your KanbanFlow API token(s) and your KanbanFlow email in the form.
Claude Desktop runs it with its own Node.js, so nothing else has to be installed, and the token is stored encrypted by the operating system.
The extension declares macOS, Windows and Linux (including Ubuntu) compatibility starting with 0.0.3. On Linux, use a client that supports .mcpb and provides Node.js 24+, or install Node and use the npm/stdio setup below. This does not add Linux support to a client that lacks it.
📘 Step-by-step guide in Spanish, with troubleshooting: docs/instalar-en-claude-desktop.md.
Other clients (npx)
This is the recommended setup for picking up new releases on server startup, including in Claude Code. It needs Node.js 24 or newer on the PATH the client sees: GUI apps may not use your terminal's nvm version, so make 24+ the default (nvm alias default 24).
Claude Desktop can also run it this way instead of the extension, in claude_desktop_config.json:
{
"mcpServers": {
"swimlane": {
"command": "npx",
"args": [
"-y",
"--prefer-online",
"--@opositatest:registry=https://registry.npmjs.org",
"@opositatest/swimlane-mcp@latest"
],
"env": {
"KANBANFLOW_API_KEYS": "KEY,key",
"KANBANFLOW_USER": "email@email.com"
}
}
}
}Which version runs
Use @latest to request the latest published release. The package name on its own does not guarantee the latest version: npx can use a local project dependency or cached metadata instead.
Argument | What it requests |
| The release tagged |
| Exactly that release, for teams that want to freeze a tested version. |
| No explicit version; it may use a local dependency rather than the latest release. |
The recommended examples include --prefer-online to revalidate npm's cached metadata at startup. Restart the MCP server/client to pick up an update; a running server does not update itself. If npm is still processing a new release, wait a few minutes and restart again. An exact version intentionally opts out of tracking latest.
The examples explicitly select npmjs.org for the @opositatest scope. This prevents a project's .npmrc from redirecting this server to GitHub Packages or another registry, without changing how the project's own npm commands resolve its packages.
Claude Code
With Node.js 24+ installed, copy and paste this command and replace the placeholders with your own values: KEY,key are your board tokens (one per board, comma separated; use just one if you only need one board) and email@email.com is your KanbanFlow email.
claude mcp add swimlane --scope user \
-e KANBANFLOW_API_KEYS="KEY,key" \
-e KANBANFLOW_USER="email@email.com" \
-- npx -y --prefer-online \
--@opositatest:registry=https://registry.npmjs.org \
@opositatest/swimlane-mcp@latestKeep --scope user: this registers Swimlane once for your user, across all Claude Code projects, regardless of the directory where you run the command. Without this flag, Claude Code defaults to local scope, which only applies to the current project.
Claude Code scope | Where Swimlane is available |
| All projects for your user. Each person runs the installation command once with their own tokens. |
| Only the current project, in your private configuration. |
| Only the current project, through its |
MCP scope and npm installation are separate: npm install -g makes an executable available, but does not register it across Claude Code projects or enable updates.
Restart Claude Code, check the connection with /mcp, and ask: "What tasks do I have in KanbanFlow?"
Migrating an existing project-only installation
Existing installations are not migrated automatically by a release or a documentation update. Keep your tokens/email available before removing any entry:
Open the project where Swimlane was registered and check its entry/scope in
/mcp.If it is
local, runclaude mcp remove --scope local swimlanefrom that project. For aprojectentry, use--scope projectinstead. If replacing an existinguserentry, use--scope user.Run the recommended
claude mcp add swimlane --scope user …command above with your existing tokens/email. It usesnpx --prefer-online …@latest, so future releases are requested on server startup.Remove any obsolete project-local or differently named duplicates; an old entry can still connect you to an old server.
Restart Claude Code and check
/mcpin another project too.
If you edit the configuration instead, move the complete entry to user scope and preserve its env while replacing command/args with the recommended npx setup. Updating only a global npm package or changing only the launch command does not change the MCP scope.
Replace @latest with an exact version (for example @0.0.3) to freeze a release you have tested. To change that version later, edit the existing configuration or remove and re-add the server at the same scope.
Cursor / VS Code / OpenCode
Same command / args / env as above:
Cursor:
.cursor/mcp.json→mcpServersVS Code:
.vscode/mcp.json→servers(add"type": "stdio")OpenCode:
opencode.json→mcpwith"type": "local","command": ["npx", "-y", "--prefer-online", "--@opositatest:registry=https://registry.npmjs.org", "@opositatest/swimlane-mcp@latest"]andenvironment
Without npx (global installation, manual updates)
This setup does not check for updates when the server starts. Use npx above to follow new releases. Reinstalling globally also does not change an existing MCP entry to npx.
npm install -g --@opositatest:registry=https://registry.npmjs.org @opositatest/swimlane-mcp@latest
claude mcp add swimlane --scope user \
-e KANBANFLOW_API_KEYS="KEY,key" \
-e KANBANFLOW_USER="email@email.com" \
-- swimlane-mcpFor other clients, use "command": "swimlane-mcp" with no arguments; OpenCode uses "command": ["swimlane-mcp"]. The executable must be on the client's PATH. If it is not, use its absolute path.
Troubleshooting startup
E404from GitHub Packages /CONNECTION_CLOSED: a project's.npmrcmay redirect@opositatesttohttps://npm.pkg.github.com, but this package is published on npmjs.org. Use the examples above, including--@opositatest:registry=https://registry.npmjs.orgbefore the package name. A plain--registrydoes not override a scoped registry mapping. Do not change your KanbanFlow tokens or the project's.npmrc.It keeps running an old version: inspect the entry in
/mcp, including its scope and any duplicate old servers. Use the recommendednpx --prefer-online …@latestcommand and restart the MCP connection/client. A release can take a few minutes to propagate on npm. For a global installation, rerunnpm install -g …@latestbefore restarting; for a downloaded extension, install the new.mcpb. Restarting alone updates neither of those installed copies.Connection closed/ discovery hangs on version 0.0.1: MCP 2026 clients can open a subscription before listing tools, which blocked the old stdio bridge. Version 0.0.2+ bundles the fix for both npm and the Desktop extension. Upgrade the global install, or use@opositatest/swimlane-mcp@latestin the npx arguments, then restart the MCP/client. No token change is needed.swimlane-mcp: command not foundwhen using npx inside this repository: npm may resolve the same-named local project instead of the installed package. For development, runnpm run buildand configurenodewith the absolute path tobuild/main.js, or use the global executable. Simply running the add command elsewhere will not help if the client later starts npx inside this repository.Node/PATH: verify Node 24+ from the environment that launches the client. An absolute path to Node can avoid differences between GUI and terminal environments.
Already registered in Claude Code: update the existing entry, or remove it with
claude mcp remove swimlanebefore adding it again (use the same scope).
Development
npm install
npm run dev # builds the CLI, then opens MCP Inspector against build/main.js
npm run typecheck # tsc --noEmit
npm run lint:check # Biome (what CI runs)
npm test # vitest: tools against a fake multi-board API + end-to-end stdio test
npm run build # TypeScript modules + bundled, patched CLI → build/
npm run bundle:extension # → dist-extension/swimlane-mcp-<version>.mcpb (Claude Desktop extension)
npm run test:package # after build + bundle:extension: installed tarball and Desktop entry pointnpm run dev loads .env automatically (Node's --env-file-if-exists); copy .env.example to .env first. Use nvm use to pick the Node version in .node-version.
Architecture
src/main.ts— CLI entry (bin): validates the config and serves over stdio (serveMCPStdio)src/server.ts—createMCPServerwith the tools; also mountable over HTTP viaserver.fetchscripts/stdio-compat.mjs— guarded build-time fix for TanStack's streaming stdio bridge, shared by the npm CLI and Desktop bundles; see docs/stdio-compat.md. Do not runsrc/main.tsdirectly to test transport compatibility.src/config.ts— environment variables, validated with Zodsrc/services/kanbanflow-client.ts— KanbanFlow API for one token: auth, retries, pagination, readable errorssrc/services/boards.ts—BoardSet: one client per token, every board loaded in parallelsrc/services/board-context.ts— resolves ids to names and finds people; never assigns meaningsrc/tools/— one file per tool (toolDefinition().server())extension/— Claude Desktop extension:manifest.json(form fields, Spanish translation inmcpb-resources/) and icon;scripts/bundle-extension.mjsbundles the server into one file with esbuild and packs the.mcpbdocs/kanbanflow-api.md— our verified notes on how the KanbanFlow API behaves (pagination, events, rate limits)
Publishing (maintainers)
Releases are made from GitHub: Actions → Create Release → Run workflow, then choose patch, minor or major.
It runs release-it: bumps the version, runs lint and tests, builds the Claude Desktop extension, commits and tags vX.Y.Z, creates the GitHub Release with the .mcpb attached and publishes to npm with provenance.
Publishing uses trusted publishing (OIDC): npm authenticates the workflow through GitHub, so no npm token is stored in this repository. The trust relationship lives in npm (package → Settings → Trusted publishing), one connection per workflow file (release.yml and publish.yml), and only a maintainer with 2FA can create it. If a publish reports ENEEDAUTH, the Workflow filename of that connection does not match the file name exactly.
npm never overwrites a version, so both workflows refuse to run when package.json is already on the registry; the fix is always to release the next version from Create Release. A publish can also land in Staged Packages instead of going live: a maintainer approves it with 2FA in npm → Staged Packages. (Tokens that bypass 2FA already cannot publish directly, and from January 2027 they will not be able to publish at all.)
Publish to npm publishes an existing release again if that last step failed. CI (ci.yml) runs typecheck, lint, tests, build, a package-contents check, the extension build and installed-package protocol checks on Linux, Windows and macOS. security.yml runs npm audit and CodeQL every Monday.
Security
See SECURITY.md for how tokens and board data are handled and how to report a vulnerability.
License
Released under the MIT License.
Available Tools
6 toolsget_taskARead-onlyIdempotent
Returns one KanbanFlow task in full: complete description, board, column, swimlane and color (with the meaning the team gave them), labels, responsible user, collaborators, time tracking, subtasks, custom fields (the raw API object) and, by default, its comments with author names and dates (read the comment text to find mentions; comment text is returned as written, not interpreted). Give a task id from list_tasks. A task is on exactly one board, so board chooses where to look and, without it, every configured board is tried until the task is found; the response says which board had it.
Inputs: taskId (required), board, includeComments.
list_boardsARead-onlyIdempotent
Lists the KanbanFlow boards this server has access to (one per configured API token): columns in board order, swimlanes, colors with the names/descriptions the team gave them, and members. Shows on which boards the configured user ("me") was found. Use it to learn the boards and to find people by name.
Inputs: no named parameters.
list_commentsARead-onlyIdempotent
Searches the comments of every configured KanbanFlow board and returns the most recent ones, newest first, with author, board and task (name, column, url) resolved. Comments are found through the board activity log (taskCommentCreated), so only tasks commented inside the requested window are looked at. Pass person to find comments that mention someone: KanbanFlow keeps no structured mention field, so a mention is the person's full name (or first name) inside the comment text, matched as a whole word and case-insensitively (person.textSearched says which names were used); use text for a handle or exact phrase. The comment text is returned verbatim. meta reports the window (default: last 30 days), whether the activity log was read completely, how many tasks and API requests it took, and everything that was left out.
Inputs: to, from, text, limit, +3 more.
list_tasksARead-onlyIdempotent
Lists the tasks of one person across every configured KanbanFlow board (or the boards you choose), optionally only in some columns. By default the person is the configured user ("me"). Returns how the person was matched on each board, the tasks with board, column, swimlane, color, labels and people resolved to names, counts per board and column, and a meta block that reports boards where the person is not a member, filters that matched nothing and columns that were only partially loaded. The server does not rank or classify tasks.
Inputs: limit, boards, detail, person, +2 more.
list_time_entriesARead-onlyIdempotent
Returns the time entries of KanbanFlow boards: every tracked interval with who tracked it, when it started and ended, how long it lasted and on which task. This is the only tool that breaks time down by day and by person; timeSpentHours in the other tools is the accumulated total of a task. Entries are found through the board activity log (totalSecondsSpent changes) unless you pass taskIds, and then read task by task. Totals are sums of entry durations, reported per person/board and per UTC day; two people working on the same task at the same time add up twice, so they are not elapsed time. meta reports the window, whether the activity log was read completely, entries that fell outside the window or have no end, and every API request made. The server does not interpret the board.
Inputs: to, from, limit, boards, +3 more.
search_tasksARead-onlyIdempotent
Finds tasks whose text contains a query, across every configured KanbanFlow board and column (or the boards and columns you choose). The query is split into words and, by default, all of them must appear somewhere in the fields you pick (fields, default name and description; labels, custom field values and subtask names are available too). Each task says in matchedFields which fields contained part of the query. KanbanFlow has no search endpoint, so tasks are loaded and filtered here: the counts cover only what was loaded, and meta reports failed boards and columns that came partially loaded (typically "done") with how to load them completely. Read-only. To search comments or mentions, use list_comments instead.
Inputs: query (required), limit, boards, detail, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a clearly distinct selection criterion or return type: boards, person-based tasks, single task detail, comment search, time entries, and text-based task search. The descriptions explicitly distinguish list_tasks from search_tasks and list_comments, and get_task is the only id-based lookup. No two tools appear to do the same thing.
All tool names follow a consistent snake_case verb_noun pattern: list_*, get_*, and search_*. The conventions are predictable and readable throughout. There are no mixed styles or vague verbs.
Six tools is well within the ideal 3-15 range for this domain. Each tool covers a distinct retrieval or search need for KanbanFlow data. No tool feels redundant or unnecessary.
The read/query surface is thorough: boards, tasks, task details, comments, time entries, and search are all covered. However, there are no create, update, delete, comment-posting, or time-logging tools, which are notable missing lifecycle operations for a KanbanFlow integration. Agents would be unable to modify boards, tasks, or comments through this server.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
Remote MCP for Kanban AI boards—manage projects, tasks, and comments from AI tools.
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants like Claude to interact directly with Planka Kanban boards, allowing automated management of projects, tasks, and workflows through conversational interfaces.810 npm1MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides AI assistants with structured access to kanban board functionality for managing tasks, columns, labels, and sprints.15 npm2MIT
- AlicenseAqualityBmaintenanceA Model Context Protocol (MCP) server for accessing Productive.io API endpoints (projects, tasks, comments, todos), tailored for read-only operations, providing streamlined access to essential data while minimizing token consumption18MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that exposes Kanboard API functionality to Large Language Models (LLMs), enabling AI assistants to interact with Kanboard project management system.15 PyPI2MIT