Skip to main content
Glama
syrian963

django-chainsaw-mcp

by syrian963

what_happens_on

Read-onlyIdempotent

Trace what a model save or delete triggers across connected signal handlers. Uncover hidden writes, cache clears, and queued tasks that occur indirectly.

Instructions

Follow the signal chain a save or delete actually triggers.

Nothing at an `order.save()` call site hints that it also writes an Invoice,
clears a cache and queues a task, because the receivers live elsewhere and
were connected in AppConfig.ready(). Tools that list registered receivers
exist; this follows the chain, because the second hop is where the surprise
lives.

It is also the other half of delete_impact, which deliberately ignores
signals and says so.

Args:
    model_label: "app_label.ModelName".
    event: "save" or "delete".
    max_depth: how far to follow writes into further signals.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
eventNosave
max_depthNo
model_labelYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.3

TDQS

A4.7/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's main behavioral contribution is contextual: it follows chains beyond the first hop and reveals indirect writes, cache clears, and queued tasks. It does not contradict the annotations and adds useful detail about how far the tool reaches.

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 well-structured: purpose, motivation, differentiation, then a compact Args list. The AppConfig.ready() example adds context that helps an agent understand why this tool exists, and the final paragraph cleanly lands the parameter semantics. Slightly more verbose than necessary, but no real waste.

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 presence of an output schema, the description does not need to detail return values. It provides the tool's domain, the kind of outcome to expect (following signal chains), and complete parameter guidance. For a read-only analytical tool with these annotations, 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 0% schema description coverage, the description carries the full burden of documenting parameters. It does so clearly: model_label gets an exact format ('app_label.ModelName'), event gets allowed values ('save' or 'delete'), and max_depth gets an explanation about following writes into further signals. This fully compensates for the sparse 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 and resource: 'Follow the signal chain a save or delete actually triggers.' It immediately distinguishes itself from receiver-listing tools and positions itself as the counterpart to delete_impact, so a reader can tell 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?

The description clearly explains when this tool is the right choice: when you need to trace the transitive signal-driven effects of a save or delete, because 'the second hop is where the surprise lives.' It explicitly contrasts with delete_impact, which ignores signals, providing a concrete alternative and exclusion.

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