Back to the catalog

p6xer MCP Server

An MCP server for Primavera P6 XER files.

Open source Open in the app JSON README (API)

About

An MCP server for Primavera P6 XER files.

Details

Kind
MCP servers
Topic
No topic detected
Publisher
osama-ata
Origin
official
Category
ferramentas
Transport
local
Version
0.1.3
Stars
10
Forks
5
Last push
2026-03-25T09:31:05Z
Repository state
ativo
Language
Python
License
MIT
Added
2026-08-29 04:00:58
Updated
2026-08-29 04:00:58
Origin id
io.github.osama-ata/p6xer-mcp-server

README

# 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
```

More