Skip to main content
Glama
w1ne
by w1ne

import_from_camera

Detects a physically connected camera or memory card and copies all photos to a local directory, returning the destination path. Organizes files by camera folder and avoids overwriting existing files.

Instructions

Use when a camera or memory card is physically connected. Detects the camera via libgphoto2 and copies all photos to a local directory, then returns the destination path. Copying alone does not put the photos in the library: follow up with import_batch on that destination path to register them as a film roll. Files are written one subdirectory per camera folder or card, prefixed with the camera's identity (e.g. /Nikon_D850_sn_30014567_store_00010001_DCIM_100NCD80/DSC_0001.NEF), because camera filenames repeat across folders, across the two cards of a dual-slot body, and across bodies importing into the same destination. Import the destination recursively. A file that would collide with a different photo already on disk is kept alongside it as -2., never overwritten. This holds for two bodies of the same model that report no serial number and therefore share a subdirectory: before skipping files a destination appears to already hold, such a camera is asked for a small sample of them and the bytes are compared, so a second body's photos are kept rather than dropped. Re-running is cheap: a body with a serial number transfers nothing it already delivered. Any file the card lists that does not reach the destination is reported by name. Cost: this tool runs to completion synchronously and does not return early. A full card can take many minutes, up to the 1 hour default timeout, which is longer than most MCP clients wait for a single request. Progress is observable while it runs by tailing the .import.log file in the destination directory.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
camera_portNogphoto2 port string (e.g. 'usb:002,002'). Required when multiple cameras are connected.
destinationNoTarget directory for copied files. Default: ~/Pictures/import-YYYY-MM-DD/
timeout_secondsNoOverall time budget for the transfer from one camera, shared across all of its folders (not per folder). Default: 3600 (1 hour). On timeout, re-run the tool to resume — already-copied files are skipped.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it does so thoroughly: it explains libgphoto2 detection, non-overwriting collision behavior, filename/subdirectory conventions, serial-number edge cases, timeout/resume semantics, and observable progress via .import.log. These are genuine behavioral disclosures beyond what a schema could infer.

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 long but information-dense, with the primary use condition front-loaded and every sentence serving a distinct purpose. Slight structural awkwardness in the later edge-case sentences and an embedded user directive ('Import the destination recursively.') keep it from a perfect score.

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 tool with no output schema and meaningful side effects, the description is remarkably complete: it states the return value, the follow-up workflow, collision handling, timeout behavior, progress observability, and naming rationale. An agent has enough context to invoke it correctly and debug its behavior.

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 three parameters are already documented in the input schema. The description adds some operational context around destination subdirectories and timeout recovery, but it does not materially extend parameter meaning beyond what the schema already provides.

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 names a specific action ('copies all photos to a local directory'), identifies the physical-camera context, and explicitly separates this from the library-registration step performed by import_batch. The tool's scope is unambiguous and clearly distinguished from its siblings.

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?

It opens with the exact condition for use ('Use when a camera or memory card is physically connected') and explicitly instructs to follow up with import_batch on the returned destination path. This provides both when-to-use and when-not-to-stop guidance, with the alternative tool named directly.

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

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/w1ne/darktable-mcp'

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