Omniplan Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Omniplan Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Drive [OmniPlan 4](https://www.omnigroup.com/omniplan) on macOS from Claude (or any MCP-compatible LLM agent) using natural language.
Tell an agent "create a milestone called Beta Launch under the Deployment group, link it after the QA-complete task, and assign it to Alice." It does. The Gantt redraws.
20 tools across tasks, dependencies, resources, assignments, and project metadata. MIT-licensed. macOS only.
Lineage: this build is inspired byxiahan4956/omniplan-mcp(MIT) — the originaljxa.pybridge is reused under MIT. The rest of the codebase was rebuilt from scratch (~86% of current LOC). It's distributed under a distinct PyPI name (mcp-omniplan-jtr) so as not to take the original author's namespace. SeeCHANGELOG.mdfor what changed.
| You say | The agent calls | OmniPlan reflects |
|---|---|---|
| "Show me incomplete tasks due this week" | query_tasks(due_before=…, completed=false) | filters the outline |
| "Create a 4-hour task 'Refactor login' under Auth" | create_task(parent_id, effort_seconds=14400) | new row in the Gantt |
| "Link 'Refactor login' before 'Run E2E'" | add_dependency(predecessor_id, successor_id, kind="FS") | dependency arrow drawn |
| "Assign Alice at 50%" | assign_resource(task_id, resource_id, units=0.5) | assignment chip on the bar |
| "Mark Beta Launch as a milestone, color green" | update_task(type="milestone", color="green") | diamond marker, green |
| "Save the document" | save_document() | written to disk |
This MCP is verified against the following builds. "Verified" = full pytest integration suite passes against that build inside a Tart macOS VM with OmniPlan running.
| OmniPlan version | Build | All tools? | Verified | Notes |
|---|---|---|---|---|
| 4.10.3 test | v232.5.9 (e7066d2251) | ✅ All 22 tools | 2026-05-07 | Test build from <https://omnistaging.omnigroup.com/omniplan/>. Adds task.move / resource.move — Ken Case (Omni Group) shipped these in May 2026 in response to OG ticket #3107771 |
| 4.10.2 | 232.5.0 | ✅ Except move_task / move_resource | 2026-05-01 | Public release. The two move tools raise a clear "requires 4.10.3+" error; everything else works including all reads, writes, dependencies, resource assignments, and cost_per_use |
| 4.10.0–4.10.1 | (older 4.10.x patch builds) | Likely yes for non-move tools | Inferred (untested) | Should work — same omniJS surface as 4.10.2 for the tools we use, but not empirically verified |
| 4.9.x and older | — | Unknown | Untested | Not part of the supported matrix |
Reporting a version compatibility issue: if you find a build where a tool fails that the matrix says should work, please file an issue with the build number (visible in OmniPlan → About OmniPlan) and the tool name.
Pick whichever you prefer:
# 1. Homebrew tap (Python deps bundled in an isolated venv; only [email protected] comes from brew)
brew tap johntrandall/tap
brew install mcp-omniplan-jtr# 2. uv tool (recommended for the MCP ecosystem; installs from PyPI)
uv tool install mcp-omniplan-jtr# 3. pip (if you don't have uv)
pip install mcp-omniplan-jtrAll three install the mcp-omniplan-jtr command. Register it as an MCP server with whichever client you use:
claude mcp add -s user omniplan-local mcp-omniplan-jtrThen restart Claude Code.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"omniplan-local": {
"command": "mcp-omniplan-jtr"
}
}
}Then restart Claude Desktop.
The first time the agent calls a tool, macOS may prompt for Automation access. Approve OmniPlan automation for your terminal or the app running the MCP server. If the prompt was missed, grant it manually:
System Settings → Privacy & Security → Automation — enable OmniPlan for your terminal or MCP host.
If denied, every tool returns a clear error: "macOS blocked Automation access to OmniPlan. Grant permission in System Settings > Privacy & Security > Automation."
| Tool | What it does |
|---|---|
list_documents | List all currently open OmniPlan documents |
query_tasks | Search and filter tasks by keyword, type, completion, color, or date range |
find_task | Look up tasks by title; substring by default, exact opt-in |
get_task | Get full details of a task by ID |
create_task | Create a new task under a parent task or project root |
create_tasks | Bulk-create many tasks in a single round-trip; supports intra-batch parent references |
update_task | Update title, note, dates, completion, color, effort, three-point estimates, constraint dates |
move_task | Reparent a task while preserving its uniqueID (so dependencies and assignments survive). Requires OmniPlan 4.10.3+ |
delete_task | Delete a task by ID |
add_dependency | Link two tasks (FS / SS / FF / SF, optional lead time) |
remove_dependency | Remove the dependency between two tasks |
list_dependencies | List dependencies in the document (or filtered to one task) |
save_document | Save the front document to disk |
get_project_info | Project metadata: name, path, dates, scenarios |
update_project | Update project-level fields (currently start date) |
list_resources | List all resources |
create_resource | Create a resource (staff / equipment / material / group) |
move_resource | Reparent a resource (across the resource group hierarchy) while preserving its uniqueID. Requires OmniPlan 4.10.3+ |
delete_resource | Delete a resource by ID |
assign_resource | Assign a resource to a task with optional units fraction |
unassign_resource | Remove a resource assignment from a task |
list_assignments | List a task's resource assignments |
All tools accept an optional document_name parameter. If omitted, the frontmost open document is used.
"Show me all incomplete tasks due this week in my project."
"Create a milestone called 'Beta Launch' under the Deployment group, dependent on 'QA-complete', and assign it to Alice at 50%."
"Mark task 42 as complete and set its bar color to green."
"What tasks are assigned the red color?"
"List every resource and how much they're allocated across the project."
A few small omniJS edges. Per-version availability is in the supported-versions matrix above; this section names what's currently outside the omniJS surface entirely.
actual.rootResource.schedule is opaque on the omniJS surface.actual.currency) is not writable — writes via omniJS don't persist across calls. Cost values themselves work; just not the currency unit.For per-release detail and verification status, see CHANGELOG.md.
For the full catalogue (and the mitigations), see dev-docs/omnijs-persistence-gaps.md.
If you want to extend, hack on, or contribute to this MCP:
dev-docs/README-DEV.mddev-docs/ROADMAP.mddev-docs/testing-policy.mddev-docs/vm-provisioning.mdSibling OmniPlan tooling in the same workflow:
oplx-tools — Python toolkit for OmniPlan .oplx documents: generate, lint, parse. Useful when you want to build a Gantt from a database or CI pipeline rather than the GUI.oplx-format — Community-maintained file-format specification for .oplx documents (verified against OmniPlan 4.10.2). Reference doc that informed both oplx-tools and the e2e XML cross-checks in this MCP's test suite.MIT. See LICENSE.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.