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
[](https://badge.fury.io/py/p6xer-mcp-server)
[](https://www.python.org/downloads/)
[](LICENSE)
[](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
```