Gantt chart SaaS with server-side critical path and dependency-aware shift-impact tools, plus CRUD.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a finish-to-start dependency between two tasks in the same project.
Task that can start after predecessor finishes
Task that must finish first
Optional lag in days after predecessor finishes
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Add a finish-to-start dependency between two tasks in the same project.
| Argument | Type | Description |
|---|---|---|
| lagDays | number | Optional lag in days after predecessor finishes |
| successorId* | string | Task that can start after predecessor finishes |
| predecessorId* | string | Task that must finish first |
{
"type": "object",
"required": [
"predecessorId",
"successorId"
],
"properties": {
"lagDays": {
"type": "number",
"description": "Optional lag in days after predecessor finishes"
},
"successorId": {
"type": "string",
"description": "Task that can start after predecessor finishes"
},
"predecessorId": {
"type": "string",
"description": "Task that must finish first"
}
},
"additionalProperties": false
}Add a milestone (key date) to a project.
| Argument | Type | Description |
|---|---|---|
| date* | string | YYYY-MM-DD |
| name* | string | |
| color | string | Hex color (defaults to #f59e0b) |
| projectId* | string |
{
"type": "object",
"required": [
"projectId",
"name",
"date"
],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "Hex color (defaults to #f59e0b)"
},
"projectId": {
"type": "string"
}
},
"additionalProperties": false
}Create a new project in a workspace. Returns the created project. Subject to plan-based project count limits.
| Argument | Type | Description |
|---|---|---|
| name* | string | Project name |
| color | string | Hex color (e.g. #3b82f6). Defaults to blue. |
| endDate | string | YYYY-MM-DD. Optional. |
| startDate | string | YYYY-MM-DD. Defaults to today. |
| description | string | |
| workspaceId* | string | Workspace ID (UUID) |
{
"type": "object",
"required": [
"workspaceId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Project name"
},
"color": {
"type": "string",
"description": "Hex color (e.g. #3b82f6). Defaults to blue."
},
"endDate": {
"type": "string",
"description": "YYYY-MM-DD. Optional."
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD. Defaults to today."
},
"description": {
"type": "string"
},
"workspaceId": {
"type": "string",
"description": "Workspace ID (UUID)"
}
},
"additionalProperties": false
}Create a new task in a project. Dates must be in YYYY-MM-DD format. End date is exclusive (a 1-day task has end = start + 1 day).
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| color | string | Hex color (e.g. #3b82f6) |
| status | string | |
| endDate* | string | YYYY-MM-DD (exclusive end) |
| parentId | string | Parent task ID for hierarchy |
| progress | number | |
| projectId* | string | |
| startDate* | string | YYYY-MM-DD |
| assigneeId | string | Profile ID of the assignee |
| description | string |
Permanently delete a project. All tasks, milestones, and dependencies inside the project are also removed. This cannot be undone.
| Argument | Type | Description |
|---|---|---|
| projectId* | string |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string"
}
},
"additionalProperties": false
}Delete a task. Child tasks and dependencies are removed as well.
| Argument | Type | Description |
|---|---|---|
| taskId* | string |
{
"type": "object",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string"
}
},
"additionalProperties": false
}Calculate the critical path of a project on the Ganty side and return it as data (don't ask the model to reason over raw task lists). Uses forward/backward CPM with progress-aware remaining duration. Returns critical_path tasks in order, per-task earliest/latest start/finish + slack, project_end_date, and total_duration_days. v1 limitations: Finish-to-Start dependencies only (Ganty has no other types), calendar days by default (business_days=true skips Sat/Sun but no holiday table), ignores multi-period segments, no resource calendars. Returns { error: 'cyclic_dependency', cycle } if a cycle is detected.
| Argument | Type | Description |
|---|---|---|
| as_of_date | string | YYYY-MM-DD. Start point for projecting remaining work. Defaults to today. |
| project_id* | string | Project ID (UUID) |
| business_days | boolean | If true, skip Saturday and Sunday in duration calculations. National holidays are still treated as working days (v1 has no holiday table). Defaults to false. |
{
"type": "object",
"required": [
"project_id"
],
"properties": {
"as_of_date": {
"type": "string",
"description": "YYYY-MM-DD. Start point for projecting remaining work. Defaults to today."
},
"project_id": {
"type": "string",
"description": "Project ID (UUID)"
},
"business_days": {
"type": "boolean",
"description": "If true, skip Saturday and Sunday in duration calculations. National holidays are still treated as working days (v1 has no holiday table). Defaults to false."
}
},
"additionalProperties": false
}Get detailed information about a single task, including assignees and dependencies.
| Argument | Type | Description |
|---|---|---|
| taskId* | string | Task ID (UUID) |
{
"type": "object",
"required": [
"taskId"
],
"properties": {
"taskId": {
"type": "string",
"description": "Task ID (UUID)"
}
},
"additionalProperties": false
}List milestones in a project (key dates such as launch or review gates).
| Argument | Type | Description |
|---|---|---|
| projectId* | string |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"projectId": {
"type": "string"
}
},
"additionalProperties": false
}List all projects in a workspace (excluding archived).
| Argument | Type | Description |
|---|---|---|
| workspaceId* | string | Workspace ID (UUID) |
{
"type": "object",
"required": [
"workspaceId"
],
"properties": {
"workspaceId": {
"type": "string",
"description": "Workspace ID (UUID)"
}
},
"additionalProperties": false
}List tasks in a project. Supports optional filtering by name (search), status, and assignee.
| Argument | Type | Description |
|---|---|---|
| search | string | Filter task name by case-insensitive substring |
| status | string | |
| projectId* | string | Project ID (UUID) |
| assigneeId | string | Filter by assignee profile ID |
{
"type": "object",
"required": [
"projectId"
],
"properties": {
"search": {
"type": "string",
"description": "Filter task name by case-insensitive substring"
},
"status": {
"enum": [
"not_started",
"in_progress",
"done",
"on_hold"
],
"type": "string"
},
"projectId": {
"type": "string",
"description": "Project ID (UUID)"
},
"assigneeId": {
"type": "string",
"description": "Filter by assignee profile ID"
}
},
"additionalProperties": false
}Get all workspaces the authenticated user is a member of.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Compute the downstream impact of shifting a single task. Default is dry_run (no DB writes); set mode='commit' to actually persist the changes. Cascades forward only (no pull): successors are pushed only if their predecessor's new end + lag would violate their current start. Tasks with progress=100 are treated as pinned; pass pinned_task_ids for additional pins. When a pin would be violated, the change is recorded in 'conflicts' and not propagated further. In mode='commit', if any conflicts exist nothing is written (all-or-nothing transaction). Same v1 limitations as get_critical_path: FS only, calendar days by default, no holiday table, ignores multi-period segments.
| Argument | Type | Description |
|---|---|---|
| mode | string | dry_run (default): compute and return; do not modify DB. commit: write to DB in a single transaction, but only if no conflicts. Audit logged on commit. |
| shift | string | Relative shift like '+3d' (push back) or '-2d' (pull earlier). Specify exactly one of shift or new_start_date. |
| task_id* | string | Task ID (UUID) to shift |
| business_days | boolean | If true, skip Sat/Sun in duration math. Defaults to false. |
| new_start_date | string | Absolute new start date as YYYY-MM-DD. Specify exactly one of shift or new_start_date. |
| pinned_task_ids | array | Additional task IDs to treat as pinned (in addition to progress=100 tasks). |
Update the progress percentage of a task (0-100). Status is auto-derived: 0=not_started, 1-99=in_progress, 100=done.
| Argument | Type | Description |
|---|---|---|
| taskId* | string | |
| progress* | number |
{
"type": "object",
"required": [
"taskId",
"progress"
],
"properties": {
"taskId": {
"type": "string"
},
"progress": {
"type": "number",
"maximum": 100,
"minimum": 0
}
},
"additionalProperties": false
}Update fields of an existing task. Only provided fields will be modified.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| color | string | |
| status | string | |
| taskId* | string | |
| endDate | string | YYYY-MM-DD |
| progress | number | |
| startDate | string | YYYY-MM-DD |
| assigneeId | string | null | null to unassign |
| description | string |
{
"type": "object",
"required": [
"taskId"
],
"properties": {
"name": {
"type": "string"
},
"color": {
"type": "string"
},
"status": {
"enum": [
"not_started",
"in_progress",
"done",
"on_hold"
],
"type": "string"
},
"taskId": {
"type": "string"
},
"endDate": {
"type": "string",
"description": "YYYY-MM-DD"
},
"progress": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD"
},
"assigneeId": {
"type": [
"string",
"null"
],
"description": "null to unassign"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"projectId",
"name",
"startDate",
"endDate"
],
"properties": {
"name": {
"type": "string"
},
"color": {
"type": "string",
"description": "Hex color (e.g. #3b82f6)"
},
"status": {
"enum": [
"not_started",
"in_progress",
"done",
"on_hold"
],
"type": "string"
},
"endDate": {
"type": "string",
"description": "YYYY-MM-DD (exclusive end)"
},
"parentId": {
"type": "string",
"description": "Parent task ID for hierarchy"
},
"progress": {
"type": "number",
"maximum": 100,
"minimum": 0
},
"projectId": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD"
},
"assigneeId": {
"type": "string",
"description": "Profile ID of the assignee"
},
"description": {
"type": "string"
}
},
"additionalProperties": false
}| respect_dependencies | boolean | If false, only the named task moves; successors are not cascaded. Default true. |
{
"type": "object",
"required": [
"task_id"
],
"properties": {
"mode": {
"enum": [
"dry_run",
"commit"
],
"type": "string",
"description": "dry_run (default): compute and return; do not modify DB. commit: write to DB in a single transaction, but only if no conflicts. Audit logged on commit."
},
"shift": {
"type": "string",
"description": "Relative shift like '+3d' (push back) or '-2d' (pull earlier). Specify exactly one of shift or new_start_date."
},
"task_id": {
"type": "string",
"description": "Task ID (UUID) to shift"
},
"business_days": {
"type": "boolean",
"description": "If true, skip Sat/Sun in duration math. Defaults to false."
},
"new_start_date": {
"type": "string",
"description": "Absolute new start date as YYYY-MM-DD. Specify exactly one of shift or new_start_date."
},
"pinned_task_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Additional task IDs to treat as pinned (in addition to progress=100 tasks)."
},
"respect_dependencies": {
"type": "boolean",
"description": "If false, only the named task moves; successors are not cascaded. Default true."
}
},
"additionalProperties": false
}