Emacs Org-Mode MCP Server
The server provides MCP tools for managing Emacs org-mode tasks, journal entries, and projects with structured search, automatic formatting, and optional Emacs ediff approval before writes.
Task management: list, get, create, update, move, and search tasks in
tasks.org, with automatic section moves on TODO/DONE changes and lookup by CUSTOM_ID, ticket ID, or headline.Journal management: list, get, create, update, and search daily journal entries, organized by date with tags, ticket IDs, and links.
Project management: list, get, create, update, and search projects, plus linking tasks to projects and regenerating an index.org grouped by status.
Search across all data: find tasks, journal entries, or projects by keywords with concise, targeted results instead of full file reads.
Automatic metadata handling: auto-generates IDs, CREATED/MODIFIED/CLOSED timestamps, and maintains High Level Tasks checklist.
Visual approval: uses Emacs ediff to review proposed changes before writing; can be disabled via flag or environment variable.
Optional git autocommit: automatically commits org file changes when the org directory is a git repo.
MCP resources: exposes format guides and live views of active tasks, completed tasks, today's journal, and project index.
Diagnostics:
diagnostic_envshows server configuration and file paths for troubleshooting.
Allows interaction with Emacs org-mode, providing tools for managing tasks, journal entries, and projects in org-mode files, including listing, creating, updating, searching, and cross-linking.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Emacs Org-Mode MCP Serverlist my open tasks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Emacs Org-Mode MCP Server
An MCP (Model Context Protocol) server that enables Claude to manage Emacs org-mode task lists, journal entries, and projects.
I use Emacs org-mode for organising myself. This mainly revolves around three
things: tasks.org as a tracked task list (active and completed), a
journal/ directory of daily journal files, and projects/ — one file per
project — for longer-running work. Over time I have been leveraging Claude for
bookkeeping and context-linking: reminding me to update a task, suggesting a
journal entry, or noting what I worked on since the last summary.
Claude was surprisingly capable at working with org-mode files directly, but as those files grew it started hitting token limits. A dedicated MCP solves that: tools return only the data Claude needs, structure is maintained correctly, and there is a built-in visual approval step via Emacs ediff before any write lands on disk.
Token Efficiency
Operation | Without MCP (Read/Edit) | With MCP |
Find a task | Read entire | Returns only the matching task |
Search tasks | Read file, Claude parses | Returns only matching results |
List tasks | Read entire file | Returns structured list |
Update task | Read file, generate Edit | Send task content, ediff for approval |
Input tokens — raw file contents never enter the conversation context. Output tokens — Claude passes parameters to the MCP rather than generating careful string-matched Edit calls. Context accumulation — MCP responses are much smaller than repeated file reads over a long conversation.
There is also a reliability benefit: the MCP handles org-mode parsing correctly every time, whereas Claude occasionally makes formatting errors with raw Edit operations.
Related MCP server: Emacs MCP Tools
Features
Task Management (
~/org/tasks.org)List, create, update, search, and move tasks
Automatic section movement when status changes (
TODO→DONE)Find tasks by
:CUSTOM_ID:, ticket ID (e.g.GH-123), or headlineAuto-maintained High Level Tasks checklist
Visual approval via Emacs ediff before writes
Journal Management (
~/org/journal/)List, create, update, and search journal entries
Date-based file organisation (
YYYYMMDDformat)Tag support (
:daily_summary:,:meeting:, etc.)Visual approval via Emacs ediff before writes
Project Management (
~/org/projects/)One org file per project (
<slug>.org)List, create, update, and search projects
Section-level updates (avoids rewriting entire files)
Cross-linking between projects, tasks, and journal entries
Auto-maintained
index.orgwith all projects grouped by statusStatus values:
active,planning,on-hold,completed
Prerequisites
Python 3.13+
uv for package management
Emacs org-mode files in
~/org/
Installation
cd ~/projects/emacs-org-mcp
# Install dependencies
uv syncConfiguration
Claude Desktop
Prerequisites:
Ensure
uvis in your PATH. Claude Desktop spawns processes without a login shell and may not inherit your shell's PATH. Use the full path touv(e.g./Users/yourname/.local/bin/uv) or add it to a system-wide location.Create the virtual environment first:
cd /path/to/emacs-org-mcp make sync # or: uv sync
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"emacs-org": {
"command": "/Users/yourname/.local/bin/uv",
"args": [
"--directory", "/path/to/emacs-org-mcp",
"run", "server.py"
],
"env": {
"ORG_DIR": "/path/to/org"
}
}
}
}Note: Replace
/Users/yourname/.local/bin/uvwith the output ofwhich uv. Ifuvis reliably in your PATH you can use just"uv".
Claude Code
Add to user scope (available across all projects):
claude mcp add --scope user emacs-org \
-- uv --directory /path/to/emacs-org-mcp run server.pyOr use the Makefile:
make mcp-installOr edit ~/.claude.json directly:
{
"mcpServers": {
"emacs-org": {
"command": "uv",
"args": [
"--directory", "/path/to/emacs-org-mcp",
"run", "server.py"
]
}
}
}Environment Variables
All settings can be overridden via environment variables or command-line flags:
Variable / Flag | Default | Description |
|
| Base org directory |
|
| Journal files directory |
|
| Project files directory |
|
| Directories walked for loose org files. The env var takes several, separated like |
|
| Section name for active/TODO tasks |
|
| Section name for completed/DONE tasks |
|
| Section name for the high-level task checklist |
|
| Visual approval via Emacs ediff |
|
| Commit each org file change to git, when the org directory is already a repo |
| (searches PATH) | Custom path to |
Ediff Approval
By default, all create and update operations present changes visually in Emacs using ediff before applying them. A new Emacs frame opens with a side-by-side diff; you can edit the proposed content (Buffer B) before approving.
Controls (from the ediff control buffer):
Key | Action |
| Approve — apply changes |
| Reject — discard changes |
| Quit — approves by default |
The frame and all buffers close automatically after your decision. If
emacsclient is not available or Emacs is not running, the server falls back
to auto-approve.
To disable ediff approval:
uv run server.py --no-ediff-approval
# or set EMACS_EDIFF_APPROVAL=false in the MCP server envAvailable Tools
Task Tools (10)
Tool | Description |
| List all tasks in a section ( |
| Get a task by |
| Create a new task from a complete org-formatted string |
| Replace a task; auto-moves between sections on status change |
| Move a task between sections without changing content |
| Move a task within its section — position is priority |
| One-off: sort the completed section newest-first by |
| Archive tasks out of |
| Search tasks by keyword across all sections |
| Counts per section and project, in about ten lines |
archive_tasks is for work that is finished and recorded, or abandoned. Emacs
does the move, so it needs a reachable emacsclient and has no fallback. Only
archive tasks the user named or confirmed: if they describe a class of tasks,
list the headlines and ask first. Archived tasks stay readable through
search_org, marked [archived], and nothing unarchives them.
Journal Tools (5)
Tool | Description |
| List entries for a date (defaults to today) |
| Get an entry by time ( |
| Create a new journal entry |
| Update an existing entry |
| Search entries across recent days |
Project Tools (7)
Tool | Description |
| List all projects, optionally filtered by status |
| Get a project by slug, |
| Create a new project file from a complete org-formatted string |
| Update project sections, properties, headline, or tags |
| Search across all project files |
| Add a task link to a project's Related Tasks section |
| Rebuild |
Cross-Scope Search (1)
Tool | Description |
| Search tasks, journal, projects and loose org files as one ranked set |
For open-ended recall, when you do not know in advance whether what you are
looking for was written up as a task, a journal entry or a design note. It is
also the only way to reach org content no other tool owns: archived work in
<name>_archive files, and loose .org files anywhere under the search roots.
Every result line names its scope, so you know which tool fetches it.
Other
Tool | Description |
| Show server configuration and file paths |
MCP Resources
The server exposes resources that Claude can read directly for format documentation and live data:
Resource URI | Description |
| Task format specification |
| Journal entry format specification |
| Project file format and cross-linking guide |
| Live view of active tasks |
| Live view of completed tasks |
| Today's journal entries |
| All projects grouped by status |
Configuring CLAUDE.md
Add this section to your ~/.claude/CLAUDE.md to instruct Claude to use the
MCP server for all org-mode operations:
## Emacs Org-Mode (Journal, Tasks, Projects)
**CRITICAL: Always use the `mcp__emacs-org__*` MCP tools** for all journal,
task, and project operations. Never use Read/Write/Edit tools or bash commands
directly on these files.
### Format Reference
The MCP server exposes authoritative format guides as resources:
- `emacs-org://guide/journal-format`
- `emacs-org://guide/task-format`
- `emacs-org://guide/project-format`Claude will fetch the detailed format documentation from those resources when
needed, so you do not need to duplicate it in CLAUDE.md.
Testing
# Run all tests
make test
# Verify the server responds to tools/list
make test-mcpLicense
MIT
Available Tools
19 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. Defaults to today. | |
| tags | No | Tags like 'daily_summary', 'meeting', 'decision', 'blocked' | |
| time | No | Time in HH:MM format (24-hour). Defaults to current time. | |
| content | Yes | Entry body with bullet points (- ). Include task links using [[file:~/org/tasks.org::#task-id][Display]] format. Focus on outcomes, decisions, and follow-ups. | |
| headline | Yes | Entry headline with optional ticket ID and PR/task links. Examples: 'GH-28 Completed feature', 'GH-127 [[https://github.com/org/repo/pull/221][#221]] Submitted PR', 'Work summary' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It mentions that it uses the current system time, implies that duplicate checking is the caller's responsibility, and references a format guide. But it doesn't specify any side effects, permissions, or the response format after creation. For a create operation, this is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the format and the essential usage guideline (check duplicates first). It packs a lot of useful information into a few sentences without being overly verbose. The common-tags list and format guide reference are concise additions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no output schema, the description covers the key aspects: how to format, what to include, how to avoid duplicates, and where to find more details. It includes practical examples for links and tags. The only minor gap is not explicitly stating the return value, but that is often assumed for create operations. Overall, an agent would be well-equipped to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already offers 100% coverage for all 5 parameters, so the description doesn't need to repeat the basics. It does add value by providing format examples for headline and content (e.g., PR links, task links), which enrich the schema's descriptions. This slightly exceeds the baseline, but since the schema is already thorough, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a journal entry and includes the exact format ('** HH:MM [TICKET-ID] headline :tags:'), which distinguishes it from sibling tools like list_journal_entries or update_journal_entry. The verb and resource are specific, and it even provides examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to check for existing entries using list_journal_entries before creating to avoid duplicates, which is a clear usage guideline relative to siblings. It also directs to the format guide for specifications, giving agents a clear action path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_entry | Yes | Complete org-formatted project string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses auto-generation of :ID:, :CREATED:, and default :STATUS:, which is beyond the schema. It also indicates the required structure of the input. However, it does not mention side effects, error behavior, or return value, though these are less critical for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core action, then details the input requirements, and finally directs to a guide. Every sentence adds value and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description covers purpose, input format, and points to a resource for full specifications. It omits return behavior and error handling, but these are not essential for an agent to correctly invoke the tool, given the guide reference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description substantially enriches the single parameter (project_entry) beyond the schema's one-line definition. It specifies the required structure (level-1 heading, :PROPERTIES: drawer with :CUSTOM_ID:, level-2 sections) and points to a detailed format guide, giving an agent clear guidance on constructing valid input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (create) and resource (project file), and clarifies it's from an org-formatted string. It distinguishes itself from siblings by specifying project creation specifically, and mentions auto-generated fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for creating new projects but does not explicitly state when to use this tool over alternatives like create_task or create_journal_entry. It gives no when-not guidance or direct comparisons, leaving the agent to infer from the tool name and context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes | Section to add the task to | |
| task_entry | Yes | Complete task in org format with heading, PROPERTIES drawer (:CUSTOM_ID: required, :ID: optional), and subsections (*** Description, *** Task items [/], etc.). Example: '** TODO GH-123 Task\n:PROPERTIES:\n:CUSTOM_ID: task-gh-123\n:END:\n\n*** Task items [/]\n- [ ] item' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It discloses that :ID: is auto-generated when omitted, that CREATED and MODIFIED timestamps are managed automatically, and that duplicate search is required. It does not specify the behavior when a duplicate is found or what response the tool returns, but the disclosed behaviors go well beyond a minimal create description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, all information-bearing and free of filler. The core action is front-loaded, followed by format requirements, auto-generation behavior, and guardrails. Every sentence earns its place, and the external format-guide reference avoids unnecessary inlining.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter create tool with no output schema and no annotations, the description covers required parameters, provides duplicate-search guidance, explains auto-generated fields, and points to a format reference. It does not describe the return value or error cases, but those are not essential for correct invocation given the schema and example already present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents both parameters with descriptions and an example. The description adds extra meaning by emphasizing the required PROPERTIES drawer fields, the subsections structure, auto-generation behavior, and a pointer to the format guide. This exceeds the schema-only baseline but does not fully replace schema documentation for every field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Create a new task in a section.' It goes on to define the required org-formatted entry, which makes the tool's purpose unmistakable. However, it does not name or otherwise differentiate itself from sibling tools such as update_task or move_task, so it does not fully meet the 5-level bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: which sections are allowed, the need for a complete org-format entry, and the explicit instruction to always search for duplicates before creating. It does not state when to prefer an alternative tool, nor does it give an explicit when-not-to-use condition, but the guidance provided is sufficient for a straightforward create operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnostic_envB
Diagnostic tool to check environment variables for ediff approval
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool 'checks' environment variables, implying read-only behavior, but does not describe what the check returns, whether it has side effects, or any permission requirements. This is minimal disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler words. It front-loads the tool's purpose ('Diagnostic tool') and is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description is mostly complete for calling it. However, it does not describe what the agent should expect in the response (e.g., whether it returns environment variable values, a status, or logs). This missing return-value context is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline for this dimension is 4. The description does not need to explain parameter meaning, and the schema coverage is effectively 100% (vacuous). No additional explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('check'), the resource ('environment variables'), and the context ('for ediff approval'). This distinguishes it from the CRUD-oriented sibling tools. However, the term 'ediff approval' is not explained, leaving some ambiguity for an agent unfamiliar with the domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use as a diagnostic tool, but does not explicitly state when to use it versus alternatives, nor does it mention any exclusions or prerequisites. Since it is the only diagnostic tool among siblings, the implied usage is somewhat clear, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date in YYYY-MM-DD format | |
| identifier | Yes | Time (HH:MM) or headline substring to find the entry |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It explicitly states the operation is a read ('Get') and that it 'Returns complete entry content', which is useful. It does not disclose error behavior or formatting details, but points to a guide for format specifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the purpose and allowed lookup modes, the second states the return and points to a format guide. Each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read operation with two fully documented parameters, the description covers what the tool does and what it returns. A pointer to the journal format guide fills the format gap. It could add expected not-found behavior, but the tool is simple enough that the current description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description's mention of 'date and time or headline substring' mostly mirrors the schema's identifier description and adds no new semantic information beyond it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: 'Get a specific journal entry'. It clearly identifies lookup criteria ('by date and time or headline substring') and states the return value ('complete entry content'). This differentiates it from search_journal and list_journal_entries, which are for broader retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for retrieving one known entry when the date and identifier are available. However, it does not explicitly say when to use an alternative like search_journal or list_journal_entries, and no when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Project slug, CUSTOM_ID, or title substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does state the return content ('full project content including all properties and sections') and points to a format spec, which is useful. However, it does not explicitly state that this is a read-only operation, nor does it mention error behavior or side effects, which are gaps given the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The first sentence front-loads the core action and accepted identifier types, and the second sentence provides a pointer to format specifications. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (one parameter, no output schema), the description is nearly complete: it states the resource, the identifier types, and what the return contains. The pointer to the project-format guide adds valuable context. It omits potential edge cases like partial title matches, but for a getter tool this is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single parameter 'identifier' with a description identical to the tool description ('Project slug, CUSTOM_ID, or title substring'). With 100% schema coverage, the baseline is 3, and the tool description merely repeats the schema without adding new meaning or clarifications about format or precedence. No additional semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' against a specific resource 'project' and defines the identifier as slug, CUSTOM_ID, or title substring. It also promises full project content including properties and sections, which distinguishes it from list_projects and search_projects. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for fetching a specific project by identifier, but it never explicitly contrasts it with sibling tools like list_projects or search_projects. There's no 'use this when you have an identifier, use list to enumerate, use search to filter' guidance. The usage context is inferred but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Section to search (optional, searches all if omitted) | |
| identifier | Yes | Task identifier: #+NAME value, JIRA ticket ID, or headline substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the operation returns full task content including all properties, subsections, and task items, and points to a format specification guide. It does not discuss error behavior or side effects, but 'Get' implies a read-only operation and the return content is well specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The operation and identifier examples are front-loaded, and the return content summary plus format guide pointer are compact and useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description's summary of return content and the pointer to the task-format guide cover the main expectations. It does not specify behavior for ambiguous substring matches, but that is a minor gap given the schema and guide link.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description adds value above the schema by providing concrete examples of valid identifier formats (#+NAME 'task-gh-28', ticket ID 'GH-28'), which help an agent construct correct inputs. The section parameter is already well documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific verb 'Get' and resource 'specific task,' and defines the identifier formats with concrete examples (#+NAME, ticket ID, headline substring). This clearly distinguishes it from sibling tools like list_tasks or search_tasks, which operate on collections rather than a single known task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool is for retrieving a specific task when an identifier is available. It does not explicitly mention alternatives or when not to use it, but the identifier-based operation makes the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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]]'.
| Name | Required | Description | Default |
|---|---|---|---|
| task_link | Yes | Org-mode link string for the task | |
| project_identifier | Yes | Project slug, CUSTOM_ID, or title substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that this is a mutation ('Add') but does not indicate whether existing links are preserved or replaced, whether the task is validated, what permissions are needed, or what the success/failure response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core action is front-loaded, and the example is placed directly after the action to clarify the required format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with full schema coverage, the description is adequately complete on inputs. However, with no annotations and no output schema, it should say more about the expected side effects or return value, especially since this is a mutating operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds value by giving a concrete org-mode link example for task_link, clarifying the expected string format beyond the schema's short description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Add a task link to a project's Related Tasks section.' This clearly distinguishes the tool from siblings because no other tool mentions linking tasks to projects or Related Tasks. The example org-mode link further reinforces the intended operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: an agent should use this when a task link needs to be added to a project's Related Tasks section. However, it does not explicitly contrast this with alternatives like create_task or update_task, nor does it state any exclusions or prerequisites such as the task needing to exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. Defaults to today. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. The verbs 'List' and 'Returns' clearly indicate a read-only operation, and the description discloses what content the response includes. It does not mention sorting or pagination, but for this simple list tool, the essential behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the main action and scope are front-loaded, followed by return values, usage intent, and a helpful format-specification pointer. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description provides enough information to use it correctly: what it lists, what it returns, why to use it, and where to find format details. The date default is covered by the schema rather than the description, which is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, date, is fully documented in the input schema with format and default behavior. The description adds no additional parameter-level detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('List'), the resource ('journal entries'), and the scope ('for a specific date'), and enumerates what is returned. This makes it easy to distinguish from get_journal_entry, which retrieves a single entry, and search_journal, which implies broader search behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives a use case: check what is already logged before creating new entries to avoid duplicates. It provides clear context for when to use this tool, though it does not explicitly name alternatives or exclusions beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by project status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It discloses the returned fields but does not mention side effects, ordering, pagination, or any operational constraints. The reference to a format resource adds some context but does not cover these key behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences that front-load the primary action and then list return fields. No redundant phrases; it is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple, and the description covers the main action and return content. However, it omits details like pagination, ordering, or error behavior, which could be relevant, especially since there is no output schema to fill those gaps. The pointer to a format guide helps but is not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single status parameter, which already includes a description and enum. The description's mention of 'optionally filtered by status' mirrors the schema without adding new semantic information, so the added value is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (list all projects) and the optional filter (status), and indicates the returned fields (titles, slugs, status, description previews). It implicitly distinguishes from sibling get_project and search_projects by framing this as a broad list, but it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the sibling search_projects or get_project. The description only states the tool's function, not the conditions for preferring it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes | Section name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does reveal that the tool returns task names, headlines, status, and full content, and references a format guide, but it does not state read-only behavior, limitations, or potential output size implications. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three purposeful sentences with no filler. It front-loads the core action, then states return fields, then gives usage guidance and a pointer to further format details. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, single-parameter list tool, the description covers purpose, return content, and usage context, and points to a resource for detailed format specifications. It could be slightly stronger by naming sibling tools for alternative use cases, but it is otherwise complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, 'section', has a clear enum of 'Tasks' and 'Completed Tasks'. The description adds minimal semantic value beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List all tasks in a section of tasks.org.' It also states exactly what is returned (task names, headlines, status, full content), which clearly identifies the tool's scope and differentiates it from task-specific or search-oriented siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: 'Use this to check for existing tasks before creating new ones, or to get an overview of work in progress.' It does not explicitly mention alternatives like search_tasks or get_task, but the stated use cases are sufficient for an agent to know when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_taskA
Move a task between sections (e.g., Active to Completed) without modifying content.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Task identifier (#+NAME, ticket ID, or headline) | |
| to_section | Yes | ||
| from_section | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It discloses a key behavior: content is not modified, which is valuable. However, it does not describe potential side effects, error conditions, or what happens if the from_section does not match the task's current section. The core behavior of moving is clear, but additional transparency would improve the score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action, scope, and an important constraint. Every word is purposeful, with no filler or repetition. It is highly concise while still conveying the essential purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has three required parameters, no annotations, and no output schema, so the description must carry more weight. It does not mention return values, failure modes, or the exact mapping of section names (the example conflicts with the enum values). The description is too sparse to be considered complete for an agent selecting this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, and the description does not compensate. It uses the example 'Active to Completed' but the schema enums are 'Tasks' and 'Completed Tasks', creating potential confusion. It does not explain the meaning of from_section and to_section beyond their names, nor clarify that from_section should reflect the current section and to_section the destination. Description adds little semantic value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('move') with a clear resource ('task') and scope ('between sections'), and explicitly excludes content modification, distinguishing it from update_task. The example 'Active to Completed' provides a concrete use case. This fully clarifies what the tool does and how it differs from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (moving a task between sections) and the constraint 'without modifying content' implies a distinction from update_task. However, it does not explicitly name alternatives or state when not to use it, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose effects. It implies overwriting the index but does not explicitly state that it will replace the file or that manual edits may be lost. This is a minor gap for a potentially destructive regeneration operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, front-loading the action and purpose, and immediately stating the usage conditions. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple parameterless tool with no output schema; covers action and usage conditions. Could mention the outcome (index file updated) but the core information needed to decide when to call it is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to document beyond the schema. Baseline of 4 is appropriate since no compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'regenerate' and a specific resource '~/org/projects/index.org' from project files, clearly distinguishing it from sibling CRUD operations like list_projects, get_project, and create_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides conditions: 'Call this once after initial setup or if the index becomes out of sync', giving clear when-to-use guidance without needing to reference alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (matches headlines and content) | |
| days_back | No | Days to search back (default 30, searches from today backwards) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that the tool returns complete matching entries and that it searches last 30 days by default. This gives the agent a clear sense of the output and time scope. However, it doesn't mention any limits, pagination, or whether the search is case-insensitive or fuzzy, which are minor gaps for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loading the core purpose and then adding usage guidance and the default window. Every sentence contributes useful information without redundancy. A small improvement would be to combine the default latency into the first sentence, but the current structure is clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with two parameters and no output schema, the description covers the essential return behavior ('Returns complete matching entries') and the default time range. It doesn't mention potential pagination or result limits, which could be relevant for large queries, but the tool appears straightforward. Overall, the description is sufficiently complete for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both query and days_back having descriptive text. The description adds little beyond restating the schema: 'query string' and 'matches headlines and content' align with the schema, and the default 30 days is already in the parameter description. The description's main additional value is in usage context, not parameter semantics, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search', the resource 'journal entries', and the scope 'across recent days'. It also explicitly notes it returns complete matching entries, which distinguishes it from get_journal_entry (fetches a specific entry) and list_journal_entries (lists without query). The sibling context reinforces differentiation, as search_tasks and search_projects target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios: 'find past work on a topic, review recent activity, or look up when something was done.' It also mentions the default 30-day window, which sets expectations. However, it doesn't explicitly contrast with alternatives like get_journal_entry or list_journal_entries, though the purpose wording makes the distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_projectsA
Search across all projects by query string. Case-insensitive substring match on project titles and all section content. Returns matching projects.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (matches titles and content) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses the matching behavior (case-insensitive substring) and that it returns projects, which is useful. However, it does not mention any side effects, safety implications, or behavioral constraints such as pagination or limits, leaving some gaps in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two brief sentences with no redundant wording. The core purpose is front-loaded, and each sentence adds distinct value: first defines scope and matching, second states return type.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter search tool with no annotations and no output schema, the description is adequately complete. It states what it searches, how it matches, and what it returns. Minor gaps like pagination or result limits are not addressed, but these are not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the 'query' parameter has a description). The description adds extra semantics by explicitly noting 'case-insensitive substring match', which goes beyond the schema's 'matches titles and content'. This clarifies the exact matching behavior, adding meaningful context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search', the resource 'projects', and the scope 'across all projects'. It specifies the matching criteria (case-insensitive substring on titles and section content) and the return type (matching projects). This distinguishes it from sibling search tools like search_tasks and search_journal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by naming 'all projects', but it does not explicitly provide when-to-use versus alternatives or exclusionary criteria. The sibling tool names give context, but the description itself offers no guidance on when to prefer this over similar searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (matches headline and content) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the search returns complete matching tasks and works 'across all sections.' However, it omits details like result ordering, pagination, case sensitivity, or any special matching behavior. The added context is useful but limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The core action is front-loaded, and the usage guidance is compact. Every sentence contributes value, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter search tool, the description is sufficient: it states the scope, return behavior, and intended use cases. It lacks details on sorting or limits, but given the simplicity and lack of an output schema, it adequately covers what an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the query parameter as 'matches headline and content.' The description adds 'across all sections' scope but doesn't add semantic details beyond the schema. This meets the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Search tasks by query string across all sections.' It specifies the verb, resource, and scope, and distinguishes itself from siblings like get_task (single task) and list_tasks (list all) by focusing on search across sections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use this to check for existing tasks before creating new ones, or to find tasks related to a topic.' This tells the agent when to use it, though it doesn't state when not to use it or explicitly name alternatives beyond the implied comparison with creation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date in YYYY-MM-DD format | |
| tags | No | Updated tags (replaces existing) | |
| time | Yes | New time in HH:MM format (24-hour) | |
| content | Yes | New body content with bullet points and optional task links | |
| headline | Yes | New headline with optional ticket ID, PR links, and task links | |
| existing_time | No | Time (HH:MM) of the entry to update. Only needed if changing the time; defaults to 'time'. | |
| existing_headline | No | Headline substring to disambiguate when multiple entries share the same time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It reveals that the tool finds by time, uses existing_headline to disambiguate, and replaces content/tags (e.g., 'Updated tags (replaces existing)'). It also points to a format guide for further specs. While it doesn't detail side effects like whether other fields are overwritten, the disambiguation and replacement behavior is genuinely informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: three sentences that state what it does, how it finds the entry, and when to use it. The disambiguation note is front-loaded and the format pointer is a useful addition without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description handles the essential behavior (lookup, disambiguation, replacement) and routes to a format guide. It doesn't state what the return value is or whether the update is destructive to unspecified fields, but it covers the core operation thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds meaning by explaining the lookup mechanism (time + existing_headline) and clarifying that tags replace existing, which is valuable. However, it doesn't explain the relationship between time/existing_time fully beyond the schema defaults, but the schema description covers most.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb ('Update'), the resource ('existing journal entry'), and the mechanism (find by time, with existing_headline for disambiguation). It distinguishes itself from create_journal_entry and search_journal by focusing on updating existing entries and adding details, which is clear from the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit guidance on when to use this tool: 'Use this to correct or enhance existing entries, or add forgotten details like task links.' It also implicitly excludes creation by saying 'existing journal entry' and provides a disambiguation strategy. However, it does not explicitly mention alternatives like create_journal_entry, but the use-case guidance is strong enough to route the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | New tags list (e.g., ["project", "infrastructure"]) | |
| content | No | New content for the section (used with section parameter) | |
| section | No | Section name to update (e.g., 'Description', 'Goals', 'Notes') | |
| headline | No | New project headline/title | |
| identifier | Yes | Project slug, CUSTOM_ID, or title substring | |
| properties | No | Properties to update (e.g., {"STATUS": "active", "REPO": "https://..."}) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses meaningful behavioral traits beyond the schema: the automatic :MODIFIED: timestamp update and the section-level write mechanism that avoids full-file rewrites. It does not specify whether properties are merged or replaced, but the key side effects are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying necessary information: the action and scope, the section-level behavior, the required-field invariant, the automatic timestamp, and a pointer to the format guide. There is no filler, repetition, or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity and the absence of an output schema and annotations, the description covers essential operational detail: what can be updated, the required-field constraint, the automatic timestamp side effect, and where to find format specifications. It does not describe return values or error behavior, but those are less critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by grouping section+content as a unit and stating the at-least-one requirement across tags, content+section, properties, or headline. This helps the agent understand valid invocation combinations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Update a project's section content, properties, headline, or tags.' It also clarifies the granularity of the operation ('section-level updates'), which distinguishes it from related tools like create_project and update_task. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: updating an existing project's fields, with an explicit recommendation to use section-level updates 'to avoid rewriting the entire file.' It also states the required-field invariant. It does not explicitly name alternative tools for creation or other operations, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Task identifier to find the task (ticket ID, CUSTOM_ID, or headline) | |
| task_entry | Yes | Complete new task entry in org format with all properties and subsections preserved |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and handles it well. It explicitly discloses automatic state transitions (TODO→DONE and DONE→TODO), timestamp updates, section moves, and preservation of key properties, which are exactly the side effects an agent needs to anticipate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and uses a compact numbered list for automatic behaviors. It is dense but efficient; the reference to the format guide avoids inline bloat while still providing a path to needed details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter update tool with no output schema or annotations, the description covers purpose, required input shape, preservation rules, and automatic behavior. It lacks explicit failure/error behavior and does not mention what happens when the identifier does not match an existing task, but it is otherwise well-rounded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful guidance beyond the schema by specifying preservation requirements and examples of properties to retain, such as :ID:, :CUSTOM_ID:, and :CREATED:, and by requiring the complete task entry rather than a partial update.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Update an existing task') and resource ('task'), and emphasizes replacing with new content. It implicitly distinguishes itself from create_task and get_task by focusing on existing entries and full replacement semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: provide the complete new entry, preserve properties, and follow the format guide. It does not explicitly name alternatives or exclusions, but the focus on 'existing task' makes the intended use reasonably distinct from creation or retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
v0.1.1- First observed
create_journal_entry - First observed
create_project - First observed
create_task - First observed
diagnostic_env - First observed
get_journal_entry - First observed
get_project - First observed
get_task - First observed
link_task_to_project - First observed
list_journal_entries - First observed
list_projects - First observed
list_tasks - First observed
move_task - First observed
regenerate_project_index - First observed
search_journal - First observed
search_projects - First observed
search_tasks - First observed
update_journal_entry - First observed
update_project - First observed
update_task
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.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for generating rough-draft project plans from natural-language prompts.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that connects Claude with Todoist for complete task and project management through natural language.86167 npm245MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude Code to control a running Emacs instance via MCP, supporting file opening, Magit integration, and server status checks.4MIT
- FlicenseBqualityDmaintenanceAn MCP server that bridges Claude Code with Emacs via emacsclient, enabling buffer, file, org-mode, git, and diff operations.55-
- FlicenseNot gradedqualityDmaintenanceMCP server for project planning inside Claude. It tracks progress, knows your codebase, and resumes exactly where you left off every session.6 npm5-