Skip to main content
Glama
scanner
by scanner

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 tasks.org (1000+ lines)

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 (TODODONE)

    • Find tasks by :CUSTOM_ID:, ticket ID (e.g. GH-123), or headline

    • Auto-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 (YYYYMMDD format)

    • 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.org with all projects grouped by status

    • Status 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 sync

Configuration

Claude Desktop

Prerequisites:

  1. Ensure uv is in your PATH. Claude Desktop spawns processes without a login shell and may not inherit your shell's PATH. Use the full path to uv (e.g. /Users/yourname/.local/bin/uv) or add it to a system-wide location.

  2. 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/uv with the output of which uv. If uv is 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.py

Or use the Makefile:

make mcp-install

Or 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

ORG_DIR / --org-dir

~/org

Base org directory

JOURNAL_DIR / --journal-dir

$ORG_DIR/journal

Journal files directory

PROJECTS_DIR / --projects-dir

$ORG_DIR/projects

Project files directory

SEARCH_ROOTS / --search-root

$ORG_DIR

Directories walked for loose org files. The env var takes several, separated like PATH; the flag is repeatable

ACTIVE_SECTION / --active-section

Tasks

Section name for active/TODO tasks

COMPLETED_SECTION / --completed-section

Completed Tasks

Section name for completed/DONE tasks

HIGH_LEVEL_SECTION / --high-level-section

High Level Tasks (in order)

Section name for the high-level task checklist

EMACS_EDIFF_APPROVAL / --ediff-approval / --no-ediff-approval

true

Visual approval via Emacs ediff

GIT_AUTOCOMMIT / --git-autocommit / --no-git-autocommit

true

Commit each org file change to git, when the org directory is already a repo

EMACSCLIENT_PATH / --emacsclient-path

(searches PATH)

Custom path to emacsclient (optional)

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

C-c C-y

Approve — apply changes

C-c C-k

Reject — discard changes

q

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 env

Available Tools

Task Tools (10)

Tool

Description

list_tasks

List all tasks in a section (Tasks or Completed Tasks)

get_task

Get a task by :CUSTOM_ID:, ticket ID, or headline substring

create_task

Create a new task from a complete org-formatted string

update_task

Replace a task; auto-moves between sections on status change

move_task

Move a task between sections without changing content

reorder_task

Move a task within its section — position is priority

resort_completed_tasks

One-off: sort the completed section newest-first by :CLOSED:

archive_tasks

Archive tasks out of tasks.org via org's org-archive-subtree

search_tasks

Search tasks by keyword across all sections

org_stats

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_journal_entries

List entries for a date (defaults to today)

get_journal_entry

Get an entry by time (HH:MM) or headline substring

create_journal_entry

Create a new journal entry

update_journal_entry

Update an existing entry

search_journal

Search entries across recent days

Project Tools (7)

Tool

Description

list_projects

List all projects, optionally filtered by status

get_project

Get a project by slug, :CUSTOM_ID:, or title substring

create_project

Create a new project file from a complete org-formatted string

update_project

Update project sections, properties, headline, or tags

search_projects

Search across all project files

link_task_to_project

Add a task link to a project's Related Tasks section

regenerate_project_index

Rebuild index.org from all project files

Cross-Scope Search (1)

Tool

Description

search_org

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

diagnostic_env

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

emacs-org://guide/task-format

Task format specification

emacs-org://guide/journal-format

Journal entry format specification

emacs-org://guide/project-format

Project file format and cross-linking guide

org://tasks/active

Live view of active tasks

org://tasks/completed

Live view of completed tasks

org://journal/today

Today's journal entries

org://projects/index

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-mcp

License

MIT

Available Tools

19 tools
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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format. Defaults to today.
tagsNoTags like 'daily_summary', 'meeting', 'decision', 'blocked'
timeNoTime in HH:MM format (24-hour). Defaults to current time.
contentYesEntry body with bullet points (- ). Include task links using [[file:~/org/tasks.org::#task-id][Display]] format. Focus on outcomes, decisions, and follow-ups.
headlineYesEntry 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

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_entryYesComplete org-formatted project string

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionYesSection to add the task to
task_entryYesComplete 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

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format
identifierYesTime (HH:MM) or headline substring to find the entry

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesProject slug, CUSTOM_ID, or title substring

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoSection to search (optional, searches all if omitted)
identifierYesTask identifier: #+NAME value, JIRA ticket ID, or headline substring

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format. Defaults to today.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by project status

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionYesSection name

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesTask identifier (#+NAME, ticket ID, or headline)
to_sectionYes
from_sectionYes

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (matches headlines and content)
days_backNoDays to search back (default 30, searches from today backwards)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (matches titles and content)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (matches headline and content)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format
tagsNoUpdated tags (replaces existing)
timeYesNew time in HH:MM format (24-hour)
contentYesNew body content with bullet points and optional task links
headlineYesNew headline with optional ticket ID, PR links, and task links
existing_timeNoTime (HH:MM) of the entry to update. Only needed if changing the time; defaults to 'time'.
existing_headlineNoHeadline substring to disambiguate when multiple entries share the same time.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoNew tags list (e.g., ["project", "infrastructure"])
contentNoNew content for the section (used with section parameter)
sectionNoSection name to update (e.g., 'Description', 'Goals', 'Notes')
headlineNoNew project headline/title
identifierYesProject slug, CUSTOM_ID, or title substring
propertiesNoProperties to update (e.g., {"STATUS": "active", "REPO": "https://..."})

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifierYesTask identifier to find the task (ticket ID, CUSTOM_ID, or headline)
task_entryYesComplete new task entry in org format with all properties and subsections preserved

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 19 tool updatesv0.1.1
    • First observedcreate_journal_entry
    • First observedcreate_project
    • First observedcreate_task
    • First observeddiagnostic_env
    • First observedget_journal_entry
    • First observedget_project
    • First observedget_task
    • First observedlink_task_to_project
    • First observedlist_journal_entries
    • First observedlist_projects
    • First observedlist_tasks
    • First observedmove_task
    • First observedregenerate_project_index
    • First observedsearch_journal
    • First observedsearch_projects
    • First observedsearch_tasks
    • First observedupdate_journal_entry
    • First observedupdate_project
    • First observedupdate_task

TDQS

A3.6/5.0

Scored across 19 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers