Saga MCP
Saga MCP is a local, SQLite-backed project tracker that gives coding agents persistent MCP tools to plan, track, and resume work across sessions.
Initialize the tracker and get a full project dashboard with a natural-language summary
Manage projects, epics, tasks, and subtasks with statuses, priorities, due dates, assignees, tags, and source-code references
Model task dependencies with automatic blocking/unblocking when dependencies are completed
Batch-create subtasks and batch-update tasks
Add threaded comments on tasks to leave context across sessions
Save, list, search, and delete typed notes (decisions, context, meetings, blockers, progress, etc.)- Create, list, apply, and delete reusable task templates with {variable} substitution
Search across projects, epics, tasks, and notes; view activity logs and session diffs
Export and import full projects as JSON for backup or migration
Operates entirely on a local
.tracker.dbfile — no accounts, servers, or network calls
saga-mcp
Your coding agent loses the plan between sessions. You come back tomorrow and
it has no idea which of the five things you agreed on are done, which one is
blocked on which, or why you rejected the second approach — because the plan
lived in the context window, or in a TODO.md nobody updates.
saga-mcp gives the agent a real tracker instead: a SQLite file in your project holding projects, epics, tasks, subtasks, dependencies, comments, notes and decisions, exposed as 38 MCP tools. The agent writes to it as it works and reads the dashboard when it comes back. No accounts, no external service, no network calls — the database is a file you own.
Install (60 seconds)
Claude Code — add to your project's .mcp.json:
{
"mcpServers": {
"saga": {
"command": "npx",
"args": ["-y", "saga-mcp"],
"env": { "DB_PATH": "/absolute/path/to/your/project/.tracker.db" }
}
}
}Restart the client. DB_PATH is the only setting; the file and schema are
created on first use.
Related MCP server: Project Tracker MCP Server
What it looks like
You: "Set up tracking for the e-commerce API and plan out auth."
tracker_init({ project_name: "E-Commerce API" })
epic_create({ project_id: 1, name: "Authentication", priority: "high" })
task_create({ epic_id: 1, title: "Design auth schema", priority: "critical" })
task_create({ epic_id: 1, title: "Implement JWT auth", depends_on: [1] })
task_create({ epic_id: 1, title: "Add OAuth2 Google login", depends_on: [2] })Tasks 2 and 3 come back blocked — their dependencies aren't done. Finish task 1 and task 2 unblocks itself.
Next session, you: "Where were we?"
tracker_dashboard({})
→ "E-Commerce API: 5 tasks across 2 epics. 40% complete.
Active: Authentication (2/3 done). Next up: Product Catalog (2 tasks).
1 blocked task(s)."Plus the structured data behind it: stats, epics, blocked and overdue tasks, recent activity, notes.
Features
Full hierarchy: Projects > Epics > Tasks > Subtasks
Task dependencies: Express sequencing with auto-block/unblock when deps are met
Description lock: Stop agents rewriting a task's spec when they meant to leave a comment
Subtask ordering & dependencies: Explicit order, and checklist items that wait on siblings
Comments: Threaded discussions on tasks — leave breadcrumbs across sessions, with reversible soft-delete
Web UI:
saga-webserves a local dashboard for browsing and editing the same databaseTemplates: Reusable task sets with
{variable}substitutionDashboard: One tool call gives full overview with natural language summary
SQLite: Self-contained
.tracker.dbfile per project — zero setup, no external databaseActivity log: Every mutation is automatically tracked with old/new values
Notes system: Decisions, context, meeting notes, blockers — all searchable
Batch operations: Create multiple subtasks or update multiple tasks in one call
38 focused tools: With MCP safety annotations on every tool
Import/export: Full project backup and migration as JSON (with dependencies and comments)
Source references: Link tasks to specific code locations
Auto time tracking: Hours computed automatically from activity log
Cross-platform: Works on macOS, Windows, and Linux
Other clients
Claude Code
Add to your project's .mcp.json:
{
"mcpServers": {
"saga": {
"command": "npx",
"args": ["-y", "saga-mcp"],
"env": {
"DB_PATH": "/absolute/path/to/your/project/.tracker.db"
}
}
}
}With Claude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"saga": {
"command": "npx",
"args": ["-y", "saga-mcp"],
"env": {
"DB_PATH": "/absolute/path/to/your/project/.tracker.db"
}
}
}
}Manual install
npm install -g saga-mcp
DB_PATH=./my-project/.tracker.db saga-mcpConfiguration
saga-mcp requires a single environment variable:
Variable | Required | Description |
| Yes | Absolute path to the |
| No | Scope every tool to one project, by id or name. Set this per repo when several repos share one database. Unset, tools read across the whole file. |
| No |
|
No API keys, no accounts, no external services. Everything is stored locally in the SQLite file you specify.
Token cost
The tool list is context every session pays before any work happens, and list responses are context it pays again on every call. Both are kept deliberately small:
Responses are compact JSON — no pretty-print indentation, which measured 20-27% of every response
task_listrows omit nulls andmetadata, and truncate descriptions to 120 characters (calltask_getfor a task's full text) — 19-39% smaller depending on how long your descriptions runactivity_logomits null columns and the row id (no tool takes one) — about 27% smallertracker_searchreturns previews rather than whole records — about 47% smaller; follow up withtask_getornote_listfor the full textSAGA_TOOLS=coredrops the listed tool surface from ~6,000 to ~2,700 tokens
note_list deliberately keeps full note content — it is the retrieval tool, not a preview.
Set SAGA_TOOLS=core when an agent only tracks work; leave it unset when you want templates,
import/export, session diffs and the rest discoverable.
Tools
Getting Started
Tool | Description | Annotations |
| Initialize tracker and create first project |
|
| Full project overview with natural language summary |
|
Projects
Tool | Description | Annotations |
| Create a new project |
|
| List projects with completion stats |
|
| Update project (archive to soft-delete) |
|
Epics
Tool | Description | Annotations |
| Create an epic within a project |
|
| List epics with task counts |
|
| Archive/unarchive an epic, hiding it and its tasks from listings |
|
| Update an epic |
|
Tasks
Tool | Description | Annotations |
| Create a task with optional dependencies |
|
| List/filter tasks with dependency info |
|
| Get task with subtasks, notes, comments, and dependencies |
|
| Update task (auto-logs, auto-blocks/unblocks) |
|
| Lock/unlock a description so agents can't rewrite it |
|
| Remove a |
|
| Restore a removed task |
|
| Update multiple tasks at once |
|
Subtasks
Tool | Description | Annotations |
| Create subtask(s) — supports batch |
|
| Update title/status/position; |
|
| Set the order of a task's subtasks in one call |
|
| Delete subtask(s) — supports batch |
|
Comments
Tool | Description | Annotations |
| Add a comment to a task (threaded discussion) |
|
| List comments on a task (removed ones hidden unless |
|
| Remove a comment — soft delete, row kept for audit |
|
| Restore a removed comment |
|
Templates
Tool | Description | Annotations |
| Create a reusable task template with |
|
| List available templates |
|
| Apply template to create tasks with variable substitution |
|
| Delete a template |
|
Notes
Tool | Description | Annotations |
| Create or update a note (upsert) |
|
| List notes with filters |
|
| Full-text search across notes |
|
| Delete a note |
|
Intelligence
Tool | Description | Annotations |
| Cross-entity search (projects, epics, tasks, notes) |
|
| View change history with filters |
|
| Show what changed since a given timestamp — call at session start |
|
Import / Export
Tool | Description | Annotations |
| Export full project as nested JSON (includes dependencies and comments) |
|
| Import project from JSON (matching export format) |
|
Usage Examples
Example 1: Starting a project with dependencies
User prompt: "Set up tracking for my new e-commerce API project"
Tool calls:
tracker_init({ project_name: "E-Commerce API", project_description: "REST API for online store" })
epic_create({ project_id: 1, name: "Authentication", priority: "high" })
task_create({ epic_id: 1, title: "Design auth schema", priority: "critical" })
task_create({ epic_id: 1, title: "Implement JWT auth", priority: "high", depends_on: [1] })
task_create({ epic_id: 1, title: "Add OAuth2 Google login", priority: "medium", depends_on: [2] })Result: Task 2 and 3 are auto-blocked because their dependencies aren't done yet. When task 1 is marked done, task 2 auto-unblocks.
Example 2: Resuming work with dashboard summary
Tool calls:
tracker_dashboard({})Response includes a natural language summary:
"E-Commerce API: 5 tasks across 2 epics. 40% complete. Active: Authentication (2/3 done). Next up: Product Catalog (2 tasks). 1 blocked task(s)."Plus the full structured data (stats, epics, blocked tasks, overdue tasks, activity, notes).
Example 3: Using templates for repeated workflows
Create a template:
template_create({
name: "feature_workflow",
description: "Standard feature implementation",
tasks: [
{ "title": "Design {feature} API", "priority": "critical", "estimated_hours": 2 },
{ "title": "Implement {feature}", "priority": "high", "estimated_hours": 8 },
{ "title": "Write tests for {feature}", "priority": "high", "estimated_hours": 4 },
{ "title": "Document {feature}", "priority": "medium", "estimated_hours": 1 }
]
})Apply it:
template_apply({ template_id: 1, epic_id: 2, variables: { "feature": "user auth" } })Creates 4 tasks: "Design user auth API", "Implement user auth", "Write tests for user auth", "Document user auth".
Example 4: Task comments as decision trail
comment_add({ task_id: 5, content: "Investigated root cause: CORS headers missing on preflight" })
comment_add({ task_id: 5, content: "Fixed by adding OPTIONS handler. Tested with curl." })
task_update({ id: 5, status: "done" })Comments persist across sessions — next time an agent calls task_get(5), it sees the full discussion thread.
If a comment turns out to be wrong, retract it without losing the trail:
comment_delete({ id: 12, reason: "Root cause was wrong — it was a proxy timeout", deleted_by: "pranab" })The row stays in the database and in the activity log. comment_list and task_get skip it,
comment_list({ task_id: 5, include_deleted: true }) shows it with its reason, and
comment_restore({ id: 12 }) brings it back. Nothing an agent removes is unrecoverable.
One database, many projects
saga-mcp works either way: a .tracker.db per repo (portable, keeps unrelated work apart),
or one shared database that every repo points at.
The shared setup needs one extra thing. projects is the top-level table, so a shared file holds
several projects — but task_list, note_list, activity_log and tracker_search read across
the whole file unless told otherwise. An agent in repo B would see repo A's tasks. Set
SAGA_PROJECT per repo and each agent sees only its own:
{
"mcpServers": {
"saga": {
"command": "npx",
"args": ["-y", "saga-mcp"],
"env": {
"DB_PATH": "/Users/you/saga/central.tracker.db",
"SAGA_PROJECT": "Payments platform"
}
}
}
}SAGA_PROJECT takes a project id or a project name (case-insensitive), and fails on startup with
the list of real projects if it matches neither. Every scoped tool also accepts an explicit
project_id argument, which wins over the environment variable.
Setup | What to set | Result |
One database per repo |
| Nothing to scope — one project per file |
Shared database, per-repo agents |
| Each agent sees only its project |
Shared database, one agent over everything |
| Tools read across all projects |
With neither SAGA_PROJECT nor a project_id, tracker_dashboard falls back to the first project
in the file and says so — the response carries other_projects and the summary explains that the
project was a guess, rather than silently reporting on the wrong repo.
The web UI is unaffected either way: its project switcher lists every project in the database, and each tab is scoped to the selected one.
Forgiving input
Smaller models routinely send an array parameter as a string containing JSON. Every array-taking tool accepts that, so a batch does not silently collapse into one record:
subtask_create({ task_id: 3, titles: '["Write it","Test it"]' }) # 2 subtasks
subtask_create({ task_id: 3, titles: "- Write it
- Test it" }) # 2 subtasks
task_batch_update({ ids: "[4,5]", status: "done" }) # both tasks
task_create({ epic_id: 1, title: "x", tags: "billing, urgent" }) # 2 tagsCoercion stops where intent becomes ambiguous. A comma inside a title is left alone —
"Design the API, then implement it" is one subtask, not two — while a comma in a tag or an id
list is a separator, because neither can contain one. Anything genuinely unusable is refused with
a message naming what arrived and what was wanted, rather than a leaked ids.map is not a function.
Getting old work out of the way
An epic list that is mostly finished work, and tasks an agent created that should have been subtasks, are context you pay for on every call.
epic_archive({ id: 4 }) # the epic and its tasks drop out of listings
task_delete({ id: 12, reason: "should have been a subtask" })Archiving is deliberately not the cancelled status: cancelled means "we decided not to do
this", while most of what you want to archive is completed. Archived epics and their tasks
disappear from epic_list, tracker_dashboard, task_list and tracker_search — including the
statistics, not just the lists — and come back with include_archived.
Nothing vanishes silently. The dashboard says what it left out:
Hidden: 2 archived epic(s) and 1 removed task(s) — pass include_archived to include them.task_delete is the same soft delete comments have, restricted to tasks still in todo:
anything further along has comments, time tracking and an activity log that removing it would
strand, and a task other tasks depend on is refused outright so nothing is left blocked forever.
The row is kept, task_restore brings it back, and tracker_export includes archived and removed
rows because a backup that omits things is not a backup.
Keeping agents on the rails
Two guards for the ways an agent goes wrong on a long task.
A locked description. Agents sometimes rewrite a task's description to record progress, when
they meant to add a comment — and the spec you agreed on is gone. Lock it and task_update refuses:
task_lock_description({ id: 12 })
task_update({ id: 12, description: "..." })
-> Task 12's description is locked and was not changed. Record progress with
comment_add instead, or unlock it in the web UI if the description is genuinely wrong.Everything else about the task stays editable — the point is to protect the spec, not freeze the
task. The lock cannot be cleared as a side effect of an ordinary task_update; it takes a
deliberate task_lock_description call or the lock toggle in the web UI, and both are logged.
This is a guard against confusion, not an adversarial control: an agent that is told to unlock still can. It turns a silent overwrite into a visible, reversible decision.
Subtask order and dependencies. New subtasks are appended in order rather than all landing at
position 0, subtask_reorder sets the order in one call (or drag them in the UI), and a subtask
can wait on its siblings:
subtask_update({ id: 8, depends_on: [5, 6] }) # 8 waits for 5 and 6
subtask_update({ id: 4, blocks: [5, 6, 7, 8] }) # a bug that holds up the restReads carry depends_on and blocked, and the block is enforced on write: starting or
finishing a subtask whose prerequisites are unmet is refused, and so is completing a task whose
checklist is still open.
subtask_update({ id: 8, status: "in_progress" })
-> Subtask 8 cannot be started — it waits on #5 'write the parser' (todo).
Finish those first, or pass force: true to override deliberately (the override is logged).force: true is the way past, for when a person has decided the blocker no longer applies. It
works on subtask_update, task_update and task_batch_update, and every override is written to
the activity log naming what was skipped. The web UI asks for confirmation and then sends it.
The distinction that matters is between an agent quietly ignoring a blocker and someone choosing
to override one. Dependencies stay
within one task — a checklist item waiting on something under a different task is a task-level
dependency, and task_update depends_on already models that. Cycles are refused with the loop
spelled out.
Web UI
Everything above is agent-facing. saga-web puts the same database in a browser — for the times
when reviewing a spec an agent just wrote, or fixing one field by hand, is faster than another prompt.
npx -p saga-mcp saga-web ./.tracker.db --openOr against a database you already point your MCP server at:
saga-web --db ~/saga/central.tracker.db --port 8080Option | Default | Description |
|
| Database to open. A positional path works too. |
| first free from | Omit it and saga-web takes the first free port, so one instance per project just works. |
|
| Bind address. Local-only by default. |
| off | Serve the UI with every editing control removed. |
| off | Open the UI in your default browser. |
What you get:
Overview — stats, per-epic progress, blocked and overdue tasks
Board — kanban across the five task statuses; drag a card to change its status
Epics — the full Epic → Task → Subtask tree, which is the fastest way to review a spec an agent just wrote
Notes and Activity — decisions and the complete change history
Archived section — archived epics collapse below a divider, with a "show archived (N)" toggle
Task drawer — edit any field, comment, remove or restore a comment, lock the description, drag subtasks into order, and set which subtasks wait on which. Each subtask has one control carrying its whole state (todo / in progress / done, or blocked), and the drawer resizes by dragging its edge
Project switcher — every project in the database, so one central
.tracker.dbcovers all your repos; every tab, including Activity, is scoped to the selected projectShareable, refreshable URLs — the open project, tab and task live in the address bar, so a browser refresh puts you back where you were and back/forward move between tasks. A ⟳ button in the task drawer re-reads that task without a page reload, for picking up what an agent just wrote
Writes from the UI call the same handlers the MCP tools do, so edits you make by hand are
validated identically and land in the same activity log as the agent's — an agent calling
tracker_dashboard after you fix something sees the fix and how it happened.
A few deliberate limits: it binds to 127.0.0.1 unless you ask otherwise, it has no
authentication (don't put it on a shared network), and it will not create a database — point it
at one your MCP server already uses. Separate .tracker.db files are not yet aggregated into
one view; a single database with multiple projects is.
How It Works
saga-mcp stores everything in a single SQLite file (.tracker.db) per project. The database is auto-created on first use with all tables and indexes — no migration step needed.
Hierarchy
Project
└── Epic (feature/workstream)
└── Task (unit of work)
├── Subtask (checklist item)
├── Comment (discussion thread)
└── Dependencies (blocked by other tasks)Task Dependencies
Tasks can depend on other tasks. When you set depends_on: [2, 3] on a task:
The task is auto-blocked if any dependency isn't
doneWhen a dependency is marked
done, downstream tasks are re-evaluatedIf all dependencies are met, the blocked task auto-unblocks to
todo
Note Types
Notes replace scattered markdown files. Each note has a type:
Type | Use case |
| Free-form notes |
| Architecture/design decisions |
| Conversation context for future sessions |
| Meeting notes |
| Technical details, specs |
| Blockers and issues |
| Progress updates |
| Release notes |
Activity Log
Every create, update, and delete is automatically recorded:
{
"summary": "Task 'Fix CORS issue' status: blocked -> done",
"action": "status_changed",
"entity_type": "task",
"entity_id": 15,
"field_name": "status",
"old_value": "blocked",
"new_value": "done",
"created_at": "2026-02-21T18:30:00"
}Privacy Policy
saga-mcp is a fully local, offline tool. It does not:
Collect any user data
Send any data to external servers
Require internet access after installation
Use analytics, telemetry, or tracking of any kind
All data is stored exclusively in the local SQLite file specified by DB_PATH. You own your data completely. Uninstalling saga-mcp and deleting the .tracker.db file removes all traces.
For questions about privacy, open an issue at https://github.com/spranab/saga-mcp/issues.
Development
git clone https://github.com/spranab/saga-mcp.git
cd saga-mcp
npm install
npm run build
DB_PATH=./test.db npm start
# the web UI against the same database
node dist/web/index.js ./test.db --open
npm test # unit and integration, ~140 tests, no network
npm run e2e # release gate: packs a tarball, installs it, drives the real binariesReleasing
Publishing to npm is irreversible — a version number can never be reused — so it is the last step, and it is triggered by publishing a GitHub release, not by pushing a tag.
# 1. bump the version in package.json, manifest.json and server.json, then merge
# 2. tag it. Nothing is published yet.
git tag -a v1.9.0 -m "v1.9.0 — ..." && git push origin v1.9.0
# 3. verify the tagged build: this packs the tarball that would be published
# and drives it end to end, including an upgrade from an older database.
npm run e2e
# 4. publish the release. This fires the publish workflow.
gh release create v1.9.0 --notes-file notes.mdThe workflow re-runs the suite against the tagged commit, refuses a tag that does not match
package.json, refuses a version already on npm, and sends a GitHub pre-release to the next
dist-tag so it never becomes what npm install saga-mcp gives people. A failed publish can be
retried against the same tag with gh workflow run "Publish to npm" -f tag=v1.9.0.
Support
Repository: https://github.com/spranab/saga-mcp
Related projects
Part of a set of agent infrastructure built by one person, meant to be used together:
yantrikdb-mcp — persistent cognitive memory for the same agent: what it learned, not what it planned.
brainstorm-mcp — multi-model debate before you commit a plan to the tracker.
swarmcode — real-time channel between Claude Code instances on different machines.
truenas-mcp — 278 TrueNAS SCALE actions behind one hierarchical tool.
mcpier — self-hosted MCP control plane that keeps API keys off your clients.
License
MIT
Available Tools
38 toolsactivity_logARead-onlyIdempotent
View the activity log showing what changed and when. Useful for understanding recent progress or reviewing what happened since the last session.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | ISO 8601 datetime - show only activity after this time | |
| action | No | Filter by action type | |
| entity_id | No | Filter by specific entity | |
| project_id | No | Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database. | |
| entity_type | No | Filter by entity type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral detail beyond the core purpose; it does not describe ordering, default limits, or result shape, but nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and no filler. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus schema is sufficient for an agent to select and call the tool correctly in most cases. The only notable gap is the absence of an output schema and no description of what each log entry contains, but the core invocation details are covered.
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 high at 83%, so the schema carries most parameter documentation. The description's mention of 'since the last session' gives a useful real-world interpretation of the `since` parameter, but it does not add meaning for the other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('View') and the resource ('the activity log') and adds what the log shows: 'what changed and when.' It does not explicitly differentiate from nearby siblings like tracker_session_diff or tracker_dashboard, so it falls just short of a 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 gives concrete usage context: 'understanding recent progress or reviewing what happened since the last session.' This implies when to use it, but it does not mention when not to use it or point to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_addA
Add a comment to a task. Comments create a chronological discussion thread — useful for leaving breadcrumbs across sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| author | No | Author name (optional) | |
| content | Yes | Comment text | |
| task_id | Yes | Task ID to comment on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false). The description adds context about chronological threading but does not disclose potential side effects like updating task metadata. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, no fluff. 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?
For a simple write tool with 3 parameters and no output schema, the description adequately covers purpose and use case. Could mention the return value or note that comments append to existing thread, but not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear parameter descriptions. The tool description does not add 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 the action 'Add a comment to a task' and elaborates on its purpose as creating a chronological discussion thread for cross-session context. It distinguishes from sibling tools like comment_list and task_create.
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 leaving breadcrumbs across sessions but does not explicitly state when to use this tool versus alternatives like note_save or task_update. No direct guidance on exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_deleteAIdempotent
Remove a comment (soft delete). The row is kept for the audit trail but hidden from comment_list and task_get. Use this to retract a comment that turned out to be wrong or stale. Reversible with comment_restore.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Comment ID to remove | |
| reason | No | Why the comment is being removed (recommended — it stays in the audit trail) | |
| deleted_by | No | Who removed it (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by revealing that the row is retained for the audit trail, is hidden from listing/reading operations, and can be restored. This is exactly the kind of non-obvious behavioral context that annotations alone do not capture.
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 wasted words. The core behavior is front-loaded, followed by the key consequence and the recovery path. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple 3-parameter, no-output-schema tool, the description covers the operation's effect, visibility changes, audit implications, and reversibility. Nothing essential is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters at 100% coverage, so the baseline is 3. The description adds meaningful context for the 'reason' parameter by noting it stays in the audit trail, which deepens the agent's understanding of what to supply and why.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Remove'), a specific resource ('a comment'), and clarifies that this is a soft delete with concrete visibility consequences (hidden from comment_list and task_get). It clearly distinguishes this from comment_add and comment_restore even without exploring schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this to retract a comment that is wrong or stale, and names the recovery alternative ('Reversible with comment_restore'). This gives the agent clear selection criteria between the delete and restore operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_listARead-onlyIdempotent
List comments on a task in chronological order. Comments removed with comment_delete are hidden by default; pass include_deleted to see them with their removal reason.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID | |
| include_deleted | No | Include comments that were removed (soft-deleted). Off by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds non-obvious behavioral detail beyond those annotations: results are chronological, soft-deleted comments are hidden by default, and passing include_deleted reveals them along with their removal reason. This materially improves the agent's understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the action, resource, and ordering; the second explains the conditional flag. Every clause earns its place and the most important information is front-loaded.
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 read-only list tool with two simple parameters, strong annotations, and no output schema, the description is complete. It covers what is listed, the ordering, the default filtering behavior, and the purpose of the optional parameter. There are no critical gaps that would prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining that include_deleted surfaces removed comments 'with their removal reason' and by clarifying the chronological ordering, which gives the agent a better sense of what the output will be. This goes slightly beyond the schema's own parameter 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 specific verb ('List') and resource ('comments on a task'), and adds 'chronological order' to define the scope and output semantics. It is immediately distinguishable from sibling comment tools like comment_add, comment_delete, and comment_restore by its read-oriented action and the explicit reference to comment_delete.
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 establishes the core use case: retrieving comments for a task. It also gives concrete guidance on the include_deleted parameter, explicitly stating that removed comments are hidden by default and explaining when to set the flag. This is sufficient guidance given that no alternative comment-listing sibling exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_restoreAIdempotent
Restore a comment previously removed with comment_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Comment ID to restore |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the key behavioral traits: readOnlyHint=false, destructiveHint=false, and idempotentHint=true. The description adds the useful precondition that the comment must have been removed with comment_delete, which is context beyond the annotations. However, it does not disclose outcomes such as whether the restored comment returns to its original position or any error 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?
The description is a single clear sentence with no filler. The action and precondition are front-loaded, making it immediately scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation with rich annotations and full schema coverage, the description is nearly complete. It could improve slightly by stating what happens after a successful restore or what the response is, but the current combination of schema, annotations, and description is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already states 'Comment ID to restore.' The tool description adds no additional meaning about the parameter beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Restore') and resource ('comment'), and clarifies it applies to comments previously removed with comment_delete. This distinguishes it from comment_delete, comment_add, and comment_list without needing to open the 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?
The description clearly indicates the intended use case: undoing a prior comment_delete. It references the relevant sibling tool and context. It does not explicitly list when not to use the tool, but the precondition is specific enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epic_archiveAIdempotent
Archive or unarchive an epic. Archived epics and their tasks drop out of listings, the dashboard and search unless include_archived is set. For putting finished work out of sight without cancelling it; nothing is deleted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| archived | No | true to archive, false to bring it back |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral effects: archived epics and their tasks drop out of listings, the dashboard, and search unless include_archived is set. It also confirms that no data is deleted, which complements the idempotentHint and destructiveHint annotations without contradicting them.
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 efficiently ordered: the core action comes first, followed by the observable side effects and the intended use case. Every sentence earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with annotations covering idempotence and non-destructiveness, the description is nearly complete: it explains the action, the side effects on visibility, and the non-destructive nature. It does not describe expected return values or permissions, but with no output schema and a simple interface, this is not a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents the archived parameter clearly ('true to archive, false to bring it back'), and the description reinforces this with 'archive or unarchive.' However, the required id parameter has no schema description and the tool description does not explicitly explain that id refers to the epic identifier, leaving a minor gap at 50% 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 uses a specific verb and resource pair, 'archive or unarchive an epic,' and clearly explains the state change. It also distinguishes the operation from deletion by stating 'nothing is deleted,' which removes ambiguity about what the tool does.
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 clear use case: putting finished work out of sight without cancelling it, which implies it should be used instead of destructive deletion or a regular update. It does not explicitly name sibling alternatives or state when not to use it, but the context is strong enough for an agent to make the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epic_createA
Create an epic within a project. Epics group related tasks into a feature or workstream.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Epic name | |
| tags | No | ||
| branch | No | Branch to scope this epic to: "current" = active branch, omit/"" = branch-agnostic. | |
| status | No | planned | |
| priority | No | medium | |
| project_id | Yes | Parent project ID | |
| description | No | Epic description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, destructive, and idempotency hints. The description adds the domain behavior of grouping tasks but does not disclose extra operational details such as whether the project must already exist, how duplicates are handled, or what happens after creation. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and directly states the action and conceptual purpose without fluff. It is well front-loaded, though the second sentence could have provided operational guidance instead of repeating the obvious epic concept.
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 seven parameters and no output schema, and the description only covers the high-level purpose. Required parameters can be inferred, and the schema handles enums and defaults, but the description does not mention the expected return value, prerequisites, or behavior of optional fields. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, and the description adds essentially no parameter-level meaning. It loosely relates 'project' to project_id and 'related tasks' to the epic's purpose, but it does not clarify tags, status, priority, or branch behavior beyond what the schema already provides. The description does not compensate for the undocumented 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 uses a specific verb and resource: 'Create an epic within a project.' It also explains the concept of an epic by stating that epics group related tasks into a feature or workstream, which distinguishes it from sibling tools like epic_list, epic_update, and epic_archive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when creating an epic in a project to group related tasks. It does not explicitly mention alternatives or exclusions, but this is a creation tool and the intended use is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epic_listARead-onlyIdempotent
List epics for a project with task counts and completion stats. Filter by status, priority or branch. Archived epics are hidden unless include_archived is set.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | Git branch filter: "current" = active branch, "" = branch-agnostic only, omit = all. | |
| status | No | ||
| priority | No | ||
| project_id | Yes | Project ID | |
| include_archived | No | Include archived epics and their tasks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral context beyond the annotations by disclosing that archived epics are hidden by default unless include_archived is set, and that task counts and completion stats are included in the response.
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 tight sentences: the first states the core action and return value, the second covers filtering and archived behavior. Every sentence earns its place with no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool, the description covers the purpose, the key filters, the archived default, and the return's analytical value. No output schema exists, but the description sufficiently communicates what the agent will receive. There is no missing critical context needed to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, with status and priority lacking descriptions. The description compensates by identifying these as filters and explaining the archived behavior. The branch parameter's nuanced values ('current', '', omit) are already documented in the schema, so the description need not repeat them.
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 ('List'), a clear resource ('epics for a project'), and the value-add ('task counts and completion stats'). This clearly distinguishes it from sibling tools like project_list, task_list, and the mutation-focused epic_create/epic_update/epic_archive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: listing epics with filtering by status, priority, or branch, and controlling archived visibility. It does not explicitly name alternatives or state when not to use it, but the resource and purpose are unambiguous enough for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epic_updateAIdempotent
Update an epic. Pass only the fields you want to change. Set status to "cancelled" to soft-delete. Pass branch="current" to pin to the active branch, or empty string to clear.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Epic ID | |
| name | No | ||
| tags | No | ||
| branch | No | Branch to scope this epic to: "current" = active branch, "" = clear. | |
| status | No | ||
| priority | No | ||
| sort_order | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it reveals that the update is partial, that setting status to 'cancelled' performs a soft-delete rather than a hard destruction, and that branch scoping can be pinned or cleared. These are exactly the behavioral details an agent needs. The description does not contradict the annotations: destructiveHint=false is consistent with soft-delete.
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 action comes first, then the two non-obvious special behaviors (soft-delete and branch pinning) are stated in compact, actionable form.
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 update tool with eight parameters and no output schema, the description covers the essential invocation semantics: partial updates, soft-delete, and branch scope. It does not state what the response returns, but that is not strictly required to invoke the tool correctly; the key edge cases are documented.
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 general instruction 'Pass only the fields you want to change' adds meaningful semantics to all optional parameters, clarifying that omitted fields are left untouched. The description also explains the special branch values and the special 'cancelled' status beyond the raw schema, which is valuable given only 25% schema description coverage. It does not elaborate on obvious fields like name/tags/priority, but their names and types are self-explanatory.
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?
'Update an epic' names the exact verb and resource, and 'Pass only the fields you want to change' signals PATCH-style partial update rather than full replacement. This also separates it from sibling creation/listing/archiving tools, and the soft-delete and branch behavior add precision.
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 concrete operational conditions: status 'cancelled' is the soft-delete path, and branch accepts either 'current' for active-branch pinning or an empty string to clear. It does not explicitly name sibling alternatives or state when not to use it, but the update-vs-create distinction is clear enough from the verb and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note_deleteADestructiveIdempotent
Delete a note by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=true. Description adds no further behavioral context (e.g., permanence of deletion, soft-delete behavior). Adequate given annotation coverage.
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?
Single sentence with 5 words, no wasted text. However, could be slightly more informative while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one required parameter and no output schema, the description is sufficient. It lacks mention of return value or side effects, but annotations cover the destructive nature.
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 parameter 'id' described as 'Note ID'. Description adds no extra semantics beyond 'by ID'. Baseline score for high 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?
Description clearly states the action 'delete' and the resource 'note' with the method 'by ID'. It is unambiguous and distinct from siblings like note_list, note_save, note_search.
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 vs alternatives (e.g., note_save for updating, or archiving). No exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note_listBRead-onlyIdempotent
List notes with optional filters. Returns notes sorted by most recent first.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by a single tag | |
| limit | No | ||
| note_type | No | ||
| project_id | No | Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database. | |
| related_entity_id | No | ||
| related_entity_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the description only needs to add behavior beyond that. It does add the sort-order behavior and implies a non-error path when no filters are supplied, but it stays silent on how filters combine, what happens on an empty result, and whether the result is truncated at the limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler, the verb and resource are front-loaded, and the second sentence earns its place by disclosing sort ordering. The length is appropriate for a read-only listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, 33% schema coverage, no output schema, and a close sibling (note_search), the description is too thin to fully support correct invocation. An agent is left to guess the semantics of the undocumented filters, how related_entity_id and related_entity_type interact, whether the limit caps the response, and when to prefer note_search over note_list.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (tag and project_id are documented; limit, note_type, related_entity_id, and related_entity_type are not). Since coverage is below 50%, the description must compensate, but it only says 'optional filters' without explaining any parameter's meaning, the relationship between related_entity_id and related_entity_type, or the effect of note_type on results. The description adds no semantic value 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 states a specific verb ('List') and resource ('notes'), and adds useful behavioral detail about ordering ('sorted by most recent first'). It is clear on its own, but it does not differentiate itself from the note_search sibling, which is a meaningful gap given that both tools operate on notes.
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 word 'List' implicitly signals a browsing/listing use case as opposed to the query-style behavior implied by the sibling name note_search, but the description never states this trade-off or mentions alternatives. There are no explicit when-to-use or when-not-to-use instructions, so the agent must infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note_saveA
Create or update a note: decisions, context, progress, meetings, blockers, technical detail, releases. With id, updates; without, creates.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Note ID (omit to create new) | |
| tags | No | ||
| title | Yes | Note title | |
| content | Yes | Full note content (markdown supported) | |
| note_type | No | general | |
| related_entity_id | No | ID of the related entity | |
| related_entity_type | No | Link note to an entity |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key state-dependent behavior that passing an id updates an existing note while omitting it creates a new one. The annotations already mark readOnly=false, and the description adds meaningful context beyond that without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence carries the core operation, the create/update distinction, and the supported content categories with no filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema covers required title/content, optional tags, note_type, and entity linking, while the description covers the core save behavior and the id-based update condition. The definition is sufficient for a straightforward note-save tool even though it does not describe the return value.
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 71%, so the schema already explains most parameters. The description reinforces the id semantics and expands the note_type enum into practical categories like decisions, meetings, blockers, and releases, but it adds nothing about tags or related_entity fields.
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 the exact operation, 'Create or update a note', and lists the content categories it supports. This clearly distinguishes it from sibling read, search, list, and delete note tools without needing to open their schemas.
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 id-based behavior is explicit: 'With id, updates; without, creates,' which tells the agent exactly how to choose the create versus update path. It does not explicitly name sibling alternatives, but the mutating verb and content scoping make its role as the write tool for notes evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note_searchBRead-onlyIdempotent
Search across note titles and content by keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Search keywords | |
| note_type | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, covering the safety profile. The description adds the scope ('titles and content') but does not disclose details like search behavior (e.g., fuzzy matching) or performance considerations. With annotations present, this is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence of 8 words, with no extraneous information. It efficiently communicates the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the three parameters (one enum), no output schema, and no description of return value or behavior, the description is incomplete. It fails to inform the agent about filtering by note_type, the default limit, or the structure of search results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (33%), with only 'query' having a description ('Search keywords'). The other parameters, note_type and limit, lack descriptions in both schema and tool description. The description does not explain how note_type filters results or that limit defaults to 20, so it adds minimal 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 clearly states the tool's function: searching across note titles and content by keyword. The verb 'Search' and resource 'note titles and content' are specific, distinguishing it from sibling tools like note_list or note_save.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool instead of alternatives like note_list, nor any conditions or exclusions. The agent receives no help in deciding between similar note-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_createB
Create a new project. Projects are the top-level container for all work.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name | |
| tags | No | Tags for categorization | |
| status | No | Project status | active |
| description | No | Project description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-read-only, non-destructive operation. The description adds that projects are top-level containers, but does not disclose side effects, authentication needs, or rate limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences that are front-loaded with the action and provide a brief context. No unnecessary words 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?
Despite good annotations and schema, the description omits return value information (no output schema) and does not describe default behaviors for optional parameters like status. A more complete description would mention created project 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?
Input schema coverage is 100% with descriptions for all parameters. The description adds no additional parameter information beyond the schema, so baseline of 3 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 clearly states the verb 'create' and the resource 'projects', and explains that projects are top-level containers. This distinguishes it from siblings like project_list and project_update.
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 project_update or epic_create. The description does not mention prerequisites, context, 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.
project_listARead-onlyIdempotent
List all projects with epic/task counts and completion percentages. Optionally filter by status.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations confirm it's read-only and idempotent; description adds that it returns counts and percentages, providing useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence that front-loads the key purpose and optional filter.
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?
No output schema but description explains return values (counts, percentages). Lacks pagination details, but sufficient for a simple list 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?
Single parameter status is fully described in schema; description only restates the filter option without adding new meaning.
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 lists projects with epic/task counts and completion percentages, distinguishing it from other list tools like epic_list or task_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions optional filtering by status, but lacks explicit guidance on when to use vs alternatives; however, the purpose is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_updateAIdempotent
Update a project. Pass only the fields you want to change. Set status to "archived" to soft-delete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Project ID | |
| name | No | ||
| tags | No | ||
| status | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only and not destructive, with idempotency. The description adds value by disclosing the soft-delete behavior (setting status to 'archived') and the partial update semantics, which go beyond what annotations provide. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprised of two concise and front-loaded sentences, delivering key information without extraneous content. Every sentence adds value: the first states the primary action and partial update, the second explains the soft-delete use of the 'status' parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 parameters, partial update, soft-delete) and the absence of an output schema, the description covers the essential behavioral aspects. It is missing details about response format, error handling, or authentication, but the provided information is sufficient for basic correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (20%), with only 'id' described. The description provides high-level guidance on partial updates and the effect of the 'status' parameter (soft-delete), but it does not elaborate on other parameters like 'name', 'description', or 'tags'. This partially compensates but insufficiently addresses the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update a project' as the primary action, distinguishing it from creation or listing tools. It also specifies the partial update behavior and the special effect of setting status to 'archived' for soft-deletion, leaving no ambiguity about the tool's purpose.
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 advises to 'Pass only the fields you want to change,' implying partial updates, and explains soft-delete via status. However, it lacks explicit guidance on when to use this tool versus alternatives like project_create (for new projects) or other sibling tools, and does not mention prerequisites or restrictions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subtask_createA
Create subtasks (checklist items) for a task. Pass titles as an array — one string per subtask — and each becomes its own record. New subtasks are appended after any that exist.
| Name | Required | Description | Default |
|---|---|---|---|
| titles | Yes | Subtask titles, one per array item — e.g. ["Write it", "Test it"]. Always an array, even for a single subtask. | |
| task_id | Yes | Parent task | |
| depends_on | No | Siblings each new subtask waits on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses two useful behavioral traits: each title becomes its own record and new subtasks are appended after existing ones. This gives the agent a concrete expectation of side effects; no contradiction with the annotations is present.
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, each contributing distinct information: what the tool creates, how titles map to records, and where the records are placed. The key verb and resource are front-loaded with 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 3-parameter tool with fully described schema, the core behavior and placement semantics are covered. It does not describe the return value or the exact interaction of depends_on with multiple new subtasks, but these are relatively minor given the schema coverage and the absence of nested objects or enums.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the titles array-to-record mapping and append behavior, which the schema alone does not fully convey. It appropriately leaves task_id and depends_on details to the schema, which already documents them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create subtasks (checklist items) for a task.' This clearly differentiates it from the sibling tools subtask_update, subtask_reorder, and subtask_delete, and from task_create, by saying it creates child checklist records rather than tasks or updated subtasks.
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 communicates the clear usage context: add checklist items to an existing task, with titles passed as an array. It does not explicitly state when not to use it or name alternative tools, so it falls short of the strongest routing guidance, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subtask_deleteCDestructiveIdempotent
Delete one or more subtasks. Accepts a single ID or array of IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Subtask IDs to delete — e.g. [4, 7]. Always an array, even for one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations (destructiveHint=true, readOnlyHint=false, idempotentHint=true) already cover the core safety profile. The description adds no side-effect context such as permanence, cascade behavior, or error behavior, and its only extra behavioral claim—accepting a single ID—is false.
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 first sentence is short and front-loaded, but the second sentence does not earn its place: it repeats schema information and introduces an inaccuracy. A clean one-sentence description that just said 'Delete one or more subtasks by ID' would be better.
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 one-parameter delete with no output schema, the core requirements are mostly covered by the schema, but the description introduces a conflicting input format and omits any return or error semantics. An agent cannot reliably know what happens after deletion.
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 fully documents ids at 100% coverage and explicitly says 'Always an array, even for one.' The description directly contradicts this by saying it accepts a single ID, which could cause an agent to send an integer instead of an array. This is actively harmful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and target: 'Delete one or more subtasks.' This tells an agent exactly what the tool does and is enough to distinguish it from task_delete, note_delete, and comment_delete without inspecting the 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?
No guidance is given about when to prefer this tool over alternatives such as task_delete, subtask_update, or subtask_reorder. There are no exclusions, prerequisites, or context cues beyond what the name implies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subtask_reorderAIdempotent
Reorder a task subtask list. Pass IDs in the order you want; any omitted keep their relative order at the end.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Parent task | |
| ordered_ids | Yes | Subtask IDs, in order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it idempotent and non-destructive; the description adds the useful behavior that omitted IDs keep their relative order at the end. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences that front-load the action, then clarify the only non-obvious detail. 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 simple two-parameter mutation, this covers invocation semantics well. It does not discuss edge cases like duplicate or foreign IDs, or return values, but these are not critical for selecting 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 coverage is 100%, but the description adds the key array-order rule and explicitly instructs the caller to pass IDs in desired order, which is more than the schema's 'in order' note.
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 a specific verb and resource: 'Reorder a task subtask list'. This clearly differentiates it from sibling subtask_create/update/delete 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 use case is implied by 'reorder', and the partial-order semantics tell the agent how to supply IDs, but it never states when not to use it or points to an alternative for moving or updating subtasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subtask_updateAIdempotent
Update a subtask title, status or position. depends_on sets what it waits on, blocks the inverse; both replace the set, [] clears. Starting or finishing one with unmet prerequisites needs force.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| force | No | Proceed despite unmet prerequisites. Only when a human decided the blocker no longer applies — never on your own initiative. Logged. | |
| title | No | ||
| blocks | No | Siblings that wait on this one — inverse of depends_on | |
| status | No | ||
| depends_on | No | Siblings this one waits on (replaces the set) | |
| sort_order | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond the annotations: it explains that depends_on and blocks replace the existing set, that [] clears them, and that transitioning to started/finished with unmet prerequisites requires force. This aligns with the idempotentHint and does not contradict the readOnlyHint or destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences are front-loaded with the core update purpose and packed with dependency and force semantics. The phrase 'blocks the inverse' is terse but economical; it earns its place without padding.
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 mutation tool with no output schema, the description covers the main update targets, set-replacement behavior for both dependency arrays, clearing via [], and the force condition. It is slightly incomplete because it does not name sort_order explicitly or clarify the division of labor with subtask_reorder, but the remaining gaps are small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 43% schema coverage, the description compensates by explaining the semantics of depends_on/blocks replacement and the force requirement, and by summarizing title/status/position. However, it refers to 'position' rather than the actual sort_order property and leaves force policy details to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb and resource ('Update a subtask') and enumerates the mutable aspects: title, status, position, plus depends_on/blocks. It does not explicitly distinguish itself from the sibling subtask_reorder, which also concerns position, and 'position' is not the schema's parameter name (sort_order).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to call this tool versus alternatives such as subtask_create, subtask_reorder, subtask_delete, or task_update. The only conditional guidance is about force for unmet prerequisites, which is a behavior rule rather than a usage-selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_batch_updateAIdempotent
Update multiple tasks at once. Useful for changing status of several tasks (e.g., mark 3 tasks as done) or reassigning tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Task IDs to update | |
| force | No | Proceed despite unmet prerequisites. Only when a human decided the blocker no longer applies — never on your own initiative. Logged. | |
| status | No | ||
| priority | No | ||
| assigned_to | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context beyond purpose, such as typical field changes, but does not disclose atomicity, partial-failure behavior, or any side effects. With annotations present, this is acceptable but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. The core action 'Update multiple tasks at once' is front-loaded, and the examples are compact and illustrative. It earns a top score for efficiency and structure.
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 batch update tool with five parameters and no output schema, the description covers the primary use case but omits behavioral details like whether the update is atomic, what happens if some IDs are invalid, and how force interacts with the batch operation. The idempotent hint and force's schema description help, but the description alone leaves meaningful 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 only 40% (ids and force have descriptions; status, priority, assigned_to do not). The description compensates somewhat by indicating 'changing status' and 'reassigning tasks', which maps to status and assigned_to. It does not mention priority or the nuanced force semantics, though force is already documented in the schema. Partial compensation earns a mid-range score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Update multiple tasks at once.' It clearly differentiates from sibling task_update by emphasizing the batch aspect, and provides concrete examples of use cases (status changes, reassignments). This is unambiguous and immediately disambiguates from the singular update 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 clear context for when to use the tool: when several tasks need status changes or reassignment. It does not explicitly name task_update as the alternative for single tasks, but the 'multiple tasks at once' phrasing strongly implies the boundary. The guidance is effective though lacks an explicit when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_createA
Create a task within an epic. Tasks are the primary unit of work.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | Task title | |
| status | No | todo | |
| epic_id | Yes | Parent epic ID | |
| due_date | No | Due date (YYYY-MM-DD) | |
| priority | No | medium | |
| depends_on | No | Task IDs this task depends on | |
| source_ref | No | Link to source code location | |
| assigned_to | No | Assignee name | |
| description | No | Task description | |
| estimated_hours | No | Estimated hours |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent operation, and the description confirms the core behavior by stating it creates a task. It adds the parent-scope detail ('within an epic') but does not explain side effects, response behavior, or failure when an epic_id is invalid. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action front-loaded before context. Every phrase earns its place, and there is no redundant restatement of the parameter schema or annotations.
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 11 parameters, a nested source_ref object, and no output schema, the description is too sparse. It does not state what a successful creation returns, how to handle an invalid or missing epic_id, or which optional fields are commonly relevant when creating a task. The schema covers parameter details, but important behavioral and return context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, so most parameters are already documented in the schema. The description adds only the 'within an epic' context, which maps to epic_id but does not enrich the meaning of the other 10 parameters beyond their existing 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 starts with a specific verb and resource: 'Create a task within an epic.' This clearly separates it from task_update, task_batch_update, and subtask_create. The extra sentence 'Tasks are the primary unit of work' reinforces the tool's role and scope.
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 useful context that tasks belong to an epic, and 'primary unit of work' hints at top-level task creation. However, it never explicitly says when to use this instead of subtask_create, task_update, or other related tools. There are no clear exclusions or alternatives, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_deleteAIdempotent
Remove a task (soft delete). Only 'todo' tasks — anything further along has history worth keeping. The row is kept and hidden from listings; task_restore brings it back.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| reason | No | Why it is being removed (kept in the audit trail) | |
| deleted_by | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the soft-delete behavior: the row is kept, hidden from listings, and restorable via task_restore. This directly explains why destructiveHint is false and adds operational context the annotations don't provide.
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 front-load the core meaning, then add the scope restriction and the restore behavior. Each sentence contributes new, non-redundant 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 mutation tool with no output schema, the description covers what mutates, what is preserved, the visibility effect, and the recovery path. The annotations already cover write/read-only and idempotence, so nothing essential 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 coverage is only 33%, so the description should compensate for undocumented parameters. It does not explain `deleted_by` or expand on `id`, and while `reason` has a schema description, the tool description adds no parameter-level meaning.
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 the exact action and resource ('Remove a task') and immediately clarifies it is a soft delete, which differentiates it from permanent-delete tools. It also names the inverse tool (task_restore), helping an agent distinguish this from restoration and other delete siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly scopes usage to 'todo' tasks and warns that further-along tasks should not be removed because their history matters. It does not name an explicit alternative tool for non-todo tasks, but the boundary is clear enough that an agent can decide against calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_getARead-onlyIdempotent
Get a single task with full details including all subtasks, related notes, comments, and dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and idempotentHint. The description adds value by specifying the full scope of returned data (subtasks, notes, comments, dependencies), providing behavioral context beyond the safety profile.
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?
Single sentence that fronts the purpose and efficiently lists included details. No superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with one parameter and no output schema, the description adequately explains the return scope. Could optionally mention error conditions or permissions, but annotations cover safety and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'id', which is described as 'Task ID'. The description does not add further meaning or constraints beyond the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('a single task'), and clearly outlines the included details (subtasks, notes, comments, dependencies). This effectively distinguishes it from sibling tools like task_list or task_create.
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 retrieving a single task by ID, but does not explicitly state when to use it over alternatives like task_list. No exclusions or when-not scenarios are mentioned, relying on the user or agent to infer context from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_listARead-onlyIdempotent
List tasks; without epic_id, across all epics. Includes subtask and dependency counts. Rows are compact: nulls and metadata dropped, descriptions cut to 120 chars (task_get for full). branch="current" restricts to the active git branch.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag | |
| limit | No | Max results | |
| branch | No | Git branch filter: "current" = active branch, "" = branch-agnostic only, omit = all. | |
| status | No | ||
| epic_id | No | Filter by epic (omit for all tasks) | |
| sort_by | No | Sort order: priority (critical first), created (newest first), due_date (earliest first), status (actionable first) | priority |
| priority | No | ||
| project_id | No | Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database. | |
| assigned_to | No | Filter by assignee | |
| include_deleted | No | Include removed tasks. | |
| include_archived | No | Include archived epics and their tasks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description adds useful output-shape details: subtask/dependency counts, compact rows, dropped nulls/metadata, 120-char description truncation, and branch scoping. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each carrying new information: default scope, row compactness/truncation, and branch special value. The key scoping statement is front-loaded 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 read-only list tool with 11 well-described optional parameters and safety annotations, this is nearly complete. There is no output schema, so a bit more explicit return-shape detail would be ideal, but the compact-row and count information gives enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 82%, and the schema already explains branch semantics, sorting, project scoping, and defaults. The description adds little beyond restating the epic-scope behavior, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List tasks') and immediately clarifies scope: all epics when epic_id is omitted. It distinguishes itself from the sibling task_get by noting that rows are compact/truncated and pointing to task_get for full descriptions.
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 a clear pointer to task_get when full descriptions are needed, and explains the special branch='current' behavior. It does not enumerate exclusions, but for a read-only list with no required parameters the main alternatives are implicit and mostly covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_lock_descriptionAIdempotent
Lock or unlock a task's description. While locked, task_update refuses to change it — a guard against rewriting the spec when you meant to add a comment. Everything else stays editable. Unlock only when a human asks, never to get past the refusal.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID | |
| locked | No | true to lock, false to unlock |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses an important behavioral consequence beyond annotations: while locked, task_update refuses to change the description, while everything else remains editable. It also surfaces the safety-policy boundary about unlocking only on human request, which is valuable for agent behavior. No contradiction with idempotentHint=true or destructiveHint=false.
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 tightly written sentences carry the full behavioral contract: what the tool does, why it exists, and when unlocking is permitted. 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 simple two-parameter tool with no output schema, the description fully covers the operational effect, the guardrail rationale, and the unlock policy. The annotations already cover idempotence and non-destructiveness, so nothing essential 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%, and both id and locked are already well documented inline. The description does not add new meaning to the parameters beyond restating the lock/unlock concept, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb-resource pair: "Lock or unlock a task's description." It explains the practical effect (task_update refuses to change it) and distinguishes the tool from task_update, making its role in the task workflow unmistakable.
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 clear context for when locking is appropriate: "a guard against rewriting the spec when you meant to add a comment." It also gives an explicit rule for unlocking: only when a human asks, never to bypass the refusal. It does not name an alternative tool for adding comments, but the intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_restoreAIdempotent
Restore a task removed with task_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the key safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true), so the description need not restate those. It adds the useful inverse relation to task_delete, but does not disclose consequences such as whether subtasks/comments are restored, error behavior for missing ids, or permission requirements.
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 front-loaded sentence, 'Restore a task removed with task_delete,' contains the action, resource, and precondition with zero filler. No restructuring or trimming is needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required id, no nested objects, no output schema) and the annotations covering idempotency and non-destructiveness, the description is nearly complete. It lacks only finer behavioral details like return value or effects on dependent objects, which are minor for this operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only 'id: integer' with no description, and the description bridges that gap by implying the id identifies a task that was removed with task_delete. For a single-parameter tool this is sufficient to infer the parameter's meaning, though it does not spell out the id semantics explicitly.
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 immediately states a clear verb and object: 'Restore a task...'. It also names the sibling operation it reverses ('removed with task_delete'), which distinguishes it from other restore/crud tools like comment_restore without requiring schema inspection.
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 phrase 'removed with task_delete' gives a clear precondition and when to use the tool: to undo a prior task_delete. It does not explicitly enumerate alternatives or exclusion cases, but the task/comment split among siblings makes the intended use unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_updateBIdempotent
Update a task; pass only fields to change. Completing it while subtasks are unfinished is refused unless force is set.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Task ID | |
| tags | No | ||
| force | No | Proceed despite unmet prerequisites. Only when a human decided the blocker no longer applies — never on your own initiative. Logged. | |
| title | No | ||
| status | No | ||
| due_date | No | ||
| priority | No | ||
| depends_on | No | Task IDs this task depends on (replaces existing) | |
| sort_order | No | ||
| source_ref | No | Link to source code location | |
| assigned_to | No | ||
| description | No | ||
| actual_hours | No | ||
| estimated_hours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-destructive, idempotent operation. The description adds valuable non-obvious behavior: completing a task with unfinished subtasks is refused unless force is set. This goes beyond the annotations and helps the agent anticipate a blocking condition without contradicting the structured metadata.
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 the core purpose. 'Update a task' is somewhat redundant with the tool name, but the partial-update instruction and the subtask-force warning are each essential and earn their place. It is concise with minimal 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 14 parameters and no output schema, this description is notably incomplete. It captures the key update behavior and one refusal rule, but it does not explain return values, error behaviors, prerequisites such as needing an existing task id, or how this relates to sibling update tools. The agent would need to infer or discover important context elsewhere.
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 29%, and the tool description does not compensate for the many undocumented parameters. The phrase 'pass only fields to change' adds useful partial-update semantics, but it does not clarify fields like due_date format, assigned_to semantics, status transitions, or sort_order behavior. The description leans on mostly self-explanatory parameter names rather than providing needed meaning.
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 ('Update a task') and adds the partial-update nuance 'pass only fields to change.' It is clear but does not explicitly distinguish itself from siblings like task_batch_update or task_create, so it falls just short of full sibling differentiation.
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 updating a single task and changing only certain fields, but it never states when to prefer this over task_create, task_batch_update, or subtask_update. No exclusions or alternative conditions are provided, so the agent is left to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_applyA
Apply a template to create tasks in an epic. Replaces {variable} placeholders with provided values.
| Name | Required | Description | Default |
|---|---|---|---|
| epic_id | Yes | Epic to create tasks in | |
| variables | No | Key-value pairs for {variable} substitution (e.g., {"feature": "auth"}) | |
| template_id | Yes | Template ID to apply |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive mutation. The description adds specific behavior—placeholder substitution and task creation—that enriches the agent's understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core action and key behavior (placeholder replacement). No extraneous words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 params, no output schema, and nested objects, the description covers purpose and substitution behavior. Missing details like error handling or permissions are acceptable given context signals, though a note on idempotency would improve 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?
Schema coverage is 100% with clear descriptions for all three parameters. The description adds no new param-level detail beyond reinforcing the variable substitution mechanism, so baseline 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 applies a template to create tasks in an epic. This verb-object structure distinguishes it from siblings like template_create, task_create, or epic_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for converting a template into tasks within an epic, but does not explicitly contrast with alternatives like manually creating tasks or using other template tools. No when-not or exclusion guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_createA
Create a reusable task template. Templates define a set of tasks that can be instantiated into any epic. Use {variable} placeholders for dynamic values.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Template name (must be unique) | |
| tasks | Yes | Task definitions. Use {variable} for placeholders. | |
| description | No | Template description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is not read-only and not destructive. The description adds value by mentioning {variable} placeholders, which is a behavioral detail not in annotations. No contradictions observed.
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-loading the core purpose and key feature (placeholders). Every word earns its place with no 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?
Given no output schema, the description adequately covers the tool's purpose and usage. It hints at the integration with epics (template_apply). Could be improved by mentioning that the name must be unique (schema does), but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% description coverage, so baseline is 3. The description reinforces the use of {variable} placeholders across parameters, adding context about dynamic values beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Create') and resource ('reusable task template'). It distinguishes from sibling tools like template_apply and template_list by specifying that templates are for reuse and can be instantiated into epics.
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 explains the concept of templates and placeholders, implying usage for defining reusable task sets. It provides context but lacks explicit guidance on when not to use or alternatives (e.g., comparing to subtask_create or task_create).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_deleteADestructiveIdempotent
Delete a task template.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Template ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (destructiveHint=true) but adds no additional behavioral context beyond what annotations already convey.
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, complete sentence with no wasted words, achieving maximum conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one parameter and rich annotations, the description is adequate, though it could mention return values or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description does not add meaning beyond the schema's parameter description (Template ID). Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Delete a task template." uses a specific verb (Delete) and a clear resource (task template), distinguishing it from sibling tools like template_create or template_apply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as when not to delete a template that might be in use, or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
template_listARead-onlyIdempotent
List all available task templates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral details beyond what annotations already provide (readOnlyHint, etc.). It does not mention scope or return format.
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?
Single, clear sentence with no extraneous 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 list tool with no parameters and full annotations, the description is entirely 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?
No parameters exist; schema coverage is 100%. Description adds no parameter info, but none needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list') and resource ('task templates'), distinguishing it from sibling tools like template_create or template_delete.
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 vs alternatives like epc_list or project_list. However, the tool's simplicity makes it obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_dashboardARead-onlyIdempotent
Full project overview in one call: project, epics with task counts, stats, blocked and overdue tasks, recent activity and notes. Best first call when starting work. branch="current" scopes to the active git branch.
| Name | Required | Description | Default |
|---|---|---|---|
| branch | No | Scope to a git branch: "current" = active branch, "" = branch-agnostic only, omit = all. | |
| project_id | No | Project ID. Omit if the database holds one project, or if SAGA_PROJECT is set. With several projects and neither, the first is used and the rest are listed under other_projects. | |
| include_archived | No | Include archived epics and their tasks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by enumerating the aggregate contents returned and framing it as a lightweight 'one call' overview, which is useful beyond the annotations alone.
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 deliver a complete picture with no filler. The main value proposition is front-loaded, the contents are listed compactly, and the usage tip and branch note are placed at the end without bloating the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately takes on the job of describing what the tool returns, and it lists the main sections clearly. It is sufficient for a read-only dashboard with optional parameters, though a slightly more explicit note about the overall response shape would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description only restates the branch='current' behavior already present in the schema, adding no genuinely new semantic information beyond the parameter 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 clearly identifies the resource ('full project overview') and the specific data included: project, epics with task counts, stats, blocked/overdue tasks, recent activity, and notes. This distinguishes it from more granular siblings like task_list, project_list, and activity_log by framing it as an aggregated 'one call' dashboard.
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 situational guidance: 'Best first call when starting work.' This tells an agent when to prefer this tool, though it does not explicitly name alternatives or state when NOT to use it, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_exportARead-onlyIdempotent
Export a full project as nested JSON. Includes all epics, tasks, subtasks, comments, dependencies, and related notes. Useful for backup, migration, or sharing.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Project ID to export (omit if only one project exists) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, indicating a safe, idempotent read operation. The description adds valuable context about the export's content (all entities included), going beyond the structured data. It does not describe potential size limits or rate limits, but given the annotations, the bar is lower.
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 concise sentences, each adding value. The main action is front-loaded, and the supporting sentences clarify scope and use cases without redundancy. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, read-only, idempotent), the description is adequate. It specifies output format and included content, which compensates for the lack of an output schema. However, it could mention intended output structure or size considerations 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?
Schema description coverage is 100%: the only parameter, project_id, is fully described in the schema. The description adds no additional parameter information. Per guidelines, with high coverage, baseline is 3.
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 (export), the resource (full project), and the format (nested JSON), with a detailed list of included elements. This specificity implicitly distinguishes it from sibling tools like tracker_import or tracker_session_diff, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives usage context: 'Useful for backup, migration, or sharing.' This provides clear context for when to use the tool, though it does not list alternatives or when not to use it, which would earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_importA
Import a project from JSON (matching tracker_export format). Creates all entities with new IDs and remaps references. Uses a transaction for atomicity.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Full export JSON object from tracker_export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, description reveals it creates new IDs, remaps references, and uses a transaction for atomicity. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and single parameter, description adequately covers behavior. Could mention prerequisites (e.g., valid JSON format) but 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 coverage is 100% and parameter description already states it expects a full export JSON. Description adds no new parameter-level meaning beyond that.
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 the tool imports a project from JSON, matching the tracker_export format. This distinguishes it from siblings like tracker_export and project_create.
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?
Implies usage when importing a previously exported project, but lacks explicit guidance on when not to use or alternatives. Context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_initAIdempotent
Initialize the tracker for a project. If the database is empty, creates a project with the given name. If a project already exists, returns its info.
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | No | Name for a new project (only used if DB is empty) | |
| project_description | No | Description for the new project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (idempotentHint=true) are supported by description's conditional logic. Description adds context beyond annotations: explains that creation only happens if DB is empty, and existing projects return info. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose, conditional behavior, and parameter usage. No redundancy, front-loaded 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?
Given simple parameters, no output schema, and good annotations, the description covers both scenarios comprehensively. No missing information for an agent to decide or invoke 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% with clear parameter descriptions. Description restates that project_name is only used if DB empty, but adds no new semantics beyond schema. Adequate but no extra value.
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 the tool initializes a tracker for a project, with explicit conditional behavior: creates if DB empty, returns info if exists. Distinguishes from siblings like project_create and project_get by handling initialization logic.
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 clear context on when to use (initializing a tracker). Does not explicitly exclude alternative tools, but the conditional behavior makes usage clear. Among siblings, it's distinct from tracker_dashboard, etc.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_searchARead-onlyIdempotent
Search projects, epics, tasks and notes by keyword. Returns categorized previews — use task_get or note_list for full text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results per entity type | |
| query | Yes | Search keywords | |
| branch | No | Git branch filter: "current" = active branch, "" = branch-agnostic only, omit = all. | |
| project_id | No | Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database. | |
| entity_types | No | Limit search to specific entity types (omit for all) | |
| include_archived | No | Include archived epics and their tasks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses that results are categorized previews rather than full content, which is a meaningful behavioral trait. It also sets the expectation that full text must be fetched through other tools, adding transparency about the tool's scope.
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 carry all essential information: the action and scope in the first sentence, and the output type plus routing alternatives in the second. Every clause earns its place, and the most decision-relevant details are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description gives enough shape by saying results are categorized previews and by pointing to full-text alternatives. Combined with fully documented parameters and safe read-only annotations, this is a workable definition, though the exact preview structure is left underspecified.
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 all six parameters including `limit`, `branch`, `project_id`, `entity_types`, and `include_archived` are already documented there. The description only reinforces the query-keyword behavior and adds no new parameter-level 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 clearly identifies a search behavior ('Search projects, epics, tasks and notes by keyword') and a specific output type ('categorized previews'), so the tool's core purpose is unambiguous. It does not explicitly distinguish itself from the sibling `note_search`, which also covers note searching, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use this for keyword search across multiple entity types when previews are sufficient. It also gives an explicit when-not and alternative: 'use task_get or note_list for full text.' It does not address alternatives like dedicated note or project search tools, but the guidance provided is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tracker_session_diffARead-onlyIdempotent
Show what changed since a given timestamp. Returns aggregated summary with counts by action and entity type, plus highlights of key changes. Call this at the start of a session to understand what happened since the last one.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | ISO 8601 datetime — show changes after this time (e.g. "2026-02-21T15:00:00") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and idempotent. The description adds useful behavioral details: aggregated summary with counts and highlights, no side effects mentioned. No contradiction.
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 concise sentences. Purpose, return format, and usage advice are front-loaded with no 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?
Given no output schema, the description fully explains what is returned. Parameter is well-covered. The tool's purpose and context (session start) are clear.
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 already provides full description for the only parameter (ISO 8601 datetime). The description does not add extra semantic nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns changes since a timestamp, with specific outputs (counts, highlights). It distinguishes itself from sibling tools like activity_log by focusing on session-level summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises calling at session start to understand previous changes. Does not list alternatives but context is clear enough for most agents.
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.
22 tool updates
v1.10.0- Changed
activity_log1 field changed- added
Input schema / properties / project_idAdded value: +{ + "description": "Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database.", + "type": "integer" +}
- Added
comment_delete - Changed
comment_list1 field changed- added
Input schema / properties / include_deletedAdded value: +{ + "default": false, + "description": "Include comments that were removed (soft-deleted). Off by default.", + "type": "boolean" +}
- Added
comment_restore - Added
epic_archive - Changed
epic_create1 field changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Git branch this epic is scoped to. Pass \"current\" to auto-detect from the repo. Omit or pass empty string for a branch-agnostic (global) epic."New value: +"Branch to scope this epic to: \"current\" = active branch, omit/\"\" = branch-agnostic."
- Changed
epic_list2 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Filter by git branch. Pass \"current\" to auto-detect; pass empty string to list only branch-agnostic epics. Omit to list all."New value: +"Git branch filter: \"current\" = active branch, \"\" = branch-agnostic only, omit = all." - added
Input schema / properties / include_archivedAdded value: +{ + "default": false, + "description": "Include archived epics and their tasks.", + "type": "boolean" +}
- Changed
epic_update1 field changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Git branch this epic is scoped to. Pass \"current\" to auto-detect; pass empty string to clear (branch-agnostic)."New value: +"Branch to scope this epic to: \"current\" = active branch, \"\" = clear."
- Changed
note_list1 field changed- added
Input schema / properties / project_idAdded value: +{ + "description": "Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database.", + "type": "integer" +}
- Changed
subtask_create6 fields changed- added
Input schema / properties / depends_onAdded value: +{ + "description": "Siblings each new subtask waits on", + "items": { + "type": "integer" + }, + "type": "array" +} - changed
Input schema / properties / task_id / descriptionPrevious value: -"Parent task ID"New value: +"Parent task" - added
Input schema / properties / titles / descriptionAdded value: +"Subtask titles, one per array item — e.g. [\"Write it\", \"Test it\"]. Always an array, even for a single subtask." - added
Input schema / properties / titles / itemsAdded value: +{ + "type": "string" +} - removed
Input schema / properties / titles / oneOfRemoved value: -[ - { - "description": "Single subtask title", - "type": "string" - }, - { - "description": "Multiple subtask titles", - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / titles / typeAdded value: +"array"
- Changed
subtask_delete4 fields changed- added
Input schema / properties / ids / descriptionAdded value: +"Subtask IDs to delete — e.g. [4, 7]. Always an array, even for one." - added
Input schema / properties / ids / itemsAdded value: +{ + "type": "integer" +} - removed
Input schema / properties / ids / oneOfRemoved value: -[ - { - "description": "Single subtask ID", - "type": "integer" - }, - { - "description": "Multiple subtask IDs", - "items": { - "type": "integer" - }, - "type": "array" - } -] - added
Input schema / properties / ids / typeAdded value: +"array"
- Added
subtask_reorder - Changed
subtask_update4 fields changed- added
Input schema / properties / blocksAdded value: +{ + "description": "Siblings that wait on this one — inverse of depends_on", + "items": { + "type": "integer" + }, + "type": "array" +} - added
Input schema / properties / depends_onAdded value: +{ + "description": "Siblings this one waits on (replaces the set)", + "items": { + "type": "integer" + }, + "type": "array" +} - added
Input schema / properties / forceAdded value: +{ + "default": false, + "description": "Proceed despite unmet prerequisites. Only when a human decided the blocker no longer applies — never on your own initiative. Logged.", + "type": "boolean" +} - removed
Input schema / properties / id / descriptionRemoved value: -"Subtask ID"
- Changed
task_batch_update1 field changed- added
Input schema / properties / forceAdded value: +{ + "default": false, + "description": "Proceed despite unmet prerequisites. Only when a human decided the blocker no longer applies — never on your own initiative. Logged.", + "type": "boolean" +}
- Changed
task_create3 fields changed- removed
Input schema / properties / source_ref / properties / file / descriptionRemoved value: -"File path" - removed
Input schema / properties / source_ref / properties / line_end / descriptionRemoved value: -"End line number" - removed
Input schema / properties / source_ref / properties / line_start / descriptionRemoved value: -"Start line number"
- Added
task_delete - Changed
task_list4 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Filter by the git branch of the task's epic. Pass \"current\" to auto-detect; pass empty string to restrict to branch-agnostic epics. Omit to list all."New value: +"Git branch filter: \"current\" = active branch, \"\" = branch-agnostic only, omit = all." - added
Input schema / properties / include_archivedAdded value: +{ + "default": false, + "description": "Include archived epics and their tasks.", + "type": "boolean" +} - added
Input schema / properties / include_deletedAdded value: +{ + "default": false, + "description": "Include removed tasks.", + "type": "boolean" +} - added
Input schema / properties / project_idAdded value: +{ + "description": "Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database.", + "type": "integer" +}
- Added
task_lock_description - Added
task_restore - Changed
task_update4 fields changed- added
Input schema / properties / forceAdded value: +{ + "default": false, + "description": "Proceed despite unmet prerequisites. Only when a human decided the blocker no longer applies — never on your own initiative. Logged.", + "type": "boolean" +} - removed
Input schema / properties / source_ref / properties / file / descriptionRemoved value: -"File path" - removed
Input schema / properties / source_ref / properties / line_end / descriptionRemoved value: -"End line number" - removed
Input schema / properties / source_ref / properties / line_start / descriptionRemoved value: -"Start line number"
- Changed
tracker_dashboard3 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Scope to a git branch. Pass \"current\" to auto-detect; pass empty string to restrict to branch-agnostic epics. Omit to include everything."New value: +"Scope to a git branch: \"current\" = active branch, \"\" = branch-agnostic only, omit = all." - added
Input schema / properties / include_archivedAdded value: +{ + "default": false, + "description": "Include archived epics and their tasks.", + "type": "boolean" +} - changed
Input schema / properties / project_id / descriptionPrevious value: -"Project ID (omit if only one project exists)"New value: +"Project ID. Omit if the database holds one project, or if SAGA_PROJECT is set. With several projects and neither, the first is used and the rest are listed under other_projects."
- Changed
tracker_search3 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Filter epic/task results by git branch. Pass \"current\" to auto-detect; pass empty string to restrict to branch-agnostic epics. Omit to include all."New value: +"Git branch filter: \"current\" = active branch, \"\" = branch-agnostic only, omit = all." - added
Input schema / properties / include_archivedAdded value: +{ + "default": false, + "description": "Include archived epics and their tasks.", + "type": "boolean" +} - added
Input schema / properties / project_idAdded value: +{ + "description": "Scope to one project. Needed when a single database holds several projects; defaults to the SAGA_PROJECT env var if set, otherwise the whole database.", + "type": "integer" +}
6 tool updates
v1.5.5- Changed
epic_create1 field changed- added
Input schema / properties / branchAdded value: +{ + "description": "Git branch this epic is scoped to. Pass \"current\" to auto-detect from the repo. Omit or pass empty string for a branch-agnostic (global) epic.", + "type": "string" +}
- Changed
epic_list1 field changed- added
Input schema / properties / branchAdded value: +{ + "description": "Filter by git branch. Pass \"current\" to auto-detect; pass empty string to list only branch-agnostic epics. Omit to list all.", + "type": "string" +}
- Changed
epic_update1 field changed- added
Input schema / properties / branchAdded value: +{ + "description": "Git branch this epic is scoped to. Pass \"current\" to auto-detect; pass empty string to clear (branch-agnostic).", + "type": "string" +}
- Changed
task_list1 field changed- added
Input schema / properties / branchAdded value: +{ + "description": "Filter by the git branch of the task's epic. Pass \"current\" to auto-detect; pass empty string to restrict to branch-agnostic epics. Omit to list all.", + "type": "string" +}
- Changed
tracker_dashboard1 field changed- added
Input schema / properties / branchAdded value: +{ + "description": "Scope to a git branch. Pass \"current\" to auto-detect; pass empty string to restrict to branch-agnostic epics. Omit to include everything.", + "type": "string" +}
- Changed
tracker_search1 field changed- added
Input schema / properties / branchAdded value: +{ + "description": "Filter epic/task results by git branch. Pass \"current\" to auto-detect; pass empty string to restrict to branch-agnostic epics. Omit to include all.", + "type": "string" +}
31 tool updates
v1.5.3- First observed
activity_log - First observed
comment_add - First observed
comment_list - First observed
epic_create - First observed
epic_list - First observed
epic_update - First observed
note_delete - First observed
note_list - First observed
note_save - First observed
note_search - First observed
project_create - First observed
project_list - First observed
project_update - First observed
subtask_create - First observed
subtask_delete - First observed
subtask_update - First observed
task_batch_update - First observed
task_create - First observed
task_get - First observed
task_list - First observed
task_update - First observed
template_apply - First observed
template_create - First observed
template_delete - First observed
template_list - First observed
tracker_dashboard - First observed
tracker_export - First observed
tracker_import - First observed
tracker_init - First observed
tracker_search - First observed
tracker_session_diff
TDQS
Most tools target a distinct resource and action, so an agent can usually tell them apart by name and description. The main confusable pairs are tracker_session_diff vs activity_log and tracker_search vs note_search, but the descriptions clarify aggregation vs raw log and scope.
The set overwhelmingly follows a resource_action snake_case pattern (epic_create, task_update, subtask_reorder), which is predictable and easy to navigate. Minor exceptions like activity_log and the longer task_lock_description break the pattern slightly but do not cause serious confusion.
At 38 tools, the surface is heavy and exceeds the typical well-scoped MCP range, though the broad domain (projects, epics, tasks, subtasks, notes, comments, templates, tracker metadata) justifies many of them. Some tools overlap in purpose and could be consolidated, such as session_diff/activity_log and note_search/tracker_search.
The tool set provides solid lifecycle coverage across all major entities, including create, read/list, update, delete/restore, and domain-specific operations like archiving, reordering, locking, exporting, and importing. Minor gaps exist, such as no template_update and no dedicated get-by-id for notes or epics, but agents can work around these with list/search and update operations.
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
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
An agent-native database over MCP: shared, validated, structured records in every AI chat.
Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Work management where AI agents are first-class members: tasks, projects, memory over hosted MCP
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceServer-enforced workflow discipline for AI agents. An MCP server providing persistent work items, dependency graphs, quality gates, and actor attribution. Schemas define what agents must produce — the server blocks the call if they don't. Works with any MCP-compatible client.205MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for managing hierarchical project tracking with PostgreSQL. Enables AI agents to create, read, update, and delete projects, epics, stories, summaries, status updates, context, and issues.2-
- AlicenseBqualityAmaintenanceSelf-hosted issue tracker built for agent-driven development. One binary, SQLite storage, MCP-native, with a web UI, REST API, and CLI for the humans.2745Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAgent-first project management MCP server that enables AI agents to manage tasks, spaces, lists, boards, subtasks, comments, and automations via natural language, with full audit trail and real-time sync.9,357MIT
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/spranab/saga-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server