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
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 requireconfirm=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-mcpwith 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
| Platform | Config 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_DIRSto the folder containing your.xerfiles, 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-mcpwith 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).
| Variable | Default | Description |
|---|---|---|
P6MCP_WORKSPACE_DIRS | — | Colon-separated directories containing XER files. Required for XER mode. |
P6MCP_OUTPUT_DIR | /tmp/p6mcp_output | Where exports and reports are written |
P6MCP_ENABLE_MUTATION | false | Set to true to enable write-back tools |
P6MCP_AUTH_TOKEN | — | Bearer token for HTTP transport |
P6MCP_CACHE_SIZE | 10 | Number of schedules to keep in memory |
P6MCP_LOG_JSON | false | Emit structured JSON logs |
See .env.example for a full template including P6 EPPM connection setup.
📊 Tool Groups
| Group | Tools |
|---|---|
| File & Workspace | list_xer_files, open_schedule, validate_xer, get_file_header, get_table_inventory, get_raw_table, clear_cache |
| Projects & EPS | get_projects, get_project_detail, get_project_codes, get_schedule_options, get_data_date |
| WBS | get_wbs, get_wbs_detail, get_wbs_rollup, get_wbs_budgets, get_wbs_notes, get_wbs_steps |
| Activities | get_activities, search_activities, get_activity_detail, get_milestones, get_constraints, get_udfs, get_expenses |
| Relationships | get_relationships, get_predecessors, get_successors, get_driving_path, analyze_logic_health |
| Critical Path | get_critical_path, get_near_critical, get_float_paths, get_negative_float, get_float_distribution, recompute_cpm |
| Schedule Quality | run_dcma_assessment, check_schedule_quality, get_schedule_health_score, get_invalid_dates, get_out_of_sequence |
| Progress | get_progress_summary, get_behind_schedule_activities, get_lookahead, get_activity_variances |
| Resources & Roles | get_resources, get_roles, get_resource_assignments, analyze_resource_utilization, get_resource_histogram |
| Cost & EVM | get_cost_summary, get_cash_flow, get_earned_value, get_earned_value_curve, get_past_period_actuals |
| Calendars | get_calendars, get_calendar_detail, calendar_working_days_between, is_working_day, compare_calendars |
| Baselines | get_baselines, compare_to_baseline, diff_schedules, get_schedule_trend |
| Export | export_data, export_workbook, export_gantt_mermaid, export_network_dot, export_ics_milestones |
| Mutation | update_activity, add/remove_relationship, add/delete_activity, assign_resource, write_xer (opt-in) |
| Live P6 EPPM | p6_list_connections, p6_open_project, p6_run_schedule_job, p6_apply_actuals, p6_create_baseline, +14 more |
| Meta | list_capabilities, explain_field, get_enum_values |
🔌 Backend Support
| Capability | XER Files | Live 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=trueplusconfirm=Trueper 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