Backlog MCP Server
The Backlog MCP Server is a task management system for LLM agents that enables tracking, organizing, and collaborating on work items with a real-time web viewer.
Core Capabilities:
Task Management: Create, update, delete, and list tasks, epics, folders, artifacts, and milestones with statuses:
open,in_progress,blocked,done,cancelledRich Context Retrieval: Get a comprehensive snapshot of any task — parent epics, siblings, children, cross-references, reverse references, ancestors, descendants, semantically similar items, and recent activity — in a single call
Advanced Search: Hybrid full-text + semantic search across all content with relevance scoring and filtering by type, status, or parent
Organization: Link items hierarchically via parent-child relationships, epic groupings, and folder structures
Evidence & Reference Tracking: Attach external URLs, task references, local files, and proof of completion (PRs, docs, notes) to items
File Editing: Modify markdown files using str_replace, line insertion, or append operations while preserving YAML frontmatter
Web Viewer: Real-time web UI with split-pane layout, spotlight search, activity timeline, and filtering
Flexible Deployment: Run locally or self-host on Cloudflare Workers (free) for remote access across any device or MCP client
Multi-Client Support: Share the same backlog across multiple MCP clients (Claude, ChatGPT, etc.) and agent sessions
CLI Management: Check server status, version, task counts, uptime, and start/stop the background process
Uses Markdown as the primary storage and data format for task entities, providing tools to create, retrieve, and edit task content through Markdown files.
The web viewer supports rendering Mermaid diagrams within task descriptions for visualizing workflows and architectural decisions.
Utilizes YAML frontmatter within task files to manage structured metadata, including status, IDs, relationships, and custom attributes.
Click on "Install 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., "@Backlog MCP Serverlist all 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.
backlog-mcp
Context & memory engineering for AI agents. A markdown-backed storage engine your agents write to and humans read — one core, many consumers: any MCP client (Claude, Cursor, Codex, Kiro, …), the CLI, the web viewer, and external orchestrators all read and write the same store.
Your backlog is your agent's memory. Agents orient at session start (wakeup), recall past decisions, remember what's durable, and expand any entity's neighborhood on demand — alongside the working backlog of tasks, epics, artifacts, and more. Every item is a plain markdown file with YAML frontmatter, so a human can read, edit, and diff everything with no tool installed.
This is agent-first, and that is the whole difference. Agents mutate the store through tools; the human steers the agents and edits the files directly; the real-time web viewer is read-only — a window into agent memory, never an editor. It is not a human-facing notes app an agent happens to poke at — it is agent memory you can see, including the agent's own contradictions.
Three ideas do the work:
Substrates — one declaration per type drives its schema, validation, storage, UI, and agent hints. Most durable knowledge in a project is expressible this way — tasks, memories, crons, ADRs, requirements, prompts, references, agents. A project can even declare its own substrate types as data — a JSON definition plus a bounded JSON Schema, no code — validated and stored through the same registry.
Progressive disclosure — agent context expands like a filesystem: names first, shape on demand, full content only when opened. A dense ~600-token wakeup briefing → memory stubs →
backlog_gethydration.Docs-native, local-first — plain markdown on your disk, in your git. Your files, local hybrid (BM25 + vector) search and embeddings — no cloud required.
Local-first is the architecture; remoteness is meant to be reached by syncing local stores, not by a remote database. A legacy Cloudflare Workers + D1 mode still exists but is descoped — retained, not evolved (see Self-hosting).
Quick start: Tell your LLM:
Add backlog-mcp to .mcp.json and use it to track tasks
Live demo: backlog-mcp-viewer.pages.dev — the viewer UI connected to a real hosted instance

Engineering record
117 Pull Requests Later, It Wasn’t a Task Manager Anymore traces how this repository grew from a small task backlog into local-first context and memory infrastructure for agents. It is the maintainer's transformation story — including what stopped working as the system approached 1,000 tasks and artifacts — not independent product validation.
Related MCP server: Task Manager MCP Server
What's Inside
This is a monorepo with 4 packages:
Package | npm | What it does |
MCP server, HTTP API, CLI | ||
— | Hybrid search (Orama BM25 + vector) and memory retrieval/ranking | |
— | Web UI built on | |
— | Shared entity types and ID utilities |
The viewer is built with Nisli, a zero-dependency reactive Web Component framework published as @nisli/core. Nisli started in this repo and now lives separately.
Installation
Add to your MCP config (.mcp.json or your MCP client config):
{
"mcpServers": {
"backlog": {
"command": "npx",
"args": ["-y", "backlog-mcp"]
}
}
}Install by telling your agent
The whole setup is one message to your agent:
Read https://raw.githubusercontent.com/gkoreli/backlog-mcp/main/SKILL.md and follow it to install backlog-mcp.
SKILL.md is written for the agent, not for you: it detects the host harness (Claude Code, Cursor, Codex, any MCP client, or plain CLI), registers the server, runs the first wakeup against your repo, and verifies that git stayed clean and the briefing stayed under budget.
Self-hosting (legacy, descoped)
A Cloudflare Workers + D1 build exists for an always-on remote endpoint, but it is descoped — retained, not evolved. It lacks local embeddings, hybrid-search/RAG parity, and agentic memory, and no new capability targets it. Local-first is the architecture; remoteness is meant to be reached by syncing local stores, not by promoting a remote database to the source of truth.
If you specifically need the legacy remote mode, its Workers config lives in packages/server/wrangler.jsonc and its schema in packages/server/migrations/. Deploy with npx wrangler deploy from packages/server, then point an MCP client at it via mcp-remote https://<your-worker>.workers.dev/mcp.
Web Viewer
Open http://localhost:3030 — always available when the server is running.
The Desk — http://localhost:3030/desk — is the viewer's attention page: one server-composed briefing answering "what should I look at, read, review and judge right now." At most 7 items above the fold, worst-first, across four classes (JUDGE / REVIEW / READ / HEALTH); every item says why it surfaced, carries provenance chips (home, author, worktree), and offers a copy-ready instruction to hand your agent. Read-only by law — verdicts flow through your agent, never through the UI.
Features:
Split pane layout with task list and detail view
Spotlight search with hybrid text + semantic matching
Real-time updates via SSE
Activity timeline
Filter by status, type, epic
Dark/light theme toggle (Tsa design system)
Syntax highlighting via Shiki (VS Code-quality, dual-theme CSS variables)
GitHub-flavored markdown rendering with Mermaid diagrams
URL state persistence
The viewer UI is built with Nisli (@nisli/core) and styled with Tsa (ცა, Georgian for "sky") — our design system that pairs with Nisli.
Substrates (Entity Types)
7 built-in substrate types, each declared once and stored as markdown files with YAML frontmatter. New types cost one declaration — the catalog is open-ended by design.
Type | Prefix | Purpose |
Task |
| Work items |
Epic |
| Groups of related tasks |
Folder |
| Organizational containers |
Artifact |
| Attached outputs (research, designs, logs) |
Milestone |
| Time-bound targets with due dates |
Cron |
| Scheduled-intake descriptors (executed by an external scheduler) |
Memory |
| Durable agent memories — recalled, decayed, superseded, ranked by usage |
Status values: open, in_progress, blocked, done, cancelled
Beyond the built-ins, a project can declare its own substrate types as data — a versioned JSON definition plus a bounded JSON Schema (Draft 2020-12), never executable code. Built-in and project-defined types share one project-scoped registry, so the catalog grows without touching storage, search, or the viewer (ADR 0113).
Example task file:
---
id: TASK-0001
title: Fix authentication flow
status: open
parent_id: EPIC-0002
references:
- url: https://github.com/org/repo/issues/123
title: Related issue
evidence:
- Fixed in PR #45
---
The authentication flow has an issue where...MCP Tools
Memory (the core loop)
Four verbs, zero ceremony — orient, ask, keep, correct. Memories are first-class entities (MEMO- ids), hidden from plain list/search by design; recall is their dedicated read surface.
backlog_wakeup # Orient: one dense briefing (active work, top knowledge)
backlog_wakeup operation="OP-0001" # Orient mid-flight: that operation's live state leads the briefing (goal, next action, constraints)
backlog_recall query="how do we release?" # Ask: hybrid-ranked recall, returns stubs to expand
backlog_remember content="..." layer="procedural" # Keep: one durable, atomic fact
backlog_forget id="MEMO-0042" # Correct: soft-expire (stays auditable in the viewer)The briefing ends with a two-line memory protocol (when to recall, when to remember) and enforces a hard byte ceiling with a deterministic yield ladder — constraints never yield.
Retrieval is one language: orient (wakeup) → ask (recall / search) → expand (backlog_get id=… context=true).
backlog_list
backlog_list # Active tasks (open, in_progress, blocked)
backlog_list status=["done"] # Completed tasks
backlog_list type="epic" # Only epics
backlog_list parent_id="EPIC-0002" # Tasks in an epic
backlog_list parent_id="FLDR-0001" # Items in a folder
backlog_list query="authentication" # Search across all fields
backlog_list counts=true # Include counts by status/type
backlog_list limit=50 # Limit resultsbacklog_get
backlog_get id="TASK-0001" # Single item
backlog_get id=["TASK-0001","EPIC-0002"] # Batch get
backlog_get id="TASK-0001" context=true # Item + neighborhood stubs (parent/children/siblings/refs/referenced_by/related)Intent writes
backlog_create_work title="Fix bug" content="Details..." parent_id="EPIC-0002"
backlog_start_task id="TASK-0001"
backlog_complete_task id="TASK-0001" evidence=["Fixed in PR #45"]
backlog_block_task id="TASK-0001" blocked_reason=["Waiting on API"]
backlog_plan_epic title="Q1 Goals" content="Quarterly outcomes"
backlog_organize_folder title="Research"
backlog_attach_artifact title="Findings" content="..." parent_id="TASK-0001"
backlog_target_milestone title="v2.0 Release" due_date="2026-03-01"
backlog_schedule_cron title="Weekly review" schedule="0 9 * * 1" command="..."
backlog_propose_adr title="Choose storage" content="..."
backlog_capture_requirement title="Local-first" content="No cloud dependency"
backlog_capture_prompt title="Founder directive" content="..."Transitions have matching narrow verbs (backlog_pause_cron,
backlog_resume_cron, backlog_accept_adr, and backlog_supersede_adr). The
MCP surface intentionally has no generic create/update dialect: the active
substrate registry exposes only declared semantic intents. Operators retain
the low-level backlog create / backlog update CLI escape hatch for rare or
undeclared substrates.
backlog_delete
backlog_delete id="TASK-0001" # Permanent deletebacklog_search
Full-text + semantic hybrid search with relevance scoring:
backlog_search query="authentication bug"
backlog_search query="design decisions" types=["artifact"]
backlog_search query="blocked tasks" status=["blocked"] limit=10
backlog_search query="framework" sort="recent"
backlog_search query="search ranking" include_content=truewrite_resource
Edit the Markdown body of an existing entity. Create and transition entities through the substrate-declared intent verbs above.
# Edit task body (use str_replace — protects frontmatter)
write_resource uri="mcp://backlog/tasks/TASK-0001.md" \
operation={type: "str_replace", old_str: "old text", new_str: "new text"}
# Insert after a specific line
write_resource uri="mcp://backlog/tasks/TASK-0001.md" \
operation={type: "insert", insert_line: 5, new_str: "inserted line"}
# Append to a file
write_resource uri="mcp://backlog/resources/log.md" \
operation={type: "append", new_str: "New entry"}Operations: str_replace (exact match, must be unique), insert (after line number), append (end of file).
How It Works
Running npx -y backlog-mcp (the default MCP config) does the following:
Starts a persistent HTTP server as a detached background process — serves both the MCP endpoint (
/mcp) and the web viewer (/) on port 3030Bridges stdio to it — your MCP client communicates via stdio, which gets forwarded to the HTTP server via
mcp-remoteAuto-updates:
npx -yalways pulls the latest published version. If the running server is an older version, it's automatically shut down and restarted with the new oneResilient recovery: If the bridge loses connection, a supervisor restarts it with exponential backoff (up to 10 retries). Connection errors like
ECONNREFUSEDare detected and handled automatically
The HTTP server persists across agent sessions — multiple MCP clients can share
it. Each request selects its own backlog home, so one daemon can serve the
global ~/.backlog/docs/ and several projects without mixing their state. From
a repository, the bridge selects that project's docs/; outside one, it
selects global. The web viewer is always available at
http://localhost:3030.
CLI
All commands via npx:
npx backlog-mcp # Start stdio bridge + auto-spawn HTTP server (default)
npx backlog-mcp status # Check server status
npx backlog-mcp stop # Stop the server
npx backlog-mcp version # Show version
npx backlog-mcp serve # Run HTTP server in foreground (optional, see below)
npx backlog-mcp --home global migrate docs-native --dry-runSample outputs:
$ npx backlog-mcp status
Server is running on port 3030
Version: 0.65.0
Data directory: /Users/you/.backlog/docs
Task count: 451
Uptime: 3515s
Viewer: http://localhost:3030/
MCP endpoint: http://localhost:3030/mcp
$ npx backlog-mcp stop
Stopping server on port 3030...
Server stopped
$ npx backlog-mcp status
Server is not runningThe CLI exists for humans to inspect and manage the background server that agents use. Since the default mode spawns a detached process, you need status to check it and stop to shut it down.
serve runs the HTTP server in the foreground instead of detached — useful
for local debugging or running without an MCP client. The daemon binds to
loopback because project-root selection is a trusted local capability; it is
not a network-facing filesystem API. In normal usage you never need serve;
the default command handles everything.
One-shot migration
Stop the detached server before migrating an existing global backlog:
npx backlog-mcp stop
npx backlog-mcp --home global migrate docs-native --dry-run
npx backlog-mcp --home global migrate docs-nativeThis routes the old flat ~/.backlog/tasks/ Markdown into
~/.backlog/docs/, moves tool-owned state, and rebuilds derived caches. A
retired custom root can be supplied for this command only:
BACKLOG_DATA_DIR=/path/to/old/backlog \
npx backlog-mcp --home global migrate docs-nativeFor a project that already has the old control directory, migrate only its
tool-owned state; committed docs/ is never touched:
npx backlog-mcp --home project --project-root /path/to/repo \
migrate docs-nativeBoth commands are idempotent and fail closed when old and new control layouts are both present.
Claude Code session hooks (the memory protocol)
Every wakeup briefing ends with a two-line memory protocol: a recall rubric (when to reach for prior knowledge instead of re-deriving it) and its session-end twin, a remember rubric (the three conditions worth writing down, in your own words, before the session ends). The rubric is policy, not retrieved data — the briefing stays bounded by a hard 3,072-byte ceiling with the rubric as non-droppable content (ADR 0118.1).
The client owns the hooks; the server never automates recall or memory writes
(ADR 0117, 0118.1 R1). To mount the
briefing in Claude Code, add a SessionStart command hook to
.claude/settings.json:
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume|clear|compact",
"hooks": [
{
"type": "command",
"command": "npx backlog-mcp --home project --project-root \"$CLAUDE_PROJECT_DIR\" wakeup --max-knowledge 0 --max-constraints 3 --max-completions 3 --max-activity 3 | jq -Rs '{hookSpecificOutput:{hookEventName:\"SessionStart\",additionalContext:.}}'",
"timeout": 10
}
]
}
]
}
}Notes on the recipe:
--max-knowledge 0is load-bearing. Session start injects policy, not retrieved memories; the agent recalls when its intent warrants it (0118.1 R2). Everything else stays at recipe defaults.The
jqwrapper is the current hook contract: Claude Code injectshookSpecificOutput.additionalContext, not raw stdout.Fail-open: if the command fails, the session starts with no briefing and no error stops the agent. Never wire this hook to block.
A command hook (not an MCP-tool hook) is intentional —
SessionStartoften fires before MCP servers connect.
The remember half needs no second hook. Claude Code's SessionEnd and
PreCompact events cannot deliver text to the model (they are cleanup and
receipt boundaries), so the remember prompt is delivered by the briefing
itself and re-delivered at every compaction boundary through the compact
matcher above: the re-primed session reads the protocol again while its
context is fresh. This is by design, not limitation — the capture law
(PROMPT 0006) wants
the doer writing at its own checkpoint, in its own words, not an external
event squeezing a summary out of a dying session. Clients that own continuity
(e.g. an orchestrator harness) may attach their own PreCompact/SessionEnd
receipt hooks; those record lifecycle facts, never memory payloads
(0118.1 R3).
If you want a mechanical end-of-turn nudge anyway, a Stop hook can inject
additionalContext — but it fires on every turn and pays permanent context
tax, which is exactly what the protocol design avoids. Prefer the rubric.
Configuration
BACKLOG_VIEWER_PORT=3030 # HTTP server port
BACKLOG_HOME=project # Optional caller default: project or global
BACKLOG_PROJECT_ROOT=/path # Optional explicit project root
BACKLOG_CONTEXT=FLDR-0001 # Optional entity context inside the homeCreate a .env file for local development — see .env.example.
Agent identity (the attribution ladder)
Writes attribute to an agent identity — an AGENT- doc id or a declared
principal like aime:granite — configured once at the scope it belongs
to, exactly like git identity itself
(ADR 0119.1):
git config extensions.worktreeConfig true # once per repo: enables worktree stamps
git config --worktree backlog.agent aime:granite # this delegation worktree IS this agent
BACKLOG_AGENT=aime:granite # this harness session (settings env block)
git config backlog.agent aime:granite # this checkout — single-agent checkouts only
git config --global backlog.agent goga # machine-wide standing defaultFirst present rung wins, most deliberate first: explicit --as / MCP as →
worktree config → BACKLOG_AGENT → checkout config → user config → absent.
The worktree stamp deliberately beats the environment: a spawned agent
inherits its parent's env through no choice of its own, while the stamp was
placed for it at delegation time. The wakeup meta line always names the
winning rung — identity: granite (worktree config) — and stays an honest
identity: absent when nothing is configured. One anti-pattern: never stamp
a shared checkout (a directory both you and an agent work in) — identity
there belongs to the session env, which scopes to the session, not the
directory.
Development
git clone https://github.com/gkoreli/backlog-mcp.git
cd backlog-mcp
pnpm install
pnpm build # Build all packages
pnpm test # Run all workspace tests
pnpm dev # Vite dev server (SPA + API on one port, HMR)pnpm dev runs a single Vite process that serves the viewer (with granular component HMR) and the Hono backend (API, SSE, MCP) on one origin — edit a component and it hot-swaps in the browser without a page reload. The architecture mirrors prod: one server, one port, same dispatch.
Architecture
packages/
├── server/ # MCP server, substrates, memory, storage
├── memory/ # Hybrid search (Orama BM25 + vector), memory retrieval/ranking
├── viewer/ # Web UI built with @nisli/core
└── shared/ # Entity types, ID utilities
docs/
└── adr/ # backlog-mcp architecture decision recordsBacklog ADRs document significant design decisions. See docs/adr/README.md for the full index. Nisli ADRs live in the Nisli repository.
License
MIT
Available Tools
23 toolsbacklog_accept_adrA
Use when ratifying an existing proposed ADR.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description lacks disclosure of behavioral traits such as idempotency, effects, permissions, or what 'ratifying' entails, which is a significant gap for a mutation 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 a single, concise sentence with no unnecessary words, earning 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?
Given the simplicity of the tool (2 params, no output schema, no annotations), the description is somewhat incomplete, lacking explanation of the ratifying process and any connection to sibling tools.
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 50% (id lacks description), and the description adds no parameter information beyond the schema, failing to explain what 'id' represents or how to obtain 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?
The description clearly states the action ('ratifying') and the resource ('existing proposed ADR'), distinguishing it from sibling tools like backlog_supersede_adr.
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 states when to use ('when ratifying an existing proposed ADR'), but does not provide exclusions or alternatives, though context implies differentiation from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_attach_artifactB
Use when attaching an artifact to a project item. parent_id is required.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| path | No | ||
| title | Yes | ||
| content | No | ||
| parent_id | Yes | ||
| references | No | ||
| content_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states the action and required field, lacking information on side effects, permissions, or idempotency.
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 extremely concise at one sentence, front-loading the key usage context. Every word contributes value, though 'parent_id is required' is somewhat redundant with the schema.
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 7 parameters, no output schema, and no annotations, the description is far from complete. It does not explain return values, additional constraints, or the nature of the artifact being attached.
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 only 14% (1 out of 7 parameters have schema descriptions). The description adds no parameter meaning beyond noting that 'parent_id is required', which is already in the schema. Fails to compensate for the low 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 action 'attaching an artifact' and the target 'project item', which distinctly identifies the tool's purpose from siblings like 'backlog_capture_reference' or 'backlog_capture_requirement'.
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 a usage context ('Use when attaching an artifact to a project item'), but it does not explicitly compare to alternatives or specify when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_block_taskC
Use when blocking a task with a reason.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes | ||
| blocked_reason | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It only states the basic purpose, omitting behavioral traits: whether the action is irreversible, what side effects occur (e.g., task disables), permissions needed, or idempotency. This renders transparency insufficient for an agent to predict outcomes.
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 barely informative sentence. While concise with no wasted words, it lacks structure and fails to front-load key details. It is not overly verbose, but the brevity comes at the cost of clarity.
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's complexity (3 parameters, 2 required), no output schema, no annotations, and many siblings, the description is critically incomplete. It does not explain the semantics of blocking, return values, or how this tool relates to similar ones. A tool with this profile requires more context for safe 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 description coverage is low (33%, only 'as' documented). The description adds no meaningful parameter-level guidance beyond the schema; it mentions 'blocking with a reason' but does not explain how 'id' or 'blocked_reason' should be used. With low schema coverage, the description should compensate but fails to do so.
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 'blocking' and the resource 'task', indicating the tool marks a task as blocked with a reason. However, it does not distinguish this from sibling tools like backlog_complete_task or backlog_delete, which could be confused.
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 a conditional usage guide ('Use when blocking a task with a reason'), which implies when to use it but does not explicitly state when not to use it or mention alternative tools. Given the many siblings, this is minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_capture_promptC
Use when preserving a verbatim human directive as a chronological project prompt.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| date | No | ||
| title | Yes | ||
| content | Yes | ||
| spawned | No | ||
| supersedes | No | ||
| uploaded_by | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavior. It only states 'preserving' without mentioning that it writes to a backlog, requires permissions, or any side effects, leaving significant gaps.
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, front-loaded sentence with no wasted words. It earns its place, though it could be slightly expanded without losing conciseness.
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?
With 7 parameters (2 required) and no output schema, the description is too brief. It omits parameter roles, return behavior, and usage context, making it incomplete for an agent to use confidently.
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 only 14%, yet the description adds no parameter meanings beyond what the schema provides (e.g., required fields, constraints). The agent gets little help understanding how to use the 7 parameters.
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 preserves 'a verbatim human directive as a chronological project prompt,' specifying verb and resource. However, it does not differentiate from sibling tools like backlog_capture_reference or backlog_capture_requirement.
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 indicates when to use ('Use when preserving...') but provides no guidance on when not to use or how this tool compares to alternatives, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_capture_referenceA
Use when recording an external technology, prior-art system, or benchmark this project builds on — with authoritative citations and the project's adopt/park/reject relationship to it.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| title | Yes | ||
| content | Yes | ||
| bears_on | Yes | NORTH-STAR tenets/invariants and ADRs this subject bears on. | |
| category | Yes | ||
| citations | Yes | ||
| what_it_is | Yes | ||
| our_relationship | Yes | What this project adopts, parks, or rejects from the subject, and why — with exact repo file citations where reproductions exist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only mentions citations and relationship but does not explain side effects (e.g., creation of a record), required permissions, or what happens on invocation. The required parameters imply a write operation, but the description lacks explicit behavioral details.
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, concise sentence that front-loads the purpose. Every word adds value, with no wasted content.
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 output schema, low parameter coverage, and no annotations, the description is incomplete. It does not explain return values, state changes, or how to fill the 8 parameters (7 required). The tool is more complex than the description suggests.
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 only 38%, yet the description adds little parameter-level meaning beyond 'citations' and 'relationship'. It does not clarify 'as', 'title', 'content', 'bears_on', 'category', or 'what_it_is'. The enum for 'category' is not mentioned, nor the format for 'citations'. The description fails to compensate for low 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 purpose: recording an external technology, prior-art system, or benchmark with citations and relationship. It uses a specific verb-resource combination and distinguishes from sibling tools like 'backlog_capture_prompt' or 'backlog_capture_requirement' by focusing on external references.
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 states 'Use when recording an external technology, prior-art system, or benchmark', providing clear context. While it does not list alternatives or exclusions, the context sufficiently guides selection among sibling capture tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_capture_requirementC
Use when recording a human or system requirement in the current project.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| date | No | ||
| title | Yes | ||
| domain | No | ||
| status | No | intake | |
| content | Yes | ||
| spawned | No | ||
| checked_at | No | ||
| checked_by | No | ||
| compliance | No | unchecked | |
| grounds_in | No | ||
| supersedes | No | ||
| uploaded_by | No | ||
| violated_by | No | ||
| check_evidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits (e.g., side effects, authorization needs, or data persistence). The phrase 'recording' implies creation, but the tool could also update existing requirements, which is unclear.
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, making it efficient but vague. It earns its place by being brief, but lacks sufficient detail for a 15-parameter 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?
Given the tool's complexity (15 parameters, no output schema, no annotations), the description fails to explain return values, behavior, or how parameters interact. The phrase 'current project' is ambiguous without defined scope.
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?
With only 7% schema description coverage, the description adds no parameter context beyond the schema's minimal descriptions. An agent cannot infer which of the 15 parameters are key or how they relate (e.g., 'as', 'date', 'status').
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 records a 'human or system requirement' in the current project, providing a specific verb and resource. However, it does not differentiate from sibling tools like backlog_capture_prompt or backlog_capture_reference.
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 only says 'use when recording...' with no guidance on when not to use, prerequisites, or alternatives. This leaves an AI agent without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_complete_taskC
Use when completing a task, optionally with evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes | ||
| evidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It mentions 'optionally with evidence' but does not disclose if the operation is destructive, idempotent, requires authentication, or any side effects. For a mutation tool, this is insufficient.
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 very short (1 sentence) and front-loaded with the verb. However, it omits crucial details, making it under-specified rather than efficiently concise.
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 output schema, no annotations, and 3 parameters, the description should explain what completing a task means, return values, error conditions, and relation to other tools. It only mentions evidence option. Important context is missing.
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 only 33% (only 'as' has a description). The description adds no meaning to parameters beyond the schema, not even for the required 'id' or the optional 'evidence'. It does not compensate for the low 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 action ('completing a task') and mentions an optional feature (evidence). It distinguishes from siblings like 'backlog_block_task' or 'backlog_create_work' by the verb, but lacks specificity on what completion entails.
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 only says 'Use when completing a task' which is implicit usage. It provides no guidance on when not to use, prerequisites, or alternatives like blocking or creating tasks. The sibling tools list is not leveraged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_consolidation_candidatesA
List clusters of episodic memories that are ripe for consolidation into durable knowledge. Consolidator workflow: (1) call this and take ripe bundles; (2) per bundle, read members (backlog_get on MEMO- ids for depth), then write ONE narrative memory via backlog_remember({ layer: "semantic"|"procedural", derived: true, entity_refs: [member MEMO- ids + key source entities], context }) — a self-contained story, not fragments; (3) retire the members via backlog_forget({ ids }) so they stop appearing here while staying auditable; (4) track your progress with a backlog_remember state_key like "consolidation.watermark.".
| Name | Required | Description | Default |
|---|---|---|---|
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| limit | No | Max bundles, ripe first. Default: 10. | |
| context | No | Restrict to one context (e.g. "FLDR-0001"). | |
| min_count | No | Minimum bundle size to be ripe. Default: 3. | |
| min_demand | No | Recall-demand threshold — bundles recalled this often (30d) are ripe regardless of age. Default: 3. | |
| max_digests | No | Max digest lines per bundle. Default: 10. | |
| min_age_days | No | Minimum age (days) of the oldest member. Default: 7. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavioral traits. While it implies a read operation ('list'), it does not explicitly state safety characteristics (e.g., read-only, no side effects). The workflow mentions future deletions via backlog_forget, but the tool itself is not clarified. A middle score is warranted as the description adds context but is not fully 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 a single paragraph but well-organized with numbered workflow steps. It efficiently conveys necessary information without redundancy. Slightly more structure (e.g., bullet points) could improve scanability, but it remains concise.
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 complexity of the tool and its role in a multi-step workflow, the description fully explains what it returns (clusters/bundles of memories), how to use it, and the meaning of parameters in context. No output schema exists, but the description implies output structure sufficiently.
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 baseline is 3. The description adds significant value by explaining how parameters like min_count, min_demand, and min_age_days determine ripeness, and by providing context on bundle structure. This goes well beyond the schema descriptions.
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 begins with a clear verb and resource: 'List clusters of episodic memories that are ripe for consolidation'. It specifies the exact purpose and distinguishes from siblings by referencing the consolidation workflow and related tools.
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 an explicit step-by-step consolidator workflow (1-4), telling the agent when to call this tool, how to process results, and which sibling tools to use subsequently. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_contradictionsA
List structural contradictions in memory: sets of ≥2 LIVE memories that share one state_key (e.g. "db.primary"), which should never happen — a new memory with a state_key auto-expires the previous holder. Each set means two beliefs about the same fact are both active. Resolution is yours, never automatic: pick the correct member, then either backlog_remember({ content, state_key, supersedes: }) to record the right value and retire the rest, or backlog_forget({ ids: [] }) to expire the wrong ones. Read members with backlog_get for full context before deciding. Set candidates: true to list semantic collision candidates instead: nearby live facts that deserve review, never contradiction verdicts.
| Name | Required | Description | Default |
|---|---|---|---|
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| candidates | No | Return semantic collision candidates instead of structural state_key contradictions. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility. It accurately conveys that the tool lists contradictions non-destructively and that resolution is manual. It also clarifies the difference between structural contradictions and semantic collision candidates. While read-only nature is implied, an explicit statement would improve 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?
The description is thorough but somewhat verbose, packing significant procedural detail into a single paragraph. While every sentence adds value, it could be more concise by separating the resolution workflow into a bulleted list or shorter statements.
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's complexity (two modes, resolution workflow, and no output schema), the description covers the essential concepts: what contradictions are, how to use the tool, and next steps. It mentions reading members via backlog_get for context. Lacking only an explicit statement about the output format (e.g., list of memory IDs).
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?
All parameters have schema descriptions (100% coverage). The tool description adds value by explaining the conceptual difference between 'candidates' and contradictions, beyond the schema's 'semantic collision candidates'. This contextual enrichment aids an agent in selecting the appropriate mode.
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 identifies the tool's purpose: listing structural contradictions in memory, specifically sets of ≥2 LIVE memories sharing a state_key. It explicitly distinguishes itself from sibling tools like backlog_remember and backlog_forget by detailing the resolution workflow using these tools, making its unique role evident.
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 guidance on when to use the tool (to find and resolve structural contradictions) and how to proceed after using it (via backlog_remember or backlog_forget). It also explains the 'candidates' parameter for semantic collision candidates. However, it does not contrast directly with other list-like siblings such as backlog_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_create_workB
Use when creating a project work item. Pass parent_id when known; parentless work surfaces as unfiled at wakeup.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| title | Yes | ||
| content | No | ||
| parent_id | No | ||
| references | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses one behavioral trait: parentless work surfaces as unfiled at wakeup. This adds context beyond the tool name, but there is no information about side effects, permissions, or rate limits. With no annotations, the description carries the full burden but only partially fulfills it.
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 consists of two sentences with no wasted words. The purpose is established in the first sentence, and additional guidance follows immediately. Every part 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?
With 5 parameters, 1 required, no output schema, and no annotations, the description is too sparse. It explains only the parent_id behavior but omits details about content, references, the 'as' parameter, and return value. For a creation tool, more context is needed for proper agentic selection.
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 only 20% (only 'as' is described in schema). The description adds meaning to 'parent_id' by explaining the consequence of omitting it. However, other parameters ('title', 'content', 'references') receive no additional clarification, which is insufficient given the low 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 states 'Use when creating a project work item' which clearly identifies the action (creating) and the resource (project work item). However, it does not differentiate from sibling tools like backlog_capture_requirement or backlog_remember, which may have overlapping purposes.
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 a when-to-use statement ('Use when creating a project work item') and parameter guidance ('Pass parent_id when known'), but lacks explicit exclusions or alternatives. The usage is implied rather than directly compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_deleteC
Delete an item permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes | Task ID to delete | |
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states that deletion is permanent, but lacks details on side effects, cascade deletions, permission requirements, or whether the action is reversible. Without annotations, the description carries the full burden and falls short.
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, concise sentence that front-loads the verb and object. It is efficient but could benefit from additional structure or context without becoming verbose.
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 4 parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, error conditions, or the scope of deletion, making it incomplete for a mutation 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 description coverage is 100%, so baseline is 3. The description does not add any meaning beyond the schema; it fails to explain parameters like 'as', 'home', or 'project_root'.
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 (delete) and the object (item), with 'permanently' emphasizing finality. However, it does not distinguish this tool from siblings like backlog_forget or backlog_complete_task, which may involve deletion-like 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 provides no guidance on when to use this tool versus alternatives, such as backlog_forget or backlog_complete. There is no context about prerequisites or scenarios where deletion is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_forgetA
Retract memories — soft-expire them so recall stops returning them (the record stays auditable in the viewer). Use when knowledge is wrong or obsolete and there is no replacement (if there IS a replacement, use backlog_remember with supersedes instead). expired:true garbage-collects already-expired memories.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Specific MEMO- ids to forget. | |
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| layer | No | Forget all memories in a layer. | |
| context | No | Forget all memories scoped to this context (e.g. "FLDR-0001"). | |
| expired | No | GC mode: hard-delete memories that are already expired. | |
| older_than | No | Forget memories created before this ISO date/datetime. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses soft-expire vs hard-delete, audit trail, and GC mode. Lacks idempotency and auth details, but sufficient for core behavior.
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 purpose, usage, and GC note. Front-loaded with action and effect. No wasted words.
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 7 boolean/string params, no output schema, and no annotations, description covers core behavior and parameter usage. Missing return value info but typical for forget action. Adequate for tool selection.
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 100% (baseline 3). Description adds meaningful context: 'ids' as MEMO- ids, 'home' as document home override, 'layer' as memory layer, 'context' with example, 'expired' as GC mode, 'older_than' with ISO date, 'project_root' as override. Provides value beyond 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?
Clear verb 'retract' and 'soft-expire', resource 'memories', effect 'recall stops returning, record stays auditable'. Distinguishes from sibling backlog_remember with supersedes.
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 states when to use (knowledge wrong/obsolete, no replacement) and when not to (if replacement exists, use backlog_remember with supersedes). Also explains expired:true GC mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_getA
Get full details by ID. Accepts task IDs (TASK-0001, EPIC-0002), document paths (README.md, docs/adr/0001-example.md), or MCP resource URIs (mcp://backlog/resources/design.md). Works for any item regardless of status. Pass context:true when starting work on an entity to also see its relational neighborhood as stubs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID (e.g. TASK-0001), document path (e.g. README.md, docs/notes/file.md), or MCP resource URI (e.g. mcp://backlog/resources/file.md). Array for batch fetch. | |
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| depth | No | Relational expansion depth with context:true. 1 = direct relations (default), 2 = grandparents/grandchildren. | |
| context | No | Expand the entity's relational neighborhood as stubs — parent/children/siblings/references/referenced_by/related; hydrate any stub with another backlog_get. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries full burden. It fully discloses accepted ID formats, batch fetching via array, relational expansion via context and depth parameters, and override behavior for home and project_root. The tool is clearly read-only with no destructive side effects mentioned. No contradictions.
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?
Purpose is front-loaded in the first sentence. All subsequent sentences are compact and informative. No redundant or filler content. Efficiently packs significant usage detail into a small space.
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 output schema, description covers input variations, parameter behaviors, and relational expansion well. It explains what the tool returns ('full details' and 'stubs') but could be slightly more specific about the stub format. Overall adequate for an agent to use 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%, baseline 3. Description adds meaning beyond schema: explains context:true yields stubs for hydrate, depth controls expansion level (1=direct, 2=grand), home selects global vs project, and project_root overrides bridge. This adds value and justifies a score above baseline.
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?
Specifically states it retrieves full details by ID, accepts multiple ID formats (task IDs, document paths, MCP URIs), and works for any item regardless of status. This clearly distinguishes it from sibling tools like backlog_search (which might list items) and other operations.
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?
Provides guidance on when to use context:true ('when starting work on an entity') and mentions that the tool works for any status. Implicitly suggests this is for fetching known entities, but does not explicitly contrast with alternatives like backlog_search or backlog_recall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_organize_folderA
Use when creating a folder to organize project items. Pass parent_id when known; parentless work surfaces as unfiled at wakeup.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| title | Yes | ||
| content | No | ||
| parent_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It reveals the unfiled behavior for parentless folders but omits permission requirements, error handling, or effects of other parameters like 'as' or 'content'.
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 wasted words. Information is front-loaded and immediately actionable.
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?
With 4 parameters, no output schema, and no annotations, the description leaves gaps: no return value description, no error conditions, and insufficient guidance for 'as' and 'content' 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 low (25%, only for 'as'). The description adds meaning for parent_id (parentless unfiled) but offers no details on title or content, which are also undocumented 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 clearly states the tool creates a folder to organize project items. This distinguishes it from sibling tools like backlog_create_work (which likely creates general work items) and other specialized tools.
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 advises to pass parent_id when known and explains consequences of parentless creation. However, it does not explicitly exclude alternatives or mention when to use backlog_create_work instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_pause_cronB
Use when pausing a scheduled intake.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lacks behavioral details such as reversibility, idempotency, or required permissions. For a mutative action, this is insufficient.
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?
Extremely concise (one sentence), but lacks structure. Front-loaded with purpose, but too brief to cover necessary 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 2-parameter tool with no output schema or annotations, description is very incomplete. Missing behavioral and parameter context.
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?
With 50% schema coverage, description adds no parameter details beyond the schema. Fails to explain what 'id' refers to or the role of 'as'.
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 verb 'pausing' and resource 'scheduled intake', distinguishing it from siblings like backlog_resume_cron and backlog_schedule_cron.
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 says when to use ('when pausing a scheduled intake'), but does not mention when not to use or provide alternatives. Context is clear given sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_recallA
Recall memories — knowledge and episodes captured across sessions. Returns STUBS (title + one-line digest + provenance) by default; expand interesting ones with backlog_get(MEMO-id), or pass full:true for bodies. Weigh a stub's trust BEFORE hydrating: age_days (on the knowledge's own timeline), uses/idle_days (recall demand), supersedes (this is a correction), derived (consolidator inference), kind (current/historical/plan/preference/timeless). Old + never-used = treat as hypothesis, not truth. Distinct from backlog_search (live entities). Use to answer "how do we deploy?", "have I hit this before?", "what did I finish about X?". Memories point back to source entities via entity_id.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Return full memory bodies instead of stubs. Prefer stubs + backlog_get for the ones you need. | |
| home | No | Select the document home for this read. "all" queries global plus the explicitly supplied/bridged project root; it never scans prior projects. | |
| tags | No | Filter by memory tags (any-match). e.g. ["artifact"] or ["task"]. | |
| limit | No | Max results. Default: 10. | |
| query | Yes | Free-text query (keyword or phrase). | |
| layers | No | Restrict to specific memory layers. Default: all persisted layers (episodic + semantic + procedural). | |
| context | No | Optional scope — usually a parent_id like "FLDR-0001". Filters to memories captured with that entity as their context. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. | |
| token_budget | No | Approximate token budget — results are greedily packed to fit. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description compensates fully. Explains stub format (title, digest, provenance), trust fields (age_days, uses/idle_days, supersedes, derived, kind), and interpretation ('Old + never-used = treat as hypothesis'). Also mentions entity_id linking back to source entities.
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?
Well-structured: purpose, output description, trust guidance, usage examples. Length is justified by richness of info; slightly verbose but no waste.
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 9 parameters, no output schema, description fully explains return format, trust interpretation, and usage contexts. Covers all necessary aspects.
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 baseline is 3. Description adds context like 'prefer stubs + backlog_get' but doesn't provide new parameter semantics beyond 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?
Clearly states 'Recall memories — knowledge and episodes captured across sessions.' Distinguishes from backlog_search (live entities) and backlog_get (for expanding stubs).
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 example queries ('how do we deploy?', 'have I hit this before?') and contrasts with backlog_search. Gives guidance on stub vs full retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_rememberA
Write a durable memory — a stable fact, a procedure, or a preference you should know next session. Use when you learn something worth keeping: "this repo deploys via wrangler", "Goga prefers terse evidence bullets". To CORRECT existing knowledge, pass supersedes (the old MEMO- id is expired, lineage kept) or state_key (previous holders of the same evolving fact are closed). The optional collision_candidates receipt is tri-state: [] means the advisory scan completed clean; a non-empty array means nearby facts deserve adjudication; absent means the advisory scan did not run or failed, not that the write failed. Do not use for task events — completions are captured automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| kind | No | Temporal kind: current fact / historical fact / future plan / preference / timeless (exempt from recency decay). | |
| tags | No | Freeform labels for filterable recall. | |
| layer | No | semantic = stable fact (default). procedural = how-to/process. episodic = a specific event worth keeping. | |
| title | Yes | Memory title (required, like a task title) — a short human-readable label for the fact. Title and body are both first-class. | |
| content | Yes | The memory body (markdown) — the fact itself. | |
| context | No | Scope container id (e.g. "FLDR-0001") — enables scoped recall and wakeup. | |
| derived | No | Mark as inference (consolidator output). Requires non-empty entity_refs citing the sources. | |
| state_key | No | Evolving-fact key (e.g. "build.bundler"). Storing a new memory with an existing key closes the previous holder. | |
| supersedes | No | MEMO- id this memory replaces. The predecessor is soft-expired. | |
| entity_refs | No | Source entities this knowledge derives from (e.g. ["TASK-0676"]). | |
| occurred_at | No | When the remembered event occurred — ISO date/datetime. Decay uses this instead of write time. | |
| valid_until | No | Expiry — ISO date/datetime. After this the memory drops out of recall. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It explains the tri-state collision_candidates receipt, how supersedes soft-expires predecessors, and that state_key closes previous holders. This goes beyond the schema to disclose behavioral traits.
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 around 150 words and front-loaded with the core purpose. It is informative but slightly dense as a single paragraph; bullet points could improve scannability. Nonetheless, every sentence 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 15 parameters and no output schema, the description covers key behaviors (writing, correcting, receipt handling, scope) but doesn't detail the return value or error cases. It is mostly complete, leaving only minor gaps.
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 baseline is 3. The description adds significant value by explaining the tri-state collision_candidates, how supersedes and state_key work, and giving usage examples, which enhances understanding beyond the schema descriptions.
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 'Write a durable memory' with concrete examples like 'this repo deploys via wrangler', which is specific. It distinguishes from siblings by explicitly saying 'Do not use for task events — completions are captured automatically' and mentioning how to correct knowledge, differentiating it from other write tools.
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 says 'Use when you learn something worth keeping' and warns not to use for task events. However, it does not directly compare with alternatives like backlog_capture_reference or backlog_capture_requirement, though it implies its scope is durable facts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_resume_cronC
Use when resuming a scheduled intake.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description gives no behavioral details beyond the resume action. It fails to disclose side effects, permissions, or safety implications of this mutation.
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, which is concise, but lacks structure such as parameter notes or usage examples. It is adequately sized but not well organized.
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's simplicity (2 params, no output schema, no annotations), the description is incomplete. It omits what 'resuming' entails, the role of the 'id' parameter, and any operational prerequisites.
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 does not mention any parameters. Schema coverage is 50%: the 'as' parameter has a schema description, but 'id' lacks one, and the description fails to add meaning for the required 'id' parameter.
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 specifies 'resuming a scheduled intake', using a clear verb and resource. It distinguishes from siblings like backlog_pause_cron and backlog_schedule_cron by focusing on the resume action.
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?
Only states 'Use when resuming a scheduled intake' without any when-not-to-use or alternative guidance. No context on prerequisites or trade-offs versus sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_schedule_cronB
Use when scheduling recurring project intake. Pass parent_id when known; parentless work surfaces as unfiled at wakeup.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| title | Yes | ||
| command | Yes | ||
| content | No | ||
| enabled | No | ||
| schedule | Yes | ||
| parent_id | No |
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 hints at behavior ('parentless work surfaces as unfiled at wakeup') but does not disclose whether scheduling overrides existing crons, is destructive, requires permissions, or any side effects.
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 redundant words. It immediately states purpose and adds a key behavioral nuance. Consistent with front-loading best practices.
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?
With 7 parameters, no output schema, and no annotations, the description is too sparse. It does not explain schedule format, command string semantics, or the effect of the enabled flag. The mention of parent_id is helpful but incomplete.
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 only 14% (only 'as' parameter described). The description adds meaning only for parent_id. Essential parameters like schedule, command, content, and enabled are left unexplained, which is insufficient given low 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 'Use when scheduling recurring project intake,' which specifies the verb and resource. It implicitly distinguishes from siblings like backlog_pause_cron and backlog_resume_cron, but does not explicitly contrast with backlog_create_work for one-time intake.
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?
Provides when-to-use condition ('scheduling recurring project intake') and a usage tip ('Pass parent_id when known; parentless work surfaces as unfiled at wakeup'). However, lacks explicit guidance on when not to use or alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_searchA
Search across all indexed backlog substrates and generic resources. Returns relevance-ranked results with match context. Use this for discovery; use backlog_list for filtering by status/type.
| Name | Required | Description | Default |
|---|---|---|---|
| home | No | Select the document home for this read. "all" queries global plus the explicitly supplied/bridged project root; it never scans prior projects. | |
| sort | No | Sort mode. "relevant" (default) ranks by search relevance. "recent" ranks by last updated. | |
| limit | No | Max results to return. Default: 20, max: 100. | |
| query | Yes | Search query. Supports keywords, phrases, and natural language. Fuzzy matching and semantic similarity are applied automatically. | |
| types | No | Filter by substrate type or "resource". Default: all searchable types. | |
| status | No | Filter entities by canonical substrate status. Default: all statuses. | |
| parent_id | No | Scope search to items under a specific parent. Example: "EPIC-0001" | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. | |
| include_scores | No | Include relevance scores in results. Default: false. | |
| include_content | No | Include full content in results. Default: false (returns snippets only). Set true when you need the full text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It does not mention side effects, permissions, rate limits, or any safety traits beyond stating it returns ranked results. This is minimal for a tool with 10 parameters and no output schema.
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: the first sentence states purpose and return, the second gives usage guidance. It is concise, front-loaded with key information, and every sentence 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?
Despite 10 parameters and no output schema, the description provides clear usage guidance and the schema covers all parameters. It lacks details on output format beyond 'match context', but is fairly complete for a search tool given the high schema coverage.
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 all parameters. The description adds no extra meaning to parameters beyond the general purpose statement. 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 identifies the tool as a search tool with specific verb 'Search' and resources 'backlog substrates and generic resources'. It states it returns relevance-ranked results with match context, and distinguishes from sibling 'backlog_list' by noting its use for discovery versus filtering.
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 says 'Use this for discovery; use backlog_list for filtering by status/type.' This provides clear guidance on when to use this tool versus an alternative, making it easy for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_supersede_adrA
Use when a newer ADR replaces an accepted or living ADR while preserving lineage.
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| superseded_id | Yes | ||
| replacement_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It highlights preserving lineage, a key behavioral trait, but omits details like whether the superseded ADR is deleted or archived, permission requirements, or side effects. The description adds some value but leaves gaps.
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 well-structured sentence that front-loads the purpose and condition. No extraneous words; 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?
With no output schema and sparse parameter descriptions, the description does not cover return values, error conditions, or the full behavioral effect (e.g., what happens to the superseded ADR). For a write operation, more completeness would be beneficial given the low schema coverage.
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 33% (only 'as' has a description in schema), and the tool description adds no additional meaning to parameters. The description does not explain what superseded_id and replacement_id represent beyond their names, relying on the schema's minimal metadata.
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 action: superseding an ADR while preserving lineage. It distinguishes from siblings like backlog_accept_adr or backlog_delete by focusing on replacement with lineage preservation.
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 specifies when to use ('when a newer ADR replaces an accepted or living ADR'), providing clear context. It does not explicitly exclude other cases or mention alternatives, but the condition is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backlog_wakeupA
Dense session-start briefing: active tasks, current epics, project constraints (requirements as stubs, violated/at-risk first — treat these as standing product intent), recent completions (with evidence snippets), recent activity, and the home-wide unfiled work count. No focal entity required — use this at the start of every session to understand what you were working on. Optional scope narrows the entity sections to a folder, milestone, or epic; unfiled remains home-wide because parentless work has no subtree ancestry. Optional operation resumes a mid-flight operation document: its live state becomes the briefing's FOCUS centerpiece and the rest of the briefing yields budget to it.
| Name | Required | Description | Default |
|---|---|---|---|
| home | No | Select the document home for this read. "all" queries global plus the explicitly supplied/bridged project root; it never scans prior projects. | |
| scope | No | Optional entity ID to scope the briefing to a subtree. Must be a container (folder/milestone/epic). Use a folder ID for project-scoped wake-up (e.g. "FLDR-0001"). Omit to get everything across the whole backlog. | |
| operation | No | Optional focal document ID (e.g. "OP-0001") to resume a mid-flight operation: the briefing gains a `focus` centerpiece carrying that document's declared wakeup projection, and non-focal sections yield budget deterministically (completions 5→2, activity 5→2, knowledge 5→3, declared sections capped at 2; constraints never yield). Works for any document whose substrate declares `disclosure.wakeup`. Unknown or non-live IDs error honestly, naming live candidates. | |
| max_activity | No | Max recent activity-log entries. Default: 5. | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. | |
| max_completions | No | Max done tasks in the "recent" section. Default: 5. | |
| max_constraints | No | Max requirement constraint stubs. Default: 3; 0 disables. Truncation is reported via metadata.constraints_omitted. | |
| evidence_snippet_chars | No | Max chars of evidence to include per completion. Default: 160. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses key behaviors: return sections (tasks, epics, constraints, completions, activity, unfiled), the operation focus mechanism with budget yielding, truncation via metadata.constraints_omitted, and error handling for unknown operation IDs. It does not cover auth or rate limits, but given the read-only nature this is acceptable.
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, front-loading the purpose in the first sentence. It efficiently organizes sections: main purpose, optional scope, optional operation, with no redundant or wasted phrases. Every sentence 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 complexity (8 parameters, no output schema, no annotations), the description provides a solid understanding of the tool's operation. It covers parameter effects and behavior. However, it does not specify the response structure beyond listing sections; a brief example or field names would make it fully 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 coverage is 100%, so baseline is 3. The description adds significant value beyond schema descriptions by explaining usage context: 'No focal entity required', 'unfiled remains home-wide because parentless work has no subtree ancestry', and the operation focus budget reductions. This contextualizes parameters effectively.
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 defines the tool as a 'dense session-start briefing' compiling active tasks, current epics, project constraints, recent completions, recent activity, and unfiled work count. This specific and composite purpose distinguishes it from sibling tools like backlog_search (focused search) or backlog_get (single entity 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 explicitly states 'use this at the start of every session to understand what you were working on,' providing clear context. It also explains optional scope and operation parameters, but does not include explicit 'when not to use' or alternatives, which would elevate it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_resourceA
Use when you want backlog-mcp to validate and canonically persist an existing entity edit before reporting success. For ordinary repository prose edits, use your native Edit tool; reconciliation updates indexes and diagnostics afterward. Create and transition entities through the substrate-declared intent tools.
The
appendcommand will add content to the end of the body, automatically adding a newline if needed. Notes for using thestr_replacecommand:The
old_strparameter should match EXACTLY one or more consecutive lines from the original body. Be mindful of whitespaces!If the
old_strparameter is not unique in the body, the replacement will not be performed. Include enough context to make it unique.The
new_strparameter should contain the edited lines that should replace theold_str
| Name | Required | Description | Default |
|---|---|---|---|
| as | No | OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. "aime:granite"). Values are trimmed; whitespace-only is treated as absent. | |
| id | Yes | Task or epic ID, e.g. TASK-0001 or EPIC-0002 | |
| home | No | Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project. | |
| operation | Yes | Operation to apply to the body | |
| project_root | No | Project root for this call. Overrides the bridge project root and selects the project home. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains validation and persistence behavior, and includes operational details for commands (append auto-newline, str_replace uniqueness). Could mention error handling or idempotency.
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?
Front-loaded with purpose, but the command usage notes are lengthy and could be summarized more concisely. Every sentence is useful, but structure could be tighter.
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?
Provides usage guidelines and operational details for a complex tool with nested parameters. Lacks return value or error handling info, but overall comprehensive given no output schema.
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%, baseline 3. The description adds operational notes for operation types (e.g., uniqueness of old_str, auto newline for append), which go beyond schema definitions.
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 purpose: to validate and canonically persist an existing entity edit. It distinguishes this from ordinary prose edits (use native Edit tool) and creation/transition (use intent tools).
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 says when to use this tool and when not, providing direct alternatives: 'For ordinary repository prose edits, use your native Edit tool; Create and transition entities through the substrate-declared intent tools.'
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. Dates show when Glama detected each change.
26 tool updates
v0.70.0- Added
backlog_accept_adr - Added
backlog_attach_artifact - Added
backlog_block_task - Added
backlog_capture_prompt - Added
backlog_capture_reference - Added
backlog_capture_requirement - Added
backlog_complete_task - Changed
backlog_consolidation_candidates2 fields changed- added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Changed
backlog_contradictions3 fields changed- added
Input schema / properties / candidatesAdded value: +{ + "description": "Return semantic collision candidates instead of structural state_key contradictions.", + "type": "boolean" +} - added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Removed
backlog_create - Added
backlog_create_work - Changed
backlog_delete3 fields changed- added
Input schema / properties / asAdded value: +{ + "description": "OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. \"aime:granite\"). Values are trimmed; whitespace-only is treated as absent.", + "type": "string" +} - added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Changed
backlog_forget2 fields changed- added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Changed
backlog_get5 fields changed- added
Input schema / properties / contextAdded value: +{ + "description": "Expand the entity's relational neighborhood as stubs — parent/children/siblings/references/referenced_by/related; hydrate any stub with another backlog_get.", + "type": "boolean" +} - added
Input schema / properties / depthAdded value: +{ + "description": "Relational expansion depth with context:true. 1 = direct relations (default), 2 = grandparents/grandchildren.", + "maximum": 2, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - changed
Input schema / properties / id / descriptionPrevious value: -"Task ID (e.g. TASK-0001) or MCP resource URI (e.g. mcp://backlog/resources/file.md). Array for batch fetch."New value: +"Task ID (e.g. TASK-0001), document path (e.g. README.md, docs/notes/file.md), or MCP resource URI (e.g. mcp://backlog/resources/file.md). Array for batch fetch." - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Removed
backlog_list - Added
backlog_organize_folder - Added
backlog_pause_cron - Changed
backlog_recall2 fields changed- added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this read. \"all\" queries global plus the explicitly supplied/bridged project root; it never scans prior projects.", + "enum": [ + "global", + "project", + "all" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Changed
backlog_remember3 fields changed- added
Input schema / properties / asAdded value: +{ + "description": "OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. \"aime:granite\"). Values are trimmed; whitespace-only is treated as absent.", + "type": "string" +} - added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Added
backlog_resume_cron - Added
backlog_schedule_cron - Changed
backlog_search8 fields changed- added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this read. \"all\" queries global plus the explicitly supplied/bridged project root; it never scans prior projects.", + "enum": [ + "global", + "project", + "all" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / status / descriptionPrevious value: -"Filter tasks/epics by status. Default: all statuses. Example: [\"open\", \"in_progress\"] for active work only."New value: +"Filter entities by canonical substrate status. Default: all statuses." - removed
Input schema / properties / status / items / enumRemoved value: -[ - "open", - "in_progress", - "blocked", - "done", - "cancelled" -] - added
Input schema / properties / status / items / minLengthAdded value: +1 - changed
Input schema / properties / types / descriptionPrevious value: -"Filter results by type. Default: all types. Example: [\"task\", \"epic\"] to exclude resources."New value: +"Filter by substrate type or \"resource\". Default: all searchable types." - removed
Input schema / properties / types / items / enumRemoved value: -[ - "task", - "epic", - "resource" -] - added
Input schema / properties / types / items / minLengthAdded value: +1
- Added
backlog_supersede_adr - Removed
backlog_update - Changed
backlog_wakeup4 fields changed- added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this read. \"all\" queries global plus the explicitly supplied/bridged project root; it never scans prior projects.", + "enum": [ + "global", + "project", + "all" + ], + "type": "string" +} - added
Input schema / properties / max_constraintsAdded value: +{ + "description": "Max requirement constraint stubs. Default: 3; 0 disables. Truncation is reported via metadata.constraints_omitted.", + "maximum": 50, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / operationAdded value: +{ + "description": "Optional focal document ID (e.g. \"OP-0001\") to resume a mid-flight operation: the briefing gains a `focus` centerpiece carrying that document's declared wakeup projection, and non-focal sections yield budget deterministically (completions 5→2, activity 5→2, knowledge 5→3, declared sections capped at 2; constraints never yield). Works for any document whose substrate declares `disclosure.wakeup`. Unknown or non-live IDs error honestly, naming live candidates.", + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
- Changed
write_resource3 fields changed- added
Input schema / properties / asAdded value: +{ + "description": "OPTIONAL agent identity for this write — an AGENT- doc id or declared principal (e.g. \"aime:granite\"). Values are trimmed; whitespace-only is treated as absent.", + "type": "string" +} - added
Input schema / properties / homeAdded value: +{ + "description": "Select the document home for this call. Overrides bridge defaults: global uses the user-wide home; project uses project_root or the bridge project.", + "enum": [ + "global", + "project" + ], + "type": "string" +} - added
Input schema / properties / project_rootAdded value: +{ + "description": "Project root for this call. Overrides the bridge project root and selects the project home.", + "minLength": 1, + "type": "string" +}
8 tool updates
v0.58.0- Added
backlog_consolidation_candidates - Added
backlog_contradictions - Changed
backlog_create4 fields changed- added
Input schema / properties / contentAdded value: +{ + "description": "Item body in markdown", + "type": "string" +} - removed
Input schema / properties / descriptionRemoved value: -{ - "description": "Task description in markdown", - "type": "string" -} - changed
Input schema / properties / source_path / descriptionPrevious value: -"Local file path to read as description. Mutually exclusive with description — provide one or the other. Server reads the file directly."New value: +"Local file path to read as content. Mutually exclusive with content — provide one or the other. Server reads the file directly." - changed
Input schema / properties / type / enumPrevious value: -[ - "task", - "epic", - "folder", - "artifact", - "milestone", - "cron" -]New value: +[ + "task", + "epic", + "folder", + "artifact", + "milestone", + "cron", + "memory" +]
- Added
backlog_forget - Changed
backlog_list2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search across all task fields (title, description, evidence, references, etc.). Case-insensitive substring matching."New value: +"Search across all task fields (title, content, evidence, references, etc.). Case-insensitive substring matching." - changed
Input schema / properties / type / enumPrevious value: -[ - "task", - "epic", - "folder", - "artifact", - "milestone", - "cron" -]New value: +[ + "task", + "epic", + "folder", + "artifact", + "milestone", + "cron", + "memory" +]
- Changed
backlog_recall3 fields changed- added
Input schema / properties / fullAdded value: +{ + "description": "Return full memory bodies instead of stubs. Prefer stubs + backlog_get for the ones you need.", + "type": "boolean" +} - changed
Input schema / properties / layers / descriptionPrevious value: -"Restrict to specific memory layers. Default: [\"episodic\"] (only Phase 3 capture kind today)."New value: +"Restrict to specific memory layers. Default: all persisted layers (episodic + semantic + procedural)." - added
Input schema / properties / token_budgetAdded value: +{ + "description": "Approximate token budget — results are greedily packed to fit.", + "minimum": 50, + "type": "number" +}
- Added
backlog_remember - Changed
backlog_search1 field changed- changed
Input schema / properties / include_content / descriptionPrevious value: -"Include full description/content in results. Default: false (returns snippets only). Set true when you need the full text."New value: +"Include full content in results. Default: false (returns snippets only). Set true when you need the full text."
7 tool updates
v0.49.2- Removed
backlog_context - Changed
backlog_create4 fields changed- added
Input schema / properties / commandAdded value: +{ + "description": "Scheduler-invoked command. Required when type=cron. Interpreted by an external scheduler (e.g. studio-agents schedule), not backlog-mcp itself.", + "type": "string" +} - added
Input schema / properties / enabledAdded value: +{ + "description": "Whether the external scheduler should tick this cron. Defaults to true on cron creation. Separate from status — status answers \"does this matter?\", enabled answers \"should it run?\". Not permitted on non-cron types.", + "type": "boolean" +} - added
Input schema / properties / scheduleAdded value: +{ + "description": "Cron expression (5 fields: min hour dom month dow). Required when type=cron. Not permitted on other types.", + "type": "string" +} - changed
Input schema / properties / type / enumPrevious value: -[ - "task", - "epic", - "folder", - "artifact", - "milestone" -]New value: +[ + "task", + "epic", + "folder", + "artifact", + "milestone", + "cron" +]
- Changed
backlog_list1 field changed- changed
Input schema / properties / type / enumPrevious value: -[ - "task", - "epic", - "folder", - "artifact", - "milestone" -]New value: +[ + "task", + "epic", + "folder", + "artifact", + "milestone", + "cron" +]
- Added
backlog_recall - Changed
backlog_update5 fields changed- added
Input schema / properties / commandAdded value: +{ + "description": "Command string for external scheduler. Only permitted on cron entities.", + "type": "string" +} - added
Input schema / properties / enabledAdded value: +{ + "description": "Whether the external scheduler should tick this cron. Separate from status. Only permitted on cron entities.", + "type": "boolean" +} - added
Input schema / properties / last_runAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ISO-8601 timestamp of most recent scheduler tick. Typically written by the scheduler. Null to clear (e.g. scheduler reset)." +} - added
Input schema / properties / next_runAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "ISO-8601 timestamp of next scheduled tick. Typically written by the scheduler. Null to clear." +} - added
Input schema / properties / scheduleAdded value: +{ + "description": "Cron expression (5 fields). Validated on write. Only permitted on cron entities.", + "type": "string" +}
- Added
backlog_wakeup - Changed
write_resource8 fields changed- added
Input schema / properties / idAdded value: +{ + "description": "Task or epic ID, e.g. TASK-0001 or EPIC-0002", + "type": "string" +} - changed
Input schema / properties / operation / descriptionPrevious value: -"Operation to apply"New value: +"Operation to apply to the body" - removed
Input schema / properties / operation / oneOfRemoved value: -[ - { - "properties": { - "new_str": { - "description": "New string to replace old_str with", - "type": "string" - }, - "old_str": { - "description": "String in file to replace (must match exactly)", - "type": "string" - }, - "type": { - "const": "str_replace", - "type": "string" - } - }, - "required": [ - "type", - "old_str", - "new_str" - ], - "type": "object" - }, - { - "properties": { - "insert_line": { - "description": "Line number after which new_str will be inserted", - "type": "number" - }, - "new_str": { - "description": "String to insert", - "type": "string" - }, - "type": { - "const": "insert", - "type": "string" - } - }, - "required": [ - "type", - "insert_line", - "new_str" - ], - "type": "object" - }, - { - "properties": { - "new_str": { - "description": "Content to append to the file", - "type": "string" - }, - "type": { - "const": "append", - "type": "string" - } - }, - "required": [ - "type", - "new_str" - ], - "type": "object" - } -] - added
Input schema / properties / operation / propertiesAdded value: +{ + "insert_line": { + "description": "insert: line number to insert after", + "type": "number" + }, + "new_str": { + "description": "str_replace/insert/append: replacement or new content", + "type": "string" + }, + "old_str": { + "description": "str_replace: exact string to replace", + "type": "string" + }, + "type": { + "description": "Operation type", + "enum": [ + "str_replace", + "insert", + "append" + ], + "type": "string" + } +} - added
Input schema / properties / operation / requiredAdded value: +[ + "type" +] - added
Input schema / properties / operation / typeAdded value: +"object" - removed
Input schema / properties / uriRemoved value: -{ - "description": "MCP resource URI, e.g. mcp://backlog/path/to/file.md", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "uri", - "operation" -]New value: +[ + "id", + "operation" +]
8 tool updates
v0.1.0- First observed
backlog_context - First observed
backlog_create - First observed
backlog_delete - First observed
backlog_get - First observed
backlog_list - First observed
backlog_search - First observed
backlog_update - First observed
write_resource
TDQS
Most tools have clearly distinct purposes, with descriptions that differentiate capturing, remembering, and searching. However, the large number of tools (23) may cause some confusion, especially between backlog_capture_* and backlog_remember, though descriptions mitigate this.
All tools prefixed with 'backlog_', but the second part varies: most are verb_noun (e.g., backlog_capture_requirement), but some are noun phrases (backlog_consolidation_candidates, backlog_contradictions) or single nouns (backlog_wakeup). This inconsistency reduces predictability.
With 23 tools, the server is slightly over the ideal range (3-15) for a coherent set. While the scope is broad, covering project management, ADRs, tasks, and memories, the count feels borderline heavy.
The tool surface covers most lifecycle operations: create, read, search, delete, and specific transitions (complete, block, supersede). Missing a dedicated update tool for work items is partially addressed by write_resource. Overall, minor gaps but strong coverage.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Local-first task manager: create, edit, and complete tasks, projects, and checklists via MCP.
AI-native task management: list, create, update and archive tasks with rich context for AI agents
1Task management for people and AI agents, with scoped OAuth access to issues, projects, and docs.
130Project management MCP for AI agents with safe task reads and writes.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables users to manage tasks through a simple JSON file interface. Provides basic task management functionality by reading and writing to a configurable tasks.json file.21MIT
- FlicenseNot gradedqualityDmaintenanceEnables task management through natural language with full CRUD operations including add, list, update, complete, and delete tasks with JSON persistence.-
- FlicenseNot gradedqualityDmaintenanceManages TODO tasks with operations like add, list, complete, update, and delete, stored in a JSON file.-
- FlicenseNot gradedqualityBmaintenanceA lightweight task management MCP server that enables CRUD operations on tasks stored in a single JSON file, including listing, creating, updating progress, and setting priorities.221-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gkoreli/backlog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server