Emacs Org-Mode MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ORG_DIR | No | Base org directory | ~/org |
| JOURNAL_DIR | No | Journal files directory | $ORG_DIR/journal |
| PROJECTS_DIR | No | Project files directory | $ORG_DIR/projects |
| ACTIVE_SECTION | No | Section name for active/TODO tasks | Tasks |
| EMACSCLIENT_PATH | No | Custom path to emacsclient (optional) | |
| COMPLETED_SECTION | No | Section name for completed/DONE tasks | Completed Tasks |
| HIGH_LEVEL_SECTION | No | Section name for the high-level task checklist | High Level Tasks (in order) |
| EMACS_EDIFF_APPROVAL | No | Visual approval via Emacs ediff | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_tasksA | List all tasks in a section of tasks.org. Returns task names, headlines, status, and full content. Use this to check for existing tasks before creating new ones, or to get an overview of work in progress. For detailed format specifications, read the emacs-org://guide/task-format resource. |
| get_taskA | Get a specific task by identifier (#+NAME like 'task-gh-28', ticket ID like 'GH-28', or headline substring). Returns full task content including all properties, subsections, and task items. For format specifications, read emacs-org://guide/task-format. |
| create_taskA | Create a new task in a section. Provide the complete org-formatted task entry with PROPERTIES drawer and subsections. The :ID: property is auto-generated if not provided. Always search for duplicates before creating. CREATED and MODIFIED timestamps are managed automatically. For format specifications, read emacs-org://guide/task-format. |
| update_taskA | Update an existing task with new content. Provide the complete new task entry including all properties and subsections. Automatic behaviors: (1) TODO→DONE moves to Completed section and sets CLOSED timestamp, (2) DONE→TODO moves to Tasks section and clears CLOSED timestamp, (3) MODIFIED timestamp updated automatically. Preserve all PROPERTIES including :ID:, :CUSTOM_ID:, and :CREATED:. For format specifications, read emacs-org://guide/task-format. |
| move_taskA | Move a task between sections (e.g., Active to Completed) without modifying content. |
| search_tasksA | Search tasks by query string across all sections. Returns complete matching tasks. Use this to check for existing tasks before creating new ones, or to find tasks related to a topic. |
| list_journal_entriesA | List all journal entries for a specific date. Returns entry times, headlines, content, and tags. Use this to check what's already logged before creating new entries to avoid duplicates. For format specifications, read emacs-org://guide/journal-format. |
| get_journal_entryA | Get a specific journal entry by date and time or headline substring. Returns complete entry content. For format specifications, read emacs-org://guide/journal-format. |
| create_journal_entryA | Create a new journal entry with format: ** HH:MM [TICKET-ID] headline :tags:. Always check for existing entries first using list_journal_entries to avoid duplicates. Include ticket IDs (GH-123), PR links ([[url][#123]]), and task links ([[file:~/org/tasks.org::#task-id][Display]]) as appropriate. Use current system time for timestamp. Common tags: daily_summary, meeting, decision, blocked. For format specifications, read emacs-org://guide/journal-format. |
| update_journal_entryA | Update an existing journal entry with new content. Finds the entry by time (HH:MM), using existing_headline to disambiguate if multiple entries share the same time. Use this to correct or enhance existing entries, or add forgotten details like task links. For format specifications, read emacs-org://guide/journal-format. |
| search_journalA | Search journal entries by query string across recent days. Returns complete matching entries. Use this to find past work on a topic, review recent activity, or look up when something was done. Searches last 30 days by default. |
| list_projectsC | List all projects, optionally filtered by status. Returns project titles, slugs, status, and description previews. For detailed format specifications, read the emacs-org://guide/project-format resource. |
| get_projectA | Get a specific project by identifier (slug like 'booklore', CUSTOM_ID like 'project-booklore', or title substring). Returns full project content including all properties and sections. For format specifications, read emacs-org://guide/project-format. |
| create_projectA | Create a new project file from a complete org-formatted string. Auto-generates :ID: (UUID), :CREATED:, and defaults :STATUS: to 'planning'. The project_entry should include a level-1 heading, :PROPERTIES: drawer with :CUSTOM_ID:, and level-2 sections (Description, Design, Goals, etc.). For format specifications, read emacs-org://guide/project-format. |
| update_projectA | Update a project's section content, properties, headline, or tags. Supports section-level updates to avoid rewriting the entire file. At least one of section+content, properties, headline, or tags must be provided. Always updates :MODIFIED: timestamp automatically. For format specifications, read emacs-org://guide/project-format. |
| search_projectsA | Search across all projects by query string. Case-insensitive substring match on project titles and all section content. Returns matching projects. |
| link_task_to_projectA | Add a task link to a project's Related Tasks section. The task_link should be an org-mode link like '- [[file:~/org/tasks.org::#task-gh-28][GH-28 Task name]]'. |
| regenerate_project_indexA | Regenerate ~/org/projects/index.org from all project files. Call this once after initial setup or if the index becomes out of sync. |
| diagnostic_envB | Diagnostic tool to check environment variables for ediff approval |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Active Tasks | Tasks in the Active Task List |
| Completed Tasks | Tasks in the Completed Task List |
| Today's Journal | Journal entries for today |
| Task Format Guide | Complete specification for task format and properties |
| Journal Format Guide | Complete specification for journal entry format |
| Project Format Guide | Complete specification for project format and management |
| Project Index | Index of all projects with status and descriptions |
TDQS
Scored across 19 tools
Tools are mostly distinct per resource and action, with clear descriptions separating get/list/search. Minor overlap exists between move_task and update_task (which can also move tasks via status changes), and diagnostic_env is unrelated to the org-mode domain.
The dominant verb_noun pattern is consistent across tasks, journal entries, and projects (get_, create_, update_, search_, list_). Exceptions like diagnostic_env and the varying resource names (task vs journal_entry) are minor deviations, but the overall pattern remains predictable.
At 19 tools, the set is on the heavy side for an MCP server covering three domains. Most tools have a clear purpose, but diagnostic_env is out of place and the paired list/search tools add some redundancy.
Tasks, journal entries, and projects all have create, read, and update coverage, but there are no delete operations for any resource type—an obvious lifecycle gap. Otherwise the core workflows are well covered.