{
  "markdown": "# P6XER MCP Server\n\nmcp-name: io.github.osama-ata/p6xer-mcp-server\n\n[![PyPI version](https://badge.fury.io/py/p6xer-mcp-server.svg)](https://badge.fury.io/py/p6xer-mcp-server)\n[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![MCP](https://img.shields.io/badge/MCP-compatible-green.svg)](https://modelcontextprotocol.io)\n\nA full-featured [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for **Primavera P6 XER** files, built on [PyP6XER](https://github.com/HassanEmam/PyP6Xer).\n\nExposes **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.\n\n---\n\n## 🚀 Features\n\n### 🔧 Tools (13)\n\n| Tool | Description |\n|------|-------------|\n| `parse_xer_file` | Parse an XER file — project list, totals, status breakdowns |\n| `get_project_activities` | Activities with filters: project_id, project_short_name, status, task_type |\n| `get_critical_path` | Critical path activities (float ≤ 0), sorted by early start |\n| `analyze_resource_utilization` | Planned/actual hours & costs per resource; over-allocation flags |\n| `check_schedule_quality` | DCMA-style check: missing logic, long durations, high float, unresourced tasks |\n| `get_resources` | List resources, optionally filtered by type |\n| `get_resource_assignments` | Resource–activity assignments with enriched names and costs |\n| `get_wbs` | Work Breakdown Structure hierarchy |\n| `get_relationships` | Predecessor/successor relationships enriched with task codes |\n| `get_calendars` | Calendar definitions with hours-per-period data |\n| `get_schedule_summary` | At-a-glance stats: counts, date range, critical count |\n| `get_earned_value` | EVM: PV, EV, AC, CV, SV, CPI, SPI, EAC per project |\n| `get_activity_detail` | Full detail for one activity (preds + succs + resources) |\n\n### 📋 Resources (3)\n\n| URI | Description |\n|-----|-------------|\n| `xer-project://{file_path}/{project_id}` | Detailed text summary of a specific project |\n| `xer-activities://{file_path}` | Activities summary with status breakdown and duration stats |\n| `xer-resources://{file_path}` | Resources summary with type breakdown and assignment stats |\n\n### 💬 Prompts (2)\n\n| Prompt | Types |\n|--------|-------|\n| `analyze_xer_project` | `general` · `schedule` · `resources` · `progress` · `quality` |\n| `xer_reporting_prompt` | `executive` · `detailed` · `critical_path` · `resource` · `milestone` |\n\n---\n\n## � Install from Store\n\n### Via PyPI (uvx — no install needed)\n```bash\nuvx p6xer-mcp-server\n```\n\n### Via PyPI (pip)\n```bash\npip install p6xer-mcp-server\np6xer-mcp-server\n```\n\n### Via Smithery\nSearch for `p6xer-mcp-server` on [smithery.ai](https://smithery.ai) and click Install.\nIt will generate the correct Claude Desktop config automatically.\n\n### Via GitHub MCP Registry\nThe server is listed in the GitHub MCP Registry. In Claude Code:\n```bash\nclaude mcp add p6xer -- uvx p6xer-mcp-server\n```\n\n### Claude Desktop config (after PyPI install)\n```json\n{\n  \"mcpServers\": {\n    \"p6xer\": {\n      \"command\": \"uvx\",\n      \"args\": [\"p6xer-mcp-server\"]\n    }\n  }\n}\n```\n\n---\n\n## �📦 Installation\n\n```bash\n# Clone the repo\ngit clone https://github.com/osama-ata/p6xer-mcp-server.git\ncd p6xer-mcp-server\n\n# Install with uv (recommended)\nuv sync\n\n# Or with pip\npip install \"mcp[cli]>=1.6.0,<2.0.0\" pyp6xer\n```\n\n---\n\n## 🏃 Running\n\n**Development / MCP Inspector:**\n```bash\nuv run mcp dev src/p6xer_mcp_server/server.py\n```\n\n**Stdio (Claude Desktop / Claude Code):**\n```bash\nuv run p6xer-mcp-server\n```\n\n---\n\n## 🔌 Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"p6xer\": {\n      \"command\": \"uvx\",\n      \"args\": [\"p6xer-mcp-server\"]\n    }\n  }\n}\n```\n\nConfig file locations:\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Linux**: `~/.config/Claude/claude_desktop_config.json`\n\n## 🔌 Claude Code (CLI)\n\n```bash\nclaude mcp add p6xer -- uvx p6xer-mcp-server\n```\n\n---\n\n## 💬 Example Prompts\n\nOnce connected:\n\n```\nParse project.xer and give me an overview of all projects\n\nWhat are all the critical path activities, sorted by start date?\n\nRun a DCMA schedule quality check on project.xer\n\nCalculate earned value metrics — what are the CPI and SPI?\n\nShow all resource assignments for \"John Smith\"\n\nWhat are the predecessors and successors of activity A1000?\n\nList all over-allocated labor resources\n\nGenerate an executive summary report for project.xer\n```\n\n---\n\n## 📊 Tool Reference\n\n### Filter parameters (most tools accept)\n- `project_id` – numeric P6 project ID (e.g. `\"1234\"`)\n- `project_short_name` – project short name string (e.g. `\"PROJ1\"`)\n\n### Status codes\n`TK_NotStart` · `TK_Active` · `TK_Complete`\n\n### Task types\n`TT_Task` · `TT_Mile` · `TT_FinMile` · `TT_WBS`\n\n### Resource types\n`RT_Labor` · `RT_Mat` · `RT_Equip`\n\n---\n\n## 🗂️ Project Structure\n\n```\np6xer-mcp-server/\n├── src/\n│   └── p6xer_mcp_server/\n│       ├── __init__.py\n│       └── server.py       # All tools, resources, and prompts\n├── manifest.json           # MCPB bundle manifest\n├── mcp.json                # MCP registry metadata\n├── smithery.yaml           # Smithery registry configuration\n├── pyproject.toml\n└── README.md\n```\n\n---\n\n## 📋 Requirements\n\n- Python ≥ 3.10\n- `mcp[cli] >= 1.6.0, < 2.0.0`\n- `pyp6xer >= 1.16.0`\n\n---\n\n## 📄 License\n\nMIT\n\n---\n\n## 🚢 Publishing to PyPI (GitHub Actions + Trusted Publishing)\n\nThis repository includes a release workflow at `.github/workflows/publish-to-pypi.yml` based on the PyPA guide and `pypa/gh-action-pypi-publish`.\n\n### 1) Configure Trusted Publishers\n\nCreate trusted publishers for this exact workflow file:\n\n- PyPI: https://pypi.org/manage/account/publishing/\n- TestPyPI: https://test.pypi.org/manage/account/publishing/\n\nUse these values:\n\n- Owner: `osama-ata`\n- Repository: `p6xer-mcp-server`\n- Workflow file: `publish-to-pypi.yml`\n- Environment: `pypi` (for PyPI), `testpypi` (for TestPyPI)\n- Project name: `p6xer-mcp-server`\n\n### 2) Create GitHub Environments\n\nIn repository settings, create two environments:\n\n- `pypi`\n- `testpypi`\n\nRecommended security setup:\n\n- Require manual approval for `pypi`\n- No approval required for `testpypi`\n\n### 3) Build locally (optional sanity check)\n\n```bash\npython -m pip install --upgrade build twine\npython -m build\npython -m twine check dist/*\n```\n\n### 4) Release flow\n\n- Push to `main`: publishes to TestPyPI\n- Push tag `v*` (for example `v0.1.1`): publishes to PyPI\n\n```bash\ngit tag v0.1.1\ngit push origin v0.1.1\n```\n",
  "bytes": 6737,
  "sha": "39f02e97c374af96a311fcce3268e5c043e03709b3f485e1604f09d06a461bc0",
  "repo_slug": "osama-ata/p6xer-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_osama_ata_p6xer_mcp_server_a185b3f5/readme"
}