π§ Work in Progress: This project is under active development.
A Model Context Protocol (MCP) server for org-mode knowledge management. Provides search, content access, and note linking capabilities for your org-mode files through the MCP protocol.
org://β List all org-mode files in configured directoriesorg://{file}β Access raw content of{file}org-outline://{file}β Get hierarchical structure of{file}as JSONorg-heading://{file}#{heading}β Access specific headings by pathorg-id://{id}β Find content by org-mode ID propertiesorg-agenda://β List all agenda items and tasksorg-agenda://todayβ Today's scheduled agenda itemsorg-agenda://weekβ This week's scheduled agenda itemsorg-agenda://day/{YYYY-MM-DD}β Agenda for a specific dayorg-agenda://week/{N}β Agenda for week number Norg-agenda://month/{N}β Agenda for month number Norg-agenda://query/from/{YYYY-MM-DD}/to/{YYYY-MM-DD}β Custom date range
org-file-listβ List all org files in configured directoriesorg-searchβ Full-text fuzzy search across all org filesorg-agendaβ Query agenda items with filtering by dates, states, tags, and prioritiesorg-captureβ Append a heading to an org file. Supports TODO state, priority, tags, body, SCHEDULED/DEADLINE/CLOSED timestamps (with repeater and warning suffixes), property drawer entries, and datetree expansion.org-update-todoβ Update an existing heading in place. Set or clear todo_state, priority, tags, planning timestamps, heading title, body text, and property drawer entries (per-key upsert/remove).
This repository ships skills for Claude Code, Codex, Cursor, and OpenCode that guide agents to use the MCP server effectively.
| Skill | Purpose |
|---|---|
org-agenda |
Query agenda items by date, state, priority, and tags |
org-search |
Search and browse org files and headings |
org-capture |
Create new headings, tasks, and journal entries |
org-update-todo |
Update TODO state, title, body, properties, and timestamps |
claude plugin install github:szaffarano/org-mcp-serverOr add to .claude/settings.json:
{ "plugins": ["github:szaffarano/org-mcp-server"] }Add to your plugin configuration using .codex-plugin/plugin.json or
.cursor-plugin/plugin.json from this repository.
{ "plugin": ["org-mcp-server@git+https://github.com/szaffarano/org-mcp-server.git"] }See .opencode/INSTALL.md for full setup instructions.
Download the latest pre-built binaries from GitHub Releases:
curl -LO https://github.com/szaffarano/org-mcp-server/releases/latest/download/org-mcp-server-x86_64-unknown-linux-gnu.tar.gz
tar xzf org-mcp-server-x86_64-unknown-linux-gnu.tar.gz
sudo mv org-mcp-server /usr/local/bin/Binaries are available for Linux, macOS, and Windows. Check the releases page for all targets.
cargo install org-mcp-server --locked
cargo install org-cli --lockednix run github:szaffarano/org-mcp-server # run directly
nix profile install github:szaffarano/org-mcp-server # install to profile
nix develop github:szaffarano/org-mcp-server # development shellgit clone https://github.com/szaffarano/org-mcp-server
cd org-mcp-server
cargo build --releaseAdd to your AI agent configuration (e.g., ~/.claude.json, opencode.json):
{
"mcpServers": {
"org-mode": {
"command": "/path/to/org-mcp-server",
"args": [],
"env": {
"ORG_ORG__ORG_DIRECTORY": "/path/to/your/org/files"
}
}
}
}Or via Nix:
{
"mcpServers": {
"org-mode": {
"command": "nix",
"args": ["run", "github:szaffarano/org-mcp-server"]
}
}
}Config file: ~/.config/org-mcp/config.toml (or $XDG_CONFIG_HOME/org-mcp/config.toml).
[org]
org_directory = "~/org/"
org_default_notes_file = "notes.org"
org_agenda_files = ["agenda.org", "projects.org"]
org_todo_keywords = ["TODO", "|", "DONE"]
# Auto-prepend :CREATED: property on capture (default: true)
org_auto_created_property = true
# Auto-stamp CLOSED on done transitions (default: true)
org_auto_closed_timestamp = true
[logging]
level = "info"
file = "~/.local/share/org-mcp-server/logs/server.log"
[cli]
default_format = "plain" # plain | jsonConfiguration is resolved in order: CLI flags β environment variables (ORG_ prefix,
__ separator, e.g. ORG_ORG__ORG_DIRECTORY) β config file β defaults.
org-cli config init # create default config file
org-cli config show # display current resolved config
org-cli config path # show config file locationorg-cli mirrors the MCP server's capabilities for scripting and testing.
Run org-cli --help or org-cli <subcommand> --help for full usage.
Quick examples:
# Search across all org files
org-cli search "project planning"
# Agenda
org-cli agenda today
org-cli agenda list --states TODO,IN_PROGRESS --tags work
# Capture a TODO with planning
org-cli capture "Fix login bug" --todo-state TODO --priority A \
--scheduled "2026-05-15" --deadline "2026-05-20 -3d"
# Capture under a datetree
org-cli capture "Standup notes" --file journal.org --target-heading Logs --datetree
# Update an existing heading
org-cli update-todo --id abc123 --todo-state DONE
org-cli update-todo --file projects.org --heading-path "Work/Task" \
--title "Renamed task" --property "EFFORT=2h"Timestamp grammar for --scheduled, --deadline, --closed:
YYYY-MM-DD [HH:MM] [+N{h|d|w|m|y} | ++N{u} | .+N{u}] [-N{u}]
Multi-crate Rust workspace:
- org-core β Business logic and org-mode parsing
- org-mcp-server β MCP protocol implementation
- org-cli β CLI interface for testing and direct usage
Built with orgize (org-mode parsing), rmcp (MCP protocol), tokio (async runtime), and nucleo-matcher (fuzzy search).
cargo test # run all tests
cargo test -p org-core # test specific crate
cargo fmt && cargo clippy --all-targets --all-features # format and lint
cargo run --bin org-cli -- --help # run CLI- File discovery and listing
- Basic content access via MCP resources
- Org-mode parsing with orgize
- ID-based element lookup
- CLI tool for testing
- Full-text search across org files
- Configuration file support with TOML format
- Environment variable configuration
- Unified CLI interface with global configuration
- Tag-based filtering and querying
- Agenda-related Functionality
- Link following and backlink discovery (org-roam support)
- Metadata caching for performance
- Content creation via
org-capture(heading + planning + properties + datetree) - Content modification: TODO state, priority, tags, and planning updates via
org-update-todo/org-cli update-todo - Content modification: property drawer updates (upsert/remove individual keys)
- Content modification: CLOCK / LOGBOOK entries
-
org-promote/org-demoteβ relative heading level change -
org-clockβ clock in / clock out / cancel clock -
org-refileβ move heading to different file or location -
org-archiveβ archive heading to archive file or toggle ARCHIVE tag - Media file reference handling
- Integration with org-roam databases
- Real-time file watching and updates
- Advanced query language
MIT License - see LICENSE file for details.