Skip to main content
Glama
osama-ata

P6XER MCP Server

by osama-ata
README.md
# P6XER MCP Server

mcp-name: io.github.osama-ata/p6xer-mcp-server

[![PyPI version](https://badge.fury.io/py/p6xer-mcp-server.svg)](https://badge.fury.io/py/p6xer-mcp-server)
[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![MCP](https://img.shields.io/badge/MCP-compatible-green.svg)](https://modelcontextprotocol.io)

A full-featured [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **Primavera P6 XER** files, built on [PyP6XER](https://github.com/HassanEmam/PyP6Xer).

Exposes **13 Tools**, **3 Resources**, and **2 Prompts** so any MCP-compatible AI client (Claude Desktop, Claude Code, Cursor, etc.) can interactively parse, query, and analyze `.xer` schedule files.

---

## πŸš€ Features

### πŸ”§ Tools (13)

| Tool | Description |
|------|-------------|
| `parse_xer_file` | Parse an XER file β€” project list, totals, status breakdowns |
| `get_project_activities` | Activities with filters: project_id, project_short_name, status, task_type |
| `get_critical_path` | Critical path activities (float ≀ 0), sorted by early start |
| `analyze_resource_utilization` | Planned/actual hours & costs per resource; over-allocation flags |
| `check_schedule_quality` | DCMA-style check: missing logic, long durations, high float, unresourced tasks |
| `get_resources` | List resources, optionally filtered by type |
| `get_resource_assignments` | Resource–activity assignments with enriched names and costs |
| `get_wbs` | Work Breakdown Structure hierarchy |
| `get_relationships` | Predecessor/successor relationships enriched with task codes |
| `get_calendars` | Calendar definitions with hours-per-period data |
| `get_schedule_summary` | At-a-glance stats: counts, date range, critical count |
| `get_earned_value` | EVM: PV, EV, AC, CV, SV, CPI, SPI, EAC per project |
| `get_activity_detail` | Full detail for one activity (preds + succs + resources) |

### πŸ“‹ Resources (3)

| URI | Description |
|-----|-------------|
| `xer-project://{file_path}/{project_id}` | Detailed text summary of a specific project |
| `xer-activities://{file_path}` | Activities summary with status breakdown and duration stats |
| `xer-resources://{file_path}` | Resources summary with type breakdown and assignment stats |

### πŸ’¬ Prompts (2)

| Prompt | Types |
|--------|-------|
| `analyze_xer_project` | `general` Β· `schedule` Β· `resources` Β· `progress` Β· `quality` |
| `xer_reporting_prompt` | `executive` Β· `detailed` Β· `critical_path` Β· `resource` Β· `milestone` |

---

## οΏ½ Install from Store

### Via PyPI (uvx β€” no install needed)
```bash
uvx p6xer-mcp-server
```

### Via PyPI (pip)
```bash
pip install p6xer-mcp-server
p6xer-mcp-server
```

### Via Smithery
Search for `p6xer-mcp-server` on [smithery.ai](https://smithery.ai) and click Install.
It will generate the correct Claude Desktop config automatically.

### Via GitHub MCP Registry
The server is listed in the GitHub MCP Registry. In Claude Code:
```bash
claude mcp add p6xer -- uvx p6xer-mcp-server
```

### Claude Desktop config (after PyPI install)
```json
{
  "mcpServers": {
    "p6xer": {
      "command": "uvx",
      "args": ["p6xer-mcp-server"]
    }
  }
}
```

---

## οΏ½πŸ“¦ Installation

```bash
# Clone the repo
git clone https://github.com/osama-ata/p6xer-mcp-server.git
cd p6xer-mcp-server

# Install with uv (recommended)
uv sync

# Or with pip
pip install "mcp[cli]>=1.6.0,<2.0.0" pyp6xer
```

---

## πŸƒ Running

**Development / MCP Inspector:**
```bash
uv run mcp dev src/p6xer_mcp_server/server.py
```

**Stdio (Claude Desktop / Claude Code):**
```bash
uv run p6xer-mcp-server
```

---

## πŸ”Œ Claude Desktop

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "p6xer": {
      "command": "uvx",
      "args": ["p6xer-mcp-server"]
    }
  }
}
```

Config file locations:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`

## πŸ”Œ Claude Code (CLI)

```bash
claude mcp add p6xer -- uvx p6xer-mcp-server
```

---

## πŸ’¬ Example Prompts

Once connected:

```
Parse project.xer and give me an overview of all projects

What are all the critical path activities, sorted by start date?

Run a DCMA schedule quality check on project.xer

Calculate earned value metrics β€” what are the CPI and SPI?

Show all resource assignments for "John Smith"

What are the predecessors and successors of activity A1000?

List all over-allocated labor resources

Generate an executive summary report for project.xer
```

---

## πŸ“Š Tool Reference

### Filter parameters (most tools accept)
- `project_id` – numeric P6 project ID (e.g. `"1234"`)
- `project_short_name` – project short name string (e.g. `"PROJ1"`)

### Status codes
`TK_NotStart` Β· `TK_Active` Β· `TK_Complete`

### Task types
`TT_Task` Β· `TT_Mile` Β· `TT_FinMile` Β· `TT_WBS`

### Resource types
`RT_Labor` Β· `RT_Mat` Β· `RT_Equip`

---

## πŸ—‚οΈ Project Structure

```
p6xer-mcp-server/
β”œβ”€β”€ src/
β”‚   └── p6xer_mcp_server/
β”‚       β”œβ”€β”€ __init__.py
β”‚       └── server.py       # All tools, resources, and prompts
β”œβ”€β”€ manifest.json           # MCPB bundle manifest
β”œβ”€β”€ mcp.json                # MCP registry metadata
β”œβ”€β”€ smithery.yaml           # Smithery registry configuration
β”œβ”€β”€ pyproject.toml
└── README.md
```

---

## πŸ“‹ Requirements

- Python β‰₯ 3.10
- `mcp[cli] >= 1.6.0, < 2.0.0`
- `pyp6xer >= 1.16.0`

---

## πŸ“„ License

MIT

---

## 🚒 Publishing to PyPI (GitHub Actions + Trusted Publishing)

This repository includes a release workflow at `.github/workflows/publish-to-pypi.yml` based on the PyPA guide and `pypa/gh-action-pypi-publish`.

### 1) Configure Trusted Publishers

Create trusted publishers for this exact workflow file:

- PyPI: https://pypi.org/manage/account/publishing/
- TestPyPI: https://test.pypi.org/manage/account/publishing/

Use these values:

- Owner: `osama-ata`
- Repository: `p6xer-mcp-server`
- Workflow file: `publish-to-pypi.yml`
- Environment: `pypi` (for PyPI), `testpypi` (for TestPyPI)
- Project name: `p6xer-mcp-server`

### 2) Create GitHub Environments

In repository settings, create two environments:

- `pypi`
- `testpypi`

Recommended security setup:

- Require manual approval for `pypi`
- No approval required for `testpypi`

### 3) Build locally (optional sanity check)

```bash
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
```

### 4) Release flow

- Push to `main`: publishes to TestPyPI
- Push tag `v*` (for example `v0.1.1`): publishes to PyPI

```bash
git tag v0.1.1
git push origin v0.1.1
```

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct aspect of Primavera P6 XER analysis: resource utilization, schedule quality, activity details, calendars, critical path, earned value, filters, relationships, assignments, resources, summary, WBS, and initial parsing. No overlapping purposes.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (e.g., analyze_resource_utilization, check_schedule_quality, get_activity_detail). The naming is predictable and clear.

Tool Count5/5

13 tools is well-scoped for a specialized domain like P6 XER file analysis. Each tool earns its place, covering parsing, activities, resources, schedules, EVM, and WBS without being excessive.

Completeness5/5

The tool surface covers the full analysis lifecycle: initial file parsing, detailed views of activities/resources/schedules, critical path, EVM, schedule quality, and summary. No obvious gaps for an analysis-oriented tool.

Maintenance

ActivityInactive
ResponsivenessNo issues