Skip to main content
Glama

Kontexta is a local-first Model Context Protocol (MCP) server that gives your AI coding agents — Claude Code, Cursor, Cline, GitHub Copilot, Gemini, Antigravity — a persistent memory and a controlled command surface. Learn more at kontexta.dev

Instead of agents losing context between sessions or inventing their own shell commands, Kontexta provides:

  • Brain: A git-backed markdown vault with FTS5 search and surgical section edits.

  • Hands: A sandboxed command engine defined by you in kontexta.json.

  • Eyes: A feedback loop that journals results back into the brain.

The Unique Value

Most AI tools trap context inside their own chat window. Kontexta moves that context to your own SSD, providing six core advantages:

1. Cross-Agent Handoff

  • Switch agents mid-project: Claude Code journals a decision; Cursor reads it 5 minutes later.

  • Unified command surface: Author your kontexta.json once; every agent uses the same validated tools and approval gates.

  • Multi-agent collaboration: Different agents working on different tasks contribute to the same indexed knowledge base.

  • Zero-touch onboarding: projects_register + admin_onboard_agent injects a fenced, version-stamped workflow rules block into CLAUDE.md / AGENTS.md / GEMINI.md / .cursor/rules / .continue/rules / .clinerules / .github/copilot-instructions.md so every new conversation — on any agent — wakes up already knowing how to use kontexta.

2. Cross-Project Awareness

  • Global reach: An agent working in Project A can instantly search and read the documentation, context, and states of Project B.

  • Shared standards: Solve a problem once, document it, and let your agent apply that solution across all your other projects automatically.

  • Heads-up on sensitivity: Because the vault is global, every registered project is readable by any agent session you start. If you mix client work with personal projects, keep sensitive material in a separate vault (KONTEXTA_DATA_DIR) rather than registering it alongside everything else.

3. Deterministic Context Retrieval

  • SQLite FTS5 Power: Instead of unpredictable vector-based RAG, Kontexta uses high-performance full-text indexing for deterministic, local-first context discovery.

  • Reliable Discovery: Fast, exact keyword and regex-based search ensures you find what you're looking for without the "hallucination" risk of third-party embedding providers.

4. Token-Optimized Context Economy

  • Surgical fetching: Instead of indiscriminately dumping whole directories into the LLM's context window, Kontexta provides tools to fetch specific file outlines, sections, or targeted search excerpts.

  • Budget awareness: Every tool response includes est_tokens so agents can smartly budget what they pull into memory.

5. Separation of Code and Context

  • The "Context.md" Killer: Stop littering your source tree with CONTEXT.md or AI_NOTES.md files that clutter your PRs and get stale.

  • Global Knowledge Vault: Keep your main codebase pristine. Architectural decisions, agent journals, and cross-project standards live in a separate, dedicated global vault accessible by any agent instance.

6. Compounding Intelligence

  • Continuous learning: Through the "Eyes" and journaling system, your AI agents document their decisions, successes, and mistakes.

  • Smarter next time: A problem solved today is saved in the Brain, meaning tomorrow's session starts with the benefit of yesterday's experience.


Related MCP server: MindOS

Architecture: Brain → Hands → Eyes

Kontexta builds a closed feedback loop that makes every turn smarter than the last.

1. Brain — The Context Engine

A markdown knowledge vault optimized for context-window economy.

  • FTS5 Search: Instant local keyword search.

  • Surgical Edits: Tools for reading and updating specific markdown sections without pulling entire files.

  • Token-Aware: Every response includes est_tokens and size_bytes so agents can budget their context.

2. Hands — The Command Engine

A project-defined command surface that replaces "unrestricted shell access" with a sandboxed contract.

  • Explicit boundaries: You declare exactly what an agent can do via kontexta.json. There is no unrestricted shell access.

  • Sandboxed: Locked working directory, clean environment, and ring-buffered output.

  • Human-in-the-loop: High-risk commands can require a cryptographic one-time token, pausing execution until you explicitly approve it.

IMPORTANT

The sandbox enforcesyour contract — it doesn't infer risk on its own. A command only requires approval if you mark it high-risk in kontexta.json; anything else runs unattended within the sandbox. Treat kontexta.json like a permissions file: the security posture is exactly as careful as your authorship of it.

3. Eyes — The Feedback Engine

Closes the loop by capturing Hands' output and journaling learnings back into the Brain.

  • Live Observation: Tools like admin_overview({mode: "whats_new"}) and files_diff_against_disk let agents see what actually changed.

  • Automatic journaling: Every MCP tool call is captured to a per-project, append-only event log (Layer 1). The journal_distill tool — or the lenient-mode auto-fallback — collapses raw events into per-topic markdown summaries (Layer 2) indexed alongside the rest of the knowledge base. journal_write (kind: "note" / "intent") lets agents enrich the log with decisions and topic pivots. Phase 2 also adds journal_housekeep (retention/archival), journal_commit_upgrades (closes the subagent dispatch loop), strict mode (configurable per project — blocks read tools when backlog exists), and an opt-in WebUI scheduler that runs mechanical distillation on a 15-minute clock when the dashboard is installed. Learn more about Journaling modes and configuration in docs/JOURNAL.md.


How it Works in Practice

Imagine you are switching from Claude Code to Cursor mid-way through a feature.

The Problem: The "Context Gap"

  • Claude Code knows why you chose that specific library.

  • Cursor doesn't. You have to copy-paste or re-explain everything.

  • CONTEXT.md files help, but they get stale, they clutter your PRs, and they don't capture live decisions.

The Kontexta Solution

  1. Journaling: As Claude Code works, kontexta automatically captures every tool invocation and decision to a structured event log.

  2. Persistence: Those logs are saved in your local Kontexta brain, not the chat window. The journal_distill tool consolidates raw events into per-topic markdown entries that are searchable alongside your knowledge base.

  3. Seamless Handoff: When you open Cursor, it immediately sees the recent journal entries and architectural state via the Kontexta MCP.

  4. Zero Re-explanation: Cursor "wakes up" with the exact same context Claude had.


How Kontexta Compares

Kontexta doesn't try to replace your favorite agent or memory library — it sits in a different spot. Here's an honest read of where it overlaps and where it doesn't:

Capability

CLAUDE.md / AGENTS.md

Vendor memory (Cursor rules, Claude Projects)

mem0

Zep

Kontexta

Setup cost

None — just a file

None — built in

SDK integration in your app

SDK + service

MCP server + kontexta.json

Cross-agent portability

Per-agent flavored files drift apart

Locked to one vendor

App-level, not agent-level

App-level, not agent-level

Same MCP surface for Claude Code, Cursor, Cline, GitHub Copilot, Gemini, Antigravity

Retrieval model

Whole file dumped into context

Whole file / vendor-managed

Vector + graph (semantic)

Temporal knowledge graph (semantic)

Deterministic FTS5 + regex; surgical section reads

Token accounting

None

None

None exposed to agent

None exposed to agent

Every response carries est_tokens / size_bytes

Command execution

N/A

Vendor-defined tools

N/A (memory only)

N/A (memory only)

Sandboxed Hands with per-command contracts and approval tokens

Storage

Repo file (clutters PRs)

Vendor cloud

Self-host or hosted, vector DB

Self-host or hosted

Local SQLite + markdown vault, with an optional relay for backup and multi-machine sync

Best at

Static project conventions

Zero-config personal memory

Semantic recall inside one app

Long-running conversational memory

Multi-agent handoff + governed local execution

Honest tradeoffs:

  • If you only use one agent and one project, CLAUDE.md or vendor memory is simpler — reach for Kontexta when you're switching agents or coordinating across projects.

  • mem0 and Zep do semantic recall that FTS5 doesn't; Kontexta trades fuzzy matching for determinism and local-only operation.

  • Kontexta's Hands sandbox has no equivalent in the memory tools above — that's the unique surface, not the memory itself.


Quick Start (One Command)

Requires Node 22.x LTS. That's it — no Docker, no pnpm, no build.

npx kontexta start

Boots the dashboard on http://localhost:23002 (opens in your browser) and starts the MCP server. First run walks you through master password, data location, and project registration in the browser.

Enable the coding agents you use in the dashboard and kontexta installs lightweight hooks so the journal also captures your conversation and shell commands — see docs/HOOKS.md.

Add to your AI client (MCP-only)

If you only want the MCP server (no dashboard), point your AI client at:

{
  "mcpServers": {
    "kxta": {
      "command": "npx",
      "args": ["-y", "kontexta", "mcp"]
    }
  }
}

Or install automatically via Smithery:

npx -y @smithery/cli install safiyu/kontexta --client claude

No MCP? Use the skill

If your AI client can't load MCP servers (e.g. managed installs that block user-added servers), the skills/kontexta agent skill exposes every kxta tool through a small Python bridge the agent runs from its shell. See skills/kontexta/README.md.

Alternative: Docker

For containerized deployments, see docs/INSTALL.md#docker-hub-compose.


Your Brain on More Than One Machine (Optional)

Everything Kontexta knows about you and your work (knowledge files, projects, profile, journals, calendar, tags) is your brain. It lives on your machine as markdown files and SQLite, and works fully offline. If you use Kontexta on more than one machine, or want a copy that survives a lost laptop, connect your brain to a remote.

A relay hosts any number of brains, each fully separate. For your brain it is two things at once: the durable copy of everything (nothing is ever pruned, a brain remembers) and the sync engine between your machines. Teammates can use the same relay, each with their own brain; nobody sees anyone else's.

The remote cannot read your brain. Payloads (file contents, paths, tags, journal entries, calendar data) are encrypted on your machine with AES-256-GCM before they leave it. The key is derived from your share id and never sent anywhere; the relay only ever sees a derived routing id, plus the metadata it needs to order ops (record ids, op kinds, which machine, timing and size). If a relay is compromised or misconfigured, an attacker gets ciphertext. The flip side: lose every copy of the share id and the data is unrecoverable, and revoking a machine stops its access to the relay but not its ability to decrypt data it already holds (for that, create a new brain).

Machines exchange fine-grained operations (file create, update, delete, move, tags, favorites, projects, calendar, journal) over short polling, so a decision made on one machine appears on the others without merging repositories or database files. A machine that never connects simply works locally.

Run a relay

The relay is kontexta-relay: a plain, stateless short-polling HTTP service with one SQLite file and one port (23010). Run it with Node or Docker.

# With Node (any box, VPS or Cloud Run):
KXTA_RELAY_PEPPER="$(openssl rand -hex 32)" \
KXTA_RELAY_ENROLL_SECRET="$(openssl rand -hex 16)" \
  npx kontexta-relay

# With Docker (published image, no clone needed):
docker run -d --name kontexta-relay -p 127.0.0.1:23010:23010 -v kontexta-relay-data:/data \
  -e KXTA_RELAY_PEPPER="$(openssl rand -hex 32)" -e KXTA_RELAY_ENROLL_SECRET="$(openssl rand -hex 16)" \
  ghcr.io/safiyu/kontexta-relay:latest

# Or with compose, from the repo root (pulls the image, or builds it with --build):
docker compose -f docker-compose.relay.yml up -d

It is ready once http://127.0.0.1:23010/health answers.

Variable

Default

Purpose

PORT / HOSTNAME

23010 / 0.0.0.0

Where it listens.

HOST_PORT / HOST_BIND

23010 / 127.0.0.1

Docker compose only: the published port and interface.

KXTA_RELAY_PEPPER

(empty)

HMAC pepper bound into token and share id hashes. Required for any non-loopback deployment.

KXTA_RELAY_ENROLL_SECRET

(empty)

Secret needed to create a brain. Joining an existing brain needs only its share id.

KXTA_RELAY_DB

~/.kontexta-relay/relay.db

Path to the SQLite file (the Docker image keeps it at /data/kontexta-relay.db on its volume).

KXTA_RELAY_ALLOW_OPEN_CREATE

(unset)

1 lets anyone create brains (local experiments only).

KXTA_RELAY_ALLOW_DEFAULT_PEPPER

(unset)

1 allows the public default pepper on a non-loopback host (not recommended).

IMPORTANT

Set bothKXTA_RELAY_PEPPER and KXTA_RELAY_ENROLL_SECRET for anything beyond local experiments. The server refuses to start on the default pepper when bound beyond loopback, and without the enrollment secret nobody can create a brain. Put TLS in front of it (nginx, Caddy, Cloudflare Tunnel, Cloud Run) as you would for any endpoint that issues credentials.

All brains, their full history and their machines live in one SQLite file (the Docker volume kontexta-relay-data). Back that file up; to wipe everything, docker compose -f docker-compose.relay.yml down -v.

Connect a machine (kontexta brain)

The share id is what identifies a brain, and it is also the secret for joining it and the root of its encryption key. Kontexta generates it when you create a brain; you paste it on your other machines.

# First machine: create a brain (prints the share id once, save it):
kontexta brain connect https://brain.example.com --create --name "My brain" \
  --enroll-secret "$KXTA_RELAY_ENROLL_SECRET"

# Another machine (or a replacement for a lost one): join with the share id:
kontexta brain connect https://brain.example.com --share-id ABCD-EFGH-...

# Brain name, relay, machines, outbox depth, skipped ops, cursor:
kontexta brain status

# List the machines in your brain, or revoke one:
kontexta brain machines
kontexta brain machines remove <machine-id>

# Show the full share id again (asks first):
kontexta brain share

# Sync on demand, or run the loop in the foreground on a machine without the web app:
kontexta brain push
kontexta brain pull
kontexta brain run

# Stop syncing (everything stays on this machine):
kontexta brain disconnect

The same flow is on the Brain page of the web app. Add --json to any subcommand for machine-readable output. --no-keep-share-id keeps the share id off this machine, and --data-dir / --timeout target a specific vault or bound a request. The Kontexta web app and the MCP server start the sync loop for you once a machine is connected.

Joining. Creating a brain on an empty relay makes your current vault its first content. Joining an existing brain on a new machine pulls the brain's current state instead of replaying its history. A machine that already has content keeps files that match, and where a file differs from the brain's version both are kept and a conflict copy appears for you to resolve.

How the cadence works. A connected machine short-polls: 15 s while active, 60 s while idle, and exponential backoff up to 5 minutes on failure.

Ordering and conflicts. The relay assigns every op a sequence number, the only source of ordering (client clocks are never trusted). Each machine tracks the version of each record it has seen and sends it with every edit, so an edit made on top of everything the machine has pulled is accepted. When two machines edit the same record without having seen each other's change, the relay keeps both. Neither machine overwrites its own file: each gets a conflict copy next to the canonical file (<name> (from <machine label>).<ext>) and lists it in the Conflict Manager, where you choose keep server, keep mine, keep both, or a merged version. Every resolution is pushed so your machines converge. Two machines creating the same path independently produce a path conflict instead of swapping content.

Journals merge instead of conflicting. The daily journal (knowledge/journal/journal-YYYY-MM-DD.md) is append-only, so when two machines write the same day their entries are merged into one sorted union on every machine. No conflict copy, nothing lost, and every machine ends with identical content.

Portable ops. Ops never carry machine-local ids or absolute paths. Records are referenced by global id (<id>@<machine>), and file paths travel relative to the data directory. A remote op that points outside the data directory is refused, and files in project repos never sync (only your knowledge base does).

Skipped ops. An op that cannot be applied on a machine (an unsafe path, a record that machine does not have) is recorded in the local sync_skipped_ops table and skipped so it cannot block the rest of the log. Other apply errors are retried a few polls first. A malformed op still stops the pull, so a version mismatch between machine and relay is noticed rather than hidden.


Security & Network Exposure

Kontexta's dashboard is designed for local-first use — running on localhost or on a trusted machine you control. The threat model is:

  • Default safe: A master password protects the UI. Sessions are HMAC-signed cookies, passwords are scrypt-hashed.

  • IP bypass is opt-in per IP. During setup you can allowlist IPs (e.g. 127.0.0.1) to skip the login prompt from trusted addresses.

  • Reverse-proxy mode is opt-in. If you put Kontexta behind nginx, Caddy, or Cloudflare Tunnel, enable "Trust X-Forwarded-For headers" during setup. Without this flag, those headers are ignored — so a LAN attacker cannot spoof an allowlisted IP.

  • kontexta.json is your responsibility. The Hands engine executes shell commands you declare in this file. The sandbox limits where and how those commands run (path traversal blocked, ReDoS-proof regex, locked CWD, stripped PATH), but the what is whatever you wrote. Review any kontexta.json you didn't author yourself — same caution you'd apply to a Makefile, GitHub Actions workflow, or shell snippet from the internet.

WARNING

Do not expose the dashboard to the public internet without a trusted reverse proxy in front. The auth layer is sufficient for localhost and LAN use; it is not hardened against direct internet exposure (no rate limiting, no brute-force lockout, no MFA).


Demo & Walkthrough

In this demo:

  • System audit and web clipping.

  • Local RAG and context gathering.

  • The Brain/Hands/Eyes loop in action.

No-install demo: Try the MCP endpoints interactively right from your browser on the Glama Kontexta page.


Project Status & Transparency

Why the high version number on a fresh repository? If you look at the commit history, you might wonder how a repository with so few commits reached its current major version.

Kontexta wasn't built over a weekend. It began over a year ago as a private, monolithic toolchain used to manage complex, multi-agent coding workflows. The versioning reflects its true architectural maturity.

Recently, I undertook a major effort to industrialize and modularize this engine, restructuring it into the three core pillars you see today: Brain, Hands, and Eyes. This process involved decoupling the core from private infrastructure and moving to a clean, open-source monorepo. The condensed git history is the result of this clean extraction—leaving behind internal legacy commits to publish only the battle-tested, production-ready framework available today.


Roadmap

What's deliberately deferred and what triggers will pull it forward lives in docs/ROADMAP.md. Notable open items: per-call project resolution in journaling, server-side LLM upgrade for the WebUI scheduler, and Layer 3 (embeddings + graph + semantic clustering).


Features Breakdown

Brain

  • Global vault: local-first knowledge store with git-backed history and version rollbacks.

  • 58 MCP tools tuned for context economy.

  • Batch operations (up to 500 files/call), grep, and regex support.

  • Web clipping with auth-wall detection.

  • Full git-backed versioning: files_get_history, files_get_diff, files_restore.

  • Agent context rules onboarding: projects_register detects existing CLAUDE.md / AGENTS.md / GEMINI.md / .cursor/rules/*.mdc / .continue/rules/*.md / .clinerules / .github/copilot-instructions.md and recommends a follow-up. The admin_onboard_agent tool injects an idempotent, version-fenced workflow rules block (or scaffolds one for the right agent) so every new conversation starts already aware of kontexta's conventions.

Hands

  • Project-specific kontexta.json tools map.

  • Strict sandbox: realpath-verified CWD, stripped PATH, and hard timeouts.

  • ReDoS-proof parameter validation via re2.

  • CSPRNG-bound confirmation tokens for high-risk commands.

Dashboard

  • Built-in /docs page with a searchable catalogue of all 66 core tools.

  • Form-based kontexta.json editor with live validation.

  • Real-time status bar streaming git activity over WebSockets.

Calendar

  • Generic, dependency-aware calendar for tracking events across anything you name — a server, a delivery van, a store location, a piece of equipment, a room, or anything else you schedule against.

  • Automatic conflict detection: overlapping windows on the same entity, overlapping windows on linked entities, and events scheduled too close together (configurable buffer).

  • Month, week, and agenda views in the dashboard, matching the rest of the UI; click to add or edit events, manage entities and their dependency links.

  • Export any date range as a standard .ics file for Outlook, Google Calendar, or Apple Calendar.

  • 11 MCP tools so agents can schedule, link, and check conflicts straight from chat.

Publish

  • CLI-driven documentation generation. Turn your knowledge base into polished documentation sites, API references, and LLM-readable docs.

  • Render blocks. Composable output blocks for endpoints, glossary, mermaid diagrams, navigation, LLMs, markdown, and more.

  • Seed templates. Pre-built templates for common documentation patterns — get started in minutes.

  • Pipeline architecture. Pluggable pipeline with configurable sources, renderers, and output targets.


TIP

Deleting a project file in Kontexta only un-indexes it from the AI's memory. Your physical source code is never touched.


Contributing

Kontexta is a project for developers, by developers. If you'd like to contribute new tools, improve the core engine, or refine the dashboard, please see our CONTRIBUTING.md for architecture guidelines and local setup instructions.

Built with care for the future of agentic coding. License: Apache-2.0

Available Tools

58 tools
admin_commit_backupA

SIDE-EFFECTFUL: TOUCHES THE NETWORK. Sync the project's KB data into its git backup directory, create a commit, and git push to origin. AUTH: relies on the local user's git credentials (SSH agent, credential helper, etc.), there is no in-server auth. Kontexta does not rate-limit, but the remote may. Idempotent in steady state: a no-op commit is skipped, but the push still runs. Throws if the project has no configured backup repo or if push fails (network, auth, conflict). Returns {success, copied_files_count, copied_paths}. Use after a batch of KB writes to get changes off-machine.

NameRequiredDescriptionDefault
project_idYesProject ID

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly: it flags side effects and network access, explains the auth model (local git credentials, no in-server auth), notes remote rate-limit potential, describes idempotency (no-op commit skipped but push still runs), and lists failure modes (missing repo, network/auth/conflict push failures).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the critical side-effect warning, then moves efficiently through purpose, auth, idempotency, errors, return shape, and usage. Every sentence carries distinct, useful information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description provides the return shape ({success, copied_files_count, copied_paths}), the auth model, failure conditions, and idempotency behavior. An agent has everything needed to invoke and interpret the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single project_id parameter, so the schema already documents the parameter fully. The description adds no syntax or format detail beyond what the schema provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states specific verbs and resources: syncing KB data into a git backup directory, creating a commit, and pushing to origin. It is immediately distinguishable from sibling tools like journal_commit_upgrades or admin_refresh_session_context because it names the exact backup/git-push behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for use: 'Use after a batch of KB writes to get changes off-machine.' This tells the agent when the tool is appropriate. However, it does not name alternatives or explicitly state when not to use it, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

admin_get_profileA

Return the user profile stored in the Knowledge Base. The profile helps AI agents understand the user's context, role, preferences, and goals. Read-only; no side effects, auth, or rate limits. Returns existence status, full content, list of missing required sections, and a hint for new users. Use at session start to understand who you're working with.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so well: it declares the operation read-only with no side effects, no auth requirement, and no rate limits, and it enumerates the return payload (existence status, full content, missing required sections, new-user hint). This is exactly the behavioral context an agent needs before calling a 0-parameter read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with what the tool returns before the when-to-use guidance. Every sentence adds information, though the safety sentence ('Read-only; no side effects, auth, or rate limits') is slightly list-like and could be folded into the purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description compensates by describing both the side-effect profile and the shape of the response, including the existence/missing-sections case. Nothing an agent needs to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly does not waste words on parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Return the user profile stored in the Knowledge Base,' and clarifies what a profile contains (context, role, preferences, goals). The purpose is unambiguous, but it does not differentiate itself from nearby siblings such as admin_overview or admin_refresh_session_context, which an agent could plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use at session start to understand who you're working with' gives explicit timing and intent for invocation. It stops short of naming when NOT to use it or pointing to an alternative tool for related needs (e.g., admin_refresh_session_context).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

admin_onboard_agentA

Write or update the kontexta workflow rules block in a project's agent context file(s). Idempotent: uses fenced markers + version to skip no-op writes.

MANDATORY: This tool modifies project configuration files. You MUST seek explicit user consent before calling this tool. Set 'confirm: true' only after the user has agreed.

PARAMETERS:

  • project_id: number, required.

  • confirm: boolean, required. Must be true to proceed.

  • files: string[], optional. Paths relative to project root. For update mode, defaults to recommendation.target_files. Ignored when files is empty AND target_agent is provided (create mode).

  • target_agent: enum claude-code | codex | gemini | cursor | continue | aider | cline | copilot | generic. Required when files is empty AND no context file currently exists. Picks the canonical filename and the starter scaffold.

  • hooks: boolean, optional. With target_agent set, also enables that agent and installs its conversation-capture hooks (npx/source installs) or returns the host docker command (Docker). Ask the user before setting it.

RETURNS: { written: [{ path, action: created|updated|skipped, version }], skipped: [{ path, reason }], hooks_install?: { agent, mode, enabled, outcome?, docker_command?, note?, error? }, hooks?: { install_mode, alerts, prompt } }

NameRequiredDescriptionDefault
filesNoProject-relative paths to update; defaults to detected context files
hooksNoWith target_agent, also enable that agent and install its conversation-capture hooks (npx/source) or return the host docker command. Ask the user first.
confirmYesMANDATORY: Set to true only after obtaining explicit user consent to modify context files.
project_idYesProject ID returned from register_project
target_agentNoRequired when files is empty AND no context file exists. Picks the canonical filename + scaffold.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses idempotency (fenced markers + version skip no-op writes), that this is a mutation of project config files, the mandatory user-consent requirement, and that hooks install conversation-capture tooling or return a docker command. It omits permission scope and failure/partial-write behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded, followed by the idempotency trait and then the mandatory-consent warning, so the most important constraints come early. The RETURNS block is useful given no output schema, though confirm semantics are repeated in both description and schema, a minor redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex, 5-parameter mutating tool with no annotations and no output schema, so the description must do a lot. It covers consent, idempotency, mode conditions, and even an explicit RETURNS shape, leaving it nearly complete; only permission scope and edge-case failure handling are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, and the baseline is 3. The description adds marginal framing (update mode defaults to recommendation.target_files; target_agent is ignored/required under stated conditions) but does not add syntax or value detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Write or update the kontexta workflow rules block in a project's agent context file(s).' This is far more specific than the generic files_update sibling, so an agent can infer the distinct scope. It stops short of explicitly naming or contrasting a sibling alternative, so it lands at a strong 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides mode-level guidance (update mode vs create mode, when files is empty, when target_agent is required) and a mandatory consent step, which implies correct usage. However, it never states when to choose this tool over files_update or admin_transfer_agent_context, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

admin_overviewA

Vault-state snapshot. mode: 'stats' = aggregate counts for a scope: file_count, untagged_count, favorite_count, top_tags. With project_id omitted (everything), also returns by_project breakdown. include_token_total: true stat()s every matching file on disk to compute a body-size estimate, measurably slower on large vaults; default false. mode: 'whats_new' = list files created or modified since a checkpoint (since, REQUIRED for this mode, ISO-8601 like 2025-01-15T00:00:00Z or relative durations like 1h/7d/2w; invalid formats throw); CAVEAT: hard-deleted files are NOT surfaced, only mtime-driven changes. Both modes: project_id: null = KB only; omit = everything. Read-only; no side effects, auth, or rate limits. Use stats as a cheap dashboard or to spot untagged content for cleanup (for live disk-vs-index drift use files_diff_against_disk); use whats_new at session start to catch up.

NameRequiredDescriptionDefault
modeYesWhich snapshot to return. 'whats_new' requires `since`.
limitNomode='whats_new' only: max files returned. Default 200.
sinceNoREQUIRED for mode='whats_new'. ISO 8601 timestamp or relative duration (e.g. "1h", "7d", "2w").
top_tagsNomode='stats' only: how many top tags to return (default 10)
project_idNoFilter to a single project. Pass null for KB-only. Omit for everything.
include_tagsNomode='whats_new' only: attach tags[] to each file. Default true.
include_token_totalNomode='stats' only: if true, stat every matching file on disk to compute total est_tokens. Default false (cheap).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it does: 'Read-only; no side effects, auth, or rate limits', a performance warning that include_token_total stat()s every file and is 'measurably slower on large vaults', a correctness caveat that hard-deleted files are NOT surfaced, and a throw-on-invalid-format behavior. This is materially beyond what a schema could convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource then branches by mode, and every sentence carries information (defaults, caveats, routing). It is dense with backtick-quoted identifiers and layered clauses, so it reads more like compact reference notes than clean prose, but there is little genuine filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description fully compensates: it names the returned fields per mode, the perf tradeoff of include_token_total, the whats_new deletion caveat, and the auth/rate-limit profile. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real cross-parameter meaning: mode-dependent applicability of since/limit/include_tags/include_token_total, the ISO-8601 vs relative-duration accepted formats, and the null-vs-omit distinction for project_id. Slightly redundant on the since-required point already stated in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a precise noun for the resource ('Vault-state snapshot') and then enumerates the two modes and the exact fields each returns (file_count, untagged_count, top_tags, by_project). An agent can distinguish it from files_list, files_diff_against_disk, and other admin tools without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use for both modes ('cheap dashboard or spot untagged content for cleanup', 'use whats_new at session start to catch up') and names the alternative for the adjacent job (files_diff_against_disk for live disk-vs-index drift). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

admin_refresh_session_contextA

Re-read the session context (profile, upcoming events within 7d, conflicts, freshness nudge) as it stands NOW. Call this when the user just edited their profile or added/moved calendar events and you want the current picture instead of the snapshot taken at session start. Read-only; no side effects. Returns the same block Kontexta sent as MCP instructions at session start.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares 'Read-only; no side effects' and explains the return payload is the same block sent as MCP instructions at session start. It stops short of stating latency/cost or whether the re-read is cached, but the core safety and idempotency profile is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action, then the trigger, then the return/safety note. Slightly redundant phrasing ('as it stands NOW' plus 'current picture') but no wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by naming the return block's contents. For a zero-param read tool, everything an agent needs to call it correctly is present; only freshness/caching semantics are left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to describe; baseline is 4. The description correctly does not invent parameters or imply filtering/config options that the empty schema does not support.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (re-read) and resource (session context), and enumerates exactly what the context block contains (profile, upcoming events within 7d, conflicts, freshness nudge). This clearly distinguishes it from the session-start snapshot behavior and from sibling admin tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the trigger conditions ('user just edited their profile or added/moved calendar events') and the goal ('want the current picture instead of the snapshot taken at session start'). The alternative — doing nothing and using the stale snapshot — is implied and understandable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

admin_transfer_agent_contextA

COPY existing agent context files (CLAUDE.md, AGENTS.md, .cursor/rules/*.mdc, etc.) from a project's repo into Kontexta's per-project knowledge base so they're indexed by FTS5 and can be git-synced through Kontexta's own backup engine.

This tool ONLY COPIES. It never deletes or modifies the originals in your repo. After a successful transfer, the response includes the list of source paths so the user can manually remove them if desired. No tool argument, no flag, and no code path in this tool ever calls a destructive filesystem operation against project.path.

MANDATORY: This tool writes new files into Kontexta's data dir. You MUST seek explicit user consent before calling. Set 'confirm: true' only after the user has agreed.

PARAMETERS:

  • project_id: number, required. Project ID returned from register_project.

  • confirm: boolean, required. Must be true.

  • files: string[], optional. Project-relative paths to transfer. Omit or pass [] to transfer all detected agent context files (uses the same detection list as register_project / onboard_agent).

RETURNS: { transferred: [{ source_path, kb_id, kb_path, est_tokens }], skipped: [{ source_path, reason }], next_action } Skip reasons: "missing" | "symlink" | "outside_project" | "already_transferred_same_content" | "read_error" | "write_error".

IDEMPOTENT: re-running with the same files copies nothing if the content is unchanged, duplicate transfers are detected via SHA-256 hash comparison against existing project KB rows.

NameRequiredDescriptionDefault
filesNoProject-relative paths to transfer. Omit to transfer all detected context files.
confirmYesMANDATORY: Set to true only after obtaining explicit user consent.
project_idYesProject ID returned from register_project

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden and does so thoroughly: it emphasizes COPY-only, guarantees no destructive filesystem operation, explains the response includes source paths for manual cleanup, flags the consent requirement, lists skip reasons, and states SHA-256 idempotency. This is exactly the behavioral context an agent needs for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then layered guarantees, consent requirement, parameters, returns, and idempotency. Every section is labeled and earns its place, though it is on the longer side with some redundancy between the description and schema for confirm/project_id.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no annotations and no output schema, the description fully describes return shape, skip reasons, and idempotent behavior, so an agent has everything needed to call it correctly. Complete for a consent-gated mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so baseline is 3, but the description adds value beyond the schema: it explains the omit-vs-empty-array default for files, the source of project_id, and the consent intent behind confirm. The added nuance about transfer-all semantics is the most useful contribution.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (COPY) and resource (agent context files: CLAUDE.md, AGENTS.md, .cursor/rules/*.mdc) plus the destination (Kontexta per-project knowledge base with FTS5 indexing and git-sync). An agent can instantly tell this apart from sibling admin tools like admin_commit_backup or admin_onboard_agent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly requires seeking user consent before calling and setting confirm:true only after agreement, and clarifies the default behavior (omit files to transfer all detected context files, same list as register_project/onboard_agent). It stops short of naming an explicit alternative tool or when-not-to-use condition, but the guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_entities_addA

SIDE-EFFECTFUL. Create a new tracked entity: any named thing you schedule events against (a server, a delivery van, a store location, a piece of equipment, a room, etc.). Not idempotent: a duplicate name (case-insensitive) throws. Returns {entity}. Use calendar_entities_link afterwards to record dependencies for conflict detection.

NameRequiredDescriptionDefault
kindNoFreeform category, e.g. 'server', 'vehicle', 'location', 'equipment'.
nameYesUnique display name for the entity (case-insensitive).
notesNoFreeform notes.
timezoneNoOptional IANA timezone (e.g. 'Europe/Berlin') for display only, does not affect stored event times.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it flags SIDE-EFFECTFUL, declares non-idempotency, and specifies that a duplicate name throws — exactly the failure mode an agent needs. It omits auth/permission requirements and whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences with the critical warning (SIDE-EFFECTFUL, not idempotent) front-loaded; no filler and every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param creation tool with no output schema, the description covers the essential: what it creates, the side effect, the duplicate-name failure, the return shape `{entity}`, and the follow-up call. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema, making 3 the baseline. The description restates the case-insensitive uniqueness constraint on `name` rather than adding new semantic detail about `kind`, `notes`, or `timezone`.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create a new tracked entity') and defines the concept with concrete examples (server, delivery van, store location, room) so an agent knows exactly what qualifies. It is clearly distinguishable from calendar_entities_update/delete/list/link siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent forward: 'Use `calendar_entities_link` afterwards to record dependencies for conflict detection.' This tells the agent the tool is a prerequisite step in a workflow, but it does not state when NOT to use it (e.g. when the entity already exists, or as an alternative to update).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_entities_deleteA

DESTRUCTIVE. Permanently delete an entity AND cascade-delete every event and link attached to it. Not idempotent: deleting an unknown id throws. Returns {success, deleted_events, deleted_links}. To deactivate without losing history, use calendar_entities_update with active: false instead.

NameRequiredDescriptionDefault
idYesEntity id to delete.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so well: it discloses irreversibility ('Permanently delete'), non-idempotency ('deleting an unknown id throws'), the cascade side effect on events and links, and the response payload. These are exactly the traits an agent needs to reason about before a destructive call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences with zero waste; the destructive warning is front-loaded and capitalized so it cannot be skimmed past. Each subsequent sentence adds a distinct fact (cascade, idempotency, return shape, alternative) rather than repeating itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description still specifies the return shape ({success, deleted_events, deleted_links}), which closes that gap. For a single-parameter destructive tool with no annotations, the only unaddressed area is authorization or permission requirements, a minor omission against otherwise thorough coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter exists and the schema documents it at 100% coverage ('Entity id to delete.'), so the schema does the heavy lifting. The description reinforces which id is targeted and notes that unknown ids throw, adding a small amount of meaning beyond the schema, but does not specify id format or where ids come from.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Permanently delete an entity') and immediately scopes it with cascade semantics ('AND cascade-delete every event and link attached to it'). This clearly distinguishes it from calendar_events_delete and calendar_entities_update, which an agent can tell apart without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative ('To deactivate without losing history, use `calendar_entities_update` with `active: false` instead') and the condition under which that alternative should be chosen. When-to-use and when-not-to-use are both present with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_entities_listA

Read-only; no side effects, auth, or rate limits. List tracked entities, each annotated with its outgoing and incoming dependency links. Returns {entities, count}.

NameRequiredDescriptionDefault
kindNoFilter to entities with this exact `kind`.
active_onlyNoIf true, exclude retired (active=false) entities.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and does reasonably well: it declares read-only, no side effects, no auth requirement, and no rate limits, plus the return shape. It omits ordering, pagination, and what qualifies as a 'tracked' entity, but the safety/operational profile is unusually well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed clauses with zero filler: the safety profile leads, the operation follows, and the return contract closes. Everything earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-optional-parameter list tool with no output schema, the description supplies the missing return shape (`{entities, count}`) and the read-only guarantees, so an agent has enough to call it correctly. Minor gaps remain around ordering and pagination, which matter less for a small list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents 'kind' and 'active_only' fully; the description adds no syntax, default, or semantics beyond that. Baseline 3 is correct when the schema does all the parameter work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List tracked entities') and adds a distinguishing detail: each entity is annotated with outgoing and incoming dependency links. That separates it from the sibling entity mutation tools (add/update/delete/link), though it never explicitly contrasts itself with calendar_events_list, which is the closest confusable list tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'List tracked entities' but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent can infer it is the read counterpart to calendar_entities_add/update/delete, but nothing in the text routes it against calendar_events_list or the other *_list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_entities_updateA

SIDE-EFFECTFUL. Patch an existing entity's fields, including active (set false to soft-retire it without losing its history). Idempotent per patch. Returns {entity}. For a hard delete see calendar_entities_delete.

NameRequiredDescriptionDefault
idYesEntity id (from `calendar_entities_add` or `calendar_entities_list`).
kindNoFreeform category, e.g. 'server', 'vehicle', 'location'.
nameNoNew display name for the entity.
notesNoFreeform notes.
activeNoSet false to soft-retire the entity without losing history.
timezoneNoIANA timezone for display purposes (e.g. 'Europe/Berlin').

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it flags SIDE-EFFECTFUL, states idempotency ('Idempotent per patch'), describes the soft-retire semantics of `active`, and gives the return shape. It omits auth/permission requirements and any rate-limit or concurrency notes, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four terse, front-loaded sentences with no filler; the side-effect warning leads and the sibling pointer trails. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description supplies the safety signal, idempotency, return shape, and the delete alternative. Missing only permission/auth context, which an agent might still need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description highlights `active`'s soft-retire behavior, but that meaning is already documented in the schema property, so it adds little beyond the structured field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Patch') plus resource ('an existing entity's fields') with the required `id` implied. It explicitly distinguishes itself from the delete sibling, so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the hard-delete alternative (`calendar_entities_delete`) and states the soft-retire use case via `active`. It stops short of clarifying patch-vs-add boundaries or partial-update expectations, but the main routing decision is covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_events_addA

SIDE-EFFECTFUL. Add a one-off time window (downtime, maintenance, a delivery, a shift, an inspection, etc.) to an entity. NOT idempotent: calling this twice creates two events. starts_at/ends_at must be ISO 8601 with an explicit timezone (Z or ±HH:MM), naive timestamps are rejected because their meaning would be ambiguous once stored as UTC. Returns {event}. Follow up with calendar_events_conflicts to check for overlaps.

NameRequiredDescriptionDefault
typeYesFreeform event type, e.g. 'downtime', 'maintenance', 'delivery', 'shift'.
notesNoOptional free-text notes about the event.
titleYesShort title for the event.
entityYesEntity the event applies to, name (case-insensitive) or numeric id.
sourceNoFreeform provenance, e.g. 'email from ops team'.
ends_atYesISO 8601 timestamp with explicit timezone; must be after starts_at.
starts_atYesISO 8601 timestamp with explicit timezone, e.g. '2026-08-03T02:00:00+05:30'.
original_timezoneNoIANA timezone the window was originally communicated in, for display.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does so well: it flags the write as side-effectful, warns it is NOT idempotent (duplicate calls create duplicate events), and explains that naive timestamps are rejected and why. It omits permission/auth requirements and whether the target entity must already exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, each carrying distinct information; the side-effect and non-idempotency warnings are front-loaded before the parameter constraints and the follow-up pointer. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-required-parameter mutation tool with no annotations and no output schema, it covers the critical risks (duplication, timezone format, return field) and names the natural next call. It could still say more about failure modes, entity resolution, or permissions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: the timezone requirement is stated as a hard rejection rule with rationale (ambiguity once stored as UTC), and it documents the returns shape. It adds no clarification for entity, type, notes, source, or original_timezone beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Add a one-off time window ... to an entity') and enumerates concrete examples (downtime, maintenance, delivery, shift). An agent can distinguish it from calendar_events_update/delete/list and from calendar_entities_* without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent to the sibling calendar_events_conflicts for overlap checking, and the 'one-off' qualifier implies when this tool is appropriate. It stops short of stating exclusions, e.g. that recurring schedules should not go through this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_events_conflictsA

Read-only; no side effects, auth, or rate limits. Report scheduling conflicts in a window: overlaps on the same entity (overlap), overlaps between linked entities one hop apart (linked_overlap), and gaps smaller than a minimum buffer (insufficient_buffer). Computed on demand, nothing is persisted. Buffer defaults to the calendar.min_buffer_minutes setting (0 = off); pass buffer_minutes to override for this call. Returns {conflicts, count, buffer_minutes, events_considered}. See also calendar_events_list with include_conflicts.

NameRequiredDescriptionDefault
toYesWindow end, ISO 8601 with explicit timezone.
fromYesWindow start, ISO 8601 with explicit timezone.
entityNoScope to one entity (and its linked neighbors), name or numeric id.
buffer_minutesNoOverride the configured minimum gap between events, in minutes. 0 disables buffer checks.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the read-only/no-auth/no-rate-limit profile, that results are 'Computed on demand, nothing is persisted', and the buffer default semantics (config setting, 0 = off, per-call override). This is rich behavioral context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the safety profile, then conflict types, then computation/storage behavior, then the buffer rule, then the return shape and a sibling pointer. Each sentence earns its place and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return shape ({conflicts, count, buffer_minutes, events_considered}) and covers storage, defaults, and scoping. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by naming the backing setting (calendar.min_buffer_minutes), explaining that the default comes from it and that buffer_minutes overrides per call, and clarifying entity scoping includes linked neighbors.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Report scheduling conflicts in a window') and enumerates the three conflict categories it detects (overlap, linked_overlap, insufficient_buffer). It also distinguishes itself from the sibling calendar_events_list, so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operating context ('Read-only; no side effects, auth, or rate limits') and points to the alternative ('See also calendar_events_list with include_conflicts'). It stops short of an explicit rule for when to choose this tool over that alternative, so it is clear context without full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_events_deleteA

DESTRUCTIVE. Delete one event by id. Idempotent: deleting an already-absent id is a no-op. Returns {success, existed}.

NameRequiredDescriptionDefault
idYesEvent id to delete.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does a fair job: it flags DESTRUCTIVE explicitly and explains idempotency ('deleting an already-absent id is a no-op'), which is the kind of trait an agent cannot infer from the schema. It omits auth/permission requirements and any side effects such as attendee notifications or whether recurrence masters are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, zero filler, and the most consequential fact ('DESTRUCTIVE') is front-loaded. Every clause conveys distinct information: risk, operation, idempotency semantics, return shape.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter deletion tool with no annotations and no output schema, the description covers the essentials: what it does, that it is irreversible, that repeats are safe, and the return shape `{success, existed}` — which usefully compensates for the absent output schema. Only permission/prerequisite context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single `id` parameter, so the baseline is 3. The description adds only the phrase 'one event by id' — no format, range, or source for the id beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource with scope: 'Delete one event by id.' An agent can immediately tell this removes a calendar event rather than an entity or a file. It never names or contrasts against the closest siblings (calendar_events_update, calendar_events_list), 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'DESTRUCTIVE' and the single-event scope, which is enough to know this is the removal path. However, there is no explicit when-to-use, no prerequisites, and no guidance on choosing between this and calendar_entities_delete or calendar_events_update for corrections.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_events_listA

Read-only; no side effects, auth, or rate limits. List events overlapping a window (half-open: an event ending exactly at from is excluded), optionally filtered by entity/type. Set include_conflicts to also run conflict detection over the same window and attach it. Returns {events, count, conflicts?}. For conflicts alone, prefer calendar_events_conflicts.

NameRequiredDescriptionDefault
toNoWindow end, ISO 8601 with explicit timezone.
fromNoWindow start, ISO 8601 with explicit timezone.
typeNoFilter to an exact event type.
limitNoMax rows (default 500).
entityNoFilter to one entity, name or numeric id.
include_conflictsNoIf true, also compute conflicts for `from`..`to` (both required when set) and include them in the response.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it declares read-only, no side effects, no auth, and no rate limits, plus the half-open interval semantics and the return shape. It stops short of disclosing pagination/limit behavior or what a conflict record looks like, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the safety profile, then scope, then optional behavior, then the routing alternative. Four dense clauses that each earn their place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description supplies the return shape `{events, count, conflicts?}` and covers the one non-obvious edge case (half-open boundary). Everything an agent needs to call it correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema: the half-open window semantics for `from` (an event ending exactly at `from` is excluded) and the coupling of include_conflicts to both from/to. This is real added value over the already-documented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (events) with precise scope (overlapping a window). It explicitly distinguishes itself from the sibling calendar_events_conflicts, so an agent can route between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit context for optional filtering (entity/type) and a clear alternative: 'For conflicts alone, prefer calendar_events_conflicts.' It also tells the agent when to set include_conflicts. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_events_updateA

SIDE-EFFECTFUL. Patch an existing event (move it, retitle it, re-home it to a different entity, etc.). The merged result is re-validated: shrinking ends_at below starts_at throws. Returns {event}.

NameRequiredDescriptionDefault
idYesEvent id.
typeNoFreeform event type, e.g. 'downtime', 'maintenance', 'delivery'.
notesNoOptional free-text notes.
titleNoShort title for the event.
entityNoMove the event to a different entity, name or numeric id.
sourceNoFreeform provenance, e.g. 'email from ops team'.
ends_atNoISO 8601 timestamp with explicit timezone.
starts_atNoISO 8601 timestamp with explicit timezone.
original_timezoneNoIANA timezone the window was originally communicated in, for display.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it flags SIDE-EFFECTFUL, discloses the merge-then-revalidate behavior, and names a concrete failure case (`ends_at` below `starts_at` throws), plus the return shape. It omits permission/auth requirements and reversibility, which are relevant for a mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the SIDE-EFFECTFUL warning, then the operation, then the validation/return contract. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 params already fully documented by the schema, no output schema, and no annotations, the description covers the essentials: what it mutates, the validation failure mode, and the return shape. Only auth/permission context is missing, which is minor against otherwise complete coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining that fields like entity/title can be patched and by describing the interaction constraint between `ends_at` and `starts_at`. It still leaves most parameter syntax (ISO formats, freeform fields) to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (patch) and resource (an existing event), and enumerates the kinds of changes allowed (move, retitle, re-home to another entity). The word 'existing' cleanly separates it from calendar_events_add and calendar_events_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'Patch an existing event', which signals this is for modifying, not creating. However, no explicit when-to-use/when-not guidance or named alternatives (e.g. add/delete) are given, and no prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_export_icsA

Read-only; no side effects, auth, or rate limits. Export events in a window as an RFC 5545 ICS calendar (UTC times, no VTIMEZONE needed) for import into Outlook/Calendar apps. Returns {ics, event_count} with the calendar text as a JSON string field.

NameRequiredDescriptionDefault
toYesWindow end, ISO 8601 with explicit timezone.
fromYesWindow start, ISO 8601 with explicit timezone.
entityNoFilter to one entity, name or numeric id.
calendar_nameNoCalendar display name (X-WR-CALNAME). Defaults to 'Kontexta Calendar'.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well: read-only, no side effects, no auth, no rate limits, UTC times so no VTIMEZONE is needed. It also discloses the return shape (`{ics, event_count}` with a JSON string field), which is essential given there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the safety/behavioral profile before the format and return details. Every clause earns its place; nothing is repeated from structured data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-annotation, no-output-schema read tool, the description covers safety profile, output format standard, timezone handling, intended consumer, and return shape. An agent has everything needed to call it and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters with types and semantics (ISO 8601 with timezone, entity filter, X-WR-CALNAME default). The description adds only the generic notion of a 'window' and does not extend meaning beyond the schema. Baseline 3 is correct here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: export events in a window as an RFC 5545 ICS calendar. The namespaced 'calendar_export_ics' plus the explicit output format makes it instantly distinguishable from calendar_events_list and the entity CRUD siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when this is the right tool: producing an importable ICS file for Outlook/Calendar apps. It stops short of naming the alternative (calendar_events_list) for simply inspecting events, so the routing decision is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_createA

Create one or more markdown, mermaid, or HTML files in the knowledge base or project (up to 200 per call). Pass a single-element files array for the one-file case. This operation writes each file to disk and adds it to the local SQLite FTS5 index. Destination is 'knowledge' (global KB) or 'kontexta' (internal Kontexta schema file, project_id required). 'project' is REFUSED: nothing created through kxta is written into a project repo. If destination is 'knowledge', 'kind' is strictly required for md files, pick 'dictionary' (authoritative source-of-truth) or 'note' (informational snapshot); see the kind param for the rubric. No external auth required. Rate limits do not apply (local operation). Per-item failures are isolated to errors[], the rest of the batch still commits; a single-item call still reports its failure the same way. Returns {created_count, error_count, created, errors}. If a destination directory does not exist, it will be created automatically. To modify an existing file, use 'files_update' instead. Pass format='mmd' on an item to create a Mermaid diagram file (.mmd), for destination='knowledge' it's auto-routed to the KB's mermaid/ bucket (kind ignored, not required); Pass format='html' for an HTML report, destination MUST be 'knowledge' (html reports are auto-routed to the KB's html/ bucket; kind is ignored and not required for html). Format defaults to 'md'.

NameRequiredDescriptionDefault
filesYesFiles to create. Single-element array = one-file case. Max 200 per call.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so richly — writes to disk AND the SQLite FTS5 index, 'project' is REFUSED, no external auth, no rate limits, auto-creation of missing directories, and per-item failure isolation (errors[] with the rest of the batch still committing). This is exactly the behavioral context an agent needs before calling a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and batching rule, and every sentence is substantive. It is long and info-dense with somewhat sprawling ordering (returns shape and directory auto-creation sit mid-paragraph), so it is not maximally tight, but nothing is padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description covers creation side effects, destination constraints, format routing, failure semantics, and even the return shape ({created_count, error_count, created, errors}). An agent has everything needed to invoke it correctly across the batch and single-file cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, yet the description adds routing semantics beyond it: format='mmd' auto-routes to the mermaid/ bucket (kind ignored), format='html' requires destination='knowledge' and routes to html/ (kind ignored), and format defaults to 'md'. The destination='knowledge' vs 'kontexta' (project_id required) distinction is clarified further than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create'), the resource (markdown, mermaid, or HTML files), the container (knowledge base or project), and the batching scope (up to 200 per call). It also names the sibling used for modification ('files_update'), so an agent can distinguish it from other files_* tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: use 'files_update' to modify existing files, single-element array for the one-file case, and per-destination rules ('kind' strictly required for md to knowledge, project REFUSED). When/when-not conditions are stated rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_deleteA

DESTRUCTIVE. Permanently delete one or more files by ID (up to 500 per call). Pass a single-element ids array for the one-file case. KB files are unlinked from disk AND removed from the FTS5 index; project reference files only have their index entry removed (the file on disk is left alone so the watcher does not fight your editor). Not idempotent: deleting an unknown ID surfaces as a per-item error. No external auth or rate limits. Per-ID failures are isolated to errors[] and the rest of the batch still commits: partial success is the norm, always inspect error_count. Returns {deleted_count, error_count, deleted, errors}. Use only when the file is truly obsolete; to deprioritise without losing data, untag (tags_remove) or unfavorite (tags_set_favorite) instead. To preview the set before deleting, run files_list with the same filter and confirm the IDs.

NameRequiredDescriptionDefault
idsYesFile IDs to delete. Single-element array = one-file case. Max 500 per call.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does so: it discloses permanence, the KB-vs-project disk/index asymmetry, non-idempotency with per-item errors on unknown IDs, absence of external auth or rate limits, per-ID failure isolation, and the partial-success norm. This is far beyond what a bare schema could convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is dense and front-loaded with the DESTRUCTIVE warning and the core action, and nearly every sentence carries operational weight. It is on the long side, but for a destructive batch tool the length is largely earned rather than padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description still supplies safety profile, per-class behavior, failure semantics, and the response shape `{deleted_count, error_count, deleted, errors}`. An agent has everything needed to call it correctly and interpret partial failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single `ids` parameter is fully documented including minItems/maxItems, so the baseline is 3. The description restates the single-element-array convention and the 500 cap, adding convenience but little new syntax or format meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with scope: 'Permanently delete one or more files by ID (up to 500 per call).' It also distinguishes the two file classes (KB files vs project reference files) and their differing delete semantics, so it is clearly separable from siblings like files_update or tags_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit 'Use only when the file is truly obsolete' gating, two named alternatives for the deprioritise case (tags_remove, tags_set_favorite), and a preview workflow via files_list with the same filter. When-to-use, when-not, and alternatives are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_describeA

Return everything ABOUT a file without pulling its content (no token cost from the body). Tags, size, est_tokens, history depth, related-file ids, backlinks, project, folder, last edited. Operates locally with no auth or rate limits. Use this when you'd otherwise chain files_read + tags_list + files_get_history + files_find_related just to decide whether to actually read the file. Parameters: 'id' must be a valid integer file ID.

NameRequiredDescriptionDefault
idYesFile ID

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses no token cost from the body, local execution, and no auth or rate limits, and enumerates exactly what fields are returned. It does not cover error behavior or edge cases (e.g., missing/invalid IDs), which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the core benefit and the body-cost rationale before the detail. The field enumeration, behavioral traits, usage rule, and parameter note each contribute, though the field list is dense enough that it could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey the return shape — and it does by listing tags, size, est_tokens, history depth, related ids, backlinks, project, folder, and last edited. Cost, auth, and usage context are also covered, leaving it essentially complete for a single-parameter metadata tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameter is already documented, and the description mostly restates it ('id' must be a valid integer file ID). The only added nuance is the 'integer' constraint versus the schema's declared type 'number', which is marginal value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — 'Return everything ABOUT a file without pulling its content' — with the crucial scope boundary (metadata, not body) front-loaded. It clearly distinguishes itself from files_read and the other chained siblings, so an agent can tell them apart without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names when to use it ('when you'd otherwise chain files_read + tags_list + files_get_history + files_find_related') and the decision it supports ('just to decide whether to actually read the file'). The alternative tools and the condition selecting this one are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_diff_against_diskA

Diagnose drift between one file's disk content and its FTS index. Status is one of in_sync, diverged, disk_unreadable, or no_index_row. On divergence returns sizes, line counts, the first divergent line number, and the disk vs index sample for that line: NOT a full diff (use files_get_diff for full diffs between commits). Read-only; no side effects, auth, or rate limits. Use when search results look stale; if status is diverged or no_index_row, run projects_refresh_index to fix.

NameRequiredDescriptionDefault
file_idYesFile ID

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it declares the tool is read-only with no side effects, no auth, and no rate limits, and enumerates all four possible status outcomes plus exactly which fields are returned on divergence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences, front-loaded with purpose, then return shape, then the read-only caveat, then usage routing. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the status enum and the divergence payload in detail. Combined with the routing advice to projects_refresh_index, an agent has everything needed to call and act on this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter file_id has 100% schema coverage, so the schema already documents it. The description adds no syntax, format, or constraint details beyond what the schema provides; baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: "Diagnose drift between one file's disk content and its FTS index." It immediately distinguishes itself from the sibling files_get_diff by explicitly saying it returns diagnostics, not a full diff.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ("Use when search results look stale"), explicit follow-up action ("if status is diverged or no_index_row, run projects_refresh_index"), and an explicit alternative for the overlapping case (files_get_diff for full diffs). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_get_diffA

Return the unified diff of one file between two commit hashes (typically obtained from files_get_history for the same file). Read-only; no side effects, auth, or rate limits. Order matters: commit_a is treated as the earlier side; reversing the args inverts the diff. Throws if either hash is unknown to the file's repo. Use after files_get_history to see WHAT changed, not just THAT it changed.

NameRequiredDescriptionDefault
file_idYesID of the file
commit_aYesEarlier commit hash (from get_history)
commit_bYesLater commit hash (from get_history)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: read-only, no side effects, auth, or rate limits, plus argument-order semantics ("reversing the args inverts the diff") and an error condition ("Throws if either hash is unknown"). This is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the return value, then behavior, then ordering, then error, then usage. Every sentence earns its place with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema or annotations exist, yet the description fully covers what is returned (unified diff), safety profile, argument ordering, failure mode, and relationship to files_get_history. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), and the description adds real meaning: commit_a is treated as the earlier side and reversing args inverts the diff. This explains ordering semantics that the schema's field descriptions only partially imply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Return the unified diff") and resource scope ("of one file between two commit hashes"). It clearly defines the range being diffed. It does not explicitly disambiguate from the sibling files_diff_against_disk, though the commit-hash scope implies the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use guidance: "Use after `files_get_history` to see WHAT changed, not just THAT it changed," and notes the hashes are typically obtained from that tool. It gives clear context but names no alternatives/exclusions to route away from.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_get_historyA

Return the git commit history for one file (newest first), each entry with hash, message, date, and author. Reads the file's owning repo: the project's git repo for project files, the KB backup repo for KB files. Read-only; no side effects, auth, or rate limits. Returns {file_id, path, history}; an empty array means the file has not been committed yet. Use to understand a file's evolution before editing or restoring. Pair with files_get_diff to see exact line changes; use files_restore to roll back.

NameRequiredDescriptionDefault
file_idYesID of the file

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full behavioral burden and does so: it declares read-only, no side effects, no auth, no rate limits, and clarifies which repository is read (project git repo vs KB backup repo). It also explains the empty-array case, which is a meaningful edge condition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core behavior and return shape, then adds behavior, then usage routing. Every sentence contributes something (return contract, repo resolution, safety profile, empty-result meaning, sibling routing) with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return envelope (`{file_id, path, history}`), the entry shape, and the empty-array semantics. For a single-parameter read tool, nothing an agent needs to call or interpret it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, and schema coverage is 100%, so the schema already documents file_id fully. The description adds mild interpretive value by explaining that the owning repo is resolved from the file (project vs KB), but adds no format or constraint details beyond that. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource ('Return the git commit history for one file'), plus ordering ('newest first') and the per-entry fields (hash, message, date, author). An agent can immediately distinguish this from files_get_diff or files_restore without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the use case ('understand a file's evolution before editing or restoring') and routes to two named siblings with their conditions: files_get_diff for exact line changes, files_restore to roll back. Both when-to-use and alternatives are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_listA

List file metadata with optional filters (project_id, tag, favorite, folder, untagged, kind) and pagination. Read-only; no side effects, auth, or rate limits. Each row is annotated with tags, est_tokens, size_bytes, and content_class; the response includes total_est_tokens so you can budget before reading bodies. project_id: null returns ONLY Knowledge Base files; omit the field to span everything; kind narrows to one content class. Use to browse known structure; for keyword/content lookup use files_search; for a denser whole-vault dump use projects_map.

NameRequiredDescriptionDefault
tagNoFilter by tag name
kindNoFilter by content class. dictionary = authoritative KB, note = informational KB, journal = time-log, project = project file.
limitNoMaximum number of results
folderNoFilter by folder path
offsetNoOffset for pagination
favoriteNoFilter by favorite status
untaggedNoIf true, return only files that have no tags. Useful for bulk-tagging workflows.
project_idNoFilter by project ID. Pass null to list ONLY Knowledge Base files (project_id IS NULL).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it declares read-only, no side effects, no auth, no rate limits, and describes the response shape (per-row tags/est_tokens/size_bytes/content_class plus total_est_tokens for budgeting). It stops short of stating pagination defaults or result ordering.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then behavior, then parameter nuances, then usage routing — a logical order with no filler. It is dense with semicolon-joined clauses, so slightly more packed than an ideal single-purpose blurb.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter read tool with no output schema, the description covers the returned row fields, the budgeting token total, filter semantics, and alternatives. Minor gaps remain around pagination limits/ordering, but nothing that would cause a wrong call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning the schema lacks: the distinction between 'project_id: null' (KB-only) and omitting the field (span everything), and that kind narrows to a single content class. It adds cross-parameter semantics rather than restating field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List file metadata') plus the scope of its optional filters, and explicitly separates itself from files_search and projects_map. An agent can identify the tool's role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: 'Use to browse known structure; for keyword/content lookup use files_search; for a denser whole-vault dump use projects_map.' Names both alternatives and the condition that selects each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_moveA

Move/rename a KB file (project-repo files are refused). Destination 'new_path' must be absolute and resolve INSIDE the file's owning project or global knowledge directory. Cross-project moves are rejected. Alternative: pass kind='dictionary'|'note' (with no new_path) to move a KB file into the mirrored path in the other class tree, subfolder path is preserved. Operates locally with no auth or limits.

NameRequiredDescriptionDefault
kindNoMove the file to the mirrored path in the other class tree. Subfolder path is preserved: knowledge/dictionary/slt/ids.md ↔ knowledge/notes/slt/ids.md. Ignored if `new_path` is also provided.
file_idYesFile ID
new_pathNoAbsolute destination path

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses authentication ('no auth or limits'), the local operation scope, and the path-resolution constraints. It does not state overwrite behavior or what happens to an existing file at the destination, leaving one behavioral gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then layers constraints and the alternative mode in a compact four-sentence block. Dense but every sentence adds actionable information; only the parenthetical examples could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema or annotations exist, and the description covers constraints, both calling modes, and auth/limit behavior sufficiently for correct invocation. Only destination-collision/error semantics are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% so baseline is 3, but the description adds meaning beyond the schema by specifying that new_path 'must be absolute and resolve INSIDE the file's owning project or global knowledge directory' and clarifying the kind-mode semantics (subfolder path preserved).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Move/rename a KB file') and immediately scopes it with the constraint that project-repo files are refused. An agent can distinguish this from files_create/files_update/files_delete without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not conditions (project-repo files refused, cross-project moves rejected) and an explicit alternative calling mode (pass kind='dictionary'|'note' with no new_path to move into the mirrored class tree). The when-to-use and when-not are both spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_readA

Read one or more files, in full or in part. Modes: single-by-id (id), single-by-path (path, absolute on-disk path, must be exactly as indexed), batch-by-id (ids, up to 200), partial-by-heading (id+section), partial-by-line-range (id+lines). Exactly one of id/path/ids is required. section and lines are mutually exclusive and only valid with id (not ids or path). Read-only; no side effects, auth, or rate limits. Response shape: a single file object (with content, tags, est_tokens) for id/path; a partial-content object for section/lines; {files, total_est_tokens, error_count, errors} for ids (per-ID failures isolated, batch never partial-throws). Prefer files_describe to inspect without paying body tokens.

NameRequiredDescriptionDefault
idNoSingle file by ID.
idsNoBatch mode: multiple file IDs (max 200 per call); returns an array plus aggregate token cost.
pathNoSingle file by absolute on-disk path (must match exactly what Kontexta indexed).
linesNoPartial read: 1-indexed inclusive line range. Requires `id`; mutually exclusive with `section`.
sectionNoPartial read: return only this heading's body (case-insensitive exact-string after trim). Requires `id`; mutually exclusive with `lines`.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full disclosure burden and does so: 'Read-only; no side effects, auth, or rate limits.' It also documents batch failure semantics ('per-ID failures isolated, batch never partial-throws'), which is non-obvious behavior an agent needs before choosing a mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then packs modes, constraints, behavioral guarantees, and response shape into dense, well-ordered sentences with no filler. It is long but nearly every clause carries an operational constraint, so little could be cut without losing routing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema provided, the description compensates by describing all three response shapes (single file object, partial-content object, and the {files, total_est_tokens, error_count, errors} batch envelope). For a 5-param, nested-object tool with no annotations, nothing needed to call it correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds constraints the JSON schema cannot express: exactly one of id/path/ids is required, section/lines are mutually exclusive, and both are valid only with id (not ids or path). It also clarifies the path must be the exact indexed absolute path, which sharpens a fuzzy parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read one or more files, in full or in part') and enumerates every mode with the exact parameter combination that triggers it. It also distinguishes itself from a sibling by naming files_describe as the inspect-without-cost alternative, so an agent can route correctly without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Each mode is tied to a concrete condition (single-by-id, single-by-path, batch up to 200, partial-by-heading, partial-by-line-range), and it explicitly routes inspection-only work to files_describe. It stops short of addressing other close siblings like files_read_outline or files_regex_search, so the guidance is clear but not fully exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_read_outlineA

Return a flat list of markdown headings for one file (level, text, line, byteStart, byteEnd). Read-only; no side effects, auth, or rate limits. Use as a cheap probe before files_read({ id, section }) or files_update({ file_id, section, content }) so you don't spend tokens on the full body just to learn what sections exist. Empty outline means the file has no markdown headings (it may still have content: fall back to files_read in full or files_read({ id, lines })).

NameRequiredDescriptionDefault
file_idYesFile ID

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so: it declares read-only behavior, no side effects, no auth requirement, and no rate limits — exactly the behavioral context an agent needs. It also discloses the empty-result edge case and its different meaning (no headings versus no content).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose, safety profile, then the decision guidance and fallback. The core capability and return shape are front-loaded before the routing advice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description compensates by naming the returned fields and explaining the empty-outline case. For a simple single-parameter read tool with a fully covered schema, nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single file_id parameter is already documented (albeit thinly as 'File ID'), which sets the baseline at 3. The description adds marginal value by using the parameter in example calls, implicitly flagging that this tool uses file_id while files_read uses id, but it doesn't explain what a file ID is or how to obtain one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Return a flat list of markdown headings for one file') and enumerates the exact return fields (level, text, line, byteStart, byteEnd). This clearly distinguishes it from siblings like files_read (full body) and files_regex_search without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly positions the tool as a 'cheap probe before files_read({ id, section }) or files_update({ file_id, section, content })', naming the alternatives and the condition (avoid spending tokens on the full body). It also covers the exclusion case: an empty outline means no headings, so fall back to files_read or files_read({ id, lines }).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_restoreA

DESTRUCTIVE. Overwrite a file's current on-disk content with the version recorded at a specific git commit, then re-index FTS. The hash MUST come from files_get_history for THIS file (foreign hashes throw). The current uncommitted content is lost unless it was already committed elsewhere. The file watcher may also pick up the change before this returns. No external auth or rate limits. Returns {file_id, path, hash, success, message}. Use only to undo accidental edits or recover a known-good version.

NameRequiredDescriptionDefault
hashYesCommit hash to restore from (from get_history)
file_idYesID of the file

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers: DESTRUCTIVE, uncommitted content is lost, a file-watcher race condition may apply, no external auth or rate limits, and the exact return shape. This is unusually complete behavioral disclosure for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded with the DESTRUCTIVE warning, and every sentence carries distinct information (precondition, data-loss, race, auth, return shape, scope). It reads as a compact block rather than flowing prose, but no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations exist, yet the description supplies the return shape, the safety profile, the prerequisite, and the destructive consequences. An agent has everything needed to invoke it correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantic constraints beyond the schema: hash must originate from files_get_history for this specific file, and foreign hashes throw. That constraint meaningfully changes how the agent sources the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (overwrite on-disk content with a git-commit version), names the follow-on effect (re-index FTS), and distinguishes itself from siblings like files_update, files_delete, and files_get_history. An agent can tell exactly what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes the use case ('Use only to undo accidental edits or recover a known-good version') and states a hard prerequisite: the hash MUST come from files_get_history for THIS file, with foreign hashes throwing. It routes the agent to the correct sibling for obtaining the input.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

files_updateA

Rewrite a KB file (project-repo files are refused: kxta never writes into a repo). Default = full-body replacement: content becomes the entire file, triggering disk write + FTS5 re-index. Pass section to instead rewrite ONLY that heading's body (case-insensitive exact-string after trim; the heading line itself is preserved, siblings untouched), saves context budget vs resending the whole file. Throws if section is set but the heading doesn't exist (this mode will NOT create a new section, append the section text via a full-body update first). Operates locally with no external auth or rate limits. Returns the updated file metadata including new estimated token counts.

NameRequiredDescriptionDefault
idYesFile ID
contentYesNew content. With `section` set, this replaces just that heading's body; otherwise it becomes the entire file body.
sectionNoCase-insensitive exact-string heading. When set, only this heading's body is rewritten instead of the whole file.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it discloses the repo-refusal constraint, the disk write + FTS5 re-index side effect, the throw-on-missing-heading behavior, that section mode will NOT create a new section, and the absence of external auth/rate limits. It even describes the return payload.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the operation and default behavior lead, followed by the section mode, then edge cases and environment notes. Every sentence earns its place, though the single-block paragraph is heavy and could be broken up for scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-param mutation tool with no annotations and no output schema, the description covers side effects, failure modes, environment constraints, and even the return shape (updated metadata with token counts). Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: `content` semantics depend on whether `section` is set, `section` matching is case-insensitive exact-string after trim, and the heading line/siblings are preserved. The throw condition further informs `section` usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Rewrite a KB file') and immediately distinguishes the two operating modes (full-body default vs section-scoped rewrite). It also differentiates from files_create by framing it as a rewrite and by the repo-refusal rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use guidance for the two modes, including the motivating benefit of `section` (saves context budget) and the failure condition. It stops short of naming a sibling alternative or a general 'when not to use update vs create' rule, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

folders_createA

Create a folder in the KB (a project_id is refused: kxta never writes into a project repo). Idempotent, creating an existing folder succeeds. Nested paths like notes/inbox create intermediates. REJECTS: empty names, null bytes, leading path separators, and any segment equal to .. (the call returns isError, no folder is touched). Side effect: a directory is mkdir'd on disk; no DB rows are written until a file lands inside. No external auth or rate limits. Returns {path, base_path}.

NameRequiredDescriptionDefault
nameYesFolder name (relative; supports nested paths via '/')
project_idNoProject ID. Pass null or omit to create the folder under the KB.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: idempotency, the exact rejection set (empty names, null bytes, leading separators, `..` segments) with the isError outcome, the disk mkdir side effect with the note that no DB rows are written until a file lands inside, and the absence of auth or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but tightly front-loaded: purpose first, then idempotency, then rejections, then side effects, then return shape. Every clause carries distinct operational information and none is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description covers purpose, validation failures, side effects, and the return shape `{path, base_path}`, which is exactly what an agent needs to call this correctly. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description earns above baseline by adding semantics the schema lacks: that passing a `project_id` is actively refused (not merely ignored) and that nested-path segments are validated against `..` traversal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (create a folder in the KB) and immediately scopes it by declaring that a `project_id` is refused because kxta never writes into a project repo. This distinguishes it from siblings like folders_list, folders_delete, and files_create 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditions: nested paths like `notes/inbox` are supported and create intermediates, and project_id is refused. It does not explicitly name an alternative sibling (e.g., where to put files once the folder exists), so it stops short of full when-to-use/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

folders_deleteA

DESTRUCTIVE: recursively delete a folder under the KB AND every file inside it (disk + FTS rows). REFUSES (returns isError) when project_id is supplied: deleting inside a registered project would race the file watcher and re-ingest the contents, remove project content via your editor instead. Same name validation as folders_create. Not recoverable from Kontexta after the call (only the git backup, if configured, retains it). No external auth or rate limits. Returns {success: true}.

NameRequiredDescriptionDefault
nameYesFolder name (relative)
project_idNoProject ID. Pass null or omit to delete from the KB. Project IDs are rejected.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: destructive/recoverable semantics, the project_id refusal returning isError with the race-condition rationale, git-backup caveat, and no auth/rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads 'DESTRUCTIVE' and packs the recursion, refusal, recovery, and return-value facts into a tight paragraph with no filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param destructive tool with no annotations and no output schema, the description supplies every needed fact: scope, refusal condition, irreversibility, backup caveat, and the return shape.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds value by explaining WHY project_id is rejected (file-watcher race) and cross-references the name validation rule from folders_create, exceeding what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('recursively delete a folder under the KB AND every file inside it') with explicit scope (disk + FTS rows), which clearly separates it from folders_list, folders_create, and single-file files_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit exclusion (refuses when project_id is supplied) plus the alternative path ('remove project content via your editor instead'), and notes the recursive scope that selects this over single-file deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

folders_listA

List folder paths under a project root (or the Knowledge Base when project_id is null/omitted). Returns {folders: string[], base_path} where folders are RELATIVE to base_path. Read-only; no side effects, auth, or rate limits. Throws if project_id references an unknown project. Use to discover where to drop a new file via files_create's folder argument or to navigate vault structure; to actually create one use folders_create.

NameRequiredDescriptionDefault
project_idNoProject ID. Pass null or omit to list KB folders.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so: it declares read-only status, absence of side effects, no auth requirement, no rate limits, and the specific failure mode ('Throws if project_id references an unknown project'). It also describes the return payload shape and the relative-vs-base_path semantics, which is behavior an agent needs before chaining into files_create.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core operation, then return contract, then usage routing. No filler, and each clause carries information the agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description supplies the return shape ({folders, base_path}) and the crucial relative-path caveat, plus error behavior and usage routing. Nothing needed to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents that null/omitted project_id lists KB folders, so the description largely restates it. It adds only the error condition for an unknown project id, which is more behavioral than parametric. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('folder paths') with explicit scope ('under a project root or the Knowledge Base when project_id is null/omitted'). It is immediately distinguishable from siblings like folders_create, folders_delete, and files_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names two use cases ('discover where to drop a new file via files_create's folder argument' and 'navigate vault structure') and routes creation to the alternative tool: 'to actually create one use folders_create.' This is a textbook when-to-use plus alternative pointer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hands_confirmA

Approve and EXECUTE a previously-issued Hands invocation by its single-use approval token. The token is returned by any confirm-required Hands tool; tokens expire after 60 seconds and CANNOT be reused. Side effect equals whatever the underlying Hand does: this can be highly destructive (running arbitrary shell commands, modifying files, etc.), so only call when the user has authorised the pending action. The token IS the auth (no external auth, no rate limits). Invalid, expired, or already-consumed tokens return an inert text response, NOT an error.

NameRequiredDescriptionDefault
tokenYesThe approval token from the pending response

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers: token is single-use, tokens expire after 60 seconds, side effects mirror the underlying Hand and can be highly destructive, the token itself is the auth (no external auth, no rate limits), and invalid/expired/consumed tokens yield an inert text response rather than an error. This is unusually rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then layers prerequisites, risk, and failure semantics in four tight sentences. No filler; every clause adds decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool this covers what an agent needs: prerequisite (a pending approval token), timing (60s expiry), risk profile (destructive potential), auth model (token is auth), and failure behavior (inert text, not error). Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single token parameter, so baseline is 3. The description goes beyond the schema by explaining the token's origin (returned by confirm-required tools), its lifetime (60s), and its single-use nature, all of which affect how and when the parameter is passed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (approve and EXECUTE) plus the exact resource (a previously-issued Hands invocation) and the mechanism (single-use approval token). This clearly separates it from siblings like hands_list and hands_reload, which do not execute anything.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the source of the token (any confirm-required Hands tool) and the condition for calling: 'only call when the user has authorised the pending action.' The when-not case is implied by that constraint. It doesn't name an alternative tool, but none exists for this execution step, so the guidance is effectively complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hands_listA

List every Hands command tool currently registered, with project scope, tool name, danger level, confirmation flag, and description. Hands tools come from per-project kontexta.json files loaded at register time. Pass schema: true to instead get the complete kontexta.json authoring reference (JSON schema, validation rules, security guarantees, limitations, annotated example), a static document, unrelated to any specific registered hand. Read-only; no side effects, auth, or rate limits. Use the default list mode to discover what side-effectful project commands the agent is permitted to run; use schema: true when helping a user write or fix a kontexta.json; reload after editing one with hands_reload.

NameRequiredDescriptionDefault
schemaNoIf true, return the kontexta.json authoring reference document instead of the registered-hands list. Default false.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it declares read-only, no side effects, no auth, no rate limits, and explains data provenance (per-project kontexta.json loaded at register time). It also discloses that schema mode returns a static document unrelated to any registered hand, a non-obvious behavioral trait.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the default mode returns, then the schema-mode override, then safety notes and routing. Dense and mostly waste-free, though the parenthetical enumeration of schema contents is long and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, yet the description enumerates the returned fields for list mode and characterizes the schema-mode payload, so an agent knows what it will receive. Safety, provenance, and routing are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: that the schema output is a static authoring reference (JSON schema, validation rules, security guarantees, limitations, example) and is unrelated to any specific registered hand, plus motivation for when to set it true.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource ('List every Hands command tool currently registered') and enumerates the projected fields (project scope, tool name, danger level, confirmation flag, description). It also distinguishes the dual mode from siblings like hands_reload and hands_confirm by naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes usage: default mode to discover side-effectful project commands, `schema: true` when helping a user author or fix a kontexta.json, and `hands_reload` after editing one. Covers when-to-use for both modes and names the follow-up alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

hands_reloadA

Re-scan every registered project's kontexta.json and rebuild the live Hands tool registry: newly-declared tools become callable immediately, removed tools disappear from tools/list. SIDE EFFECT is on the running MCP session's tool inventory only (no disk writes). Idempotent. No external auth or rate limits. Takes no parameters. Returns per-project load results (counts of registered/disabled tools and any validation warnings). Use after editing a kontexta.json mid-session; for the schema see hands_list({ schema: true }).

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the side effect scope (running session's tool inventory only, no disk writes), idempotency, absence of external auth/rate limits, and the shape of per-project load results including validation warnings.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the action and its effect come first, then side-effect/auth caveats, then invocation guidance. Every sentence adds distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description explains what is returned (per-project registered/disabled counts and validation warnings), and covers side effects, idempotency, and auth, leaving nothing an agent needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the schema-based baseline is 4; the description confirms 'Takes no parameters', leaving no ambiguity for the agent about arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Re-scan', 'rebuild') plus resource ('registered project's kontexta.json', 'live Hands tool registry'), with the concrete consequence that newly-declared tools become callable and removed ones disappear from tools/list. It also differentiates itself from sibling hands_list by pointing to it for the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to invoke: 'Use after editing a kontexta.json mid-session', and routes schema queries to hands_list({ schema: true }). It gives clear context but no explicit when-not-to-use or contrast against siblings like admin_refresh_session_context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

journal_commit_upgradesA

After dispatching subagents to upgrade mechanical journal entries to LLM-narrative, call this with the affected task slugs. Updates journal_meta.status_latest to mark the entries as upgraded.

NameRequiredDescriptionDefault
task_slugsYesTask slugs whose entries were upgraded by subagents.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It helpfully discloses the mutation target (journal_meta.status_latest) and the intent (mark entries as upgraded), but says nothing about idempotency, error handling for unknown slugs, or required permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first front-loads the trigger condition, the second states the effect. Every phrase earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation tool with no output schema and no annotations, the description covers purpose, trigger, and effect adequately. Minor gaps around idempotency/permission behavior keep it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single task_slugs parameter is already documented in the schema. The description adds only framing ('affected task slugs'), so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb-plus-resource ('commit upgrades' for journal entries) and states the resulting effect on journal_meta.status_latest. An agent immediately understands the operation. It does not, however, distinguish itself from siblings like journal_write, journal_status, or journal_distill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear triggering condition: call this 'after dispatching subagents to upgrade mechanical journal entries to LLM-narrative.' That is a genuine when-to-use instruction. It stops short of naming alternatives or exclusions (e.g., what to do if no subagents ran).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

journal_distillA

Run the distillation pipeline: read raw events since the high-water mark, group by topic, write mechanical markdown entries, advance high-water. Idempotent. Auto-provisions a project row for orphan slugs (e.g. default) that have no registered project yet.

NameRequiredDescriptionDefault
max_eventsNoMaximum raw events to process per run (default 200, max 2000).
project_slugNoProject slug to distill. Defaults to the current active project.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it discloses the high-water read, topic grouping, mechanical markdown writes, high-water advancement, idempotency, and auto-provisioning of project rows for orphan slugs. It still omits permissions, partial-failure behavior, and whether raw events are retained or deleted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three front-loaded sentences with no filler: purpose first, then the key idempotency trait, then the auto-provisioning side effect. Every sentence adds actionable information for selecting and calling the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-annotation pipeline tool, the description is nearly complete: it explains the pipeline steps, idempotency, and project-row provisioning. It lacks return-value expectations and failure-mode details, which is a gap given there is no output schema, but the core invocation context is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both max_events and project_slug are already documented. The description adds only behavioral context around orphan slugs (e.g. 'default') rather than new parameter-level meaning, matching the baseline of 3 when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — running the distillation pipeline — and details the internal sequence: read events since high-water, group by topic, write entries, advance high-water. This operationally distinguishes it from sibling journal tools like journal_write (manual entry) and journal_housekeep (cleanup), so an agent can identify its role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by explaining the pipeline's function, so an agent can infer it is for distilling journal events. However, it never states when to choose this over alternatives such as journal_write or journal_housekeep, nor does it give prerequisites or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

journal_housekeepB

Run journal retention/archival for a project. Idempotent. Prunes old raw .jsonl files and archives cold tasks per the configured retention policy.

NameRequiredDescriptionDefault
project_slugNoProject slug to housekeep. Defaults to the current active project.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose two meaningful traits: idempotency (safe to re-run) and destructiveness ('prunes old raw .jsonl files'). However, it omits whether pruning is reversible, what 'the configured retention policy' is or how it is set, and any permission requirements for a destructive maintenance operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler. The operation is front-loaded, and the destructive scope is stated immediately after rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-output-schema tool with full schema coverage, the definition covers the essentials, including the two most important behavioral facts (idempotent, prunes files). The remaining gap is the retention-policy configuration and irreversibility details, which are minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already documents itself, including the default to the current active project. The description only gestures at project scope ('for a project') without adding format or behavioral detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Run journal retention/archival for a project') and then concretizes it with the actual effects: pruning old raw .jsonl files and archiving cold tasks. That is far more informative than a tautology, but it never names or contrasts the adjacent journal tools (journal_distill, journal_status, journal_commit_upgrades), so an agent must infer the boundary itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: nothing says whether this should run on a schedule, after commits, or only when storage pressure exists, and no conditions or exclusions are stated. 'Retention/archival' implies a maintenance context, but that is inference rather than explicit instruction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

journal_statusC

Report the journal backlog and high-water mark for a project.

NameRequiredDescriptionDefault
project_slugNoProject slug to check. Defaults to the current active project.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. 'Report' implies a read-only operation, but the description says nothing about permissions, side effects, cost, or whether the call touches or mutates the journal. For a tool with zero annotation coverage, this leaves the agent guessing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, and the resource is named before the qualifying scope. It is efficient, though borderline under-specified rather than genuinely well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description is responsible for telling the agent what comes back, and it does not explain what a 'backlog' figure or 'high-water mark' actually represents or how it is formatted. Combined with the absence of annotations, the definition is too thin to let an agent interpret or act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is only one optional parameter (project_slug, documented as defaulting to the current active project), so the schema already does the heavy lifting. The description adds no meaning beyond it, which is the baseline 3 case for a fully documented single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Report') and a resource pair ('journal backlog and high-water mark for a project'), so the agent knows this is a read/diagnostic operation rather than a write. It does not, however, differentiate itself from the other journal_* siblings (journal_write, journal_housekeep, journal_distill, journal_commit_upgrades), and 'high-water mark' and 'backlog' are domain jargon left undefined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus journal_write, journal_housekeep, or journal_distill, and no prerequisites or conditions are stated. The agent must infer usage purely from the name and the one-word verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

journal_writeA

Write one event to the current project's journal. kind: 'append' = timestamped entry in today's daily journal file in the Knowledge Base (creates the file if it doesn't exist; both calls on the same calendar day return the same file_id; returns {file_id}). kind: 'note' = free-form decision/abandonment/observation, stored as an agent_note event in Layer 1 (surfaces in distilled task entries; returns {ok, recorded_at}). kind: 'intent' = topic/intent pivot, use when the user redirects what you're working on so the distillation step splits task buckets correctly (returns {ok, recorded_at}). Required fields depend on kind: 'append'/'note' need text; 'intent' needs summary.

NameRequiredDescriptionDefault
kindYesEvent kind. Selects which body fields are required and how the event is stored.
tagsNoOptional for kind='note'. Tags for the note.
textNoRequired for kind='append' or kind='note'. Body of the entry.
summaryNoRequired for kind='intent'. One-line summary of the new intent.
project_idNoOptional for kind='append'. Project ID context.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses file auto-creation, that same-day appends return the same file_id, the storage layer for notes (Layer 1 agent_note events), and the return shapes for each mode. It omits auth/permission requirements and 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by kind-by-kind breakdown, with return values parenthesized inline so the agent can scan quickly. It is dense and fairly long, but nearly every clause carries useful information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description correctly supplies return shapes per mode, and with no annotations it also covers storage semantics and file behavior. This is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the schema already documents each field's per-kind requirement. The description restates the kind-to-required-field map and adds what each kind semantically means, but adds little about parameter syntax or formats beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Write one event to the current project's journal') and then enumerates the three distinct modes with what each one does and stores. This clearly separates it from sibling journal tools like journal_distill, journal_status, and journal_housekeep.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives mode-specific selection guidance, notably the explicit 'use when the user redirects what you're working on' condition for kind='intent'. It does not, however, state when not to use this tool or name alternative siblings for capturing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_listA

List every registered project with id, name, absolute path, and a derived has_hands flag (true when the path exists on disk AND contains a kontexta.json). Read-only; no side effects, auth, or rate limits. Use to find the project_id to pass to scoped tools (files_search, files_list, admin_commit_backup, projects_refresh_index, etc.). To register a new project use projects_register; to inspect its Hands tools use hands_list.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does so well: it declares read-only, no side effects, no auth, no rate limits. It also discloses the derivation logic behind `has_hands`. It stops short of describing ordering/pagination or volume, so not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what it lists and its key output field, followed by behavior, then routing guidance. Three tight sentences, each earning its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no parameters, the description compensates by enumerating the returned fields and the derivation rule for the derived flag, and it covers the safety profile. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero input parameters, so the baseline is 4. The description adds value by explaining the meaning of the derived `has_hands` output flag rather than leaving it opaque, though it does not discuss any return-shape nuances beyond field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (every registered project) and enumerates the exact fields returned, including the derived `has_hands` flag with its derivation rule. It explicitly distinguishes itself from `projects_register` and `hands_list`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the primary use case explicitly ('to find the project_id to pass to scoped tools') and names concrete downstream tools, then states when to use alternatives (register with `projects_register`, inspect Hands tools with `hands_list`). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_mapA

Return a compact indented outline of folders, file titles, tags, and IDs in a single dense block: substantially fewer tokens than the equivalent files_list JSON for the same scope. Read-only; no side effects, auth, or rate limits. Capped at max_lines (default 5000); the response reports est_tokens and emits a warning field if it exceeds KONTEXTA_PROJECT_TOKEN_WARN. project_id: null = KB only; omit = everything. Defaults: include_tags=true, show_titles=true. Use to orient yourself in an unfamiliar vault or project; for keyword lookup use files_search.

NameRequiredDescriptionDefault
max_linesNoHard cap on output lines (each line ≈ one folder or file). Default 5000.
project_idNoRestrict to a single project. Pass null for knowledge-base-only files. Omit for everything.
show_titlesNoShow file titles instead of filenames. Default true.
include_tagsNoAppend #tags inline. Default true. Set false to shrink the outline.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so: it declares read-only, no side effects/auth/rate limits, discloses the max_lines cap, and reveals that the response includes est_tokens and may emit a warning field past KONTEXTA_PROJECT_TOKEN_WARN. This is unusually rich disclosure for a read tool and covers cost/truncation behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then behavior, then defaults, then the routing hint. Nearly every clause earns its place, though the sentence is packed enough that a reader must parse multiple clauses before reaching the 'use this when' guidance at the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description discloses the return shape (indented outline, est_tokens, warning field) and the truncation cap, plus scope and default behavior. For a 4-parameter, fully-defaulted read tool, nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3; the description adds value by restating defaults (include_tags=true, show_titles=true, max_lines=5000) and clarifying that project_id null means KB-only while omission means everything — a subtle distinction an agent could easily get wrong from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Return a compact indented outline of folders, file titles, tags, and IDs.' It also names the sibling it contrasts with (files_list's JSON) and explicitly distinguishes its output format from that alternative, so an agent can differentiate it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use ('to orient yourself in an unfamiliar vault or project') and an explicit alternative with its selecting condition ('for keyword lookup use files_search'). It further clarifies scope selection via project_id null vs omitted semantics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_refresh_indexA

Reconcile the FTS index against disk. For a project (project_id set), re-runs discoverFiles. For the KB (project_id null/omitted), walks knowledge/, ingests new .md files, reindexes any whose content hash drifted, and PRUNES rows for files no longer on disk. SIDE-EFFECTFUL: writes/updates/deletes file and FTS rows (the prune is destructive on stale index rows but never deletes files from disk). Idempotent, running twice is a near no-op. Skips files >5MB and standard junk dirs (node_modules, .git, dist, build, etc.). No external auth or rate limits. Returns {scope, newly_indexed, refreshed, pruned}. Use after editing files outside Kontexta, or when files_diff_against_disk reports drift.

NameRequiredDescriptionDefault
project_idNoProject ID. Pass null or omit to reindex the Knowledge Base.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it flags SIDE-EFFECTFUL writes/updates/deletes, clarifies the prune is destructive on index rows but never removes files from disk, notes idempotence ('running twice is a near no-op'), documents skip rules (>5MB, `node_modules`, `.git`, `dist`, `build`), and states there is no external auth or rate limiting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then scope branches, then the destructive warning in caps for scannability, then constraints and return shape. Every sentence adds an operational fact; none is filler, despite the length being justified by a no-annotation, side-effectful tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description supplies the return shape `{scope, newly_indexed, refreshed, pruned}`, covers both scope modes, states side effects and idempotence, and gives a usage trigger. Nothing an agent needs to invoke it safely and correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema by explaining what each branch of `project_id` does (project re-runs `discoverFiles`; KB walks `knowledge/`, ingests new .md, reindexes drifted hashes, prunes missing files). This is semantic value the schema's one-line description does not supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Reconcile the FTS index against disk') and immediately splits behavior into two precise scopes: project (`project_id` set → `discoverFiles`) and KB (`project_id` null → walks `knowledge/`). An agent can tell exactly what this does without opening the schema, and it is clearly distinguishable from index-adjacent siblings like `files_diff_against_disk`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Ends with an explicit trigger: 'Use after editing files outside Kontexta, or when `files_diff_against_disk` reports drift.' It names the sibling tool that signals when this one is needed, and the branch semantics tell the agent which mode to select via `project_id`.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_registerA

Register a new project and link it to the Kontexta knowledge system.

SIDE EFFECTS: Writes project metadata to disk (persisted in the Kontexta data directory). Scans the project root recursively to discover and index all markdown files into the local database. Registers any kontexta.json-declared Hands tools found in the project root. This operation is idempotent, re-registering an existing project updates its metadata without data loss.

AUTH / RATE LIMITS: None. Operates entirely on the local file system.

PARAMETERS:

  • name: Human-readable project name.

  • path: Absolute path to the project root. Required. DO NOT guess or assume the path based on the active editor workspace unless the user explicitly asks to register the "current" or "open" project. If the user provides a project name but no path, ask them for the absolute path before calling this tool. Fails with a descriptive error if the path does not exist or is inaccessible.

  • description: Optional free-text description stored with the project metadata.

RETURNS: A JSON object containing:

  • project: { id, name, path, description, created_at }

  • discovered_files_count: number of markdown files indexed

  • discovered_files: array of { path, est_tokens, size_bytes } for each file

  • total_est_tokens: estimated total token cost of all discovered files

  • hands: { found, tools_registered, tools_disabled, warnings }

  • warnings: array of non-fatal issues (e.g. scan failures, token budget exceeded)

ERROR CONDITIONS: Returns isError=true if path is missing or unresolvable. Scan failures are non-fatal and reported in warnings rather than as errors.

NameRequiredDescriptionDefault
nameYesProject name
pathYesAbsolute path to the project root. Required. DO NOT guess from the active workspace unless asked. Ask the user if unsure.
descriptionNoOptional project description

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it discloses disk writes, recursive scanning/indexing, Hands tool registration, idempotency ('updates its metadata without data loss'), and the absence of auth/rate limits. It also distinguishes fatal errors (missing path) from non-fatal scan warnings, which is exactly the behavioral detail an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Labeled sections (SIDE EFFECTS, AUTH/RATE LIMITS, PARAMETERS, RETURNS, ERROR CONDITIONS) front-load the core action and make the long content scannable. Every section conveys distinct information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema exist, so the description must cover both behavior and returns — and it does, enumerating the return object fields and the error/warning split. For a 3-param mutation tool, nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description meaningfully enriches the parameters: it specifies that path must be absolute, forbids guessing from the workspace, instructs the agent to prompt the user, and describes the failure mode. It adds real semantic value beyond the schema strings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Register a new project and link it to the Kontexta knowledge system') and the side-effects section clarifies the scope (indexing markdown, registering Hands tools), which implicitly separates it from read-only siblings like projects_list. It never explicitly names a sibling (e.g. projects_refresh_index or projects_map), so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: it tells the agent not to guess the path from the active workspace and to ask the user when only a name is given, and notes it fails on a nonexistent path. There is no explicit when-to-use-vs-alternatives routing against projects_refresh_index or projects_map, but the guidance it does provide is actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_add_reportA

Write an image or other binary resource into the shared reports/resources/ folder. Returns { filename, size, src, url }: embed the report's / tags with src exactly as given (e.g. <img src="resources/chart.png">); it is the only form that resolves correctly both in the dashboard viewer and in PDF/PNG export. Do not use url inside report HTML: it only works in the dashboard. Bytes are passed base64-encoded.

NameRequiredDescriptionDefault
filenameYesRequested filename with extension
bytes_base64YesBase64-encoded file bytes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, and it delivers the key behavioral gotcha: src resolves in both dashboard viewer and PDF/PNG export whereas url works only in the dashboard. It also discloses the exact return shape and that bytes are base64-encoded. It omits overwrite behavior, size limits, and permission requirements for a write tool, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and destination, then the return contract, then the embed guidance, each in one tight sentence. No filler; every clause conveys a distinct, useful fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description enumerates the returned fields (filename, size, src, url) and explains how to consume them, which covers the return contract. For a two-required-param write tool it only leaves mutation edge cases (overwrite, limits) unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both params (filename, bytes_base64) already documented, so the schema does the heavy lifting. The description only reinforces that bytes are base64-encoded and implies filename maps to the stored resource name, adding no format or constraint detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Write), resource type (image or other binary resource), and exact destination (shared reports/resources/ folder). An agent can distinguish it from sibling write tools like files_create and resources_clip_url without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit, actionable guidance on the returned fields: embed `src` in report HTML and never use `url` because url only resolves in the dashboard. This is clear in-tool usage direction, but it never states when to choose this tool over sibling alternatives (files_create, resources_clip_url), so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_clip_urlA

SIDE-EFFECTFUL: fetches an EXTERNAL URL and writes a NEW KB file. Downloads the page, extracts the main article via Readability, converts to markdown, and saves it under knowledge/urlclips/. Auto-classified as content_class='dictionary' (clipped external references are treated as authoritative reference material). NOT idempotent / no de-dup: re-clipping the same URL creates a second file. AUTH: anonymous by default; pass headers (e.g. {Cookie: 'session=...'} or {Authorization: 'Bearer ...'}) to clip behind logins. Kontexta does not rate-limit but the upstream may throttle. On auth-required pages returns isError with code: AUTH_REQUIRED, optional login_url, and a hint to retry with headers. Returns {file_id, path, title, source}. Use to ingest external docs into the KB.

NameRequiredDescriptionDefault
urlYesThe URL to clip
titleNoOptional title override (defaults to the page's <title>)
headersNoOptional HTTP headers to forward with the fetch (e.g. {"Cookie": "session=..."} or {"Authorization": "Bearer ..."}). Use to clip pages behind auth walls after AUTH_REQUIRED.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: SIDE-EFFECTFUL, non-idempotent with no de-dup, auto-classification as content_class='dictionary', anonymous-by-default auth, upstream throttling caveat, and the AUTH_REQUIRED error contract with login_url and retry hint. This is exactly the behavioral disclosure a mutation tool needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the SIDE-EFFECTFUL warning and non-idempotency come first, then AUTH, then error/return shape. Every sentence conveys actionable facts, though the single-block density is slightly heavy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no annotations and no output schema, the description supplies the return shape ({file_id, path, title, source}), the error contract, auth behavior, and side-effect profile. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents url, title, and headers (including the AUTH_REQUIRED/retry-with-headers workflow). The description largely restates this, adding only the concrete header examples, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource with full mechanism: 'fetches an EXTERNAL URL and writes a NEW KB file', then enumerates the pipeline (download, Readability extract, markdown convert, save under knowledge/urlclips/). This is clearly distinguishable from siblings like files_create or resources_add_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to ingest external docs into the KB' gives clear context, and the AUTH section explains when to pass headers (pages behind logins) after an AUTH_REQUIRED error. It lacks an explicit contrast against sibling alternatives (e.g. when to use files_create instead), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_delete_reportA

Delete a file from reports/resources/. No-op if it doesn't exist.

NameRequiredDescriptionDefault
filenameYesFilename (relative) of the resource to delete from reports/resources/.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses idempotent behavior ('No-op if it doesn't exist'), which is real value, but stays silent on whether the delete is permanent or recoverable and on any permission requirements for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the action and its scope front-loaded and the idempotency caveat immediately after. Nothing is padded or restated from the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-output-schema tool, the description covers purpose, scope, and the notable no-op behavior. It falls short only on the destructive-operation details (permanence, permissions) and on disambiguating itself from files_delete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is exactly one parameter and schema description coverage is 100%, so the schema already defines filename as a relative path within reports/resources/. Baseline 3 applies; the description adds no path syntax or format detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and a precisely scoped resource (a file under reports/resources/), which separates it from the sibling resources_add_report. It is less clearly differentiated from files_delete, since neither the name nor the description explains when the reports-scoped variant should be preferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance, and the near-twin sibling files_delete is never mentioned. The 'No-op if it doesn't exist' clause implicitly signals safe repeated invocation, but the agent must infer selection between the two delete tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_export_reportA

Export an existing HTML report as PDF or PNG. Returns { url } for the web-served download (requires an authenticated dashboard request) by default. Set inline_bytes=true to render in-process and get { bytes_base64 } instead: only available when running via the full kontexta CLI, not the standalone kontexta-mcp package; falls back to { url } with a note if unavailable.

NameRequiredDescriptionDefault
idYesFile ID of the HTML report to export.
formatNoOutput format: 'pdf' or 'png'.pdf
inline_bytesNoIf true, render in-process and return raw bytes (base64). Only available in the full kontexta CLI bundle; falls back to {url} otherwise.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does meaningful work: it discloses the auth requirement for the URL path, the CLI-vs-standalone availability constraint on inline_bytes, and the graceful fallback with a note. It omits any mention of rate limits or permissions beyond 'authenticated dashboard request', so it is strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and output formats, then the default return, then the opt-in variant. Three dense sentences with little waste, though the nested clauses about CLI availability make it slightly heavier than necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description properly names both return shapes ({ url } and { bytes_base64 }) and their conditions. Auth, availability, and fallback behavior are all covered; only granular operational details (limits, error modes) are absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already documents all three parameters, including the inline_bytes CLI caveat and the pdf/png enum. The description largely restates this, adding only the auth context for the URL return, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Export an existing HTML report as PDF or PNG') and is immediately distinguishable from siblings like resources_add_report, resources_list_reports, and resources_delete_report. No ambiguity about what the tool produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the default path (web-served { url }) and the condition that selects the alternative (set inline_bytes=true), including when that alternative is unavailable and what happens instead. It does not explicitly compare to sibling report tools, but the default-vs-opt-in routing is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resources_list_reportsA

List all files currently stored under reports/resources/. Returns filename, size in bytes, and served URL.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses return values (filename, size, served URL), which is helpful, but does not state whether the operation is read-only (implied by 'List'), auth requirements, pagination, or whether it recurses into subdirectories.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with zero filler; the purpose is front-loaded and the return information follows immediately. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with no output schema, the description provides all essential information: what is listed, where, and what is returned. It is complete enough for an agent to invoke correctly, though minor ambiguities about recursion remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (0 params), and the schema is empty. Per the rubric, 0 params yields a baseline of 4, as the description cannot add parameter meaning beyond an empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('files under reports/resources/'), and specifies the return fields. It clearly scopes to a subdirectory, distinguishing it from broader file-listing siblings like files_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives (e.g., resources_add_report, files_list). The scope implies its purpose, but there are no when/when-not statements or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tags_addA

Append tags to ONE file. Additive: existing tags are preserved; re-adding an existing tag is a no-op (idempotent per tag). New tag names auto-create rows in the global tags table. Persists to local SQLite. No external auth or rate limits. Returns {success: true}; throws if file_id is unknown. Use to label a single file. To tag every file matching a query in one call use tags_search; to remove tags use tags_remove.

NameRequiredDescriptionDefault
tagsYesArray of tag names to add
file_idYesFile ID

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does so thoroughly: additive semantics, per-tag idempotency, auto-creation of tag rows, local SQLite persistence, no auth or rate limits, success return shape, and the throw condition on unknown file_id. This is unusually complete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then behavior, then return values, then sibling routing. Dense but every sentence carries distinct information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the write semantics, idempotency, persistence, failure mode, and return shape despite no output schema, and routes to the two relevant siblings. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining what the tags parameter does semantically — additive append, idempotency, and auto-creation of unknown tag names — which the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'Append tags to ONE file' — the 'ONE' immediately signals this is single-file, distinguishing it from bulk tagging. Sibling tools tags_search and tags_remove are named, so an agent can route without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('Use to label a single file') plus explicit alternatives with their selecting conditions: bulk tagging via tags_search, removal via tags_remove. No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tags_listA

List every tag in the global SQLite database with id, name, and applied count. Read-only; no side effects, auth, or rate limits. Returns the entire taxonomy (not paginated). Use to discover existing labels before tagging (so you reuse rather than fork) or to find tag IDs to feed into tags_remove. For tags on a specific file, use files_describe.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so: it declares read-only behavior, no side effects, no auth or rate-limit requirements, and discloses that the full taxonomy is returned unpaginated. These are exactly the behavioral facts an agent needs that the empty schema cannot supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with what it does, then usage, then the alternative. Every sentence carries distinct information with no repetition of the name or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description compensates by naming the returned fields and noting the result is the complete unpaginated taxonomy. Nothing an agent needs to invoke or interpret this call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing to disambiguate. The description spends its words on return fields instead, which is appropriate for a no-argument listing tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (list), resource (tags in the global SQLite database), and the exact return fields (id, name, applied count). It explicitly distinguishes itself from siblings like tags_search, tags_suggest, and files_describe, so an agent can pick the right tool without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states concrete situations to use it: discovering existing labels before tagging to avoid forking the taxonomy, and finding tag IDs to feed into tags_remove. It also redirects to files_describe for file-scoped tags, giving an explicit alternative and the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tags_removeA

Detach one or more tag IDs from ONE file. Destructive on the link only: does NOT delete the file or the global tag definition (orphan tags survive in tags_list). Idempotent: removing an already-absent tag is a no-op. No external auth or rate limits. Returns {success: true}. Note: takes tag IDs (integers), not names, fetch them via tags_list. To remove ALL tags from many files via a query, see tags_search (additive only), there is no bulk-untag-by-query tool.

NameRequiredDescriptionDefault
file_idYesFile ID
tag_idsYesArray of tag IDs to remove

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and does so thoroughly: link-only destruction, orphan tag survival, idempotent no-op behavior, no auth/rate limits, and the return shape `{success: true}`. This is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope, then layered with behavior, return value, and parameter guidance. Despite covering many points, each sentence conveys distinct actionable information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description compensates fully: destruction semantics, idempotency, auth/rate limits, return value, and parameter sourcing are all covered. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds real value beyond the schema by stating that tag IDs are integers rather than names and pointing to `tags_list` to obtain them, plus reinforcing the single-file scope for file_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (detach tag IDs from a file) and pins the scope to ONE file, which distinguishes it from sibling bulk/query operations. An agent can identify the action without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs the agent to fetch IDs via `tags_list`, contrasts with `tags_search` (which is additive), and clarifies there is no bulk-untag-by-query tool. Both when-to-use and the limitations are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tags_set_favoriteA

Set or clear the favorite flag on one file (idempotent: re-setting the same value is a no-op; not a toggle, you pass the desired state). Persists to local SQLite. No external auth or rate limits. Returns {success: true}. Use to curate quick-access pins; files_list / files_search accept favorite: true to filter to the pinned set.

NameRequiredDescriptionDefault
file_idYesFile ID
favoriteYesFavorite status

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses idempotency, clarifies it is not a toggle, states persistence to local SQLite, notes no external auth or rate limits, and documents the return value `{success: true}`. This is rich context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then efficiently adds idempotency, persistence, auth, return, and discovery guidance in compact sentences. No filler; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 covers purpose, semantics, idempotency, storage, auth constraints, return shape, and downstream usage. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema's terse 'Favorite status' by clarifying that the `favorite` parameter is the desired state ('you pass the desired state') and that re-setting the same value is a no-op, which adds semantic meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Set or clear the favorite flag on one file.' It also clarifies the operation is not a toggle, which distinguishes it from a hypothetical toggle tool. An agent can tell it apart from siblings like tags_add or files_update without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear use case: 'Use to curate quick-access pins,' and explains how the result can be consumed via files_list / files_search filtering. It does not explicitly name a when-not condition or a direct alternative tool for setting favorites, but the semantic clarification ('not a toggle, you pass the desired state') provides strong usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tags_suggestA

Propose tags for a file by mining the existing tag corpus via FTS: picks distinctive terms from the file (≥4 chars, stopword-filtered) and returns tags applied to other files that score high on those terms. No LLM, no network. Already-applied tags are excluded so the suggestions are net-new. Read-only; no side effects, auth, or rate limits. Returns {file_id, path, existing_tags, suggestions: [{tag, score, sources}]}. Empty suggestions = no distinctive terms or no overlap with the existing taxonomy yet, bootstrap with tags_add first. Default limit 10, max 50. Suggestions are NOT auto-applied.

NameRequiredDescriptionDefault
limitNoMax suggestions to return (default 10)
file_idYesFile ID to suggest tags for

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discharges it: read-only, no side effects, no auth, no rate limits, no LLM, no network, already-applied tags excluded, and results are NOT auto-applied. It also discloses the scoring basis and output shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and mechanism, then behavior, then return shape, then edge case. Every sentence earns its place, though the 'Default limit 10, max 50' sentence duplicates the schema and is mildly redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Though there is no output schema, the description supplies the exact return shape (file_id, path, existing_tags, suggestions with tag/score/sources), the empty-result condition, and the bootstrapping remedy. An agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description's mention of default 10 and max 50 repeats the schema's limit docs rather than adding meaning beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (propose tags), the resource (a file), and the mechanism (mining the existing tag corpus via FTS with stopword-filtered distinctive terms). It is clearly distinguishable from siblings like tags_add, tags_search, and tags_list, which do not generate suggestions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names tags_add as the bootstrap alternative when suggestions are empty, and explains what an empty result means. It does not state when to prefer tags_search or tags_list for tag lookup, so it stops short of full when/when-not coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 116 tool updatesv6.1.2
    • Addedadmin_commit_backup
    • Addedadmin_get_profile
    • Addedadmin_onboard_agent
    • Addedadmin_overview
    • Addedadmin_refresh_session_context
    • Addedadmin_transfer_agent_context
    • Removedadmin.commit_backup
    • Removedadmin.get_profile
    • Removedadmin.onboard_agent
    • Removedadmin.overview
    • Removedadmin.refresh_session_context
    • Removedadmin.transfer_agent_context
    • Addedcalendar_entities_add
    • Addedcalendar_entities_delete
    • Addedcalendar_entities_link
    • Addedcalendar_entities_list
    • Addedcalendar_entities_update
    • Addedcalendar_events_add
    • Addedcalendar_events_conflicts
    • Addedcalendar_events_delete
    • Addedcalendar_events_list
    • Addedcalendar_events_update
    • Addedcalendar_export_ics
    • Removedcalendar.entities.add
    • Removedcalendar.entities.delete
    • Removedcalendar.entities.link
    • Removedcalendar.entities.list
    • Removedcalendar.entities.update
    • Removedcalendar.events.add
    • Removedcalendar.events.conflicts
    • Removedcalendar.events.delete
    • Removedcalendar.events.list
    • Removedcalendar.events.update
    • Removedcalendar.export_ics
    • Addedfiles_create
    • Addedfiles_delete
    • Addedfiles_describe
    • Addedfiles_diff_against_disk
    • Addedfiles_find_related
    • Addedfiles_get_diff
    • Addedfiles_get_history
    • Addedfiles_list
    • Addedfiles_move
    • Addedfiles_read
    • Addedfiles_read_outline
    • Addedfiles_regex_search
    • Addedfiles_restore
    • Addedfiles_search
    • Addedfiles_update
    • Removedfiles.create
    • Removedfiles.delete
    • Removedfiles.describe
    • Removedfiles.diff_against_disk
    • Removedfiles.find_related
    • Removedfiles.get_diff
    • Removedfiles.get_history
    • Removedfiles.list
    • Removedfiles.move
    • Removedfiles.read
    • Removedfiles.read_outline
    • Removedfiles.regex_search
    • Removedfiles.restore
    • Removedfiles.search
    • Removedfiles.update
    • Addedfolders_create
    • Addedfolders_delete
    • Addedfolders_list
    • Removedfolders.create
    • Removedfolders.delete
    • Removedfolders.list
    • Addedhands_confirm
    • Addedhands_list
    • Addedhands_reload
    • Removedhands.confirm
    • Removedhands.list
    • Removedhands.reload
    • Addedjournal_commit_upgrades
    • Addedjournal_distill
    • Addedjournal_housekeep
    • Addedjournal_status
    • Addedjournal_write
    • Removedjournal.commit_upgrades
    • Removedjournal.distill
    • Removedjournal.housekeep
    • Removedjournal.status
    • Removedjournal.write
    • Addedprojects_list
    • Addedprojects_map
    • Addedprojects_refresh_index
    • Addedprojects_register
    • Removedprojects.list
    • Removedprojects.map
    • Removedprojects.refresh_index
    • Removedprojects.register
    • Addedresources_add_report
    • Addedresources_clip_url
    • Addedresources_delete_report
    • Addedresources_export_report
    • Addedresources_list_reports
    • Removedresources.add_report
    • Removedresources.clip_url
    • Removedresources.delete_report
    • Removedresources.export_report
    • Removedresources.list_reports
    • Addedtags_add
    • Addedtags_list
    • Addedtags_remove
    • Addedtags_search
    • Addedtags_set_favorite
    • Addedtags_suggest
    • Removedtags.add
    • Removedtags.list
    • Removedtags.remove
    • Removedtags.search
    • Removedtags.set_favorite
    • Removedtags.suggest
  2. 24 tool updatesv5.0.0
    • Addedadmin.overview
    • Removedadmin.stats
    • Removedadmin.whats_new
    • Removedfiles.bundle_search
    • Changedfiles.create10 fields changed
      • removedInput schema / properties / content
        Removed value: -{
        -  "description": "Content of the file",
        -  "type": "string"
        -}
      • removedInput schema / properties / destination
        Removed value: -{
        -  "description": "Destination type",
        -  "enum": [
        -    "knowledge",
        -    "project",
        -    "kontexta"
        -  ],
        -  "type": "string"
        -}
      • addedInput schema / properties / files
        Added value: +{
        +  "description": "Files to create. Single-element array = one-file case. Max 200 per call.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "content": {
        +        "description": "Content of the file",
        +        "type": "string"
        +      },
        +      "destination": {
        +        "description": "Destination type",
        +        "enum": [
        +          "knowledge",
        +          "project",
        +          "kontexta"
        +        ],
        +        "type": "string"
        +      },
        +      "folder": {
        +        "description": "Optional folder path",
        +        "type": "string"
        +      },
        +      "format": {
        +        "description": "File extension to write. Defaults to 'md'. Use 'html' for HTML reports.",
        +        "enum": [
        +          "md",
        +          "mmd",
        +          "html"
        +        ],
        +        "type": "string"
        +      },
        +      "kind": {
        +        "description": "REQUIRED for destination='knowledge'. 'dictionary' = source of truth (mappings, glossaries, runbooks, PR templates). 'note' = snapshot (meeting notes, sprint reviews, PR findings, post-mortems). Test: if this file disagreed with the code, who wins? File wins → dictionary; file loses → note. Ignored for destination='project' or 'kontexta'.",
        +        "enum": [
        +          "dictionary",
        +          "note"
        +        ],
        +        "type": "string"
        +      },
        +      "project_id": {
        +        "description": "Project ID (required for project/kontexta destinations)",
        +        "type": "number"
        +      },
        +      "tags": {
        +        "description": "Optional array of tags",
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "title": {
        +        "description": "Title of the file",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "title",
        +      "content",
        +      "destination"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 200,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • removedInput schema / properties / folder
        Removed value: -{
        -  "description": "Optional folder path",
        -  "type": "string"
        -}
      • removedInput schema / properties / format
        Removed value: -{
        -  "description": "File extension to write. Defaults to 'md'. Use 'html' for HTML reports.",
        -  "enum": [
        -    "md",
        -    "mmd",
        -    "html"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / kind
        Removed value: -{
        -  "description": "REQUIRED for destination='knowledge'. 'dictionary' = source of truth (mappings, glossaries, runbooks, PR templates). 'note' = snapshot (meeting notes, sprint reviews, PR findings, post-mortems). Test: if this file disagreed with the code, who wins? File wins → dictionary; file loses → note. Ignored for destination='project' or 'kontexta'.",
        -  "enum": [
        -    "dictionary",
        -    "note"
        -  ],
        -  "type": "string"
        -}
      • removedInput schema / properties / project_id
        Removed value: -{
        -  "description": "Project ID (required for project/kontexta destinations)",
        -  "type": "number"
        -}
      • removedInput schema / properties / tags
        Removed value: -{
        -  "description": "Optional array of tags",
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / title
        Removed value: -{
        -  "description": "Title of the file",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "title",
        -  "content",
        -  "destination"
        -]New value: +[
        +  "files"
        +]
    • Removedfiles.create_many
    • Changedfiles.delete3 fields changed
      • removedInput schema / properties / id
        Removed value: -{
        -  "description": "File ID",
        -  "type": "number"
        -}
      • addedInput schema / properties / ids
        Added value: +{
        +  "description": "File IDs to delete. Single-element array = one-file case. Max 500 per call.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "maxItems": 500,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "id"
        -]New value: +[
        +  "ids"
        +]
    • Removedfiles.delete_many
    • Removedfiles.grep
    • Changedfiles.read8 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"File ID"New value: +"Single file by ID."
      • addedInput schema / properties / id / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / id / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / ids
        Added value: +{
        +  "description": "Batch mode: multiple file IDs (max 200 per call); returns an array plus aggregate token cost.",
        +  "items": {
        +    "type": "number"
        +  },
        +  "maxItems": 200,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / lines
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Partial read: 1-indexed inclusive line range. Requires `id`; mutually exclusive with `section`.",
        +  "properties": {
        +    "from": {
        +      "description": "First line (1-indexed, inclusive)",
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    },
        +    "to": {
        +      "description": "Last line (1-indexed, inclusive)",
        +      "exclusiveMinimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "from",
        +    "to"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "Single file by absolute on-disk path (must match exactly what Kontexta indexed).",
        +  "type": "string"
        +}
      • addedInput schema / properties / section
        Added value: +{
        +  "description": "Partial read: return only this heading's body (case-insensitive exact-string after trim). Requires `id`; mutually exclusive with `lines`.",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Removedfiles.read_by_path
    • Removedfiles.read_lines
    • Removedfiles.read_many
    • Removedfiles.read_section
    • Changedfiles.regex_search6 fields changed
      • addedInput schema / properties / file_id
        Added value: +{
        +  "description": "Scan only this file instead of every file in scope. When set, `project_id`/`kind`/`max_files`/`max_matches_per_file` are ignored in favor of `max_matches`.",
        +  "type": "number"
        +}
      • changedInput schema / properties / kind / description
        Previous value: -"Filter by content class before scanning."New value: +"Filter by content class before scanning. Ignored when `file_id` is set."
      • changedInput schema / properties / max_files / description
        Previous value: -"Cap on files scanned (default 500)"New value: +"Cap on files scanned (default 500). Ignored when `file_id` is set."
      • addedInput schema / properties / max_matches
        Added value: +{
        +  "description": "Cap on returned hits in single-file mode (default 100). Only used when `file_id` is set.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 500,
        +  "type": "integer"
        +}
      • changedInput schema / properties / max_matches_per_file / description
        Previous value: -"Per-file hit cap (default 10)"New value: +"Per-file hit cap in multi-file mode (default 10). Ignored when `file_id` is set."
      • changedInput schema / properties / project_id / description
        Previous value: -"Scope to one project, null for KB-only, omit for everything"New value: +"Scope to one project, null for KB-only, omit for everything. Ignored when `file_id` is set."
    • Changedfiles.search3 fields changed
      • addedInput schema / properties / format
        Added value: +{
        +  "description": "Bundle format when `include_bodies` is true. xml = Anthropic-recommended <document> tags (default); markdown = ## headers + fenced blocks. Ignored otherwise.",
        +  "enum": [
        +    "xml",
        +    "markdown"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / include_bodies
        Added value: +{
        +  "description": "If true, return a single prompt-ready bundle of matched bodies instead of a match list. Response shape changes to `{bundle, meta: {included, skipped, ...}}`. Default false.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / max_tokens
        Added value: +{
        +  "description": "Token budget when `include_bodies` is true (default 50000). Files added in rank order until the next would exceed; remainder go to `meta.skipped[]`. Ignored otherwise.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
    • Changedfiles.update2 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"New content"New value: +"New content. With `section` set, this replaces just that heading's body; otherwise it becomes the entire file body."
      • addedInput schema / properties / section
        Added value: +{
        +  "description": "Case-insensitive exact-string heading. When set, only this heading's body is rewritten instead of the whole file.",
        +  "type": "string"
        +}
    • Removedfiles.update_section
    • Removedhands.describe_schema
    • Changedhands.list2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / schema
        Added value: +{
        +  "description": "If true, return the kontexta.json authoring reference document instead of the registered-hands list. Default false.",
        +  "type": "boolean"
        +}
    • Removedjournal.append
    • Removedjournal.intent
    • Removedjournal.note
    • Addedjournal.write
  3. 124 tool updatesv4.7.2
    • Removedadd_tags
    • Addedadmin.commit_backup
    • Addedadmin.get_profile
    • Addedadmin.onboard_agent
    • Addedadmin.refresh_session_context
    • Addedadmin.stats
    • Addedadmin.transfer_agent_context
    • Addedadmin.whats_new
    • Removedbundle_search
    • Addedcalendar.entities.add
    • Addedcalendar.entities.delete
    • Addedcalendar.entities.link
    • Addedcalendar.entities.list
    • Addedcalendar.entities.update
    • Addedcalendar.events.add
    • Addedcalendar.events.conflicts
    • Addedcalendar.events.delete
    • Addedcalendar.events.list
    • Addedcalendar.events.update
    • Addedcalendar.export_ics
    • Removedclip_url
    • Removedcommit_backup
    • Removedconfirm_hand
    • Removedcreate_file
    • Removedcreate_files
    • Removedcreate_folder
    • Removeddelete_file
    • Removeddelete_files
    • Removeddelete_folder
    • Removeddescribe_file
    • Removeddescribe_hands_schema
    • Removeddiff_against_disk
    • Removeddistill_journal
    • Removeddistill_journal_commit_upgrades
    • Addedfiles.bundle_search
    • Addedfiles.create
    • Addedfiles.create_many
    • Addedfiles.delete
    • Addedfiles.delete_many
    • Addedfiles.describe
    • Addedfiles.diff_against_disk
    • Addedfiles.find_related
    • Addedfiles.get_diff
    • Addedfiles.get_history
    • Addedfiles.grep
    • Addedfiles.list
    • Addedfiles.move
    • Addedfiles.read
    • Addedfiles.read_by_path
    • Addedfiles.read_lines
    • Addedfiles.read_many
    • Addedfiles.read_outline
    • Addedfiles.read_section
    • Addedfiles.regex_search
    • Addedfiles.restore
    • Addedfiles.search
    • Addedfiles.update
    • Addedfiles.update_section
    • Removedfind_related
    • Addedfolders.create
    • Addedfolders.delete
    • Addedfolders.list
    • Removedget_diff
    • Removedget_history
    • Removedgrep_in_file
    • Addedhands.confirm
    • Addedhands.describe_schema
    • Addedhands.list
    • Addedhands.reload
    • Removedhousekeep_journal
    • Removedjournal_append
    • Removedjournal_intent
    • Removedjournal_note
    • Removedjournal_status
    • Addedjournal.append
    • Addedjournal.commit_upgrades
    • Addedjournal.distill
    • Addedjournal.housekeep
    • Addedjournal.intent
    • Addedjournal.note
    • Addedjournal.status
    • Removedlist_files
    • Removedlist_folders
    • Removedlist_hands
    • Removedlist_projects
    • Removedlist_tags
    • Removedmove_file
    • Removedonboard_agent
    • Removedproject_map
    • Addedprojects.list
    • Addedprojects.map
    • Addedprojects.refresh_index
    • Addedprojects.register
    • Removedread_file
    • Removedread_file_by_path
    • Removedread_file_lines
    • Removedread_file_outline
    • Removedread_files
    • Removedread_section
    • Removedrefresh_index
    • Removedregex_search
    • Removedregister_project
    • Removedreload_hands
    • Removedremove_tags
    • Addedresources.add_report
    • Addedresources.clip_url
    • Addedresources.delete_report
    • Addedresources.export_report
    • Addedresources.list_reports
    • Removedrestore_file
    • Removedsearch
    • Removedset_favorite
    • Removedstats
    • Removedsuggest_tags
    • Removedtag_search_results
    • Addedtags.add
    • Addedtags.list
    • Addedtags.remove
    • Addedtags.search
    • Addedtags.set_favorite
    • Addedtags.suggest
    • Removedupdate_file
    • Removedupdate_file_section
    • Removedwhats_new
  4. 48 tool updatesv4.2.0
    • Addedadd_tags
    • Addedbundle_search
    • Addedclip_url
    • Addedcommit_backup
    • Addedcreate_file
    • Addedcreate_folder
    • Addeddelete_file
    • Addeddelete_files
    • Addeddelete_folder
    • Addeddescribe_file
    • Addeddescribe_hands_schema
    • Addeddiff_against_disk
    • Addeddistill_journal
    • Addeddistill_journal_commit_upgrades
    • Addedfind_related
    • Addedget_diff
    • Addedget_history
    • Addedgrep_in_file
    • Addedhousekeep_journal
    • Addedjournal_intent
    • Addedjournal_note
    • Addedlist_files
    • Addedlist_folders
    • Addedlist_hands
    • Addedlist_projects
    • Addedlist_tags
    • Addedmove_file
    • Addedonboard_agent
    • Addedproject_map
    • Addedread_file
    • Addedread_file_by_path
    • Addedread_file_lines
    • Addedread_file_outline
    • Addedread_files
    • Addedread_section
    • Addedrefresh_index
    • Addedregex_search
    • Addedregister_project
    • Addedreload_hands
    • Addedremove_tags
    • Addedrestore_file
    • Addedsearch
    • Addedset_favorite
    • Addedstats
    • Addedtag_search_results
    • Addedupdate_file
    • Addedupdate_file_section
    • Addedwhats_new
  5. 48 tool updatesv3.3.0
    • Removedadd_tags
    • Removedbundle_search
    • Removedclip_url
    • Removedcommit_backup
    • Removedcreate_file
    • Removedcreate_folder
    • Removeddelete_file
    • Removeddelete_files
    • Removeddelete_folder
    • Removeddescribe_file
    • Removeddescribe_hands_schema
    • Removeddiff_against_disk
    • Removeddistill_journal
    • Removeddistill_journal_commit_upgrades
    • Removedfind_related
    • Removedget_diff
    • Removedget_history
    • Removedgrep_in_file
    • Removedhousekeep_journal
    • Removedjournal_intent
    • Removedjournal_note
    • Removedlist_files
    • Removedlist_folders
    • Removedlist_hands
    • Removedlist_projects
    • Removedlist_tags
    • Removedmove_file
    • Removedonboard_agent
    • Removedproject_map
    • Removedread_file
    • Removedread_file_by_path
    • Removedread_file_lines
    • Removedread_file_outline
    • Removedread_files
    • Removedread_section
    • Removedrefresh_index
    • Removedregex_search
    • Removedregister_project
    • Removedreload_hands
    • Removedremove_tags
    • Removedrestore_file
    • Removedsearch
    • Removedset_favorite
    • Removedstats
    • Removedtag_search_results
    • Removedupdate_file
    • Removedupdate_file_section
    • Removedwhats_new
  6. 53 tool updatesv0.1.0
    • First observedadd_tags
    • First observedbundle_search
    • First observedclip_url
    • First observedcommit_backup
    • First observedconfirm_hand
    • First observedcreate_file
    • First observedcreate_files
    • First observedcreate_folder
    • First observeddelete_file
    • First observeddelete_files
    • First observeddelete_folder
    • First observeddescribe_file
    • First observeddescribe_hands_schema
    • First observeddiff_against_disk
    • First observeddistill_journal
    • First observeddistill_journal_commit_upgrades
    • First observedfind_related
    • First observedget_diff
    • First observedget_history
    • First observedgrep_in_file
    • First observedhousekeep_journal
    • First observedjournal_append
    • First observedjournal_intent
    • First observedjournal_note
    • First observedjournal_status
    • First observedlist_files
    • First observedlist_folders
    • First observedlist_hands
    • First observedlist_projects
    • First observedlist_tags
    • First observedmove_file
    • First observedonboard_agent
    • First observedproject_map
    • First observedread_file
    • First observedread_file_by_path
    • First observedread_file_lines
    • First observedread_file_outline
    • First observedread_files
    • First observedread_section
    • First observedrefresh_index
    • First observedregex_search
    • First observedregister_project
    • First observedreload_hands
    • First observedremove_tags
    • First observedrestore_file
    • First observedsearch
    • First observedset_favorite
    • First observedstats
    • First observedsuggest_tags
    • First observedtag_search_results
    • First observedupdate_file
    • First observedupdate_file_section
    • First observedwhats_new

TDQS

A3.8/5.0

Scored across 58 tools

Disambiguation4/5

Tools are clearly namespaced by subsystem (files_, tags_, calendar_events_, etc.) and each has a distinct action/resource, so most selections are unambiguous. There is still some overlap among browsing, search, and diagnostic tools such as files_list vs projects_map vs admin_overview, and files_search vs files_regex_search vs files_find_related, but the descriptions provide explicit selection guidance.

Naming Consistency5/5

All 58 tools use snake_case with a predictable subsystem-prefix pattern (files_create, tags_add, calendar_events_update, hands_confirm, etc.). A few outliers like files_diff_against_disk and calendar_export_ics exist, but the overall convention is highly consistent.

Tool Count2/5

58 tools is far beyond the typical 3-15 well-scoped range and risks overloading an agent's tool-selection process. The broad Kontexta platform does have several legitimate subdomains, so this is not an arbitrary explosion, but the set is still too heavy and could be consolidated.

Completeness4/5

The surface covers CRUD, search, history, tags, resources, journal, calendar entities/events, and Hands approvals comprehensively. Minor lifecycle gaps remain, such as no explicit project unregister/delete, no dedicated profile update tool, and no folder rename.

Maintenance

ActivityActive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides AI assistants with real-time visibility into your codebase's internal libraries, team patterns, naming conventions, and usage frequencies to generate code that matches your team's actual practices.
    11
    310 npm
    68
    Elastic 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first knowledge base MCP server. Lets AI agents (Claude Code, Cursor, etc.) read and write your personal knowledge base through 20 MCP tools. Zero cloud dependency — all files stay on your machine.
    1,758 npm
    704
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Local-first MCP server that gives any AI coding agent per-project memory, workflow intelligence, and always-on, lossless token & context optimization.
    37
    63 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local-first MCP server that gives AI assistants long-term memory by storing, searching, and recalling notes as Markdown files on your machine.
    14 npm
    MIT