Skip to main content
Glama

zotero_find_duplicates

Find duplicate items in your Zotero library by title, DOI, or both. Returns groups of potential duplicates for review, allowing you to decide which item to keep before merging.

Instructions

Scan the active library (or a single collection) for duplicate items and return candidate groups for review. This tool only IDENTIFIES duplicates — it doesn't merge them. Call zotero_merge_duplicates to actually merge a group. method: 'both' (default) — match on title OR DOI; 'title' — normalized-title match only (lowercase, punctuation-stripped); 'doi' — exact DOI match only (safest for automation). Prefer 'doi' when the user intends to run merge_duplicates unattended. collection_key: optional 8-character key to restrict scanning to one collection; otherwise scans the whole active library. LIBRARY SIZE CAP: refuses to scan a library with > 5,000 items (the whole-library scan is O(n²) on titles) — on larger libraries you MUST pass collection_key to narrow the scope. limit: max groups to return (default 50). Returns a markdown block per group with keys, titles, DOIs, and dateAdded — use this to decide which item to KEEP before calling zotero_merge_duplicates(keeper_key=..., duplicate_keys=[...]). Read-only; works in local or web mode. Example: zotero_find_duplicates(method='doi', limit=20).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
methodNoboth
collection_keyNo
limitNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior5/5

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

No annotations provided, so description fully discloses behavior: read-only, works in local/web mode, O(n²) complexity, returns markdown blocks with keys/titles/DOIs/dateAdded, does not merge. Transparent about limitations and 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.

Conciseness4/5

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

Description is fairly dense but each sentence adds value. Front-loaded with main purpose. Could be slightly trimmed, but no wasted words. Example and details are justified.

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 output schema exists (context true), description explains return format (markdown per group) and how to use results. Covers complexity, usage, alternative tools, and limitations. Complete for 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 has 0% description coverage, but description explains all three parameters in detail: method with enum options explained, collection_key with purpose and default, limit with default. Also relates collection_key to library size cap.

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 clearly states it scans for duplicate items and returns candidate groups for review. It explicitly distinguishes from zotero_merge_duplicates by noting it only identifies duplicates, not merges. Provides specific verb 'scan' and resource 'active library or collection'.

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 each method (e.g., prefer 'doi' for unattended merge), when to use collection_key (for large libraries), and warns about library size cap. Gives example call. Provides clear guidance on when not to use without collection_key for large libraries.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/54yyyu/zotero-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server