Skip to main content
Glama

SassyMCP

One MCP server to replace them all.

278 tools | 39 modules | 18 tool groups | Replaces 75+ MCP servers | ~35MB standalone exe

Last updated: 2026-09-21 — v1.16.0 | all tools unlocked; optional supporter license

Compatible with Claude Desktop, Grok Desktop, Cursor, Windsurf, and any MCP client.

The official GitHub MCP server has critical SHA-handling bugs. SassyMCP's GitHub module uses correct blob SHA lookups, proper path encoding, atomic multi-file commits via Git Data API, retry logic with exponential backoff, and rate-limit awareness. It's a drop-in replacement that actually works.

Why SassyMCP?

The MCP ecosystem is fragmented. Need file operations? Install Filesystem server. Need terminal? Desktop Commander. GitHub? Another server. Android? Another. Screenshots? Another. You end up with 6-10 separate MCP servers, each consuming context window, each with its own config, bugs, and update cycle.

SassyMCP replaces 75+ individual MCP servers — including Desktop Commander (5.9k stars), Windows-MCP (5k stars), GitHub MCP Server (28.6k stars), Anthropic's official Filesystem and Memory servers, mobile-mcp (4.4k stars), and dozens more — with a single ~35MB exe.

Key differentiators:

  • Smart Tool Loading — Only loads tool groups you use. Reduces context window overhead from ~25K tokens to ~5K tokens by default.

  • Dynamic Vision — Real-time screen monitoring with change detection for both desktop and Android. No more screenshot-and-pray.

  • Android Interaction — Full phone control via UI accessibility tree: tap, swipe, type, with automatic sensitive context detection (auth/payment screens auto-block).

  • Pause/Resume — User takes over the phone for manual steps (login, 2FA, account selection), AI watches and learns, then resumes autonomously.

  • Usage Tracking — ML-lite scoring of tool invocations with exponential decay. Your most-used tools load first.

  • Context Estimation — Built-in tool to measure how much of your 200K context window tool definitions consume.

  • Response Minification — GitHub API responses stripped of URL metadata bloat (40-70% smaller).

  • Safe Delete — Delete commands (rm, del, Remove-Item, etc.) are intercepted across all shells. Instead of destroying files, targets are moved to a _DELETE_/ staging folder in the same directory for human review — protecting against AI hallucinations.

  • Guided Setup — Wizard walks through persona, GitHub token, SSH credentials, and optional tool discovery.

Related MCP server: Auralis Commander

What It Replaces

Domain

SassyMCP Module

Replaces

Top Alternative

File operations

FileOps, Editor

11 filesystem/editor MCP servers

Filesystem (Anthropic official)

Shell / terminal

Shell, Session

5 shell MCP servers

Desktop Commander (5.9k stars)

Desktop automation

UIAutomation, Vision

9 desktop MCP servers

Windows-MCP (5k stars)

GitHub / Git

GitHub Quick, GitHub Full

5 GitHub/Git MCP servers

GitHub MCP Server (28.6k stars)

Android / phone

ADB, PhoneScreen

9 mobile MCP servers

mobile-mcp (4.4k stars)

Network scanning

NetworkAudit

8 nmap/security MCP servers

mcp-for-security (601 stars)

Security auditing

SecurityAudit

8 security MCP servers

mcp-security-hub (509 stars)

SSH / remote Linux

Linux

7 SSH MCP servers

ssh-mcp (365 stars)

Memory / state

Memory, StateManager

7 memory MCP servers

mcp-memory-service (1.6k stars)

OCR / screen reading

Vision

7 OCR/vision MCP servers

PaddleOCR MCP

Web inspection

WebInspector, Utility

7 web/fetch MCP servers

Fetch (Anthropic official)

Windows system

Registry, ProcessManager, Clipboard, EventLog, Bluetooth

13 Windows MCP servers

Windows-MCP (5k stars)

Plus features with no MCP server equivalent: phone pause/resume with sensitive context detection (auto-blocks on login/payment screens), operational hooks (14 expert playbooks), safe delete interception, Windows autorun forensics, Android+Windows clipboard sync, usage-weighted smart loading.

Licensing

Every tool group ships unlocked, for everyone, with no key required. As of v1.13.0 the release model is all-or-nothing — there is no free/pro split, no gated groups, no crippled demo. The 278 tools you see in the module table below are the product, out of the box.

Supporter licenses (optional): SassyMCP can still be purchased through LemonSqueezy as a one-time supporter license (no subscriptions). Activating a key registers your machine as a seat and records a supporter tier that shows in the startup banner, control panel, and VS Code cockpit — all tools are unlocked regardless of tier. Buy once to support development; refunds revoke the label automatically.

Activation flow (supporters):

  1. Purchase at https://sassyconsultingllc.com/store — LemonSqueezy emails you a key (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).

  2. Activate from your AI agent: sassy_setup_license action=activate key=...

  3. Or from a terminal: sassymcp.exe setup opens the interactive menu.

Offline operation: Once activated, a local HMAC-signed payload lets the supporter tier validate fully offline. A weekly re-check against LS catches refunds and cancellations; a faster startup check against the SassyMCP billing oracle cuts refund-to-revocation latency to seconds. Missing, expired, tampered, or corrupt license files just show the free label — tool availability is never affected.

Back-compat: SASSYMCP_LICENSE_BYPASS=1 (the old dev escape hatch that unlocked gated groups) is accepted and ignored — there is nothing left to bypass.

Running supervised (sassymcp supervise)

For always-on / remote deployments, run SassyMCP under its built-in supervisor instead of bare launcher scripts:

sassymcp.exe supervise start              # bridge only (127.0.0.1:21001)
sassymcp.exe supervise start --tunnel-mode managed   # also run the cloudflared tunnel as a child
sassymcp.exe supervise status             # JSON status; exit code != 0 if unhealthy
sassymcp.exe supervise stop               # graceful stop

The supervisor owns the runtime tree and makes it self-healing and orphan-proof:

  • No orphans, ever. A hard kill of the supervisor (crash, kill -9, taskkill /f) takes every child with it — on Windows via a Job Object (KILL_ON_JOB_CLOSE), on Linux via process groups + PR_SET_PDEATHSIG. No leftover bridge holding a wedged SQLite/WAL lock, which is what the old taskkill-based scripts caused.

  • Self-healing. Crashed children restart with exponential backoff (and give up cleanly after a crash-loop, rather than spinning).

  • Catches hangs. An HTTP readiness probe recycles a hung-but-alive bridge — the failure a Windows scheduled task can never detect.

  • Crash-survivable control. A pidfile + on-disk registry under $SASSYMCP_HOME mean supervise status/stop work even when the bridge is down, so an operator or agent can recover a wedged system.

start-supervised.bat wraps this as the recommended Windows launcher. stdio mode (Claude Desktop pipe) is client-owned and intentionally not supervised.

Modules

Module

Tools

Group

Description

Meta

11

meta

Context estimation, tool usage analytics, group management

Batch

1

meta

Multi-tool batch fan-out in a single call

FileOps

10

core

Read, write, search, move, copy, edit, mkdir, file info, safe delete

Shell

2

core

PowerShell, CMD, WSL execution with syntax normalization and delete interception

UIAutomation

6

core

Desktop state, click, type, hotkeys, screenshots, screen info

Editor

2

core

Surgical find/replace, multi-edit

Audit

4

core

Audit log read, search, clear, false-positive tracking

Session

6

core

Persistent terminal sessions (start, read, send, stop)

GitHub Quick

6

github_quick

Daily-driver: push_files, get_file, issue, PR, protect

GitHub Full

80

github_full

Complete GitHub API: repos, issues, PRs, actions, security, gists

Persona

7

persona

Expert-mode directives, decision framework, engineering standards

Utility

11

utility

Env vars, toast, zip/tar/unzip/untar, HTTP requests, file diff

SetupWizard

7

setup

Setup wizard, GitHub token guide, SSH setup, tool checker, license activation

ToolsManager

1

setup

External tool bootstrap and detection

Observability

3

infrastructure

Health, metrics, tool stats

StateManager

3

infrastructure

Persistent key-value state across sessions

RuntimeConfig

5

infrastructure

Permission modes, runtime config, recent tool calls

Offline

3

infrastructure

Offline fallback status and local-model handoff

Memory

9

memory

Persistent cross-session memory, milestones, task handoffs, pattern learning

Updater

4

updater

Version checks, changelog, self-update

ADB

10

android

Android shell, packages, file transfer, logcat, screencap

PhoneScreen

14

android

UI tree reader, phone glance/watch, tap/swipe/type/key, pause/resume, scrcpy

iPhone

6

iphone

iOS device info, screenshot, syslog, apps, IPA install — experimental, needs libimobiledevice

NetworkAudit

7

system

netstat, ARP, WiFi scan, port scan, DNS, traceroute

ProcessManager

5

system

Cross-platform process list/kill, system info

Bluetooth

3

system

Windows + Android BT enumeration

EventLog

3

system

Windows Event Log + Android logcat

Clipboard

4

system

Cross-platform clipboard sync

SecurityAudit

7

forensics

Hash, permissions, certs, APK, firewall, Defender

Registry

4

forensics

Read, write, export, autorun forensics (Windows)

Vision

8

v020

Screen capture, OCR, dynamic glance/watch/diff

AppLauncher

6

v020

Launch apps, focus/close/resize/snap windows

WebInspector

5

v020

Security headers, URL screenshots, tech stack detection

Crosslink

7

v020

Cross-session messaging via HTTP API + SQLite

Coordination

4

v020

Multi-agent coordination board and peer delegation

Linux

1

linux

Remote SSH execution via plink/OpenSSH

Combos

3

combos

Multi-step workflows in one call: PR review, phone observe, codebase grep

Prompts

0

prompts

MCP slash-menu shortcuts (no tools — prompts only)

SelfMod

0

—

Retired stub — self-modification removed (no tools)

Counts generated from the registered tool set (278 tools across 39 modules, 18 groups; the prompts group exposes MCP prompts rather than tools).

Full per-tool reference (generated): docs/TOOLS.md.

iPhone support (experimental)

SassyMCP can talk to iPhones over USB via libimobiledevice. This is new in v1.16.0 and experimental — Android-over-ADB remains the mature path.

Prerequisites

  • Install libimobiledevice: brew install libimobiledevice (macOS) or sudo apt install libimobiledevice-utils (Linux). Windows hosts have limited support — use WSL2 or a macOS/Linux host.

  • Pair the device once: run idevicepair pair and tap Trust on the iPhone. iOS 17+ requires this pairing step before any tool will see the device.

  • If several iPhones are connected, pass the udid parameter (from sassy_iphone_list) to target one.

Tools: sassy_iphone_list, sassy_iphone_info, sassy_iphone_screenshot, sassy_iphone_syslog (bounded capture), sassy_iphone_apps, sassy_iphone_install (requires confirm='YES'). Every tool degrades gracefully when the binaries or a trusted device are missing — you'll get an install hint or a pairing reminder, never a traceback.

Dynamic Vision

Desktop (Vision module)

Traditional MCP screenshots are blind — you capture one frame and hope it's the right one. SassyMCP's dynamic vision changes this:

Tool

Purpose

sassy_screen_glance

Fast grayscale capture at ~3-6KB. Call repeatedly to "watch" the screen.

sassy_screen_watch

Monitor for N seconds, returns only frames where content changed (pixel diff threshold).

sassy_screen_diff

Before/after comparison — takes frame, waits, takes another, returns both + a diff image highlighting changes.

All three use grayscale + heavy JPEG compression to keep context cost minimal. A glance is ~2KB vs ~14KB for a full-color capture.

Android (PhoneScreen module)

The phone isn't just a camera target — SassyMCP reads its UI accessibility tree:

Tool

Purpose

sassy_phone_ui

Reads every visible UI element — text, description, coordinates, clickable/focused/checked state. Structured data, not pixels.

sassy_phone_state

Foreground app, screen on/off, battery, WiFi, notification count.

sassy_phone_glance

Low-res grayscale phone screenshot via direct pipe (~4-8KB).

sassy_phone_watch

Monitors UI tree changes over duration. Returns snapshots only when elements change.

Phone Interaction

Full touch input via ADB — the AI can operate the phone:

Tool

Purpose

sassy_phone_tap

Tap screen coordinates

sassy_phone_swipe

Swipe between two points

sassy_phone_type

Type text into focused field

sassy_phone_key

Send key events (HOME, BACK, ENTER, VOLUME, etc.)

sassy_phone_open

Launch an app by package name

Sensitive Context Detection

All interaction tools (tap, swipe, type) automatically scan the UI tree before executing. If they detect login screens, payment forms, account selectors, 2FA prompts, or permission dialogs, the tool refuses to execute and returns what it sees instead. The AI then describes the screen to you and asks what to do. Pass confirmed=True after explicit user approval.

Safe Delete (Delete Interception)

AI agents can hallucinate destructive commands. SassyMCP intercepts all delete-family commands across every shell and every tool entry point, then moves targets to a _DELETE_/ staging folder instead of destroying them. Every interception is written to the audit log with the raw command, parsed targets, and move results.

Coverage — every destructive path is gated:

Tool

Guard

sassy_shell

Intercepts delete commands, stages targets to _DELETE_/

sassy_session_send / sassy_session_start

Same interceptor — persistent terminals can't bypass

sassy_linux_exec

Refuses destructive commands on the remote host

sassy_adb_shell

Refuses destructive commands on Android device (override with allow_destructive=True)

sassy_safe_delete

Explicit staging tool — moves symlinks as symlinks (no resolve() in the move path)

sassy_write_file (rewrite mode)

Snapshots existing file into _DELETE_/ before overwriting

sassy_edit_block / sassy_edit_multi

Refuses protected paths, snapshots existing content to _DELETE_/<name>.pre-edit.<ts><ext> before applying

sassy_copy

Refuses existing destination (no silent overwrite), refuses protected src/dst

sassy_move

Refuses silent destination overwrite, refuses protected src/dst

sassy_audit_clear

Rotates the audit log instead of deleting it; requires confirm='YES'

Intercepted command keywords: rm, rmdir, unlink (Unix/WSL), del, erase, rd (CMD), Remove-Item, ri, rni (PowerShell aliases), sdelete / sdelete64 (Sysinternals).

Also caught (beyond bare keywords):

  • Shell wrappers — powershell -c "del foo", cmd /c del foo, bash -c "rm foo", wsl -- rm foo (payload is recursively scanned)

  • Base64 payloads — powershell -EncodedCommand <base64> is decoded (UTF-16-LE) and recursively scanned

  • .NET calls — [System.IO.File]::Delete(...), [System.IO.Directory]::Delete(...)

  • Clear-Content, Set-Content -Value '' (literal empty only — normal -Value "foo" is allowed)

  • Out-File -Force, New-Item -Force (overwrite-style)

  • copy /y, xcopy /y — CMD silent-overwrite flags

  • robocopy /MIR and robocopy /PURGE — mirror/purge modes delete destination files

  • Truncate-by-redirect — > file.txt, type foo > bar.txt, cmd; > file.txt (append >> and stream 2> / &> correctly ignored)

  • Move-Item foo $null

  • Assignment prefixes — $null = ri foo is correctly unwrapped

Protected roots (refused by every guarded tool, not just the interceptor): the SassyMCP source tree itself, ~/.sassymcp/ (audit + config), and any _DELETE_/ staging folder (no staging recursion). Protection uses resolve() so path traversal (..\), symlinks, and Windows 8.3 short names all normalize correctly before the check.

Scenario

Result

rm -rf /

Hard-blocked by the always-on blocklist — no move attempted

rm important.txt

Blocked, file moved to ./_DELETE_/important.txt

del /q *.log

Blocked, all .log files moved to ./_DELETE_/

Remove-Item -Path C:\data\old

Blocked, old moved to C:\data\_DELETE_\old

cmd /c del foo (wrapper)

Blocked — payload is unwrapped and intercepted

gci *.tmp | ri (PS alias)

Blocked — ri alias is matched

sassy_write_file("doc.txt", ..., "rewrite") on existing file

Prior content snapshotted to _DELETE_/doc.overwrite.<ts>.txt first

ls -la

Executes normally — not a delete command

Name collisions in _DELETE_/ are handled automatically with counter suffixes (file.txt, file_1.txt, file_2.txt). On Windows, paths with backslashes (C:\Users\foo\bar) are preserved correctly by the parser — no shlex mangling.

Pause / Resume

For complex flows where the user needs to take over:

Tool

Purpose

sassy_phone_pause

Blocks all interaction tools. Observation tools (ui, glance, watch) still work.

sassy_phone_resume

Unblocks interaction. AI picks up where it left off, informed by everything it observed during pause.

Workflow:

  1. AI operates phone autonomously for routine tasks

  2. AI hits a login screen → sensitive context auto-blocks → AI tells the user

  3. User says "hold on" → AI calls sassy_phone_pause

  4. User logs in manually. AI watches via sassy_phone_ui / sassy_phone_glance

  5. User says "done" → AI calls sassy_phone_resume

  6. AI continues, now aware the user logged into a specific account

Permission Engine & Control Panel

SassyMCP gates the shell and file tools through one policy engine (sassymcp.policy) with four modes, set via sassy_permission set_mode or the Control Panel:

Mode

Behavior

strict

Block destructive patterns everywhere (default)

confirm

Destructive patterns return a confirm token

sandbox

Relaxed gating inside the project roots; anything resolving outside the jail is refused — run an ungated model, confined to a folder

bypass

Allow everything except protected paths (explicit, audited)

A Claude-style allow / ask / deny rules layer (tool-glob + path-glob + command-regex; first match wins) overrides the mode default. The catastrophic block-list (format, mkfs, …) and the protected-path invariant (the SassyMCP source tree + ~/.sassymcp) hold in every mode, including bypass.

The Control Panel is a localhost web UI for all of the above — a live event log, the settings/mode editor, and a classifier + rules editor. It binds 127.0.0.1 only and needs the per-install token in ~/.sassymcp/control_panel.token. Start it with sassy_panel start (or set panel.enabled / SASSYMCP_PANEL=1 to launch it at boot), then open the printed http://127.0.0.1:8765/?token=… URL.

Tool profiles

Tool profiles gate which tools an MCP session can see (tools/list) and call (tools/call) — a per-session, human-controlled subset of the catalog, managed from the Control Panel (a Profiles tab, backed by GET/POST /api/profile). There is deliberately no MCP tool that can switch or widen the profile, so a session can never escalate itself out of a restrictive profile; fan-out through sassy_batch respects the same gate.

Profile

Tool groups

full

All 18 groups (default on every start)

developer

meta, core, infrastructure, utility, github_quick, github_full, v020, memory, persona, setup, updater

forensics

meta, core, infrastructure, forensics, utility, system, memory

devices

meta, core, infrastructure, android, iphone, utility, memory

sysadmin

meta, core, infrastructure, system, linux, utility, memory, updater

readonly

Every tool whose curated MCP annotation is readOnlyHint=true — computed per-tool, not from groups

custom

An explicit group set you tick in the dashboard

Rules worth knowing:

  • Session-scoped, never persisted. A restart always comes back up on full. Profiles are a runtime seatbelt, not access control — the panel token is the trust boundary.

  • meta stays on. Its introspection tools (sassy_tool_groups, sassy_self_check, …) are the session's only window into what it can see; hiding them would strand the session with no way to inspect the gate.

  • Widening needs confirm='YES'. Any switch that would expose a currently-hidden tool is an audited escalation and requires explicit confirmation (the panel UI sends it for you, mirroring the bypass-mode convention). Narrowing never does.

  • A tool hidden from tools/list is also uncallable via tools/call — a client cannot call what it cannot see.

Guided Setup

On first launch (no ~/.sassymcp/persona.md), the wizard tools are prominently available and the AI is given an onboarding playbook via the registered hook. The flow is conversational — the AI asks, you answer, it calls the tools.

Each step is independent and skippable. Just tell the AI "set up SassyMCP" or "let's get started" and it'll walk this:

#

Step

Tool

What happens

0

License (optional)

sassy_setup_license action="status" then action="activate" key=...

Reports supporter tier. All tools are unlocked regardless — a key just registers your seat and supporter status.

1

Persona

sassy_setup_wizard

Asks the questionnaire below, generates ~/.sassymcp/persona.md, hot-reloads the persona module.

2

GitHub

sassy_setup_github action="check" → action="open_browser" → action="save_token" token=...

Validates an existing GITHUB_TOKEN, or opens github.com/settings/tokens, walks you through scope selection, then saves and re-validates.

3

SSH / Linux

sassy_setup_ssh action="check" → action="save" host=... user=... password=... → action="test"

Locates plink, stores creds in process env, runs an echo round-trip to verify.

4

Optional tools

sassy_setup_check_tools

Scans for nmap, tesseract, adb, scrcpy, plink, Chrome; reports install URLs for what's missing.

✓

Status check

sassy_setup_status

Shows what's configured, what's still missing, and the action_required hint. Run this any time.

⚙️

Auth tokens

sassy_setup_generate_token client_id="claude-desktop"

Generates a 32-byte URL-safe token for HTTP/tunnel mode and writes ~/.sassymcp/tokens.json.

Skip any step with action="skip" (where supported) — config records the skip so the AI doesn't re-prompt.

The persona questionnaire

sassy_setup_wizard accepts these fields. All optional — defaults shown.

Field

Values / format

Default

role

developer | sysadmin | security | devops | data | designer | manager | other

developer

expertise_level

junior | mid | senior | principal | staff

senior

specializations

Comma-separated areas — e.g. "web security, cloud infra, mobile"

empty

languages

Comma-separated — e.g. "Python, Rust, TypeScript, Go"

empty

frameworks

Comma-separated — e.g. "React, FastAPI, Cloudflare Workers"

empty

systems

Newline-separated hostname — OS — role entries

empty

projects

Newline-separated name — status — description entries

empty

communication_style

terse (code only) | balanced (brief explanations) | verbose (detailed rationale)

terse

security_posture

standard (OWASP) | hardened (+ CSP/HSTS/rate-limit) | paranoid (+ air-gap, cert pinning, zero trust)

standard

mcp_clients

Which AI tools connect — e.g. "Claude Desktop, Cursor, Grok Desktop"

empty

notes

Free-form text — anything else the AI should know about how you work

empty

Output goes to ~/.sassymcp/persona.md (the persona module reads it on every session) and the run is recorded in ~/.sassymcp/config.json (setup_complete, setup_timestamp, setup_version). Re-run sassy_setup_wizard any time to regenerate — the persona module hot-reloads with the new profile.

Triggering the flow from your client

The onboarding hook fires on phrases like "setup", "first time", "get started", "onboard", "new user", "set up sassymcp". Anything close to those will pull the playbook into the AI's context. If you want to drive it manually, just call sassy_setup_status first to see where you are, then walk the table above.

Smart Loading

By default, SassyMCP only loads frequently-used tool groups. This keeps tool definitions under 5% of your context window.

# Default: loads core, github_quick, persona, meta, utility, setup, infrastructure
uv run sassymcp

# Load everything (~22K tokens of context)
SASSYMCP_LOAD_ALL=1 uv run sassymcp

# Load specific groups
SASSYMCP_GROUPS=core,github_quick,android,v020 uv run sassymcp

Available Groups

Group

Modules

Default

core

fileops, shell, ui_automation, editor, audit, session

Yes

meta

meta

Yes

infrastructure

observability, state_manager, runtime_config

Yes

github_quick

github_quick (6 lean tools)

Yes

persona

persona

Yes

utility

utility

Yes

setup

setup_wizard, tools_manager

Yes

memory

memory

Yes

updater

updater

Yes

combos

combos (4 tools)

No

prompts

prompts (slash-menu shortcuts)

Yes

github_full

github_ops (80 tools)

No

android

adb, phone_screen

No

system

network_audit, process_manager, security_audit, registry, bluetooth, eventlog, clipboard

No

v020

vision, app_launcher, web_inspector, crosslink

No

linux

linux

No

Install

Pick whichever entry point matches how you already work. All four converge on the same shared brain at ~/.sassymcp/ — your persona, memory, license, and audit log are visible to every connected MCP client.

One-click via DXT (Claude Desktop)

Download sassymcp.dxt from the latest release, double-click — Claude Desktop installs it. On first launch, sassymcp auto-detects every other MCP client on your machine (Cursor, VS Code Copilot, Windsurf, Continue, Cline, Zed, Grok Desktop) and patches each one's config so they all see SassyMCP without you editing any JSON.

VS Code extension

Install the VS Code extension from the .vsix attached to the latest release until the Visual Studio Marketplace listing is live. The extension locates sassymcp.exe (PATH or the sassymcp.exePath setting), runs the same auto-config CLI, and adds a status bar item showing supporter-tier label and brain health. Command palette: Open Sassy Brain Cockpit, Run Setup Wizard, Reinstall Client Configs, Open Audit Log, Open _DELETE_ Folder, Show Brain Status.

Manual auto-config CLI

If you have sassymcp.exe already (from the portable zip or pip install) and want to register it with every MCP client without per-client JSON editing:

sassymcp-install

That detects Claude Desktop, VS Code Copilot, Cursor, Windsurf, Continue, Cline, Zed, and Grok Desktop and patches each one's config atomically. Re-running is a noop. Take a look first with sassymcp-install --dry-run. Remove with sassymcp-install --uninstall. The CLI takes a timestamped backup of any existing config before its first edit.

Portable bundle

The portable zip (sassymcp-v*-portable.zip with bundled adb, nmap, plink, scrcpy, tesseract, cloudflared, and the start-*.bat launchers) is no longer published — the release pipeline does not build it. Use the standalone executable below (and install any helper tools you need on PATH), or pip install sassymcp for the full Python install.

Standalone executable (no tools bundled)

If you don't need the bundled nmap / adb / cloudflared (or you have them on PATH already), grab just sassymcp.exe (~35 MB) from the latest release. Drop it anywhere and point your MCP client at it.

First-run wizard: Double-click sassymcp.exe (or run it from a terminal with no flags) on a fresh machine and you'll get an interactive menu — auto-detect AI agents and register SassyMCP, activate a LemonSqueezy license key, generate / list bearer tokens, or start the HTTP server. Run sassymcp.exe setup anytime to re-open the menu. Once a persona is configured, bare invocation falls back to starting the HTTP server (the v1.5 behavior) so existing setups are unchanged.

Linux (pip only)

CI publishes no Linux binary. On Linux, install the wheel: pip install sassymcp. (The standalone executable is Windows-only; macOS ships a universal2 binary — see sassymcp-macos on the release page.)

MSI installer (manual builds only)

No MSI is published by CI — build-msi.ps1 exists for manual MSI builds (WiX 3.x) from a staged sassymcp.exe, and installer.wxs is a manual-build reference template, not a maintained installer.

Activating a supporter license (optional)

There is no separate "licensed download" and nothing to unlock — everyone runs the same fully-unlocked binary from the GitHub releases. If you want to support development, buy a license at sassyconsultingllc.com/store and activate it to register your seat and supporter tier:

# from your AI agent:
sassy_setup_license action=activate key=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# or from a terminal — interactive menu, choose "Activate license":
sassymcp.exe setup

The license registers this machine as a LemonSqueezy instance (seat); sassy_setup_license action=deactivate frees the seat to move to another machine.

From source

git clone https://github.com/sassyconsultingllc/SassyMCP.git
cd SassyMCP
uv sync

# Optional dependencies:
uv pip install pytesseract playwright
playwright install chromium

Cloudflare Tunnel (remote access)

Want to drive SassyMCP from a remote MCP client (Claude Web, another machine)? The portable bundle ships a turnkey launcher. Full step-by-step is in docs/TUNNEL.md; the short version:

winget install Cloudflare.cloudflared          # one-time
cloudflared tunnel login                       # authenticate against your CF account
cloudflared tunnel create sassymcp             # create a named tunnel
cloudflared tunnel route dns sassymcp mcp.<your-domain>.tld
# Write ~/.cloudflared/config.yml with the ingress block (see TUNNEL.md)

[Environment]::SetEnvironmentVariable("SASSYMCP_AUTH_TOKEN", "<your token>", "User")
[Environment]::SetEnvironmentVariable(
    "SASSYMCP_ALLOWED_HOSTS",
    "mcp.<your-domain>.tld,localhost,127.0.0.1", "User")

cd D:\Tools\SassyMCP                           # wherever you extracted
.\start-tunnel.bat sassymcp                    # tunnel name as arg, or set SASSYMCP_TUNNEL_NAME

start-tunnel.bat launches the HTTP bridge on 127.0.0.1:21001 and runs cloudflared tunnel run <name> in the foreground. Nothing in the script is vendor-specific — you supply the tunnel name and the hostname. Clients send Authorization: Bearer <SASSYMCP_AUTH_TOKEN> against https://mcp.<your-domain>.tld/mcp.

For hosted-Claude clients that require OAuth 2.1 DCR/PKCE instead of a static bearer, deploy the optional Worker under sassymcp-oauth/ — copy wrangler.toml.example to wrangler.toml, fill in your hostname and KV id, and wrangler deploy. See docs/TUNNEL.md for the full OAuth section.

MCP Client Config

SassyMCP speaks standard MCP. Anything that connects works — no client-side modifications required. The portable bundle ships ready-to-edit templates under deploy/*_config.template.json. Pick the row for your client, copy the template, replace REPLACE_WITH_PATH with the absolute path to sassymcp.exe, and save it where the client expects.

Client

Transport

Config file location

Template

Claude Desktop

stdio

%APPDATA%\Claude\claude_desktop_config.json (Win) / ~/Library/Application Support/Claude/claude_desktop_config.json (mac)

claude_desktop_config.template.json

Cursor

stdio

~/.cursor/mcp.json (global) or <project>/.cursor/mcp.json (per-project)

cursor_mcp_config.template.json

Windsurf

stdio

~/.codeium/windsurf/mcp_config.json

windsurf_mcp_config.template.json

Cline (VS Code)

stdio

VS Code settings → cline.mcpServers (same mcpServers shape)

use claude_desktop_config.template.json

Continue.dev

stdio

~/.continue/config.json (merge under experimental.modelContextProtocolServers)

continue_mcp_config.template.json

Grok Desktop

HTTP

Grok Desktop MCP settings

grok_desktop_config.template.json

Any other MCP client

stdio or HTTP

client's MCP config

use the closest template; the mcpServers shape is conventional

Standard mcpServers shape (Claude Desktop, Cursor, Windsurf, Cline)

Using the exe:

{
  "mcpServers": {
    "sassymcp": {
      "command": "C:\\path\\to\\sassymcp.exe",
      "env": {
        "SASSYMCP_LOAD_ALL": "1",
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

From source:

{
  "mcpServers": {
    "sassymcp": {
      "command": "uv",
      "args": ["--directory", "C:\\path\\to\\SassyMCP", "run", "sassymcp"],
      "env": {
        "SASSYMCP_LOAD_ALL": "1",
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

Continue.dev shape (different schema)

{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "C:\\path\\to\\sassymcp.exe"
        }
      }
    ]
  }
}

HTTP / Grok Desktop / custom HTTP clients

Run the server in HTTP mode (sassymcp.exe --http, default 127.0.0.1:21001) and point your client at http://127.0.0.1:21001/mcp/. Set SASSYMCP_AUTH_TOKEN if the bind is non-loopback.

{
  "mcpServers": {
    "sassymcp": {
      "url": "http://127.0.0.1:21001/mcp/"
    }
  }
}

What's actually Claude-flavored (cosmetic only)

A few docstrings and the legacy .claude/skills/sassymcp-update.md slash-command target Claude Code specifically. Other clients ignore them and use sassy_update_* tools directly. No tool, transport, or auth path requires Claude — the server doesn't know which LLM is on the other end.

Transport Modes

Mode

Command

Use Case

Stdio

sassymcp.exe

Claude Desktop, Cursor (direct pipe)

HTTP

sassymcp.exe --http

Grok Desktop, Windsurf (localhost:21001)

HTTP LAN

sassymcp.exe --http --host 0.0.0.0

Multi-device (requires auth token)

HTTPS

sassymcp.exe --http --ssl

Encrypted (auto-generates self-signed cert)

SSE

sassymcp.exe --http --sse

Legacy transport

Running Multiple Instances (Dual Session)

Two SassyMCP processes on the same machine — for example, a local stdio instance for Claude Desktop and a remote HTTPS instance behind a Cloudflare Tunnel for Claude Web — can clobber each other's state if they share ~/.sassymcp/. The fix is one env var per instance.

Conflicts to resolve per-instance

Resource

Default

How to give each instance its own

HTTP port

21001

--port 21002 (HTTP-mode instances only)

Crosslink HTTP port

9377

sassy_crosslink_register port=9378

Auth token

env SASSYMCP_AUTH_TOKEN

Set per-process in launcher's env

Per-user state dir

~/.sassymcp

SASSYMCP_HOME=/path/to/dir ← the new env var (v1.3.4+)

SSL cert/key

$SASSYMCP_HOME/server.{crt,key}

Auto-isolated when SASSYMCP_HOME is set; or --ssl-cert / --ssl-key

Example: local stdio + remote tunnel side-by-side

Instance A — local stdio for Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "sassymcp-local": {
      "command": "C:\\Tools\\SassyMCP\\sassymcp.exe",
      "env": {
        "SASSYMCP_LOAD_ALL": "1",
        "SASSYMCP_HOME": "C:\\Users\\<you>\\.sassymcp-local"
      }
    }
  }
}

Instance B — remote HTTPS via Cloudflare Tunnel (start-tunnel.bat + a wrapper that sets the env):

set SASSYMCP_HOME=C:\Users\<you>\.sassymcp-remote
set SASSYMCP_AUTH_TOKEN=<token-for-remote>
set PORT=21002
"%~dp0sassymcp.exe" --http --host 127.0.0.1 --port %PORT%

Then cloudflared tunnel run <name> forwards https://<your-tunnel>/mcp to 127.0.0.1:21002.

What's isolated when SASSYMCP_HOME differs

Each instance gets its own:

  • persona.md — different profiles per session

  • config.json — different runtime config (allowed dirs, blocked commands, etc.)

  • tokens.json — different scoped auth tokens

  • license.json — separate license activation

  • audit.log / audit.jsonl — no interleaved writes

  • crosslink.db — separate cross-session message queues

  • memory.db — separate persistent memories

  • tool_state.db / tool_usage.json — separate per-tool state and usage analytics

  • server.crt / server.key — separate self-signed certs

  • The _security protected-paths check honors SASSYMCP_HOME too — neither instance can sassy_safe_delete into the other's home

What's still shared between instances

  • The repo source tree (always protected from delete/overwrite by _security)

  • %LOCALAPPDATA%\SassyMCP\updates\ — the updater download stage (harmless; tagged by version under it)

  • The bundled tools in the portable zip (adb, nmap, cloudflared, etc.) — read-only from both instances

Putting it in the OS (so both start at boot)

The legacy personal/autostart-bridge.bat + personal/register-autostart.ps1 template is gitignored — copy it, tweak the paths and the SASSYMCP_HOME for each instance, then Register-ScheduledTask once per instance.

Environment Variables

Variable

Purpose

SASSYMCP_LOAD_ALL=1

Load every tool group

SASSYMCP_GROUPS=core,android

Load specific groups

SASSYMCP_AUTH_TOKEN=xxx

Bearer token for HTTP auth

SASSYMCP_DEV=1

Enable live reload (dev mode)

SASSYMCP_NO_UPDATE_CHECK=1

Disable the startup update check (no GitHub API call)

SASSYMCP_HOME=/path/to/dir

Override the per-user state dir (default ~/.sassymcp). Required when running multiple instances on one machine.

SASSYMCP_REPO=/path/to/repo

Override the auto-detected repo root in tools/mercury_audit_sassymcp.py (dev tool only)

GITHUB_TOKEN=xxx

GitHub API access

SSH_HOST=xxx

Remote Linux hostname/IP

SSH_USER=xxx

Remote Linux username

SSH_PASS=xxx

Remote Linux password

External Tools

All bundled in the beta zip package. Install separately only if using the standalone exe.

Tool

Used By

Bundled

Install (if needed)

ADB

All sassy_adb_* + sassy_phone_* tools

Yes

Android Platform Tools

nmap

sassy_port_scan

Yes

nmap.org

plink

sassy_linux_exec

Yes

PuTTY

scrcpy

sassy_scrcpy_* tools

Yes

scrcpy releases

Tesseract

sassy_screen_ocr, sassy_find_text_on_screen

Yes

tesseract-ocr

Chrome

sassy_url_screenshot

No

google.com/chrome

Run sassy_setup_check_tools to verify all tools are detected.

Requirements

  • Windows 10/11, macOS 12+, or Linux — one source, routed at the head (sassymcp._platform) to the right command per host. See Cross-platform below.

  • Python 3.11+ (only if running from source; the standalone binary is self-contained — built per OS, since PyInstaller can't cross-compile)

Cross-platform

The same SassyMCP source runs on Windows, macOS, and Linux. The host OS is resolved once at import; every tool then routes to the host-appropriate command — shells (PowerShell / zsh|bash), clipboard (Get-Clipboard / pbpaste), event log (Get-WinEvent / log show / journald), firewall (netsh / socketfilterfw / ufw), Wi-Fi, Bluetooth, window control (pywinauto / AppleScript System Events / wmctrl), SSH (plink / native ssh), package installs (winget / brew / apt), and more.

  • Build: build.bat (Windows) or build.sh (macOS/Linux). Build each binary on its own OS.

  • macOS permissions: window-control and screenshot tools need Accessibility and Screen Recording permission for the app running SassyMCP (System Settings → Privacy & Security).

  • A handful of concepts are Windows-only by nature (raw Registry read/write/export); those report a clear message and point to the native equivalent (defaults, launchd). Forensic persistence (sassy_autorun_entries) IS cross-platform (Run keys / LaunchAgents / systemd+cron).

License

Proprietary - Copyright (c) 2026 Sassy Consulting LLC. All rights reserved.

Available Tools

101 tools
sassy_audit_clearA

Mutating but non-destructive: rotates the active audit logs rather than deleting anything. Requires confirm='YES'; anything else is refused. Renames $SASSYMCP_HOME/audit.log and audit.jsonl (default ~/.sassymcp) to audit.cleared..log/.jsonl, then logs the rotation itself into the fresh log. Nothing is ever unlinked, so forensic history is preserved in the archives. Use when you want a fresh log tail while keeping history; prefer sassy_audit_log or sassy_audit_search for reading entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=false. The description adds critical behavior: it is mutating yet non-destructive, requires confirm='YES', renames specific files with a timestamped pattern, logs the rotation into the fresh log, and preserves forensic history. This is substantial context beyond structured fields.

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?

Every sentence carries operative information: state mutation, safety, required confirmation, exact file paths and naming, self-logging behavior, and usage guidance. There is no filler, and the key safety and usage constraints are front-loaded.

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 mutation tool, this description is complete: it covers prerequisites, behavior, effect on files, safety, and when to choose alternatives. The output schema exists, so return-value detail is not required. Nothing needed to invoke the tool correctly is missing.

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?

The schema only defines a 'confirm' string with an empty default and no description. The description fully compensates by stating that confirm must equal 'YES' and that anything else is refused, making the parameter's role and validation unambiguous.

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 action (rotates active audit logs) and a specific resource, explicitly contrasting with deletion. It is clearly distinguished from sibling tools like sassy_audit_log and sassy_audit_search by naming what it is not meant for.

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 says when to use it: 'Use when you want a fresh log tail while keeping history.' It also names the alternatives, sassy_audit_log and sassy_audit_search, and tells the agent to prefer them for reading. No usage ambiguity remains.

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

sassy_audit_false_positivesA
Read-onlyIdempotent

Read-only. Surfaces recent shell-interceptor pattern events from the local JSONL audit log (~/.sassymcp/audit.jsonl) as rows of timestamp | event | pattern | command (truncated to 120 chars). count caps rows (default 20), newest last. include_bypasses defaults to True, showing both pattern_block entries (commands refused) and pattern_bypass entries (allowed via sassy_shell's allow_pattern); set it False to see only refused commands. Use it to diagnose why a sassy_shell command was blocked and to pick the exact allow_pattern label for a retry. For general log history use sassy_audit_log.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
include_bypassesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

The annotations already mark the tool as read-only, idempotent, and non-destructive, and the description reinforces that with 'Read-only.' It adds meaningful behavioral detail beyond the annotations: the exact log file path, truncation to 120 characters, newest-last ordering, row format, and the meaning of the two event types. This gives the agent a clear picture of what executing the tool will and won't do.

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 dense but every sentence earns its place: purpose and format first, then parameter semantics, then explicit usage guidance and sibling routing. It front-loads the read-only nature and the core function before going into details, and avoids repetition of schema field names without adding context.

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?

This is a complete, self-sufficient description for a two-parameter read-only tool. It includes the data source, row format, ordering, truncation, defaults, event types, and explicit use cases. Since an output schema exists, the description need not detail return structure, and it still provides enough context for correct invocation.

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 description coverage is 0%, but the description fully compensates for both parameters. It explains count as capping rows with a default of 20, and include_bypasses as controlling whether pattern_bypass entries are included, with defaults and the effect of setting it to False. This is exactly the semantic content the bare schema lacks.

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: it 'surfaces recent shell-interceptor pattern events from the local JSONL audit log' and even gives the file path. It clearly distinguishes itself from the sibling sassy_audit_log by saying 'For general log history use sassy_audit_log.' The purpose is further sharpened with the diagnostic use cases: explaining blocked commands and picking an allow_pattern label.

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?

The description explicitly says when to use the tool: 'Use it to diagnose why a sassy_shell command was blocked and to pick the exact allow_pattern label for a retry.' It also names the key alternative, sassy_audit_log, for general log history. Parameter guidance is embedded by explaining what include_bypasses=True vs False shows, so an agent knows how to configure the call for the two scenarios.

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

sassy_audit_logA
Read-onlyIdempotent

Read-only. Returns the tail of the audit log (~/.sassymcp/audit.log), which records every tool call with timestamp, tool name, and sanitized (secret-redacted) arguments, plus policy and interceptor events. count sets how many of the most recent lines are returned (default 50), newest last. Use it to review what tools were called recently and with what arguments. When you need entries matching a term rather than the plain tail, use sassy_audit_search.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds specific behavioral context: log location (~/.sassymcp/audit.log), the record types, and the fact that arguments are sanitized/secret-redacted, plus the ordering and default count. This goes beyond annotations without contradicting them.

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

Conciseness5/5

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

Two sentences, no filler. The read-only flag is front-loaded, followed by purpose, content, parameter behavior, and a sibling pointer. 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 single-parameter tool with an output schema, the description covers what it returns, how the parameter behaves, and the use case. Nothing essential is missing; an agent can call it correctly without further information.

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 has only 'count' with no description (coverage 0%). The description fully compensates by explaining that count sets the number of most recent lines returned, defaults to 50, and that output is newest last. This is essential for correct invocation.

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 clearly states the tool returns the tail of the audit log, specifies the content (timestamp, tool name, sanitized arguments, policy/interceptor events), and explicitly contrasts with sassy_audit_search. This distinguishes it from siblings without ambiguity.

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 states 'Use it to review what tools were called recently and with what arguments' and directs the agent to sassy_audit_search when searching for a term. This provides clear when-to-use and when-not-to-use guidance.

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

sassy_batchA
Destructive

Read-only or mutating depending on its operations: it is a scheduling primitive, not a policy bypass: every operation goes through the normal tool call path — validation, audit, security/confirmation, and per-group rate limiting. operations is a JSON array of {"tool":..., "args":...} (max 50 operations; sassy_batch cannot be nested). max_concurrent caps simultaneous runs (1-16, default 5). timeout_seconds is a per-operation ceiling (default 60.0). stop_on_error (default false) skips pending operations after the first failure. Failures never raise: results return in request order, each with index, tool, ok, elapsed_ms, result, and error. Use for independent fan-out; prefer stop_on_error for dependent pipelines and sequential calls when steps depend on prior results.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationsYes
stop_on_errorNo
max_concurrentNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedYes
resultsYes
requestedYes
succeededYes
elapsed_msYes
max_concurrentYes

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations by detailing execution behavior: operations run through the normal tool call path, failures never raise, results return in request order with specific fields, and there are hard limits on operations and concurrency. It also acknowledges the tool can be either read-only or mutating, aligning with readOnlyHint=false and destructiveHint=true.

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 dense but every sentence contributes: it covers dual-mode behavior, safety context, parameter semantics, error semantics, return format, and usage guidance. There is no filler or tautology, and critical warnings appear early.

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?

The description provides enough detail for an agent to invoke the tool correctly: required operations structure, optional parameters with defaults, return value shape, and selection guidance. Even with an output schema present, describing the per-result fields adds completeness rather than redundancy.

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 description coverage is 0%, so the description carries the full burden, and it succeeds: it explains the operations array format and max 50 operations, max_concurrent range and default, timeout_seconds as a per-operation ceiling, and stop_on_error semantics. It even specifies that sassy_batch cannot be nested, which is critical for agents constructing valid parameter values.

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 identifies sassy_batch as a scheduling primitive for running multiple tool operations, clarifying that it can be read-only or mutating depending on the operations. It does not state a crisp one-line verb phrase like 'executes a batch of tool calls,' but the purpose is discernible from the explanation and usage guidance.

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?

The description gives explicit guidance: 'Use for independent fan-out; prefer stop_on_error for dependent pipelines and sequential calls when steps depend on prior results.' It also clarifies what the tool is not — a policy bypass — and explains that every operation runs through normal validation, audit, security, and rate limiting, which helps an agent decide when to use it.

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

sassy_clickA
Destructive

Mutating: performs a real mouse click on the host desktop. Clicks at absolute screen coordinates (x, y required) with button defaulting to 'left' (also 'middle', 'right') and clicks defaulting to 1 for double-clicks and beyond. Coordinates are absolute across all monitors, so call sassy_screen_info first (or sassy_desktop_state) to find monitor positions and window locations. Works on Windows, macOS, and Linux via pyautogui. Use it for clicking GUI elements; use sassy_hotkey for keyboard shortcuts and sassy_type_text for entering text.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
buttonNoleft
clicksNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true; the description adds that it is 'Mutating', performs a 'real mouse click', uses absolute coordinates across all monitors, and works cross-platform via pyautogui. This is meaningful context beyond the annotations, though it could have noted potential side effects like moving the cursor or focusing windows.

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 sentences deliver the essential behavior, parameter semantics, coordinate caveat, prerequisite, and sibling alternatives with no wasted words. The opening 'Mutating' immediately signals the tool's nature.

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?

Given the simple schema, destructiveHint annotation, and presence of an output schema, the description fully covers what the tool does, how to use it correctly, and when to prefer alternatives. An agent can invoke it without external documentation.

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 description coverage is 0%, so the description must carry parameter meaning. It explains x/y as required absolute screen coordinates, button options ('left' default, also 'middle', 'right'), and clicks semantics (default 1, for double-clicks and beyond). All four parameters are meaningfully described.

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 ('performs a real mouse click on the host desktop') and explicitly contrasts with sassy_hotkey and sassy_type_text, so the agent can distinguish this tool from its siblings 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?

Provides explicit when-to-use ('Use it for clicking GUI elements'), identifies alternatives ('use sassy_hotkey for keyboard shortcuts and sassy_type_text for entering text'), and recommends a prerequisite call to sassy_screen_info or sassy_desktop_state for coordinates. This is complete routing guidance.

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

sassy_context_estimateA
Read-onlyIdempotent

Read-only. Estimates how much of the context window is consumed by currently registered MCP tool definitions, reporting total estimated tokens, percentage of a 200K window, the heaviest tools, tool count, and actionable recommendations (e.g. disable unused groups, drop github_full when tool count is high). Takes no parameters. If the tool registry cannot be read, it returns a note pointing to the SASSYMCP_LOAD_ALL / SASSYMCP_GROUPS environment settings instead of numbers. Use this first when context feels low or before enabling heavy groups; follow up with sassy_tool_groups to see what is loaded and sassy_tool_group_toggle to disable what you do not need.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces 'Read-only.' Beyond annotations, it discloses a concrete fallback behavior: if the registry cannot be read, it returns a note referencing SASSYMCP_LOAD_ALL / SASSYMCP_GROUPS instead of numbers. This is valuable non-obvious behavioral context.

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

Conciseness5/5

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

Every sentence in the description earns its place: what the tool does, what it reports, that it is parameterless, the fallback behavior, and when to use it. The structure front-loads the core purpose and the usage guidance comes at the end, making it easy to scan.

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?

The tool has no parameters and an output schema, so the description does not need to describe return structure. It covers the fallback case, expected output, and follow-up actions, making the description complete for safe and correct invocation.

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 has zero parameters and the schema already reflects that, so the description does not need much. However, it explicitly states 'Takes no parameters,' which removes any ambiguity and reinforces the empty input schema. This adds slight value beyond the schema, so a 4 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?

The description clearly states a specific verb and resource: it 'estimates how much of the context window is consumed by currently registered MCP tool definitions.' It also specifies the output contents (total estimated tokens, percentage, heaviest tools, tool count, recommendations), making it easy to distinguish from sibling tools. It even names follow-up tools, reinforcing its unique role.

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?

The description provides explicit when-to-use guidance: 'Use this first when context feels low or before enabling heavy groups.' It also tells the agent what to do next—follow up with sassy_tool_groups and sassy_tool_group_toggle—so the agent knows the intended workflow and alternatives.

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

sassy_copyA
Idempotent

Mutating: duplicates a file or an entire directory tree. Files are copied with metadata (shutil.copy2); directories copy recursively. Parent directories of the destination are created as needed. Refuses protected sources or destinations (SassyMCP source tree, ~/.sassymcp) and refuses sources on the sensitive-read denylist (SSH keys, AWS/GPG credentials, /etc/shadow, browser login DBs, SassyMCP tokens) — copying such material is treated as read-equivalent exfiltration and refused like a content read. Also refuses to overwrite an existing destination — run sassy_safe_delete on the destination first if you really need to replace it. Use it to duplicate files or trees; use sassy_move when you want to relocate rather than duplicate.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior1/5

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

The description directly contradicts the idempotentHint annotation. It states 'refuses to overwrite an existing destination,' meaning a second call with the same destination would fail, making the operation non-idempotent. This is a clear contradiction to the annotation's idempotentHint: true. Because the description's behavior conflicts with the annotation, the transparency score is reduced to 1.

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 description is detailed but not overly verbose. Every sentence contributes value: it states the copying behavior, metadata handling, directory recursion, parent directory creation, restrictions, overwrite refusal, and usage guidance. The opening 'Mutating:' is redundant with the annotations, but overall the structure is logical and information-dense. It earns a 4 for being comprehensive without excessive fluff.

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?

The description covers the essential aspects needed to call the tool: what it does, restrictions, overwrite behavior, and alternatives. Since an output schema exists, the description doesn't need to explain return values. It lacks explicit parameter definitions, but that is partially compensated by schema context. The main gap is the inconsistency with annotations, which affects trust but not completeness. It is nearly complete, so a 4 is appropriate.

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 schema has no descriptions for the 'source' and 'destination' parameters (0% coverage), so the description must compensate. It implies these parameters through context, such as 'duplicates a file or directory' and 'Parent directories of the destination are created as needed,' which gives some meaning. However, it never explicitly defines what each parameter represents, their formats, or constraints beyond inferable context. This is adequate but not fully explicit, hence a score of 3.

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 clearly states the tool's function: 'duplicates a file or an entire directory tree.' It specifies the verb (duplicate) and resource (file or directory), and distinguishes it from sassy_move by explicitly naming the alternative. This is unambiguous and allows an agent to understand exactly what the tool does.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use it to duplicate files or trees; use sassy_move when you want to relocate rather than duplicate.' It also mentions using sassy_safe_delete if overwrite is needed. This clearly differentiates when to use this tool versus alternatives and gives practical advice for handling the no-overwrite constraint.

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

sassy_desktop_stateA
Read-onlyIdempotent

Read-only. Lists visible open windows with title and absolute left/top/width/height coordinates spanning all monitors, returned as lean JSON. include_taskbar defaults to False, filtering out taskbar entries. Windows-only for window enumeration (pywinauto UIA backend); macOS enumerates via System Events and needs Accessibility permission granted to the app running SassyMCP; Linux returns an unsupported error. Requires a GUI session; headless hosts return an error. Use it with sassy_screen_info to locate UI elements before sassy_click, or for a quick sense of what is open on the desktop.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_taskbarNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: platform-specific behavior (Windows pywinauto UIA backend, macOS System Events with Accessibility permission, Linux unsupported error), the include_taskbar default behavior, and the requirement for a GUI session. It doesn't describe the exact JSON return shape, but the output schema exists and the description says 'lean JSON'.

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 description is dense but well-organized: it front-loads the core purpose, then covers the parameter, platform behavior, prerequisites, and usage context. Every sentence adds information. It's slightly long but each clause earns its place given the cross-platform complexity.

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 read-only list tool with one optional boolean parameter and an output schema, the description is nearly complete. It covers platform differences, prerequisites, and usage context. The only minor gap is that it doesn't explicitly state what happens on headless hosts beyond 'return an error' (which it does state), and it doesn't detail the exact JSON structure, but the output schema covers that.

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 0%, so the description must compensate. It does: it explains the include_taskbar parameter's default (False) and its effect ('filtering out taskbar entries'). This adds meaning beyond the bare schema property definition. The description could have gone further with more detail on what 'taskbar entries' means, but it's sufficient for a single boolean 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?

The description states a specific verb ('Lists') and resource ('visible open windows') with precise detail: title and absolute left/top/width/height coordinates spanning all monitors, returned as lean JSON. It clearly distinguishes itself from siblings like sassy_screen_info and sassy_click by describing its role in the UI automation workflow.

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?

The description explicitly says when to use it: 'Use it with sassy_screen_info to locate UI elements before sassy_click, or for a quick sense of what is open on the desktop.' It also provides platform-specific guidance (Windows vs macOS vs Linux) and prerequisites (GUI session, Accessibility permission on macOS), which helps an agent decide when this tool is appropriate.

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

sassy_diffA
Read-onlyIdempotent

Read-only. Compares two files and returns a unified diff. Both files are read as UTF-8 (decoding errors replaced); returns an error if either path does not exist. context_lines (integer, default 3) sets how many unchanged lines surround each hunk. The response includes identical (true when files match), lines_added and lines_removed counts, and diff text truncated at 20,000 characters. It compares file contents only, not metadata like timestamps or permissions. Use it to verify exactly what changed between two file versions before copying, restoring, or reviewing them.

ParametersJSON Schema
NameRequiredDescriptionDefault
path_aYes
path_bYes
context_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses substantial behavior: UTF-8 decoding with replacement, error behavior for missing paths, default and effect of context_lines, response fields (identical, lines_added, lines_removed, truncated diff text), and the fact that metadata is ignored. This goes well beyond what the annotations alone provide.

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 well-structured and front-loaded: read-only status and core action first, then encoding, errors, parameters, output, scope, and use case. Each sentence adds distinct information without redundancy, making it efficient for an agent to parse and 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?

For a tool with an output schema and strong annotations, the description covers all essential operational aspects: inputs, defaults, error cases, output contents and truncation limit, scope limitations, and a recommended use case. An agent has everything it needs to select and invoke the tool 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 description coverage is 0%, so the description must carry the parameter documentation burden. It clearly explains context_lines ('sets how many unchanged lines surround each hunk') and its default of 3. path_a and path_b are referred to as 'two files' and the encoding/error behavior adds useful meaning, though the description could more explicitly define their roles as source and target for diff direction.

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 opens with 'Compares two files and returns a unified diff,' a specific verb and resource that clearly identifies the tool's function. It further distinguishes itself from siblings like read_file or file_info by emphasizing content-only comparison and diff output, leaving no ambiguity about its purpose.

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?

The description states a concrete use case: 'Use it to verify exactly what changed between two file versions before copying, restoring, or reviewing them.' It also clarifies that it compares file contents only and not metadata, which implicitly steers agents away from using it for metadata checks. However, it does not explicitly name alternative tools or state when not to use it, 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.

sassy_edit_blockA
Destructive

Mutating: replaces a single exact occurrence of old_text with new_text in an existing file, and the prior contents are snapshotted into the adjacent DELETE/ staging folder before anything is written, so the change is recoverable. Refuses protected paths and refuses to run when old_text has multiple exact matches (add more context to make it unique). If there is no exact match, nothing is written: a fuzzy fallback (80% similarity) reports the closest text and a character diff instead. Reading is UTF-8 with error replacement; encoding and line endings are preserved. Returns a preview of the changed region with line numbers. Use it for one surgical edit; prefer sassy_edit_multi for batching several edits in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
new_textYes
old_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

The description goes far beyond the destructiveHint annotation by explaining the snapshot-to-staging recovery mechanism, path protections, multi-match refusal, fuzzy fallback with similarity threshold, UTF-8 handling, encoding/line-ending preservation, and returned preview. No contradiction exists between the description and annotations.

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 opens with the core action and mutation flag, then delivers dense but purposeful behavioral details. Every sentence adds necessary information about safety, matching, encoding, return value, or sibling routing; nothing feels redundant or decorative.

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 sparse schema descriptions and only destructiveHint in annotations, this description is complete: it covers safety/recoverability, failure modes, fallback behavior, encoding handling, output preview, and when to use an alternative. An agent has enough context to invoke it correctly and anticipate outcomes.

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?

With 0% schema description coverage, the description compensates fully: old_text is the exact text to match, new_text is the replacement, and path refers to an existing file. It also explains the uniqueness requirement for old_text and the fuzzy-match behavior, adding important semantic detail not present 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?

The description states a specific action: replacing a single exact occurrence of old_text with new_text in an existing file. It clearly distinguishes this tool from sassy_edit_multi by explicitly positioning it for one surgical edit, and the uniqueness condition differentiates it from broader file-write 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?

It gives explicit usage guidance: use for one surgical edit and prefer sassy_edit_multi for batching several edits. It also states refusal conditions (protected paths, multiple exact matches, no exact match) and the fallback behavior, so an agent knows when the tool will not perform as expected.

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

sassy_edit_multiA
Destructive

Mutating: applies several surgical edits to one existing file in a single call, with the prior contents snapshotted into the adjacent DELETE/ staging folder first. edits is a JSON string array of {"old", "new"} objects, applied in order against the evolving content. Any edit whose old text has zero or more than one match aborts the whole call before anything is written, so nothing is partially applied. The file must exist and protected paths are refused. Returns only a count of applied edits, no preview. Use it to batch multiple unique-match changes in one file; use sassy_edit_block when you want a single edit with a context preview.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
editsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds valuable behavior beyond that: prior contents are snapshotted into a staging folder, any non-unique match aborts the entire call before writing, edits apply in order, protected paths are refused, and only a count of applied edits is returned. No contradiction with the annotations.

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

Conciseness5/5

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

Every sentence earns its place: mutation warning, snapshot behavior, edits format and ordering, abort semantics, preconditions, return behavior, and sibling routing. The most safety-critical information is front-loaded with 'Mutating' and the all-or-nothing guarantee is stated early.

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 mutating two-parameter tool, the description covers format, ordering, atomicity, side effects, constraints, return value, and alternatives. With an output schema present and annotations supplied, nothing needed for correct invocation 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 0%, so the description carries the burden for parameters. It clearly defines edits as a JSON string array of {'old', 'new'} objects applied in order. The path parameter is only implied through 'the file must exist' and 'one existing file', but combined with the schema's required path string this is enough to use the tool correctly.

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: 'applies several surgical edits to one existing file in a single call'. It also explicitly distinguishes itself from the sibling sassy_edit_block, which is framed as the single-edit alternative. An agent can tell exactly what this tool does without opening any other definitions.

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 guidance: 'Use it to batch multiple unique-match changes in one file; use sassy_edit_block when you want a single edit with a context preview.' It also states preconditions like 'The file must exist' and that protected paths are refused, which helps an agent avoid invalid calls.

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

sassy_env_getA
Read-onlyIdempotent

Read-only. Returns the value of one environment variable from the SassyMCP server process; returns an error if the variable is not set. If the variable name contains token, key, secret, password, or api (case-insensitive), the value is masked: values longer than 12 characters show the first 4 and last 4 characters, shorter ones show as ****. Non-sensitive values are returned in full. Use it to check a single variable; use sassy_env_list when you need to browse the environment or do not know the exact name.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description discloses critical behavior: it returns an error when the variable is unset and masks sensitive values based on the variable name, including the exact masking rule. This is rich behavioral context that annotations do not provide.

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 moderately detailed but every sentence earns its place: read-only note, core behavior, error case, masking rule, and sibling routing. It is front-loaded with the most important information and contains 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?

For a one-parameter, read-only getter with an output schema and safety annotations, the description covers everything an agent needs: what it returns, when it errors, how masking works, and when to choose a sibling tool. Nothing essential is missing.

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?

With zero schema description coverage for the only parameter 'name', the description compensates fully by indicating that the parameter is an exact environment variable name. It also adds parameter-dependent semantics: whether the returned value is masked depends on substrings in the variable name.

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 clearly states the tool 'Returns the value of one environment variable' from a specific process (SassyMCP server), giving a precise verb, resource, and scope. It also differentiates itself from sibling sassy_env_list by emphasizing it handles a single, known variable.

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?

The description explicitly says when to use this tool ('check a single variable') and when to use sassy_env_list instead ('browse the environment or do not know the exact name'). This gives an agent unambiguous routing guidance.

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

sassy_env_listA
Read-onlyIdempotent

Read-only. Lists environment variables of the SassyMCP server process, sorted by name, with their count. filter_str (string, default empty) limits results to variable names containing that case-insensitive substring. Values that look sensitive (names containing token, key, secret, password, api, or credential) are masked to the first 4 and last 4 characters (or **** if short); other values are truncated at 200 characters. Use it to discover available variables before calling sassy_env_get, and use sassy_env_set to change one.

ParametersJSON Schema
NameRequiredDescriptionDefault
filter_strNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, openWorldHint=false, idempotentHint, and destructiveHint=false. The description adds substantial behavioral context beyond that: the output is sorted with a count, sensitive values are masked with a specific rule, non-sensitive values are truncated at 200 characters, and filtering is case-insensitive. This fully discloses behavior without contradicting annotations.

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

Conciseness5/5

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

Every sentence earns its place: read-only marker, output format, filter behavior, masking rule, truncation rule, and usage routing. The structure is logical and efficient with no redundant or filler content.

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?

Given a single optional parameter and an output schema (which handles return-shape documentation), the description covers all necessary call-time knowledge: what is listed, ordering, counting, masking, truncation, and how to use the filter. Nothing essential is missing for this tool's complexity.

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 description coverage is 0%, so the description must carry the full burden for the filter_str parameter. It does so by specifying the type, default, and precise semantics: limits results to variable names containing the case-insensitive substring. This is complete and adds meaning the schema lacks.

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 ('Lists') and resource ('environment variables of the SassyMCP server process'), along with formatting details (sorted by name, with count). It explicitly differentiates from sibling tools by naming sassy_env_get and sassy_env_set as related but distinct actions, so an agent can tell them apart.

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?

Description explicitly says to use this tool to discover available variables before calling sassy_env_get, and directs that changes go through sassy_env_set. This provides clear when-to-use guidance and routes to the correct alternatives without requiring the agent to infer from names alone.

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

sassy_env_setA
Idempotent

Mutating: changes the process environment of the running SassyMCP server. Sets one variable immediately for the server process and anything it spawns from this point on. It does NOT modify system or user environment settings, and the change is lost when the server restarts. Returns the variable name, scope process, and an expiry note. Use it only for values needed during the current session; for permanent configuration change the OS or shell profile instead of calling this.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it is ephemeral ('lost when the server restarts'), scoped to the process only, returns 'the variable name, scope process, and an expiry note,' and explicitly disclaims system/user modification. These are non-obvious traits the agent could not infer from readOnlyHint=false or idempotentHint=true, and there is no contradiction with annotations.

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

Conciseness5/5

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

The description is front-loaded with the core mutating behavior, followed by scope, exclusions, return value, and usage guidance. Every sentence adds distinct information with no redundancy or filler, making it efficient and easy to parse.

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 tool with two simple string parameters, an output schema, and annotations that already cover read-only/destructive/idempotent traits, the description supplies everything needed to invoke it correctly: what it does, its ephemeral scope, return value, and an explicit alternative. No critical information 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 0%, so the description must compensate. It frames the two parameters as a variable name and value within the server process scope, giving them meaning beyond the bare titles 'Name' and 'Value.' It stops short of describing edge cases like value formatting or validation, but the core semantics are clear.

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 opens with 'Mutating: changes the process environment of the running SassyMCP server' and states it 'Sets one variable immediately for the server process and anything it spawns from this point on.' This gives a specific verb, resource, and scope, and clearly distinguishes the tool from sassy_env_get/list and permanent-config tools by noting it does NOT touch system or user environment settings.

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 guidance is provided: 'Use it only for values needed during the current session; for permanent configuration change the OS or shell profile instead of calling this.' This states the when-to-use condition and names the concrete alternative, leaving no ambiguity about tool selection.

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

sassy_file_infoA
Read-onlyIdempotent

Read-only. Returns JSON metadata for a path: resolved absolute path, type (file or directory), size in bytes, and modified/created epoch timestamps. For files it adds a line count (and last line index); Excel files (.xlsx, .xls, .xlsm) also get sheet names with row and column counts via openpyxl. For directories it adds item, file, and directory counts of the immediate children. Use it to inspect a path before reading or editing it; use sassy_list_dir to browse a directory's entries and sassy_read_file for contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the core safety profile is covered. The description reinforces read-only behavior and adds useful state disclosure (e.g., Excel files handled via openpyxl, directory counts of immediate children). It doesn't disclose any hidden side effects or permissions, but given the strong annotation coverage, the added detail is sufficient.

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 description is slightly long but well-structured, front-loading the purpose and read-only nature, then detailing type-specific behaviors, and ending with usage guidance. Each sentence contributes unique information; no filler. It could be tightened (e.g., splitting into bullet points), but the density is appropriate for a tool with this much conditional output.

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?

Given that an output schema exists, the description need not enumerate return types, but it goes further by describing edge cases (Excel files, directory counts) and usage context. It covers when to use, what to expect, and routes to alternatives, making it complete for an agent to invoke correctly without further lookups.

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 schema has a single 'path' parameter with zero description coverage, so the description must compensate. It explains that 'path' refers to a file or directory path and details what metadata will be returned for that path, giving the parameter meaning beyond its bare type. It doesn't specify path format constraints (e.g., absolute vs relative), but it still adds substantial semantic value.

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 clearly states it is a read-only tool that returns JSON metadata for a path, enumerating the specific data (absolute path, type, size, timestamps, line counts, Excel sheet info, directory counts). It also explicitly distinguishes itself from sibling tools sassy_list_dir and sassy_read_file, so an agent can easily tell it apart.

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?

The description provides explicit usage guidance: 'Use it to inspect a path before reading or editing it', and names two alternatives with their distinct purposes (sassy_list_dir for browsing directory entries, sassy_read_file for contents). This leaves no ambiguity about when to select this tool over siblings.

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

sassy_get_configA
Read-onlyIdempotent

Read-only. Returns the full SassyMCP configuration plus a live system snapshot: the config dict (default shell, file read/write line limits, allowed directories, blocked commands, interceptor and permission-engine settings, panel port/enabled), OS and Python details, process and system memory, disk usage, PID, uptime seconds, CPU count, loaded tool groups, and tool-usage stats from the audit log. Takes no parameters. Use to inspect current server settings before calling sassy_set_config, or to diagnose performance and environment issues. Prefer over guessing config values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description reinforces this with "Read-only." It adds useful behavioral context by specifying that it returns a live snapshot including system, process, and audit-derived stats, which goes beyond the annotations.

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

Conciseness4/5

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

The description is detailed but well-organized with a colon-introduced list of returned fields. It is somewhat long, but every component—contents, no-params note, usage context, and preference guidance—serves a purpose.

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, read-only configuration tool, the description covers what it returns, when to use it, why it is useful, and that no arguments are needed. The presence of an output schema further reduces the burden of describing return structure.

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 schema has zero parameters and 100% coverage, so there is little to add. The description still explicitly states "Takes no parameters," removing any ambiguity for the agent, which is appropriate at the baseline for a parameterless 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 opens with a clear verb and resource: "Returns the full SassyMCP configuration plus a live system snapshot," then enumerates the contents in detail. It clearly differentiates from sibling sassy_set_config by framing this as the inspection counterpart.

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 guidance is given: "Use to inspect current server settings before calling sassy_set_config, or to diagnose performance and environment issues." It also advises "Prefer over guessing config values," which tells the agent when this tool is the right choice.

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

sassy_ghq_getA
Read-onlyIdempotent

Read-only. Fetches one file from a repo and returns its contents plus SHA. Required: owner, repo, path (repo-relative file path). Optional ref (branch, tag, or commit SHA; default empty means the repo default branch). The API returns base64 content, but this tool decodes it for you and replaces the content field with decoded_content (UTF-8, errors replaced). Requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN). Use to read a file before pushing an updated copy with sassy_ghq_push; use sassy_ghq_get for directory paths only if you want the raw directory listing object. For the fuller variant (explicit tree traversal options) use the github_full tool sassy_gh_get_file_contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNo
pathYes
repoYes
ownerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral detail: base64 decoding with UTF-8 replacement, the content field being replaced by decoded_content, GitHub token requirements, and default ref behavior. This is context beyond the structured fields and contains no contradiction.

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

Conciseness5/5

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

The description is front-loaded with the core action and then methodically adds auth, parameter semantics, decoding behavior, and sibling routing. Every sentence earns its place, with no filler or tautology.

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 read-only file fetch, the description covers prerequisites (token), parameter semantics, behavior (decoding), and how it relates to sibling tools. An output schema is present, so return structure does not need restating. Nothing needed for correct invocation is missing.

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 description coverage is 0%, so the description carries the full semantic burden. It explains required owner, repo, path (repo-relative), and optional ref with allowed values and default behavior, covering every parameter meaningfully.

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: 'Fetches one file from a repo and returns its contents plus SHA.' It also distinguishes itself from related tools by naming sassy_ghq_push as the paired write operation and sassy_gh_get_file_contents as the fuller alternative.

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 usage context: read a file before pushing an updated copy, use directory-path retrieval only when a raw directory listing is desired, and use a fuller variant for explicit tree traversal options. Names the exact alternatives and the conditions that select them.

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

sassy_ghq_issueA

Mutating: creates a GitHub issue in the given repo. Required: owner, repo, title. Optional body (default empty string) and labels as a comma-separated string, e.g. labels bug,docs becomes a label array. Returns the created issue as JSON. Requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN). This is the lean daily-driver create path; for assignees, milestones, or other fields use the github_full tool sassy_gh_create_issue. To find existing issues first, call sassy_ghq_issues; to add a comment to an existing issue, use the github_full tool sassy_gh_add_issue_comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
repoYes
ownerYes
titleYes
labelsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already establish mutation and non-idempotency. The description adds valuable context beyond annotations: it requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN) and returns the created issue as JSON. This is useful behavioral disclosure for a mutating tool, though it doesn't cover failure modes 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?

The description is dense but well organized: core behavior first, then required/optional parameters with an example, then token requirement, then routing to alternatives. Every sentence earns its place and no information is redundant with the 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?

For a 5-parameter create tool with an output schema, the description is complete: all parameters explained, defaults given, label encoding clarified, auth requirement stated, return value mentioned, and alternative tools named. An agent can call this tool correctly with the information provided.

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 description coverage is 0%, so the description carries the full burden for parameter meaning. It explicitly identifies required owner/repo/title, documents body's empty-string default, and explains that labels is a comma-separated string converted to a label array with a concrete example. Every parameter is meaningfully covered.

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 opens with a specific verb and resource: 'creates a GitHub issue in the given repo'. It also differentiates itself from the sibling 'github_full sassy_gh_create_issue' by framing itself as the 'lean daily-driver create path'.

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?

The description gives explicit routing guidance: use the github_full tool for assignees/milestones/other fields, use sassy_ghq_issues to find existing issues first, and use sassy_gh_add_issue_comment for comments. It also states required fields, leaving no ambiguity about when to invoke this tool.

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

sassy_ghq_issuesA
Read-onlyIdempotent

Read-only. Lists issues in a repo, 30 per page. Required: owner, repo. Optional state (open is default; closed or all are valid) and page (default 1; GitHub pages are 1-indexed). Returns the issue list as JSON. Note the GitHub issues endpoint includes pull requests in its results, so some entries may be PRs. Requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN). Use for a quick daily-driver listing; for label filters, sorting, direction, or custom page sizes use the github_full tool sassy_gh_list_issues. To create an issue use sassy_ghq_issue.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
repoYes
ownerYes
stateNoopen

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description goes well beyond this by disclosing the pagination behavior (30 per page), the auth requirement (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN), and the significant gotcha that the GitHub issues endpoint includes pull requests in results. These are exactly the behavioral traits an agent needs to interpret results correctly.

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 description is front-loaded with the core purpose ('Read-only. Lists issues in a repo, 30 per page.') and every subsequent sentence earns its place: parameter requirements, return format, the PR gotcha, auth, and alternative routing. It is on the longer side at eight sentences, but the density of non-redundant, decision-relevant information justifies the length.

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?

The description covers purpose, all parameters, return format, auth prerequisites, a behavioral gotcha, and alternative tool routing. An output schema exists for return values, and annotations cover the safety profile. Nothing an agent needs to select and invoke 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?

Schema description coverage is 0%, so the description carries the full burden for parameter semantics. It compensates well: it marks owner and repo as required, documents state's valid values (open default; closed or all), and explains page's default and 1-indexed convention. Owner and repo are self-evident from their names, so the description covers all non-obvious parameter behavior.

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 opens with a specific verb and resource: 'Lists issues in a repo, 30 per page.' It clearly states the read-only nature and distinguishes itself from siblings by naming sassy_ghq_issue (create) and sassy_gh_list_issues (full-featured alternative). An agent can immediately understand what this tool does and what it is not.

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 guidance is provided: 'Use for a quick daily-driver listing; for label filters, sorting, direction, or custom page sizes use the github_full tool sassy_gh_list_issues. To create an issue use sassy_ghq_issue.' This names concrete alternatives and the exact conditions that select them, leaving nothing to inference.

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

sassy_ghq_prA

Mutating: creates a pull request. Required: owner, repo, title, head (source branch containing your commits), base (target branch the PR merges into, e.g. main). Optional body (default empty string). Returns the created PR as JSON. Requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN). The tool itself creates immediately with no draft mode; for draft PRs or more control use the github_full tool sassy_gh_create_pr. To review an existing PR end-to-end (metadata, diff, comments, CI status) in one call, use sassy_combo_pr_review instead of fetching pieces manually.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseYes
bodyNo
headYes
repoYes
ownerYes
titleYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses that the tool is mutating, creates immediately, has no draft mode, returns the created PR as JSON, and requires a GitHub token. The annotations already mark readOnlyHint=false, and the description adds meaningful behavioral context that an agent needs before calling.

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 core action, then covers required parameters, optional body, token requirement, immediate creation behavior, and alternatives in a compact, organized way. No sentence is wasted.

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 pull request creation tool, this description covers the action, required and optional parameters, output format, authentication, behavioral caveats, and when to choose sibling tools. With annotations and an output schema also present, the description is complete enough for correct invocation.

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 0%, so the description must compensate. It does clarify head as 'source branch containing your commits,' base as 'target branch the PR merges into,' and body's default empty string. Owner, repo, and title are not elaborately described, but their standard meaning is reasonably inferable.

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 opens with a specific verb and resource: 'creates a pull request.' It also differentiates this tool from related alternatives like sassy_gh_create_pr and sassy_combo_pr_review, so an agent can clearly identify which tool is which.

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?

The description explicitly states when to use this tool versus alternatives: 'The tool itself creates immediately with no draft mode; for draft PRs or more control use ... sassy_gh_create_pr' and 'To review an existing PR end-to-end ... use sassy_combo_pr_review.' It also lists required inputs and the token requirement, leaving little ambiguity.

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

sassy_ghq_protectA
Idempotent

Mutating: applies a fixed branch-protection preset to branch (default main) in owner/repo. The preset blocks force pushes and deletions and enforces the rules on admins, but sets no required status checks and no required PR reviews. Returns the protection result as JSON. Requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN). Use for the quick standard lock-down of main; for custom rules (required reviews, approval counts, status checks, allowing force pushes) use the github_full tool sassy_gh_protect_branch instead, and to inspect or remove protection use sassy_gh_get_branch_protection or sassy_gh_remove_branch_protection.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
ownerYes
branchNomain

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

The annotations already mark the tool as mutating, non-destructive, and idempotent, and the description adds valuable context: it blocks force pushes and deletions, enforces rules on admins, sets no required status checks or reviews, returns JSON, and requires a GitHub token. No contradiction with annotations exists.

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 key action and preset details, then gives auth requirements and routing guidance. Every sentence adds necessary information with no filler or 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?

Given the output schema exists, the return structure does not need to be re-explained. The description covers auth prerequisites, exact preset behavior, branch default, and alternatives, making it complete for correct invocation of this three-parameter 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 description coverage is 0%, so the description carries the parameter-semantics burden. It clarifies that branch defaults to main and references owner/repo context. Since owner and repo are conventional GitHub identifiers and the branch behavior is explicitly described, this is sufficient, though the description could be slightly more explicit about the expected forms of owner and repo.

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 clearly states a specific verb and resource: it applies a fixed branch-protection preset to a branch in owner/repo. It further differentiates itself from sassy_gh_protect_branch, sassy_gh_get_branch_protection, and sassy_gh_remove_branch_protection by naming what this tool does and does not do.

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 routing guidance is present: use this for the quick standard lock-down of main, use sassy_gh_protect_branch for custom rules, and use the get/remove tools to inspect or remove protection. An agent knows exactly when to choose this tool versus alternatives.

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

sassy_ghq_pushA
Destructive

Mutating: creates or updates multiple files in one atomic commit via the Git Data API, avoiding the SHA/ETag problems of single-file writes. Required: owner, repo, branch (must be the target branch name, e.g. main or a feature branch), message (commit message), files as a JSON string: an array of {path, content} objects. Malformed files JSON returns an error instead of pushing. Each file write overwrites the existing content at that path, so get the current content with sassy_ghq_get first when editing existing files. Requires a GitHub token (GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN). For single-file operations, branches, or repos the github_full tool sassy_gh_push_files is the fuller equivalent.

ParametersJSON Schema
NameRequiredDescriptionDefault
repoYes
filesYes
ownerYes
branchYes
messageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool as destructive and non-idempotent. The description adds context consistent with those hints: atomic commit, overwriting of file contents, error on malformed JSON, and the requirement of a GitHub token. This goes well beyond the annotation data and prepares the agent for side effects.

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

Conciseness5/5

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

Every sentence adds value: core purpose, required parameters, format notes, error behavior, overwrite warning, auth requirement, and an alternative tool. The description is front-loaded with the most important information and stays focused without verbosity.

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 mutating tool with no parameter descriptions and a destructive annotation, this description covers purpose, usage, side effects, authentication, and alternatives. The output schema exists to handle return values, so nothing critical is missing for correct invocation.

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 description coverage is 0%, so the description must explain all parameters. It does so comprehensively: branch must be the target branch name (with examples), message is the commit message, and files must be a JSON string array of {path, content} objects. This adds meaning the schema cannot convey.

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 clearly states a specific verb and resource: 'creates or updates multiple files in one atomic commit via the Git Data API'. It also explains the benefit of avoiding SHA/ETag problems, and explicitly differentiates from a single-file equivalent, making it easy for an agent to distinguish this tool from siblings.

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 guidance is provided: when editing existing files, the agent should first get content with sassy_ghq_get; for single-file operations, branches, or repos, the tool sassy_gh_push_files is named as the fuller alternative. This gives clear when-to-use and when-not-to-use instructions.

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

sassy_hooks_activateA
Idempotent

Mutating session state: appends the named hook to the in-memory active hook list (hooks can be stacked). Read the playbook carefully afterward. hook_name is the exact hook ID; if not found, the tool returns an error plus the available hook names and substring-based suggestions. On success it returns the full expert playbook: name, owning module, description, and step-by-step instructions covering which tools to use, in what order, what to look for, and what not to do. Use sassy_hooks_list first to discover valid hook names. Activate a hook when a task matches a known domain and you want structured expert guidance; use sassy_hooks_deactivate to unload it.

ParametersJSON Schema
NameRequiredDescriptionDefault
hook_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining that hooks can be stacked, that the hook list is in-memory, and what happens on both success and failure. It also tells the agent to read the returned playbook carefully. The only slight tension is 'appends' vs the idempotentHint, but stacking is described as possible rather than guaranteed, so no contradiction is evident.

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?

Every sentence adds value: the mutating effect is front-loaded, followed by the prerequisite, error behavior, success return, and when to use alternatives. It is detailed but not bloated, and no sentence is redundant with the schema or annotations.

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 tool with an output schema, the description covers the essential context: what the hook is, how to find it, what to expect on failure, what is returned on success, and how to undo the action. Nothing needed for correct invocation is missing.

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 0%, but the description fully compensates: it defines hook_name as 'the exact hook ID,' describes lookup-failure behavior, and points to sassy_hooks_list for discovering valid names. This adds meaning well beyond the bare property name 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?

The description states a specific action and resource: it 'appends the named hook to the in-memory active hook list.' It also clarifies the mutating nature and distinguishes itself from related hook tools like sassy_hooks_list and sassy_hooks_deactivate, so an agent can tell it apart at a glance.

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?

Usage is explicitly conditioned: 'Activate a hook when a task matches a known domain and you want structured expert guidance.' It also tells the agent to use sassy_hooks_list first and sassy_hooks_deactivate to unload, providing clear when-to-use and when-not-to-use guidance.

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

sassy_hooks_deactivateA
Idempotent

Mutating: removes hooks from the in-memory active list for this session. hook_name is optional; pass a specific active hook name to deactivate just it, or pass nothing to clear all active hooks at once. Returns {"deactivated": name} on success or {"status": "all hooks deactivated"} when clearing; attempting to deactivate a hook that is not active returns an error. Use it when a playbook no longer applies to the task or you want a clean slate before activating a different one; use sassy_hooks_list to see which hooks are currently active.

ParametersJSON Schema
NameRequiredDescriptionDefault
hook_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=false and idempotentHint=true, and the description aligns with that. It adds valuable context beyond annotations: the session-scoped nature, the optional behavior (specific hook vs. clearing all), and the error case for non-active hooks. It does not over-explain but covers the key behavioral nuances.

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 compact and front-loaded with the core purpose ('removes hooks'). Every sentence adds value: behavior, return formats, error case, and usage context. No fluff or 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?

For a simple tool with one optional parameter, the description covers all necessary context: what the tool does, when to use it, how to use it, expected returns, and error behavior. The presence of an output schema is not needed because return shapes are described explicitly.

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?

The schema has one optional parameter with no description (coverage 0%), but the description fully compensates. It explains that hook_name is optional, that passing a name deactivates that specific hook, and that omitting it clears all hooks. This is complete parameter documentation.

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 clearly states the action (removing hooks from the in-memory active list) and the resource (hooks). It distinguishes this tool from siblings like sassy_hooks_activate and sassy_hooks_list by naming the specific scope (session) and the contrast with listing active hooks.

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 gives explicit when-to-use guidance: when a playbook no longer applies or you want a clean slate before activating a different hook. It also names the alternative sassy_hooks_list for inspecting active hooks, providing a clear decision path for the agent.

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

sassy_hooks_listA
Read-onlyIdempotent

Read-only. Lists every registered operational hook with metadata only (no full instructions): name, owning module, one-line description, and trigger phrases, plus a count and the names of currently active hooks. Takes no parameters. Use this to discover which playbooks exist before calling sassy_hooks_activate; if you know the user's request but not the right hook, use sassy_hooks_suggest to rank matches against the request text first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive safety, so the bar is lower. The description adds valuable behavioral context beyond annotations by stating it returns 'metadata only (no full instructions)' and includes a count plus names of currently active hooks. This clarifies a significant limitation an agent would otherwise discover only after calling the tool.

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

Conciseness5/5

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

Three tightly-written sentences front-load the essential listing behavior, then state the lack of parameters, then give usage routing. Every sentence earns its place, with no filler or repeated annotation details beyond a single-word 'Read-only.'

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 read-only listing tool with rich annotations and an output schema, the description is complete: it states scope, output composition, what is excluded, and how to route to alternatives. Nothing needed for correct invocation 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 has zero parameters, for which the baseline is 4. The description redundantly states 'Takes no parameters,' which is already obvious from the empty schema but removes any ambiguity. No additional parameter semantics are needed.

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 uses a specific verb 'Lists' with a precise resource ('every registered operational hook') and clearly defines the scope and output ('metadata only: name, owning module, one-line description, trigger phrases, count, active hooks'). This makes it immediately distinguishable from sibling tools like sassy_hooks_activate, sassy_hooks_suggest, and sassy_hooks_deactivate.

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 usage guidance is provided: use this tool to discover playbooks before calling sassy_hooks_activate, and use sassy_hooks_suggest instead when the request is known but the right hook is not. This names both when and when-not to use the tool, fully meeting the criterion.

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

sassy_hooks_suggestA
Read-onlyIdempotent

Read-only. user_text is the user's request in free text (required); the tool scores it against each hook's trigger phrases and returns ranked matching hooks, the top_match name, and a hint naming the hook to consider activating. Returns an empty suggestion list with a note to proceed without a playbook when nothing matches. Use when you are unsure which hook applies or proactively when a request sounds like a known domain; then call sassy_hooks_activate with the top match.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context: it returns ranked hooks, a top_match, and a hint, and specifies the empty-list behavior with a note to proceed without a playbook. This enriches what the annotations alone convey without contradicting them.

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

Conciseness5/5

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

The description is compact and front-loads the read-only nature, then covers the core behavior, output, edge case, and usage guidance in three sentences. No filler; every sentence earns its place. Structure is logical and scannable.

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 tool with one parameter, an output schema (implicitly providing return structure), and clear annotations, the description fully covers what an agent needs: input semantics, output composition, empty-result handling, and when to use it. The reference to the sibling activation tool ties it into the workflow. Nothing essential 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 0%, so the description must carry the burden for the single parameter. It explains user_text as 'the user's request in free text (required)' – sufficient to convey the meaning and that it's free-form. While it doesn't give format examples, the description compensates for the schema's lack of documentation.

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 (scores), resource (hooks), and outcome (returns ranked matching hooks, top_match, hint). It clearly distinguishes from sassy_hooks_activate by describing its role as a precursor. It also covers the empty-result edge case, leaving no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

Explicitly says when to use it: 'Use when you are unsure which hook applies or proactively when a request sounds like a known domain.' It then directs the agent to call sassy_hooks_activate with the top match, naming the next step. This is direct and actionable, with no inference needed.

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

sassy_hotkeyA
Destructive

Mutating: sends a real keyboard shortcut to the host. keys is a '+'-separated combination, e.g. 'ctrl+c', 'alt+tab', 'ctrl+shift+s', split and passed to pyautogui. Works on Windows, macOS, and Linux. There is no output validation beyond the confirmation echo, so verify the effect with sassy_screenshot if it matters. Use it for shortcuts like save, copy, or window switching; use sassy_type_text to type actual text into a field and sassy_click for mouse actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

The description proactively labels the tool as 'Mutating,' matching the destructiveHint annotation, and discloses that it sends a real keyboard shortcut via pyautogui. It adds important caveats beyond annotations: there is no output validation beyond a confirmation echo, so the agent should verify effects with sassy_screenshot.

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 compact and front-loaded with the mutation warning, then follows a logical structure: purpose, key syntax, platform support, verification caveat, and sibling routing. Every sentence carries useful information and there is 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?

For a single-parameter, mutating tool, this description is complete. It covers what the tool does, how to format the parameter, which platforms it supports, what the output reliability is, and when to use alternatives. The presence of an output schema means the return format does not need to be detailed in the description.

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?

The schema only provides a bare 'keys' string with no description, so the description fully compensates by explaining that keys are '+'-separated and by providing multiple valid examples. It also reveals the implementation detail that the string is split and passed to pyautogui, which helps the agent format the input correctly.

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 the exact action—'sends a real keyboard shortcut to the host'—and clarifies the resource being manipulated. Concrete examples like 'ctrl+c' and 'ctrl+shift+s' make the purpose unambiguous and distinguish it from sibling text and mouse 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 tells when to use this tool: 'Use it for shortcuts like save, copy, or window switching.' It also names the alternatives—sassy_type_text for typing text and sassy_click for mouse actions—and even recommends sassy_screenshot for verification when the effect matters.

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

sassy_httpA
Destructive

Can mutate or read depending on method. GET, HEAD, and OPTIONS run freely; POST, PUT, PATCH, and DELETE require allow_mutating=True (default False). Only http and https URLs are accepted, and SSRF validation blocks private IPs, link-local addresses, and cloud metadata endpoints. headers is a JSON object string, body is a UTF-8 string, timeout_seconds defaults to 15, and redirects are followed automatically. Returns status code, headers dict, method, url, and body, which is JSON-parsed when possible and otherwise plain text truncated at 10,000 characters. Use it for quick API calls; prefer web_inspector for deep page inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
bodyNo
methodNoGET
headersNo
allow_mutatingNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations (readOnlyHint=false, destructiveHint=true) are general, but the description adds crucial behavioral detail: method-specific safety, SSRF protection (private IPs, link-local, cloud metadata), redirect following, JSON parsing, and 10,000-character truncation. It also clarifies the exact mutation gate, exceeding what annotations convey. No contradiction.

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

Conciseness5/5

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

The description is dense but every sentence adds value: safety model, URL restrictions, parameter formats, response handling, and usage guidance. It is well-ordered, front-loads the mutation gate, and avoids redundancy despite its length.

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?

Given the tool's complexity (multiple methods, security constraints, response parsing) and the existence of an output schema, the description covers all agent-relevant aspects: allowed methods, safety checks, parameter semantics, defaults, response structure, and usage routing. Nothing needed 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.

Parameters5/5

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

Schema description coverage is 0%, yet the description compensates fully by explaining every parameter: headers as JSON object string, body as UTF-8 string, timeout_seconds default 15, method default GET, allow_mutating default False, and url as the target. It adds formats, defaults, and behavior beyond the bare 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 clearly states the tool makes HTTP requests with read or mutate semantics depending on method, and explicitly distinguishes itself from web_inspector for deep page inspection. It names specific verbs (GET, HEAD, OPTIONS vs POST, PUT, PATCH, DELETE) and resource scope (HTTP/HTTPS URLs), leaving no ambiguity about purpose.

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 states when to use ('quick API calls') and when to prefer an alternative ('prefer web_inspector for deep page inspection'). Also provides conditional usage rules: mutating methods require allow_mutating=True, and only http/https URLs are allowed. No inference needed.

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

sassy_http_pingA
Read-onlyIdempotent

Read-only. Health-checks one or more URLs with a HEAD request each and reports status code plus round-trip time. urls is a single comma-separated string. Each URL gets a 5-second timeout, redirects are followed, and the response lists per-URL results (status code and ms), with status blocked when SSRF validation rejects a URL or error when the request fails. SSRF protection blocks private IPs, link-local addresses, cloud metadata, and non-http(s) schemes. Use it for quick up/down and latency checks; prefer sassy_http when you need the response body or anything beyond HEAD.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

The description discloses extensive behavioral details beyond the annotations: 5-second timeout per URL, redirect following, per-URL result structure (status code and ms), status values for blocked/error, and SSRF protections (private IPs, link-local, cloud metadata, non-http(s)). This far exceeds the readOnlyHint and idempotentHint already provided.

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 structured with the core purpose first, followed by technical details and usage guidance. Every sentence adds value—no filler—and it remains compact despite covering timeout, redirects, SSRF, and response format.

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 health-check tool, the description is comprehensive: it covers input format, behavioral constraints, error/block handling, and selection criteria versus the sibling. Combined with the readOnlyHint and idempotentHint, 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.

Parameters5/5

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

The schema only defines 'urls' as a string with no description (0% coverage). The description compensates by specifying that it is 'a single comma-separated string,' which is essential for correct invocation. This fully clarifies the parameter format.

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 clearly states the tool health-checks URLs with HEAD requests and reports status code and round-trip time. It explicitly distinguishes from the sibling sassy_http (which is for response bodies), making its purpose unambiguous and unique.

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 states when to use this tool ('quick up/down and latency checks') and when not to ('when you need the response body or anything beyond HEAD'), naming the alternative sassy_http. This provides clear routing guidance.

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

sassy_list_dirA
Read-onlyIdempotent

Read-only. Lists directory entries with [FILE] and [DIR] prefixes, directories sorted before files alphabetically. depth controls recursion (default 2, clamped to 1-10). Below the top level, dotfiles and node_modules/pycache/.git are skipped, and per-level caps apply (500 entries at top, 100 deeper, 1000 lines total) with warnings naming how many items were hidden. Use it to explore a directory tree; use sassy_file_info for metadata about one path and sassy_read_file to read a file's contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses important behavioral quirks: dotfiles and common directories are skipped below the top level, per-level entry caps apply, depth is clamped, and warnings name how many items were hidden. This is exactly the kind of non-obvious behavior an agent needs to anticipate.

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 with no filler. The most important information (read-only, listing behavior) is front-loaded, followed by non-obvious limits and sibling routing. Every clause 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 two-parameter directory listing tool, the description covers ordering, recursion, hidden entries, caps, warnings, and usage guidance. The output schema already explains return shape, so no additional output documentation is needed. 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?

The schema has 0% description coverage, but the description compensates well for `depth` by explaining recursion, default value, and clamping to 1-10. The `path` parameter is not explicitly described, but its meaning is strongly implied by 'directory entries' and 'directory tree', so the slight gap is minor.

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 opens with 'Read-only. Lists directory entries' and immediately specifies the exact resource and behavior: directory listing with [FILE]/[DIR] prefixes and sorted output. It clearly distinguishes itself from siblings by stating that metadata queries belong to sassy_file_info and content reads belong to sassy_read_file.

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 says 'Use it to explore a directory tree' and names the sibling tools for other needs, making the when-to-use and when-not-to-use boundary explicit. This is textbook-level routing guidance.

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

sassy_memory_contextA
Read-onlyIdempotent

Read-only: loads the standard session-start context bundle in one call. Call this at the START of every session. project (default "") is an optional substring filter that adds a project_memories section. Returns a dict with eight sections: critical (up to 10 priority-critical records), high_priority (up to 10), active_tasks (up to 10 tagged task-active), blockers (up to 10 tagged blocker), recent_memories (up to 10 most recently updated), project_memories (up to 15, only when project is given), patterns (up to 10 tagged pattern), and milestones (up to 5 newest). Use instead of issuing many separate searches at startup; use sassy_memory_search for targeted follow-up queries and sassy_memory_recall for one exact record.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
blockersYes
criticalYes
patternsYes
milestonesYes
active_tasksYes
high_priorityYes
recent_memoriesYes
project_memoriesYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds valuable context: it is a bulk loader, limits counts per section, and includes optional project filtering. It confirms the read-only nature and explains output structure, going beyond the bare annotations.

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 description is concise, front-loads the purpose and usage instruction, then details the output sections efficiently. Every sentence adds value, though it is slightly long due to enumerating sections, but that is essential for clarity.

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?

Given the single optional parameter, comprehensive annotations, and presence of an output schema, the description covers everything needed: when to call, what it returns, and alternatives. No critical information 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 schema has 0% description coverage, so the description must compensate. It explains the 'project' parameter as an optional substring filter that adds a project_memories section, providing critical meaning that the schema lacks. This fully clarifies the parameter's role.

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 clearly states the tool loads a standard session-start context bundle in one call, specifies it is read-only, and enumerates the exact sections returned. It differentiates from siblings by naming sassy_memory_search and sassy_memory_recall as alternatives for different needs.

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 instructs to call at the START of every session, and provides clear when-not-to-use guidance by pointing to sassy_memory_search for targeted follow-ups and sassy_memory_recall for one exact record. This leaves no ambiguity about when to invoke this tool.

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

sassy_memory_forgetA
Destructive

Mutating and destructive: permanently deletes the single memory record whose key exactly matches. key (required) must match exactly — only that one record is removed, and there is no undo, trash, or recovery. Returns {"forgotten": true|false, "key", "error"}; forgotten is false with an error message if no record matches. Use only when stored information is obsolete, wrong, or should not persist across sessions. Milestones written by sassy_memory_log live in a separate append-only table and cannot be deleted by this tool. Never use to clear state at session end — that is what sassy_memory_handoff is for.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyYes
errorYes
forgottenYes

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, and the description layers on substantial additional context: irreversibility ('no undo, trash, or recovery'), exact-match semantics, the forgotten:false error path when no record matches, and the exclusion of sassy_memory_log milestones. All statements are consistent with the annotations.

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

Conciseness5/5

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

Six sentences, each carrying a distinct fact: core action, match/irreversibility, return contract, usage condition, milestone exclusion, and handoff routing. It is front-loaded with the destructive action and contains zero 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?

For a one-parameter destructive delete with annotations and an output schema, nothing an agent needs to invoke it correctly is missing: purpose, safety profile, return semantics, exclusion of milestones, and the routing alternative are all present. No open questions remain.

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 description coverage is 0%, so the description carries the full burden. It explains the single parameter meaningfully: 'key (required) must match exactly — only that one record is removed,' plus the no-match error behavior. The '(required)' hint slightly duplicates the schema's required array, but the exact-match and single-record semantics are genuine added value.

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 deletes the single memory record whose key exactly matches' — with precise single-record scope. This differentiates it from siblings like sassy_memory_search, sassy_memory_remember, and sassy_memory_log without opening any of 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?

Gives an explicit when-to-use condition ('Use only when stored information is obsolete, wrong, or should not persist across sessions') and an explicit when-not-to-use with a named alternative ('Never use to clear state at session end — that is what sassy_memory_handoff is for'). 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.

sassy_memory_handoffA

Mutating: runs the session-end handoff protocol — three writes at once. task (required) names the work. status defaults to "in-progress" (also: blocked, needs-review, paused, completed). completed, next_steps, blockers, files_touched are comma-separated lists; project scopes the entry; context_notes holds anything the next session must know. It (1) upserts memory record task___state (task lowercased, spaces to underscores, first 40 chars) tagged task-active,handoff with high priority — repeat calls for the same task and project overwrite the previous handoff; (2) posts the payload to the crosslink channel "task-handoff"; (3) logs a milestone. Returns {"handoff_saved", "memory_key", "crosslink_channel", "next_session", "crosslink_posted"} — crosslink_posted is false when the crosslink post failed and the handoff is local-only. The next session resumes with sassy_memory_context plus sassy_crosslink_recv on "task-handoff". Use at session end or when context runs low — not as a substitute for sassy_memory_remember.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
statusNoin-progress
projectNo
blockersNo
completedNo
next_stepsNo
context_notesNo
files_touchedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
memory_keyYes
next_sessionYes
handoff_savedYes
crosslink_postedYes
crosslink_channelYes

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses the three side effects (upsert memory record, post to crosslink channel, log milestone), the overwrite behavior on repeat calls, the failure mode (crosslink_posted false, local-only handoff), and the exact memory key format. This goes well beyond the annotations, which only say readOnlyHint=false, openWorldHint=false, idempotentHint=false, destructiveHint=false. The description adds critical behavioral context about mutation and failure handling.

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 description is dense but well-organized: it front-loads the mutating nature and the three writes, then details parameters, then behavior, then return value, then usage guidance. It is long but every sentence earns its place given the complexity of the tool. Slight deduction for density that could be split into clearer sections.

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?

The description covers the tool's purpose, parameters, side effects, return value, failure mode, and usage context. It even explains how the next session resumes. With an output schema present and this level of detail, 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden. It explains the required 'task' parameter, the status enum values, the comma-separated list format for several fields, the project scoping, and the context_notes purpose. It also explains how the task slug is derived (lowercased, spaces to underscores, first 40 chars), which is not 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?

The description opens with 'Mutating: runs the session-end handoff protocol — three writes at once,' which states a specific verb, resource, and behavior. It clearly distinguishes this from memory tools like sassy_memory_remember and sassy_memory_forget by naming the handoff protocol and the three writes.

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?

The description explicitly says 'Use at session end or when context runs low — not as a substitute for sassy_memory_remember.' This gives clear when-to-use and when-not-to-use guidance, and names the alternative tool. It also explains the next-session resume flow, which helps an agent decide when to invoke it.

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

sassy_memory_logA

Mutating: appends a milestone event to the separate milestones table (not the memories table). event (required) is the free-text description of what happened (e.g. "deployed v1.0"); project and tags (comma-separated) are optional. Milestones are append-only — they cannot be edited or deleted, so phrase entries as finished facts. Returns {"logged", "project"}. Use for significant completions, decisions, or changes worth a durable timeline; use sassy_memory_remember for ongoing state you will later update, and sassy_memory_milestones to read the milestone history back.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
eventYes
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
loggedYes
projectYes

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false), the description discloses crucial behavioral constraints: the operation is append-only, entries cannot be edited or deleted, and the return value is {'logged', 'project'}. This gives the agent a clear model of side effects and persistence semantics.

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 dense but every sentence serves a purpose: mutation flag, target table, parameter semantics, append-only constraint, return value, and usage alternatives. It is front-loaded with the most critical facts and contains 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 only 3 simple parameters and an output schema present, the description still goes beyond the minimum by covering mutation behavior, storage target, immutability, return shape, parameter details, and sibling routing. 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.

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates: it explains event is a required free-text description with an example, and that project and tags are optional with tags being comma-separated. Every parameter is given semantic meaning beyond raw schema titles.

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 ('appends'), a specific resource ('milestones table'), and explicitly distinguishes it from the 'memories table'. It also names the intended use case ('significant completions, decisions, or changes'), leaving no ambiguity about what this tool does.

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 provides when-to-use guidance ('Use for significant completions, decisions, or changes worth a durable timeline') and names exact alternative tools for different scenarios (sassy_memory_remember for ongoing state, sassy_memory_milestones for reading history). This routes the agent to the correct sibling without extra inference.

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

sassy_memory_milestonesA
Read-onlyIdempotent

Read-only: reads back milestone events written by sassy_memory_log, newest first. project (default "") is an optional substring filter on the project field. limit (default 20, hard-capped at 100) controls how many of the newest entries are returned. Returns {"count", "milestones"} with each entry carrying id, event, project, tags, and timestamp. Use to review the timeline of completions and decisions for a project or overall; use sassy_memory_search to find arbitrary memory records, which live in a different table.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
projectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
milestonesYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond that: the hard cap of 100 on limit, the 'newest first' ordering, and the return format with specific fields. It also notes the data lives in a different table than search, which is useful operational context. No contradictions.

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

Conciseness5/5

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

The description is front-loaded with the most important fact ('Read-only') and packs each sentence with purpose. It covers behavior, parameters, return format, and usage in three sentences with zero fluff.

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 two-parameter, read-only tool with an output schema, the description covers all necessary aspects: what it does, how to filter and limit, the return structure, and when to use an alternative. Nothing essential is missing for an agent to invoke it correctly.

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?

The schema provides only types and defaults with no descriptions (coverage 0%), so the description must fully compensate. It does: project is explained as an optional substring filter with default '', and limit is explained as controlling count of newest entries, with default 20 and a hard cap at 100. This adds significant meaning beyond the raw 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 ('reads back'), a specific resource ('milestone events written by sassy_memory_log'), and an ordering ('newest first'). It explicitly distinguishes from sassy_memory_search by noting they operate on different tables, so an agent can tell them apart 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 explicitly says 'Use to review the timeline of completions and decisions' and then gives the alternative: 'use sassy_memory_search to find arbitrary memory records, which live in a different table.' This provides clear when-to-use and when-not-to-use guidance, naming the sibling directly.

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

sassy_memory_recallA
Read-onlyIdempotent

Read-only: fetches one memory record by exact key match (fetching also bumps the record's access counter). key (required) must match exactly — if you do not know the key, use sassy_memory_search instead. Returns {"found", "memory", "error"} where memory is the full record (key, value, tags, priority, project, created_at, updated_at, access_count); when no record matches, found is false and error names the key. Use when you know precisely which record you need, e.g. a task state key from sassy_memory_handoff or sassy_memory_context. It does not search text: for keyword discovery use sassy_memory_search, and for the whole session-start bundle use sassy_memory_context.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorYes
foundYes
memoryYes

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses the access-counter bump as a side effect beyond the annotations (which only state readOnlyHint, idempotentHint, destructiveHint). It also clarifies the return structure and the 'found: false' error behavior, and states it does not search text. This adds meaningful context that the annotations do not cover.

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 description is fairly long but every sentence contributes value—core function, return shape, side effect, and usage alternatives are all covered. It is front-loaded with the primary purpose and the exact-match requirement, and it avoids filler. Slightly long for a single-parameter tool, but efficient in content.

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?

Given the tool's low complexity (one required parameter), the presence of an output schema, and annotations that cover safety, the description is exceptionally complete. It explains the exact-match requirement, the return fields, the side effect, and when to use alternatives, leaving no gap for correct invocation.

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?

With schema description coverage at 0%, the description carries the full burden for the 'key' parameter. It explains that the key must match exactly and points to alternatives if the key is unknown. It does not specify format or length constraints, but the essential semantics are clearly conveyed.

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 ('fetches') and resource ('one memory record') with the exact matching criterion ('exact key match'), and explicitly distinguishes from the sibling sassy_memory_search by noting it does not search text. This leaves no ambiguity about what the tool does.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'if you do not know the key, use sassy_memory_search instead' and 'Use when you know precisely which record you need, e.g. a task state key from sassy_memory_handoff or sassy_memory_context.' It also names alternatives for keyword discovery and session-start bundles, covering when to use and when not to.

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

sassy_memory_rememberA
Idempotent

Mutating: writes a persistent memory record (SQLite, survives server restarts). Upserts by key: if the key already exists the record is fully overwritten (value, tags, priority, project) and updated_at refreshed; otherwise a new record is created. key (required) is the unique identifier — use the naming conventions task_state, pattern, blocker, decision so later lookups work. value (required) is the content. tags is a comma-separated string (e.g. "task-active,tls"). priority defaults to "normal" (critical|high|normal|low); high-priority items appear in the session-start bundle. project scopes the record. Returns {"key", "action": "created"|"updated"}. Use whenever you learn something worth keeping across sessions; use sassy_memory_forget to remove a stale entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
tagsNo
valueYes
projectNo
priorityNonormal

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyYes
actionYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the full overwrite semantics, persistence across server restarts, refreshed updated_at field, priority behavior for session-start bundles, and the return shape. It enriches the idempotentHint with concrete upsert-idempotency details and does not contradict any annotation.

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 information-dense but every sentence earns its place: mutation first, then upsert semantics, then parameter guidance, then return shape, then usage guidance. Key behavioral facts are front-loaded before parameter details.

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?

Given the tool's complexity normal for a persistent memory write, the description covers parameters, defaults, return values, persistence, naming conventions, and sibling alternatives. Nothing needed to call the tool correctly is missing.

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?

With 0% schema description coverage, the description carries the full parameter burden and succeeds: it provides naming conventions for key, comma-separated format for tags, allowed values and default for priority, and scope semantics for project. This is far more useful than the bare 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 opens with 'Mutating: writes a persistent memory record' and then explains the upsert behavior, distinguishing it clearly from read/search/delete sibling memory tools. The verb is specific ('writes'/'upserts') and the resource is named ('persistent memory record, SQLite').

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?

The description explicitly says 'Use whenever you learn something worth keeping across sessions' and names the alternative for cleanup: 'use sassy_memory_forget to remove a stale entry.' This gives the agent clear when-to-use and when-not-to-use guidance.

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

sassy_memory_statsA
Read-onlyIdempotent

Read-only: reports aggregate health of the memory system. Takes no parameters. Returns {"total_memories", "by_priority" (counts keyed by priority level), "milestones" (total milestone count), "projects" (sorted list of distinct non-empty project names)}. Use to get an overview of how much is stored and how it is organized before deciding how to query; use sassy_memory_context to load the actionable session-start bundle.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectsYes
milestonesYes
by_priorityYes
total_memoriesYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already provide readOnly/idempotent/non-destructive hints, and the description adds meaningful behavioral detail: exact returned keys and their semantics, including counts keyed by priority and a sorted list of distinct non-empty project names. This goes beyond what annotations convey, though it does not discuss error behavior or scalability.

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 compact and front-loaded: read-only status and purpose come first, followed by return shape and usage guidance. Every sentence contributes, with no filler or repetition of schema details.

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

Completeness5/5

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

For a zero-parameter read-only stats tool with an output schema and complete annotations, the description covers the return contract, the organization of results, and when to choose an alternative. 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?

The tool has zero parameters, so there is little to document; the description explicitly confirms 'Takes no parameters' and the schema is empty. This satisfies the baseline for parameter-less tools.

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 uses a precise verb ('reports') and resource ('aggregate health of the memory system'), then names the sibling it is not called for (sassy_memory_context). It clearly distinguishes itself from other memory tools by stating exactly what it returns.

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 states when to use the tool ('before deciding how to query') and names the alternative sassy_memory_context for a session-start bundle. This gives direct routing guidance with no ambiguity.

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

sassy_minify_testA
Read-onlyIdempotent

Read-only diagnostic. sample_json is a JSON string containing a sample GitHub API response; nothing is sent anywhere. The tool parses it, runs it through the same minifier applied to GitHub tool responses, and reports original_chars, minified_chars, savings_percent, original/minified estimated tokens (chars divided by 4), tokens_saved, and the minified_data itself. Invalid JSON returns an error instead of results. Use it to gauge how much the GitHub response shrinker will reduce a heavy github_full response before you commit to a large call; it is a test harness, not a live API caller.

ParametersJSON Schema
NameRequiredDescriptionDefault
sample_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds important behavioral context beyond that: nothing is sent anywhere, invalid JSON returns an error instead of results, and it lists the exact computed metrics returned.

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 description is front-loaded with 'Read-only diagnostic' and then gives complete, actionable detail. Some phrasing is slightly redundant (e.g., referencing the minifier twice), but every sentence contributes useful 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?

Given the tool's low complexity, one parameter, existing annotations, and output schema, the description covers everything needed to call it correctly: input meaning, local processing, output fields, invalid-input behavior, and recommended usage context.

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 0%, so the description must carry the meaning of sample_json. It does so by stating that it is a JSON string containing a sample GitHub API response. It could include an example or more structure, but for a single parameter this is adequate guidance.

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: it parses a sample JSON string, runs it through the GitHub response minifier, and reports size/token metrics. It also distinguishes itself as a diagnostic/test harness rather than a live API caller, which separates it from sibling 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?

The description explicitly says when to use it: before committing to a heavy github_full call, to gauge how much the response shrinker will reduce size. It also explicitly says what it is not ('a test harness, not a live API caller'), giving clear exclusion guidance.

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

sassy_mkdirA
Idempotent

Mutating: creates a directory, including any missing parents, and succeeds silently if the path already exists. Refuses paths that fail the read-path policy (blocked or protected locations). Returns the resolved path. sassy_write_file already creates missing parent directories, so call this mainly when you need an empty directory or an explicit container for later steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide idempotentHint=true, destructiveHint=false, and readOnlyHint=false; the description complements rather than repeats them. It adds genuine behavioral context: explicit 'Mutating:' declaration, silent-success idempotency confirmation, refusal of paths violating the read-path policy, and the resolved-path return value. No contradiction with annotations.

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

Conciseness5/5

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

Three sentences, zero wasted words. The mutation flag and core action are front-loaded, followed by policy/return behavior, then usage routing. Every sentence adds information that is not available in the schema or annotations.

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?

Given the tool's simplicity (one required parameter, output schema present, no nested objects), the description covers everything needed to invoke it correctly: behavior, idempotency, policy constraints, return value, and decision boundary against a sibling. 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 0% for the single 'path' parameter, so the description must carry the semantic burden. It does so meaningfully: path is a directory path that may have missing parents, is subject to policy checks, and gets resolved. It stops short of specifying format details (relative vs absolute, trailing slashes), but for a one-parameter mkdir tool the meaning is adequately conveyed.

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 ('creates a directory'), adds precise behavioral detail ('including any missing parents', 'succeeds silently if the path already exists'), and implicitly distinguishes itself from file-writing siblings by framing what mkdir does that other tools do not. The agent can tell exactly what this tool accomplishes.

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 (sassy_write_file) and states the condition that selects this tool instead: 'sassy_write_file already creates missing parent directories, so call this mainly when you need an empty directory or an explicit container for later steps.' This is textbook when-to-use guidance.

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

sassy_moveA

Mutating: moves or renames a file or directory to the destination path. Refuses protected sources and destinations, and refuses sources on the sensitive-read denylist (SSH keys, AWS/GPG credentials, /etc/shadow, browser login DBs, SassyMCP tokens) — moving such material is treated as read-equivalent exfiltration and refused like a content read. Also refuses to overwrite an existing destination — sassy_safe_delete the destination first if you genuinely need to replace it. Use it to relocate or rename; use sassy_copy to duplicate without removing the original, and sassy_safe_delete to remove instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceYes
destinationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses mutation, refusal of protected sources/destinations, the sensitive-read denylist with concrete examples, the read-equivalent exfiltration stance, and the no-overwrite behavior. This adds substantial context beyond the annotations, which only signal non-read-only and non-idempotent; there is no contradiction with destructiveHint=false because the tool preserves data and refuses overwrites.

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 description is dense but somewhat long; however, every sentence carries operational or safety information, and the mutating behavior is front-loaded. The safety list and sibling routing are justified, though 'relocate or rename' is repeated near 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?

Despite having no parameter descriptions in the schema, the description covers argument semantics, refusal conditions, overwrite prevention, and sibling alternatives. Since an output schema exists, the description does not need to explain return values; nothing an agent needs to call or avoid this tool is left unstated.

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?

With 0% schema description coverage, the description compensates by identifying 'source' as a file or directory and 'destination' as the target path, and by explaining protected sources/destinations. It does not provide per-parameter path-format details, but the two string parameters are simple enough that the semantics are sufficiently clear.

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 opens with 'Mutating: moves or renames a file or directory to the destination path,' giving a specific verb, resource, and action. It also explicitly distinguishes itself from sassy_copy and sassy_safe_delete, so an agent can tell siblings apart immediately.

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?

The description explicitly states when to use the tool: 'Use it to relocate or rename; use sassy_copy to duplicate without removing the original, and sassy_safe_delete to remove instead.' It also gives concrete refusal conditions, such as protected paths and existing destinations, making invocation decisions unambiguous.

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

sassy_observability_healthA
Read-onlyIdempotent

Read-only health check for monitoring. Returns a small dict: status (always "healthy" when reachable), uptime_seconds, tool_calls_total, error_count, and whether dev live-reload is enabled. Counters accumulate in memory since server start and reset on restart. Takes no parameters. Use for liveness probes, load balancers, or a quick sanity check that the server is up. For CPU/memory/disk figures use sassy_observability_metrics instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses return semantics (status is always 'healthy' when reachable), memory-accumulating counters, reset-on-restart behavior, and that it takes no inputs. This gives an agent a full behavioral model without an 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?

Each sentence earns its place: what it is, what it returns, counter lifecycle, use cases, and the routing to the metrics sibling. It is front-loaded and has 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?

For a parameterless health-check tool with no output schema, the description is complete: it covers the return dict, counter semantics, and typical use cases, and points to the alternative for other monitoring data. 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.

Parameters4/5

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

With zero parameters, the schema already covers the interface fully. The description's explicit 'Takes no parameters' confirms this, but there is no additional parameter meaning to add; baseline 4 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?

The description opens with a specific verb and resource: 'Read-only health check for monitoring,' then enumerates the exact fields returned. It explicitly names the sibling alternative, sassy_observability_metrics, for CPU/memory/disk figures, so an agent can distinguish this tool from the nearby observability 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?

It gives explicit conditions: use for liveness probes, load balancers, or a quick server sanity check, and directs CPU/memory/disk needs to sassy_observability_metrics instead. No ambiguity about when to choose this tool.

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

sassy_observability_metricsA
Read-onlyIdempotent

Read-only. Returns real-time server metrics: uptime_seconds, tool_calls_total, error_rate (percent, rounded to two decimals), timestamp, version, and live_reload_enabled. Also includes cpu_percent, memory_percent, and disk_percent when psutil is installed (optional dependency). Takes no parameters; counters are in-memory since server start. Use for performance monitoring, capacity questions, and error-rate checks. For a simple up/down probe use sassy_observability_health.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable context beyond that: counters are in-memory since server start, and cpu/memory/disk fields are conditional on the optional psutil dependency. Minor gaps remain, such as whether counters reset on restart being slightly implicit, but the added context is substantial.

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 'Read-only' and the core metric summary, and each sentence earns its place: field list, optional dependency note, parameter clarification, use cases, and sibling alternative. There is no filler or redundant restatement.

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?

With no output schema, the description carries the burden of explaining return values and does so well by listing all fields and explaining conditional presence of the psutil-dependent metrics. It also covers use cases and the sibling alternative. Minor omissions like timestamp format/version scope and an explicit statement of JSON structure prevent a perfect score.

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, so the schema already fully covers this dimension; the description's explicit 'Takes no parameters' is clear and prevents an agent from inventing arguments. No additional parameter semantics are possible or needed, so the baseline 4 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 ('Returns'), names the resource (real-time server metrics), and enumerates the exact fields returned. It also distinguishes itself from the sibling sassy_observability_health by indicating that tool is for a simple up/down probe.

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 lists when to use: performance monitoring, capacity questions, and error-rate checks. It also names the alternative for a different need (sassy_observability_health for up/down probes), leaving no ambiguity about selection.

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

sassy_observability_tool_statsA
Read-onlyIdempotent

Read-only. Returns the in-memory tool usage tracker's stats (per-tool call counts, success/error tallies, recency scores) plus pruning_suggestions: tool names whose usage score falls below a 0.05 threshold, i.e. candidates for disabling to slim the tool surface. Takes no parameters. Use to see which tools are actually used and which can be pruned. Differs from sassy_observability_metrics (aggregate server counters) by reporting per-tool usage. For raw recent call records use sassy_recent_tool_calls.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: it is in-memory (implying ephemeral state), reports recency scores, and includes pruning_suggestions with an explicit 0.05 threshold. This discloses content and semantics that annotations do not.

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 'Read-only' and the core return statement, then efficiently covers contents, threshold, usage, and sibling differentiation. Every sentence adds distinct information without fluff or repetition.

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, read-only stats tool, the description fully explains what will be returned (per-tool stats plus pruning suggestions), the threshold logic, and how it differs from adjacent tools. With no output schema present, the description carries the burden of return-value disclosure and does so completely.

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, and the schema is empty, so the baseline is 4. The description explicitly states 'Takes no parameters,' which confirms the empty schema. There is no parameter ambiguity to resolve.

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: 'Returns the in-memory tool usage tracker's stats' with concrete contents (call counts, success/error tallies, recency scores, pruning suggestions). It also differentiates from sassy_observability_metrics and sassy_recent_tool_calls, so an agent can distinguish it from siblings 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?

Explicitly states when to use it ('Use to see which tools are actually used and which can be pruned') and names alternatives with their distinguishing conditions: sassy_observability_metrics for aggregate server counters, sassy_recent_tool_calls for raw recent call records. This gives the agent clear routing guidance.

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

sassy_offline_commandsA
Read-onlyIdempotent

Read-only. Returns the offline-safe command listing built live from the tool registry, grouped by tool group with usage counts. Optional group filters to one group (see sassy_tool_groups for group names). Optional verbose=false returns names only (about a quarter of the tokens); true adds one-line purposes. LAN tools (SSH, wifi, adb wifi) are included since they need a network but not the internet. The response also lists tools unavailable offline and a system_prompt_snippet for pasting into a local model's prompt. Use before sassy_offline_handoff to build the local model's tool menu; never paste the full catalog into a small local model.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNo
verboseNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description adds behavior beyond the annotations: it clarifies that LAN tools are included (since they need a network but not the internet), that the response lists tools unavailable offline, and that verbose=false cuts token usage to about a quarter. These details are not present in the annotations or schema, and nothing contradicts the readOnlyHint/idempotentHint/destructiveHint annotations.

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

Conciseness4/5

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

The description is dense but efficient, opening with 'Read-only.' and then delivering purpose, parameters, inclusion rules, and usage guidance in a logical order. No sentence is filler; it is slightly long but each 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?

The description covers the tool's output structure (grouped, usage counts, unavailable tools, system_prompt_snippet), parameter semantics, token considerations, network scope (LAN vs internet), and sequencing with sassy_offline_handoff. With an output schema present, this is a complete and self-sufficient definition for an agent.

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 description coverage is 0%, so the description fully compensates. It explains that 'group' filters to one group and directs to sassy_tool_groups for valid names, and that 'verbose' controls whether names only or names plus one-line purposes are returned, along with token impact. Both parameters are clearly and usefully described.

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 ('Returns') and a specific resource ('offline-safe command listing built live from the tool registry, grouped by tool group with usage counts'). It clearly distinguishes this tool from siblings like sassy_tool_catalog or sassy_tool_groups by emphasizing the offline-safe filtering and live registry construction.

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?

The description gives explicit usage context: 'Use before sassy_offline_handoff to build the local model's tool menu' and warns 'never paste the full catalog into a small local model.' It also explains the optional group filter via reference to sassy_tool_groups, but does not mention when to prefer other sibling tools like sassy_tool_catalog, so it stops short of a full when/where-not matrix.

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

sassy_offline_handoffA

Mutating. Writes a structured offline handoff and optionally starts the local Hermes node. Required parameter task describes what was being worked on. Optional channel (default "joint") is the crosslink channel Hermes polls; next_steps is a newline- or semicolon-separated list of ordered steps; start_node=false, when true, launches hermes_node.py in a persistent session. The tool writes key task_offline__state to memory, mirrors it to the crosslink channel, and returns the exact env line and launch command plus the node session name. Errors are returned inline if hermes_node.py is missing or no fallback model is ready. Use after sassy_offline_status confirms the link is down, when handing ongoing work to a local model; read Hermes replies with sassy_crosslink_recv.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYes
channelNojoint
next_stepsNo
start_nodeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses mutation, memory writes, channel mirroring, optional node launch, returned env/launch/session info, and inline errors for missing hermes_node.py or missing fallback model. This is rich behavioral context and does not contradict the annotations.

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

Conciseness5/5

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

The description is dense but well-organized: purpose, parameter semantics, side effects, errors, and usage. Each sentence earns its place, and the most important information is front-loaded.

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

Completeness5/5

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

Given the four-parameter tool with no schema parameter descriptions and minimal annotations, the description fully covers prerequisites, side effects, failure modes, and return values. The presence of an output schema also reduces the need to detail return shape, and the description still summarizes it.

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?

With 0% schema description coverage, the description carries the full burden and succeeds: it explains task, channel (with default 'joint'), next_steps (newline/semicolon-separated ordered steps), and start_node (launches hermes_node.py when true). Every parameter receives meaningful semantics.

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 opens with a specific verb and resource: 'Writes a structured offline handoff and optionally starts the local Hermes node.' It also names related siblings (sassy_offline_status, sassy_crosslink_recv) to place the tool in a clear workflow, so an agent can distinguish it from other sassy_* 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 states when to use the tool: 'Use after sassy_offline_status confirms the link is down, when handing ongoing work to a local model.' It also tells the agent how to continue the workflow with sassy_crosslink_recv, providing a clear usage context.

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

sassy_offline_statusA
Read-onlyIdempotent

Read-only. Runs the real network-state check and reports the full offline picture: link state (online, offline, or DNS-dead), DNS resolving, probe anchors, check age, gate mode and whether it is active, local loopback inference backends with available models and the chosen fallback, the hermes_node.py script path, counts of offline-safe vs LAN vs internet tools, and, when degraded, each unavailable tool with a named substitute. Optional probe=true (default) runs a fresh ~1-2 second probe; false reads the cached verdict instantly. Use as the first step when connectivity is suspect or before any offline workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
probeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses the probe behavior: it runs a fresh ~1-2 second probe by default, or reads a cached verdict instantly when probe=false. It also details what the output includes, which is not required but adds transparency about the tool's side effects and latency.

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 description is long but efficient; it front-loads the purpose and then packs a dense list of output items. Each clause adds useful information, and the parameter explanation is concise. It is not as short as ideal but avoids redundancy and is well-structured, though the long enumeration could be seen as slightly over-specified.

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 the tool has an output schema, the description need not detail return types, yet it still lists the content areas, which is helpful. It covers when to use it, the parameter behavior, and the read-only nature. It lacks explicit error scenarios or prerequisites, but for a read-only status tool this is acceptable; the description is sufficiently complete for an agent to invoke it correctly.

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?

The schema only defines a boolean 'probe' with default true and no description. The tool description fully explains the parameter: 'probe=true (default) runs a fresh ~1-2 second probe; false reads the cached verdict instantly.' This adds meaningful semantics beyond the raw schema, which is essential given the 0% schema description coverage.

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: 'Runs the real network-state check' and reports the full offline picture. It enumerates concrete output categories (link state, DNS, probe anchors, gate mode, tool counts, substitutes), making the tool's scope unmistakable and distinguishing it from generic status or ping tools. The opening 'Read-only' reinforces its nature.

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 explicitly says 'Use as the first step when connectivity is suspect or before any offline workflow,' which gives a clear trigger condition. It does not name alternative tools or explicitly say when not to use it, but the context is strong enough for an agent to select it appropriately among siblings like sassy_http_ping or sassy_offline_commands.

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

sassy_panelA
Idempotent

Mutating (start/stop/rotate change state). Controls the Control Panel, the loopback-only web UI for the permission engine, settings, event log, and classifiers. Optional action (default "status"): status returns running state, the startup-enabled flag, and a tokenless URL — the bearer token is never revealed here; start launches the panel and enables auto-start at future startups (flips panel.enabled in config) and returns a tokenless URL plus a hint to call action="url"; stop shuts it down and disables auto-start; url prints the tokenized URL without starting (this is the explicit token-reveal action); rotate regenerates the panel bearer token, persists it to the token file, audit-logs the rotation, and returns the new token (the old token stops working immediately, no restart needed). Binds 127.0.0.1 on the configured port (default 8765, auto-increments if taken). Send the token in the X-Panel-Token header (the ?token= query form is deprecated but still accepted). Use for interactive inspection and tuning of permissions/settings rather than doing it by hand with sassy_set_config.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNostatus

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior1/5

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

Annotations declare idempotentHint=true, but the description's rotate action 'regenerates the panel bearer token... old token stops working immediately' — repeated calls produce different tokens and effects, clearly non-idempotent. This contradicts the annotation, and the rule requires a score of 1 for contradiction.

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 long but dense; each sentence earns its place. It front-loads the mutating nature, then systematically covers actions, network binding, token transport, and alternative tools. The semicolon-separated action list improves scannability.

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 tool with five actions, security implications (token reveal), and network details, the description covers everything: action outcomes, token handling, header vs deprecated query form, port behavior, and autostart config changes. Despite the annotation contradiction, the description itself is complete for correct invocation.

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 0% for the lone `action` parameter, but the description fully documents every possible value (status, start, stop, url, rotate) with detailed behavior and outcomes. This adds critical semantics absent from 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 ('Controls') and resource ('Control Panel, the loopback-only web UI...'), and distinguishes the tool from sibling sassy_set_config by explaining it is for interactive tuning rather than manual config. This makes the purpose unmistakable.

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

Usage Guidelines5/5

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

It explicitly says 'Use for interactive inspection and tuning of permissions/settings rather than doing it by hand with sassy_set_config,' naming the alternative and the condition. It also enumerates each action's effect (status, start, stop, url, rotate), leaving no ambiguity about when to invoke it.

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

sassy_permissionA
Idempotent

Read-only by default, mutating on change actions. Front door to the four-mode safety system gating shell and file tools. action="status" (default) reports the effective mode, derivation, sandbox roots, and active rules. set_mode sets permission.mode to strict (block destructive patterns), confirm (return a confirm token), sandbox (relaxed inside sandbox roots, anything outside is refused), or bypass (allow all except protected paths); mode="" clears the override so it derives from the legacy interceptor.destructiveAction setting. Switching to bypass requires confirm='YES' (exact, case-sensitive); the privilege mutations add_root (widens the sandbox jail), add_rule, and clear_rules also require confirm='YES', while remove_root (shrinks the jail) needs no confirmation. add_rule appends a JSON rule like {"action":"deny","tool":"sassy_shell","command":"rm"} (first match wins, before the mode default); clear_rules empties the list. Invalid modes and rules are rejected. Use to inspect or change safety gating; pair with sassy_shell_confirm in confirm mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
pathNo
ruleNo
actionNostatus
confirmNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

The description adds substantial behavioral detail beyond the annotations: 'Read-only by default, mutating on change actions' clarifies the readOnlyHint=false nuance; it discloses that switching to bypass requires exact case-sensitive confirm='YES', that add_root/add_rule/clear_rules also require confirmation while remove_root does not, that invalid modes/rules are rejected, and that mode='' derives from a legacy setting. This far exceeds the annotation baseline and contains no contradiction.

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

Conciseness4/5

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

The description is long but dense and front-loaded with the core purpose before diving into mode details and confirm requirements. For a tool with 4 modes, a rule system, and confirmation gates, the length is justified — nearly every clause carries new information. It could be slightly tightened but is well structured.

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?

Very complete for a complex safety-governance tool: covers all modes, confirmation requirements, rule precedence (first match wins), invalid input rejection, and legacy derivation. An output schema exists so return values need not be described. The only notable gap is the path parameter's role being implicit rather than explicit.

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?

At 0% schema coverage the description must compensate, and it does for most parameters: action='status' default, mode values (strict/confirm/sandbox/bypass, '' clears override), confirm='YES' requirement, and the rule JSON syntax for add_rule. However, the path parameter is only implied through the add_root/remove_root actions and is never explicitly mapped, leaving a small semantic gap.

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: the tool is the 'front door to the four-mode safety system gating shell and file tools.' It clearly distinguishes itself from siblings like sassy_shell and sassy_shell_confirm by positioning itself as the permission/governance layer, and it names the pairing with sassy_shell_confirm. An agent can immediately tell what this tool is for.

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 says 'Use to inspect or change safety gating' and pairs with sassy_shell_confirm in confirm mode. It explains when each mode (strict/confirm/sandbox/bypass) is appropriate via their semantics. However, it does not state explicit exclusions or name alternative tools to prefer in other cases, so there's a small gap in when-not-to-use guidance.

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

sassy_persona_capabilitiesA
Read-onlyIdempotent

Read-only. Returns the SassyMCP capabilities guide, the instruction manual for advanced features: dynamic desktop vision (sassy_screen_glance for cheap repeated watches, sassy_screen_watch for change-triggered frames, sassy_screen_diff for before/after verification, sassy_screen_capture for full-res), Android phone vision (sassy_phone_ui for the structured accessibility tree with coordinates, sassy_phone_state, sassy_phone_watch, sassy_phone_glance) and interaction (tap, swipe, type, key, open), sensitive context detection (interaction tools refuse on login, payment, account, 2FA, or permission screens unless confirmed=True after explicit user confirmation), pause/resume for user handoff, the setup wizard steps, and the hook playbook system (sassy_hooks_suggest/activate/deactivate with categories like web_audit, security_scan, code_review, phone_autonomous). Takes no parameters, returns plain text. Use before any vision, phone, or hook workflow to learn the tool roles and safety rules.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations (readOnlyHint, idempotentHint, destructiveHint) by detailing the guide's contents: it lists the specific tools covered, the sensitive context detection safety behavior, and that it 'returns plain text.' This gives the agent a rich understanding of what to expect without needing to invoke the tool. The description is consistent with all annotations, with no contradiction.

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

Conciseness4/5

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

The description is a single, dense sentence that front-loads the core purpose and then enumerates the guide's contents. While relatively long, every clause conveys essential information about the tool's scope and use. The structure is effective, though it could be slightly more concise by moving some tool lists to an appendix; overall it earns its length.

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 read-only guide tool, the description covers everything an agent needs: what it returns, when to use it, the specific content it covers, and the safety-relevant behaviors. The output schema exists, so the return format is already specified. No critical information is missing; an agent can confidently decide to call this tool based solely on the description.

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 has zero parameters and schema coverage is 100%, so the baseline is 4. The description redundantly states 'Takes no parameters,' which adds no new information beyond the schema. Since there are no parameters to document, the description correctly does not attempt to add parameter semantics.

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 clearly states that the tool returns the SassyMCP capabilities guide, an instruction manual for advanced features. It enumerates the specific tool categories (desktop vision, phone vision, interaction, sensitive context detection, pause/resume, setup wizard, hook playbook) which distinguishes it from any sibling tool. The verb 'returns' with the resource 'capabilities guide' is specific and unambiguous.

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?

The description explicitly instructs 'Use before any vision, phone, or hook workflow to learn the tool roles and safety rules.' This provides clear when-to-use guidance and implies it is a prerequisite for those workflows. It also notes the tool takes no parameters, which is helpful context, and implicitly contrasts with the many sibling tools that perform actual actions.

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

sassy_persona_contextA
Read-onlyIdempotent

Read-only. Returns the current user context loaded at startup from the persona file at $SASSYMCP_HOME/persona.md (default ~/.sassymcp/persona.md): role, expertise, managed systems, active projects, and communication preferences. If no file exists it returns a template telling you how to create one. Takes no parameters, returns plain text. This is personal user configuration, not server state. Use when you need who-you-are-working-for context; to get it bundled with all persona documents in one call, use sassy_persona_full instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, non-destructive, and non-open-world, and the description does not contradict them. It adds valuable behavioral detail beyond annotations: the exact file path, that context is loaded at startup, that a missing file returns a creation template, and that the result is plain text and personal configuration rather than server state.

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 compact and front-loaded: it opens with the key trait ('Read-only'), states the core purpose immediately, and layers supporting details (file location, fallback behavior, return format) in a logical order. Every sentence adds useful information without fluff.

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 no-parameter tool with an output schema already present, the description covers the source location, content scope, missing-file behavior, return type, personal-vs-server distinction, and the relevant sibling alternative. 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.

Parameters5/5

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

The tool has zero parameters, and the description explicitly states 'Takes no parameters,' leaving no ambiguity about argument handling. With an empty schema, this explicit statement fully covers the parameter dimension.

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 ('Returns') and a clear resource ('current user context loaded at startup from the persona file'), and enumerates the content fields (role, expertise, managed systems, active projects, communication preferences). It also distinguishes itself from the sibling sassy_persona_full by noting the difference in scope.

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 tells the agent when to use the tool ('Use when you need who-you-are-working-for context') and names the alternative for a broader need ('to get it bundled with all persona documents in one call, use sassy_persona_full instead'). This is direct guidance 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.

sassy_persona_decisionsA
Read-onlyIdempotent

Read-only. Returns the decision framework defining when to act without discussion versus when to slow down: execute immediately for file ops, code changes, git, builds, and diagnostics; state approach then execute for architectural changes, schema changes, or breaking API changes; require explicit confirmation for production data destruction without backup, credential rotation on live systems, security posture reduction, or financial transactions; hard stop and refuse for SQLi/XSS/command-injection introduction, hardcoded secrets, or disabled auth. Takes no parameters, returns plain text. Use to calibrate caution on risky operations; pair with sassy_persona_full for the complete bundle.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds 'returns plain text' and 'Takes no parameters,' but most of the content describes the framework's substance rather than revealing additional side effects or constraints.

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 efficiently structured: front-loaded read-only status, then semicolon-separated categories, then usage guidance. Every sentence contributes value without repetition or 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?

Given zero parameters, comprehensive safety annotations, and an output schema, the description covers all needed invocation details: no arguments, plain-text output, purpose, and relationship to a sibling tool. Nothing essential 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 has zero parameters, so the rubric baseline is 4. The description reinforces this with 'Takes no parameters,' eliminating any ambiguity even before consulting 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 resource ('decision framework') and clearly enumerates its content categories: execute immediately, state approach then execute, require explicit confirmation, and hard stop. The focus on caution calibration distinguishes it from siblings like sassy_persona_full.

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 instructs agents to use it to calibrate caution on risky operations and to pair with sassy_persona_full for the complete bundle. It does not list explicit exclusions, but the intended context 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.

sassy_persona_fullA
Read-onlyIdempotent

Read-only. Loads the complete operating bundle in one call and returns a JSON object with six keys: style, decisions, practices, observability, capabilities, and context (each the same plain text document returned by the corresponding narrow tool). Takes no parameters. Call this on first connection to a SassyMCP session so the session starts with operating parameters, decision rules, engineering standards, the observability guide, the capabilities manual, and user context all at once. It is the heaviest of the persona tools in context cost; if you only need one section, call the narrow tool (sassy_persona_style, sassy_persona_decisions, sassy_persona_practices, sassy_persona_observability, sassy_persona_capabilities, or sassy_persona_context) instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations, notably the warning that it is the heaviest persona tool in context cost, and that it returns the same documents as the narrow tools. No contradictions with annotations.

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

Conciseness4/5

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

The description is somewhat long but each sentence contributes: purpose, return structure, usage guidance, and cost warning. It is front-loaded with 'Read-only' and 'Loads the complete operating bundle.' Slight redundancy in stating 'Takes no parameters' could be trimmed, but overall it is well organized.

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?

Given the tool's simplicity (no parameters) and the presence of an output schema, the description fully covers what an agent needs: what it returns, when to use it, and the trade-off with narrow tools. The cost warning and explicit alternative names make it complete for correct invocation.

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 has zero parameters, so the baseline is 4. The description redundantly states 'Takes no parameters' which is already evident from the empty schema, but no additional parameter semantics are needed. The score reflects the baseline for parameterless tools.

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 (loads), a clear resource (complete operating bundle), and enumerates the six returned keys. It explicitly differentiates from the narrow persona siblings by naming them, leaving no ambiguity about what this tool does.

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 guidance: call on first connection to a session, and if only one section is needed, use the corresponding narrow tool instead. Names all six alternatives, giving clear when-to and when-not-to usage context.

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

sassy_persona_observabilityA
Read-onlyIdempotent

Read-only. Returns the cross-system observability guide: which introspection tools exist and what each returns — sassy_get_config (system info, uptime, loaded modules), tool analytics (invocation counts, frequency scores), sassy_context_estimate (token use by tool definitions, critical for 100+ tool sessions), audit trail (every invocation with timestamp, sanitized args, elapsed ms), health metrics, cross-session status, and the capability map (sassy_self_check reconciles the module manifest against the live registry and flags BROKEN modules; sassy_tool_catalog lists every registered tool). Also prescribes the recommended first-call sequence: sassy_self_check, then sassy_tool_catalog, then sassy_persona_full, then sassy_hooks_suggest. Takes no parameters, returns plain text. Use when starting a session or debugging what the server can do.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing the output format ('returns plain text'), the fact that it takes no parameters, and prescriptive behavior: the recommended first-call sequence. It also adds details like sanitized args and elapsed ms in audit trail entries. The annotations already cover read-only and idempotence, and the description reinforces this without contradicting it.

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

Conciseness4/5

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

The description is long but information-dense, and the key facts are front-loaded: 'Read-only. Returns the cross-system observability guide.' Every sentence adds value, though the long list of internal capabilities could arguably be trimmed without losing essential guidance.

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?

Given the tool's role as an observability guide, the description fully covers what it returns, its output format, its no-parameter contract, and when to use it. The output schema exists, so return details are already structured. The recommended first-call sequence adds practical operational context beyond the basics.

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 zero parameters, so the baseline is 4. The description explicitly confirms 'Takes no parameters,' which is consistent with the empty input schema. No further parameter explanation is needed.

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 action and resource: 'Returns the cross-system observability guide' and enumerates the exact contents, such as sassy_get_config, tool analytics, audit trail, and the capability map. This makes it clearly distinct from the many sibling observability tools, which return actual metrics rather than a guide to those tools.

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 use: 'Use when starting a session or debugging what the server can do.' It does not explicitly list when-not-to-use scenarios or contrast directly with observability siblings, but the use context is clear enough for an agent to select it appropriately.

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

sassy_persona_practicesA
Read-onlyIdempotent

Read-only. Returns the engineering standards document: security defaults applied to every project (input validation, output escaping, parameterized queries, CSRF, auth best practices, security headers, rate limiting, upload validation, secrets handling, dependency audits, TLS, structured logging), code quality rules (types, tests, comments explain why, error handling), architecture patterns (env config, health checks, graceful shutdown, idempotency, circuit breakers, feature flags), platform-specific guidelines (Cloudflare, Rust, Python, TypeScript, Go, Docker, Git), and MCP GitHub tool patterns (use sassy_gh_push_files rather than create_or_update_file for existing files). Takes no parameters, returns plain text. Use before writing or reviewing code to know the expected standards.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds 'Read-only' (consistent) and 'returns plain text,' which discloses the return format beyond what annotations provide. It also summarizes the document's scope, giving behavioral context without contradicting any annotation.

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

Conciseness3/5

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

The description is front-loaded with 'Read-only. Returns the engineering standards document,' which is good. However, the exhaustive listing of security, code quality, architecture, and platform topics makes it long and somewhat dense. A shorter summary of the document's coverage would have been equally effective while remaining concise.

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, read-only document retrieval tool, the description covers what the tool returns, the return type (plain text), the content areas, and when to use it. Combined with the output schema, no essential context 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 has zero parameters, and the description confirms 'Takes no parameters.' Per the 0-param baseline, no further parameter documentation is needed; the description fully satisfies the requirement.

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 clearly states the tool returns the engineering standards document and enumerates its major sections, making the resource and verb specific. However, it does not explicitly contrast with sibling persona tools such as sassy_persona_decisions or sassy_persona_full, so differentiation is inferred rather than stated.

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?

The description provides a clear usage context: 'Use before writing or reviewing code to know the expected standards.' It does not include exclusions or name alternatives, so it falls short of full when/when-not guidance, but the context is unambiguous.

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

sassy_persona_styleA
Read-onlyIdempotent

Read-only. Returns the expert-mode operating parameters injected into the AI session: execution priority (act first, explain later), communication style (declarative, no preambles, no safety disclaimers on standard operations), autonomy level (never ask permission for reversible operations, complete full scope), and precision standards (exact tool names, paths, line numbers, quantified results). Takes no parameters and returns a plain text document. Use when you want the session's behavior directives alone; for the whole bundle (style + decisions + practices + observability + capabilities + user context) in one call, use sassy_persona_full instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description agrees ('Read-only'), so there is no contradiction. The description adds value beyond annotations by disclosing the return format ('plain text document') and the specific categories of content the agent will receive, which helps set expectations about the response.

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

Conciseness5/5

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

Three sentences, each earning its place: content enumeration with clarifying parentheticals, return format confirmation, and usage guidance with the sibling pointer. The description is information-dense without fluff and front-loads the key facts (read-only, returns parameters) before routing to the alternative.

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 read-only tool with an output schema and strong annotations, the description covers everything an agent needs: what is returned, in what format, and when to choose this tool over the full-bundle sibling. No critical gap remains given the simplicity of the 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?

The tool has zero parameters and 100% schema coverage, so the schema has nothing left to document. Per the baseline for 0-param tools, a 4 is appropriate; the description confirms 'Takes no parameters', which reinforces the schema rather than merely repeating it.

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 ('Returns the expert-mode operating parameters injected into the AI session') and enumerates the exact content domains (execution priority, communication style, autonomy level, precision standards). It also explicitly differentiates from the sibling tool sassy_persona_full by noting it returns only the style subset, so an agent can distinguish them without inspecting 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?

The description gives explicit when-to-use guidance: 'Use when you want the session's behavior directives alone', and names the exact alternative (sassy_persona_full) plus what it adds (decisions, practices, observability, capabilities, user context). Nothing about selection 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.

sassy_read_fileA
Read-onlyIdempotent

Read-only. Reads a text file with line-based pagination and returns numbered lines under a header showing how many lines were selected, the start line, the total line count, and how many remain. offset is 0-based and defaults to 0; a negative offset reads the last N lines (tail mode, where length is ignored); length caps lines returned (default 1000). Directories are refused with a pointer to sassy_list_dir. Use it for large files by paging; prefer sassy_read_multiple when you need several files in one call, and sassy_search_files to find text across a tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
lengthNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool as read-only and idempotent, and the description adds substantial behavioral detail beyond that: line-based pagination, header contents, 0-based offset, negative offset tail mode, length capping behavior, and directory refusal. This gives the agent a clear model of how the tool behaves at call time.

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 dense but every clause earns its place: purpose, return shape, parameter semantics, edge-case behavior, and sibling routing. It is front-loaded with the read-only nature and primary action before diving into details, 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?

Given the output schema exists and annotations cover safety, the description covers everything else needed to invoke the tool correctly: pagination semantics, defaults, tail mode, directory error behavior, and alternatives. Nothing essential is missing for an agent to select and call this tool properly.

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 description coverage is 0%, so the description must carry the parameter semantics, and it does thoroughly. It explains offset semantics including 0-based indexing and negative tail mode, length's role and default, and that length is ignored in tail mode. The path parameter is clearly implied as the file to read.

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: 'Reads a text file with line-based pagination' and details the exact output format (numbered lines under a header). It also distinguishes itself from siblings by naming what it is not for directories and by pointing to sassy_list_dir, sassy_read_multiple, and sassy_search_files.

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?

The description gives explicit usage context: use it for large files by paging, prefer sassy_read_multiple when several files are needed, and prefer sassy_search_files for searching text across a tree. It also states that directories are refused and routes the agent to sassy_list_dir, leaving no ambiguity about when to choose this tool.

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

sassy_read_multipleA
Read-onlyIdempotent

Read-only. Reads several files at once and concatenates them, each under a header like '--- path (N lines) ---'. paths is a JSON array of file paths (falls back to a comma-separated string if it is not valid JSON). A missing or unreadable file produces an inline error for that file without aborting the others. Use it to pull a handful of small files in one call; use sassy_read_file with offset/length for paging through a large file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond the annotations: the exact header format, the JSON-array-with-comma-separated-fallback behavior for paths, and the per-file error handling that does not abort the batch. This is meaningful additional 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?

Three sentences, each earning its place: the first defines behavior and output format, the second clarifies the parameter format and error semantics, the third gives usage guidance and the sibling alternative. The most important information is front-loaded.

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

Completeness4/5

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

The tool has a single parameter, an output schema, and annotations covering safety and idempotency. The description covers the parameter format, error behavior, and usage boundaries. The only minor gap is that it doesn't explicitly state the return type beyond the header format, but the output schema exists and the description's header example is enough for an agent to invoke 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 description coverage is 0%, so the description must compensate. It does: it explains that paths is a JSON array of file paths and that it falls back to a comma-separated string if not valid JSON. This adds real meaning beyond the bare schema property name 'paths' and its string type. It doesn't give examples, but for a single parameter this is sufficient.

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 ('reads'), a resource ('several files at once'), and the output format (concatenated under headers). It also distinguishes itself from sassy_read_file by noting the offset/length paging alternative, 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?

The description explicitly says when to use this tool ('pull a handful of small files in one call') and when to use the alternative ('use sassy_read_file with offset/length for paging through a large file'). This is clear routing guidance with no ambiguity.

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

sassy_recent_tool_callsA
Read-onlyIdempotent

Read-only. Returns recent tool call records parsed from the structured JSONL audit log (the same store the audit module writes; sassy_audit_log reads the plain-text audit.log variant). Optional max_results=50 (docstring caps at 1-1000; the code takes the newest N entries), tool_name="" filters to one tool name, since_minutes=0 means all time or only calls within the last N minutes. Output includes the call entries newest-last, the returned count, and total_in_log (all lines in the file, including skipped/malformed). Returns an empty list with a note if no audit log exists. Use for session history, debugging what ran, and usage review; for raw log text use sassy_audit_log, for keyword search use sassy_audit_search. Overlap note: sassy_audit_log covers the same recent-call history as plain text — prefer this tool when you want structured, filterable records.

ParametersJSON Schema
NameRequiredDescriptionDefault
tool_nameNo
max_resultsNo
since_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Although annotations already declare readOnlyHint and idempotentHint, the description adds meaningful behavioral detail: it returns newest-last ordering, reports returned count plus total_in_log (including malformed lines), and returns an empty list with a note if no audit log exists. It also flags the docstring cap of 1-1000 and clarifies the code takes the newest N entries, which is valuable operational context.

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 description is longer than average, but it is tightly organized and every sentence adds distinct value (behavior, parameters, output shape, edge case, alternatives). It could be tightened slightly, but the density justifies its length.

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 an output schema present and annotations covering safety, the description fills all remaining gaps: parameter semantics, ordering, output fields, missing-log behavior, and sibling routing. Nothing needed to call the tool correctly is missing.

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 has 0% description coverage, so the description carries the full burden and succeeds: max_results is explained as 'newest N entries' with the 1-1000 docstring cap, tool_name is described as filtering to one tool name, and since_minutes semantics are spelled out ('0 means all time or only calls within the last N minutes'). Every parameter's meaning and edge behavior is covered.

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 ('Returns') and resource ('recent tool call records parsed from the structured JSONL audit log'), and explicitly differentiates from sassy_audit_log and sassy_audit_search by naming them. The read-only framing and structured/filterable positioning make the tool's role unambiguous.

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?

Description provides explicit when-to-use: 'Use for session history, debugging what ran, and usage review', then names alternatives for raw text and keyword search. The overlap note further tells the agent to prefer this tool for structured, filterable records, leaving no ambiguity about selection.

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

sassy_safe_deleteA
Idempotent

Mutating but non-destructive: instead of deleting, it moves the file or directory into a DELETE/ staging folder in the same parent directory, renaming with _1, _2 suffixes on collisions so nothing is silently lost. It moves the symlink itself, not its target. Refuses protected paths (SassyMCP source tree, ~/.sassymcp, existing DELETE folders) and audits the interception. This is the required replacement for rm/del-style deletion: shell delete keywords are intercepted, and sassy_copy/sassy_move refuse to overwrite an existing destination until it is staged here first. Use it for any removal; review or restore items from the DELETE folder later.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining collision renaming, symlink handling, protected paths, and audit behavior. It is consistent with the readOnlyHint=false and destructiveHint=false annotations, and it does not contradict idempotentHint=true.

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 core mutating-but-non-destructive behavior, then adds collision handling, symlink behavior, protections, and integration context. Every sentence adds useful information and there is no filler or repetition.

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?

Given the single-parameter schema, existing annotations, and presence of an output schema, the description is highly complete. It covers what happens to the item, where it goes, how collisions are handled, what is refused, why this tool is required, and how to restore items later.

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?

With 0% schema description coverage, the description must carry parameter meaning. It does so by explaining that the path refers to a file or directory, that symlinks are moved rather than their targets, and that protected paths are refused. It could be more explicit about path format or existence requirements, but for a single 'path' parameter this is strong compensation.

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: it moves a file or directory into a _DELETE_/ staging folder rather than deleting it. It also clearly distinguishes this tool from plain deletion and from sassy_copy/sassy_move, so an agent can identify its unique role.

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?

The description explicitly says 'Use it for any removal' and calls it 'the required replacement for rm/del-style deletion'. It also explains how it relates to sassy_copy/sassy_move: they refuse to overwrite an existing destination until it is staged here first, giving the agent clear routing guidance.

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

sassy_screen_infoA
Read-onlyIdempotent

Read-only, takes no parameters. Returns the display configuration as JSON: every monitor with left/top/right/bottom/width/height, DPI scale_percent, and which is primary, plus a count. Uses native APIs on Windows (DPI-aware) and macOS (AppKit), falling back to a single-monitor pyautogui report elsewhere. Essential setup call for multi-monitor machines: run it before sassy_click or sassy_screenshot to translate absolute coordinates onto the right monitor.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds value by detailing platform-specific behavior: 'Uses native APIs on Windows (DPI-aware) and macOS (AppKit), falling back to a single-monitor pyautogui report elsewhere.' This goes beyond the annotations, though it doesn't mention potential errors or edge cases.

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 description is well-structured, front-loading the read-only and no-parameters info, then output details, then platform and usage. It is concise but informative, with no wasted words, though it could be slightly tightened.

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?

The description is complete for a no-parameter read-only tool. It specifies the output format, platform differences, and usage context. The output schema exists, so return format is fully defined. Annotations cover safety and idempotency, and the description adds the essential setup context.

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 has zero parameters, and the description confirms 'takes no parameters,' which aligns with the schema. Since there are no parameters, there is nothing more to explain, and the description appropriately states the absence without redundancy.

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 clearly states the tool's purpose: 'Returns the display configuration as JSON' with specific fields. It distinguishes itself from siblings by noting it is a 'setup call' for multi-monitor machines before sassy_click or sassy_screenshot, which is distinct from other tools like sassy_desktop_state or sassy_shell.

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 states when to use: 'Essential setup call for multi-monitor machines: run it before sassy_click or sassy_screenshot.' It also explains the reason (translate absolute coordinates), giving clear context for when this tool is needed over alternatives.

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

sassy_screenshotA

Read-only with respect to the desktop; writes an image file. Saves a PNG screenshot of the screen and returns its path and pixel dimensions. path defaults to ~/sassymcp_screenshot.png; region is an 'x,y,w,h' string that takes precedence over monitor (a malformed region returns an explicit error instead of falling back to a full screenshot); monitor defaults to -1 (all monitors), 0 for primary, 1+ for others. The save path must pass validation and must not be a protected location. Use it to see the current screen state, especially before or after sassy_click/sassy_type_text; pair with sassy_screen_info for multi-monitor region math. Requires a GUI session; on headless hosts it returns an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo
regionNo
monitorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the sparse annotations by disclosing key behaviors: malformed regions return explicit errors rather than falling back, path must pass validation and avoid protected locations, monitor and path defaults, and a GUI session is required with an error on headless hosts. This gives the agent strong expectations about side effects and failure modes.

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 dense but front-loaded with the core purpose, then covers parameters, validation, usage context, and runtime requirements. Each sentence contributes distinct information without unnecessary 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?

For a three-parameter tool with an output schema, the description covers prerequisites, defaults, validation constraints, error behavior, and relationships to sibling tools. Nothing an agent needs to invoke 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.

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates: it explains path defaulting, region format as 'x,y,w,h', region precedence over monitor, error behavior for malformed regions, and monitor semantics (-1 all, 0 primary, 1+ others). All three parameters receive meaningful semantic context.

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: 'Saves a PNG screenshot of the screen and returns its path and pixel dimensions.' It also clarifies the nuanced read/write nature and ties usage to related siblings like sassy_click, sassy_type_text, and sassy_screen_info, making it easy to distinguish from other tools.

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 explicit context for when to use the tool: 'Use it to see the current screen state, especially before or after sassy_click/sassy_type_text.' It mentions pairing with sassy_screen_info for multi-monitor math, but it does not provide explicit when-not-to-use guidance or enumerate alternatives beyond those mentions.

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

sassy_search_filesA
Read-onlyIdempotent

Read-only. Searches recursively under path. search_type 'files' (default) matches pattern as a regex against filenames via a recursive glob filtered by file_pattern (e.g. '*.py'); 'content' matches pattern as a regex against file contents, skipping files over 5MB and emitting path:line: text (200 chars, optional context_lines of before/after context). ignore_case defaults to True; max_results defaults to 50 and is clamped to 1-500. Use it to locate files by name or find text across a tree; use sassy_read_file to read a specific hit and sassy_list_dir to browse instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
patternYes
ignore_caseNo
max_resultsNo
search_typeNofiles
file_patternNo
context_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description reveals concrete behaviors: recursive traversal, regex semantics for both search types, file-size skipping (>5MB) for content search, output format (path:line: text with 200 chars), and clamping of max_results to 1-500. This is far richer than what annotations alone convey.

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 dense but every clause carries essential information. It front-loads the read-only safety cueadian, then explains modes, defaults, limits, and alternatives in four sentences with zero fluff or repetition.

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 7-parameter tool with a bare schemaaine, the description gives exactly what an agent needs to invoke it correctly: defaults, clamping behavior, output format, and sibling routing. The presence of an output schema further reduces the need to describe return values, so nothing critical is missing.

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?

Despite 0% schema description coverage, every parameter is explained in the description: path, pattern, search_type (with exact value meanings), file_pattern (with example), ignore_case (default True), max_results (default and clamp), and context_lines (optional before/after context). The description fully compensates for the bare 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 opens with a clear verb-resource pair: 'Searches recursively under path' and explicitly distinguishes between the two search modes. It names sibling tools (sassy_read_file, sassy_list_dir) to prevent confusion, making the tool's niche immediately obvious.

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 states when to use the tool ('to locate files by name or find text across a tree') and points to alternatives ('use sassy_read_file to read a specific hit and sassy_list_dir to browse instead'). This fully replaces any guesswork about tool selection.

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

sassy_self_checkA
Read-onlyIdempotent

Read-only diagnostic. Reconciles the declared module manifest against the live tool registry and reports verdict "whole" or "DEGRADED", package version, runtime (frozen for packaged builds, source for checkouts), pid, live_tool_count, and a per-module import report. It distinguishes real problems from expected absences: BROKEN modules (expected in the default load but fail to import, logged at ERROR) versus dormant_by_design (on-demand groups not yet toggled on, absent by design) versus pruned_low_usage (dropped by usage scoring) versus unsupported (optional modules failing on this platform, non-fatal). Takes no parameters. Use it to verify server health or to diagnose missing tools without confusing intentional lazy-loading with real failures.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is established. The description adds meaningful behavioral context beyond those annotations: it explains the category taxonomy (BROKEN vs dormant_by_design vs pruned_low_usage vs unsupported), the ERROR logging level for BROKEN modules, and the runtime distinction (frozen vs source). This enriches the agent's understanding of what the tool reveals without contradicting the annotations.

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

Conciseness5/5

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

The description is front-loaded with the core identity ('Read-only diagnostic') followed by the reconciliation action and output fields. The longer tail about category distinctions is dense and earns its place—it directly prevents the common misinterpretation of expected absences as failures. Every sentence adds information; 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?

With zero parameters, a full annotation set, and an output schema present, the description's burden is modest. It nevertheless covers the tool's output fields, its diagnostic categories, and its intended use cases. Nothing an agent needs to decide whether to invoke this tool or to interpret its verdict 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 has zero parameters and an empty schema, so the baseline for this dimension is 4. The description explicitly confirms 'Takes no parameters,' which removes any doubt an agent might have about optional arguments. Nothing more is needed.

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 opens with 'Read-only diagnostic' and immediately states the specific action: 'Reconciles the declared module manifest against the live tool registry and reports verdict...' This names the exact resource and operation, and the detailed output fields make it unmistakable what the tool does. It is clearly distinct from diagnostic siblings like sassy_observability_health or sassy_setup_status by focusing on manifest-to-registry reconciliation.

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?

The description ends with an explicit usage directive: 'Use it to verify server health or to diagnose missing tools without confusing intentional lazy-loading with real failures.' This gives clear when-to-use context, but it stops short of naming alternatives or stating when *not* to use it, so it earns a 4 rather than a 5.

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

sassy_session_listA
Read-onlyIdempotent

Read-only. Lists all persistent terminal sessions as JSON: name, shell, pid, alive flag, uptime in seconds, output buffer size, exit code, plus a total count. Dead sessions remain listed until stopped. Use it to see what is running before sassy_session_read, sassy_session_send, or sassy_session_stop; auto-detached sassy_shell calls also appear here.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds materially useful behavioral context beyond annotations: dead sessions remain listed until stopped, and auto-detached sassy_shell calls appear in this list. These are behavioral traits an agent needs to interpret the list correctly.

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 compact and efficiently front-loaded: 'Read-only. Lists all persistent terminal sessions as JSON' immediately conveys scope and format. The remaining sentences add field detail, dead-session behavior, and usage guidance without a single wasted clause.

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, read-only list tool with an output schema and rich annotations, the description covers everything needed to call it correctly: what it lists, the exact fields returned, when to use it, and the edge case of auto-detached sassy_shell calls. Nothing relevant 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 has zero parameters, so the schema covers all inputs trivially. Baseline for zero-parameter tools is 4, and the description appropriately focuses on output and behavior rather than input semantics, since there are no parameters to explain.

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 ('Lists'), a clear resource ('all persistent terminal sessions'), and the output format ('as JSON'), then enumerates the returned fields. It further distinguishes itself from sibling session operations by noting auto-detached sassy_shell calls also appear here, so an agent can tell it apart without ambiguity.

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?

The description explicitly states when to use it: 'Use it to see what is running before sassy_session_read, sassy_session_send, or sassy_session_stop.' It also clarifies the scope edge case of auto-detached sassy_shell calls, giving the agent clear context for when this listing tool is relevant versus alternatives.

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

sassy_session_readA
Read-only

Read-only. Returns output from a named persistent session that arrived since the last read (the cursor advances, so each call yields only new text), truncated to the last 10000 characters, plus an alive flag and the total buffer size. Fails if the session name does not exist. Use it to poll long-running sessions created by sassy_session_start or auto-detached from sassy_shell (timeout over 120s) without sending input; use sassy_session_send to interact.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint annotation by disclosing that the cursor advances on each read, output is truncated to 10000 characters, an alive flag and buffer size are returned, and the call fails for nonexistent session names. These behavioral details are not visible in the schema or annotations.

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?

Every sentence carries distinct information: the core read behavior, cursor/truncation/return details, and the usage boundary with alternatives. It is front-loaded with 'Read-only' and the main purpose, and contains 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?

Given the output schema exists and the annotations cover the read-only safety profile, the description adds the missing behavioral contract: cursor semantics, truncation, return fields, failure mode, and when to use it versus sassy_session_send. Nothing needed for correct invocation is omitted.

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?

With 0% schema description coverage, the description compensates by identifying 'name' as the persistent session name and explaining that nonexistent names cause failure. It does not specify naming rules or how to enumerate valid names, but for a single required parameter this is sufficient context.

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 ('Returns output') and resource ('named persistent session'), and immediately distinguishes itself from related session tools by noting it does not send input. It clearly conveys that this is the read/poll operation among the sassy_session_* siblings.

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?

The description explicitly says when to use this tool: to poll long-running sessions created by sassy_session_start or auto-detached from sassy_shell. It also names the alternative, sassy_session_send, for interaction, making the selection decision unambiguous.

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

sassy_session_sendA
Destructive

Mutating: types into a live persistent session like a terminal, with a newline appended automatically, and returns the last 5000 characters of new output after a brief pause. The input is scanned by the same gates as sassy_shell: blocklist matches and delete keywords (rm, del, Remove-Item) are refused here, because session input cannot be safely staged — use sassy_safe_delete for removals instead. Fails if the session does not exist or has exited. Use it to interact with REPLs, prompts, and dev servers running in a session; use sassy_shell for one-shot commands.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
input_textYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses mutation, the newline append, the 5000-character return limit, the pause, the blocklist/delete-keyword refusal, and the failure condition (session does not exist or exited). This goes well beyond the annotations, which only say destructiveHint=true. No contradiction with annotations.

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

Conciseness5/5

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

The description is dense but well-organized: behavior first, then safety constraints, then usage guidance. Every sentence adds value, and it's not bloated.

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 mutating session tool with an output schema, the description covers behavior, failure modes, safety gates, and alternatives. Nothing critical is missing for an agent 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 0%, so the description must compensate. It explains what input_text does (typed into session) and what name refers to (the session), but doesn't add format details like whether name is a session ID or label. Still, the description gives enough context for the two obvious 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?

The description states a specific verb ('types into a live persistent session like a terminal'), the resource (a session), and the key behavior (appends newline, returns last 5000 chars after a pause). It also distinguishes itself from sassy_shell and sassy_safe_delete, making it clear what this tool is for.

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 says when to use it ('interact with REPLs, prompts, and dev servers running in a session') and when not to ('use sassy_shell for one-shot commands', 'use sassy_safe_delete for removals'). This is strong routing guidance.

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

sassy_session_startA
Destructive

Mutating: spawns a persistent terminal session under a unique name and returns its status, shell, and pid. shell defaults to the host native shell (powershell/cmd/wsl on Windows; bash/zsh/sh on macOS/Linux); command optionally runs immediately after startup. Reuse of a live name and initial commands tripping the delete interceptor are refused. stderr is merged into stdout and the per-session buffer keeps the last 50000 characters (tail). Use it for long-running work like dev servers or builds that you poll with sassy_session_read; use sassy_shell for one-shot commands and stop sessions with sassy_session_stop when done.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
shellNo
commandNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool as destructive and non-idempotent, and the description goes well beyond them: it discloses persistence, return fields, shell default behavior, refusal of live-name reuse and delete-interceptor commands, stderr merging, and the 50000-character tail buffer. This gives the agent a strong behavioral model before calling.

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 dense but every sentence earns its place: mutation flag, returns, defaults, refusal conditions, buffer behavior, and usage routing. No filler or repetition of schema 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?

Given the output schema exists and annotations cover the mutation profile, the description supplies the remaining operational context: persistence, defaults, safety refusals, buffer limits, and relationships to sibling tools. 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.

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden for parameter meaning. It explains name (unique live name, reuse refused), shell (defaults to host native shell with platform-specific options), and command (optionally runs immediately and can be intercepted if destructive).

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 uses a specific verb and resource: 'spawns a persistent terminal session under a unique name and returns its status, shell, and pid.' It clearly distinguishes this tool from sibling session tools like sassy_session_read, sassy_session_stop, and sassy_shell.

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 usage guidance is provided: use this for long-running work such as dev servers or builds, use sassy_shell for one-shot commands, and stop sessions with sassy_session_stop when done. It also names the polling complement sassy_session_read, leaving no ambiguity about when to choose this tool.

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

sassy_session_stopA
DestructiveIdempotent

Mutating: terminates a named persistent session's process (graceful terminate, force kill after 5s), removes the session, and returns the name, exit code, and the last 3000 characters of unread output. Fails if the session does not exist. Use it to clean up a session you started; use sassy_session_stop_all to kill everything at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable behavioral details: the graceful terminate/force kill after 5s, removal of the session, return values, and failure condition. It also notes it's mutating, which aligns with annotations. No contradiction.

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

Conciseness5/5

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

A single, dense paragraph front-loads the most critical information (mutating, termination behavior, removal, return values) before the usage guidance. Every sentence adds value 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?

Given the tool's moderate complexity (single parameter, no nested objects, no enums) and the presence of an output schema (which likely details return values), the description covers all necessary aspects: behavior, failure mode, and usage. Nothing critical 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 0%, so the description must explain the 'name' parameter. It does by referring to 'named persistent session', implying the name identifies which session to stop. This is adequate given only one parameter and no enum.

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 clearly states the action ('terminates... removes... returns'), the specific resource ('named persistent session'), and its behavior (graceful terminate, force kill after 5s). It is easily distinguished from siblings like sassy_session_stop_all and other session 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 says 'Use it to clean up a session you started' and contrasts with sassy_session_stop_all for killing everything at once. This provides clear when-to-use guidance and distinguishes from the sibling.

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

sassy_session_stop_allA
DestructiveIdempotent

Mutating: terminates every active persistent terminal session (each process is terminated and cleaned up) and returns a list of stopped names with exit codes plus a total count. Use it at the end of a task to clean up leftover dev servers, builds, and watchers; use sassy_session_stop when you only want to end one session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, and the description adds context beyond them: it states what gets destroyed ('each process is terminated and cleaned up') and what is returned (list of stopped names with exit codes plus a total count). The description is consistent with all annotations, including the idempotent state effect.

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 sentences with no filler. The mutating/destructive nature is front-loaded, followed by the action, output, usage guidance, and the sibling alternative. 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 destructive bulk operation with no parameters and an existing output schema, the description is complete: it covers what is terminated, cleanup semantics, return value, when to use it, and when to use the alternative. The existing annotations carry the safety profile, so nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

The tool has zero parameters, so the schema is trivially 100% covered and the description needs no parameter explanations. Baseline 4 applies for 0-parameter tools; the description does not need to compensate for missing schema detail.

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 uses a specific verb ('terminates') with a precise resource ('every active persistent terminal session') and explicitly notes the cleanup behavior and return value. It distinguishes itself from sassy_session_stop by naming that sibling as the single-session alternative.

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 gives explicit when-to-use context: 'Use it at the end of a task to clean up leftover dev servers, builds, and watchers.' It also names the alternative and the condition that triggers it: 'use sassy_session_stop when you only want to end one session.' No inference is required.

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

sassy_set_configA
Idempotent

Mutating. Overwrites a server configuration value and persists it to the SassyMCP home directory config.json immediately (the change affects current and future server runs). Required: key must be one of the supported config keys (defaultShell, fileReadLineLimit, fileWriteLineLimit, allowedDirectories, blockedCommands, interceptor.destructiveAction, interceptor.scanStringLiterals, permission.mode, permission.sandboxRoots, permission.rules, panel.enabled, panel.port) — unknown keys are rejected and the valid list is returned. Required: value is a JSON-encoded string that is parsed before storing (so pass '1000' for a number, '["x"]' for a list, '"powershell"' for a string); if parsing fails the raw string is stored. Returns the key with old and new values. Use to tune limits, the default shell, blocked commands, safety modes, or panel settings; inspect current values first with sassy_get_config.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

The description significantly enriches the annotations. It discloses immediate persistence affecting current and future runs, rejection of unknown keys with a returned valid list, JSON-encoded value parsing with fallback to raw storage, and the return of old/new values. This goes well beyond what readOnlyHint, idempotentHint, and destructiveHint provide.

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 long but every sentence earns its place. It front-loads the core mutation semantics, then logically walks through key constraints, value format, return value, and usage. Given the 0% schema coverage, the length is justified and well-structured.

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 config-mutation tool with two undocumented string parameters and an output schema, the description covers all needed context: persistence behavior, validation, parsing rules, error handling, return shape, and a pointer to the read companion. Nothing an agent needs to invoke this tool correctly is missing.

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 description coverage is 0%, so the description carries the entire burden. It compensates fully by listing every supported config key, explaining that value must be a JSON-encoded string, providing concrete examples ('1000', '["x"]', '"powershell"'), and documenting fallback behavior if parsing fails. An agent can construct correct calls without any additional information.

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: 'Overwrites a server configuration value and persists it to the SassyMCP home directory config.json.' It clearly differentiates itself from the sibling read tool sassy_get_config by explicitly naming it as the companion for inspecting current values. This is a precise, unambiguous purpose.

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?

The description gives an explicit when-to-use clause ('Use to tune limits, the default shell, blocked commands, safety modes, or panel settings') and names the relevant alternative sassy_get_config for prior inspection. It stops short of explicitly stating when not to use this tool relative to similar setters like sassy_env_set, but the context is strong enough to route an agent correctly.

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

sassy_setup_check_toolsA
Read-onlyIdempotent

Read-only scan of external tool availability. Checks six system binaries (nmap, tesseract, adb, scrcpy, plink, chrome) by searching PATH plus known install locations, and three Python packages (pytesseract, playwright, watchdog). For each tool it reports installed true/false, the resolved path, whether it is required, which sassy_* tools use it, and an install URL when missing. Only tesseract is marked required, since OCR/vision tools need it unconditionally. The returned summary lists installed, missing_required, and missing_optional. Takes no parameters and writes nothing. Use this first when diagnosing missing dependencies; when you are ready to install them, use sassy_setup_tools instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

The annotations already mark the tool read-only, idempotent, and non-destructive, and the description goes further by stating it 'writes nothing' and detailing the exact output fields: installed status, resolved path, required flag, dependent sassy_* tools, and install URL. It also reveals that only tesseract is required, which is behavior not derivable from the annotations alone.

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

Conciseness5/5

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

While the description is substantial, every sentence adds essential information: scope, exact checks, output shape, required-tool policy, and routing to the install sibling. The key purpose is front-loaded in the first sentence, and the structure flows naturally from what the tool scans to what it reports to when to use it.

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?

The description is fully self-contained for invocation: it lists exactly what is checked, what is returned, that it takes no parameters, and that it has no side effects. Since an output schema is present, the description is not even required to explain return values, but it does so anyway, making the tool easy to use correctly without additional context.

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?

The tool has zero parameters, and the description explicitly confirms 'Takes no parameters.' With an empty input schema and 100% schema coverage, there is no parameter ambiguity, and the description removes any doubt by stating this directly.

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 and resource: a 'Read-only scan of external tool availability' that checks six system binaries and three Python packages. It clearly distinguishes itself from the installation-focused sibling by stating that the tool only checks and reports, and explicitly references sassy_setup_tools for installation.

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?

The description provides explicit usage direction: 'Use this first when diagnosing missing dependencies; when you are ready to install them, use sassy_setup_tools instead.' It also explains what the tool does not do ('writes nothing'), giving agents a clear decision boundary between checking and installing.

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

sassy_setup_generate_tokenA
Destructive

Mutating: creates a cryptographically secure auth token (secrets.token_urlsafe(32)) and saves it to ~/.sassymcp/tokens.json, replacing any existing entry for the same client_id, then locks the file to owner-only (chmod 0600 on POSIX, ACL lockdown on Windows). The client_id parameter defaults to "default" and identifies the MCP client (e.g. claude-desktop, cursor). The scopes parameter is a comma-separated string defaulting to "read,write"; valid scopes are read, write, and admin. The returned token is shown once only, with usage instructions for the SASSYMCP_AUTH_TOKEN environment variable, the Authorization: Bearer header, and the ?token= query form. Use this when onboarding a new MCP client that needs to authenticate. Trust assumption (deliberate): this tool is intentionally not gated by a confirmation — any MCP client that can call tools can mint bearer tokens, equivalent to the generate-token CLI subcommand, so local automation can bootstrap client auth. Treat every minted token like a password and review ~/.sassymcp/tokens.json if a session behaves unexpectedly. For a read-only view of existing token state, call sassy_setup_status first.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopesNoread,write
client_idNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already provide destructiveHint=true and readOnlyHint=false, but the description adds substantial context beyond that: the exact file path, permission changes (chmod 0600, ACL on Windows), the one-time display of the token, the deliberate lack of confirmation, and the security heuristic 'treat every minted token like a password.' This is far more than annotations 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?

The description is long, but every clause earns its place given the security sensitivity. It is front-loaded with the key action ('Mutating: creates...'), then layers details. It could be slightly tighter, but it avoids fluff and is well organized.

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?

Given the tool's complexity (auth token lifecycle, file permissions, one-time display, trust assumptions) and the fact that an output schema exists but isn't shown, the description is remarkably complete. It covers side effects, security implications, parameter semantics, and alternatives, leaving no critical gap for correct invocation.

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 description coverage is 0%, so the description must fully compensate. It does: it explains that client_id defaults to 'default' and identifies the MCP client, and clarifies that scopes is a comma-separated string defaulting to 'read,write' with valid values read, write, and admin. Both parameters are enriched beyond the bare 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 ('creates'), resource ('cryptographically secure auth token'), and destination ('~/.sassymcp/tokens.json'), and even notes that it replaces existing entries. It distinguishes the tool from siblings by naming sassy_setup_status as the read-only alternative, so an agent can tell them apart 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?

Explicit when-to-use guidance is given: 'Use this when onboarding a new MCP client that needs to authenticate.' It also gives an explicit alternative ('For a read-only view of existing token state, call sassy_setup_status first') and implicitly says when not to use it (when only a read-only view is needed). This leaves no ambiguity about selection.

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

sassy_setup_githubA
Idempotent

Mutating when saving; read-only for check and open_browser. The action parameter (default "check") selects the step. action=check validates the GITHUB_TOKEN or GITHUB_PERSONAL_ACCESS_TOKEN environment variable against the GitHub API and reports the login and scopes, or that no token exists. action=open_browser opens the GitHub token creation page locally and returns instructions with the recommended scopes (Contents, Issues, Pull Requests, Metadata). action=save_token validates the supplied token parameter (must start with ghp_ or github_pat_) against api.github.com/user; on success it stores the token in the process environment and records github_configured plus the GitHub username in config. The token lasts only for this session unless also set in system env or MCP client config. action=skip records the skip. Use this to enable the sassy_github_* tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenNo
actionNocheck

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior5/5

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

The annotations indicate idempotentHint=true, which is consistent with the description's note that save_token stores a token. The description adds critical behavioral context: it explicitly warns that save_token is 'Mutating when saving; read-only for check and open_browser' and that 'The token lasts only for this session unless also set in system env or MCP client config.' It also explains what happens on success (stores in process env, records config) and the validation steps. This goes beyond annotations, which only indicate readOnlyHint=false, openWorldHint=true, idempotentHint=true, destructiveHint=false. No contradiction with annotations.

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

Conciseness4/5

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

The description is moderately long but each sentence provides necessary information about the actions and session behavior. The overall purpose is front-loaded ('Mutating when saving; read-only for check and open_browser'), and the actions are explained in logical order. It could be slightly more concise, but every part 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?

Given that the tool has an output schema (not detailed here), the description doesn't need to explain return values. The tool is moderately complex with multiple actions and side effects (validating API, storing token, config changes). The description covers the key aspects: action behavior, token validation requirements, session persistence, and configuration updates. It could detail error scenarios or alternative setup methods, but for an agent to call it correctly, it's adequately 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?

The schema provides no descriptions for the two parameters (coverage 0%), so the description must compensate. It does explain 'action' parameter in detail: default 'check', and each action's behavior. It also explains the 'token' parameter's requirements (must start with ghp_ or github_pat_) and its role in save_token. This adds meaning beyond the schema's minimal property definitions, so a score of 3 is appropriate given that the schema coverage is zero and the description does provide some parameter guidance.

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 clearly states the tool's purpose: it configures GitHub authentication for enabling sassy_github_* tools. It identifies the three actions (check, open_browser, save_token, skip) and what each does, distinguishing it from sibling setup tools like sassy_setup_ssh and sassy_setup_license. The specific verb (setup) and resource (GitHub) are explicit.

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?

The description explicitly states when to use this tool: 'Use this to enable the sassy_github_* tools.' It also explains the action parameter, which guides selection among the tool's own modes. However, it doesn't explicitly mention when NOT to use it or mention alternatives (e.g., sassy_setup_generate_token might be an alternative for token generation), but the 'use this to enable' phrasing is clear enough.

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

sassy_setup_licenseA
Destructive

Manages the optional SassyMCP supporter license against LemonSqueezy. The action parameter (default "status") accepts status, activate, deactivate, validate; the key parameter is required only for activate and must look like XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. All tool groups are unlocked for everyone with no key, so activating registers your seat and tier label but unlocks nothing. action=status is read-only and reports tier, addons, validity, email, expiry, the license file path, and any LemonSqueezy instance identifiers. action=activate registers this machine and mints a local HMAC payload for offline use. action=deactivate frees the machine's seat and deletes the local file. action=validate forces an immediate LemonSqueezy re-check (normally weekly). Use status to inspect the current tier; only activate with a key purchased from sassyconsultingllc.com/store.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
actionNostatus

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Even though annotations already flag destructiveHint=true, the description goes far beyond that by detailing exactly what each action does: status is read-only and reports specific fields; activate registers the machine and mints an HMAC payload; deactivate frees the seat and deletes the local file; validate forces a re-check instead of the normal weekly cycle. It also discloses the surprising fact that activating unlocks nothing, which is critical behavioral context an agent needs before invoking.

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 description is long but every sentence adds distinct value: overview, parameter rules, unlock revelation, per-action behavior, and usage guidance. It is front-loaded with the core purpose and then systematically details each action. The only minor inefficiency is some redundancy in repeating action names and behaviors, but it remains tight and scannable.

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 the output schema exists and the description covers all four action semantics, key format, side effects, and the 'no unlock' reality, an agent has what it needs to call the tool correctly. Minor gaps like error handling for invalid keys or absence of a license are not mentioned, but these are edge cases rather than essential call context for a well-behaved tool.

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 description coverage is 0%, so the description carries the full burden of explaining both parameters. It thoroughly covers the 'action' parameter by listing all accepted values and their defaults, and the 'key' parameter by specifying when it is required and giving its exact format (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX). This is more than enough to compensate for the 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 opens with a specific verb-resource pair ('Manages the optional SassyMCP supporter license against LemonSqueezy') and then enumerates distinct actions, making it unmistakably different from sibling setup tools like sassy_setup_status or sassy_setup_wizard. It clearly positions the tool as a license manager rather than a general setup utility.

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?

The description gives explicit usage advice: 'Use status to inspect the current tier; only activate with a key purchased from sassyconsultingllc.com/store.' It also clarifies that activation is not necessary because all groups are unlocked, which prevents unnecessary activation. However, it does not explicitly compare against sibling tools or exclude them, relying on the obvious domain difference rather than named alternatives.

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

sassy_setup_sshA
Idempotent

Mutating: saves SSH credentials to the process environment and config, and can open a real test connection. The action parameter (default "check") accepts check, save, test, skip. action=check is read-only: reports whether plink (Windows) or native ssh (macOS/Linux) was found, plus which of SSH_HOST, SSH_USER, SSH_PASS, SSH_KEY, SSH_SESSION are set. action=save requires host and user plus at least one auth source: key (a .ppk path, preferred), session (a saved PuTTY session name), or password (fed via stdin, never in the process list); missing pieces return status=incomplete. action=test runs the actual ssh command with a 15 second timeout and reports connected, failed, or error. Credentials last only for this session unless also set in system env or MCP client config.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNo
hostNo
userNo
actionNocheck
sessionNo
passwordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations include readOnlyHint=false, destructiveHint=false, but the description goes beyond by detailing that action=check is read-only, save mutates environment/config, test opens a real connection with timeout, and credentials are session-scoped. It also mentions password is via stdin for security. No contradiction.

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

Conciseness4/5

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

The description is dense and front-loaded with the mutating nature and default action. It packs useful information per sentence without redundancy, though it is on the longer side. Good structure keeps key details up front.

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?

With 6 parameters, no required ones, and no enums, the description provides a detailed action breakdown and security notes. It mentions output statuses (incomplete, connected, failed, error) and session scoping, but does not mention the output schema details, which is acceptable since output schema exists.

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 0%, so the description must compensate. It explains the role of key, session, password, and action, but does not detail host/user beyond action=save requirements. The description adds significant meaning to action and auth source parameters, though host and user remain generic.

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 clearly states the tool saves SSH credentials and can open a test connection, with specific actions. It distinguishes itself from setup_check_tools and setup_status by focusing on SSH setup, though it does not explicitly name those 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?

It provides clear context on when to use each action (check, save, test) and prerequisites (e.g., action=save requires host/user and auth source). It does not explicitly list alternatives or exclusions, but the action breakdown implies usage scenarios.

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

sassy_setup_statusA
Read-onlyIdempotent

Read-only aggregated setup report with no parameters. Reports setup_complete, persona file existence/size/path, auth state (whether SASSYMCP_AUTH_TOKEN is set in the environment, whether ~/.sassymcp/tokens.json exists, and overall auth_active), integrations (GitHub token configured plus the saved GitHub username, SSH configured plus the saved SSH host), the config file path with its key names, the SassyMCP data directory, and the files currently in it. If setup is not complete it includes an action_required field pointing at the next steps. This is the best first call when diagnosing an unknown machine or confirming what first-run steps remain. It never modifies anything. To fix what it reports as missing, call sassy_setup_wizard for the persona, sassy_setup_github or sassy_setup_ssh for integrations, or sassy_setup_tools for dependencies.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=fals. The description adds meaningful behavioral context: 'It never modifies anything,' the conditional presence of action_required, and the details of what is reported (e.g., 'whether SASSYMCP_AUTH_TOKEN is set' rather than its value). It fully discloses the tool's reporting scope and non-mutating nature beyond the structured annotations.

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 description is long but front-loaded with the core purpose, and every sentence contributes either report contents, usage guidance, or sibling routing. The 'never modifies anything' sentence is redundant with annotations, and the field list is dense, but the structure is clear and each section 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?

Given the tool has no parameters, an output schema, and strong annotations, the description covers all the agent needs: what the report contains, the conditional action_required field, when to call it, and which sibling tools to use next to remediate issues. Nothing essential 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 has zero parameters and the schema coverage is 100% (empty properties object), so the baseline is 4. The description correctly states 'with no parameters,' and since there are no parameters to document, it cannot add more meaning. No gaps exist.

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 opens with 'Read-only aggregated setup report,' a specific verb and resource, and enumerates the exact fields reported (setup_complete, persona file, auth state, integrations, config path, data directory). It distinguishes itself from sibling setup tools by declaring it 'the best first call' for diagnosing an unknown machine, making its role unambiguous.

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 states when to use the tool: 'best first call when diagnosing an unknown machine or confirming what first-run steps remain.' It also names the precise alternatives for fixing issues: 'call sassy_setup_wizard for the persona, sassy_setup_github or sassy_setup_ssh for integrations, or sassy_setup_tools for dependencies.' This is explicit routing with no inference needed.

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

sassy_setup_toolsA
Destructive

Mutating installer for external tool dependencies; use action=check for the read-only report. The action parameter (default "check") accepts check, install, install_required, add_to_path. The tool_name parameter is required only for action=install and must be one of tesseract, adb, scrcpy, nmap, plink, cloudflared. action=check reports each tool as found with its path and required flag; only tesseract is required (OCR/vision need it unconditionally), while adb/scrcpy serve Android tools and plink serves SSH/Linux tools. action=install_required installs every missing required tool; action=install installs the named tool, both via the host package manager (winget, brew, or sudo apt-get) with a 180 second per-package timeout, so installs take minutes. Run action=add_to_path (or restart) afterward. For a read-only scan also covering Chrome and Python packages, use sassy_setup_check_tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNocheck
tool_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool as destructive and non-read-only; the description adds substantial behavioral context: package-manager use (winget, brew, sudo apt-get), a 180-second per-package timeout, minute-scale installs, required-tool semantics, and the post-install add_to_path step. There is no contradiction with the annotations.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: mutating identity, action enum, tool_name constraints, required-tool mapping, install mechanics and timeout, follow-up step, and sibling differentiation. It front-loads the critical mutating/read-only distinction.

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 multi-action installer with destructive side effects and external package-manager behavior, this description covers supported actions, target tools, platform-specific package managers, timeout expectations, and the required follow-up step. Since an output schema exists to document return shape, nothing essential is missing.

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?

The input schema has bare unconstrained strings with 0% description coverage and no enums. The description fully compensates by enumerating the legal action values and default, defining exactly when tool_name is required, and listing its allowed values: tesseract, adb, scrcpy, nmap, plink, cloudflared.

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 opens with 'Mutating installer for external tool dependencies,' a specific verb/resource pairing, then enumerates four actions with distinct outcomes. It explicitly distinguishes itself from sibling sassy_setup_check_tools for read-only scans, 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 says explicitly to use action=check for the read-only report and routes deeper read-only scanning to sassy_setup_check_tools. It also specifies when tool_name is required, which actions perform installs, and that add_to_path should be run afterward. This gives clear 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.

sassy_setup_wizardA
Destructive

Mutating: first-run questionnaire that writes the user profile to ~/.sassymcp/persona.md (keeping a one-deep persona.md.bak backup of any existing file before overwriting) and marks setup_complete in config. All parameters are optional: role (developer, sysadmin, security, devops, data, designer, manager, other; default developer), expertise_level (junior, mid, senior, principal, staff; default senior), communication_style (terse, balanced, verbose; default terse), security_posture (standard, hardened, paranoid; default standard), plus comma-separated specializations, languages, frameworks, newline-separated systems and projects, mcp_clients, and notes. The has_android and has_linux booleans (default false) drive the returned tools_to_install list: tesseract always included, adb and scrcpy when has_android is true, plink when has_linux is true. The wizard installs nothing itself; the response includes next_steps and a hint to run sassy_setup_tools(action=install_required), and reloads the persona module in-process. Re-run anytime to update the profile. The result includes a persona_backup field with the backup path (null on first run).

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNodeveloper
notesNo
systemsNo
projectsNo
has_linuxNo
languagesNo
frameworksNo
has_androidNo
mcp_clientsNo
expertise_levelNosenior
specializationsNo
security_postureNostandard
communication_styleNoterse

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses the exact file path, the one-deep .bak backup behavior, overwrite semantics, in-process persona module reload, and the fact that no external tools are installed. It also reveals state changes such as marking setup_complete and the persona_backup field, which is far more transparent than annotations alone.

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

Conciseness4/5

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

The description is dense but high-signal, front-loading the mutation and file target. Some default values are repeated from the schema, and the long parameter list would be easier to scan as bullets, but every sentence adds meaningful information and none is wasted.

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?

Given 13 parameters, no schema descriptions, a destructive mutation, and a rich output schema, the description covers the essential contextual ground: backup behavior, rerun safety, no-install semantics, and key return fields. The existing output schema handles return-value details, so nothing critical is missing.

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?

With 0% schema description coverage, the description carries the full burden of explaining 13 parameters. It enumerates enum choices and defaults for role, expertise_level, communication_style, and security_posture; specifies comma-separated vs newline-separated input formats; and explains how has_android and has_linux conditionally drive the tools_to_install list. This is exactly the semantic depth an agent needs.

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 action and resource: it 'writes the user profile to ~/.sassymcp/persona.md' and marks setup_complete in config. It also distinguishes itself from installation/setup siblings by explicitly stating the wizard installs nothing itself and that sassy_setup_tools should be run for installs.

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 clearly identifies this as a first-run questionnaire and says it can be re-run anytime to update the profile. It also states what it does not do ('installs nothing itself') and points to the specific alternative, sassy_setup_tools(action=install_required), giving the agent an explicit when/when-not guideline.

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

sassy_shellA
Destructive

Mutating: executes an arbitrary shell command in the host shell — it can do anything the shell can. shell defaults to powershell on Windows or the login shell on macOS/Linux; POSIX shells run the command verbatim while PowerShell syntax is normalized. timeout_seconds defaults to 30 (clamped 1-300); over 120 the call auto-promotes to a background session, returning a JSON handle to poll with sassy_session_read. Safety gates always run: catastrophic blocklist entries hard-block, delete keywords auto-stage targets to DELETE/ when identifiable, and other destructive patterns block or return a confirmation_required token (when interceptor.destructiveAction is 'confirm'; redeem via sassy_shell_confirm). allow_pattern bypasses one named pattern only. Output shows [exit: N] plus stdout and stderr. Use for one-shot commands; prefer sassy_session_start for long-running work.

ParametersJSON Schema
NameRequiredDescriptionDefault
shellNo
commandYes
allow_patternNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description goes far beyond that: it discloses safety gates (catastrophic blocklist hard-blocks, delete keywords auto-stage to _DELETE_/, destructive patterns block or return confirmation_required), the confirmation flow via sassy_shell_confirm, allow_pattern bypass semantics, shell normalization differences, timeout clamping, auto-promotion to background sessions, and output format ([exit: N] plus stdout/stderr). This is rich behavioral context that annotations alone do not provide.

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 description is dense but every sentence earns its place: safety gates, shell behavior, timeout behavior, output format, and usage guidance are all packed into a compact paragraph. It is front-loaded with the most important fact ('Mutating... can do anything the shell can') and ends with the usage recommendation. Slightly long, but justified given the tool's power and safety complexity.

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 high-risk, arbitrary-command execution tool with 4 parameters and no schema descriptions, the description covers everything an agent needs: what it does, safety gates, confirmation flow, timeout behavior, background promotion, output format, and when to use an alternative. The output schema exists, so return values need not be spelled out. This is complete for the tool's complexity.

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 0%, so the description carries the full burden for parameter meaning. It explains shell defaults and normalization, timeout_seconds default and clamping, and allow_pattern's single-pattern bypass semantics. The command parameter is self-evident from the tool's purpose. It doesn't explicitly describe the exact JSON shape of the background-session handle, but it names the polling tool, which is sufficient for an agent to proceed.

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 ('executes') and resource ('arbitrary shell command in the host shell'), and immediately clarifies scope ('can do anything the shell can'). It also distinguishes itself from siblings by naming sassy_session_start for long-running work and sassy_session_read for polling, so an agent can tell it apart from the session tools 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?

The description explicitly says 'Use for one-shot commands; prefer sassy_session_start for long-running work,' which is direct when-to-use guidance with a named alternative. It also explains when auto-promotion to a background session happens (timeout over 120), which is a clear behavioral condition for choosing this tool vs. polling with sassy_session_read.

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

sassy_shell_confirmA
Destructive

Mutating: executes a sassy_shell command that was returned as confirmation_required instead of hard-blocked, because interceptor.destructiveAction is set to 'confirm'. Tokens are single-use and expire after 60 seconds; each is bound to the exact command, shell, and working directory that produced it, so replay against anything different is rejected. HIGH-tier commands also require confirm_phrase to match the phrase shown in the original confirmation_required response. Execution is audit-logged as pattern_confirm_executed. Use it only as the second step of the confirm flow; it cannot start a command on its own.

ParametersJSON Schema
NameRequiredDescriptionDefault
tokenYes
confirm_phraseNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false; the description's 'Mutating:' prefix aligns with those. Beyond annotations it adds rich behavioral context: single-use tokens, 60-second expiry, binding to exact command/shell/cwd with replay rejection, the HIGH-tier confirm_phrase requirement, and audit logging as pattern_confirm_executed. This materially exceeds what the annotations alone convey, with no contradiction.

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

Conciseness4/5

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

The description is longer than average, but every sentence carries essential security-relevant information: mutation nature, flow position, token expiry, binding, replay rejection, phrase requirement, and audit logging. It is front-loaded with the purpose ('Mutating: executes...') before diving into constraints. The length is justified for a security-critical mutation tool; little is waste.

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 complex, security-sensitive tool, the description covers purpose, mutation behavior, token lifecycle, binding, replay protection, phrase rules, audit trail, and usage constraints. An output schema exists, so return-value documentation is handled elsewhere. The only minor gap is not explicitly naming the sibling first-step tool, but the flow is clear enough that an agent can execute 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 description coverage is 0%, so the description must carry the semantic load — and it does. It explains that token is single-use, expires after 60 seconds, and is bound to the originating command/shell/cwd (hence replay-safe), and that confirm_phrase is required only for HIGH-tier commands and must match the phrase from the original response. Both parameters get meaningful semantics the bare schema lacks.

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 precise verb+resource combination — 'executes a sassy_shell command that was returned as confirmation_required' — and situates it as the second step of a two-phase confirm flow. This clearly distinguishes it from the sibling sassy_shell tool that initiates commands, so an agent can differentiate them without inspecting 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 Guidelines4/5

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

The description explicitly constrains usage: 'Use it only as the second step of the confirm flow; it cannot start a command on its own.' This is a clear when-to-use/when-not-to-use directive. It names the trigger condition (commands returned as confirmation_required because interceptor.destructiveAction='confirm') though it does not explicitly name the sibling tool for the first step, leaving the alternative slightly implicit.

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

sassy_state_clearA
DestructiveIdempotent

Destructive and mutating: permanently deletes stored state from the persistent per-tool SQLite state store (tool_state.db in the SassyMCP home directory). Optional tool_name="": when given, deletes every key saved under that tool name; when empty, deletes ALL state for ALL tools across the server with no way to recover. Requires confirm='YES' (exact, case-sensitive) on every call, matching the sassy_permission privilege mutations and sassy_audit_clear. Use to reset a misbehaving tool's remembered state or to wipe the whole state store clean; read first with sassy_state_get and back up values with sassy_state_set if they matter.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
tool_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds crucial context: 'permanently deletes', 'no way to recover', the exact confirm='YES' requirement, and that an empty tool_name wipes ALL state for ALL tools. This goes well beyond the structured annotations and fully discloses the dangerous behavior.

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?

Every sentence adds value: hazard first, then resource, parameter semantics, safety gate, and usage guidance. It is dense but efficient, and the most critical information (destructive, permanent) is front-loaded.

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?

Given the tool's destructive nature and optional parameters, the description covers all necessary aspects: what is deleted, how deletion scope changes, the confirmation requirement, and how to preserve data before calling. An output schema exists, so return-value documentation is not required.

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 0%, yet the description fully explains both parameters: tool_name's behavior when given vs. empty, and confirm's exact-case requirement. It compensates perfectly for the lack of schema descriptions.

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-resource pair ('permanently deletes stored state') and clearly identifies the underlying store (per-tool SQLite state store), distinguishing it from sibling tools like sassy_state_get and sassy_state_set. It is absolutely clear what the tool does and how it differs from related tools.

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?

The description gives explicit use cases ('reset a misbehaving tool's remembered state or to wipe the whole state store clean') and advises reading with sassy_state_get and backing up with sassy_state_set first. It does not explicitly state when not to use it vs. alternatives, but the context is strong enough for an agent to decide.

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

sassy_state_getA
Read-onlyIdempotent

Read-only. Retrieves one value from the persistent per-tool SQLite state store (tool_state.db in the SassyMCP home directory), surviving server restarts. Required: tool_name namespaces the key under a tool; required: key is the stored key. Returns the JSON-decoded value (whatever was saved with sassy_state_set) or null if the tool/key was never set. Use to read remembered state such as checkpoints, cursors, or preferences; use sassy_state_clear to delete and sassy_state_set to write. This is separate from the memory system — it is for tool operational state, not semantic memories.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
tool_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Despite annotations already covering readOnlyHint, idempotentHint, and destructiveHint, the description adds meaningful behavioral context: persistence across server restarts, JSON-decoded return value, and null return for unset keys. This adds value beyond the structured annotations and fully discloses observable behavior.

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 compact yet information-dense. It front-loads the read-only nature and core retrieval action, then covers requirements, return behavior, and usage guidance in a logical flow. No filler or redundancy—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 getter tool with an output schema, the description explains the return value (JSON-decoded or null) and the persistence semantics. It addresses both required parameters and distinguishes this state store from the memory system. No critical information 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 description coverage is 0%, so the description carries the full burden. It explains that tool_name 'namespaces the key under a tool' and key is 'the stored key', giving semantic meaning beyond the bare schema property names. It lacks format examples or constraints, but for simple string params this is sufficient.

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?

Description states a specific verb ('Retrieves'), resource ('persistent per-tool SQLite state store'), and explicitly differentiates from siblings by naming sassy_state_set and sassy_state_clear, plus distinguishing from the memory system. An agent can determine exactly what this tool does and what it is not.

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 guidance: 'Use to read remembered state such as checkpoints, cursors, or preferences' and routes to alternatives: 'use sassy_state_clear to delete and sassy_state_set to write.' Also clarifies it is separate from the memory system, preventing misuse. 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.

sassy_state_setA
Idempotent

Mutating. Persists a value into the per-tool SQLite state store (tool_state.db in the SassyMCP home directory), surviving server restarts. Required: tool_name namespaces the entry (any tool name can be used); required: key is the storage key; required: value is a string that is stored verbatim (the tool does not JSON-encode it — pass already-encoded JSON if you want structured values). Overwrites any existing value for the same tool/key pair. Returns a confirmation string. Use to checkpoint progress, save cursors, or persist preferences between sessions; read with sassy_state_get and delete with sassy_state_clear. Not a substitute for the memory system, which stores semantic facts.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
valueYes
tool_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

The description discloses persistence across restarts, overwrite behavior, verbatim string storage without JSON encoding, and the confirmation return value. This adds substantial context beyond the annotations, which already indicate mutation and idempotence. No contradiction with annotations is present.

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

Conciseness5/5

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

The description is dense but every sentence earns its place, front-loading the core mutation behavior and storage location before parameter details and usage guidance. The one-word 'Mutating.' opener is an efficient behavioral cue.

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?

Given the three parameters, all are explained, the output schema exists, and annotations cover safety and idempotence, the description leaves no important gap for an agent to select and invoke this tool correctly.

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 0%, but the description fully compensates by explaining all three parameters: tool_name namespaces the entry, key is the storage key, and value is stored verbatim with guidance about passing encoded JSON. Every required parameter receives meaningful semantic detail.

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 uses a specific verb and resource: 'Persists a value into the per-tool SQLite state store,' naming the exact file and location. It is clearly distinct from siblings like sassy_state_get and sassy_state_clear.

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 states when to use the tool: 'checkpoint progress, save cursors, or persist preferences between sessions.' It also names related tools for reading and deleting, and warns that it is 'Not a substitute for the memory system,' giving clear selection guidance.

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

sassy_tarA
Idempotent

Mutating: writes a new tar archive to disk. Creates a tar from a file or directory path in source; directory contents are stored under the top-level directory name. compress (default gz) accepts gz, bz2, xz, or none, and any other value returns an error. output defaults to the source path plus .tar.gz, .tar.bz2, .tar.xz, or .tar according to compress. Sensitive members are not blocked (full-directory backups must keep working): if any archived file matches the sensitive-read denylist (SSH keys, credential stores, ...), the archive is still created but the result carries a 'warning' field listing them and the event is audit-logged. Returns the created path, a file count, and the archive size in bytes. There is no password option, unlike sassy_unzip. Use it to bundle directories for transport or backup; use sassy_untar to extract what it creates.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputNo
sourceYes
compressNogz

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, but the description adds critical context: it confirms mutation, explains the sensitive-member behavior (archive still created, warning field, audit log), and details output naming conventions and error conditions for invalid compress values. No contradiction with annotations.

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

Conciseness4/5

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

The description is information-dense but every sentence serves a purpose: purpose, parameter behavior, sensitive-file handling, return values, and usage guidance. It is front-loaded with the core action and then expands on details. Slightly long but not wasteful; a 4 reflects the balance between completeness and brevity.

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 tool with 3 parameters, an output schema, and annotations, the description covers all necessary aspects: exact inputs, output path logic, return fields (path, count, size), error handling, sensitive-file policy, and how it relates to siblings. An agent can invoke it correctly without any additional inference.

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 description coverage is 0%, so the description fully compensates by explaining each parameter: source (file or directory path), compress (accepted values gz, bz2, xz, none, with default gz and error on other values), and output (default path construction based on compress). This goes beyond schema field names to give meaningful usage semantics.

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 (creates/writes), resource (tar archive), and behavior (from file or directory path). It distinguishes itself from siblings like sassy_untar and sassy_zip by describing its role as bundling for transport/backup and explicitly noting it is not sassy_unzip.

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 states when to use it ('Use it to bundle directories for transport or backup') and provides the alternative ('use sassy_untar to extract what it creates'). Also mentions a key difference from sassy_unzip (no password option), which helps agent choose correctly.

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

sassy_toastA

Shows a desktop notification on the machine running SassyMCP; no files or data are changed. Routed per platform: Windows tries BurntToast, then .NET toast, then msg.exe; macOS uses osascript; Linux uses notify-send and fails if libnotify is not installed. title and message are required; duration accepts short or long (default short) and anything else is treated as short, mapping to normal or critical urgency on Linux. Returns sent or failed plus the method used, with a 10-second per-method timeout. Use it to alert on completion of a long-running task the user is watching for.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
messageYes
durationNoshort

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations. It discloses that the tool is non-destructive ('no files or data are changed'), explains the per-platform fallback chain (BurntToast → .NET toast → msg.exe on Windows, osascript on macOS, notify-send on Linux), describes the duration mapping ('short or long... anything else is treated as short, mapping to normal or critical urgency on Linux'), and reveals the 10-second per-method timeout. It also states the return value ('sent or failed plus the method used'). This is rich behavioral context that annotations alone do not provide.

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 description is dense but well-organized: it front-loads the core purpose and non-destructive nature, then details platform routing, parameters, return value, and use case. Every sentence adds information. It is slightly long, but the complexity of the platform-specific behavior justifies the length.

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?

Given the tool's moderate complexity (3 params, platform-specific behavior, output schema present), the description covers all essential aspects: what it does, what it doesn't do, platform requirements, parameter semantics, timeout behavior, return value, and a concrete use case. The output schema exists, so the description needn't detail the return structure further. Nothing an agent needs to invoke 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 0%, so the description carries the full burden for parameter semantics. It explains that title and message are required, and it defines the duration parameter's allowed values and their behavior ('short or long (default short) and anything else is treated as short, mapping to normal or critical urgency on Linux'). This adds meaning beyond the bare schema, though it doesn't describe title/message content constraints (e.g., length limits), which is a minor gap.

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: 'Shows a desktop notification on the machine running SassyMCP'. It also clarifies that no files or data are changed, which distinguishes it from file-manipulation siblings like sassy_write_file, sassy_edit_block, and sassy_safe_delete. The purpose is unambiguous and immediately actionable.

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?

The description explicitly says 'Use it to alert on completion of a long-running task the user is watching for,' which gives a clear when-to-use scenario. It also explains platform-specific routing and failure conditions (e.g., Linux fails if libnotify is not installed), which helps an agent decide whether this tool is appropriate in the current environment. No alternative tool is named, but the use case is specific enough that an agent can distinguish it from siblings.

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

sassy_tool_catalogA
Read-onlyIdempotent

Read-only. Enumerates every currently registered tool derived live from the tool registry (so it never drifts from reality), returning total count, per-group counts, the applied filters, and tools grouped by group as name plus one-line purpose, sorted by group then name. group (default empty = all) filters to one tool group; use sassy_tool_groups to learn valid group names. query (default empty) is a case-insensitive substring match against the tool name or its purpose line. Use this as the client-agnostic capability map to see what the server can actually do; prefer it over sassy_tool_groups when you need tool-level detail rather than group metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupNo
queryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds the key behavior that it is derived live from the registry, so it never drifts from reality, which is extra context beyond the annotations. No contradictions found. The only missing detail is that it doesn't mention pagination or limits, but for a read-only enumeration this is adequate.

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 description is a single dense paragraph but front-loaded with the key purpose and live registry detail. It packs a lot of information (return format, sorting, filters, sibling guidance) with minimal waste. It is somewhat long but every sentence earns its place, and the structure is logical: what, how, parameters, and when to use.

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?

Given the tool's simplicity (2 optional params, no required), the description covers everything an agent needs: what it returns (counts, grouped tools, filters), how to filter (group, query), how to get valid group names (sassy_tool_groups), and when to use it (capability map). The output schema exists, so return format is covered. No critical gaps.

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 0%, so the description must fully explain the parameters. It does: 'group (default empty = all) filters to one tool group; use sassy_tool_groups to learn valid group names' and 'query (default empty) is a case-insensitive substring match against the tool name or its purpose line'. This adds meaning beyond the bare schema, compensating for the zero coverage.

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 clearly states the tool enumerates registered tools with live registry data, returning counts and grouped details. It distinguishes itself from sassy_tool_groups by emphasizing tool-level detail vs group metadata, and from other tools by focusing on capability mapping. The verb 'enumerates' and resource 'tool registry' are specific and unambiguous.

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 states when to use: 'as the client-agnostic capability map to see what the server can actually do' and when to prefer alternatives: 'prefer it over sassy_tool_groups when you need tool-level detail rather than group metadata'. This provides clear routing to siblings.

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

sassy_tool_groupsA
Read-onlyIdempotent

Read-only. Lists all available tool groups with their load status and metadata: member modules, one-line description, always_load flag, tool counts, network requirements, and per-group rate limits. Takes no parameters. Use this to see which groups are loaded before enabling more or diagnosing missing tools (missing tools are usually in a dormant on-demand group); use sassy_tool_group_toggle to change load state and sassy_tool_catalog to list the tools inside a group.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description reinforces this with 'Read-only' rather than contradicting it. The description adds useful behavioral context by detailing the returned metadata (load status, rate limits, network requirements) and explaining what missing tools usually indicate.

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 read-only nature and primary action, then lists the returned fields, then gives usage guidance in one additional sentence. Every sentence adds value; there is no redundant or filler content.

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

Completeness5/5

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

For a zero-parameter, read-only listing tool with a rich output schema, the description is complete: it tells the agent what the tool returns, when to use it, and which siblings to use for related actions. The presence of an output schema means return-value structure does not need to be repeated in the description.

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 schema already fully covers this dimension. The description correctly states 'Takes no parameters', and no additional parameter semantics are needed beyond the 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?

States a specific verb and resource: 'Lists all available tool groups with their load status and metadata', and enumerates the exact metadata fields returned. It also distinguishes itself from sibling tools sassy_tool_group_toggle and sassy_tool_catalog, making its scope unambiguous.

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 says when to use it: 'before enabling more or diagnosing missing tools'. It also names the alternatives and their purposes: sassy_tool_group_toggle for changing load state and sassy_tool_catalog for listing tools inside a group. This fully routes the agent to the correct tool.

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

sassy_tool_group_toggleA
Idempotent

Mutating: flips a tool group's always_load flag in the running server process, enabling (enable=true, default) or disabling (enable=false) its modules, and attempts a tools/list_changed notification so capable clients (Claude Code, Cursor) refresh automatically. Clients that do not handle it (Claude Desktop today) need a manual server restart. group must be an exact group name (core, infrastructure, android, system, forensics, linux, github_quick, github_full, persona, utility, setup, memory, updater, combos, prompts); an unknown name returns an error listing the valid groups. Returns status, the group's modules, and whether the notification was sent. Use it to trim context by disabling heavy unused groups like github_full, or to load dormant capability on demand; check sassy_tool_groups first for current load status.

ParametersJSON Schema
NameRequiredDescriptionDefault
groupYes
enableNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond annotations by detailing the live-server mutation, the attempted tools/list_changed notification, client-specific behavior requiring restart, unknown-group error behavior, and return contents. This gives the agent a complete behavioral picture with no contradictions.

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

Conciseness5/5

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

The description is information-dense and well-structured, opening with the mutating nature and action before covering notification, acceptable values, return values, and use cases. The long list of group names is justified because the schema lacks enums or descriptions.

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 mutating toggle with two parameters Games, the description covers inputs, valid values, side effects, client behavior, return summary Games, and usage rationale. The output schema covers the return structure, while the description fills all other contextual gaps.

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 0%, but the description fully compensates: it defines 'enable=true, default' and 'enable=false', requires an exact group name, lists all valid group names, and explains the error for unknown names. This adds meaning far beyond the bare schema properties.

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: 'flips a tool group's always_load flag' and explains enabling/disabling modules. This clearly distinguishes it from sibling tools like sassy_tool_groups by focusing on mutation rather than 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?

It gives explicit use cases: 'trim context by disabling heavy unused groups like github_full' or 'load dormant capability on demand.' It also directs the agent to check sassy_tool_groups first for current load status, providing clear context, though it does not explicitly list when-not-to-use cases.

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

sassy_tool_usageA
Read-onlyIdempotent

Read-only. Returns tool usage analytics tracked by the server and persisted across sessions in ~/.sassymcp/tool_usage.json (last 90 days, capped at 500 invocations per tool): unique_tools_ever, total_invocations, invocations_today, invocations_this_week, and a top_10 list of tool names with recency-weighted scores (0.0-1.0 via exponential decay, so recent calls count more). Takes no parameters. Use it to see which tools are actually exercised, to inform which groups are safe to disable, or to understand usage patterns; pair with sassy_tool_groups when deciding what to prune for context savings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description reveals persistence across sessions, the file location (~/.sassymcp/tool_usage.json), retention window (last 90 days), per-tool cap (500 invocations), and the exponential decay weighting of the top_10 scores. These are meaningful behavioral details an agent would not infer from annotations alone.

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

Conciseness5/5

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

The description is front-loaded with 'Read-only' and a clear statement of what it returns, then packs retention details and usage guidance into three dense sentences. Every clause carries information—file path, cap, decay formula, and decision use cases—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?

For a parameterless tool with an output schema, the description is fully self-contained: it explains persistence, data scope, the decay scoring model, and how to use the results for pruning. It even cross-references sassy_tool_groups, covering the decision workflow.

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 and the schema coverage is 100% (vacuously). No parameter documentation is needed, which matches the baseline of 4 for parameterless tools; the description adds no parameter-specific meaning because none exists.

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 and resource: 'Returns tool usage analytics tracked by the server' and enumerates the exact statistics returned. It distinguishes itself from lookalike siblings by focusing on persisted usage metrics (invocations, recency-weighted top 10) rather than observability health or audit logs.

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?

The description gives explicit use cases: 'to see which tools are actually exercised, to inform which groups are safe to disable, or to understand usage patterns' and recommends pairing with sassy_tool_groups for pruning decisions. It does not mention when not to use it or explicit alternatives, but the context is clear.

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

sassy_type_textA
Destructive

Mutating: sends keystrokes to the focused field. It always clears the field first with ctrl-a + backspace, so it never appends — if you need to preserve existing content, this is the wrong tool. If target_x and target_y are both nonzero it clicks there first; text is then typed with interval seconds between keystrokes (default 0.02). Works on Windows, macOS, and Linux via pyautogui. Returns the character count typed. Use it to fill GUI fields; use sassy_hotkey for shortcuts like ctrl+s and sassy_click for mouse actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
intervalNo
target_xNo
target_yNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

Goes far beyond the destructiveHint annotation by disclosing the exact destructive mechanism: it 'always clears the field first with ctrl-a + backspace, so it never appends'. It also reveals the conditional click on target_x/target_y, per-keystroke interval, platform support, and return value, all consistent with the annotations.

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

Conciseness5/5

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

Six sentences, each earning its place: purpose, destructive behavior, coordinate/interval behavior, platform, return value, and sibling routing. It is front-loaded with the most important facts and contains 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 purpose, destructive behavior, parameter conditions, platform, return value, and alternatives. Given that an output schema exists and annotations capture the safety profile, nothing an agent needs to invoke this tool correctly is missing.

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?

With 0% schema description coverage, the description carries the full burden, and it succeeds: text is the typed content, interval is the seconds between keystrokes with a default, and target_x/target_y jointly trigger a preliminary click only when both are nonzero. This adds actionable meaning beyond the bare 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: 'sends keystrokes to the focused field' and 'fill GUI fields'. It also distinguishes itself from siblings by naming sassy_hotkey for shortcuts and sassy_click for mouse actions, so an agent can select correctly.

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 guidance ('Use it to fill GUI fields') and explicit when-not guidance ('if you need to preserve existing content, this is the wrong tool'). It also names concrete alternatives, sassy_hotkey and sassy_click, reducing ambiguity.

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

sassy_untarA
Idempotent

Mutating: writes extracted files to disk. Extracts tar, tar.gz, tar.bz2, or tar.xz archives using a data-only extraction filter. destination defaults to the archive's parent directory under the archive name with the .tar extension removed. Existing files at the destination are silently overwritten. There is no password option, unlike sassy_unzip. Returns the extraction path, the file count, and a sample of the first 20 member names. Use it to open archives created by sassy_tar or downloaded from the web.

ParametersJSON Schema
NameRequiredDescriptionDefault
archiveYes
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior1/5

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

Annotations declare destructiveHint=false, yet the description says existing files at the destination are silently overwritten, which is a destructive side effect. This is an annotation contradiction, so the description's otherwise strong behavioral disclosure cannot be credited.

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?

Five sentences, each carrying a distinct fact: mutating behavior, formats, destination default, overwrite semantics, return summary, and usage guidance. Front-loaded with the mutating warning; 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?

Given the output schema covers return values, the description provides all needed operational context: formats, default destination, overwrite behavior, and the password limitation. An agent has enough to invoke 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?

With 0% schema coverage, the description compensates by explaining the destination default and the accepted archive formats. It could be clearer that 'archive' is a filesystem path, but it adds substantial meaning beyond the bare parameter 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 ('Extracts') with the supported formats (tar, tar.gz, tar.bz2, tar.xz) and names the sibling it differs from (sassy_unzip). An agent can immediately understand what this tool does and how it relates to nearby tools.

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 says to use it for archives created by sassy_tar or downloaded from the web, and points out the absence of a password option compared with sassy_unzip. It gives clear context but does not exhaustively state when not to use it beyond that contrast.

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

sassy_unzipA
Idempotent

Mutating: writes extracted files to disk. Extracts a .zip archive to destination, defaulting to the archive's parent directory under the archive's stem name. password (default empty) unlocks encrypted zips. Zip-slip protection rejects the whole archive with an error if any entry path escapes the destination. Existing files at the destination are silently overwritten. Returns the extraction path, the file count, and a sample of the first 20 entry names. Use it to open zips from any source; use sassy_zip to create archives for extraction with this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
archiveYes
passwordNo
destinationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Goes far beyond the annotations by describing side effects (files written to disk, existing files silently overwritten), safety behavior (zip-slip protection rejects the whole archive), and return contents (path, file count, first 20 entry names). These details are consistent with readOnlyHint=false and add meaningful behavioral context the annotations do not provide.

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 dense sentences pack the mutation warning, default destination behavior, password handling, zip-slip protection, overwrite semantics, returns, and sibling routing with no wasted words. The mutation warning is front-loaded, which is useful for an agent deciding whether to invoke the 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?

Everything needed to call the tool correctly is present: required archive, optional destination default, optional password, overwrite behavior, security handling, and usage routing. Since an output schema exists, the description does not need to enumerate return values, and nothing else is missing for a correct invocation.

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?

The input schema has 0% description coverage, so the description carries the full burden of explaining parameters. It covers the archive to extract, the destination defaulting to the archive's parent under its stem name, and the password parameter defaulting to empty for encrypted archives, giving meaning to all three 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?

Begins with 'Mutating: writes extracted files to disk,' then clearly states it extracts a .zip archive to a destination with a defined default. The final sentence names sassy_zip as the archive-creation counterpart, so an agent can distinguish extraction from creation without needing to inspect 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?

Explicitly says 'Use it to open zips from any source; use sassy_zip to create archives for extraction with this tool,' giving both a usage context and a pointer to the relevant sibling. It does not explicitly contrast with the tar-extraction sibling sassy_untar, which is a minor gap in when-not-to-use guidance.

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

sassy_update_applyA
Idempotent

Mutating (writes a downloaded file to disk; does NOT execute anything). Downloads one release asset to staging and returns the local path plus a run command the user executes manually. Required: asset_name (exact filename; get valid names from sassy_update_list). Optional tag (default latest) and dest_dir (default LOCALAPPDATA/SassyMCP/updates on Windows, ~/SassyMCP/updates otherwise). If the release publishes a SHA-256 sidecar, the download is verified: on mismatch the file is deleted and the tool errors; with no sidecar it warns but proceeds. The run command is per asset type AND host OS: msiexec /i for .msi on Windows (.msi is Windows-only and refused with guidance on POSIX), Expand-Archive for .zip on Windows vs unzip -o plus chmod +x on POSIX, tar -xzf for .tar.gz/.tgz, direct path otherwise. Disabled in packaged/frozen builds: returns an error telling you to install a new release artifact instead. Requires network access.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
dest_dirNo
asset_nameYes

TDQS

A5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and destructiveHint=false, but the description adds critical behavioral detail beyond that: it clarifies that it does NOT execute anything, describes the SHA-256 verification process (deleting file on mismatch and erroring, or warning and proceeding without a sidecar), and notes platform-specific behaviors like refusing .msi on POSIX. It also mentions the disabled condition for packaged builds. This is rich, non-contradictory transparency.

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?

Although the description is long, every sentence carries essential information and is logically ordered: starting with the core mutation/execution distinction, then requirements, then verification, then platform specifics, then disabled/build conditions and network requirement. There is no filler or redundancy; the structure front-loads the most critical safety 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 tool with no output schema and 0% parameter coverage, the description delivers everything an agent needs: the return value (local path plus run command), the required input and its source, optional parameters with defaults, verification behavior, platform-specific command generation, and operational constraints (network, disabled in frozen builds). No critical information is missing for correct invocation.

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?

The input schema only provides types and defaults, with zero description coverage. The description goes far beyond that: it explains that asset_name is required and must be an exact filename (and how to obtain valid names), that tag defaults to 'latest', and that dest_dir has OS-specific defaults (LOCALAPPDATA on Windows, ~/SassyMCP/updates otherwise). It also clarifies the meaning of optional parameters in practice. This fully compensates for the schema's lack of explanation.

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 opens with a precise statement of what the tool does and what it does NOT do: 'Mutating (writes a downloaded file to disk; does NOT execute anything)'. It clearly specifies the resource (release asset) and the action (download, write to disk, return path and command). This distinguishes it from sibling tools like sassy_update_list (which lists assets) and sassy_update_check (which checks for updates). The purpose is unambiguous.

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?

The description explicitly tells the agent to get valid asset_name values from the sibling tool sassy_update_list, and clearly explains the optional parameters (tag, dest_dir) with their defaults and OS-specific behavior. It also states that it is disabled in packaged/frozen builds and requires network access. This fully orients the agent on when and how to use the tool versus alternatives.

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

sassy_update_changelogA
Read-onlyIdempotent

Read-only. Returns the release notes for one release as JSON with tag, release name, published_at, the notes body, and the release URL. Optional tag; defaults to the latest release when omitted. If the tag is not found among recent releases it returns an error. Requires network access to the GitHub releases endpoint. Use to see what changed before deciding to upgrade; for the downloadable assets of that release use sassy_update_list, and to stage the download use sassy_update_apply. Does not check whether you are behind; for that use sassy_update_check.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, openWorldHint, idempotentHint, destructiveHint), the description adds concrete behavioral details: network access requirement, error behavior when tag not found, default to latest release, and the specific fields returned. This is substantial and directly aids correct invocation.

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 compact yet information-dense, starting with the core purpose and then layering in usage guidance and exclusions. Every sentence adds value; there is no filler or 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?

Given the tool's simplicity (single optional param, no output schema), the description covers all required invocation details: output format, default behavior, error case, network dependency, and when to use it relative to siblings. Nothing essential is missing.

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 0% and there is only one optional parameter. The description fully compensates by explaining that 'tag' is optional, defaults to latest release, and returns an error if not found. This is exactly the semantic information needed beyond the bare 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 clearly states the verb ('Returns') and resource ('release notes for one release') and explicitly defines the output shape (tag, release name, published_at, notes body, URL). It also distinguishes itself from siblings by naming what it does not do (checking if behind) and listing alternative tools for related tasks.

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 states when to use this tool ('Use to see what changed before deciding to upgrade') and when not, with clear alternatives: 'for the downloadable assets of that release use sassy_update_list' and 'to stage the download use sassy_update_apply' and 'Does not check whether you are behind; for that use sassy_update_check.' No ambiguity.

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

sassy_update_checkA
Read-onlyIdempotent

Read-only (fetches remote release state; changes nothing). The apt-update equivalent: contacts the GitHub releases endpoint and reports current version versus latest version as JSON with an upgradable boolean and a one-line summary. Results are cached for 5 minutes; pass force=true to bypass the cache and hit the network again. If GitHub is unreachable it returns an error instead of guessing. Takes no other parameters and requires network access. Use as the first update step to learn whether an upgrade exists; then use sassy_update_changelog to read the notes, sassy_update_list to see the assets, and sassy_update_apply to download.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo

TDQS

A5/5.0
Behavior5/5

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

The description adds substantial behavioral detail beyond the annotations: it is read-only, caches results for 5 minutes, force=true bypasses the cache, it returns an error if GitHub is unreachable instead of guessing, and it requires network access. The annotations align with the description, and the description enriches the safety profile with concrete runtime behavior.

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 dense but well-organized: it leads with the read-only guarantee, then explains purpose, output, caching behavior, error behavior, parameter scope, and sibling tool routing. Every sentence contributes useful information without 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?

Despite having no output schema, the description tells the agent exactly what the response contains (JSON with upgradable boolean and one-line summary). It covers input, side effects, caching, network requirements, failure mode, and how the tool fits into the broader update workflow. An agent can invoke it correctly with no missing context.

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 0%, so the description carries full responsibility for parameter meaning. It explicitly explains that force=true bypasses the cache and hits the network again, and it states that no other parameters exist. This fully compensates for the lack of schema descriptions.

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 action: fetch remote release state from GitHub and report current versus latest version. It also explicitly positions itself as the 'apt-update equivalent' and distinguishes its role from sibling tools like sassy_update_changelog, sassy_update_list, and sassy_update_apply.

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?

The description gives explicit usage guidance: use this as the first update step to learn whether an upgrade exists, then use the named siblings for changelog, assets, and applying the update. This clearly routes the agent to the correct tool and its alternatives.

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

sassy_update_listA
Read-onlyIdempotent

Read-only. Lists the downloadable assets for one release as JSON: tag, current version, asset_count, and per-asset name, size_bytes, download_url, content_type, and download count. Optional tag; defaults to the latest release. Lookup is limited to the five newest published releases (older tags return a not-found error) and drafts are excluded. Requires network access to the GitHub releases endpoint. Use after sassy_update_check to pick the right asset_name for sassy_update_apply; use sassy_update_changelog for the release notes. Nothing here downloads or installs anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint=false), the description discloses meaningful behavior: lookup limited to five newest releases, drafts excluded, older tags return not-found, tag defaults to latest, and nothing downloads or installs anything. None of this contradicts the annotations.

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

Conciseness5/5

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

The description is front-loaded with the read-only nature and core purpose, then methodically covers output shape, parameter behavior, constraints, network requirement, and related tools. Every sentence adds either selection guidance or call-critical detail; nothing is wasted.

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, the description supplies the return shape and field list. It also covers the optional parameter, default behavior, lookup limits, draft exclusion, network dependency, and sibling tool routing. For a simple one-parameter read-only lookup, nothing needed for correct invocation is missing.

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 0%, so the description carries the burden for the sole 'tag' parameter. It compensates well: 'Optional tag; defaults to the latest release,' plus the behavioral constraint that older tags return a not-found error and drafts are excluded. This gives an agent enough to invoke the parameter correctly.

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 ('Lists') and resource ('downloadable assets for one release'), and enumerates the exact returned fields (tag, version, asset_count, per-asset metadata). It also distinguishes itself from siblings by naming sassy_update_apply, sassy_update_changelog, and sassy_update_check in context.

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?

The description gives explicit sequencing guidance: 'Use after sassy_update_check to pick the right asset_name for sassy_update_apply; use sassy_update_changelog for the release notes.' It also states a prerequisite (network access to the GitHub releases endpoint) and a hard constraint (only five newest published releases).

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

sassy_write_fileA
Destructive

Mutating: creates or overwrites files. mode defaults to 'rewrite' (full replace); on an existing file the prior contents are first snapshotted into the adjacent DELETE/ staging folder as stem.overwrite..ext, so overwrites are recoverable. mode 'append' adds bytes to the end. Missing parent directories are created. encoding defaults to utf-8 (any Python codec name); line_endings defaults to 'preserve' (verbatim), with 'lf' and 'crlf' normalizing all line breaks (crlf is useful for Windows .bat/.ps1 files). It bypasses the shell-keyword interceptor entirely, but protected paths (SassyMCP source tree, ~/.sassymcp, ~/.ssh, ~/.aws, etc.) are refused. Use it to create files or full rewrites; prefer sassy_edit_block or sassy_edit_multi for small changes to existing files.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNorewrite
pathYes
contentYes
encodingNoutf-8
line_endingsNopreserve

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description discloses overwrite snapshot recovery into _DELETE_, append behavior, parent-directory creation, default encoding and line-ending normalization, and refusal of protected paths. It also notes that the shell-keyword interceptor is bypassed. This is substantial behavioral context consistent with the annotations.

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

Conciseness4/5

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

The description is a single dense paragraph, but it is front-loaded with the core purpose and every subsequent clause adds operational information needed to call the tool correctly. It is long due to the number of behavioral nuances, not verbosity.

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?

All five parameters, the primary behavioral modes, safety constraints, and the recommended alternative tools are covered. An output schema exists, so the lack of explicit return-value description is acceptable; nothing essential for a correct call is missing.

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 description coverage is 0%, and the description compensates by explaining mode values ('rewrite' vs 'append'), encoding default and accepted codec names, and line_endings behavior ('preserve', 'lf', 'crlf'). It also clarifies path-related behavior by mentioning missing parent directories and protected paths.

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 opens with 'Mutating: creates or overwrites files'—a specific verb and resource—then distinguishes the two write modes. It also names sassy_edit_block/sassy_edit_multi as the tools for small edits, so it is clear what this tool is not for.

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 says to use this tool for file creation or full rewrites and to prefer sassy_edit_block or sassy_edit_multi for small changes to existing files. Mode-level guidance (append vs rewrite) and the 'prefer' rule give an agent concrete decision criteria.

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

sassy_zipA
Idempotent

Mutating: writes a new zip archive to disk. Creates a zip from a file or directory in source; directories are walked recursively and files are stored with paths relative to the source root, while a single file is stored under its basename. compression (default deflated) accepts deflated, stored, bzip2, or lzma, and unrecognized values fall back to deflated. output defaults to source plus .zip, replacing the extension for files. Sensitive members are not blocked (full-directory backups must keep working): if any archived file matches the sensitive-read denylist (SSH keys, credential stores, ...), the archive is still created but the result carries a 'warning' field listing them and the event is audit-logged. Returns the created path, file count, original and zip byte sizes, and a compression ratio percentage. Use it to package files for sharing; use sassy_unzip to extract what it creates.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputNo
sourceYes
compressionNodeflated

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing side effects: it writes to disk, walks directories recursively, stores paths relative to source root, falls back to deflated for unrecognized compression values, and does not block sensitive members while still logging them. It also enumerates the return fields. This is rich behavioral context that annotations alone do not provide.

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?

Although long, the description is dense and every sentence earns its place. The mutating side effect is front-loaded, followed by input handling, output behavior, security implications, return value, and usage guidance. There is no redundant restatement of the tool 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?

Given the sparse schema and available annotations, the description is remarkably complete. It covers input semantics, defaults, edge-case compression behavior, security-sensitive handling, audit logging, and the returned summary fields. The only minor omissions, such as overwrite behavior for an existing output file, do not materially impair an agent's ability to call the tool correctly.

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 description coverage is 0%, so the description must fully document parameters, and it does. It explains the meaning of 'source' (file or directory), 'output' (defaults to source plus .zip, replacing extension for files), and 'compression' (valid values plus fallback behavior). Every parameter receives useful semantic detail beyond the bare 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 opens with 'Mutating: writes a new zip archive to disk' and then specifies exactly what it does: 'Creates a zip from a file or directory in source.' It distinguishes itself from the sibling sassy_unzip by saying 'use sassy_unzip to extract what it creates,' so an agent can tell this tool apart without inspecting 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?

The description gives explicit guidance: 'Use it to package files for sharing; use sassy_unzip to extract what it creates.' It clearly names the companion alternative. However, it does not differentiate sassy_zip from the sibling sassy_tar/sassy_untar archive tools, so an agent choosing between zip and tar formats has no explicit decision guidance.

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. 3 tool updatesv1.16.0
    • Changedsassy_memory_handoff2 fields changed
      • addedOutput schema / properties / crosslink_posted
        Added value: +{
        +  "title": "Crosslink Posted",
        +  "type": "boolean"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "handoff_saved",
        -  "memory_key",
        -  "crosslink_channel",
        -  "next_session"
        -]New value: +[
        +  "handoff_saved",
        +  "memory_key",
        +  "crosslink_channel",
        +  "next_session",
        +  "crosslink_posted"
        +]
    • Changedsassy_permission1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "default": "",
        +  "title": "Confirm",
        +  "type": "string"
        +}
    • Changedsassy_state_clear1 field changed
      • addedInput schema / properties / confirm
        Added value: +{
        +  "default": "",
        +  "title": "Confirm",
        +  "type": "string"
        +}
  2. 55 tool updatesv1.15.1
    • Addedsassy_batch
    • Changedsassy_context_estimate4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_context_estimateOutput"New value: +"sassy_context_estimateDictOutput"
    • Changedsassy_diff4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_diffOutput"New value: +"sassy_diffDictOutput"
    • Changedsassy_env_get4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_env_getOutput"New value: +"sassy_env_getDictOutput"
    • Changedsassy_env_list4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_env_listOutput"New value: +"sassy_env_listDictOutput"
    • Changedsassy_env_set4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_env_setOutput"New value: +"sassy_env_setDictOutput"
    • Changedsassy_get_config4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_get_configOutput"New value: +"sassy_get_configDictOutput"
    • Changedsassy_hooks_activate4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_hooks_activateOutput"New value: +"sassy_hooks_activateDictOutput"
    • Changedsassy_hooks_deactivate4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_hooks_deactivateOutput"New value: +"sassy_hooks_deactivateDictOutput"
    • Changedsassy_hooks_list4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_hooks_listOutput"New value: +"sassy_hooks_listDictOutput"
    • Changedsassy_hooks_suggest4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_hooks_suggestOutput"New value: +"sassy_hooks_suggestDictOutput"
    • Changedsassy_http4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_httpOutput"New value: +"sassy_httpDictOutput"
    • Changedsassy_http_ping4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_http_pingOutput"New value: +"sassy_http_pingDictOutput"
    • Changedsassy_memory_context12 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "MemoryRecord": {
        +    "properties": {
        +      "access_count": {
        +        "title": "Access Count",
        +        "type": "integer"
        +      },
        +      "created_at": {
        +        "title": "Created At",
        +        "type": "number"
        +      },
        +      "key": {
        +        "title": "Key",
        +        "type": "string"
        +      },
        +      "priority": {
        +        "title": "Priority",
        +        "type": "string"
        +      },
        +      "project": {
        +        "title": "Project",
        +        "type": "string"
        +      },
        +      "tags": {
        +        "title": "Tags",
        +        "type": "string"
        +      },
        +      "updated_at": {
        +        "title": "Updated At",
        +        "type": "number"
        +      },
        +      "value": {
        +        "title": "Value",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "key",
        +      "value",
        +      "tags",
        +      "priority",
        +      "project",
        +      "created_at",
        +      "updated_at",
        +      "access_count"
        +    ],
        +    "title": "MemoryRecord",
        +    "type": "object"
        +  },
        +  "Milestone": {
        +    "properties": {
        +      "event": {
        +        "title": "Event",
        +        "type": "string"
        +      },
        +      "id": {
        +        "title": "Id",
        +        "type": "integer"
        +      },
        +      "project": {
        +        "title": "Project",
        +        "type": "string"
        +      },
        +      "tags": {
        +        "title": "Tags",
        +        "type": "string"
        +      },
        +      "timestamp": {
        +        "title": "Timestamp",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "event",
        +      "project",
        +      "tags",
        +      "timestamp"
        +    ],
        +    "title": "Milestone",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties / active_tasks
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Active Tasks",
        +  "type": "array"
        +}
      • addedOutput schema / properties / blockers
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Blockers",
        +  "type": "array"
        +}
      • addedOutput schema / properties / critical
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Critical",
        +  "type": "array"
        +}
      • addedOutput schema / properties / high_priority
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "High Priority",
        +  "type": "array"
        +}
      • addedOutput schema / properties / milestones
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/Milestone"
        +  },
        +  "title": "Milestones",
        +  "type": "array"
        +}
      • addedOutput schema / properties / patterns
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Patterns",
        +  "type": "array"
        +}
      • addedOutput schema / properties / project_memories
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Project Memories",
        +  "type": "array"
        +}
      • addedOutput schema / properties / recent_memories
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Recent Memories",
        +  "type": "array"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "critical",
        +  "high_priority",
        +  "active_tasks",
        +  "blockers",
        +  "recent_memories",
        +  "project_memories",
        +  "patterns",
        +  "milestones"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_contextOutput"New value: +"ContextResult"
    • Changedsassy_memory_forget6 fields changed
      • addedOutput schema / properties / error
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "title": "Error"
        +}
      • addedOutput schema / properties / forgotten
        Added value: +{
        +  "title": "Forgotten",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / key
        Added value: +{
        +  "title": "Key",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "forgotten",
        +  "key",
        +  "error"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_forgetOutput"New value: +"ForgetResult"
    • Changedsassy_memory_handoff7 fields changed
      • addedOutput schema / properties / crosslink_channel
        Added value: +{
        +  "title": "Crosslink Channel",
        +  "type": "string"
        +}
      • addedOutput schema / properties / handoff_saved
        Added value: +{
        +  "title": "Handoff Saved",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / memory_key
        Added value: +{
        +  "title": "Memory Key",
        +  "type": "string"
        +}
      • addedOutput schema / properties / next_session
        Added value: +{
        +  "title": "Next Session",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "handoff_saved",
        +  "memory_key",
        +  "crosslink_channel",
        +  "next_session"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_handoffOutput"New value: +"HandoffResult"
    • Changedsassy_memory_log5 fields changed
      • addedOutput schema / properties / logged
        Added value: +{
        +  "title": "Logged",
        +  "type": "string"
        +}
      • addedOutput schema / properties / project
        Added value: +{
        +  "title": "Project",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "logged",
        +  "project"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_logOutput"New value: +"LogResult"
    • Changedsassy_memory_milestones6 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "Milestone": {
        +    "properties": {
        +      "event": {
        +        "title": "Event",
        +        "type": "string"
        +      },
        +      "id": {
        +        "title": "Id",
        +        "type": "integer"
        +      },
        +      "project": {
        +        "title": "Project",
        +        "type": "string"
        +      },
        +      "tags": {
        +        "title": "Tags",
        +        "type": "string"
        +      },
        +      "timestamp": {
        +        "title": "Timestamp",
        +        "type": "number"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "event",
        +      "project",
        +      "tags",
        +      "timestamp"
        +    ],
        +    "title": "Milestone",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "title": "Count",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / milestones
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/Milestone"
        +  },
        +  "title": "Milestones",
        +  "type": "array"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "count",
        +  "milestones"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_milestonesOutput"New value: +"MilestonesResult"
    • Changedsassy_memory_recall7 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "MemoryRecord": {
        +    "properties": {
        +      "access_count": {
        +        "title": "Access Count",
        +        "type": "integer"
        +      },
        +      "created_at": {
        +        "title": "Created At",
        +        "type": "number"
        +      },
        +      "key": {
        +        "title": "Key",
        +        "type": "string"
        +      },
        +      "priority": {
        +        "title": "Priority",
        +        "type": "string"
        +      },
        +      "project": {
        +        "title": "Project",
        +        "type": "string"
        +      },
        +      "tags": {
        +        "title": "Tags",
        +        "type": "string"
        +      },
        +      "updated_at": {
        +        "title": "Updated At",
        +        "type": "number"
        +      },
        +      "value": {
        +        "title": "Value",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "key",
        +      "value",
        +      "tags",
        +      "priority",
        +      "project",
        +      "created_at",
        +      "updated_at",
        +      "access_count"
        +    ],
        +    "title": "MemoryRecord",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties / error
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "title": "Error"
        +}
      • addedOutput schema / properties / found
        Added value: +{
        +  "title": "Found",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / memory
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/MemoryRecord"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "found",
        +  "memory",
        +  "error"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_recallOutput"New value: +"RecallResult"
    • Changedsassy_memory_remember5 fields changed
      • addedOutput schema / properties / action
        Added value: +{
        +  "title": "Action",
        +  "type": "string"
        +}
      • addedOutput schema / properties / key
        Added value: +{
        +  "title": "Key",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "key",
        +  "action"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_rememberOutput"New value: +"RememberResult"
    • Changedsassy_memory_search6 fields changed
      • addedOutput schema / $defs
        Added value: +{
        +  "MemoryRecord": {
        +    "properties": {
        +      "access_count": {
        +        "title": "Access Count",
        +        "type": "integer"
        +      },
        +      "created_at": {
        +        "title": "Created At",
        +        "type": "number"
        +      },
        +      "key": {
        +        "title": "Key",
        +        "type": "string"
        +      },
        +      "priority": {
        +        "title": "Priority",
        +        "type": "string"
        +      },
        +      "project": {
        +        "title": "Project",
        +        "type": "string"
        +      },
        +      "tags": {
        +        "title": "Tags",
        +        "type": "string"
        +      },
        +      "updated_at": {
        +        "title": "Updated At",
        +        "type": "number"
        +      },
        +      "value": {
        +        "title": "Value",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "key",
        +      "value",
        +      "tags",
        +      "priority",
        +      "project",
        +      "created_at",
        +      "updated_at",
        +      "access_count"
        +    ],
        +    "title": "MemoryRecord",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / properties / count
        Added value: +{
        +  "title": "Count",
        +  "type": "integer"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • addedOutput schema / properties / results
        Added value: +{
        +  "items": {
        +    "$ref": "#/$defs/MemoryRecord"
        +  },
        +  "title": "Results",
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "count",
        +  "results"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_searchOutput"New value: +"SearchResult"
    • Changedsassy_memory_stats7 fields changed
      • addedOutput schema / properties / by_priority
        Added value: +{
        +  "additionalProperties": {
        +    "type": "integer"
        +  },
        +  "title": "By Priority",
        +  "type": "object"
        +}
      • addedOutput schema / properties / milestones
        Added value: +{
        +  "title": "Milestones",
        +  "type": "integer"
        +}
      • addedOutput schema / properties / projects
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "title": "Projects",
        +  "type": "array"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • addedOutput schema / properties / total_memories
        Added value: +{
        +  "title": "Total Memories",
        +  "type": "integer"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "total_memories",
        +  "by_priority",
        +  "milestones",
        +  "projects"
        +]
      • changedOutput schema / title
        Previous value: -"sassy_memory_statsOutput"New value: +"StatsResult"
    • Changedsassy_minify_test4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_minify_testOutput"New value: +"sassy_minify_testDictOutput"
    • Addedsassy_offline_commands
    • Addedsassy_offline_handoff
    • Addedsassy_offline_status
    • Changedsassy_panel4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_panelOutput"New value: +"sassy_panelDictOutput"
    • Changedsassy_persona_full4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_persona_fullOutput"New value: +"sassy_persona_fullDictOutput"
    • Changedsassy_recent_tool_calls4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_recent_tool_callsOutput"New value: +"sassy_recent_tool_callsDictOutput"
    • Changedsassy_screen_info4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_screen_infoOutput"New value: +"sassy_screen_infoDictOutput"
    • Changedsassy_self_check4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_self_checkOutput"New value: +"sassy_self_checkDictOutput"
    • Changedsassy_session_list4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_session_listOutput"New value: +"sassy_session_listDictOutput"
    • Changedsassy_session_read4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_session_readOutput"New value: +"sassy_session_readDictOutput"
    • Changedsassy_session_send4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_session_sendOutput"New value: +"sassy_session_sendDictOutput"
    • Changedsassy_session_start4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_session_startOutput"New value: +"sassy_session_startDictOutput"
    • Changedsassy_session_stop4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_session_stopOutput"New value: +"sassy_session_stopDictOutput"
    • Changedsassy_session_stop_all4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_session_stop_allOutput"New value: +"sassy_session_stop_allDictOutput"
    • Changedsassy_setup_check_tools4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_check_toolsOutput"New value: +"sassy_setup_check_toolsDictOutput"
    • Changedsassy_setup_generate_token4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_generate_tokenOutput"New value: +"sassy_setup_generate_tokenDictOutput"
    • Changedsassy_setup_github4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_githubOutput"New value: +"sassy_setup_githubDictOutput"
    • Changedsassy_setup_license4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_licenseOutput"New value: +"sassy_setup_licenseDictOutput"
    • Changedsassy_setup_ssh4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_sshOutput"New value: +"sassy_setup_sshDictOutput"
    • Changedsassy_setup_status4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_statusOutput"New value: +"sassy_setup_statusDictOutput"
    • Changedsassy_setup_tools4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_toolsOutput"New value: +"sassy_setup_toolsDictOutput"
    • Changedsassy_setup_wizard4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_setup_wizardOutput"New value: +"sassy_setup_wizardDictOutput"
    • Changedsassy_state_get4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_state_getOutput"New value: +"sassy_state_getDictOutput"
    • Changedsassy_tar4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_tarOutput"New value: +"sassy_tarDictOutput"
    • Changedsassy_toast4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_toastOutput"New value: +"sassy_toastDictOutput"
    • Changedsassy_tool_catalog4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_tool_catalogOutput"New value: +"sassy_tool_catalogDictOutput"
    • Changedsassy_tool_group_toggle4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_tool_group_toggleOutput"New value: +"sassy_tool_group_toggleDictOutput"
    • Changedsassy_tool_groups4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_tool_groupsOutput"New value: +"sassy_tool_groupsDictOutput"
    • Changedsassy_tool_usage4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_tool_usageOutput"New value: +"sassy_tool_usageDictOutput"
    • Changedsassy_untar4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_untarOutput"New value: +"sassy_untarDictOutput"
    • Changedsassy_unzip4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_unzipOutput"New value: +"sassy_unzipDictOutput"
    • Changedsassy_zip4 fields changed
      • addedOutput schema / additionalProperties
        Added value: +true
      • removedOutput schema / properties
        Removed value: -{
        -  "result": {
        -    "title": "Result",
        -    "type": "string"
        -  }
        -}
      • removedOutput schema / required
        Removed value: -[
        -  "result"
        -]
      • changedOutput schema / title
        Previous value: -"sassy_zipOutput"New value: +"sassy_zipDictOutput"
  3. 97 tool updatesv0.1.0
    • First observedsassy_audit_clear
    • First observedsassy_audit_false_positives
    • First observedsassy_audit_log
    • First observedsassy_audit_search
    • First observedsassy_click
    • First observedsassy_context_estimate
    • First observedsassy_copy
    • First observedsassy_desktop_state
    • First observedsassy_diff
    • First observedsassy_edit_block
    • First observedsassy_edit_multi
    • First observedsassy_env_get
    • First observedsassy_env_list
    • First observedsassy_env_set
    • First observedsassy_file_info
    • First observedsassy_get_config
    • First observedsassy_ghq_get
    • First observedsassy_ghq_issue
    • First observedsassy_ghq_issues
    • First observedsassy_ghq_pr
    • First observedsassy_ghq_protect
    • First observedsassy_ghq_push
    • First observedsassy_hooks_activate
    • First observedsassy_hooks_deactivate
    • First observedsassy_hooks_list
    • First observedsassy_hooks_suggest
    • First observedsassy_hotkey
    • First observedsassy_http
    • First observedsassy_http_ping
    • First observedsassy_list_dir
    • First observedsassy_memory_context
    • First observedsassy_memory_forget
    • First observedsassy_memory_handoff
    • First observedsassy_memory_log
    • First observedsassy_memory_milestones
    • First observedsassy_memory_recall
    • First observedsassy_memory_remember
    • First observedsassy_memory_search
    • First observedsassy_memory_stats
    • First observedsassy_minify_test
    • First observedsassy_mkdir
    • First observedsassy_move
    • First observedsassy_observability_health
    • First observedsassy_observability_metrics
    • First observedsassy_observability_tool_stats
    • First observedsassy_panel
    • First observedsassy_permission
    • First observedsassy_persona_capabilities
    • First observedsassy_persona_context
    • First observedsassy_persona_decisions
    • First observedsassy_persona_full
    • First observedsassy_persona_observability
    • First observedsassy_persona_practices
    • First observedsassy_persona_style
    • First observedsassy_read_file
    • First observedsassy_read_multiple
    • First observedsassy_recent_tool_calls
    • First observedsassy_safe_delete
    • First observedsassy_screen_info
    • First observedsassy_screenshot
    • First observedsassy_search_files
    • First observedsassy_self_check
    • First observedsassy_session_list
    • First observedsassy_session_read
    • First observedsassy_session_send
    • First observedsassy_session_start
    • First observedsassy_session_stop
    • First observedsassy_session_stop_all
    • First observedsassy_set_config
    • First observedsassy_setup_check_tools
    • First observedsassy_setup_generate_token
    • First observedsassy_setup_github
    • First observedsassy_setup_license
    • First observedsassy_setup_ssh
    • First observedsassy_setup_status
    • First observedsassy_setup_tools
    • First observedsassy_setup_wizard
    • First observedsassy_shell
    • First observedsassy_shell_confirm
    • First observedsassy_state_clear
    • First observedsassy_state_get
    • First observedsassy_state_set
    • First observedsassy_tar
    • First observedsassy_toast
    • First observedsassy_tool_catalog
    • First observedsassy_tool_group_toggle
    • First observedsassy_tool_groups
    • First observedsassy_tool_usage
    • First observedsassy_type_text
    • First observedsassy_untar
    • First observedsassy_unzip
    • First observedsassy_update_apply
    • First observedsassy_update_changelog
    • First observedsassy_update_check
    • First observedsassy_update_list
    • First observedsassy_write_file
    • First observedsassy_zip

TDQS

A3.8/5.0

Scored across 101 tools

Disambiguation2/5

Many tools are clearly distinct, but there is heavy overlap among observability/audit/meta tools (sassy_audit_log vs sassy_recent_tool_calls vs sassy_observability_health/metrics/tool_stats vs sassy_tool_usage) and between the ghq_* quick GitHub tools and the referenced gh_* full variants. An agent would struggle to pick the right one without reading deep into descriptions, and several pairs intentionally duplicate each other.

Naming Consistency4/5

All tools share the sassy_ prefix and snake_case, and most follow a domain_verb pattern (sassy_memory_remember, sassy_session_stop). A few bare-noun tools (sassy_shell, sassy_http, sassy_toast) and inconsistent verb placement (sassy_self_check vs sassy_setup_check_tools) break the pattern slightly, but overall it is predictable.

Tool Count1/5

101 tools is far beyond the well-scoped range and at the extreme end even for a general-purpose assistant server. The set tries to cover file ops, shell, desktop, GitHub, memory, persona, observability, setup, updates, and networking, but the sheer count forces heavy context consumption and makes pruning a recurring concern.

Completeness2/5

Within each domain there are basic lifecycles (file read/write/edit/delete, memory write/read/search/forget), but obvious gaps remain: the GitHub quick set has no update/delete/comment or PR listing/merging, and many descriptions point to tools that are not in the registered set (sassy_gh_*, sassy_screen_*, sassy_phone_*, sassy_crosslink_recv). Agents following those references will hit dead ends, so coverage is not self-contained.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    A feature-rich Model Context Protocol server built with FastMCP that provides various tools including basic utilities, network services, file operations, encryption tools, and system information functions.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A lightweight Windows-native MCP server providing a consolidated suite of 14 tools for shell execution, file operations, and interactive process management. It optimizes efficiency through batch file operations and smart process handling to minimize context window overhead.
    9 npm
    5
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A powerful filesystem MCP server for AI agents with extensive system access, including filesystem operations, shell execution, Windows tools, reverse engineering, code intelligence, and agent orchestration.
    1
    -