Skip to main content
Glama
ExpertVagabond

Photo Organizer MCP Server

Photo Organizer MCP Server

AI-powered organization for Google Photos and Google Drive.

This MCP server enables AI agents like Claude to automatically organize your Google Photos and Drive files. Perfect for decluttering cloud storage, finding duplicates, and maintaining organized photo albums.

Features

Google Photos

  • πŸ“Š Analyze Library: Get statistics and insights about your photo collection

  • πŸ” Find Duplicates: Identify potential duplicate photos

  • πŸ“… Auto-Organize: Create albums by year or month

  • πŸ“ˆ Reports: Generate detailed organization reports

Google Drive

  • πŸ“‚ Auto-Organize: Sort files into folders by type (Documents, Images, Videos, etc.)

  • πŸ—„οΈ Archive Old Files: Move old files to Archive folder

  • πŸ”„ Deduplicate: Find and remove exact duplicate files

  • πŸ“Š Analytics: Get file statistics and storage insights

Related MCP server: Google Docs & Gmail MCP Server

Installation

# Install from NPM
npm install -g photo-organizer-mcp

# Or clone and build
git clone https://github.com/ExpertVagabond/photo-organizer-mcp
cd photo-organizer-mcp
npm install
npm run build

Setup

1. Google Cloud Credentials

You need Google Cloud credentials to access Photos and Drive APIs:

  1. Go to Google Cloud Console

  2. Create a new project

  3. Enable Google Photos Library API and Google Drive API

  4. Create OAuth 2.0 credentials

  5. Download credentials.json

2. Python Scripts

This MCP server wraps existing Python organizer scripts. Set the path:

export PHOTO_SCRIPTS_PATH="/path/to/drive-photos-organizer"

Or add to .env:

PHOTO_SCRIPTS_PATH=/Users/yourname/drive-photos-organizer

3. Configure Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "photo-organizer": {
      "command": "photo-organizer-mcp",
      "env": {
        "PHOTO_SCRIPTS_PATH": "/path/to/drive-photos-organizer"
      }
    }
  }
}

Usage Examples

With Claude

"Analyze my Google Photos and find duplicates"

Claude will use the analyze_photos tool to scan your library

"Organize my photos into albums by year"

Claude will create year-based albums (dry run first, then execute)

"Clean up my Google Drive by organizing files into folders"

Claude will sort files by type into organized folders

"Archive all Drive files older than 2 years"

Claude will move old files to an Archive folder

"Find and remove duplicate files from my Drive"

Claude will identify and remove exact duplicates

Available Tools

Photo Tools

  1. analyze_photos - Get photo library statistics

    {
      "findDuplicates": true
    }
  2. organize_photos_by_date - Create date-based albums

    {
      "grouping": "year",  // or "month"
      "execute": false     // true to actually create albums
    }

Drive Tools

  1. analyze_drive - Get Drive statistics

  2. organize_drive - Sort files into folders

    {
      "execute": false  // true to actually organize
    }
  3. archive_old_files - Move old files to Archive

    {
      "days": 730,      // Archive files older than this
      "execute": false
    }
  4. deduplicate_drive - Remove duplicate files

    {
      "execute": false  // true to actually delete
    }

Safety Features

  • Dry Run by Default: All operations default to dry run mode

  • Explicit Execution: Must set execute: true to make changes

  • Detailed Reports: See exactly what will happen before executing

  • Non-Destructive: Organizes and archives, doesn't delete (except deduplication)

Monetization (Pro Version)

Upgrade for advanced features:

Free Tier

  • 50 operations per month

  • Basic organization

  • Manual execution required

Pro ($10/month)

  • Unlimited operations

  • Scheduled auto-organization

  • Advanced duplicate detection

  • Priority support

Enterprise ($50/month)

  • White-label branding

  • Team management

  • Custom rules engine

  • API access

Technical Details

  • Built with TypeScript and Model Context Protocol SDK

  • Wraps Python scripts for Google API integration

  • Async operation with progress reporting

  • Handles large libraries (10,000+ photos)

Contributing

Contributions welcome! Please open issues or PRs on GitHub.

License

MIT License - see LICENSE file

Author

ExpertVagabond - https://github.com/ExpertVagabond


Need help? Contact: hello@expertvagabond.com

Available Tools

6 tools
analyze_driveA

Analyze Google Drive - get file statistics, find duplicates, and generate a report

ParametersJSON Schema
NameRequiredDescriptionDefault
findDuplicatesNoFind duplicate files

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. While the actions are described (analyze, find duplicates, generate report), it does not explicitly state whether the tool is read-only, requires permissions, or has any side effects. This lack of safety disclosure is a gap.

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?

Single sentence, front-loaded with the core purpose, no redundant words. Efficiently lists key capabilities.

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

Completeness4/5

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

Given the tool's simplicity (one optional boolean parameter) and no output schema, the description adequately covers the main behavior. However, it doesn't describe the report format or explicitly confirm read-only behavior, which is minor given the analysis nature.

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?

The input schema already provides 100% coverage with a description for the single parameter findDuplicates. The tool description adds no additional semantic detail beyond what the schema provides, so the baseline of 3 is appropriate.

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?

Clearly states the tool analyzes Google Drive, enumerating specific outputs (file statistics, duplicate detection, report generation). Distinguishes from sibling tools like analyze_photos and deduplicate_drive by focusing on analysis rather than photo-specific or deduplication actions.

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 clear context for when to use this tool (when you need Drive statistics or duplicate finding or a report). However, it doesn't explicitly name alternatives or state when not to use it, leaving some ambiguity versus deduplicate_drive which may actually remove duplicates.

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

analyze_photosA

Analyze Google Photos library - get statistics, find duplicates, and generate a report

ParametersJSON Schema
NameRequiredDescriptionDefault
findDuplicatesNoFind potential duplicate photos

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only operation through 'analyze' and 'report', but does not explicitly state that it does not modify the library or mention permissions. The phrase 'find duplicates' could be ambiguous with removal, though deduplicate_drive exists as a sibling.

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 a single, well-structured sentence that front-loads the primary action ('Analyze Google Photos library') and lists the key deliverables without any fluff or redundancy.

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

Completeness4/5

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

For a tool with one optional parameter and no output schema, the description covers the core purpose and outcome ('generate a report') reasonably well. It could be more specific about what statistics or report format to expect, but it is adequate for the tool's simplicity.

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?

The schema covers the single parameter with 100% coverage, and the description's 'find duplicates' aligns with the parameter findDuplicates. However, the description adds limited new meaning beyond the schema's own description, matching the baseline for high schema coverage.

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's function with a specific verb 'Analyze' and resource 'Google Photos library', and lists concrete outputs (statistics, duplicates, report). It distinguishes from sibling tools like analyze_drive and organize_photos_by_date by naming the specific domain and analysis focus.

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 explicit guidance on when to use this tool versus alternatives. The description merely states what it does rather than providing context for selection, such as when to choose analyze_photos over analyze_drive or organize_photos_by_date.

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

archive_old_filesB

Move old Drive files (older than specified days) to an Archive folder

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoArchive files older than this many days
executeNoActually archive files (false = dry run)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only mentions moving, but fails to disclose the dry-run default (execute=false), whether an Archive folder is created/selected, permission requirements, or the irreversibility of moving files. This is a significant gap for a mutation tool.

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 a single, front-loaded sentence with no filler. Every phrase ('Move old Drive files', 'older than specified days', 'Archive folder') contributes to understanding.

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 no annotations and no output schema, the description is too thin for a tool that moves (changes) files. It omits the dry-run capability, how the Archive folder is handled, and any potential side effects. The schema covers parameters but not operational context.

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 coverage is 100% with both 'days' and 'execute' clearly described in the schema. The description adds only the 'Archive folder' destination, which is not parameter-specific. Baseline of 3 is appropriate since the schema already does the heavy lifting.

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 uses a specific verb ('Move') with a clear resource ('Drive files'), a condition ('older than specified days'), and a destination ('Archive folder'). It clearly distinguishes from sibling tools like analyze_photos or deduplicate_drive by focusing on archiving action.

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

Usage Guidelines3/5

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

The description implies usage for archiving old files, but does not explicitly state when to prefer it over alternatives like organize_drive or deduplicate_drive. No exclusions or prerequisites are provided.

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

deduplicate_driveB

Remove exact duplicate files from Google Drive

ParametersJSON Schema
NameRequiredDescriptionDefault
executeNoActually delete duplicates (false = dry run)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries full burden but fails to disclose that the tool is a dry run by default and only deletes when execute=true. The word 'Remove' suggests immediate deletion without this crucial caveat.

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 a single, front-loaded sentence that directly states the tool's purpose with no wasted words. Its brevity is a structural strength, even if content is incomplete.

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?

Despite the simple schema, the description omits the critical safety context of the execute parameter (dry run vs actual deletion). This missing information is essential for safe tool usage, making the description incomplete.

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 the parameter 'execute' is already well-documented. The description itself adds no parameter semantics beyond what the schema provides, warranting the baseline score.

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 uses a specific verb 'Remove' with a clear resource 'exact duplicate files from Google Drive', which clearly states the tool's function and distinguishes it from sibling tools like analyze_drive or organize_drive.

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?

No guidance is provided on when to use this tool or how it relates to alternatives. It does not mention the dry-run default or recommend a safe workflow (e.g., using execute=false first).

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

organize_driveA

Organize Google Drive files into folders by type (Documents, Images, Videos, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
executeNoActually organize files (false = dry run)

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must carry full behavioral disclosure. It describes the general organizing action but fails to mention that the default execute=false makes it a dry run, and it omits side effects like moving files or creating folders. This is critical for a mutating tool, leaving the agent without safety information.

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 a single concise sentence that front-loads the action and resource, with zero extraneous detail. Every word earns its place.

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

Completeness4/5

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

For a tool with one optional parameter and no output schema, the description is mostly complete: it explains the organizing action and the categories. The crucial dry-run default is not mentioned in the description but is fully covered by the schema, so the overall tool definition is sufficient.

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?

The schema provides a complete description for the 'execute' parameter, including the dry-run behavior (100% coverage). The tool description adds no additional parameter semantics, so the baseline of 3 is appropriate.

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 action (organize), the resource (Google Drive files), and the method (by type) with examples (Documents, Images, Videos). It distinguishes from sibling tools such as organize_photos_by_date, which focuses on photos by date.

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

Usage Guidelines3/5

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

The description implies the tool is for organizing Drive files by type, but it does not explicitly state when to use it over sibling tools or mention any exclusions/alternatives. There is no direct comparison to organize_photos_by_date or archive_old_files, leaving usage context implicit.

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

organize_photos_by_dateB

Organize Google Photos into albums by date (year or month)

ParametersJSON Schema
NameRequiredDescriptionDefault
executeNoActually create albums (false = dry run)
groupingYesGroup photos by year or monthyear

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description is the only source of behavioral information. It fails to disclose that the tool has a dry-run default (execute=false in schema) or any side effects like creating or moving albums. The description states 'Organize' which could mislead an agent into thinking it always performs the action, without indicating the dual dry-run/execute behavior.

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 a single, front-loaded sentence that efficiently communicates the core purpose. Every word earns its place, with no redundant information.

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?

Given no output schema and no annotations, the description is too sparse for a tool with a dry-run option. It omits key behavioral context like whether albums are created, what the return value is, and how the execute parameter affects operation. This would leave an agent uncertain about the tool's functionality beyond the basic action.

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 coverage is 100% with descriptions for both parameters. The description adds minimal value beyond the schema by mentioning 'year or month', which already appears as enum values in the grouping parameter. It does not explain the execute parameter or how the parameters interact, so no substantial new meaning is added.

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 uses a specific verb 'Organize' with resource 'Google Photos' and scope 'into albums by date (year or month)'. It clearly distinguishes from siblings like analyze_photos or organize_drive by focusing on photo album creation by date.

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

Usage Guidelines3/5

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

The description implies usage for organizing photos by date, but provides no explicit guidance on when to use this tool versus alternatives like analyze_photos or organize_drive. It also does not mention prerequisites or exclusions, leaving usage context vague beyond the basic purpose.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv1.0.0
    • First observedanalyze_drive
    • First observedanalyze_photos
    • First observedarchive_old_files
    • First observeddeduplicate_drive
    • First observedorganize_drive
    • First observedorganize_photos_by_date

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct resource and action: analyze vs organize, photos vs drive, and specific operations like archiving and deduplication. No two tools have overlapping purposes, so an agent can easily select the right one.

Naming Consistency4/5

Tool names mostly follow a verb_noun pattern (analyze_photos, organize_drive), but there is variation such as organize_photos_by_date including a modifier and archive_old_files/deduplicate_drive using different verb forms. The style is readable and consistent enough, though not perfectly uniform.

Tool Count5/5

Six tools is well-scoped for a photo and drive organizer, covering analysis, organization, archiving, and deduplication without being excessive or too thin.

Completeness4/5

The server covers core workflows for analyzing and organizing both Photos and Drive, plus archiving and deduplicating Drive files. A notable gap is the lack of a deduplicate_photos toolβ€”analyze_photos finds duplicates but does not offer removal, so photo deduplication is incomplete.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to automate Google Drive tasks such as provisioning workspaces, reusing templates, inspecting folder structures, updating reports, and sharing files through user-controlled OAuth.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI apps to work with Google Drive in plain language, including searching, organizing, uploading, downloading, exporting, sharing, and commenting on files, with reversible trash and configurable access scopes.
    15
    0
    MIT