Ganty MCP
Gantt chart SaaS with server-side critical path and dependency-aware shift-impact tools, plus CRUD.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp-server": {
"url": "https://ganty.app/api/mcp"
}
}
}원격 엔드포인트
https://ganty.app/api/mcpstreamable-http할 수 있는 일
도구 목록
도구 (15)
🟢list_workspaces
Get all workspaces the authenticated user is a member of.
입력 스키마
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢list_projects(workspaceId)
List all projects in a workspace (excluding archived).
입력 스키마
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Workspace ID (UUID)"
}
},
"required": [
"workspaceId"
],
"additionalProperties": false
}🟡create_project(workspaceId, name, description, color, startDate, ...)
Create a new project in a workspace. Returns the created project. Subject to plan-based project count limits.
입력 스키마
{
"type": "object",
"properties": {
"workspaceId": {
"type": "string",
"description": "Workspace ID (UUID)"
},
"name": {
"type": "string",
"description": "Project name"
},
"description": {
"type": "string"
},
"color": {
"type": "string",
"description": "Hex color (e.g. #3b82f6). Defaults to blue."
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD. Defaults to today."
},
"endDate": {
"type": "string",
"description": "YYYY-MM-DD. Optional."
}
},
"required": [
"workspaceId",
"name"
],
"additionalProperties": false
}🔴delete_project(projectId)
Permanently delete a project. All tasks, milestones, and dependencies inside the project are also removed. This cannot be undone.
입력 스키마
{
"type": "object",
"properties": {
"projectId": {
"type": "string"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}🟢list_tasks(projectId, search, status, assigneeId)
List tasks in a project. Supports optional filtering by name (search), status, and assignee.
입력 스키마
{
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "Project ID (UUID)"
},
"search": {
"type": "string",
"description": "Filter task name by case-insensitive substring"
},
"status": {
"type": "string",
"enum": [
"not_started",
"in_progress",
"done",
"on_hold"
]
},
"assigneeId": {
"type": "string",
"description": "Filter by assignee profile ID"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}🟢get_task(taskId)
Get detailed information about a single task, including assignees and dependencies.
입력 스키마
{
"type": "object",
"properties": {
"taskId": {
"type": "string",
"description": "Task ID (UUID)"
}
},
"required": [
"taskId"
],
"additionalProperties": false
}🟢list_milestones(projectId)
List milestones in a project (key dates such as launch or review gates).
입력 스키마
{
"type": "object",
"properties": {
"projectId": {
"type": "string"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}🟡create_milestone(projectId, name, date, color)
Add a milestone (key date) to a project.
입력 스키마
{
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"name": {
"type": "string"
},
"date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"color": {
"type": "string",
"description": "Hex color (defaults to #f59e0b)"
}
},
"required": [
"projectId",
"name",
"date"
],
"additionalProperties": false
}🟡create_task(projectId, name, startDate, endDate, description, ...)
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).
입력 스키마
{
"type": "object",
"properties": {
"projectId": {
"type": "string"
},
"name": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD"
},
"endDate": {
"type": "string",
"description": "YYYY-MM-DD (exclusive end)"
},
"description": {
"type": "string"
},
"parentId": {
"type": "string",
"description": "Parent task ID for hierarchy"
},
"assigneeId": {
"type": "string",
"description": "Profile ID of the assignee"
},
"progress": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"status": {
"type": "string",
"enum": [
"not_started",
"in_progress",
"done",
"on_hold"
]
},
"color": {
"type": "string",
"description": "Hex color (e.g. #3b82f6)"
}
},
"required": [
"projectId",
"name",
"startDate",
"endDate"
],
"additionalProperties": false
}🟡update_task(taskId, name, description, startDate, endDate, ...)
Update fields of an existing task. Only provided fields will be modified.
입력 스키마
{
"type": "object",
"properties": {
"taskId": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"startDate": {
"type": "string",
"description": "YYYY-MM-DD"
},
"endDate": {
"type": "string",
"description": "YYYY-MM-DD"
},
"progress": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"status": {
"type": "string",
"enum": [
"not_started",
"in_progress",
"done",
"on_hold"
]
},
"color": {
"type": "string"
},
"assigneeId": {
"type": [
"string",
"null"
],
"description": "null to unassign"
}
},
"required": [
"taskId"
],
"additionalProperties": false
}🟡set_task_progress(taskId, progress)
Update the progress percentage of a task (0-100). Status is auto-derived: 0=not_started, 1-99=in_progress, 100=done.
입력 스키마
{
"type": "object",
"properties": {
"taskId": {
"type": "string"
},
"progress": {
"type": "number",
"minimum": 0,
"maximum": 100
}
},
"required": [
"taskId",
"progress"
],
"additionalProperties": false
}🟡add_dependency(predecessorId, successorId, lagDays)
Add a finish-to-start dependency between two tasks in the same project.
입력 스키마
{
"type": "object",
"properties": {
"predecessorId": {
"type": "string",
"description": "Task that must finish first"
},
"successorId": {
"type": "string",
"description": "Task that can start after predecessor finishes"
},
"lagDays": {
"type": "number",
"description": "Optional lag in days after predecessor finishes"
}
},
"required": [
"predecessorId",
"successorId"
],
"additionalProperties": false
}🔴delete_task(taskId)
Delete a task. Child tasks and dependencies are removed as well.
입력 스키마
{
"type": "object",
"properties": {
"taskId": {
"type": "string"
}
},
"required": [
"taskId"
],
"additionalProperties": false
}🟢get_critical_path(project_id, as_of_date, business_days)
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.
입력 스키마
{
"type": "object",
"properties": {
"project_id": {
"type": "string",
"description": "Project ID (UUID)"
},
"as_of_date": {
"type": "string",
"description": "YYYY-MM-DD. Start point for projecting remaining work. Defaults to today."
},
"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."
}
},
"required": [
"project_id"
],
"additionalProperties": false
}🟡reschedule_and_propagate(task_id, shift, new_start_date, mode, respect_dependencies, ...)
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.
입력 스키마
{
"type": "object",
"properties": {
"task_id": {
"type": "string",
"description": "Task ID (UUID) to shift"
},
"shift": {
"type": "string",
"description": "Relative shift like '+3d' (push back) or '-2d' (pull earlier). Specify exactly one of shift or new_start_date."
},
"new_start_date": {
"type": "string",
"description": "Absolute new start date as YYYY-MM-DD. Specify exactly one of shift or new_start_date."
},
"mode": {
"type": "string",
"enum": [
"dry_run",
"commit"
],
"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."
},
"respect_dependencies": {
"type": "boolean",
"description": "If false, only the named task moves; successors are not cascaded. Default true."
},
"pinned_task_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Additional task IDs to treat as pinned (in addition to progress=100 tasks)."
},
"business_days": {
"type": "boolean",
"description": "If true, skip Sat/Sun in duration math. Defaults to false."
}
},
"required": [
"task_id"
],
"additionalProperties": false
}권장 프롬프트
list_workspacesget_taskget_tasklist_workspacesget_tasklist_workspaces커뮤니티
증거