You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Compare two JSON snapshots — additions, deletions, changes
insert_subproject
Insert a subproject file
Calendars (7)
Tool
Description
get_calendars
List all project calendars
create_calendar
Create a new calendar (optionally copy from existing)
delete_calendar
Remove a base calendar
set_calendar_exception
Add exception dates (holidays) to a calendar
delete_calendar_exception
Remove a specific exception from a calendar
list_calendar_exceptions
List all exceptions on a calendar
set_project_calendar
Switch the project base calendar
Calendar Working Hours (1)
Tool
Description
set_working_hours
Modify working hours for a specific day of the week
Scheduling & Analysis (12)
Tool
Description
get_schedule_analysis
Critical path length, float analysis
validate_schedule
Find scheduling issues (missing links, etc.)
calculate_project
Recalculate the schedule after manual changes
get_milestone_report
Upcoming and overdue milestones
level_resources
Run MS Project resource leveling
find_available_slack
Tasks with free slack above threshold
get_constraints
Read non-default constraints on all tasks
set_task_calendar
Assign a calendar to a specific task
set_task_hyperlink
Set a hyperlink on a task
get_critical_path_sequence
Ordered critical path chain from start to finish with driving links
get_critical_tasks_for_period
Critical tasks and milestones within a date range (e.g. Q2)
what_if_delay
Simulate delaying a task — shows project impact, newly critical tasks, slack loss
Status Date & Progress Updates (2)
Tool
Description
update_project
Mark all tasks complete through a date (weekly PMO ritual)
reschedule_incomplete_work
Move remaining work to start after a given date
Timephased Data (1)
Tool
Description
get_timephased_data
Period-by-period work/cost data (for S-curves, cash flow)
Baselines & Earned Value (4)
Tool
Description
save_baseline
Save baseline (0-10)
clear_baseline
Clear a saved baseline
compare_baselines
Compare two baselines or baseline vs current
get_earned_value
BCWS, BCWP, ACWP, SPI, CPI per task
Variance & Reporting (1)
Tool
Description
get_variance_report
Schedule + cost variance per task vs a baseline
Cost & Work (2)
Tool
Description
get_cost_summary
Budget vs actual cost breakdown
get_actual_work
Actual vs remaining work hours per task
Progress Tracking (2)
Tool
Description
get_progress_by_wbs
Completion % rolled up by WBS level
get_dependency_chain
Walk predecessor/successor chains
Advanced Operations (8)
Tool
Description
set_deadline
Set deadline indicator on a task
bulk_set_deadlines
Mass deadline assignment
set_task_active
Activate/inactivate a task
dry_run_bulk_update
Preview bulk changes without applying
move_task
Reorder a task after another
copy_task_structure
Duplicate a task and its subtree
cross_project_link
Create inter-project dependency
undo_last
Undo recent operations (up to 10)
Multi-Project (3)
Tool
Description
list_projects
List all open projects
switch_project
Switch active project by name or index
apply_filter
Apply a built-in or custom filter
Filtering & Grouping (2)
Tool
Description
filter_tasks
Advanced multi-field filtering
group_tasks_by
Group tasks by any field with aggregation
Connectivity (1)
Tool
Description
health_check
Lightweight COM connectivity test — version, project status
Enriched Task Data
Every task query (get_task, get_tasks, etc.) returns a rich dict with 35+ fields including:
Field
Description
actual_start / actual_finish
When work actually began/ended
remaining_duration_days
How much work is left
total_slack_days / free_slack_days
Schedule flexibility
deadline
Soft deadline indicator
priority
Leveling priority (0–1000)
constraint_type / constraint_date
Scheduling constraint
manual
Auto vs manual scheduling
type
FixedUnits / FixedDuration / FixedWork
hyperlink / hyperlink_text
Task hyperlink
Known Limitations
COM proxy staleness: When multiple projects are open, switching projects invalidates existing COM references. Always call switch_project before operating on a different file.
Undo stack: undo_last supports up to 10 consecutive undos. MS Project's COM undo is less reliable than the UI's.
File locking: Only one process can hold the COM connection. Don't open MS Project's GUI dialogs while the server is active.
Timezone-aware dates: COM may return timezone-aware datetimes. The server normalizes these via _to_naive() for safe comparisons.
Recurring tasks: MS Project's RecurringTaskInsert is a dialog-only COM method. The add_recurring_task tool simulates recurrence by creating individual occurrences under a summary task. Requires python-dateutil.
Timephased data: get_timephased_data can be slow on large date ranges. Keep queries to reasonable periods (weeks/months, not years).
202 tests total across 7 test suites. All tests require MS Project to be running (they create and close temporary projects).
Architecture
Single-file server (server.py, ~5,200 lines) using the FastMCP framework. All COM calls go through get_app() / get_proj() helpers. Dates are normalized with _to_naive() and formatted with _fmt_date().