PyP6Xer MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| API_KEY | No | A secret key used to enable and enforce authentication for self-hosted deployments. | |
| AI_MODEL | No | The specific AI model to use (default: gpt-4o-mini). Required if using a non-default model like 'claude-3-5-sonnet-20240620'. | |
| OPENAI_API_KEY | No | API key for OpenAI models. Used by the server for AI-assisted analysis features or when running the full stack. | |
| ANTHROPIC_API_KEY | No | API key for Anthropic models. Required if using Claude/Anthropic models for analysis. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pyp6xer_get_activity_schemaA | Return the available field names for activity read tools. Use the returned field names with the summary_fields are available on list_activities and search_activities. detail_fields are only available on get_activity (they require fetching relationships and resources which are not on the list view). |
| pyp6xer_load_fileA | Load a Primavera P6 XER file into the analysis cache. Accepts a local file path, an HTTP/HTTPS URL, or a base64-encoded string of the file's binary content. The loaded data is stored under cache_key so multiple schedules can be open simultaneously. |
| pyp6xer_clear_cacheA | Remove one or all loaded XER files from the cache. |
| pyp6xer_get_upload_urlA | Get instructions for uploading an XER file to this server. Since this is a local server, files are loaded directly via pyp6xer_load_file using a local path or URL. |
| pyp6xer_list_projectsA | List all projects in the loaded XER file with summary statistics. Returns project IDs, names, data date, finish date, activity counts, and high-level cost and schedule metrics. |
| pyp6xer_list_activitiesB | List activities with optional filtering and pagination. |
| pyp6xer_get_activityA | Get full details for a single activity including dates, float, costs, resources assigned, and predecessor/successor relationships. |
| pyp6xer_search_activitiesA | Search activities by name or activity ID (case-insensitive substring match). |
| pyp6xer_list_resourcesA | List all resources with assignment counts and cost/quantity totals. |
| pyp6xer_list_calendarsA | List all calendars defined in the XER file. Returns calendar name, type (global/project/resource), hours per day/week/year, and whether it is the project default. |
| pyp6xer_critical_pathA | Return all activities on the critical path (total float ≤ 0 or longest path flag). Activities are sorted by early start date. Includes float, dates, and predecessor/successor counts. |
| pyp6xer_float_analysisA | Analyse total float distribution across activities. Groups activities into float buckets and flags near-critical activities. |
| pyp6xer_schedule_qualityB | Run DCMA-style schedule quality checks. Checks include:
|
| pyp6xer_schedule_health_checkA | Generate a composite schedule health score with narrative summary. Combines data date currency, float distribution, critical path density, open ends, and constraint usage into a single 0–100 health score. |
| pyp6xer_slipping_activitiesA | Find activities that are running late (forecast finish > baseline finish). |
| pyp6xer_lookaheadA | Return activities active within the next N days from the data date. An activity is included if: finish >= data_date AND start <= data_date + days_ahead. This covers in-progress activities and those starting in the window. |
| pyp6xer_relationship_analysisA | Analyse relationship types, lag/lead distribution, and logic density. Reports counts by type (FS/SS/FF/SF), lag distribution, and activities with no logic ties. |
| pyp6xer_resource_utilizationA | Summarise resource loading: planned vs actual vs remaining quantities and costs. |
| pyp6xer_wbs_analysisA | Return the WBS hierarchy with task counts and cost rollups per node. Shows each WBS element's direct and total (rolled-up) activity counts, schedule range, and cost summary. |
| pyp6xer_work_package_summaryA | Summarise leaf-level WBS nodes (work packages) with schedule and cost data. Leaf nodes are WBS elements with no children — the lowest level of the breakdown. |
| pyp6xer_progress_summaryA | Summarise schedule progress: status breakdown, percent complete, milestones. Returns counts by status, weighted percent complete, and milestone statistics. |
| pyp6xer_earned_valueA | Calculate Earned Value Management (EVM) metrics. Metrics:
|
| pyp6xer_generate_reportA | Assemble a complete monthly progress report dataset. Returns structured metrics: progress %, health score, slipping activities, critical path density, and earned value. Use this data to write a monthly narrative with sections: Executive Summary, Schedule Status, Critical Path & Risks, and Outlook. |
| pyp6xer_export_csvA | Export activities to CSV format (returned as a string). |
| pyp6xer_compare_snapshotsA | Compare two loaded XER files (snapshots) to identify schedule changes. Reports added, removed, and changed activities (dates, duration, float, status). Useful for analysing schedule updates between periods. |
| pyp6xer_update_activityA | Update fields on a single activity in the in-memory cache. Changes are held in memory until pyp6xer_write_file is called. Updatable fields:
|
| pyp6xer_batch_updateA | Update multiple activities in a single call. |
| pyp6xer_write_fileA | Write the current (possibly modified) schedule back to a .xer file. Serialises the raw table data (including any updates from pyp6xer_update_activity or pyp6xer_batch_update) and writes to the specified path. |
| pyp6xer_export_xerA | Export the current (possibly modified) schedule as base64-encoded XER bytes. Returns serialised XER content encoded as base64 so callers can offer a file download without requiring a writable local path on the server. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Several tools overlap in purpose: schedule_health_check consolidates float/critical path/open-end data, generate_report bundles slipping activities/health/earned value, and work_package_summary overlaps with wbs_analysis. The descriptions help, but an agent could easily select the wrong analysis or report tool for a given request.
All tools use a consistent pyp6xer_ prefix and snake_case, with clear list/get/search/update/export verbs for operations. A minority of analysis tools use noun-style names such as critical_path, float_analysis, and earned_value, but the overall pattern remains readable and predictable.
At 29 tools, the surface is dense and exceeds the 25-tool threshold. Many narrow analysis/report variants could be consolidated without losing capability, and the large count increases the chance of an agent picking a redundant tool.
The domain is well covered: loading files, listing projects/calendars/resources/activities, searching, detailed activity views, WBS/earned value/float/critical path/quality analyses, snapshot comparison, and update/write/export workflows are all present. The main gap is that modification is limited to activity fields, with no create/delete or relationship/resource editing.