Zovo Project Timeline
A Gantt chart maker and project timeline planner that works inside the chat.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"gantt-timeline": {
"url": "https://gantt-timeline.zovo.one/mcp"
}
}
}远程端点
https://gantt-timeline.zovo.one/mcpstreamable-http它能做什么
工具清单
工具(2)
🟢plan_project_timeline(project_name, start_date, tasks, calendar, country, ...)
Use this when the user wants a Gantt chart, project timeline, project schedule or project plan with milestones from a task list, wants to find the critical path and project duration, or asks for early start, early finish, late start, late finish, total float or free float (critical path method). Takes tasks with durations (days or weeks), finish-to-start dependencies with optional lags, optional start-no-earlier-than dates, owners and milestones, plus a start date and a business-day calendar with country public holidays or calendar days. Returns every task's dates and float, the critical path, milestones and the end date, an interactive Gantt chart, and CSV, .ics and SVG downloads. Detects dependency loops and unknown task names. Does not save projects, sync with project tools, track progress, or level resources. Do not use for a single date difference or for daily to-do planning.
输入模式
{
"type": "object",
"properties": {
"project_name": {
"description": "Project title for the chart and files, e.g. \"Website relaunch\".",
"type": "string",
"maxLength": 80
},
"start_date": {
"description": "Project start date YYYY-MM-DD, e.g. 2026-11-02. Defaults to today. Convert relative dates (\"next Monday\") to a date first.",
"type": "string",
"maxLength": 40
},
"tasks": {
"maxItems": 150,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "Optional short unique id used in depends_on, e.g. \"A\" or \"design\". Defaults to the task name.",
"type": "string",
"maxLength": 40
},
"name": {
"type": "string",
"maxLength": 80,
"description": "Task name, e.g. \"Design mockups\"."
},
"duration": {
"description": "Length in working days (calendar days in calendar_days mode), e.g. 5. Use 0 for a milestone. For weeks set duration_unit to weeks (e.g. 2) or pass \"2 weeks\".",
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 30
}
]
},
"duration_unit": {
"description": "Unit of duration for this task: days (default) or weeks (5 working days, or 7 days in calendar_days mode).",
"type": "string",
"enum": [
"days",
"weeks"
]
},
"depends_on": {
"description": "Tasks that must finish before this one starts (finish-to-start), by id, name or row number, e.g. [\"A\", \"Design\"]. Add a lag with +N or a lead with -N working days, e.g. \"Design+2\".",
"anyOf": [
{
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"maxLength": 90
}
},
{
"type": "string",
"maxLength": 400
}
]
},
"start_no_earlier_than": {
"description": "Earliest allowed start date YYYY-MM-DD, e.g. 2026-11-16 (a fixed kickoff or delivery date).",
"type": "string",
"maxLength": 40
},
"owner": {
"description": "Person or team responsible, e.g. \"Ana\". Shown in the chart and CSV.",
"type": "string",
"maxLength": 40
},
"milestone": {
"description": "true for a zero-length checkpoint such as Launch or Sign-off, drawn as a diamond.",
"type": "boolean"
}
},
"required": [
"name"
]
},
"description": "Tasks in any order (1 to 150), e.g. [{\"id\":\"A\",\"name\":\"Design\",\"duration\":5},{\"id\":\"B\",\"name\":\"Build\",\"duration\":10,\"depends_on\":[\"A\"]}]."
},
"calendar": {
"description": "business_days (default) counts Monday to Friday and skips public holidays of country; calendar_days counts every day.",
"type": "string",
"enum": [
"business_days",
"calendar_days"
]
},
"country": {
"description": "Country whose public holidays are skipped in business_days mode, as a 2-letter code or name, e.g. US, GB, DE, PL.",
"type": "string",
"maxLength": 40
},
"subdivision": {
"description": "State or region code for regional holidays, e.g. CA for California or BY for Bavaria.",
"type": "string",
"maxLength": 40
},
"non_working_dates": {
"description": "Extra days off such as a company shutdown, YYYY-MM-DD, e.g. [\"2026-12-28\", \"2026-12-29\"].",
"maxItems": 200,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
"duration_unit": {
"description": "Default unit for every task duration: days (default) or weeks.",
"type": "string",
"enum": [
"days",
"weeks"
]
}
},
"required": [
"tasks"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}输出模式
{
"type": "object",
"properties": {
"project_name": {
"type": "string"
},
"start_date": {
"type": "string"
},
"end_date": {
"type": "string"
},
"working_days": {
"type": "number"
},
"calendar_days": {
"type": "number"
},
"calendar": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"critical_path": {
"type": "array",
"items": {
"type": "string"
}
},
"milestones": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"tasks": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"request": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"properties": {
"csv": {
"type": "string"
},
"ics": {
"type": "string"
},
"svg": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"project_name",
"start_date",
"end_date",
"working_days",
"calendar_days",
"calendar",
"critical_path",
"milestones",
"tasks",
"request",
"warnings",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢compare_timeline_scenarios(project_name, start_date, tasks, calendar, country, ...)
Use this when the user asks what happens to a project schedule if a task slips, takes longer or shorter, or starts later: for example "if Design slips 5 days, when do we finish?" or "does the critical path change?". Takes the same task list and calendar as plan_project_timeline plus 1 to 4 scenarios, each with changes (extra_days, a new duration, or a new start-no-earlier-than date). Returns the baseline and each scenario's end date, the delay in working and calendar days, the new critical path, tasks that became or stopped being critical, and how much of each slip was absorbed by float. Does not change or save the plan. Do not use for the first schedule of a project (use plan_project_timeline).
输入模式
{
"type": "object",
"properties": {
"project_name": {
"description": "Project title for the chart and files, e.g. \"Website relaunch\".",
"type": "string",
"maxLength": 80
},
"start_date": {
"description": "Project start date YYYY-MM-DD, e.g. 2026-11-02. Defaults to today. Convert relative dates (\"next Monday\") to a date first.",
"type": "string",
"maxLength": 40
},
"tasks": {
"maxItems": 150,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "Optional short unique id used in depends_on, e.g. \"A\" or \"design\". Defaults to the task name.",
"type": "string",
"maxLength": 40
},
"name": {
"type": "string",
"maxLength": 80,
"description": "Task name, e.g. \"Design mockups\"."
},
"duration": {
"description": "Length in working days (calendar days in calendar_days mode), e.g. 5. Use 0 for a milestone. For weeks set duration_unit to weeks (e.g. 2) or pass \"2 weeks\".",
"anyOf": [
{
"type": "number"
},
{
"type": "string",
"maxLength": 30
}
]
},
"duration_unit": {
"description": "Unit of duration for this task: days (default) or weeks (5 working days, or 7 days in calendar_days mode).",
"type": "string",
"enum": [
"days",
"weeks"
]
},
"depends_on": {
"description": "Tasks that must finish before this one starts (finish-to-start), by id, name or row number, e.g. [\"A\", \"Design\"]. Add a lag with +N or a lead with -N working days, e.g. \"Design+2\".",
"anyOf": [
{
"maxItems": 40,
"type": "array",
"items": {
"type": "string",
"maxLength": 90
}
},
{
"type": "string",
"maxLength": 400
}
]
},
"start_no_earlier_than": {
"description": "Earliest allowed start date YYYY-MM-DD, e.g. 2026-11-16 (a fixed kickoff or delivery date).",
"type": "string",
"maxLength": 40
},
"owner": {
"description": "Person or team responsible, e.g. \"Ana\". Shown in the chart and CSV.",
"type": "string",
"maxLength": 40
},
"milestone": {
"description": "true for a zero-length checkpoint such as Launch or Sign-off, drawn as a diamond.",
"type": "boolean"
}
},
"required": [
"name"
]
},
"description": "Tasks in any order (1 to 150), e.g. [{\"id\":\"A\",\"name\":\"Design\",\"duration\":5},{\"id\":\"B\",\"name\":\"Build\",\"duration\":10,\"depends_on\":[\"A\"]}]."
},
"calendar": {
"description": "business_days (default) counts Monday to Friday and skips public holidays of country; calendar_days counts every day.",
"type": "string",
"enum": [
"business_days",
"calendar_days"
]
},
"country": {
"description": "Country whose public holidays are skipped in business_days mode, as a 2-letter code or name, e.g. US, GB, DE, PL.",
"type": "string",
"maxLength": 40
},
"subdivision": {
"description": "State or region code for regional holidays, e.g. CA for California or BY for Bavaria.",
"type": "string",
"maxLength": 40
},
"non_working_dates": {
"description": "Extra days off such as a company shutdown, YYYY-MM-DD, e.g. [\"2026-12-28\", \"2026-12-29\"].",
"maxItems": 200,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
"duration_unit": {
"description": "Default unit for every task duration: days (default) or weeks.",
"type": "string",
"enum": [
"days",
"weeks"
]
},
"scenarios": {
"maxItems": 4,
"type": "array",
"items": {
"type": "object",
"properties": {
"label": {
"description": "Short scenario name, e.g. \"Design slips a week\".",
"type": "string",
"maxLength": 40
},
"changes": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"task": {
"type": "string",
"maxLength": 90,
"description": "Task id or name to change, e.g. \"Design\"."
},
"extra_days": {
"description": "Working days added to the task's duration (a slip), e.g. 5; negative to shorten it, e.g. -2.",
"type": "number"
},
"duration": {
"description": "New duration in days instead of extra_days, e.g. 12.",
"type": "number"
},
"start_no_earlier_than": {
"description": "New earliest start date YYYY-MM-DD, e.g. 2026-11-30 (a late delivery).",
"type": "string",
"maxLength": 40
}
},
"required": [
"task"
]
},
"description": "Changes to apply, e.g. [{\"task\":\"Design\",\"extra_days\":5}]."
}
},
"required": [
"changes"
]
},
"description": "1 to 4 what-if scenarios compared with the baseline plan, e.g. [{\"label\":\"Design +5\",\"changes\":[{\"task\":\"Design\",\"extra_days\":5}]}]."
}
},
"required": [
"tasks",
"scenarios"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}输出模式
{
"type": "object",
"properties": {
"project_name": {
"type": "string"
},
"baseline": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"latest_finish": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"project_name",
"baseline",
"scenarios",
"latest_finish",
"warnings"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}社区
证据