MCP server for reading OmniPlan (.oplx) and Microsoft Project (.mpp) schedule files
Project description
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 | Cross-process lock prevents conflicts when multiple Claude 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:
uv run (recommended)
{
"mcpServers": {
"omniplan": {
"command": "uv",
"args": [
"run",
"--directory", "/Users/yourusername/.local/share/omniplan-mcp",
"omniplan-mcp"
],
"env": {}
}
}
}
pip install (after PyPI publish)
{
"mcpServers": {
"omniplan": {
"command": "uvx",
"args": ["omniplan-mcp"],
"env": {}
}
}
}
Direct Python
{
"mcpServers": {
"omniplan": {
"command": "/path/to/python3",
"args": ["-m", "omniplan_mcp"],
"env": {
"PYTHONPATH": "/path/to/omniplan-mcp/src"
}
}
}
}
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 |
search_tasks |
Search tasks by keyword | filepath, keyword |
schedule_summary |
Phase overview and progress stats | filepath |
How It Works
.mpp file ──→ OmniPlan (AppleScript) ──→ .oplx (XML) ──→ MCP Server ──→ 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 AppleScript - Exports to
.oplxformat - Parses the exported XML
- Cleans up temporary files
A cross-process file lock prevents AppleScript conflicts when multiple Claude Code sessions run simultaneously.
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 / .oplx file parsing
│ └── lock.py # Cross-process file lock
└── 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
# Install build tools
pip install build twine
# Build
python -m build
# Upload to TestPyPI first
twine upload --repository testpypi dist/*
# Upload to PyPI
twine upload dist/*
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
Project details
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 omniplan_mcp-0.1.0.tar.gz.
File metadata
- Download URL: omniplan_mcp-0.1.0.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce028f02a88c531faadb24cf7897a9cb09115a91db89d523c792915628ac914a
|
|
| MD5 |
123ed1fb28b36efc249c235a146ecf7a
|
|
| BLAKE2b-256 |
cd511c38ecf0be060660437117355a44dd21aa2694b0a7864fc97d4baab6a4e6
|
Provenance
The following attestation bundles were made for omniplan_mcp-0.1.0.tar.gz:
Publisher:
publish.yml on cygnusyang/omniplan-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omniplan_mcp-0.1.0.tar.gz -
Subject digest:
ce028f02a88c531faadb24cf7897a9cb09115a91db89d523c792915628ac914a - Sigstore transparency entry: 1808178088
- Sigstore integration time:
-
Permalink:
cygnusyang/omniplan-mcp@2a46aa2e563c4a5d4fb517fe0827e8598338281b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/cygnusyang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2a46aa2e563c4a5d4fb517fe0827e8598338281b -
Trigger Event:
push
-
Statement type:
File details
Details for the file omniplan_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: omniplan_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.0 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 |
4efb45c4f5ad23f671c832e068f2c316c3f4a1adbd45e861a3eaaf95dd21943f
|
|
| MD5 |
2c85b33a4ec3708d2172512fc395cf5c
|
|
| BLAKE2b-256 |
a33b6bdc3c1fb8c0f283f72f3b888ae9cbbad92a5c3f37d7cc2c3247388fd520
|
Provenance
The following attestation bundles were made for omniplan_mcp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on cygnusyang/omniplan-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
omniplan_mcp-0.1.0-py3-none-any.whl -
Subject digest:
4efb45c4f5ad23f671c832e068f2c316c3f4a1adbd45e861a3eaaf95dd21943f - Sigstore transparency entry: 1808178100
- Sigstore integration time:
-
Permalink:
cygnusyang/omniplan-mcp@2a46aa2e563c4a5d4fb517fe0827e8598338281b -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/cygnusyang
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@2a46aa2e563c4a5d4fb517fe0827e8598338281b -
Trigger Event:
push
-
Statement type: