OmniPlan MCP Server
Enables Claude to read and analyze project schedule files in OmniPlan (.oplx) and Microsoft Project (.mpp) formats, answering questions about tasks, milestones, resources, and progress.
README
<p align="center"> <img src="https://img.shields.io/badge/macOS-required-blue" alt="macOS"> <img src="https://img.shields.io/badge/python-โฅ3.10-blue" alt="Python"> <img src="https://img.shields.io/badge/license-MIT-green" alt="License"> <img src="https://img.shields.io/github/v/release/cygnusyang/omniplan-mcp" alt="Release"> </p>
OmniPlan MCP Server
A Model Context Protocol (MCP) server that lets Claude read and analyze project schedule files โ OmniPlan (.oplx) and Microsoft Project (.mpp) formats.
Ask Claude questions like:
- "What's the current project schedule?"
- "List all milestones and their dates"
- "Show me tasks related to the robotic arm"
- "What's the overall progress percentage?"
Features
| Feature | Description |
|---|---|
| ๐ Read .mpp | Parse Microsoft Project files via OmniPlan bridge |
| ๐ Read .oplx | Direct XML parsing (no OmniPlan needed) |
| ๐๏ธ Full hierarchy | Groups, tasks, milestones with dates and progress |
| ๐ Search | Find tasks by keyword across the entire schedule |
| ๐ค Resources | List all human resources and assignments |
| ๐ Summary | Phase overview, progress statistics, timeline |
| ๐ Safe concurrency | Direct AppleScript reading avoids temp-file conflicts when multiple sessions run |
Prerequisites
| Requirement | Notes |
|---|---|
| macOS | Required (for AppleScript/OmniPlan bridge) |
| Python 3.10+ | For running the MCP server |
| OmniPlan | Only needed for .mpp files; .oplx works without it |
Install OmniPlan (optional โ only for .mpp files)
brew install --cask omniplan
First run: macOS may prompt for Accessibility/Automation permissions when OmniPlan is called via AppleScript. Grant them in System Settings โ Privacy & Security โ Automation.
Quick Start
1. Install
# Option A: One-line installer (recommended)
curl -fsSL https://raw.githubusercontent.com/cygnusyang/omniplan-mcp/main/install.sh | bash
# Option B: Manual clone
git clone https://github.com/cygnusyang/omniplan-mcp.git
cd omniplan-mcp
pip install -e .
2. Configure Claude Code
Add to your ~/.claude/settings.json:
<details> <summary><b>uv run (recommended)</b></summary>
{
"mcpServers": {
"omniplan": {
"command": "uv",
"args": [
"run",
"--directory", "/Users/yourusername/.local/share/omniplan-mcp",
"omniplan-mcp"
],
"env": {}
}
}
}
</details>
<details> <summary><b>pip install (after PyPI publish)</b></summary>
{
"mcpServers": {
"omniplan": {
"command": "uvx",
"args": ["omniplan-mcp"],
"env": {}
}
}
}
</details>
<details> <summary><b>Direct Python</b></summary>
{
"mcpServers": {
"omniplan": {
"command": "/path/to/python3",
"args": ["-m", "omniplan_mcp"],
"env": {
"PYTHONPATH": "/path/to/omniplan-mcp/src"
}
}
}
}
</details>
3. Restart Claude Code
The MCP server will start automatically. You can now ask Claude about your project files!
Usage Examples
Read a project schedule
ไฝ ๏ผๅธฎๆ่ฏปๅ PLB1011 ้กน็ฎ่ฎกๅ๏ผ็็ๆๅชไบ้ถๆฎต
Claude๏ผ่ฐ็จ read_schedule โ ๆพ็คบๅฎๆดไปปๅกๆ
List milestones
ไฝ ๏ผๅๅบๆๆ้็จ็ข่็น
Claude๏ผ่ฐ็จ list_milestones โ ๆพ็คบๆๆ โ ้็จ็ข
Search for tasks
ไฝ ๏ผๆ็ดขๆๆๅ
ณไบ"ๆบๆขฐ่"็ไปปๅก
Claude๏ผ่ฐ็จ search_tasks โ ๆพ็คบๅน้
็ไปปๅกๅ่กจ
Project summary
ไฝ ๏ผ่ฟไธช้กน็ฎ็ๆดไฝ่ฟๅบฆๆไนๆ ท๏ผ
Claude๏ผ่ฐ็จ schedule_summary โ ๆพ็คบ้ถๆฎตๆฆ่งๅ่ฟๅบฆ็ป่ฎก
Tools Reference
| Tool | Description | Parameters |
|---|---|---|
read_schedule |
Full task hierarchy with dates and progress | filepath (required), format: tree/flat/json |
list_milestones |
All milestone tasks | filepath |
list_resources |
All human resources | filepath, detail: simple/full |
search_tasks |
Search tasks by keyword | filepath, keyword |
schedule_summary |
Phase overview and progress stats | filepath |
get_task_detail |
Detailed info about a specific task | filepath, task_id or task_name |
get_resource_detail |
Detailed info about a specific resource | filepath, resource_name |
list_violations |
All scheduling conflicts/violations | filepath |
list_assignments |
All resource-to-task assignments | filepath |
list_dependencies |
All task dependency relationships | filepath |
get_schedule_settings |
Scheduling granularity & working hours | (reads active OmniPlan document) |
evaluate_omniplan_script |
Run Omni Automation JS in OmniPlan | script (JavaScript code) |
export_schedule |
Export schedule to various formats | filepath, format (optional), output_path (optional) |
lookup_task |
Find task by name, get its numeric ID | search_name |
set_task_completed |
Set task to 100% complete | task_id, include_subtree |
set_task_completed_by_name |
Set task to 100% complete by name | task_name, include_subtree |
add_dependency |
Add finish-to-start dependency | dependent_task_id, prerequisite_task_id |
remove_dependency |
Remove a dependency | dependent_task_id, prerequisite_task_id |
set_task_duration |
Change task duration | task_id, duration_seconds |
clear_constraint_date |
Remove locked start date | task_id |
rename_task |
Rename a task | task_id, new_name |
delete_task |
Delete a task and its children | task_id |
add_task |
Add a new task under a parent | parent_task_id, task_name, duration_seconds (optional) |
save_document |
Save the OmniPlan document | (none) |
New in v0.4.0
- 12 new write-operation tools โ Now you can modify schedules directly from Claude:
lookup_taskโ Find any task by name to get its numeric IDset_task_completed/set_task_completed_by_nameโ Mark tasks as 100% completeadd_dependency/remove_dependencyโ Manage task dependencies (prerequisites)set_task_durationโ Adjust task durationsclear_constraint_dateโ Remove locked/constraint datesrename_task/delete_task/add_taskโ Structure editingsave_documentโ Persist changes to disk
- Bug fixes: .oplx parsing now prefers Actual.xml (fixes stale backup reads), outline_depth computed from hierarchy, percent-complete derived from effort-done/effort ratio, task_status computed for .oplx tasks, evaluate_javascript quotes properly escaped
- Parser robustness: build_task_tree handles both string and integer parent_ids
How It Works
.mpp file โโโ OmniPlan (AppleScript direct read) โโโ pipe-delimited records โโโ Claude
โ
.oplx file โโโโโโโโโโโโโโโโดโโโ direct XML parsing โโโโโโโ
For .oplx files
Direct XML parsing โ fast, no external dependencies.
For .mpp files
- MCP server opens the
.mppfile in OmniPlan via the macOSopencommand - Reads all project data (tasks, resources, dates, progress) directly from OmniPlan's in-memory object model via AppleScript
- Parses the pipe-delimited output into structured records
- Closes the document
No temporary files are created โ data is read directly from OmniPlan's in-memory model.
Project Structure
omniplan-mcp/
โโโ install.sh # One-click installer
โโโ pyproject.toml # Package metadata (PyPI-ready)
โโโ README.md # This file
โโโ LICENSE # MIT license
โโโ .gitignore
โโโ src/
โ โโโ omniplan_mcp/
โ โโโ __init__.py # Package version
โ โโโ __main__.py # CLI entry point
โ โโโ server.py # MCP server (tools & handlers)
โ โโโ parser.py # .mpp (AppleScript) / .oplx (XML) parsing
โโโ tests/
โโโ test_parser.py # Unit tests
Development
# Clone
git clone https://github.com/cygnusyang/omniplan-mcp.git
cd omniplan-mcp
# Install in editable mode
pip install -e .
# Run tests
python -m pytest tests/
# Run the server directly (stdio)
python -m omniplan_mcp
Publishing to PyPI
Published automatically via GitHub Actions (Trusted Publisher) when a tag is pushed:
git tag v0.1.0
git push origin v0.1.0
Manual build (for testing):
pip install build
python -m build
Requirements
- Python 3.10+
- macOS (for OmniPlan AppleScript bridge)
- OmniPlan (only for
.mppfiles; optional for.oplx)
Limitations
.mppparsing requires OmniPlan to be installed- Only supports macOS (AppleScript dependency)
- Does not modify
.mppfiles โ read-only
License
MIT License โ see LICENSE for details.
Related
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.