AI-native, markdown-first project management system with MCP server support for querying, creating, and updating tasks, epics, plans, and notes
Markplane provides 5 tools with explicit JSON Schema input definitions visible in crates/markplane-cli/src/mcp/tools.rs. All tools have descriptions and schema structures. However, there are notable gaps: (1) Tool names lack action verbs, 'markplane_summary', 'markplane_query', 'markplane_show', 'markplane_add', 'markplane_update' are prefixed but not verb-first, which slightly delays LLM parsing; (2) Output schemas are not documented, the code shows input schemas but does not specify what fields each tool returns, forcing LLMs to infer structure; (3) Parameter descriptions are present but inconsistent in detail, some are thorough (e.g. priority with enum hints), others minimal (e.g. 'id' in markplane_show has only 'Item ID (e.g. TASK-042, EPIC-001, PLAN-003, NOTE-007)'). (4) Error handling is absent from visible code, no recovery guidance or actionable error messages shown. The schema quality is solid for a READ_ONLY project tool, but lacks the polish and completeness expected for production agent interaction.
Create a new item.
Query items with optional filters. Returns matching items.
Get full details of any item by ID. Returns frontmatter and body.
Get project state summary. Returns a text overview of the project.
Update fields on an existing item.
Tool names do not start with action verbs. 'markplane_summary', 'markplane_query', 'markplane_show', 'markplane_add', 'markplane_update' are domain-prefixed but lack clear verb hints. LLM must read description to understand intent. Expected pattern: 'get_summary', 'list_items', 'describe_item', 'create_item', 'update_item'.
Output schemas are not documented. The code defines input schemas explicitly, but does not specify what fields each tool returns (e.g. markplane_query returns matching items, but which fields? Array or object? Pagination info?). LLMs cannot plan downstream calls or extract required fields without documented output structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
No pagination support visible in markplane_query. Filtering by kind, status, priority, epic, tags, assignee, and archived status could return large result sets, but no limit, offset, or pagination parameters are defined. Without caps, large queries risk context window exhaustion.
Parameter descriptions lack granular constraints. 'priority' param lists allowed values in description ('critical, high, medium, low, someday') as a string list, but not as a JSON Schema enum. LLMs cannot auto-complete or validate. Similar issue with 'kind' (tasks, epics, plans, notes), 'status', and 'effort' parameters.
No error handling guidance. Code does not show error responses, recovery hints, or actionable error messages. If markplane_show(id='INVALID') fails, does it return a message like 'Item INVALID not found. Try markplane_query()' or just a generic error?
markplane_show description is minimal (18 chars). 'Get full details of any item by ID. Returns frontmatter and body.' This is borderline; a production tool should clarify what 'frontmatter' and 'body' contain and when to call this vs markplane_query.