{"name":"app.ganty/mcp-server","slug":"ganty-mcp-server","title":"Ganty MCP","description":"Gantt chart SaaS with server-side critical path and dependency-aware shift-impact tools, plus CRUD.","url":"https://mcp.market/server/ganty-mcp-server","rating":null,"grade":"B","score":71,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":14,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-06-21T15:04:33.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T11:55:54.387Z","last_ok_at":"2026-11-04T11:55:54.387Z","latency_ms":890},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/homareyoshizaki/ganty-mcp","website":"https://ganty.app","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://ganty.app/api/mcp"}],"packages":[],"tools":[{"name":"add_dependency","description":"Add a finish-to-start dependency between two tasks in the same project.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"create_milestone","description":"Add a milestone (key date) to a project.","write_action":true,"price_micros":0,"input_schema":{"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}},{"name":"create_project","description":"Create a new project in a workspace. Returns the created project. Subject to plan-based project count limits.","write_action":true,"price_micros":0,"input_schema":{"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}},{"name":"create_task","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).","write_action":true,"price_micros":0,"input_schema":{"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}},{"name":"delete_project","description":"Permanently delete a project. All tasks, milestones, and dependencies inside the project are also removed. This cannot be undone.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"additionalProperties":false}},{"name":"delete_task","description":"Delete a task. Child tasks and dependencies are removed as well.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"taskId":{"type":"string"}},"required":["taskId"],"additionalProperties":false}},{"name":"get_critical_path","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"get_task","description":"Get detailed information about a single task, including assignees and dependencies.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"taskId":{"type":"string","description":"Task ID (UUID)"}},"required":["taskId"],"additionalProperties":false}},{"name":"list_milestones","description":"List milestones in a project (key dates such as launch or review gates).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"projectId":{"type":"string"}},"required":["projectId"],"additionalProperties":false}},{"name":"list_projects","description":"List all projects in a workspace (excluding archived).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Workspace ID (UUID)"}},"required":["workspaceId"],"additionalProperties":false}},{"name":"list_tasks","description":"List tasks in a project. Supports optional filtering by name (search), status, and assignee.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"list_workspaces","description":"Get all workspaces the authenticated user is a member of.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"additionalProperties":false}},{"name":"reschedule_and_propagate","description":"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.","write_action":false,"price_micros":0,"input_schema":{"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}},{"name":"set_task_progress","description":"Update the progress percentage of a task (0-100). Status is auto-derived: 0=not_started, 1-99=in_progress, 100=done.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"taskId":{"type":"string"},"progress":{"type":"number","minimum":0,"maximum":100}},"required":["taskId","progress"],"additionalProperties":false}},{"name":"update_task","description":"Update fields of an existing task. Only provided fields will be modified.","write_action":true,"price_micros":0,"input_schema":{"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}}],"scan":{"score":71,"grade":"B","scanned_at":"2026-09-27T12:16:17.469Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T12:16:17.461Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1546ms"]},"poisoning":{"score":15,"max":15,"notes":["15 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 7 write-action tools with no auth"]},"maintenance":{"score":8,"max":15,"notes":["last push 98 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://ganty.app/api/mcp","reachable":true,"authRequired":false,"latencyMs":1546,"serverInfo":{"name":"ganty-mcp","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"homareyoshizaki","repo":"ganty-mcp","archived":false,"pushedAt":"2026-06-21T15:04:33Z","stars":0,"forks":0,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/7223327?v=4","ownerCreatedAt":"2014-04-08T09:31:31Z","license":"MIT"},"icon":{"url":"https://ganty.app/icon.svg?v=2","source":"site"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-06-21T15:04:33.000Z","score":14}}}},"grade_history":[],"reviews":[]}