P6-MCP
README.md
<p align="center">
<img src="https://raw.githubusercontent.com/shamshirialireza/P6-MCP/main/docs/assets/logo.png" alt="P6-MCP" width="160"/>
</p>
# P6-MCP
[](https://pypi.org/project/p6-mcp/)
[](https://pypi.org/project/p6-mcp/)
[](https://github.com/shamshirialireza/P6-MCP/blob/main/LICENSE)
[](https://github.com/shamshirialireza/P6-MCP/actions)
[](https://smithery.ai/@shamshirialireza/p6-mcp)
[](https://github.com/shamshirialireza/P6-MCP/pkgs/container/p6-mcp)
[](https://mcpservers.org/servers/shamshirialireza/p6-mcp)
<!-- mcp-name: io.github.shamshirialireza/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 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`](https://docs.astral.sh/uv/) to run — it handles everything automatically with no separate Python environment to manage.
**Install `uv` first (if you don't have it):**
```bash
# 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:
```bash
uvx p6-mcp
```
> Running `uvx p6-mcp` with no subcommand will print usage help — that means it's working correctly. See [CLI Usage](#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:
```bash
open -e ~/Library/Application\ Support/Claude/claude_desktop_config.json
```
If the file doesn't exist yet:
```bash
# 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.
```json
{
"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:
> ```bash
> 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
```json
{
"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)
```bash
docker run -p 8000:8000 -v /path/to/xer:/data ghcr.io/shamshirialireza/p6-mcp
```
---
### Option D: pip (if you prefer a traditional install)
```bash
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:
```bash
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).
| 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=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](#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:
```bash
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](https://github.com/shamshirialireza)
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues