HacknPlan MCP Server
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., "@HacknPlan MCP Server create a new task for player movement system"
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.
HacknPlan MCP Server
A Model Context Protocol (MCP) server that provides a pure API wrapper for the HacknPlan project management API. Enables AI assistants like Claude to manage game development projects, sprints, tasks, and design documents.
✨ Key Features
🛡️ Deletion Recovery - 30-day recovery cache with crash resilience (v7.2.0)
⏱️ Automatic Time Tracking - Zero-effort time logging (v7.1.0+)
🚀 Context Optimization - 75-85% token reduction with slim mode + tool search
📦 Batch Operations - Update 1-100 items in a single call
🔍 Advanced Search - Multi-criteria filtering with name resolution
💾 Smart Caching - 80% fewer API calls with automatic 5-minute cache
Full feature list: Documentation →
Related MCP server: OpenProject MCP Server
🚀 Quick Start
1. Install
git clone https://github.com/yourusername/hacknplan-mcp.git
cd hacknplan-mcp
npm install
npm run build2. Configure
claude mcp add hacknplan -s user \
-e HACKNPLAN_API_KEY=your-api-key \
-- node /path/to/hacknplan-mcp/dist/index.js3. Use
// Create a task
await callTool('create_work_items', {
items: [{
title: 'Implement OAuth',
categoryId: 'programming', // Name resolution
importanceLevelId: 'high', // Name resolution
tagIds: ['backend', 'security'] // Auto-creates tags
}]
});
// Start working (automatic time tracking)
await callTool('start_task', { workItemId: 123 });
// Complete (auto-logs hours)
await callTool('complete_task', {
workItemId: 123,
comment: 'OAuth implementation complete'
});📚 Documentation
→ Complete Documentation Index
Essential Guides
Guide | Description |
Your first API calls (5 min) | |
Task management reference | |
Automatic time logging | |
Recovery system | |
Real-world recipes |
By Experience Level
Beginner: Installation → Configuration → Quick Start → Work Items
Intermediate: Time Tracking → Workflow Shortcuts → Batch Operations
Advanced: Slim Mode → Tool Search → Caching → Best Practices
🎯 Use Cases
Sprint Planning
// Create sprint
const sprint = await callTool('create_boards', {
boards: [{
name: 'Sprint 4: Authentication',
startDate: '2026-01-01T00:00:00Z',
endDate: '2026-01-14T23:59:59Z'
}]
});
// Get backlog and assign to sprint
const backlog = await callTool('get_backlog', {});
await callTool('update_work_items', {
items: backlog.items.slice(0, 10).map(item => ({
workItemId: item.workItemId,
boardId: sprint.items[0].boardId
}))
});Automatic Time Tracking
// Start task (begins tracking)
await callTool('start_task', { workItemId: 123 });
// ... work for 2.5 hours ...
// Complete (auto-logs 2.5h)
await callTool('complete_task', {
workItemId: 123,
comment: 'Feature complete, tests passing'
});
// ✅ Automatically logged 2.5 hoursBatch Operations
// Create multiple tasks at once
await callTool('create_work_items', {
items: [
{ title: 'Design API', categoryId: 'design', estimatedCost: 4 },
{ title: 'Implement endpoints', categoryId: 'programming', estimatedCost: 8 },
{ title: 'Write tests', categoryId: 'programming', estimatedCost: 6 }
]
});
// ✅ 3 tasks created in 1 API call🛡️ Safety Features
Deletion Recovery (v7.2.0)
All deletions automatically stored in recovery cache for 30 days:
// Delete with automatic recovery
await callTool('delete_work_items', { workItemIds: [123, 124, 125] });
// Later, recover if needed (up to 30 days)
await callTool('recover_deleted_items', { workItemIds: [123, 124, 125] });⚡ Performance
Context Optimization
Slim Mode (75% token reduction):
HACKNPLAN_SLIM_MODE=true
HACKNPLAN_OUTPUT_VERBOSITY=slimTool Search (85% reduction on tool loading):
Loads only 8 core tools initially
Discovers 88 additional tools on-demand
Smart Caching (80% fewer API calls):
Automatic 5-minute cache on all GET requests
📖 Complete Documentation
→ Documentation Index (docs/INDEX.md)
Core API
Projects - Project management
Boards & Sprints - Sprint planning
Work Items - Tasks, bugs, features
Comments - Markdown comments
Milestones - Major deliverables
Design Elements - Game design docs
Features
Deletion Safety - Recovery system
Automatic Time Tracking - Zero-effort logging
Slim Mode - Context optimization
Array-Based API - Batch operations
Tool Search - Dynamic tool discovery
Advanced
Workflow Shortcuts - Combined operations
Batch Operations - Search & analytics
Metadata & Config - Stages, tags, users
Caching - Performance optimization
Reference
Common Patterns - Real-world recipes
Error Handling - Error types & recovery
Best Practices - Optimization tips
🔧 Configuration
Environment Variables
HACKNPLAN_API_KEY=your-key # Required: API authentication
HACKNPLAN_DEFAULT_PROJECT=230954 # Optional: Default project ID
HACKNPLAN_SLIM_MODE=true # Optional: Enable 26-tool slim mode
HACKNPLAN_OUTPUT_VERBOSITY=slim # Optional: Minimal response fields
HACKNPLAN_DELETION_CACHE_SIZE=1000 # Optional: Recovery cache capacity→ Complete Configuration Guide
🤝 Contributing
Contributions welcome! Please see:
Issues: GitHub Issues
Pull Requests: Follow standard GitHub PR workflow
Documentation: Help improve docs/
📄 License
MIT License - See LICENSE for details
🔗 Links
Documentation: docs/INDEX.md
API Reference: API-REFERENCE.md (Complete technical reference)
Claude.ai Guide: CLAUDE.md (AI assistant integration)
HacknPlan API: Official Docs
GitHub: yourusername/hacknplan-mcp
🆘 Support
Need help?
Quick Start Guide - Get running in 5 minutes
Common Patterns - Real-world recipes
Error Handling - Troubleshooting guide
GitHub Issues - Report bugs or request features
Version: 7.2.0 | Last Updated: December 21, 2025
Available Tools
91 toolsadd_commentsA
Add one or more comments to work items (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: comments (required), projectId.
add_work_item_dependenciesA
Add one or more dependencies between work items (array-based). Each item creates a dependency where the successor depends on the predecessor.
Inputs: items (required), projectId.
assign_work_item_to_meB
Assign a work item to the current user
Inputs: workItemId (required), projectId.
batch_delete_work_itemsA
Stages work items for deletion and returns a confirmation request. No items are deleted until confirm_deletion is called with the confirmation token. Generates preview with warnings if deletion count exceeds cache capacity.
Inputs: workItemIds (required), projectId.
cancel_deletionA
Cancel a staged deletion and release items from the confirmation queue. The items will not be deleted and the confirmation token will be invalidated.
Inputs: confirmationToken (required).
clear_cacheB
Clear cached data (metadata, work items, etc.). Use pattern to clear specific cache entries.
Inputs: pattern.
clear_deletion_cacheA
Clear recovery cache entries. Requires acknowledged="CLEAR" for safety. Optionally filter by project. WARNING: This removes recovery capability for deleted items.
Inputs: acknowledged (required), projectId.
close_boardsA
Close one or more boards/sprints (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
close_milestonesA
Close one or more milestones (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
close_projectsA
Close one or more projects (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required).
complete_taskA
Complete a task in one call with optional time logging and comment. Atomically: marks task completed, optionally moves to completion stage, adds comment, and logs time. Supports name resolution for workItemId.
Inputs: workItemId (required), comment, projectId, hoursWorked, +1 more.
confirm_deletionA
Execute a staged deletion after user confirmation. Requires the confirmation token from batch_delete_work_items and acknowledged must be "DELETE" or "CONFIRM".
Inputs: acknowledged (required), confirmationToken (required), authCode.
create_boardsA
Create one or more boards/sprints (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: boards (required), projectId.
create_categoriesA
Create one or more work item categories (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
create_design_elementsA
Create one or more design elements (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
create_design_element_typesA
Create one or more design element types (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
create_from_templateB
Create work items from a template with variable substitution
Inputs: templateName (required), boardId, projectId, variables.
create_milestonesB
Create one or more milestones (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
create_projectsA
Create one or more projects (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required).
create_stagesA
Create one or more workflow stages (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
create_subtaskA
Create a subtask linked to a parent user story in a single call. Wraps create_work_item + set_work_item_parent. Inherits board from parent if not specified. Supports name resolution for category, importance, and tags.
Inputs: title (required), categoryId (required), parentWorkItemId (required), tagIds, +6 more.
create_tagsA
Create one or more project tags (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
create_work_item_atomicB
Create a work item atomically with all related operations in a single transaction. v4.5+ supports name resolution.
Inputs: title (required), categoryId (required), tagIds, boardId, +5 more.
create_work_itemsA
Create one or more work items (array-based). Supports name resolution for categoryId, importanceLevelId, and tagIds. Single-item and batch calls use the same interface. Returns unified response with items array, counts, per-item errors, and warnings.
Inputs: items (required), projectId.
delete_attachmentC
Delete a file attachment
Inputs: workItemId (required), attachmentId (required), projectId.
delete_boardsA
Delete one or more boards (array-based, DESTRUCTIVE). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
delete_commentsB
Delete one or more comments (array-based). Each item removes a comment from a work item.
Inputs: items (required), projectId.
delete_design_elementsB
Delete one or more design elements (array-based, DESTRUCTIVE). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
delete_milestonesA
Delete one or more milestones (array-based, DESTRUCTIVE). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
delete_projectsA
Delete one or more projects (array-based, DESTRUCTIVE). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required).
delete_stagesB
Delete one or more workflow stages (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
delete_work_itemsA
Delete one or more work items (array-based, requires confirmation). Stages items for deletion and returns a confirmation token. Call confirm_deletion with the token to execute the deletion. Items are stored in recovery cache before deletion for potential recovery.
Inputs: workItemIds (required), projectId.
download_attachmentB
Download a file attachment to local disk
Inputs: savePath (required), workItemId (required), attachmentId (required), overwrite, +1 more.
export_deletion_cacheB
Export recovery cache to JSON file. Supports project-specific export. Useful for backup or migration.
Inputs: filePath (required), projectId.
get_active_sprint_overviewA
Get overview of currently active (open) sprints with task counts. Returns { boards: [...], totalActiveSprints }.
Inputs: projectId.
get_attachmentA
Get attachment metadata and download URL
Inputs: workItemId (required), attachmentId (required), projectId.
get_backlogA
Get TRUE backlog items - work items with NO board/sprint assignment. Returns { items, total }. NOTE: Items in closed sprints are NOT backlog - they are archived work.
Inputs: projectId.
get_blockersA
Analyze dependency graphs to identify blocking work items. Supports premium API + free-tier fallback (parses description markers). Returns items that are blocked by incomplete dependencies, optionally including transitive blockers. Can calculate critical path for a specific work item.
Inputs: projectId, workItemId, includeIndirect, useFallbackParser.
get_blocking_itemsB
Get work items that are blocking this work item (predecessors that must complete first)
Inputs: workItemId (required), projectId.
get_boardB
Get details of a specific board
Inputs: boardId (required), projectId.
get_board_metricsC
Get board metrics (burndown data, etc.)
Inputs: boardId (required), projectId.
get_current_userA
Get the current authenticated user information
Inputs: no named parameters.
get_deletion_cache_statsA
View recovery cache statistics including capacity, entries by project/status, and age ranges. Useful for monitoring cache health.
Inputs: projectId.
get_dependency_treeB
Get full dependency tree for a work item (all predecessors and successors)
Inputs: workItemId (required), projectId.
get_design_elementB
Get details of a design element
Inputs: designElementId (required), projectId.
get_incomplete_tasksB
Get all incomplete work items for a project or board. Returns { items, total }.
Inputs: boardId, projectId.
get_milestoneC
Get details of a specific milestone
Inputs: milestoneId (required), projectId.
get_my_current_tasksA
Get current user's assigned tasks with aggregated statistics (by stage, by priority, total estimate). Returns slim work items for token efficiency. Supports both auto-fetch (all items) and manual pagination (offset/limit).
Inputs: limit, offset, boardId, projectId, +1 more.
get_my_tasksA
Get work items assigned to the current user. Returns { items, total }.
Inputs: boardId, projectId.
get_projectB
Get details of a specific project
Inputs: projectId.
get_project_metricsC
Get project metrics (completion stats, etc.)
Inputs: projectId.
get_sprint_progressB
Get comprehensive sprint progress metrics including burndown chart, dependency graph, and hour tracking. Provides rich data for sprint visualization and analysis.
Inputs: boardId (required), projectId.
get_sprint_summaryA
Get a compressed summary of current sprint status with task counts by stage (highly optimized for token usage)
Inputs: boardId (required), projectId.
get_work_itemC
Get detailed information about a specific work item
Inputs: workItemId (required), projectId.
get_work_item_childrenA
Get all child work items (subtasks) of a parent user story
Inputs: workItemId (required), projectId.
import_deletion_cacheA
Import recovery cache from JSON file. Supports merge (add to existing) or replace (clear then import) modes. Validates file format.
Inputs: mode (required), filePath (required).
list_attachmentsB
List file attachments for a work item with pagination
Inputs: workItemId (required), limit, offset, projectId.
list_boardsA
List all boards (sprints) for a project. Returns { items, total, offset, limit, hasMore, index? }. In slim mode, includes index array of [id, name] pairs for all boards (not just current page).
Inputs: limit, offset, projectId, verbosity.
list_categoriesA
List available work item categories (Task, Bug, Feature, etc.). Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_commentsA
List comments on a work item. Returns { items, total, offset, limit, hasMore }.
Inputs: workItemId (required), limit, offset, projectId.
list_design_elementsA
List design elements (game design documents). Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, typeId, projectId.
list_design_element_typesA
List design element types (e.g., Character, Item, Level). Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_importance_levelsA
List importance/priority levels for a project. Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_milestonesB
List milestones for a project. Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_projectsA
List all HacknPlan projects accessible with your API key. Returns { items, total, offset, limit, hasMore, index? }. In slim mode, includes index array of [id, name] pairs for all projects (not just current page).
Inputs: limit, offset, verbosity.
list_stagesA
List available stages (workflow states) for a project. Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_tagsB
List project tags. Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_templatesB
List available work item templates
Inputs: no named parameters.
list_usersA
List users in a project. Returns { items, total, offset, limit, hasMore }.
Inputs: limit, offset, projectId.
list_work_itemsB
List work items with optional filters and pagination. Returns { items, total, offset, limit, index? }. In slim mode, includes index array of [id, name] pairs for all work items (not just current page).
Inputs: limit, tagId, offset, boardId, +6 more.
log_work_sessionsA
Log work time for one or more work items (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, total hours, and per-item errors. Note: Does not include automatic time tracking - use log_work_session for that.
Inputs: sessions (required), projectId.
pause_taskA
Pause work on a task. Accumulates time from current session and allows working on other tasks without corrupting time tracking.
Inputs: workItemId (required), projectId.
recover_deleted_itemsA
Restore deleted work items from recovery cache. Creates new items (cannot restore original IDs). Handles double-recovery prevention, cross-project validation, and locked items.
Inputs: workItemIds (required), projectId.
remove_work_item_dependenciesB
Remove one or more dependencies between work items (array-based). Each item removes a dependency relationship.
Inputs: items (required), projectId.
reopen_boardsA
Reopen one or more closed boards (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
reopen_milestonesA
Reopen one or more closed milestones (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
reopen_projectsA
Reopen one or more closed projects (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required).
resume_taskA
Resume work on a paused task. Starts a new session without losing accumulated time from previous sessions.
Inputs: workItemId (required), projectId.
search_work_itemsA
Advanced search for work items with multiple filter criteria. Combines API filters with client-side filtering for comprehensive queries.
Inputs: tags, boardId, stageId, projectId, +11 more.
set_attachment_as_card_pictureC
Set an image attachment as the work item card thumbnail (requires image file)
Inputs: workItemId (required), attachmentId (required), projectId.
set_default_project_idA
Set the default project ID for this MCP server session. This overrides environment variables and .mcp.json config. Useful for switching between projects without restarting the server.
Inputs: projectId (required).
set_output_verbosityA
Set global output verbosity for all list operations. Controls whether list_projects, list_boards, and list_work_items return full or slim output by default.
Inputs: verbosity (required).
start_taskA
Move a task to "In Progress" stage with optional comment. Supports name resolution for workItemId (e.g., "Implement shader" or 123). Auto-detects "In Progress" stage or uses stageId override.
Inputs: workItemId (required), comment, stageId, projectId.
update_boardsA
Update one or more boards (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
update_commentsB
Update one or more comments (array-based). Each item updates a comment with new text.
Inputs: items (required), projectId.
update_design_elementsA
Update one or more design elements (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
update_milestonesA
Update one or more milestones (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
update_projectsA
Update one or more projects (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required).
update_stagesA
Update one or more workflow stages (array-based). Single-item and batch calls use the same interface. Returns unified response with items array, counts, and per-item errors.
Inputs: items (required), projectId.
update_work_itemsA
Update one or more work items (array-based). Supports auto-create for tags: when string names are provided and the tag does not exist, it will be created automatically. Consolidates all setter operations (assignedUserIds, tagIds, parentStoryId, designElementId) into a single call. Returns unified response with items array, counts, per-item errors, and warnings for auto-created tags.
Inputs: items (required), projectId.
upload_attachmentB
Upload a file attachment to a work item
Inputs: filePath (required), workItemId (required), projectId, description.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 91 tools
Many tools have clearly distinct purposes, but there are overlapping pairs like get_my_current_tasks vs get_my_tasks, and multiple create work item tools (create_work_items, create_work_item_atomic, create_subtask, create_from_template) which may confuse an agent. The deletion workflow also has several steps (batch_delete_work_items, confirm_deletion, cancel_deletion) that could be grouped.
Naming largely follows a verb_noun pattern with underscores (e.g., create_work_items, list_projects). Minor inconsistencies include mixed verb prefixes (add_comments vs create_comments) and compound names like get_active_sprint_overview, but overall the pattern is predictable.
With 91 tools, the server is extremely heavy. Typical MCP servers have 3-15 tools; this is far beyond and likely to overwhelm agents. Many tools could be consolidated (e.g., batch operations combined with single-item calls).
The tool set covers nearly every aspect of the domain: full CRUD for work items, boards, milestones, projects, design elements, comments, attachments, dependencies, time tracking, user info, cache management, and even administrative controls like setting default project. No obvious gaps are apparent.
Maintenance
Related MCP Connectors
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Manage Orangescrum projects, tasks, users, sprints, test cases, releases, and risks from AI tools.
Tasks, sprints, releases and docs for engineering teams with AI coding agents.
Manage Loom projects, tasks, bugs, defects, clients and phases from AI assistants
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with OpenProject's API v3 for comprehensive project management operations including work packages, projects, time tracking, users, and all other OpenProject features through natural language.4MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to manage OpenProject work packages, projects, and time tracking. It provides comprehensive tools for creating, updating, and querying tasks and project metadata through the OpenProject API.1159 npm1MIT
- AlicenseBqualityCmaintenanceEnables Claude to interact with HacknPlan project management via the MCP protocol. Provides tools for managing projects, work items, boards, milestones, time logs, design models, and cross-project portfolio views.7510 npmMIT
- FlicenseCqualityDmaintenanceEnables Claude to manage game development projects on HacknPlan, including tasks, boards, milestones, and GDD documents through natural language.1003-