mcp-server
Create scheduled Gantt charts with critical path from a plain-language plan — no account or key.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"@loopgantt/mcp-server"
]
}
}
}Runnable packages
1.4.0stdioRemote endpoints
https://loopgantt.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟡create_gantt(name, description, startDate, deadline, workDays, ...)
Create a Gantt chart from a task list — no account or API key needed. YOU author the plan: list the tasks in execution order with realistic working-day durations and dependencies (0-based positions of earlier tasks; use { task, type, lag } for start-to-start/finish-to-finish links or lag). Milestones have duration 0. Only add a dependency where a task truly needs another one finished - independent tasks should run in PARALLEL (share a predecessor, or take no dependencies at all and start at the project start). Group tasks into top-level phases for a structured plan/WBS: the phase task gets isPhase: true, its tasks get parent = the position of the phase. LoopGantt schedules it with its critical-path engine and returns a picture of the chart, the dates, the critical path and a link where the user can view, export (PNG/PDF) and save the chart. Always show the user the link. Tasks with a due date take deadline: YYYY-MM-DD (a marker - the reply reports the fit). Use create_gantt when the user wants a chart to open, export or save; use schedule_project instead for what-if date math where nothing should be stored.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Project name"
},
"description": {
"type": "string",
"description": "Optional one-line description"
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD (defaults to today)"
},
"deadline": {
"type": "string",
"description": "Optional deadline YYYY-MM-DD - drawn on the chart; compare with the returned projectEndDate and warn the user if the plan overshoots"
},
"workDays": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 7
},
"description": "Working weekdays as ISO numbers 1 (Mon) … 7 (Sun). Default Mon–Fri."
},
"holidays": {
"type": "array",
"items": {
"type": "string"
},
"description": "Non-working dates, YYYY-MM-DD"
},
"tasks": {
"type": "array",
"minItems": 1,
"maxItems": 300,
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Task name"
},
"duration": {
"type": "integer",
"minimum": 0,
"description": "Working days (default 1). 0 makes the task a milestone."
},
"isMilestone": {
"type": "boolean",
"description": "Milestone (zero duration, drawn as a diamond)"
},
"isPhase": {
"type": "boolean",
"description": "Top-level phase (a group). Tasks join it with parent = this position. Phases take no dependencies and no parent; their dates become the envelope of their tasks."
},
"parent": {
"type": "integer",
"minimum": 0,
"description": "Position (0-based) of an EARLIER task with isPhase=true that this task belongs to"
},
"description": {
"type": "string"
},
"deadline": {
"type": "string",
"description": "Finish-by date YYYY-MM-DD for a task with a due date (essay due, exam day, launch). A MARKER: the task is still scheduled normally and the reply reports its fit - buffer or days late."
},
"dependencies": {
"type": "array",
"description": "Predecessors: positions (0-based) of EARLIER tasks in this list, or objects { task, type: FS|SS|FF|SF, lag } for typed links / lag in days",
"items": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "object",
"required": [
"task"
],
"properties": {
"task": {
"type": "integer",
"minimum": 0
},
"type": {
"type": "string",
"enum": [
"FS",
"SS",
"FF",
"SF"
]
},
"lag": {
"type": "integer"
}
}
}
]
}
}
}
}
}
},
"required": [
"name",
"tasks"
]
}🟡schedule_project(name, description, startDate, deadline, workDays, ...)
Compute a schedule without storing anything: dates, critical path, float and project end for a task list (same input shape as create_gantt; name optional). Use it to answer "what is the critical path?", "when would this finish?", "how much slack does X have?". Use create_gantt when the user wants a chart they can open.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Project name"
},
"description": {
"type": "string",
"description": "Optional one-line description"
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD (defaults to today)"
},
"deadline": {
"type": "string",
"description": "Optional deadline YYYY-MM-DD - drawn on the chart; compare with the returned projectEndDate and warn the user if the plan overshoots"
},
"workDays": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 7
},
"description": "Working weekdays as ISO numbers 1 (Mon) … 7 (Sun). Default Mon–Fri."
},
"holidays": {
"type": "array",
"items": {
"type": "string"
},
"description": "Non-working dates, YYYY-MM-DD"
},
"tasks": {
"type": "array",
"minItems": 1,
"maxItems": 300,
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Task name"
},
"duration": {
"type": "integer",
"minimum": 0,
"description": "Working days (default 1). 0 makes the task a milestone."
},
"isMilestone": {
"type": "boolean",
"description": "Milestone (zero duration, drawn as a diamond)"
},
"isPhase": {
"type": "boolean",
"description": "Top-level phase (a group). Tasks join it with parent = this position. Phases take no dependencies and no parent; their dates become the envelope of their tasks."
},
"parent": {
"type": "integer",
"minimum": 0,
"description": "Position (0-based) of an EARLIER task with isPhase=true that this task belongs to"
},
"description": {
"type": "string"
},
"deadline": {
"type": "string",
"description": "Finish-by date YYYY-MM-DD for a task with a due date (essay due, exam day, launch). A MARKER: the task is still scheduled normally and the reply reports its fit - buffer or days late."
},
"dependencies": {
"type": "array",
"description": "Predecessors: positions (0-based) of EARLIER tasks in this list, or objects { task, type: FS|SS|FF|SF, lag } for typed links / lag in days",
"items": {
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "object",
"required": [
"task"
],
"properties": {
"task": {
"type": "integer",
"minimum": 0
},
"type": {
"type": "string",
"enum": [
"FS",
"SS",
"FF",
"SF"
]
},
"lag": {
"type": "integer"
}
}
}
]
}
}
}
}
}
},
"required": [
"tasks"
]
}🟡list_templates
List LoopGantt's industry project templates with task counts and typical durations. Pick one, fetch it with get_template, adapt it, then create_gantt.
Input Schema
{
"type": "object",
"properties": {}
}🟡get_template(slug)
Get one industry template by slug: its task list with durations, ready to adapt and pass to create_gantt.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Template slug from list_templates"
}
},
"required": [
"slug"
]
}Community
Evidence