MCP server for Microsoft Project: no Java, no Project install. Critical-path engine, DCMA 14-point assessment, verified writes, and a BIM 4D bridge.
git clone https://github.com/HorizunGroup/horizun-msproject-mcpMCP Servers overview
# Horizun Project MCP
[](https://github.com/HorizunGroup/horizun-msproject-mcp/actions/workflows/ci.yml)
**An MCP server for Microsoft Project that needs neither Java nor Microsoft Project — and tells you
the truth about what it wrote.**
<!-- mcp-name: io.github.HorizunGroup/horizun-msproject-mcp -->
<!-- The registry verifies ownership by finding that name in the published package's README.
It has to travel inside the NuGet package, which is why it lives here rather than in a
metadata file. -->
Point any MCP client at a `.mpp`, a Primavera `.xer`, or an MSPDI `.xml` and ask real questions:
where the critical path runs, which resources are overbooked, whether the schedule would survive a
DCMA audit, what a two-week slip actually does to the finish date. Then write changes back — and
know which ones landed, because every one is re-read from the model before it is reported.
```bash
dotnet tool install -g HorizunMsProjectMcp
```
That is the whole install. No JVM. No Microsoft Project. No licence. It reads and schedules on
its own.
[](https://www.nuget.org/packages/HorizunMsProjectMcp)
---
## Why this one
There are a handful of Microsoft Project MCP servers. Every one of them requires Java, or a
licensed Microsoft Project install, or a paid JDBC driver — and on the machine this was built on,
**none of them would start**. Seven things here are not available anywhere else:
| | |
|---|---|
| **Zero prerequisites** | A single .NET binary. MPXJ is compiled to .NET through IKVM, so there is no JVM anywhere in the picture, and no Microsoft Project either. |
| **Verified writes** | Microsoft Project silently ignores writes all the time — auto-scheduled dates, hard constraints, summary rollups, calculated costs. Nothing here is reported as applied until it has been read back out of the model and matched. |
| **DCMA 14-point assessment** | The industry standard for judging whether a schedule can be run on. The Primavera servers implement it; none of the Microsoft Project ones do. Check 12 genuinely injects a 600-day delay and measures what moves. |
| **It recovers logic nobody linked** | A schedule laid out correctly on the bar chart but never linked is the most common defect there is: DCMA flags it, nothing fixes it. The dates already state the order — this reads it back out, verifies the same order holds across every repetition, and proposes the missing links. |
| **Reprogramming that is measured** | Recovery options are applied to a copy of the schedule, rescheduled, and reported with the finish date they actually produce. An option that recovers nothing says so instead of being offered as advice. |
| **It learns from your past projects** | Point it at finished schedules and it reports what each activity really took and what usually precedes it, then drafts a new programme from that — one task per unit, sequenced the way the trades actually followed each other. |
| **A BIM bridge** | Tie schedule tasks to model elements by code, turn measured quantities into duration proposals, and emit the per-element dates that drive 4D in Navisworks and the progress dashboard in Power BI. Nobody else does this at all. |
---
## The 25 tools
**Session** — `project_health` · `project_open` · `project_save`
`project_health` is a doctor, not a ping. It detects Microsoft Project, tests whether its COM server
*actually starts*, and when it does not, hands back the HRESULT diagnosis and the repair steps. That
is not hypothetical: this machine hit `CO_E_SERVER_EXEC_FAILURE` with a perfectly valid registration,
and step one of the repair path it emits is what fixed it.
**Reading** — `project_info` · `tasks_query` · `links_query` · `resources_query` · `timephased_query`
Filtered, paged, field-selectable. Tasks are addressed by their stable `uid`; the row `id` is display
only, because it shifts the moment a task is inserted and addressing by it edits the wrong task.
**Analysis** — `schedule_analyze` · `schedule_qa` · `baseline_compare`
Computed server-side, so the agent asks a question instead of pulling two thousand tasks into
context. Critical path, float distribution, driving path, day-by-day overallocation, DCMA-14, and
full earned value (BCWS/BCWP/ACWP, SPI, CPI, EAC, TCPI) — denominated in cost where the schedule
carries costs, in work hours where it carries hours, and weighted by duration where it carries
neither, which is most of them. The report says which.
**Writing** — `tasks_write` · `links_write` · `resources_write` · `calendars_write` · `schedule_update`
Batched, typed, verified. Cycles are refused before they are applied, with the offending chain named.
Two things this backend cannot do are not offered: reordering a task within the outline, and editing
a calendar's weekly working-hours pattern. Asking for either gets a refusal that names it and says
where to do it instead — an operation that half-works is worse than one that is absent.
**Planning** — `schedule_recovery` · `schedule_target` · `schedule_sequence` · `schedule_learn` · `schedule_generate`
Reprogramming, measured rather than asserted. `schedule_recovery` finds what is late, ranks it by
how much of the schedule sits behind it, then tries each recovery lever — removing lag on the
driving chain, overlapping hand-offs, compressing the longest critical tasks — on a throwaway copy
and reports the finish date each one genuinely produces. `schedule_target` tests a date you have
been handed and names the work the network does not hold in place. `schedule_sequence` recovers the
logic a schedule is missing by reading the order its own dates already state — the planner laid the
work out correctly and never linked it, and that decision is recoverable. `schedule_learn` mines finished
schedules for how long each activity actually takes and what usually comes before it;
`schedule_generate` turns that into a first draft, one task per apartment or floor, sequenced the
way the history says the trades follow each other.
Feed `schedule_learn` a model export alongside the schedules and it measures **productivity** —
what a crew actually got through in a day — by joining quantities to tasks on the shared code.
`schedule_generate` then sizes durations from the quantities of the new project rather than
copying a remembered duration, because the rate is what carries between projects and the quantity
is what changes. Give one export per schedule, in the same order: rates are measured per project,
and quantities totalled across projects would inflate every one of them.
A draft can only be as well sequenced as the schedules it learned from. Where the sources link each
activity to itself unit after unit but never to the trades around it, both tools say so and name the
number: the library reports how many activities learned a predecessor other than themselves, and the
draft reports how many trades it left with nothing scheduled before them.
**Interop** — `project_export` · `project_import` · `bim_link` · `bim_sync`
CSV, JSON, MSPDI, Primavera XER and PMXML, native `.mpp`, and a shaped Power BI dataset. Imports
plan before they write.
### What it costs to have loaded
The 25 tools present about **8,400 tokens** of schema, in every prompt, for as long as the server is
connected. That is the honest price of the surface and it is worth knowing before choosing to carry
it. It is also why the surface stayed at 25: the largest alternative ships 79 tools, and past a
point an agent cannot hold the surface in its head well enough to choose correctly within it.
---
## The two contracts
**Nothing is applied until it is verified.**
```jsonc
{
"applied": 12, // operations that fully succeeded, re-read from the model
"fieldsVerified": 31,
"rejected": [{
"uid": 45, "field": "finish",
"requested": "2026-09-10", "actual": "2026-09-14",
"reason": "'finish' is calculated from the task's duration and its predecessors. Change the
duration or the logic, or set a constraint, rather than writing the date."
}],
"impact": {
"tasksMoved": 312,
"projectFinishBefore": "2027-03-14", "projectFinishAfter": "2027-03-28",
"criticalPathChanged": true, "newNegativeFloat": 8
},
"verifiedBy": "reread"
}
```
**A dry run is a real simulation.** `dryRun: true` deep-copies the schedule, applies the batch,
reschedules it with the critical-path engine, measures the difference, and throws the copy away.
The impact numbers are observed, not predicted.
---
## Capability honesty
`project_health` publishes a capability matrix, and the tools honour it. Two things stay `false` on
the file backend and **refuse rather than approximate**:
- **`write_native_mpp`** — no library can author the binary format. Where Microsoft Project is
installed, the save is delegated to it and you get a genuine `.mpp`; where it is not, you get
MSPDI and an explanation.
- **`level_resources`** — Microsoft Project's levelling heuristic is unpublished. Any imitation
would be a different answer wearing the same name.
Saving over a baseline that already holds data is refused too, unless you ask for it explicitly.
A baseline is the record of the original plan that every variance is measured against, and it
cannot be recovered from the file afterwards.
Everything else — scheduling, recalculation, dry-run simulation, rescheduling incomplete work, the
DCMA Critical Path Test — is served by this server's own critical-path engine and works on both
backends.
## The critical-path engine — and what it is not
MPXJ reads and writes schedule files but does not *schedule* them: a task created through it has no
dates at all. So there is a real CPM engine here — forward pass, backward pass, total and free
float, critical flags — honouring relationship types, lag, constraints, deadlines, actual dates, anWhat people ask about horizun-msproject-mcp
What is HorizunGroup/horizun-msproject-mcp?
+
HorizunGroup/horizun-msproject-mcp is mcp servers for the Claude AI ecosystem. MCP server for Microsoft Project: no Java, no Project install. Critical-path engine, DCMA 14-point assessment, verified writes, and a BIM 4D bridge. It has 0 GitHub stars and was last updated today.
How do I install horizun-msproject-mcp?
+
You can install horizun-msproject-mcp by cloning the repository (https://github.com/HorizunGroup/horizun-msproject-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is HorizunGroup/horizun-msproject-mcp safe to use?
+
HorizunGroup/horizun-msproject-mcp has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains HorizunGroup/horizun-msproject-mcp?
+
HorizunGroup/horizun-msproject-mcp is maintained by HorizunGroup. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to horizun-msproject-mcp?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy horizun-msproject-mcp to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/horizungroup-horizun-msproject-mcp)<a href="https://claudewave.com/repo/horizungroup-horizun-msproject-mcp"><img src="https://claudewave.com/api/badge/horizungroup-horizun-msproject-mcp" alt="Featured on ClaudeWave: HorizunGroup/horizun-msproject-mcp" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!