A side-by-side look at the Kanboard MCP and Megaplan MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Kanboard MCP for workplace & productivity work as a local process; choose Megaplan MCP for workplace & productivity as a local process. You can also run both side by side in one mcpServers block.
KANBOARD_URL, KANBOARD_USERNAME, KANBOARD_API_TOKEN.add_project_user, attach_file_to_task, close_task.MEGAPLAN_DOMAIN, MEGAPLAN_TOKEN, MEGAPLAN_LOGIN, MEGAPLAN_PASSWORD, PORT.get_tasks, get_task, create_task.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Workplace & Productivity | Workplace & Productivity |
| Quality signal | 61/100 · Good | 59/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | API key required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | KANBOARD_URLKANBOARD_USERNAMEKANBOARD_API_TOKEN | MEGAPLAN_DOMAINMEGAPLAN_TOKENMEGAPLAN_LOGINMEGAPLAN_PASSWORDPORT |
| Verified owner | Community listing | Community listing |
| GitHub stars | 9 | 2 |
| Directory activity | 4 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 39 | 18 |
| Full listing | View Kanboard MCP | View Megaplan MCP |
add_project_userAdd a user to a Kanboard project with the given role. Role defaults to 'project-member' if not specified. Use list_project_users to find user ids and list_projects to find project ids; to unlink a member use remove_project_user. Returns { user_id, project_id, role } on success.attach_file_to_taskUpload a file to a Kanboard task as an attachment. Provide either file_path (local file) or content_base64 (inline base64 content) — not both. project_id is resolved automatically from the task (no need to provide it). Maximum file size: 5 MB (5,242,880 bytes) — larger files return VALIDATION_ERROR before any HTTP request is made. Returns { file_id } on success.close_taskClose (archive) an active Kanboard task. The task is set inactive and leaves the active board but is preserved — this is NOT a delete. Reversible: restore it with reopen_task. To permanently remove a task instead, use delete_task. Returns { ok: true, task_id } on success.create_columnAdd a column to a Kanboard project board. Project resolved from explicit project_id/project_identifier or .kanboard.yaml. To reorder it use move_column, to rename or change its WIP limit use update_column, to remove it use delete_column. Returns { column_id } on success.create_commentCreate a comment on a Kanboard task. The comment author is automatically set to the authenticated user (via getMe() cache); do NOT pass user_id — it is injected server-side. To edit a comment's body use update_comment; to remove one use delete_comment. Returns { comment_id } on success.create_projectCreate a new Kanboard project. Requires a name (1–255 chars). Optionally provide a description, short identifier, owner user id, start_date / end_date (ISO 8601 string or epoch seconds), and email. After creating, adjust the board with create_column / create_swimlane, add members with add_project_user, and edit attributes with update_project. Returns { project_id } on success.create_subtaskCreate a subtask under an existing Kanboard task. Status: 0 = todo (default), 1 = in progress, 2 = done. To list a task's subtasks use list_subtasks; to edit one use update_subtask. Returns { subtask_id, task_id } on success.create_swimlaneAdd a swimlane to a Kanboard project. Project resolved from explicit project_id/project_identifier or .kanboard.yaml. To reorder it use move_swimlane, to rename it use update_swimlane, to remove it use delete_swimlane. Returns { swimlane_id } on success.create_taskCreate a new task in a Kanboard project. Project is resolved from explicit project_id or project_identifier, or from .kanboard.yaml. Optional fields (column_id, owner_id, category_id, swimlane_id) fall back to .kanboard.yaml defaults when not provided. To create many tasks at once use create_tasks_batch; to move the task afterward use move_task_position. Returns { task_id, project_id } on success.create_tasks_batchBulk-create tasks in a Kanboard project using a single JSON-RPC batch request. Accepts 1–100 tasks per call. Non-atomic: partial failure is possible — check failed[] for per-task errors. Optional fields (column_id, owner_id, category_id, swimlane_id) fall back to .kanboard.yaml defaults when not provided. Returns { created: [...], failed: [...] } — never throws on partial failure.delete_columnPermanently delete a Kanboard column from a project board. DESTRUCTIVE and irreversible — requires explicit `confirm: true`. To rename a column or change its WIP limit use update_column; to reorder it use move_column. Returns { ok: true, column_id } on success.delete_commentPermanently delete a Kanboard comment. DESTRUCTIVE and irreversible — requires explicit `confirm: true`. To edit a comment's text instead of deleting it use update_comment. Returns { ok: true, comment_id } on success.get_tasksList tasks from Megaplan, filtered by status code(s), responsible user, and free-text search.get_taskGet a single Megaplan task by ID with full details.create_taskCreate a task in Megaplan with name, description, responsible user, and deadline.update_taskUpdate an existing Megaplan task (name, description, responsible, deadline, status).get_dealsList deals from Megaplan, filtered by status code(s), responsible user, and free-text search.get_dealGet a single Megaplan deal by ID with full details.create_dealCreate a deal in Megaplan. Requires a program (pipeline) ID — discover it via get_deal_programs.update_dealUpdate an existing Megaplan deal (name, responsible, amount, description, status).get_projectsList projects from Megaplan, filtered by status code(s) and free-text search.get_projectGet a single Megaplan project by ID with full details.get_employeesList employees from Megaplan with free-text search and department filter.get_deal_programsList deal programs (pipelines). Use this to find the program_id required by create_deal.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"ernestocorona-kanboard-mcp": {
"command": "npx",
"args": [
"-y",
"@ernestocorona/kanboard-mcp"
],
"env": {
"KANBOARD_URL": "YOUR_KANBOARD_URL_HERE",
"KANBOARD_USERNAME": "YOUR_KANBOARD_USERNAME_HERE",
"KANBOARD_API_TOKEN": "YOUR_KANBOARD_API_TOKEN_HERE"
}
}
}
}
{
"mcpServers": {
"megaplan-mcp": {
"command": "npx",
"args": [
"-y",
"@theyahia/megaplan-mcp"
],
"env": {
"MEGAPLAN_DOMAIN": "YOUR_MEGAPLAN_DOMAIN_HERE",
"MEGAPLAN_TOKEN": "YOUR_MEGAPLAN_TOKEN_HERE",
"MEGAPLAN_LOGIN": "YOUR_MEGAPLAN_LOGIN_HERE",
"MEGAPLAN_PASSWORD": "YOUR_MEGAPLAN_PASSWORD_HERE",
"PORT": "YOUR_PORT_HERE"
}
}
}
}