agentic-task-system
This MCP server turns your existing task manager into agent-native memory, enabling AI agents to read, write, and reason over tasks with hybrid retrieval, typed relationships, execution context, security policies, and an audit ledger.
Retrieval & Discovery
find— Search tasks by free text using hybrid dense/sparse/keyword retrieval fused via Reciprocal Rank Fusion (RRF)similar— Find semantically similar tasks by ID (requires embedder-backed adapter)get_task/list_projects— Fetch a single task or discover all projectsurl_for— Generate a deep link to any task in its native app
Task Authoring (CRUD)
create_task/update_task— Create or partially update tasks (title, markdown body, tags, due date, project)
Execution Context & Intent
set_task_intent— Attach outcome, rationale, done-when criteria, authority, constraints, and approval requirementsset_task_lifecycle— Set lifecycle state (active,archived,superseded) with validity windows so stale context is auto-excludedpromote_exploration— Promote exploratory material into a committed execution item with a back-link to the sourcecontext_for_task— Build full execution context combining typed relationships and retrieval, excluding lifecycle-invalid items
Hierarchy & Relationships
set_task_hierarchy/get_task_hierarchy— Assign roles (exploration,goal,project,task) and manage parent relationshipsevaluate_task_hierarchy— Check whether a task still supports its parent objective, detecting invalid role ordering, missing intent, cycles, and conflictsadd_task_link/remove_task_link— Manage typed relationships (blocks,depends-on,supports,decision,output,supersedes,conflicts-with,related, etc.)task_graph— Traverse typed incoming/outgoing relationships around a task
Security & Access Control
set_task_security/get_task_security— Configure per-task security policies (content trust, allowed/denied actions and resources, approvers)check_task_access— Evaluate and audit a task-scoped access request (fails closed)
Audit Ledger
record_action— Append an auditable agent action/outcome to a JSONL ledger (with sources, approvals, and advancement tracking)list_actions— Query ledger records filtered by task, agent, action type, or advancement status
Bounded Task Events
snapshot_task_events/poll_task_events— Checkpoint and diff task state to generate deterministic event envelopes (task.created,task.updated,task.completed, etc.)list_pending_task_events/acknowledge_task_events— List and acknowledge durable unacknowledged task events
Wishlist integration to interact with Google Tasks API for task management and agent memory.
Planned integration to interact with Notion databases for task management and agent memory.
Enables reading and writing tasks from an Obsidian vault as local markdown files, providing agent memory over a local knowledge base.
Allows interaction with TickTick tasks and projects, enabling retrieval, creation, and updates of tasks as memory for AI agents via the TickTick OpenAPI.
ats is an MCP server and CLI that keeps AI-agent context in the task systems you already maintain — TickTick, Taskmaster, Beads, Obsidian, Notion, GitHub, Airtable, Google, or several at once through the composite adapter. It retrieves relevant tasks, notes, decisions, and runbooks with provenance, then can write results back when the active adapter supports writes. Works with Claude Code, Claude Desktop, Cursor, and any MCP client.
Adapter, not migration. Your task app, repository, or vault remains authoritative. ATS maps that source into a common task contract; optional caches and vector indexes improve retrieval but never become a second record that people must edit. It is task-first: the task is the spine, while supporting material such as GitHub issues and Notion specs is retrieved as context behind it.
Two layers, one CLI: tasks and a knowledge graph. The task layer is record-based on purpose — every entry lives in one backend's projects and fields, and that backend stays authoritative. A record-based layer structurally cannot hold the other thing agents accumulate: durable knowledge written from any source, about mixed subjects, into one space. The knowledge-graph layer — ats kg (kg = knowledge graph) — is ATS's answer to exactly that: subject–predicate–object facts with provenance and temporal validity, proposed by agents from anywhere (a call, a task, a repo, a chat), ratified by a human, and queried in one place no matter which backend the surrounding work lives in. The built-in store is embedded and dependency-free. For a dedicated graph engine, the recommended pairing is Graphiti as the graph database server and LadybugDB as the embedded graph database: ats kg export --cypher emits a LadybugDB-loadable script, and ats kg export (JSON, full provenance) is ready for a Graphiti ingest pipeline.
npm install -g @reneza/ats-cli @reneza/ats-adapter-ticktick
ats config use ticktick
ats auth login
ats find "deployment runbook"Architecture and trust boundaries
ATS separates the authoritative record from the retrieval machinery around it:
AI client or operator
|
| local stdio, or token-gated HTTP when self-hosted
v
ATS CLI / MCP server
|
+-- Core: task contract, links, lifecycle, ledger, events
+-- Retrieval: keyword + native + optional dense branches -> RRF
|
v
Adapter boundary (auth, mapping, reads, patch-style writes)
|
+-- TickTick / Notion / GitHub / Airtable / Google
+-- Obsidian / Taskmaster / Beads / OKF files
|
+-- derived retrieval state
corpus cache + optional Qdrant/Ollama indexThe backend remains authoritative. ATS does not ask users to edit a duplicate memory database. Writes go through the active adapter, which owns backend-specific authentication, field mapping, and deep links.
Retrieval state is derived, not canonical. Core keeps a five-minute corpus cache by default. Dense retrieval is optional: adapters can provide embeddings, and the TickTick reference adapter can use Qdrant plus Ollama. Without vectors, keyword and adapter-native branches still run.
Credentials stay at the adapter boundary. A composite adapter delegates authentication to each child and stores no additional cross-source credential. Its children still execute inside one ATS process; this is routing separation, not process isolation. Local stdio does not expose an MCP port. The hosted blueprint adds a bearer-token gateway, private Qdrant/Ollama services, and a separate public demo backend for the optional operator deck.
Core reports the failures it can see. Retrieval branches and top-level composite corpus failures return
degradedandwarnings. Known omission paths inside adapter fallbacks are called out under Tradeoffs and limits.State changes are traceable. Results carry source provenance;
find --explainexposes RRF contributions; writes use patch semantics, and supported writes can retain before-images for undo.
The corpus cache can contain full task records; the query log contains search text; the action ledger can contain write before-images; and Qdrant payloads can contain task text and metadata in addition to embeddings. ATS does not apply application-level encryption or runtime redaction to these copies. Scope host access, backups, retention, and deployment to the sensitivity of the underlying task systems. See retrieval, state integrity, and the deployment guide for the exact behavior.
Deployment choices
Mode | Retrieval | Trust and operations boundary |
Local stdio | Keyword/native retrieval by default; dense retrieval only when the adapter provides it | The MCP endpoint is not network-exposed. Adapter calls may still reach their source systems; credentials and cache files stay on the machine running ATS. |
Composite adapter | One combined child corpus; Core ranks keyword and unioned native-search branches, with RRF across those available branches. The composite does not currently expose child vector search. | Each child owns its auth and mapping but runs in the same ATS process. A top-level child corpus failure is reported as degraded; see the known fallback gaps below. |
Hosted blueprint | Keyword/native retrieval plus private Qdrant/Ollama services | A bearer-token MCP gateway and separate optional operator-deck backend are public; Qdrant and Ollama stay on the private service network. Qdrant/Ollama have disks, while |
“No migration” means no second source of truth. It does not mean zero derived storage.
Related MCP server: Sovereign Universal Memory MCP
How it compares
Approach | Authoritative record | Additional state | Retrieval |
| Markdown maintained for the agent | The files themselves | Whole-file or harness-specific lookup |
Separate memory service | Agent-specific database | A corpus and ingestion path to maintain | Product-specific |
Plain backend connector | Source task app, repository, or vault | Usually none beyond connector state | Direct fetch or backend-native search |
ATS | Source task app, repository, or vault | Cache, query/action/event state; optional derived vector index | Keyword + native + optional dense retrieval, RRF, provenance, typed context |
ATS is a good fit when operational context already lives in task systems or connected work tools and agents need ranked, traceable retrieval across them. If clean Markdown is already the complete source of truth and whole-file loading stays small, a file-native workflow may be simpler.
What you get
A two-way bus. The agent reads the task fields an adapter provides; where the adapter supports writes, it writes results back where you'll see them.
First-fetch relevance. Capability-driven branches — keyword and adapter-native search, plus dense retrieval when available — are RRF-fused with provenance to reduce repeated search-and-refine loops. Every
findcarries a confidence verdict from branch agreement (--min-sources Nis the matching gate),--projectbinds it to one project, a stale corpus cache answers immediately while it refreshes in the background, and an empty exact match (notes find,search,get) answers with the nearest items instead of nothing.Writes that survive retries and concurrency.
update --append/--prependadd to the body that is there;--if-match <contentHash>lands only while the body is unchanged;create --if-absentand--idempotency-keymake a retried create return what the first one produced. One retry policy (Retry-After, jittered backoff, transient 5xx, dropped connections) sits under every adapter's HTTP path.Durable typed links. One agent attaches a
decision/depends-on/output/supersedeslink; a later agent in a fresh context receives it viaats context. The handoff lives in the task app, not a chat log.Execution context.
ats intentcaptures outcome/why/done-when;ats lifecyclekeeps stale context from steering current work;ats securityrecords scoped allow/deny decisions for cooperating clients;ats ledgerrecords what an agent did and whether the task advanced;ats promoteturns exploration into a committed goal;ats hierarchy evaluatechecks local work still supports its parent.Bounded events.
ats events watch --jsonemits deterministictask.created/updated/completed/...NDJSON, spooled0600with pending/ack recovery and stable dedup IDs. ATS only emits observations — a consumer still evaluates intent, validity, and security before acting.Task graph for agents. Tasks become structured nodes with proof, writeback, review, lifecycle, and link edges instead of free-form memory text; see
docs/task-graph-for-agents.md.A facts layer.
ats kgkeeps durable subject–predicate–object knowledge beside the tasks: agents propose, a human ratifies (the only write path), andats kg askanswers with deterministic lexical scoring plus full provenance — no LLM, no graph server, an append-only file that travels withats state export. Retraction closes a fact's validity interval instead of deleting it, andats kg export --cypherloads the graph into embedded engines (LadybugDB/Kùzu).Session-index handoff. Coding-agent session browsers can keep raw transcript analytics while ATS stores the durable task-linked summary; see
docs/agent-session-index.md.
ATS-managed execution metadata can be encoded in the task body, with typed links under ## Related and consulted sources under ## References. Managed helpers are designed to preserve human-authored rows and links; update --content replaces the complete body, so callers that add to a body use --append / --prepend, present the contentHash they read with --if-match, and verify the result. npm run prove:intent runs a deterministic synthetic proof of the execution-context path.
Minimal adapter-neutral workflow
Select and verify an adapter:
ats config use <adapter>, authenticate as its README describes, then runats doctor.Retrieve the working set:
ats find "deployment runbook" --jsonranks the branches available from that adapter and retains provenance.Inspect the authoritative item and its context:
ats context <project> <task>uses the common adapter contract and does not require an adapter-specific notes layer.Attach durable execution context:
ats intent set <project> <task> --outcome "..." --done-when "a,b"andats link add <src-project> <src-task> <dst-project> <dst-task> --type depends-on.Verify the assembled handoff: rerun
ats context <project> <task>to read back linked decisions, dependencies, proof, lifecycle state, and relevant retrieval results.Write through the adapter or source app, then read back. Keep the authoritative backend current so the next agent receives durable state rather than a chat-only handoff.
Deploy it yourself
The optional operator deck is a static phone-oriented web app deployable to Cloudflare Pages. The supplied Render blueprint builds the MCP gateway/server plus private Qdrant and Ollama services.
After deploy, copy the auto-generated ATS_MCP_TOKEN from the ats-mcp service's Environment tab, point your MCP client at https://<your-mcp-url>/mcp with header Authorization: Bearer <ATS_MCP_TOKEN>, and set TICKTICK_ACCESS_TOKEN to read your real tasks. Prefer your own machine or a VPS? Same pieces as plain Docker containers — see the deploy guide.
Available adapters
Backend connectors let an agent reach Notion, GitHub, and task systems, but access alone does not provide one ranked answer to a question such as "what do I know about the auth migration?" ATS adds a common retrieval layer: the composite adapter combines installed child corpora, namespaces their project IDs, unions supported native-search results, and lets Core rank the available branches with provenance. Each child reads its own credentials, but all configured children execute in the same ATS process.
Adapter | Authoritative source | Retrieval or write notes |
| TickTick OpenAPI v1 | Keyword/native retrieval works without vectors; optional Qdrant + Ollama add dense retrieval. |
| Local Markdown vault | File-native, patch-style writes preserve unknown frontmatter. |
| Open Knowledge Format Markdown bundle | Local bundle. |
| Local | Repository-local task state. |
| Repository-local Beads via | Dependency-aware local task state. |
| Airtable REST API (table = project) | Adapter-scoped API access. |
| Google Sheets / Docs / Slides | Read-only. |
| Notion databases + pages | Integration-scoped access. |
| GitHub issues + discussions | Repository-scoped access. |
| Installed child backends | Combines child corpora, namespaces project IDs, unions native-search hits, and routes writes; it is not an independent record store and does not currently expose child embeddings. |
| — | Wishlist, not implemented. |
Per-adapter auth and mapping live in each package's README. PRs welcome — scaffold and verify against the contract:
ats adapter new linear # writes a contract-complete skeleton
ats adapter test ./ats-adapter-linear # pass/fail/skip per contract checkTradeoffs and limits
Freshness is adapter-dependent. Core's corpus cache has a five-minute default TTL. Backend sync behavior, pagination, and inclusion of completed work vary by adapter; ATS does not promise universal real-time reads.
ats cache syncrefreshes the cache on demand (cron-friendly) — incrementally when the adapter implementsbulkFetchDelta(), as a full refetch otherwise.Dense retrieval adds infrastructure. Qdrant and Ollama can improve semantic recall, but they add indexing, persistence, resource, and backup work. Baseline
findstill returns keyword/native results when vectors are unavailable, although an attempted vector branch can make the response degraded; vector-onlyhybridandsimilaroperations still require that infrastructure.The common contract is intentionally small. The adapter interface defines six storage methods plus authentication lifecycle hooks, while practical write coverage, richer fields, and native search vary. Check the adapter README before assuming parity across backends.
Degraded results are still partial results. ATS reports failed or timed-out Core branches, dropped corpus sources — including per-project failures inside a composite fallback fetch and TickTick project fetches — and native-search sources a backend could not read. The caller must still decide whether partial context is acceptable;
warningssays what is missing, not whether it mattered.Composite search is not semantic deduplication.
ats dedupis a separate analysis command. Fusion identity is namespaced per backend (<backend>:<taskId>), so identical raw ids from different backends stay distinct results; semantically duplicate tasks still appear separately until you link them.The hosted blueprint is a reference deployment, not a managed service. One bearer token grants the full MCP tool surface; the blueprint does not provide per-user or per-tool scopes, multi-tenant RBAC, high availability, or an SLA.
Hosted ATS runtime state is ephemeral by default. The blueprint persists Qdrant and Ollama, but does not mount a disk for
ats-mcp; its cache, query log, action ledger and undo before-images, event spool, and vector-sync metadata disappear on a restart or redeploy.Events are observations, not authorization.
ats events watchcan report task changes, but a consumer must still evaluate intent, validity, and security before taking an external action.The facts layer is lexical and human-gated.
ats kg askis deterministic keyword scoring with provenance, not semantic search, and nothing reaches the fact store without human ratification — a burst of agent proposals waits for review by design.ATS policy is not a sandbox. The CLI enforces the declared approval metadata — a write whose target sets
intent.approvalRequiredor lists the action insecurity.approvalRequiredForstages intoats reviewinstead of reaching the backend (ATS_REVIEW_ALL=1gates every write) — but this guards ATS's own write path only.ats security checkremains an application-level decision point for cooperating clients, and nothing here intercepts shell, filesystem, network, model, or secret access outside ATS. A client calling an adapter directly bypasses the CLI gate.
Verification and operational evidence
CI runs the full repository gate on Node 20 and 22: lint, public-claim checks, PII checks, unit tests, adapter and intent proofs, and the progress benchmark.
The publish-safety gate scans both the repository surface and npm package tarballs for secrets, personal paths, configured personal-data patterns, and locally configured denylist terms. It protects publication surfaces. At runtime, the composite adapter can additionally enforce per-backend trust levels with configured redaction patterns — a write routed to a
"trust": "public"child that matches a pattern is blocked, not silently stripped (see the composite README). That screen guards ATS's own composite write path; it is not general data-loss prevention.State-integrity tests and conventions cover patch-style writes, preservation of unknown fields, explicit store-to-
Taskmapping, result provenance, and explainable RRF contributions.Retrieval behavior documents Core's branches, the corpus cache, time budgets, graceful branch failure, usage logging, and what affects latency.
These gates verify repository behavior; they are not a production availability or security certification.
CLI surface
# Lifecycle
ats init [adapter] # select an adapter and run a health check
ats config use <adapter> # switch the active adapter
ats auth login # delegate login to the active adapter
ats doctor # inspect adapter and service health
# Retrieval (any read command takes --json for piping to jq / agents)
ats find <query> [--explain] # parallel + RRF + provenance + confidence verdict — DEFAULT
ats find <query> --project <id|name> # bind retrieval to a project (--projects a,b for several)
ats find <query> --min-sources 2 # keep only results two branches agree on
ats find <query> --fresh # refresh a stale corpus cache before answering
ats open <project> <task> # open any adapter item by explicit ids
ats context <project> <task> # task + valid linked/retrieved context
ats link list <project> <task> # list portable typed links
ats hybrid <query> # dense+sparse retrieval when embeddings exist
ats similar <id> # related items when embeddings exist
# Notes-layer shortcuts (currently TickTick and Obsidian)
ats get <id-or-title> [--extract raw|json|yaml]
ats url <id-or-title> # paste-ready note cross-reference
ats links <project> <task> # resolve deep-links in a note body
# Authoring
ats create "<title>" [--content ..][--project <id>]
ats create <project> "<title>" --if-absent --idempotency-key <k> # never a duplicate on retry
ats update <project> <task> [--content ..][--title ..]
ats update <project> <task> --append "- 2026-09-05: shipped" --if-match <contentHash> # add to the body; write only if unchanged
# Agent execution context (portable across adapters)
ats intent set <project> <task> --outcome ".." --done-when "a,b"
ats promote <src-proj> <src-task> <target-proj> --outcome ".." --done-when "a,b"
ats hierarchy set <project> <task> --kind task
ats hierarchy evaluate <project> <task>
ats lifecycle set <project> <task> --status active --valid-until 2026-12-31
ats link add <src-proj> <src-task> <dst-proj> <dst-task> --type decision
ats graph <project> <task>
ats context <project> <task>
# Facts layer (proposed by agents, ratified by you)
ats kg propose "Acme GmbH" "prefers" "invoices as PDF" --domain sales --source "call 2026-08-01"
ats review approve <id> && ats kg ratify --all
ats kg ask "what does Acme prefer" --domain sales --json
ats kg export --cypher > facts.cypher # load into LadybugDB / Kùzu, full provenance on every fact
ats kg export --cypher --include-retracted # closed facts too, with tInvalid and who retracted them
ats ledger record <project> <task> --action release.verified --advanced true
ats security set <project> <task> --trust trusted --allow-actions read --allow-resources task:self
ats security check <project> <task> --action read --resource task:self --reason "load context"
ats events watch --json # NDJSON observations; never launches agents
# Ops
ats review list # writes staged by approvalRequired targets
ats review approve ID && ats review apply --all
ats cache sync # refresh the corpus cache (find also refreshes a stale one in the background)
ats cache status # age, stale / servable / revalidating
ats bench run
ats bench score
ats bench progress --json
ats bench analyze-usage --days 7
npm run prove:intent
npm run prove:taskmaster
npm run prove:beads
npm run prove:progressUse it from any MCP client (Claude Code, Claude Desktop, Cursor, Windsurf, OpenCode)
@reneza/ats-mcp exposes the active adapter as a tool set spanning retrieval, CRUD, and execution context (find, get_task, create_task, set_task_intent, add_task_link, resolve_task_links, context_for_task, record_action, undo_write, poll_task_events, and more). For Claude Code this provides persistent context between sessions without replacing the task system as the source of truth; optional caches and vector indexes remain derived retrieval state.
ATS speaks MCP over stdio, so any client that can launch a stdio MCP server works. Only the config file and the wrapper key differ; the binary (ats-mcp) and its ATS_ADAPTER env are the same everywhere.
Client | Where the config lives | Wrapper key |
Claude Code |
| n/a |
Claude Desktop |
|
|
Cursor |
|
|
Windsurf |
|
|
OpenCode |
|
|
# Claude Code
claude mcp add ats -e ATS_ADAPTER=@reneza/ats-adapter-ticktick -- ats-mcp// Claude Desktop / Cursor / Windsurf — identical `mcpServers` shape
{
"mcpServers": {
"ats": { "command": "ats-mcp", "env": { "ATS_ADAPTER": "@reneza/ats-adapter-ticktick" } }
}
}// OpenCode (opencode.json) — local stdio server, note `command` is an array
{
"mcp": {
"ats": {
"type": "local",
"command": ["ats-mcp"],
"environment": { "ATS_ADAPTER": "@reneza/ats-adapter-ticktick" },
"enabled": true
}
}
}Install the binary on PATH first (npm i -g @reneza/ats-cli), or use an absolute path to ats-mcp if your client does not inherit your shell PATH.
Conventions
Wiki project. A designated project (default
Permanent Notes) holds durable knowledge; others hold ephemeral tasks.Agent-data notes = a note whose body has a fenced
json /yaml block, extracted viaats get <title> --extract json.Cross-references = adapter-native deep links — generate with
ats url <title>, don't hand-write.Full pattern:
docs/wiki-conventions.md.
State integrity
ATS tests managed metadata rewrites for preservation of human-authored fields, requires explicit store-to-Task mapping, and carries result provenance (sources, find --explain). Coverage and raw-update behavior remain adapter-specific. A publication-safety gate (check-no-pii.mjs) fails the build when covered personal-data patterns appear in repository or package surfaces. Full note: docs/state-integrity.md.
For the agent-side operating model, see docs/task-graph-for-agents.md: task text is the human projection, but the execution layer needs structured links, proof commands, review requirements, and writeback targets.
Working on ATS
Contributions welcome — bug fixes and especially new adapters under packages/adapter-*.
See CONTRIBUTING.md for the dev setup and adapter pattern, and
AGENTS.md if you drive a coding agent over the repo. Working on the source,
pi-codegraph gives your agent a
call-graph of the monorepo — the adapter pattern and the blast radius of a core change —
so it stops re-reading the whole tree each session.
Releases and license
v0.10.0 added partial-retrieval reporting, optional reranking, usage observability, duplicate/contradiction detection, and reactive OAuth refresh. v0.9.0 added reversible writes, forward/dangling links, Obsidian path hardening, and verified stdio configuration for more clients. Full history: CHANGELOG.md.
MIT. See LICENSE.
If ATS is useful, consider a ⭐ — it helps others find it.
Available Tools
32 toolsacknowledge_task_eventsA
WRITE/LOCAL. Explicitly acknowledges one or more durable task-event ids and removes them from the pending spool. Unknown ids are reported without failing known acknowledgements.
| Name | Required | Description | Default |
|---|---|---|---|
| eventIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the write operation via the 'WRITE/LOCAL' prefix and explains error handling for unknown IDs ('reported without failing known acknowledgements'). With no annotations provided, this adds meaningful behavioral context, though idempotency and other side effects are not mentioned.
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 plus a tag, conveying essential information without waste. It is front-loaded with the operation type and scope ('WRITE/LOCAL'). Every part is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema or annotations, the description covers the action, effect, and error handling. However, it lacks details on idempotency, return value, and typical usage scenario, leaving 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?
The input schema has 0% description coverage for parameters. The description adds that eventIds are 'durable task-event ids' and that acknowledgment removes them from the pending spool, but does not elaborate on format, origin, or validation rules beyond the schema's type and constraints.
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 ('acknowledges'), the resource ('durable task-event ids'), and the effect ('removes them from the pending spool'). It distinguishes from siblings like list_pending_task_events and poll_task_events by focusing on acknowledgment and removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description does not mention prerequisites, typical workflow (e.g., after processing events), or exclusion criteria. The context is entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_task_linkB
WRITE. Adds a typed relationship from one task to another. Types express dependencies, evidence, decisions, outputs, supersession, support, or a general relation. Set allowMissing to record a forward link to a task that does not exist yet — it auto-resolves once the target is created (or run resolve_task_links to refresh its title).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| agent | No | ||
| title | No | Title hint for a forward link whose target cannot be read yet. | |
| allowMissing | No | Allow linking to a target that does not exist yet (a forward/dangling link). | |
| sourceTaskId | Yes | ||
| targetTaskId | Yes | ||
| sourceProjectId | Yes | ||
| targetProjectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully declares this as a WRITE operation, explains forward/dangling-link behavior, and connects to `resolve_task_links`. However, it does not disclose duplicate-link behavior, whether links are bidirectional, failure behavior when `allowMissing` is false, or any side effects beyond creating the link.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences, front-loads the write action, and adds substantive context about forward links and resolution. Every sentence earns its place; there is no filler or redundancy.
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 mutating tool with 8 parameters, 5 required, no output schema, and no annotations, this description is not complete enough. It leaves open important operational questions such as duplicate links, missing-target behavior when `allowMissing` is false, and what a successful response looks like.
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 25%, so the description needed to compensate for the undocumented parameters. It clarifies `allowMissing` forward-link semantics but does not explain the relationship between `sourceProjectId`/`sourceTaskId` and `targetProjectId`/`targetTaskId`, nor does it elaborate on the `type` enum values beyond a general grouping.
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 identifies a write operation that adds a typed relationship from one task to another, and summarizes the kinds of relationship types supported. It does not explicitly distinguish itself from similarly named siblings like `relate_task` or `add_task_reference`, but the core action and resource are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a specific conditional use case for `allowMissing` and points to `resolve_task_links`, but it does not explain when to choose this tool instead of sibling relation/reference tools. No exclusions, alternatives, or when-not-to-use guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_task_referenceA
WRITE. Adds a resource the task consults (an external URL or a reference note) to its "## References" section. Use this for links and supporting notes; use add_task_link for relationships to other active tasks. Re-adding the same url updates its title/desc.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| desc | No | ||
| agent | No | ||
| title | No | ||
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the behavioral burden. It leads with 'WRITE' to signal a mutating operation and describes the idempotent-ish behavior of re-adding the same URL. It does not mention permissions or reversibility, but it clearly states what will happen on repeated calls, which is the most operationally relevant behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences and front-loads the most important behavioral signal ('WRITE'). It wastes no words: action, resource, destination, usage boundaries, and update behavior are all present. The structure is easy to scan and understand.
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 6-parameter write tool with no output schema, the description is sufficient to select and invoke it correctly. It explains what the tool does, when to use it, which sibling should be used instead, and what happens on duplicate URLs. The remaining details, such as exact return payload, are not necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% property description coverage, so the description must compensate. It does clarify the meaning of url and implicitly explains title and desc by describing what gets updated on duplicate URLs. However, projectId, taskId, and agent are left to inference, leaving some parameter semantics under-specified.
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 identifies the exact action with the verb 'adds' and specifies the resource being added: an external URL or reference note. It also names the destination ('References' section) and explicitly differentiates the tool from the sibling add_task_link, making the purpose immediately distinguishable from nearby 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 gives an explicit usage rule: 'Use this for links and supporting notes; use add_task_link for relationships to other active tasks.' The description also calls out the duplicate-url behavior, which is important invocation guidance. An agent can confidently choose between this tool and add_task_link without opening the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_task_accessA
WRITE/AUDIT. Evaluates one task-scoped access request and appends an allow or deny record. Requires an action, resource, and reason. Denial wins over allowance; untrusted high-risk actions and configured boundaries require approval. Fails closed if auditing fails.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| action | Yes | ||
| reason | Yes | ||
| taskId | Yes | ||
| resource | Yes | ||
| approvals | No | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure, and it provides meaningful details: it appends an audit record, denial wins over allowance, high-risk actions require approval, and it fails closed on audit failure. It stops short of fully describing the return status or auth model, so not a 5.
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?
Three tight sentences deliver a surprising amount of crucial behavior: side effect, decision logic, approval requirements, and fail-closed behavior. There is no filler or redundant restating of 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?
The description is robust on side effects and policy behavior, but without an output schema it omits the return value and approval flow details. It also fails to clarify the 'approvals' input and how 'requires approval' manifests in the response, leaving a material gap for a decision 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 0%, so the burden is on the description to explain parameters. The description only names action, resource, and reason, and only vaguely references the approvals parameter. Agent, projectId, taskId, and approvals array semantics are left unexplained, which is a significant gap for a 7-parameter tool.
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 it evaluates a task-scoped access request and appends an allow or deny record, so an agent can see this is an audit/write action despite the 'check' name. The WRITE/AUDIT prefix and the specific resource ('task-scoped access request') separate it from read-only sibling tools like get_task_security.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when a task-scoped access request needs evaluation and auditing. It states required inputs and approval conditions, but it does not explicitly say when not to use it or name any alternatives, leaving sibling differentiation to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
context_for_taskA
Read-only. Builds execution context for a task. Typed relationships come first, retrieval adds candidates, invalid lifecycle items are excluded, and every included item carries provenance.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does a good job: it explicitly warns 'Read-only', discloses the ordering behavior, states that invalid lifecycle items are excluded, and promises provenance on every item. It still omits potential error conditions or result format, so minor gaps remain.
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 short and highly structured: it opens with read-only, states the resource and action, then lists ordered behaviors. Every sentence carries unique information and there is no redundant or filler phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description captures the core behavior and result items are explained well enough at a high level, but there is no return format, no mention of how the optional limit applies, and no note of error or edge cases. Given no output schema and no annotations, the agent is left to guess important operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage and the description does not explain projectId, taskId, or limit further. Although the parameter names are self-evident, the description mentions nothing about how limit interacts with the retrieval or candidate generation, so it does not compensate for the 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 states a clear action, 'Builds execution context for a task,' with concrete processing details: typed relationships first, retrieval candidates, invalid lifecycle exclusion, and provenance. It is sufficiently distinct from simple getters like get_task or graph tools like task_graph, though it does not name a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it — whenever execution context for a task is needed before acting — and the read-only tag suggests safe use. However, it gives no explicit guidance on when not to use it or which sibling to prefer for simpler cases like a single task read, so the guidance remains mostly inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
WRITE. Creates a new item (task/note) in the store — the agent→human write side of the two-way bus. Use to hand the human a note, action, or reminder. Side effect: a new item appears in their task app immediately. Returns the created item including its new id. To change an existing item instead, use update_task.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Tags/labels to attach, without a leading "#", e.g. ["agent", "review"]. | |
| agent | No | Agent identity for the append-only ATS action ledger. | |
| title | Yes | Short title / headline for the new item. Required. | |
| content | No | Markdown body of the item. Optional. | |
| dueDate | No | Due date as an ISO 8601 string, e.g. "2026-06-15" or "2026-06-15T09:00:00Z". | |
| projectId | No | Id of the target project (from `list_projects`). Omit to drop into the inbox/default project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral transparency burden. It clearly discloses that this is a WRITE operation, describes the immediate side effect (a new item appears in the task app), and states the return value, including the new id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the WRITE callout, then a compact definition, use case, side effect, return value, and sibling routing. Every sentence earns its place and there is no filler.
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 6-parameter create tool with no annotations and no output schema, the description covers the purpose, the human-facing nature of the write, the immediate behavioral consequence, and a clear return guarantee. Schema covers parameters, so nothing an agent needs to call it correctly 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 100%, so the baseline is 3. The description does not add much parameter-level semantics beyond the schema, though it does imply the item model and reinforces the main purpose of title. With all parameters already documented well in the schema, additional detail is unnecessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: creates a new item (task/note) in the store. It clearly frames the tool as the agent-to-human write side of a two-way bus and names update_task as the alternative for modifying existing items, which distinguishes it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool, to hand the human a note, action, or reminder, and explicitly tells it to use update_task instead when changing an existing item. This is direct routing guidance between competing write tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_task_hierarchyA
Read-only. Deterministically checks whether a task still supports its parent objective and reports invalid role ordering, missing intent, cycles, invalid lifecycle state, and active explicit conflicts.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| maxDepth | No | ||
| projectId | Yes |
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 for safety and behavior, and it does so well by opening with 'Read-only' and specifying that it 'deterministically' checks a task and reports concrete invalid conditions. It could add details about output format or auth, but the read-only guarantee and the enumerable fault list add meaningful context beyond the name.
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 entire definition is a single dense sentence with the most decision-relevant attribute ('Read-only') first and a compact enumeration of checking criteria. Every phrase is informative, and there is no disconnected noise or repetition.
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 and no annotations, the description gives the core validation operation and the kinds of issues reported, but it does not specify whether the tool returns a list, boolean, or status object. It also does not define the semantics of maxDepth, leaving a gap for an agent making actual calls.
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 0%, and the description compensates almost none of that and fails to mention any parameter by name. maxDepth in particular has no explained semantics (traversal depth limit), while projectId and taskId remain only self-explanatory by their names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a focused verb ('checks') and a specific resource (whether a task still supports its parent objective) and enumerates concrete defect classes reported. It clearly distinguishes itself from hierarchy getters/mutators such as get_task_hierarchy or set_task_hierarchy.
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?
There is no explicit guidance on when to use this tool versus alternatives or which sibling tools it complements or replaces. The wording 'checks whether' weakly implies a read-only validation role, but the description leaves the decision to the agent without any exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
findA
Read-only. Search the task store by free-text QUERY using available adapter signals plus Core keyword retrieval, fused via Reciprocal Rank Fusion. Adapters with embeddings add dense+sparse hybrid retrieval. Returns best-matching items with provenance. Use this for "what do I have about X". To find items like a KNOWN item instead, use similar. Read-only: never writes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default 5, hard cap 50. | |
| query | Yes | Free-text search string, e.g. "auth retry logic" or "Q3 roadmap". Matched against titles and bodies. | |
| explain | No | Attach a per-result ranking breakdown: for each retriever that surfaced a result, its rank and RRF contribution (1/(k+rank)), which sum to the fused score. Use to justify why a result ranked where it did. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden — and it meets it by disclosing the read-only safety profile head-on ('Read-only: never writes'). It also reveals behavioral nuance beyond the schema: dual retrievers fused via RRF, dense+sparse hybrid behavior for embedding-capable adapters, and provenance attached to results. It stops short of edge behavior like how the fallback behaves when no adapters or the exact ranking output shape, which keeps it from a 5.
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?
Three sentences, front-loaded with the highest-value facts: read-only safety and search scope come first, and the RRF mechanics are compressed into a single sentence. The only waste is the closing 'never writes', which repeats the opening 'Read-only' — a small redundancy that costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, it covers the essentials: what gets searched, how ranking works, what comes back (provenance), and a pointer on interpreting the explain field tied to the RRF equation. It is missing only a bit of extra detail about result shape and edge behavior to be fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents limit, query, and explain semantics. The description adds no new parameter-level meaning beyond reaffirming query as free-text matched against titles and bodies. Baseline 3 is correct when the schema does the heavy lifting.
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?
Opens with an explicit verb and resource: 'Search the task store by free-text QUERY'. The mechanism (adapter signals plus Core keyword retrieval fused via Reciprocal Rank Fusion) and the return (best-matching items with provenance) further pin down what it does. It also distinguishes itself from the nearest sibling by name (`similar`), so an agent can tell them apart without opening either schema.
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?
Gives a concrete usage frame — 'Use this for "what do I have about X"' — that defines the intended query-by-topic scenario. It also states an explicit when-not: 'To find items like a KNOWN item instead, use `similar`.' That direct alternative routing leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskA
Read-only. Fetch one item (task/note) by its project id + task id, including the full markdown body, tags, and due date. Use after find/list_projects give you the ids. Returns the single item object, or an error if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Id of the item to fetch (from `find` results). | |
| projectId | Yes | Id of the project/folder the item lives in (from `find` results or `list_projects`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and handles it well: it opens by declaring 'Read-only' and states both the success and failure modes ('Returns the single item object, or an error if not found'). Minor gaps remain, such as no mention of authentication prerequisites, rate limits, or a complete field list, but the essential behavioral safety traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three terse sentences with meaningful content in each: the read-only trait, the fetch action with returned fields, the usage sequencing, and the return/error behavior. It is appropriately front-loaded with 'Read-only' and 'Fetch one item'; the minor grammar issue ('give you the ids') is a slight polish defect but does not hurt 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 a small 2-parameter input with 100% schema coverage and no output schema, the description supplies enough — the inputs, the return type ('single item object'), the key fields (body, tags, due date), and the error case. It is nearly complete; only a fuller enumeration of the returned object shape would push it to a 5, which is not really required for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents both parameters thoroughly, including where the ids come from ('from find results' and 'from find results or list_projects'). The main description does not add detail beyond the schema, so the baseline of 3 for high coverage applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch one item (task/note) by its project id + task id', and identifies the returned content (full markdown body, tags, due date). This clearly differentiates it from sibling read tools like get_task_hierarchy and get_task_security, and the mutation tools like update_task and set_task_lifecycle.
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 sequencing guidance — 'Use after find/list_projects give you the ids' — positioning the tool in a specific workflow and separating it from the listing/search siblings. It does not enumerate exclusions for near-alternative reads such as context_for_task, task_graph, or similar, though the intent is fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_hierarchyA
Read-only. Returns the item role and its explicit parent relationship. Roles are exploration, goal, project, task, or unspecified.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden. It explicitly declares a non-mutating behavior and states what data is returned: the item role and its explicit parent relationship. It does not detail error cases, but for a simple getter the core behavioral contract is disclosed.
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 text is two concise sentences with the read-only qualifier front-loaded. It includes useful role vocabulary without filler, making every sentence earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only tool, the description covers the return value and non-mutating nature well. However, with no output schema and no parameter guidance, the description alone is not fully complete; an agent must infer parameter semantics from names.
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 0%, so the description was expected to compensate for the parameters, but it does not explain projectId or taskId. The parameter names are somewhat self-explanatory, yet the description adds no additional semantic detail about how they are used.
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 starts with 'Read-only' and uses a specific verb 'Returns the item role and its explicit parent relationship,' making the tool's purpose concrete. It also enumerates the possible roles, further disambiguating it from sibling tools like set_task_hierarchy.
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 'Read-only' qualifier signals this is for inspection rather than modification, but the description does not explicitly name alternatives such as set_task_hierarchy or evaluate_task_hierarchy. No when-to-use or when-not-to-use conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_securityA
Read-only. Returns the portable trust, action, resource, denial, approval, and approver policy for one task. Unconfigured tasks default to untrusted content and no granted access.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It clearly states Read-only and explains the unconfigured default, but it does not describe the exact output shape, how defaults appear in results, or any access or auth prerequisites.
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 only two sentences and contains no filler. Read-only is front-loaded, and the returned policy dimensions plus the key default behavior are stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only getter with no output schema, the description covers what is returned, the main safety trait, and an important edge case. It is only slightly incomplete because it does not describe return formatting or parameter semantics explicitly.
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 input schema has 0% description coverage and the description does not explain the meaning or constraints of projectId and taskId. Their names are somewhat self-evident, but the description adds nothing about scoping, formats, or relationship to the security policy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation and resource: it returns the security policy for one task. The Read-only qualifier and the enumerated policy dimensions make it easy to distinguish from siblings like set_task_security and check_task_access.
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 does not say when to use this tool versus alternatives such as set_task_security, check_task_access, or get_task. The default-behavior note is useful but does not help an agent choose between related security tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_actionsA
Read-only. Lists action-ledger records, optionally filtered by task, agent, action, or advancement.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| limit | No | ||
| action | No | ||
| taskId | No | ||
| advanced | No | ||
| projectId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description declares the tool is read-only, a key behavioral trait. However, lacking annotations, it does not elaborate on other behaviors such as sorting, pagination, or performance implications of filters.
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, front-loaded with 'Read-only', containing no unnecessary 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 six parameters, no output schema, and minimal annotations, the description lacks information about return format, pagination, and other behaviors, making it insufficient for a comprehensive understanding.
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 0% schema description coverage, the description partially compensates by naming four filters (task, agent, action, advancement) that map to parameters, but omits projectId and limit and provides no type or format details.
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 is 'Read-only' and lists 'action-ledger records' with optional filters. It distinguishes itself from sibling tools like 'record_action' which is a write operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions optional filters, implying usage contexts, but does not explicitly state when to use this tool versus alternatives like event listers or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pending_task_eventsA
Read-only. Lists durable task-event envelopes that have not been acknowledged by a consumer. Task bodies are not stored in the spool.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. Explicitly states 'Read-only' and notes that task bodies are not stored, providing key behavioral context. Lacks mention of ordering or pagination 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, zero waste. Front-loaded with 'Read-only' and immediately states purpose. 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?
Adequate for a simple list tool with one optional parameter and no output schema. Covers basic behavior but omits details like return format, ordering, or pagination semantics.
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 has one optional parameter 'limit' with type/constraints, but description gives no explanation of its purpose or effect. 0% schema description coverage, and description does not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'lists', resource 'durable task-event envelopes', and condition 'not acknowledged'. Distinguishes from siblings like acknowledge_task_events and poll_task_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs. alternatives. Does not mention scenarios where this should be preferred over similar tools like poll_task_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsA
Read-only. List the projects / folders in the store, each with its id and name. Call this first to discover the projectId you need for get_task, create_task, or update_task. Returns an array of { id, name }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It explicitly states the operation is read-only and describes the return shape as an array of { id, name }. That is meaningful beyond the scalar value of the 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 three short sentences, each adding distinct value: read-only disclosure, the listing scope and output shape, and when to invoke it. There is no fluff or repetition.
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 parameterless list tool, the description is complete: it says what it returns, that it is read-only, and how to use it first to obtain a projectId. No hidden behavior or missing necessary context remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the 100% schema coverage baseline is 4. The description need not document parameter behavior, and it appropriately offers no invented parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (list projects/folders) and clearly specifies what each result contains (id and name). It is not a tautology and it identifies the tool's distinct purpose within the sibling set, since no other sibling is a project listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: call this first to discover a projectId needed for get_task, create_task, or update_task. It does not name a direct alternative tool or explicitly say when not to use it, but this is a discovery-first listing tool, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_referencesB
Read-only. Lists the resources (external URLs and reference notes) in a task's "## References" section.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations are absent, the description does the full work of telling the agent this is a read operation, and it does say 'Read-only.' It also clarifies that the tool surfaces URLs and reference notes, not entire tasks. Missing behavior includes how unknown task or project IDs are handled, whether returned links are resolved or raw, and what exactly the response structure looks like—no output schema backs it up.
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 gets the job done in one sentence. 'Read-only' is front-loaded, the exact target location ('## References' section) is included, and it has no filler.
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 the simplicity of this tool—two string IDs, no nested objects, no output schema—the description is nearly complete. It tells the agent what the tool reads, what is visible, and that it has no side effects. The remaining gap is that the parameter semantics are not explained anywhere, which is relevant, but the overall calling context is straightforward.
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 input schema has no description for either projectId or taskId, and the tool description adds nothing about them. 'Read-only' and 'a task's References section' only hints at taskId; projectId is never even loosely explained. Because schema coverage is 0%, the description should compensate for this gap and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('lists') and a precise resource: a task's 'References' section. It also distinguishes the tool from mutation siblings by identifying it as 'Read-only' and describing the exact data returned (external URLs and reference notes). It does not explicitly separate itself from get_task or context_for_task, which might overlap for an agent, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when an agent needs the references attached to a task. The 'Read-only' label helps avoid using it for mutation. However, it does not mention alternatives such as add_task_reference, remove_task_reference, or get_task, nor does it state conditions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
poll_task_eventsA
WRITE/LOCAL. Diffs the current task corpus, durably stages deterministic event envelopes, then advances the checkpoint. Returns newly observed events plus the unacknowledged pending spool. Events are observation-only and must be acted on separately under normal ATS intent and security checks.
| Name | Required | Description | Default |
|---|---|---|---|
| dueWithinHours | No | Override the task.due.soon horizon stored in the checkpoint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description clearly labels as WRITE/LOCAL, describes side effects (durably stages, advances checkpoint), and declares observation-only nature. With no annotations, this adequately covers 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?
Three sentences, front-loaded with operation type, no wasted words. Each sentence adds distinct 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 simplicity (1 non-required param, no output schema), description covers purpose, behavior, and usage. Could briefly explain what 'deterministic event envelopes' are, but overall adequate.
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?
Single parameter has schema description (coverage 100%), so baseline is 3. Tool description does not add any further meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verbs (diffs, stages, advances) and mentions return type. It hints at distinction from siblings (e.g., unacknowledged pending spool) but could explicitly differentiate from acknowledge/list/snapshot 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?
States events are observation-only and must be acted on separately, implying usage pattern. But does not explicitly state when to use this tool vs siblings like acknowledge_task_events or list_pending_task_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
promote_explorationB
WRITE. Creates a committed execution item from exploratory material. The source body is not copied; the new item receives explicit outcome/completion metadata and an evidence link back to the source.
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | ||
| kind | No | ||
| tags | No | ||
| agent | No | ||
| title | No | ||
| content | No | ||
| dueDate | No | ||
| outcome | Yes | ||
| doneWhen | Yes | ||
| priority | No | ||
| authority | No | ||
| constraints | No | ||
| parentTaskId | No | ||
| sourceTaskId | Yes | ||
| parentProjectId | No | ||
| sourceProjectId | Yes | ||
| targetProjectId | Yes | ||
| approvalRequired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it provides useful behavioral specifics: it is a WRITE operation, the source body is not copied, and the new item receives explicit outcome/completion metadata plus an evidence link back to the source. It does not cover permissions, reversibility, or side effects on the source, but it goes beyond a generic 'promote exploration' statement.
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 short and front-loaded with a 'WRITE.' signal, then a one-sentence statement of purpose and behavior. It is efficient and readable, although some additional essential context needed for a 18-parameter tool is absent. As structure alone, it is good.
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?
A tool with 18 parameters, no output schema, no annotations, and 0% schema coverage leaves the description as the only guide. Two sentences do not explain which IDs are required, how 'sourceProjectId' and 'targetProjectId' relate, what 'kind' selects, or how the evidence link is represented. The description is far from sufficient to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and there are 18 parameters including 5 required ones. The description only hints at 'outcome/completion metadata' and an 'evidence link', which vaguely relates to outcome, doneWhen, and source/target IDs, but it does not explain the meaning or relationships of the parameters. This falls far short of compensating for the complete lack of 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 uses a clear verb ('creates') and resource ('committed execution item') and explains the source ('exploratory material'). It distinguishes the operation from plain create_task by emphasizing that the source body is not copied and that the new item carries outcome/completion metadata and an evidence link. It does not explicitly name a sibling alternate, but the semantics are clear enough to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use case: converting exploratory work into a committed execution item. However, it does not explicitly state when to prefer this over create_task or related lifecycle tools, and it offers no exclusions or alternative conditions. This is only slightly above no guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_actionA
WRITE. Appends an auditable agent action or outcome to the local ATS JSONL ledger, including sources, approvals, output, and whether the task advanced.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| action | Yes | ||
| output | No | ||
| taskId | Yes | ||
| sources | No | ||
| advanced | No | ||
| approvals | No | ||
| projectId | 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 discloses that the tool performs a write operation ('appends'), is auditable, and includes specific fields. However, it lacks details on idempotency, error handling, concurrency, or persistence guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads 'WRITE' and conveys all key information without any extra words. It is efficient and easy to parse.
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 an 8-parameter write tool with no output schema, the description provides a high-level purpose but lacks details on return value, error conditions, or typical usage patterns. It is adequate but not comprehensive.
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 0%, meaning parameters are not described in the schema beyond names. The description mentions fields like sources, approvals, output, and advanced, adding some context. But it does not explain formats, constraints, or the relationship between required and optional 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 starts with 'WRITE' indicating the action type. It clearly states the tool appends an auditable agent action or outcome to a local ATS JSONL ledger, listing included fields (sources, approvals, output, advanced). This distinguishes it from sibling tools like list_actions (read) or poll_task_events (poll).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for recording actions but provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or prerequisites. Sibling tools are listed but not compared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
relate_taskA
WRITE. Auto-routes a relevant target into the right section by what it is: an active task goes to "## Related" (a typed link), a note goes to "## References", and a completed task is refused. Prefer this when you just know a target is relevant and do not want to choose the section yourself. Returns routedTo: "related" | "references".
| Name | Required | Description | Default |
|---|---|---|---|
| desc | No | ||
| type | No | ||
| agent | No | ||
| sourceTaskId | Yes | ||
| targetTaskId | Yes | ||
| sourceProjectId | Yes | ||
| targetProjectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the burden of explaining behavior. It clearly discloses that this is a mutating operation, that a completed task is refused, and that the return value is routedTo: 'related' | 'references'. It does not document side effects or failure behavior in detail, but it is meaningfully transparent for a small 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?
Three short sentences with no filler. The core behavior is front-loaded, the usage guidance is placed centrally, and the return value is stated at the end. Every sentence provides usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains routing logic and the return value, but with seven parameters, four required, and no schema descriptions, a tool's wording is not enough. Important invocation details like project/task ID semantics and what type values mean are left out.
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 0%, but the description does not compensate for the parameters. It does not explain sourceProjectId, sourceTaskId, targetProjectId, targetTaskId, desc, or agent, and only contributes indirect meaning to type ('typed link', related). An agent cannot confidently map the required IDs or description field from the text alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific behavior: auto-routing a relevant target into the appropriate section based on whether it is an active task, a note, or a completed task. It clearly differentiates from manual sibling tools like add_task_link and add_task_reference by emphasizing that no section choice is needed. The 'WRITE.' prefix also makes the action direction clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to 'Prefer this when you just know a target is relevant and do not want to choose the section yourself,' which gives a concrete trigger condition. It does not explicitly name alternative tools or list when not to use it, but the context makes the intent understandable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_task_linkA
WRITE. Removes one exact typed relationship from a source task. Returns removed=false when the relationship was already absent.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| agent | No | ||
| sourceTaskId | Yes | ||
| targetTaskId | Yes | ||
| sourceProjectId | Yes | ||
| targetProjectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does so well: it explicitly warns 'WRITE', clarifies exact-match semantics, and documents the idempotent no-op result ('Returns removed=false when the relationship was already absent'). It could go further on permissions or side effects, but the core behavior is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and informative, with the WRITE warning and core action up front, followed by one valuable edge-case note about the return value. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with six parameters, no annotations, and no output schema, the description is adequate but not fully complete. It explains the operation and one return case, but does not describe the success return path, error behavior for nonexistent tasks, or authorization expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate conceptually. 'Exact typed relationship' and 'source task' map meaningfully to the sourceTask/sourceProject/type fields, but they do not clarify all parameters individually, especially the optional 'agent' 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 pairs a specific verb ('removes') with a specific resource ('one exact typed relationship') and distinguishes this from bulk or fuzzy link operations. The 'exact typed' qualifier also separates it from sibling tools like resolve_task_links or add_task_link.
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 intended use is implied: call this tool when you want to remove a single, exactly matched task relationship. However, the description does not explicitly name alternatives or state when this tool should be preferred over related sibling tools such as add_task_link or remove_task_reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_task_referenceA
WRITE. Removes a reference (by url) from a task's "## References" section. Returns removed=false when the url was already absent.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| agent | No | ||
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It labels the call as a WRITE and discloses the key idempotency behavior: removed=false when the URL is absent. It doesn't mention authorization, errors, or exact return object shape, but the essential behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first names the operation, the second handles idempotency. The WRITE marker is useful and front-loaded, making the tool's general kind immediately clear.
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 small, idempotent mutating call, this is nearly complete: it states the action, the affected data, and one important return-value boundary. There is no output schema, so this last point matters greatly; the description adequately conveys the outcome. The only clear gap is unspecified semantics for the optional agent parameter.
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 0%, so the description must compensate. It only clarifies the url parameter (the reference to remove) and indirectly taskId, but does not explain projectId or the optional agent parameter. These remain ambiguous, making the description insufficient as parameter documentation.
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 names a specific verb, resource, and action: removes a reference by URL from a task's '## References' section. This clearly distinguishes it from sibling tools like add_task_reference, list_task_references, and especially remove_task_link, which deals with links rather than 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 use case is implied: when a reference by URL should be removed from a task's References section. There is no explicit when-to-use vs alternatives, but the clear operation and direct mapping to add_task_reference make it inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_task_linksA
Read-mostly. Back-resolves a task's forward links: for each stored link whose target now exists, refreshes the placeholder title to the real one. Returns which links resolved and which are still missing. Writes only if a title changed.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is transparent that the tool is 'read-mostly' and writes 'only if a title changed', and it discloses the result format: which links resolved vs which are still missing. Since no annotations exist, the description carries the full burden, and it covers the most important side effects. It omits permissions and concurrency behavior, but this is sufficient for a read-dominant, conditionally writing 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 compact and front-loaded with the most important mental model ('Read-mostly'). Each sentence adds a distinct piece of information: the operation, the return value, and the write condition. There is no filler or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter tool with no output schema and no annotations, the description covers the action, the condition under which writes occur, and the returned information about resolved vs missing links. The only notable gap is the meaning of the 'agent' parameter, which prevents perfect completeness, but a caller can generally infer the needed inputs from the task 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?
The input schema has zero description coverage, and the tool description provides no guidance on any of the three parameters. projectId and taskId are inferable from their names in a task context, but 'agent' is undefined and the relationship among them is not explained. The description does not compensate for the 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 states a specific operation (back-resolving a task's forward links) and precisely explains what is done: refreshing placeholder titles to real titles. The phrase 'for each stored link whose target now exists' and 'returns which links resolved and which are still missing' clearly differentiates this from siblings like add_task_link or remove_task_link.
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 implies when to use this tool: when a task's forward links may point to targets that have since been created and placeholder titles need to be become real titles. It does not explicitly exclude alternatives or name substitute tools, but the write condition and resolution behavior provide enough context to select this over link-structure tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_task_hierarchyB
WRITE. Assigns an exploration/goal/project/task role and optionally replaces or clears the single explicit parent relationship.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| agent | No | ||
| taskId | Yes | ||
| projectId | Yes | ||
| clearParent | No | ||
| parentTaskId | No | ||
| parentProjectId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full disclosure burden. The 'WRITE' prefix and 'replaces or clears' do convey the core mutation behavior and the domain of the hierarchy 'single explicit parent'. However, it omits permissions/security implications (despite set_task_security siblings), reversibility/undo behavior, and what happens to existing children when the parent is cleared. It adds meaningful context, but a mutation of this surface area needs more behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with an upfront 'WRITE' marker and a dense but exact statement of both behaviors. Every word earns its place — the role enum values are compressed, the parent operation is encoded as 'replaces or clears', and there is no repetition of schema field names or annotation data. It is short yet complete at the level it attempts.
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 high complexity, 7 nullable parameters, 2 required IDs, no annotations, no output schema, and a request with 31 overlapping siblings, the description is not complete enough. It never addresses what taskId and projectId mean together, how parentTaskId differs from parentProjectId, why agent exists, or what happens when both parent and clearParent are set. Agents are forced to reason about the required-value semantics and error surface entirely on their own.
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 0%, so the description must compensate and partially does: 'exploration/goal/project/task role' directly maps the kind enum, and 'replaces or clears' maps to parentTaskId, parentProjectId, and clearParent. It does not clarify the semantics of the two required fields taskId and projectId (how they coexist), the meaning of agent, or the precedence between clearParent and a supplied parentTaskId. Meaningful value added beyond the schema, but several parameter relations stay unresolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Assigns'), names a clear resource (the hierarchy role: exploration/goal/project/task), and adds the distinct parent relationship semantic of 'replaces or clears'. The WRITE prefix and focus on a 'single explicit parent' distinguish it from read siblings like get_task_hierarchy and from relationship tools like relate_task or add_task_link, though it does not name those siblings explicitly. Not a 5 because it never states what it does NOT do or names the overlapping set_* tools it competes with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies context ('assigns a role', 'optionally replaces or clears the parent') but provides no when-to-use/when-not-to-use guidance and no alternatives. With 31 siblings including promote_exploration, relate_task, add_task_link, and set_task_lifecycle, an agent receives no explicit routing away from those overlapping tools. The usage context is inferable but never stated, landing at 'no guidance' rather than 'implied usage'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_task_intentB
WRITE. Adds or updates portable execution intent inside the task body: desired outcome, why it matters, completion conditions, authority, constraints, and approval requirement. Preserves the human-authored body and works through every ATS adapter.
| Name | Required | Description | Default |
|---|---|---|---|
| why | No | ||
| agent | No | ||
| taskId | Yes | ||
| outcome | No | ||
| doneWhen | No | ||
| authority | No | ||
| projectId | Yes | ||
| constraints | No | ||
| approvalRequired | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states "WRITE," indicates mutation, says the tool adds or updates, and notes that it preserves the human-authored body. However, it does not disclose whether the operation is idempotent, whether it merges or replaces existing intent, or any authorization or side-effect implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the "WRITE" signal, a direct verb phrase, a concise inline enumeration, and valuable trailing context about portability and ATS compatibility. No filler is present.
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 9-parameter mutating tool with no annotations or output schema, the description gives a helpful broad overview but does not fully explain update semantics, the meaning of the agent parameter, or return behavior. It is above minimal but leaves real 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 description coverage is 0%, so the description must compensate. It maps several listed intent concepts to likely parameters such as outcome, why, doneWhen, authority, constraints, and approvalRequired, but it does not explain agent, projectId, or taskId. This is useful but incomplete for a 9-parameter tool with no 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 identifies a clear verb and resource: it adds or updates portable execution intent in the task body, and enumerates the intent fields. It does not explicitly distinguish itself from siblings like set_task_lifecycle or update_task, but the scope is specific enough to be recognized.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives. It does not mention conditions for use, exclusions, or a preferred workflow, leaving the agent to infer context from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_task_lifecycleB
WRITE. Sets portable lifecycle state and validity windows. Archived, expired, future, and superseded tasks are excluded by context assembly.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| status | No | ||
| taskId | Yes | ||
| projectId | Yes | ||
| validFrom | No | ||
| validUntil | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does state 'WRITE' and discloses an important behavior: archived, expired, future, and superseded tasks are excluded by context assembly. However, it does not say whether changes are reversible, how validFrom/validUntil interact with status, or what happens to existing lifecycle state.
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 and front-loads the mutation nature with 'WRITE.' Both sentences earn their place with meaningful behavioral information. It is concise but somewhat cryptic, especially the term 'portable lifecycle state.'
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, no annotations, no output schema, and zero schema-description coverage. A single high-level sentence is insufficient for reliable invocation: it leaves uncertain how validFrom/validUntil should be formatted, what status is acceptable, and whether this should be preferred over update_task.
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 0%, so the description must compensate. It only broadly maps to status and validity windows, but does not explain date formats, required-status rules, the semantics of optional fields, or how 'agent' relates to the write operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('set') and resource ('portable lifecycle state and validity windows'), which clearly distinguishes it from set_task_intent and set_task_hierarchy. It could be more concrete about exactly what 'portable lifecycle state' means, so it stops short of perfect clarity.
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 intended use is implied: call this when setting lifecycle state or validity windows. The description does not explicitly compare against update_task or set_task_intent, and it provides no when-not-to-use guidance or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_task_securityB
WRITE. Sets a portable task security policy. This policy is a decision point for cooperating clients; it does not sandbox unrelated external tools.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | No | ||
| taskId | Yes | ||
| approvers | No | ||
| projectId | Yes | ||
| contentTrust | No | ||
| allowedActions | No | ||
| deniedResources | No | ||
| allowedResources | No | ||
| approvalRequiredFor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. The description labels the operation as WRITE and clarifies that the policy is not a sandbox, but it does not disclose side effects, whether existing security settings are overwritten, permission requirements, or what happens to the policy once set. These are important behavioral gaps for a mutation tool without annotation support.
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 short sentences, front-loads the operation kind ('WRITE'), and each sentence adds substantively distinct information. There is no filler, repetition of the tool name, or redundant restating of schema properties.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters, no output schema, no annotations, and a sparse description. An agent cannot tell what response format to expect, how the policy is applied, how approval arrays interact with other fields, or what the 'decision point' semantics mean for a client. The description is not enough to confidently and correctly invoke such a specialized security 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?
The schema has 0% description coverage, and the description mentions none of the nine parameters. It only gives high-level context about a security policy and adds no meaning for required fields like projectId and taskId or important arrays like allowedActions and deniedResources. The agent is left entirely to infer the semantics of the parameter names without additional intent or example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'WRITE' and explicitly states it 'Sets a portable task security policy,' providing a clear verb and resource. It further differentiates this tool from similarly named siblings by explaining that the policy is 'a decision point for cooperating clients' and not a sandbox for external tools. This is enough for an agent to distinguish it from set_task_lifecycle, set_task_intent, and get_task_security.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context about when this tool is relevant by stating the policy is for cooperating clients and explicitly says it does not sandbox unrelated external tools. However, it does not name an alternative tool or spell out when to choose a sibling like get_task_security or check_task_access, so it misses the highest bar for explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
similarA
Read-only. Find items semantically similar to a KNOWN item, given its id (not a text query — for text search use find). Useful for "show me related notes to this one" or dedupe. Requires an embedder-backed adapter (e.g. TickTick); returns a clear error on adapters without embeddings. Returns an array of items ranked by similarity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of similar items to return. Default 5, hard cap 50. | |
| taskId | Yes | Id of the reference item to find neighbours for (from `find` results). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It declares read-only, requires an embedder-backed adapter, describes error behavior, and specifies return format. 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?
Three sentences, front-loaded with purpose and read-only hint. Every sentence adds value: purpose, usage constraints, required adapter, error handling, return type. 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?
For a tool with no output schema, it clearly states inputs, behavior, requirements, error cases, and output (array of items ranked by similarity). Complete and self-contained.
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% with descriptions for both parameters. Description adds critical context: 'from find results' for taskId, and default value and hard cap for limit. Adds 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?
Description clearly states 'Find items semantically similar to a KNOWN item' using verb+resource. It distinguishes from the sibling tool 'find' by explicitly stating 'not a text query — for text search use find'.
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 explicit use cases ('show me related notes', 'dedupe') and explicitly states when not to use it (for text queries) with a named alternative ('find').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshot_task_eventsA
WRITE/LOCAL. Creates or replaces the local corpus-diff event checkpoint. This only observes task state; it never launches an agent or performs an external action.
| Name | Required | Description | Default |
|---|---|---|---|
| dueWithinHours | No | Horizon for future task.due.soon events. Default 24 hours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description clearly states the tool 'only observes task state; it never launches an agent or performs an external action,' which directly addresses potential concerns about side effects. However, it does not mention if previous checkpoints are overwritten or if there are any performance impacts.
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 concise sentences front-load the key purpose and safety guarantee. No redundant words or irrelevant 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?
The description covers purpose and behavioral guarantees but does not mention what the tool returns (e.g., success confirmation or checkpoint ID). Given no output schema, this is a notable omission for completeness.
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?
Input schema has 100% coverage with a clear description of 'dueWithinHours' parameter. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'creates or replaces the local corpus-diff event checkpoint,' which is a specific action. It contrasts with siblings like 'acknowledge_task_events' and 'poll_task_events' by emphasizing it only observes state and never launches agents or external actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'poll_task_events' or 'list_pending_task_events'. The description includes 'WRITE/LOCAL' but does not explain scenarios where snapshotting is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_graphA
Read-only. Traverses typed incoming and outgoing task relationships around one task. Returns nodes, edges, lifecycle validity, and unresolved references.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| taskId | Yes | ||
| projectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full disclosure burden. It explicitly states 'Read-only', describes the traversal direction, and reveals non-obvious outputs such as lifecycle validity and unresolved references. It omits depth behavior and error semantics, but the disclosed information is meaningful and accurate.
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 appropriately short and well structured: a one-word safety statement, then the core behavior, then the output summary. Every sentence contributes unique information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a solid high-level picture but is not fully complete for autonomous invocation. There is no output schema or annotation support, and the description does not cover depth semantics, project scoping, or how task_graph differs from the many related relationship/hierarchy tools. It is adequate but has clear 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 description coverage is 0%, so the description must compensate; it only indirectly hints at taskId via 'around one task'. It does not explain projectId, the meaning of depth, how depth interacts with traversal, or what each returned graph element represents. Thus the description fails to rescue the missing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('traverses') and a clear resource ('typed incoming and outgoing task relationships around one task'). It also concretely names the outputs: nodes, edges, lifecycle validity, and unresolved references. This distinguishes it well from sibling mutating tools like set_task_lifecycle or update_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only, graph-traversal wording implies use when inspecting task connectivity, but the description does not explicitly say when to use it, when not to use it, or how it relates to similar tools such as get_task_hierarchy or relate_task. The usage context is inferable, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
undo_writeA
WRITE. Reverses a recorded write using the before-image the ledger captured: restores an updated task to its prior state, or deletes a task that was created. Omit actionId to undo the most recent undoable write. Pass dryRun to preview the plan without changing anything. Records a compensating action.reverted entry.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Preview the revert plan without writing. | |
| actionId | No | Ledger action id to reverse (from `list_actions`). Omit to undo the most recent undoable write. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it flags the write nature, explains the before-image mechanism, shows the side effect of recording an action.reverted entry, and offers dryRun preview. It could also mention failure cases like having no undoable write, but most key consequences are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise sentences, tightly packed with distinct facts. The WRITE marker is front-loaded, followed by behavior, invocation options, and side effects. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two optional parameters and no output schema, the description covers main behavior, selection of the write to undo, preview mode, and a side-effect. It doesn't describe the shape of the preview plan or behavior when no undoable write exists, but overall the agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds real meaning beyond the schema by explaining the omission behavior for actionId and the purpose of dryRun. This is a meaningful contribution, though params are simple.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific behavior: "Reverses a recorded write" using the ledger's before-image, and gives concrete outcomes (restore updated task, delete created task). It is not a tautology and is distinct from related action-recording and action-listing 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 explains when to omit actionId, when to pass dryRun, and that actionId comes from list_actions. It does not explicitly mention when not to use it or name an alternative tool, but the guidance is sufficient for a focused undo operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskA
WRITE. Patches an existing item (partial update) — only the fields you provide change; omitted fields are left untouched. Side effect: the item is modified in the human's task app. Requires the item's projectId + taskId (get them from find or list_projects). Returns the updated item. To create a new item instead, use create_task.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Replacement tag set (without leading "#"). Omit to leave tags unchanged. | |
| agent | No | Agent identity for the append-only ATS action ledger. | |
| title | No | New title. Omit to leave the title unchanged. | |
| taskId | Yes | Id of the item to update (from `find`). | |
| content | No | New markdown body. Omit to leave the body unchanged. Note: replaces the body, does not append. | |
| dueDate | No | New due date as an ISO 8601 string. Omit to leave the due date unchanged. | |
| projectId | Yes | Id of the project the item lives in (from `find`/`list_projects`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It flags 'WRITE', discloses the side effect (item modified in the human's task app), explains partial-update behavior, and states the return value. It stops short of discussing idempotency or permissions, but the principal behavioral details are covered.
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 short, front-loaded with 'WRITE', and each sentence adds one distinct point: purpose, side effect, prerequisites, return value, and alternative. There is no filler.
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 params fully documented in the schema and no output schema, the description supplies the missing return value. It also covers prerequisites and how to get required fields, so an agent has enough context to act safely.
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 each parameter already has a description. The description still adds cross-field semantics (only provided fields change, omitted fields stay untouched, required IDs come from find/list_projects), which enriches the meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('patches') and clear resource ('existing item') and distinguishes itself from create_task. It explicitly clarifies partial-update semantics, so an agent cannot confuse this with creation or replacement.
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 names the alternative (create_task) explicitly for when-to-not-use and tells exactly how to obtain the required parameters ('find' or 'list_projects'). This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
url_forA
Read-only. Build a paste-ready deep link (a URL string) to an item in its native app, so you can hand the human a clickable reference. Does not open anything or write — pure id→URL construction. Returns the URL as a string.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Id of the item to link to (from `find`). | |
| projectId | Yes | Id of the project the item lives in (from `find`/`list_projects`). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavioral traits: it is read-only, performs pure ID-to-URL construction without opening or writing, and returns a URL string. This transparency exceeds the burden for an unannotated 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 concise with three sentences, front-loading the key trait ('Read-only') and main action. There is no irrelevant information, and every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two well-described parameters and no output schema, the description is complete. It explains the return value (URL as a string) and the source of input IDs, leaving no obvious 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?
The input schema provides 100% coverage with clear descriptions for both parameters ('Id of the project...' and 'Id of the item...'). The description adds minimal value beyond referencing sources ('from find/list_projects'), so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: building a paste-ready deep link to an item in its native app. It uses specific verbs ('Build', 'hand the human a clickable reference') and distinguishes from sibling tools that perform mutations (create_task, update_task) by emphasizing read-only behavior and URL construction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('when you want to give a human a clickable reference') and what it does not do ('does not open anything or write'). While it doesn't explicitly exclude alternatives or state when not to use, the guidance is sufficient for an agent to understand appropriate usage.
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.
24 tool updates
v0.11.0- Added
add_task_link - Added
add_task_reference - Added
check_task_access - Added
context_for_task - Added
create_task - Added
evaluate_task_hierarchy - Added
find - Added
get_task - Added
get_task_hierarchy - Added
get_task_security - Added
list_projects - Added
list_task_references - Added
promote_exploration - Added
relate_task - Added
remove_task_link - Added
remove_task_reference - Added
resolve_task_links - Added
set_task_hierarchy - Added
set_task_intent - Added
set_task_lifecycle - Added
set_task_security - Added
task_graph - Added
undo_write - Added
update_task
11 tool updates
v0.6.0- Added
acknowledge_task_events - Removed
create_task - Removed
find - Removed
get_task - Added
list_actions - Added
list_pending_task_events - Removed
list_projects - Added
poll_task_events - Added
record_action - Added
snapshot_task_events - Removed
update_task
7 tool updates
v0.1.0- First observed
create_task - First observed
find - First observed
get_task - First observed
list_projects - First observed
similar - First observed
update_task - First observed
url_for
TDQS
Most tools are clearly scoped to a distinct operation (CRUD, lifecycle, security, linking, events), and ambiguous pairs like find vs. similar are explicitly disambiguated. Minor overlap remains between add_task_link, add_task_reference, and relate_task, as well as task_graph vs. context_for_task, but the descriptions give enough guidance to avoid serious misselection.
The naming convention is predominantly snake_case verb_noun with predictable set_/get_/list_/create_/update_/remove_ prefixes. A few tools break the pattern—find, similar, url_for, task_graph, context_for_task—but these are readable and not chaotic.
32 tools is well past the 25+ threshold and creates a heavy surface for an agent to choose from. Many tools represent distinct subdomains, but the overall count feels bloated; consolidating related operations or naming grouped tool families would make the set more usable.
The server covers task CRUD, lifecycle, hierarchy, intent, security, relationships, references, context building, search, deduplication, deep links, action ledger, undo, and event observation—an unusually broad and complete surface. Minor gaps exist, such as no explicit delete_task operation and no straightforward list_all_tasks beyond search or project listing, but agents can work around these with existing tools.
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
A self-improving memory layer. Your memory, notes, tasks and goals, remembered everywhere.
- AgentdaOAuthcom.myagentda
Agent-native task management: your AI agent is the interface. Delegate to anyone by email.
- OneLoreOAuthai.onelore
Shared project context for AI agents and teams: docs, tasks, and messages that stay current.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI-native productivity backend that gives your AI assistant persistent memory, pattern awareness, and computed intelligence about your work. 14 MCP tools for task management, daily planning, weekly review, and personal context.MIT
- AlicenseNot gradedqualityDmaintenanceProvides a persistent, vendor-neutral memory layer that allows AI tools and agents to share context and knowledge across different platforms while maintaining local data ownership. It enables users to store, recall, and manage structured memories through hybrid semantic search and automated context assembly.16Apache 2.0
- AlicenseAqualityCmaintenanceSmart memory for AI agents. Solves the Karpathy problem: memories decay, topics are frequency-weighted, one-time questions don't become obsessions. 7 tools. Zero deps.4222MIT
- AlicenseBqualityAmaintenanceYour portable AI memory layer. Classify, store, and recall what matters across models, tools, and devices.315MIT
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/renezander030/agentic-task-system'
If you have feedback or need assistance with the MCP directory API, please join our Discord server