TaskHub MCP Server
TaskHub MCP Server lets an MCP host manage TaskHub work items using project-bound credentials and a linked working-directory context.
Auth/context: check current user and scopes, show linked project, connect by project UUID/slug/systemCode.
Search: find entities by systemCode.
Organizations: list/create organizations, view members, invite users.
Projects: list projects, get project details, create projects, invite/list members, add/remove subproject directory mappings.
Tasks: list/filter tasks, view assigned/created tasks and daily tasks, get/create/update/complete/delete tasks, create subtasks, record AI usage.
Statuses: list valid task statuses before creating or updating tasks.
Collaboration: list/add task comments, list/read notifications.
Activity: get a daily summary of tasks, comments, and activity.
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., "@TaskHub MCP Server list my open tasks"
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.
TaskHub MCP Server
MCP (Model Context Protocol) server for TaskHub — manage tasks, projects, organizations, comments, notifications, and activity from an MCP host.
Quick start
1. Install the package
Use a published package or a local checkout. The server command can be invoked
as taskhub-mcp after installation, or as node /absolute/path/to/dist/index.js.
2. Configure the MCP host
The preferred setup keeps credentials out of host configuration. The API URL is optional for local development and should be HTTPS for remote servers.
Claude Code
For a project-scoped server, add this to the project's .mcp.json. For a
user/global Claude Code registration, put the same mcpServers entry in
~/.claude.json instead:
{
"mcpServers": {
"taskhub": {
"command": "taskhub-mcp",
"env": {
"TASKHUB_API_URL": "https://api.taskhub.example/api"
}
}
}
}For a local checkout, replace the command with node and use
["/absolute/path/to/taskhub-mcp/dist/index.js"] as args.
OpenCode
Use OpenCode's local MCP environment field; do not put project keys in the
configuration:
{
"mcp": {
"taskhub": {
"type": "local",
"command": ["taskhub-mcp"],
"environment": {
"TASKHUB_API_URL": "https://api.taskhub.example/api"
},
"enabled": true
}
}
}If the executable is not on PATH, use a portable launcher script that only selects the executable and forwards arguments:
#!/bin/sh
exec /usr/bin/node /absolute/path/to/taskhub-mcp/dist/index.js "$@"Point the host's local MCP command at that launcher. This repository does not modify Claude Code, OpenCode, or any global host configuration automatically.
3. Register project-bound credentials
The non-MCP credential CLI reads the key from hidden stdin; never pass a key as a model/tool argument, command-line argument, or configuration value:
taskhub-mcp credentials add --project-id <project-uuid> --label Work
taskhub-mcp credentials list
taskhub-mcp credentials update --project-id <project-uuid>
taskhub-mcp credentials remove --project-id <project-uuid>The list command shows only project UUIDs, optional labels, and update times.
--token is rejected. CLI output is separate from MCP stdio; when the server
is running, stdout remains reserved for MCP protocol frames.
The default store is outside repositories:
Linux:
$XDG_CONFIG_HOME/taskhub/credentials.json, or~/.config/taskhub/credentials.jsonmacOS:
~/Library/Application Support/TaskHub/credentials.jsonWindows:
%APPDATA%/TaskHub/credentials.json
TASKHUB_CONFIG_DIR or TASKHUB_CREDENTIALS_FILE may select an absolute
portable location. On POSIX, the store is written as 0600 and its directory
as 0700 where supported.
4. Link the working directory
With a known UUID, use the profile directly and avoid discovery ambiguity:
Use taskhub_connect with projectId "<project-uuid>"If no context exists and the UUID is not known, temporarily configure the
backward-compatible TASKHUB_API_TOKEN, then call taskhub_context or
taskhub_projects_list. They can list the projects visible to that key. Connect
by systemCode or slug, or register the UUID profile and connect by
projectId.
The server writes only project metadata to .taskhub.json:
{
"projectId": "project-uuid",
"projectName": "My Project",
"projectSlug": "my-project",
"systemCode": "PRJ-260219-A3K7",
"organizationId": null,
"organizationName": null
}It never writes a token to that file.
Related MCP server: backlog
Multi-project behavior
TaskHub still authorizes each API key for one backend project. This feature does not weaken that binding or create a multi-project server key. It adds a local mapping from stable project UUID to project-bound key.
For every request, the MCP server re-reads the effective project from
.taskhub.json (including an active sub-project) and selects only that UUID's
profile. A profile takes precedence over TASKHUB_API_TOKEN; when no profile
exists, the environment variable remains the compatibility fallback. The
server never tries every profile against an endpoint.
projectId-first connection can select a profile before a context exists.
Slug/systemCode discovery cannot identify a profile until the UUID is known, so
it uses the current context profile or TASKHUB_API_TOKEN. If neither is
available, the error explains the safe next step without exposing a key.
taskhub_whoami, project operations, and advisory scope checks use the same
effective profile. Scope caches are separated by credential context, so
switching projects cannot reuse another project's cached scopes.
Backward compatibility and restart semantics
Existing installations may continue using:
TASKHUB_API_TOKEN=<project-bound-api-key>To migrate, register a profile for the linked project's UUID, validate with
taskhub_whoami, then remove the environment key only after the profile works.
The old variable remains a fallback for contexts without a registered profile.
Changing .taskhub.json or adding/updating/removing a credential profile does
not require an MCP restart: selection occurs on each request. Changing the MCP
command, TASKHUB_API_URL, host environment, or installed package does require
the MCP host to restart its process. Restart after the initial host setup so it
loads the new registration.
Security contract
Credentials are opaque project-bound API keys; there is no password, JWT, or refresh-token migration.
Tokens are not rendered by tools, diagnostics, metadata listing, errors, README files, tests, or
.taskhub.json.The CLI is explicit and non-MCP; it accepts secrets only through hidden stdin.
Remote API URLs must use HTTPS. HTTP is reserved for localhost development.
The backend remains authoritative for key validity, scopes, revocation, and project access.
No normal MCP tool mutates Claude Code, OpenCode, host configuration, or credential files.
Tools
Auth and context
Tool | Description |
| Current user, server scopes, and linked/effective context |
| Show the linked project or safe discovery guidance |
| Link by project UUID, slug, or system code; never accepts a token |
The remaining tools manage organizations, projects, tasks, comments,
notifications, statuses, and activity. See GUIA.md for extension and request
lifecycle details.
Development and verification
pnpm install
pnpm test
pnpm run test:package
pnpm run buildLive tests are opt-in and require explicitly authorized test credentials:
pnpm run test:live.
License
MIT
Available Tools
31 toolstaskhub_comment_addA
Add a comment to a task.
Inputs: taskId (required), content (required).
taskhub_commentsB
List comments on a task.
Inputs: taskId (required).
taskhub_connectA
Link the current directory to a TaskHub project. Subsequent task operations will default to this project. Use project ID, slug, or systemCode to identify the project.
Inputs: slug, projectId, systemCode.
taskhub_contextA
Show the project linked to the current working directory. If no project is linked, automatically lists available projects so the user can choose one to connect.
Inputs: no named parameters.
taskhub_daily_summaryB
Get a summary of your activity for a specific day (defaults to today). Shows tasks created, completed, comments added, and activity log.
Inputs: date.
taskhub_notification_readA
Mark a notification as read, or mark all notifications as read.
Inputs: notificationId.
taskhub_notificationsB
List your notifications with unread count.
Inputs: page, limit.
taskhub_org_createB
Create a new organization.
Inputs: name (required), description.
taskhub_org_inviteC
Invite a user to an organization by email.
Inputs: email (required), organizationId (required), role.
taskhub_org_membersB
List members of an organization.
Inputs: organizationId (required).
taskhub_orgs_listA
List your organizations.
Inputs: no named parameters.
taskhub_project_createA
Create a new project. Specify organizationId for org project, or omit for personal project.
Inputs: name (required), parentId, description, organizationId.
taskhub_project_infoC
Get detailed information about a project, including members, statuses, and modules.
Inputs: slug, projectId.
taskhub_project_inviteA
Invite a user to a project by email.
Inputs: email (required), projectId (required), role.
taskhub_project_membersA
List members of a project with their roles and user IDs. Useful for finding user IDs when assigning tasks. Auto-detects project from .taskhub.json if not specified.
Inputs: projectId.
taskhub_projects_listA
List projects. Optionally filter by organization or personal projects.
Inputs: personal, organizationId.
taskhub_searchB
Search any entity by its systemCode (e.g. TSK-260218-A3K7, ORG-260218-B2C3, PRJ-260218-D4F1). Returns the entity type and details.
Inputs: code (required).
taskhub_statusesA
List available task statuses for a project or global statuses for daily tasks. IMPORTANT: Call this tool BEFORE creating or updating tasks so you know valid statusId values. Returns each status with its id, name, and flags (DEFAULT = auto-assigned to new tasks, COMPLETED = marks task as done).
Inputs: projectId, contextDir.
taskhub_subproject_addA
Map a subdirectory to an existing TaskHub project (sub-project). Adds the mapping to .taskhub.json. If the project does not exist, creates it as a child of the root project.
Inputs: path (required), projectId, projectName.
taskhub_subproject_removeA
Remove a subdirectory mapping from .taskhub.json. Does NOT delete the project from TaskHub.
Inputs: path (required).
taskhub_subtask_createA
Create a subtask under an existing task.
Inputs: title (required), parentTaskId (required), priority, description, +1 more.
taskhub_task_ai_usage_recordA
Record one provider-agnostic AI usage execution for a task. Usage must come from the reporting client; this tool never estimates tokens from task content.
Inputs: status (required), taskId (required), model, reason, +7 more.
taskhub_task_completeB
Mark a task as completed. Automatically finds the "completed" status for the task's project (using the isCompleted flag) and applies it.
Inputs: taskId (required).
taskhub_task_createA
Create a new task. IMPORTANT: Before calling this tool, ALWAYS ask the user to confirm: (1) whether this is a "project" task or a "daily" routine task, and (2) confirm the linked project context. When a project is linked via .taskhub.json, ALL tasks (project and daily) are associated to it by default. Only omit projectId if the user explicitly says the task is not related to any project. If projectId differs from the linked project, a warning is shown.
Inputs: title (required), type, dueDate, priority, +5 more.
taskhub_task_deleteA
Delete a task. IMPORTANT: Always confirm with the user before calling this tool. Set confirm=true to execute the deletion. Without confirm=true, it only shows what WOULD be deleted.
Inputs: taskId (required), confirm.
taskhub_task_getA
Get full details of a single task. Accepts UUID, systemCode (TSK-XXXXXX-XXXX), or a search term to find by title. Examples: taskhub_task_get({identifier: "TSK-260218-B0F3"}) or taskhub_task_get({identifier: "login"}).
Inputs: identifier (required).
taskhub_tasks_dailyA
Get daily tasks for a specific date (defaults to today).
Inputs: date.
taskhub_tasks_listA
List tasks with filters. Without explicit projectId, uses the project linked to the current directory. Supports filtering by status, type, assignee, and pagination.
Inputs: page, type, limit, statusId, +3 more.
taskhub_tasks_myB
Get tasks assigned to or created by me.
Inputs: type.
taskhub_task_updateA
Update a task. Specify the task ID and any fields to change. TIP: To change status, first call taskhub_statuses to get valid statusId values for the project.
Inputs: taskId (required), title, dueDate, priority, +4 more.
taskhub_whoamiA
Show current user info, available scopes, and linked project context.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 31 tools
Most tools map clearly to a distinct entity+action, but there are a few close boundaries: search vs. task_get both resolve by systemCode, whoami vs. context both expose linked project context, and task_complete is a specialized task_update. Detailed descriptions mitigate most confusion.
A general noun_verb pattern is visible (task_create, project_invite), but list endpoints are inconsistent: some use _list (orgs_list, tasks_list) while others use bare plurals (comments, notifications, statuses). Irregular names like whoami, connect, tasks_my, and daily_summary break the pattern further, though the naming remains readable.
With 31 tools, the server exceeds the 25-tool threshold for 'too many' in the calibration. The broad domain justifies some surface area, but utilities like whoami, search, and daily_summary could be consolidated with existing list/context tools to reduce redundancy.
Core task operations are well covered: list, get, create, update, complete, delete, and subtasks. However, org and project management lack update/delete operations, comments only support list/add with no edit/delete, and there is no member removal—leaving notable gaps for project administration workflows.
Related MCP Connectors
Manage Redbooth tasks, task lists, comments, tags and files from Claude and other AI assistants.
ADHD-friendly tasks, notes & projects for LucidNest - 18 tools, scoped tokens, Streamable HTTP.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables AI assistants to interact with ProjectHub for comprehensive project management through natural language. It provides 25 tools to manage tasks, workspaces, time tracking, notes, and discussions via the ProjectHub API.4713 npmMIT
- AlicenseAqualityDmaintenancePersistent, cross-session task management for Claude Code. 24 MCP tools for tasks, projects, dependencies, and docs. 7 skills for planning, standups, and handoffs. Event-sourced storage with per-project isolation.5MIT
- AlicenseNot gradedqualityDmaintenanceConnects Claude to your TickTick account with 28 tools for full CRUD task management, smart queries, batch operations, and GTD support, letting you manage tasks through natural conversation.1MIT
- AlicenseAqualityDmaintenanceEnables Claude to interact with System Task projects, teams, and tasks, providing daily briefs, project reports, team load, and risk identification, as well as creating and updating tasks and demands.15MIT