Skip to main content
Glama
sweetrb

apple-photos-mcp

by sweetrb

find-duplicates

Locate exact duplicate photos in an Apple Photos library, grouped by identical image data with filenames and dates, to audit and clean up before migration or export.

Instructions

Use when: you want to find exact duplicates across the library — cleaning up after a double import, checking whether files were re-uploaded, or auditing before a migration/export. Returns: groupCount (total duplicate groups found), returned (groups in this response, capped at limit, default 100), and groups ordered newest-first — each with the member UUIDs plus per-member filename, date, size, dimensions, and movie flag. Use get-thumbnail on members to eyeball a group before acting on it. Do not use when: you're looking for near-duplicates or similar shots — Photos' fingerprint matches EXACT duplicates (identical image data) only; edited copies, resized versions, and burst siblings will NOT group. Safety: read-only. This server cannot delete photos — to act on duplicates, quarantine the extra copies into an album (create-album + add-to-album when writes are enabled, otherwise by hand in Photos.app) and review/delete inside Photos.app.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax duplicate groups to return (default 100; groupCount reports the total)
libraryNoPath to a .photoslibrary (default: system Photos library)

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
groupsNo
returnedNo
groupCountNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv2.1.13
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed1 schema field changedv2.1.9
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +true
  3. Addedv1.5.0

TDQS

A4.7/5.0
Behavior4/5

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

Annotations are not provided, so the description carries the full burden. It clearly states the tool is read-only and cannot delete photos, which is critical for an AI agent to avoid destructive actions. It also explains the default cap of 100 groups and the return ordering, but does not mention external rate limits or auth requirements. The read-only disclosure is a key extra beyond the 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?

The description is well-structured: it opens with a clear 'Use when' and 'Returns' section, then moves to 'Do not use when' and 'Safety'. Each section is purposeful and uses bullet-like formatting for readability. It front-loads the key use case and return info, and every sentence contributes to guiding the agent.

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 (two optional parameters, output schema provided) and the absence of annotations, the description is complete. It covers the tool's purpose, usage, safety, return format, and parameter defaults, and even suggests follow-up tools (get-thumbnail, create-album, add-to-album) for acting on results. 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 coverage is 100%, so the baseline is 3. The description adds value by explaining the default behavior of the limit (default 100, groupCount reports total) and that the library parameter is optional (defaults to system library). It also clarifies that groups are returned newest-first, 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 clearly states the tool finds exact duplicates across the library, with specific use cases like cleaning up after double imports and auditing before migration. It distinguishes from near-duplicate detection by noting that only exact matches are found, setting it apart 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?

Explicitly states when to use (finding exact duplicates) and when not to use (near-duplicates, similar shots), and explains the limitation of fingerprint matching. Also provides actionable alternative steps (quarantine into album) for handling duplicates, which guides the agent toward the correct workflow.

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