MCP server for pmcontrols: validated project scheduling and earned value tools for AI agents.
Project description
pmcontrols-mcp
An MCP server that exposes pmcontrols, the validated project scheduling and earned value library for Python, as tools for AI agents.
Agents asked to plan a project or report its status tend to generate the arithmetic themselves: a backward pass done by eye, an earned-value index inverted, an earned schedule mistaken for schedule variance. Generated project metrics fail silently. The calculation belongs in a deterministic, versioned, validated library that the agent calls, which leaves the agent to choose the analysis and explain the result.
Tools
| Tool | Purpose |
|---|---|
critical_path |
CPM forward and backward pass: ES, EF, LS, LF, slack, critical path |
schedule_risk |
PERT three-point analysis with a Monte Carlo completion distribution and criticality indices |
crash_schedule |
minimum-cost schedule compression to a deadline, solved as a linear program |
earned_value |
the full EVM indicator set with Lipke earned schedule, against a planned-value baseline |
earned_schedule |
the earned schedule for a given earned value |
Each tool returns the library's structured payload: named statistics, a tidy table, structured alerts, and provenance (library version, input hash, timestamp).
Installation
pip install pmcontrols-mcp
Or run it without installing, with uv:
uvx pmcontrols-mcp
Configuration
Add the server to your MCP client's configuration:
{
"mcpServers": {
"pmcontrols": {
"command": "pmcontrols-mcp"
}
}
}
The server communicates over stdio and works with any MCP-compatible client.
Example
Calling critical_path with a list of activities returns a structured
result the agent reads directly, instead of computing the schedule itself:
{
"method": "cpm",
"stats": {"project_duration": 15.0, "n_activities": 8.0, "n_critical": 5.0},
"meta": {
"critical_activities": ["A", "C", "E", "G", "H"],
"version": "0.1.0",
"input_hash": "sha256:...",
"computed_at": "2026-06-15T09:14:02+00:00"
},
"table": {"activity": ["A", "B", "..."], "slack": [0.0, 1.0, "..."]}
}
Every result carries provenance (library version, input hash, timestamp), so a figure an agent reports can be recomputed and audited later.
Design
The reasoning behind routing project-control arithmetic through a validated tool, rather than letting a model generate it, is set out in Project control is not a language task.
License
MIT. Written and maintained by Atakan Arikan, MSc Student at Tsinghua University and Politecnico di Milano.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pmcontrols_mcp-0.1.0.tar.gz.
File metadata
- Download URL: pmcontrols_mcp-0.1.0.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ad318519bf3ae72209bcd8747ff5fd90683d6e9d5db1de31700b4755ea78c4a
|
|
| MD5 |
2963a3049aae54b0cbbd7d550bc09b52
|
|
| BLAKE2b-256 |
98a0b191e66a2d9601d1faadfe0ceda3e4c4935d806a39b79b59b70a554fcaeb
|
Provenance
The following attestation bundles were made for pmcontrols_mcp-0.1.0.tar.gz:
Publisher:
release.yml on arikanatakan/pmcontrols-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pmcontrols_mcp-0.1.0.tar.gz -
Subject digest:
2ad318519bf3ae72209bcd8747ff5fd90683d6e9d5db1de31700b4755ea78c4a - Sigstore transparency entry: 1820418692
- Sigstore integration time:
-
Permalink:
arikanatakan/pmcontrols-mcp@24e536f57307d0ce30f1977df37b3d0e85a4f42c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/arikanatakan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@24e536f57307d0ce30f1977df37b3d0e85a4f42c -
Trigger Event:
push
-
Statement type:
File details
Details for the file pmcontrols_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: pmcontrols_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96eddeac23caffa92e50ef6427715b38438ec6b88163fbb196b54ac6fc6a7a57
|
|
| MD5 |
0627d340d827be2cec0bc6053cf19a00
|
|
| BLAKE2b-256 |
458617d517f8ff1b05fc58574f888dee3bbf6d6046ae8239a7553e437c37ae8e
|
Provenance
The following attestation bundles were made for pmcontrols_mcp-0.1.0-py3-none-any.whl:
Publisher:
release.yml on arikanatakan/pmcontrols-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pmcontrols_mcp-0.1.0-py3-none-any.whl -
Subject digest:
96eddeac23caffa92e50ef6427715b38438ec6b88163fbb196b54ac6fc6a7a57 - Sigstore transparency entry: 1820418714
- Sigstore integration time:
-
Permalink:
arikanatakan/pmcontrols-mcp@24e536f57307d0ce30f1977df37b3d0e85a4f42c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/arikanatakan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@24e536f57307d0ce30f1977df37b3d0e85a4f42c -
Trigger Event:
push
-
Statement type: