Skip to main content
Glama

Find values that are written down in more than one place

check_single_source
Read-onlyIdempotent

Detect values like prices, emails, and phone numbers that appear in multiple files, so you can update them in one place and prevent inconsistent site data.

Instructions

Scans for values that look like a fact a visitor can act on — prices, email addresses, phone numbers, times, product codes — and reports every one that appears in more than one file.

A second copy of a value is a second value. It has not disagreed yet. The storefront this kit was built from advertised one price and charged another, because the number was typed into three files and only one of them was updated.

Pass source_of_truth to enforce the strict form: the value may appear in that one file, and anywhere else is a copy.

Preset patterns: price, email, phone, sku, time, percentage, dimension. Anything else is treated as a regular expression.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ignoreNoFolder or file names to skip. Defaults cover node_modules, .git, dist, build and friends.
patternsNoPreset names (price, email, phone, sku, time, percentage, dimension) or regular expressions. Default: price, email, phone
directoryYesFull path to the site folder, for example /Users/brian/Sites/chess-lessons.
min_filesNoHow many distinct files a value must appear in before it is reported. Default 2.
extensionsNoFile extensions to scan.
source_of_truthNoPath, relative to the site folder, of the one file allowed to hold these values. Every match elsewhere becomes a problem.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
fixNo
whyNo
toolYesWhich tool produced this.
statusYespass = checked and clean. fail = checked and found problems. skipped = nothing was measured. error = the tool could not run.
problemNo
headlineYesOne sentence verdict, safe to show a non-technical user.
patternsNo
directoryNo
inventoryNo
duplicatesNo
error_codeNoSet only when status is "error".
files_scannedNo
source_of_truthNo
copies_outside_sourceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.0.0

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already signal read-only, idempotent, and closed-world behavior. The description adds value beyond these by explaining a key nuance: a second copy is treated as a second value even if it has not yet disagreed with the original. It also discloses how patterns work (presets vs. regex) and that anything outside presets becomes a regular expression. This extra context about interpretation and pattern handling goes beyond what annotations 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 well-structured with a clear lead sentence, an illustrative rationale, and parameter guidance. It is slightly verbose, but each sentence contributes value—explaining the tool's purpose, the reasoning behind it, and the behavior of key parameters. It front-loads the core function before diving into nuances, 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?

For a complex tool with six parameters, the description covers the essential behavioral aspects: what it does, how it handles duplicates, how to restrict to a single source, default patterns, and the regex fallback. Since an output schema exists, the absence of return-format details is acceptable. 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.

Parameters4/5

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

Schema description coverage is 100%, so all parameters have basic descriptions. The description adds meaningful nuance: it enumerates the preset pattern names, explains that non-preset strings are regular expressions, and clarifies the intended use of source_of_truth (the one file allowed to hold values). This goes beyond the schema's terse descriptions, enriching the semantics for pattern-related and source_of_truth 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 clearly states the tool scans for values appearing in more than one file and reports them. The verb 'Scans' and 'reports' are specific, and the resource (values that are repeated across files) is well-defined. It even sets itself apart from sibling check tools (copy, honesty, assets) by focusing on duplication across files, making its purpose unambiguous.

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 implicit usage guidance: it explains when to enforce the strict form via source_of_truth, and gives a real-world example to illustrate the problem it solves. However, it does not explicitly name alternative tools or state when not to use it, so it lacks explicit exclusions. The context is clear enough for an agent to infer its primary use case, but not explicit about alternatives.

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