P6-MCP

Parse Oracle Primavera P6 XER schedule files and control live P6 EPPM, critical path, DCMA 14-point, earned value, and 138 tools for any AI client.

Documentation

P6-MCP

PyPI Python License: MIT CI Smithery Docker

Primavera P6 MCP Server

A fully featured MCP server for Oracle Primavera P6. Point any MCP-compatible AI client at your XER files or a live P6 EPPM instance and start asking questions in plain language.


✨ Highlights

  • 138 tools across one unified surface — the same tool works against both XER files and live P6 EPPM with no changes to your prompt
  • Full XER parser — lossless read and write of Oracle Primavera XER format including all tables, CP1252 encoding, and calendar data
  • DCMA 14-point schedule assessment — automated compliance check with pass/fail per metric and actionable findings
  • Critical path & float analysis — forward/backward pass, driving path, near-critical activities, negative float detection
  • Earned Value Management — CPI, SPI, EAC, TCPI, S-curves, and period performance from XER or live P6
  • Resource utilization — histogram, leveling report, overallocation detection across all assignments
  • Baseline comparison & schedule diff — compare any two XER snapshots or XER vs live P6 project
  • Safe mutation by default — write-back tools are disabled until you set P6MCP_ENABLE_MUTATION=true; all mutations require confirm=True
  • Three transports — stdio for desktop clients, Streamable HTTP and SSE for remote/Docker deployments
  • Works with every major MCP client — Claude Desktop, Cursor, Windsurf, VS Code, Zed, Continue, OpenAI Agents SDK

🚀 Installation & Setup

New to MCP? Follow the step-by-step guide for your platform below. The whole setup takes under 5 minutes.

Prerequisites

P6-MCP uses uv to run — it handles everything automatically with no separate Python environment to manage.

Install uv first (if you don't have it):

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# macOS with Homebrew
brew install uv

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Once uv is installed, you can run P6-MCP directly with no further install step:

uvx p6-mcp

Running uvx p6-mcp with no subcommand will print usage help — that means it's working correctly. See CLI Usage for available commands.


Option A: Claude Desktop (Recommended for most users)

Step 1 — Find or create your config file

PlatformConfig file location
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json

On macOS, open it directly from Terminal:

open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json

If the file doesn't exist yet:

# macOS
mkdir -p ~/Library/Application\ Support/Claude
touch ~/Library/Application\ Support/Claude/claude_desktop_config.json
open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json

Step 2 — Add the P6-MCP server

Add the mcpServers block to your config. If the file already has other servers, just add the "p6-mcp" entry inside the existing "mcpServers" object.

{
  "mcpServers": {
    "p6-mcp": {
      "command": "uvx",
      "args": ["p6-mcp", "serve", "--transport", "stdio"],
      "env": {
        "P6MCP_WORKSPACE_DIRS": "/path/to/your/xer/files"
      }
    }
  }
}

Important: Set P6MCP_WORKSPACE_DIRS to the folder containing your .xer files, not the file itself. Not sure where your XER files are? Run this in Terminal to find them:

find ~ -name "*.xer" 2>/dev/null

Step 3 — Restart Claude Desktop

Fully quit and reopen Claude Desktop. The P6-MCP tools will load automatically — no Terminal commands needed.

Step 4 — Verify it's working

In a new Claude chat, try:

"List my XER files"

or drop a .xer file into the chat and ask:

"Give me a project summary for this schedule"


Option B: Cursor / Windsurf / VS Code

{
  "mcp": {
    "servers": {
      "p6-mcp": {
        "command": "uvx",
        "args": ["p6-mcp", "serve", "--transport", "stdio"],
        "env": { "P6MCP_WORKSPACE_DIRS": "/path/to/your/xer/files" }
      }
    }
  }
}

Option C: Docker (remote/server deployments)

docker run -p 8000:8000 -v /path/to/xer:/data ghcr.io/shamshirialireza/p6-mcp

Option D: pip (if you prefer a traditional install)

pip install p6-mcp

# With optional extras (Excel export, charts, HTTP transport)
pip install "p6-mcp[excel,charts,http]"

🖥️ CLI Usage

After installing, you can also use P6-MCP directly from the command line — no AI client needed:

p6-mcp inspect schedule.xer       # table inventory and project list
p6-mcp dcma schedule.xer          # DCMA 14-point report
p6-mcp diff old.xer new.xer       # compare two schedules
p6-mcp validate schedule.xer      # structural validation
p6-mcp evm schedule.xer           # earned value summary
p6-mcp export schedule.xer --format xlsx --output report.xlsx

Running p6-mcp with no subcommand shows the help message — this is expected and means the tool is installed correctly.


⚙️ Configuration

All configuration is done via environment variables, either in your MCP client's config file or in a .env file (see .env.example for a full template).

VariableDefaultDescription
P6MCP_WORKSPACE_DIRSColon-separated directories containing XER files. Required for XER mode.
P6MCP_OUTPUT_DIR/tmp/p6mcp_outputWhere exports and reports are written
P6MCP_ENABLE_MUTATIONfalseSet to true to enable write-back tools
P6MCP_AUTH_TOKENBearer token for HTTP transport
P6MCP_CACHE_SIZE10Number of schedules to keep in memory
P6MCP_LOG_JSONfalseEmit structured JSON logs

See .env.example for a full template including P6 EPPM connection setup.


📊 Tool Groups

GroupTools
File & Workspacelist_xer_files, open_schedule, validate_xer, get_file_header, get_table_inventory, get_raw_table, clear_cache
Projects & EPSget_projects, get_project_detail, get_project_codes, get_schedule_options, get_data_date
WBSget_wbs, get_wbs_detail, get_wbs_rollup, get_wbs_budgets, get_wbs_notes, get_wbs_steps
Activitiesget_activities, search_activities, get_activity_detail, get_milestones, get_constraints, get_udfs, get_expenses
Relationshipsget_relationships, get_predecessors, get_successors, get_driving_path, analyze_logic_health
Critical Pathget_critical_path, get_near_critical, get_float_paths, get_negative_float, get_float_distribution, recompute_cpm
Schedule Qualityrun_dcma_assessment, check_schedule_quality, get_schedule_health_score, get_invalid_dates, get_out_of_sequence
Progressget_progress_summary, get_behind_schedule_activities, get_lookahead, get_activity_variances
Resources & Rolesget_resources, get_roles, get_resource_assignments, analyze_resource_utilization, get_resource_histogram
Cost & EVMget_cost_summary, get_cash_flow, get_earned_value, get_earned_value_curve, get_past_period_actuals
Calendarsget_calendars, get_calendar_detail, calendar_working_days_between, is_working_day, compare_calendars
Baselinesget_baselines, compare_to_baseline, diff_schedules, get_schedule_trend
Exportexport_data, export_workbook, export_gantt_mermaid, export_network_dot, export_ics_milestones
Mutationupdate_activity, add/remove_relationship, add/delete_activity, assign_resource, write_xer (opt-in)
Live P6 EPPMp6_list_connections, p6_open_project, p6_run_schedule_job, p6_apply_actuals, p6_create_baseline, +14 more
Metalist_capabilities, explain_field, get_enum_values

🔌 Backend Support

CapabilityXER FilesLive P6 EPPM
Read schedule data
Critical path & float
DCMA 14-point assessment
Earned value & cost
Resource utilization
Baseline comparison
Export (xlsx, csv, Gantt)
Write back / mutate
Schedule & level jobs
Apply actuals
Store period performance

🔒 Security

  • XER file access is restricted to P6MCP_WORKSPACE_DIRS — path traversal is blocked
  • Mutation is disabled by default; requires P6MCP_ENABLE_MUTATION=true plus confirm=True per call
  • HTTP transport supports bearer token auth via P6MCP_AUTH_TOKEN
  • P6 EPPM credentials are never logged

🛠️ Troubleshooting

p6-mcp: error: the following arguments are required: command This is expected — it means P6-MCP is installed and working. You just need to provide a subcommand like inspect, dcma, or serve. See CLI Usage.

Tools not appearing in Claude Desktop Make sure you fully quit and reopened Claude Desktop after editing the config. Also verify your JSON is valid (no trailing commas) and that P6MCP_WORKSPACE_DIRS points to an existing folder.

Can't find your XER files? Run this in Terminal to locate them:

find ~ -name "*.xer" 2>/dev/null

Using P6-MCP in claude.ai (browser) The claude.ai interface defers tool loading. If you see an error like has not been loaded yet, this is normal — P6-MCP tools load on demand in that environment. In Claude Desktop, tools load automatically with no extra steps.


📄 License

MIT © Alireza Shamshiri