Skip to main content
Glama

card_duplicates

Read-only

Detect duplicate notes and colliding prompts across Anki decks, optionally within a single deck, to identify redundant cards for cleanup.

Instructions

Detect duplicate notes and colliding prompts across decks in your collection.

Input Schema

NameRequiredDescriptionDefault
csvNoOutput as CSV (table and array responses) (default: false)
yesNoSkip confirmation prompts (explicit confirmation for scripts) (default: false)
deckNoFilter duplicate check to a specific deck
jsonNoOutput as JSON (default: false)
agentNoSet agent-friendly output defaults (--json --compact --no-input --no-color) (default: false)
plainNoOutput as plain tab-separated text (default: false)
quietNoBare output, one value per line (default: false)
selectNoComma-separated fields to include in output (e.g. --select id,notetype_id,deck_id)
compactNoReturn only key fields (id, name, status, timestamps) for minimal token usage (default: false)
dry-runNoShow request without sending (default: false)
max-ageNoMaximum acceptable age of local-store data before a stderr hint suggests sync; 0 disables (default: 30m0s)
receiptNoWrite an atomic private run receipt (default: false)
timeoutNoRequest timeout (default: 1m0s)
no-cacheNoBypass response cache (default: false)
no-colorNoDisable colored output (default: false)
no-inputNoDisable all interactive prompts (for CI/agents) (default: false)
no-learnNoDisable the teach/recall learning loop for this invocation (default: false)
idempotentNoTreat already-existing create results as a successful no-op (default: false)
rate-limitNoMax requests per second (0 to disable; default auto — pace to server rate-limit headers) (default: auto)
data-sourceNoData source for read commands: auto (live with local fallback), live (API only), local (synced data only) (default: auto)
client-profileNoSelect the tenant-gated client profile (env: ANKIWEB_CLIENT_PROFILE)
human-friendlyNoEnable colored output and rich formatting (default: false)
allow-partial-failureNoDowngrade response-body partial-failure (e.g. partialFailureError) to a warning instead of a non-zero exit (default: false)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered and the description adds nothing further. It does not say what a result looks like, how duplicates are grouped, or how the live/local data-source behavior affects detection, which matters for a 23-flag tool.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler; the resource and scope appear immediately. It is efficient, though so terse that it leaves the heavy lifting entirely to structured fields.

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

Completeness2/5

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

With 23 parameters, no output schema, and an undefined term ('colliding prompts'), the description should explain what is returned and what constitutes a duplicate. Nothing about output shape, grouping, or the live/local read path is disclosed, leaving the agent guessing at results.

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

Parameters3/5

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

Schema description coverage is 100%, so all 23 parameters are documented in the schema itself and the baseline of 3 applies. The description adds no parameter-level meaning, notably omitting the deck scoping filter that would be the most natural guidance to surface.

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

Purpose4/5

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

States a specific verb ('Detect') and resource ('duplicate notes and colliding prompts') with an explicit scope ('across decks in your collection'), which distinguishes it from sibling readers like card_search or card_get. It does not name any sibling explicitly, so it falls just short of full differentiation.

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

Usage Guidelines2/5

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

There is no statement of when to run this versus alternatives such as card_search, sql, or deck_triage, nor any preconditions (e.g. sync state, whether local data is required). The only usage signal is the implicit 'collection-wide unless scoped' framing.

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