Skip to content
Conduit

mcp server

MS-Procject-MCP

MCP server for controlling Microsoft Project via COM automation — 79 tools for task, resource, schedule, and baseline management

elsahafy/MS-Procject-MCPcommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 25, 2026

MS Project MCP Server

Control Microsoft Project via COM automation through the Model Context Protocol (MCP).

Prerequisites

  • Windows with Microsoft Project installed (tested on MS Project 16.0)
  • Python 3.10+
  • mcp package: pip install mcp
  • pywin32 for COM: pip install pywin32
  • python-dateutil (optional, for add_recurring_task): pip install python-dateutil

Quick Start

  1. Start MS Project and open a project file (or the server will create one).

  2. Register in your claude_desktop_config.json:

{
  "mcpServers": {
    "msproject": {
      "command": "python",
      "args": ["/path/to/msproject/server.py"]
    }
  }
}
  1. Run standalone (for testing):
python server.py

Tool Inventory (99 tools)

Project Management (7)

ToolDescription
open_projectOpen an existing .mpp file
new_projectCreate a new blank project
get_project_infoRead project metadata and summary stats
set_project_propertiesUpdate title, manager, start date, etc.
save_projectSave current project
save_project_asSave as .mpp or .xml
close_projectClose the active project

Task Queries (9)

ToolDescription
get_tasksList tasks with optional filters
get_taskGet a single task by UniqueID
get_critical_pathReturn critical-path tasks
get_tasks_by_ragFilter tasks by RAG status (Text1)
get_overdue_tasksIncomplete tasks past their finish date
get_tasks_by_resourceTasks assigned to a named resource
search_tasksFull-text search across task names
get_progress_summaryDashboard: progress, RAG counts, overdue
get_wbs_structureHierarchical WBS tree

Task Mutations (12)

ToolDescription
update_taskUpdate any task field (incl. priority, task type)
bulk_update_ragMass RAG status update
bulk_update_tasksMass field updates across tasks
add_taskAdd a single task
bulk_add_tasksAdd many tasks at once (JSON array)
add_recurring_taskCreate recurring task occurrences (daily/weekly/monthly)
delete_taskRemove a task
set_task_modeToggle auto/manual scheduling
bulk_set_task_modeMass scheduling mode update
set_constraintSet scheduling constraint (ASAP/ALAP/SNET/etc.)
clear_estimated_flagsClear estimated flag on all tasks
indent_taskIndent or outdent a task

Dependencies (4)

ToolDescription
add_predecessorCreate FS/SS/FF/SF link with optional lag
bulk_add_predecessorsMass predecessor creation
remove_predecessorDelete a dependency link
get_task_dependenciesShow predecessors and successors

Resources (7)

ToolDescription
get_resourcesList all resources in the pool
add_resourceAdd a work/material/cost resource
assign_resourceAssign a resource to a task
update_resourceModify resource properties
delete_resourceRemove a resource (clears assignments)
set_resource_calendarAssign a specific calendar to a resource
get_resource_availabilityAllocation vs capacity per period

Resource Assignments (3)

ToolDescription
bulk_assign_resourcesMass resource assignment
remove_resource_assignmentUnassign a resource from a task
get_resource_workloadWorkload and conflict detection for a resource

Resource Rate Tables (2)

ToolDescription
get_resource_rate_tablesRead cost rate tables A-E for a resource
set_resource_rate_tableSet or add rate entries in a cost rate table

Custom Fields (3)

ToolDescription
rename_custom_fieldsRename Text1-Text30, Number1-Number20, etc.
update_custom_fieldsSet custom field values on a task
get_custom_field_valuesRead all values of a custom field

Import / Export (6)

ToolDescription
import_xmlImport from MS Project XML
export_xmlExport to MS Project XML
export_csvExport tasks to CSV with column selection
snapshot_to_jsonFull project snapshot as JSON
snapshot_diffCompare two JSON snapshots — additions, deletions, changes
insert_subprojectInsert a subproject file

Calendars (7)

ToolDescription
get_calendarsList all project calendars
create_calendarCreate a new calendar (optionally copy from existing)
delete_calendarRemove a base calendar
set_calendar_exceptionAdd exception dates (holidays) to a calendar
delete_calendar_exceptionRemove a specific exception from a calendar
list_calendar_exceptionsList all exceptions on a calendar
set_project_calendarSwitch the project base calendar

Calendar Working Hours (1)

ToolDescription
set_working_hoursModify working hours for a specific day of the week

Scheduling & Analysis (12)

ToolDescription
get_schedule_analysisCritical path length, float analysis
validate_scheduleFind scheduling issues (missing links, etc.)
calculate_projectRecalculate the schedule after manual changes
get_milestone_reportUpcoming and overdue milestones
level_resourcesRun MS Project resource leveling
find_available_slackTasks with free slack above threshold
get_constraintsRead non-default constraints on all tasks
set_task_calendarAssign a calendar to a specific task
set_task_hyperlinkSet a hyperlink on a task
get_critical_path_sequenceOrdered critical path chain from start to finish with driving links
get_critical_tasks_for_periodCritical tasks and milestones within a date range (e.g. Q2)
what_if_delaySimulate delaying a task — shows project impact, newly critical tasks, slack loss

Status Date & Progress Updates (2)

ToolDescription
update_projectMark all tasks complete through a date (weekly PMO ritual)
reschedule_incomplete_workMove remaining work to start after a given date

Timephased Data (1)

ToolDescription
get_timephased_dataPeriod-by-period work/cost data (for S-curves, cash flow)

Baselines & Earned Value (4)

ToolDescription
save_baselineSave baseline (0-10)
clear_baselineClear a saved baseline
compare_baselinesCompare two baselines or baseline vs current
get_earned_valueBCWS, BCWP, ACWP, SPI, CPI per task

Variance & Reporting (1)

ToolDescription
get_variance_reportSchedule + cost variance per task vs a baseline

Cost & Work (2)

ToolDescription
get_cost_summaryBudget vs actual cost breakdown
get_actual_workActual vs remaining work hours per task

Progress Tracking (2)

ToolDescription
get_progress_by_wbsCompletion % rolled up by WBS level
get_dependency_chainWalk predecessor/successor chains

Advanced Operations (8)

ToolDescription
set_deadlineSet deadline indicator on a task
bulk_set_deadlinesMass deadline assignment
set_task_activeActivate/inactivate a task
dry_run_bulk_updatePreview bulk changes without applying
move_taskReorder a task after another
copy_task_structureDuplicate a task and its subtree
cross_project_linkCreate inter-project dependency
undo_lastUndo recent operations (up to 10)

Multi-Project (3)

ToolDescription
list_projectsList all open projects
switch_projectSwitch active project by name or index
apply_filterApply a built-in or custom filter

Filtering & Grouping (2)

ToolDescription
filter_tasksAdvanced multi-field filtering
group_tasks_byGroup tasks by any field with aggregation

Connectivity (1)

ToolDescription
health_checkLightweight 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:

FieldDescription
actual_start / actual_finishWhen work actually began/ended
remaining_duration_daysHow much work is left
total_slack_days / free_slack_daysSchedule flexibility
deadlineSoft deadline indicator
priorityLeveling priority (0–1000)
constraint_type / constraint_dateScheduling constraint
manualAuto vs manual scheduling
typeFixedUnits / FixedDuration / FixedWork
hyperlink / hyperlink_textTask 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).

Tests

# Run all phases
python tests/test_new_tools.py  # 11 tests (core CRUD)
python tests/test_phase2.py     # 10 tests (resources, baselines, WBS)
python tests/test_phase3.py     # 15 tests (custom fields, calendars, scheduling)
python tests/test_phase4.py     # 23 tests (advanced ops, multi-project, filtering)
python tests/test_phase5.py     # 11 tests (bug fixes, cost/work tracking)
python tests/test_phase6.py     # 75 tests (timephased data, calendar mgmt, variance)
python tests/test_phase7.py     # 57 tests (critical path intelligence, what-if)

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().

Development Phases

PhaseToolsFocus
1–225Core CRUD, dependencies, resources
344Custom fields, calendars, scheduling analysis
465Advanced operations, multi-project, filtering
579Bug fixes, cost/work tracking
696Timephased data, calendar management, resource availability, variance reporting
799Critical path intelligence: ordered sequence, period filtering, what-if analysis

Contributing

See CONTRIBUTING.md for development setup, conventions, and how to submit changes.

License

This project is licensed under the MIT License — see LICENSE for details.

↑↓ navigate openesc close