Skip to main content
Glama

Immich MCP Server

An MCP server for your Immich photo library with bidirectional image handling: pull photos into LLM context, push metadata and descriptions back, and manage faces and people.

Requirements

  • Node.js 20+

  • A running Immich instance

Related MCP server: CoreViz MCP

Install

git clone https://github.com/mattmaas/immich-mcp.git
cd immich-mcp
npm install
npm run build     # compiles TypeScript to dist/
npm start         # node dist/server.js

Environment Variables

Variable

Required

Description

IMMICH_URL

yes

Base URL of your Immich server, e.g. http://localhost:2283

IMMICH_API_KEY

yes

API key from Immich settings

MCP Client Configuration

Add this server to your MCP client's config:

{
  "mcpServers": {
    "immich": {
      "command": "node",
      "args": ["<path>/immich-mcp/dist/server.js"],
      "env": {
        "IMMICH_URL": "http://localhost:2283",
        "IMMICH_API_KEY": "your-api-key"
      }
    }
  }
}

Tools

Tool

Description

immich_search_smart

Smart (semantic) photo search

immich_search_metadata

Search by metadata

immich_search_people

Search by person

immich_get_asset

Get an asset by ID

immich_get_asset_info

Get asset metadata

immich_upload_asset

Upload a new asset

immich_update_asset

Update asset metadata

immich_delete_assets

Delete assets

immich_list_albums

List albums

immich_create_album

Create an album

immich_add_to_album

Add assets to an album

immich_get_album

Get an album's contents

immich_list_people

List detected people

immich_rename_person

Rename a person

immich_merge_people

Merge two people

immich_get_statistics

Library statistics

immich_run_job

Run a maintenance job

immich_describe_photo

Generate a description for a photo

immich_bulk_update

Bulk-update assets

immich_server_info

Server configuration info

immich_random_assets

Fetch random assets

immich_get_asset_by_date

Find assets by date

Usage

Ask your agent, for example:

  • "Find photos of my dog" → immich_search_smart(query="dog")

  • "Describe this photo" → immich_describe_photo(...)

  • "Add these photos to the 'Trip' album" → immich_add_to_album(...)

License

MIT

Available Tools

22 tools
immich_add_to_albumC

Add assets to an existing album.

ParametersJSON Schema
NameRequiredDescriptionDefault
albumIdYesAlbum ID
assetIdsYesAsset IDs to add

TDQS

C2.9/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 behavioral burden. It does not disclose whether the operation is idempotent, what happens to duplicate assets, whether the caller needs ownership of the album, or any portion of the response, which matters 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.

Conciseness4/5

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

A single short sentence with the action and target front-loaded and zero filler. It is efficient, though perhaps too terse to carry the disclosure a mutation tool needs.

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

Completeness3/5

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

For a simple two-parameter tool with full schema coverage and no output schema, the description is minimally sufficient. It falls short on mutation semantics (duplicates, permissions, result) that annotations would normally supply but do not here.

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% and both parameters (albumId, assetIds) are documented in the schema, so the baseline is 3. The description adds no syntax, format, or constraint detail beyond what the schema already states.

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 ('Add') and resource ('assets to an existing album'), so the operation is unambiguous. It implies a distinction from create_album/list_albums but never names a sibling or clarifies the boundary explicitly.

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?

The phrase 'existing album' hints that the album must already exist, which is a small piece of guidance. However there is no when-to-use vs. alternatives guidance, no note on required permissions, and no mention of what to do with assets already in the album.

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

immich_bulk_updateB

Bulk update descriptions/metadata for multiple assets. Feed LLM-generated descriptions back into Immich. Pass an array of {id, description, isFavorite, rating}.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesArray of updates to apply

TDQS

B3.2/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 says 'update' but never discloses whether fields are partial/patch semantics, what happens to omitted fields, whether it requires auth, how per-item failures in the array are handled, or whether operations are atomic. For a bulk mutation tool this is a significant gap.

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?

Three short sentences, front-loaded with the core action and tightly scoped. Only the second sentence's motivational framing is slightly expendable, so it stops short of ideal economy.

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

Completeness3/5

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

Parameters are fully documented by the schema and there is no output schema to explain. However, for a bulk mutation with no annotations, the description omits partial-update semantics and error behavior, leaving the agent without guidance on a non-trivial write operation.

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 baseline is 3. The description lists the item fields ({id, description, isFavorite, rating}), which mirrors the schema but adds no syntax, defaults, or constraints beyond what the schema already documents.

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 (bulk update) and resource (descriptions/metadata for multiple assets), and the 'bulk'/'multiple assets' framing implicitly distinguishes it from the single-asset sibling immich_update_asset. Clear but not explicitly differentiated from that sibling.

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?

Provides one intended workflow ('feed LLM-generated descriptions back into Immich'), which implies the use case, but gives no explicit when-to-use vs. when-not, no mention of using immich_update_asset for single assets, and no prerequisites.

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

immich_create_albumC

Create a new album, optionally adding assets to it.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdsNoAsset IDs to add
albumNameYesAlbum name
descriptionNoAlbum description

TDQS

C2.9/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. It doesn't disclose whether the operation requires authentication, what happens if albumName already exists, whether asset additions are transactional, or any other behavioral trait. Only the name and asset-inclusion behavior are conveyed.

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?

Single sentence, front-loaded with the main action and the optional modifier. Efficient and scannable, though perhaps too terse for a mutation tool.

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?

For a mutation tool with no annotations and no output schema, the description is insufficient. It should clarify write semantics, auth requirements, and behavior on duplicate names. The absence of annotations means the description must do more, and it doesn't.

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%, so the schema already documents all three parameters with descriptions. The description adds no parameter-level detail beyond what's in the schema. Baseline 3 applies.

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 ('Create') and resource ('album'), and mentions the optional asset inclusion. It doesn't differentiate from siblings like immich_add_to_album or immich_list_albums, but the core purpose is clear.

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 on when to use this versus immich_add_to_album (which adds assets to existing albums) or other album tools. The 'optionally adding assets' hint is the only contextual signal, and it's implicit rather than actionable.

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

immich_delete_assetsB

Delete assets by IDs. Moves to trash by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYesArray of asset IDs to delete
forceNoPermanently delete (skip trash)

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden, and it does disclose the most important trait: deletion is recoverable by default (moves to trash) and irreversible only with force. However, it omits permission/auth requirements, retention of trashed items, and what the call returns, so meaningful gaps remain.

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?

Two short sentences, zero filler, and the core action is front-loaded before the default-behavior qualifier. Every sentence earns its place.

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

Completeness3/5

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

For a destructive 2-parameter tool with no annotations and no output schema, the description covers the critical trash-vs-permanent distinction but leaves auth/permission needs and post-call behavior unstated. Adequate but with clear gaps for an irreversible-capable operation.

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%, so both the ids array and the force flag are already documented in the schema, including force meaning 'skip trash'. The description adds no syntax, formatting, or batching-limit detail beyond what the schema provides; baseline 3 applies.

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 and resource ('Delete assets') plus the batch mechanism ('by IDs'), and the second sentence scopes the default behavior. It is clear on its own, though with no sibling delete tool it does not need to differentiate itself from an alternative.

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 when-to-use guidance, no prerequisites, and no pointer to an alternative path even though immich_bulk_update exists and could plausibly overlap. The default-vs-force distinction is stated as behavior rather than as guidance for choosing it.

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

immich_describe_photoA

Fetch a photo so the LLM can see it, along with all metadata. Perfect for generating descriptions, analyzing content, or identifying what's in a photo.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID

TDQS

A3.5/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 behavioral burden. It usefully discloses that the return payload includes both the image content and all metadata, but says nothing about permissions, whether the fetch is read-only vs. destructive, rate limits, or error behavior on an invalid ID.

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?

Two tight sentences with the core action front-loaded. The second sentence leans slightly promotional ('Perfect for...') but still conveys actionable use cases rather than padding.

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 single-parameter read tool with no output schema, the description compensates by stating what comes back (image plus all metadata), which is the key missing structured information. It is nearly complete, with only sibling disambiguation left unaddressed.

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% for the single 'id' parameter, so the schema already documents it fully. The description adds no format, source, or acquisition guidance for the asset ID beyond what the schema provides, making 3 the correct baseline.

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 and resource (fetch a photo) and adds the distinguishing detail that the image itself is returned for LLM vision, plus its metadata. It does not, however, differentiate itself from close siblings like immich_get_asset or immich_get_asset_info, which an agent could plausibly confuse it with.

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 clause 'Perfect for generating descriptions, analyzing content, or identifying what's in a photo' implies usage contexts, but there is no explicit when-to-use versus immich_get_asset, immich_get_asset_info, or the search_* tools. Usage is suggested rather than routed.

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

immich_get_albumB

Get album details including all assets. Use withImages=true to see thumbnails of album contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAlbum ID
withImagesNoInclude thumbnail images of first 10 assets

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden and does disclose that the response includes all assets and that withImages adds thumbnails. However it omits permissions/auth, whether large albums are truncated or paginated, and the read-only nature is only implied by 'Get'.

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?

Two short sentences with the core purpose front-loaded and the optional flag second. No filler, though it is terse enough to leave gaps rather than wasteful.

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

Completeness3/5

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

For a simple two-parameter read tool with no output schema and no annotations, the description is adequate but thin: it never characterizes the returned album object or asset list, which the missing output schema leaves undocumented.

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 baseline is 3. The description restates withImages as showing 'thumbnails of album contents', which is slightly less precise than the schema's 'first 10 assets', so it adds little beyond the schema.

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 and resource ('Get album details') and adds scope ('including all assets'), so an agent can distinguish it from immich_list_albums or immich_get_asset. It does not name a sibling explicitly, so it stops short of a 5.

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?

It offers a conditional hint ('Use withImages=true to see thumbnails'), which is parameter guidance rather than when-to-use routing. There is no statement of when to prefer this over immich_list_albums or immich_get_asset, so usage is only implied.

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

immich_get_assetA

Fetch a photo/video and return it as an image the LLM can see. Use this to visually inspect a photo.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID
sizeNoImage size (default: preview)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does disclose the key behavioral trait that the result is an image the model can see (rather than a metadata record), which is genuinely useful. It says nothing about permissions, error behavior, or whether the returned image is a downscaled preview versus the original.

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?

Two sentences, front-loaded with the core action and its distinguishing return behavior, zero filler. Nothing could be removed without losing signal.

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?

There is no output schema, and the description correctly explains what comes back (a viewable image), which is the most important thing an agent needs. With only two fully documented parameters and no annotations to compensate for, the main missing piece is any note on limits such as permissions or large-asset handling.

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% and both parameters (id, size enum) are documented there, including the default. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.

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+resource ("Fetch a photo/video") and, critically, specifies the return modality ("return it as an image the LLM can see"), which distinguishes it from metadata-returning siblings like immich_get_asset_info and immich_get_asset_by_date. It stops short of naming any sibling explicitly, so an agent must infer the split from the wording alone.

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?

"Use this to visually inspect a photo" gives a clear positive trigger, but there is no guidance on when NOT to use it or which sibling to prefer when metadata rather than pixels is wanted. Usage is implied rather than bounded.

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

immich_get_asset_by_dateC

Get photos from a specific date or date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate (YYYY-MM-DD)
sizeNoNumber of results (default 20)
withImagesNoInclude thumbnail images

TDQS

C2.9/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 does not disclose pagination behavior, result ordering, an upper bound on returned assets, or what the default size of 20 implies for a whole-day query — all things an agent needs before calling a date-based listing 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 no padding, correctly leading with the verb and resource. It is arguably too terse given the tool's optional parameters, but nothing is wasted.

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, no output schema, and three parameters, the description should cover what comes back and how many items, yet it says nothing about return values or the 20-item default. Only the purpose is communicated, leaving behavioral gaps unaddressed.

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 'date', 'size', and 'withImages' are already documented in the schema; the baseline of 3 applies. The description's 'date range' phrasing adds a nuance the schema does not support (a single YYYY-MM-DD value), which is mildly counterproductive rather than informative.

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 and resource ('Get photos') and scopes it to a date, which distinguishes it from the immich_search_* siblings that filter by content or metadata. However, it says 'or date range' while the schema exposes only a single 'date' string, so the scope claim is slightly wider than what the tool actually accepts.

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 indication of when to prefer this over immich_search_smart, immich_search_metadata, or immich_get_asset, all of which are plausible alternatives for retrieving photos. The agent must infer the selection criteria from the name alone.

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

immich_get_asset_infoA

Get full metadata/EXIF info for an asset as JSON. Does not include the image itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID

TDQS

A3.6/5.0
Behavior3/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 adds useful behavioral context by stating the response medium ('as JSON') and that the image payload is excluded, but it says nothing about auth/permission requirements, error behavior for a bad id, or whether the read has 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.

Conciseness5/5

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

Two short, front-loaded sentences with zero filler; the primary purpose leads and the exclusion follows.

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 one-parameter read tool with no output schema, the description adequately signals the JSON/EXIF return shape and excludes the image payload. Minor gaps remain around failure modes and permissions, but nothing critical to invoking it correctly is missing.

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% and there is a single 'id' parameter, so the schema already carries the semantics. The description adds no format or constraint detail beyond it, which is the baseline 3 case.

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 (Get) and resource (asset metadata/EXIF), and the second sentence carves out what it does not return, which implicitly separates it from immich_get_asset (the image itself). It stops short of naming the distinguishing sibling, so an agent must infer the boundary.

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?

Usage is only implied: 'Does not include the image itself' hints that image retrieval belongs to another tool, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g. immich_get_asset vs immich_search_metadata).

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

immich_get_statisticsA

Get library statistics: photo count, video count, total size, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It discloses the return contents (photo count, video count, total size) but does not state that it is read-only, describe permissions, or clarify scope such as whether trashed or shared items are included.

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?

A single, front-loaded sentence with no wasted words. It immediately states the tool's purpose and highlights key return values.

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 zero-parameter, read-only statistics tool with no output schema, the description tells the agent what to expect. The 'etc.' leaves some return fields unspecified, but no input or output schema complexity requires more.

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?

The tool has zero parameters, so the baseline is 4. There are no parameters for the description to clarify, and the empty schema is fully documented by the absence of inputs.

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 clear verb (Get) and resource (library statistics) plus example return fields. It is specific about what it does, though it does not explicitly differentiate itself from sibling tools like immich_server_info.

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 given about when to use this tool versus alternatives such as immich_server_info or search tools. Usage is implied by the purpose but not stated.

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

immich_list_albumsB

List all albums with asset counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
sharedNoFilter shared albums only

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'List' implies a non-destructive read, but it says nothing about defaults (are shared/private albums both returned?), authentication requirements, pagination, or result ordering. It also does not disclose whether the asset counts are exact or approximate.

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?

A single six-word sentence that front-loads the action and resource with zero filler. Nothing is redundant or buried.

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

Completeness3/5

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

For a simple, one-optional-parameter read tool with no output schema and full schema coverage, the description is minimally sufficient. It nonetheless omits the meaning of the default listing scope and pagination behavior, which an agent would need to call it confidently.

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 single 'shared' boolean is already fully documented in the schema ('Filter shared albums only'). The description adds nothing about it, which is acceptable given the schema does the work, but there is no clarification of the default behavior when the flag is omitted.

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 and resource ('List all albums') and adds the scope detail that asset counts are included. It distinguishes itself implicitly from singletons like immich_get_album and writers like immich_create_album via the plural 'list' naming, but does not explicitly name a sibling or clarify what it is not.

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 when-to-use guidance, no prerequisites, and no pointer to alternatives such as immich_get_album for a single album or immich_search_smart for filtered discovery. The one available filter ('shared') is never mentioned in the description, so an agent gets no routing help.

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

immich_list_peopleC

List all recognized people with face counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
withHiddenNoInclude hidden people

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden for what is presumably a read-only listing. It says nothing about safety profile, whether hidden people are excluded by default, ordering, or pagination/result-size behavior, which matters for a list endpoint.

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?

One tight, front-loaded sentence with no filler. It is arguably under-specified rather than verbose, but as raw conciseness it is efficient.

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

Completeness3/5

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

For a simple one-parameter list tool with no output schema and no annotations, the description covers the essential outcome (people plus face counts). It falls short on routing versus immich_search_people and on default hidden-person behavior and result limits.

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 a single self-documenting boolean ('WithHidden: Include hidden people'), so the schema does the work. The description adds no extra meaning about hidden-people semantics beyond what the schema already states, which is the baseline 3 for fully covered schemas.

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 and resource ('List all recognized people') and adds the return detail 'with face counts', so the agent knows exactly what it returns. It does not, however, distinguish itself from the sibling immich_search_people, leaving ambiguity about which to pick.

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 when-to-use guidance, no prerequisites, and no mention of the near-identical sibling immich_search_people. The agent must infer the difference between listing and searching from the names alone.

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

immich_merge_peopleC

Merge duplicate face clusters into one person.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary person ID (keep this one)
mergeIdsYesPerson IDs to merge into the primary

TDQS

C2.9/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 behavioral burden, and it does not state that the merge is destructive or irreversible, what happens to the absorbed person records, whether faces/assets are reassigned, or what permission level is required. For a mutating consolidation operation this is a significant disclosure 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?

A single clause, front-loaded with the verb and resource, with no filler, hedging, or restatement of the tool name. Nothing can be trimmed without losing the described action.

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?

For a destructive two-parameter merge with no annotations and no output schema, the description should at minimum signal irreversibility and the outcome for the merged clusters. As written, an agent knows what the tool does but not the consequences of calling it.

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%: 'id' is documented as the primary person to keep and 'mergeIds' as the IDs merged into it. The description adds only the framing that these are face clusters being deduplicated, so beyond name/identity semantics it contributes little that the schema does not already convey.

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?

The description supplies a specific verb ('Merge') and a specific resource ('duplicate face clusters into one person'), which is enough for an agent to distinguish it from read-oriented siblings like immich_list_people or immich_search_people. It stops short of naming the closest conceptual neighbour (immich_rename_person), so it is clear but not maximally differentiated.

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 guidance on when to use this tool, when not to, or what alternative handles a similar need. The word 'duplicate' hints at a use case, but no prerequisites (e.g. confirming the clusters really are the same person) or exclusions are stated.

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

immich_random_assetsB

Get random photos from the library. Great for exploring or sampling. Use withImages=true to see them.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of random assets (default 5, max 20)
withImagesNoInclude thumbnail images

TDQS

B3.1/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 behavioral burden, yet it discloses nothing about read-only status, permissions, ordering/non-determinism, or pagination. Only the implicit 'Get' verb hints at a safe read operation.

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?

Three short sentences, front-loaded with the core action and no padding. The trailing withImages sentence is slightly awkward but earns its place as a practical hint.

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, no output schema, and a tool whose return shape matters (are these full assets or just metadata/thumbnails?), the description leaves the agent guessing about what it actually receives. It should clarify the return payload and the effect of withImages=false.

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 both parameters are already documented with defaults and max values. The description restates 'withImages=true to see them', which adds intent (images must be requested to be visible) but no detail beyond the schema. Baseline 3 applies.

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?

The description states a specific verb and resource ('Get random photos from the library'), which clearly separates it from the search_* siblings that filter rather than sample. It stops short of explicitly naming those siblings as alternatives, but the purpose is unambiguous.

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?

'Great for exploring or sampling' implies a usage context but never states when to prefer this over immich_search_smart or immich_get_asset, nor any exclusion. The guidance is suggestive rather than directive.

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

immich_rename_personC

Name or rename a recognized person.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPerson ID
nameYesPerson's name
birthDateNoBirth date (YYYY-MM-DD)

TDQS

C2.9/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 behavioral burden. It confirms a mutation ('rename') but does not disclose permissions, side effects, reversibility, or how the rename affects recognized faces or existing metadata, leaving significant gaps.

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 wasted words. It is appropriately sized for a simple operation and gets directly to the action and target.

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?

For a mutation tool with no annotations and no output schema, the description is too minimal to be complete. It omits usage guidance, behavioral context such as permissions or side effects, and any distinction from related people-management tools, leaving the agent to infer too much.

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 schema already documents id, name, and birthDate clearly. The description mentions naming/renaming, which loosely maps to the name parameter, but adds no syntax or format details beyond what the schema provides, making 3 the appropriate baseline.

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?

The description states a specific verb pair (Name or rename) and resource (a recognized person), making the purpose clear. It does not explicitly differentiate from siblings like immich_merge_people or immich_list_people, so it falls short of the sibling-differentiation needed for a 5.

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 guidance about when to use this tool versus alternatives such as immich_merge_people or immich_list_people, nor any prerequisites or exclusions. The description only implies usage from the tool name and short phrase.

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

immich_run_jobC

Trigger a server job: face detection, facial recognition, smart search (CLIP), sidecar metadata, thumbnail generation, video conversion, or storage migration.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce re-run even if already processed
jobNameYesJob to run

TDQS

C2.9/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 of behavioral disclosure. 'Trigger a server job' implies a long-running or asynchronous operation, but the description doesn't mention whether it blocks, returns a job ID, or requires polling. It also doesn't disclose side effects, resource consumption, or potential impacts on the server (e.g., high CPU). This is a significant gap for a mutation-like operation.

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 a single sentence that efficiently lists the job types. It's front-loaded with the core action and resource, though the list is somewhat lengthy. No wasted words, but could be structured better with a note about the force parameter.

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 the complexity of server jobs (which likely have side effects, may be asynchronous, and could impact performance), the description is incomplete. It lacks any information about execution behavior, return values, or error handling. With no output schema and no annotations, the description should do more to inform the agent about what to expect.

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%, and the description enumerates the possible jobName values mapping to the enum. However, it doesn't explain the 'force' parameter's behavior beyond what the schema already states ('Force re-run even if already processed'). The description adds no additional meaning beyond the schema.

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?

The description states a clear verb 'Trigger' applied to a concrete resource 'server job', and it enumerates the possible job types (face detection, smart search, thumbnail generation, etc.). It's specific enough that an agent can understand what invoking it does, though it doesn't explicitly distinguish it from sibling tools like immich_server_info.

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?

The description lacks any explicit guidance on when to use this tool versus alternatives. It doesn't state that this is a server-level job trigger, nor does it explain the conditions under which one should run specific jobs (e.g., after uploading assets). No when-not-to-use or alternatives are mentioned.

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

immich_search_metadataC

Search photos by metadata: date range, location, camera, file type, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoFilter by city
makeNoCamera make (e.g., Samsung, Apple)
sizeNoNumber of results (default 20)
typeNoAsset type
modelNoCamera model
stateNoFilter by state
countryNoFilter by country
isFavoriteNoFilter favorites only
takenAfterNoPhotos taken after (ISO date)
withImagesNoInclude thumbnail images in response
takenBeforeNoPhotos taken before (ISO date)
originalFileNameNoSearch by filename

TDQS

C2.9/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 behavioral burden. It does not state that the operation is read-only, does not mention pagination or result ordering, and does not disclose the default result limit (only the schema notes default 20). For a search tool with zero annotation coverage, this is a significant gap.

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 a single front-loaded sentence that immediately communicates the tool's function. It is very efficient, though the trailing 'etc.' introduces mild vagueness about which metadata filters are actually supported. Nothing is wasted structurally.

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 12 optional parameters, no annotations, and no output schema, the description is too thin. It omits default behavior when no filters are supplied, pagination details, return format, sort order, and how to choose this tool over immich_search_smart or immich_search_people. More context is needed for an agent to invoke it confidently.

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 every parameter is fully documented in the schema, establishing a baseline of 3. The description adds a small amount of organizing context by listing categories (date range, location, camera, file type) that map to the parameters, but it provides no additional syntax, format, or default-behavior details beyond what the schema already states.

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?

The description states a specific verb ('Search'), resource ('photos'), and qualification ('by metadata') with example filter categories. It does not explicitly name its search siblings (immich_search_smart, immich_search_people), but the 'metadata' qualifier implicitly distinguishes it from semantic or people-based search. An agent can tell what it does, though not perfectly apart from siblings.

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 when-to-use or when-not-to-use guidance is given, and no alternative tools are mentioned. With three search siblings in the namespace, routing guidance is important and entirely absent; usage is only implied by the name and description. This leaves the agent to infer when metadata search is appropriate.

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

immich_search_peopleB

Search for recognized people by name. Returns person entries with face thumbnails.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPerson name to search for
withHiddenNoInclude hidden people (default false)

TDQS

B3.3/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 behavioral burden. It discloses the return shape ('person entries with face thumbnails'), but says nothing about match semantics (exact vs fuzzy/prefix), result limits or pagination, hidden-people behavior (only covered in the schema), or any permission requirements.

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?

Two short sentences with zero filler; the purpose is front-loaded and the return summary follows. Nothing is redundant.

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

Completeness3/5

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

For a two-parameter read-only search with no output schema and no annotations, the description covers purpose and a rough return shape but omits matching semantics, result limits, and result ordering. Adequate but with clear gaps an agent might care about.

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 both parameters (name, withHidden) are already documented in the schema. The description adds no syntax, format, or matching-behavior detail beyond what the schema provides, so the baseline of 3 applies.

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 ('search') and resource ('people') plus the matching key ('by name'), and adds what the result contains ('person entries with face thumbnails'). It does not explicitly contrast with the sibling immich_list_people, so the boundary between search and list is left for the agent to infer.

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 phrase 'by name' implies the usage context (you have a name to look up), which implicitly distinguishes it from immich_list_people, but there is no explicit statement of when to use this versus list_people, merge_people, or smart search. Usage is only implied.

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

immich_search_smartA

Search photos using natural language (CLIP). Examples: 'sunset at beach', 'birthday cake', 'red car'. Returns matching photos with metadata. Use withImages=true to see thumbnails.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoNumber of results (default 10, max 100)
queryYesNatural language search query
personIdsNoFilter by person IDs
withImagesNoInclude thumbnail images in response (default false)

TDQS

A3.5/5.0
Behavior3/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 does disclose the return content ('matching photos with metadata') and the effect of withImages, which is useful. It says nothing about result limits, ordering, permissions, or whether the CLIP index must be built, leaving meaningful behavioral gaps for an unannotated 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?

Two compact sentences with the core purpose front-loaded, and the examples are short enough to aid rather than bloat. Every element is functional, though the example list is slightly padded.

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?

With no output schema, the description appropriately states that results come back as photos with metadata, and all four parameters are documented in the schema. It is nearly complete, missing only ranking/pagination context that an agent might want for a search tool.

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 baseline is 3. The description adds query examples and clarifies what withImages does, but contributes no extra meaning for size or personIds beyond what the schema already documents.

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 and resource ('Search photos') plus the mechanism ('natural language (CLIP)'), which cleanly separates it from keyword/metadata search. It does not explicitly name sibling search tools (immich_search_metadata, immich_search_people), so the differentiation is implied rather than stated.

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 examples ('sunset at beach', 'birthday cake') imply the kind of query to use and 'Use withImages=true to see thumbnails' is an actionable hint, but there is no guidance on when to choose this over the other search tools or what the default response omits. Usage is implied, not specified.

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

immich_server_infoA

Get Immich server version, features, and configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/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 implies a read-only operation and names what is returned (version, features, configuration), but says nothing about authentication requirements, whether configuration includes sensitive values, or any rate limits. Adequate but not rich.

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?

A single front-loaded sentence with the verb and resource first and the returned content appended. Every word earns its place; nothing is padded or repeated.

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 simple, parameterless read tool with no output schema, the description conveys enough: it identifies the resource and the categories of information returned. Minor gap in not clarifying the response shape or auth context, but nothing an agent needs to invoke it correctly 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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for parameterless tools applies. No misleading parameter information is present.

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 ('Get') and resource ('Immich server'), and enumerates the returned facets (version, features, configuration). It is clearly distinct from the asset/album/search siblings by category, though it does not explicitly name a contrasting alternative.

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 when-to-use guidance is given: the description does not say when an agent should reach for server info versus, say, immich_get_statistics, nor does it mention prerequisites or exclusions. Usage is only loosely inferable from the tool name.

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

immich_update_assetB

Update an asset's metadata: description, favorite status, rating, date, location.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesAsset ID
ratingNoRating 0-5
latitudeNoOverride GPS latitude
longitudeNoOverride GPS longitude
isFavoriteNoSet favorite status
descriptionNoNew description
dateTimeOriginalNoOverride original date (ISO format)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It says 'Update' but never discloses whether this is a partial/patch update (unspecified fields preserved) or a full overwrite, whether changes are reversible, or what permissions are required. For a mutation tool with zero annotation coverage this is a meaningful 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?

A single front-loaded sentence naming the verb, resource, and fields, with zero filler. Nothing needs to be trimmed.

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

Completeness3/5

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

For a mutation tool with no annotations and no output schema, the definition covers the field surface (backed by a fully documented schema) but omits update semantics, permission requirements, and return behavior. Adequate to invoke, but not fully complete for a write operation.

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 schema already documents all seven parameters, including ranges (rating 0-5) and formats (ISO date). The description merely re-lists the same fields and adds no syntax, default, or interaction detail beyond the schema; baseline 3 applies.

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?

Specific verb ('Update') plus resource ('asset's metadata') and an explicit enumeration of the mutable fields, so the agent knows exactly what the tool touches. It is distinguishable from read siblings (immich_get_asset) but never names or contrasts with the close sibling immich_bulk_update, which is the main ambiguity risk.

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 on when to use this single-asset updater versus immich_bulk_update, nor any stated prerequisites (ownership, permissions, whether the asset must exist). Usage must be inferred from the name and field list alone.

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

immich_upload_assetB

Upload an image to Immich. Provide base64 data or a description to generate. The image is added to the library.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNameYesFilename (e.g., photo.jpg)
mimeTypeNoMIME type (default: image/jpeg)
base64DataYesImage data as base64 string

TDQS

B3.1/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 behavioral burden. It only says 'The image is added to the library' — it doesn't disclose whether uploads require auth, whether they're idempotent, what happens on duplicate filenames, or what the response contains. Significant gaps 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.

Conciseness4/5

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

Two compact sentences with the primary action front-loaded. No wasted words, though 'The image is added to the library' is somewhat redundant with the upload verb.

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?

For a 3-param upload tool with no annotations and no output schema, the description omits important details: required vs optional fields (base64Data and fileName required, mimeType optional), response format, and authentication requirements. It leaves an agent under-informed for correct invocation.

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%, with fileName, mimeType, and base64Data all documented. The description's note about 'description to generate' hints at an alternative mode but doesn't clarify how it maps to the schema parameters; 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.

Purpose4/5

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

States a clear verb+resource ('Upload an image to Immich') and the modes of input. However, it does not distinguish itself from siblings like immich_update_asset or immich_describe_photo, though the 'upload' verb makes its role reasonably distinct.

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?

Mentions 'provide base64 data or a description to generate', suggesting an alternative input mode, but it doesn't specify when to use each mode or when to prefer upload over update_asset. Usage is implied rather than explicitly guided.

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. 22 tool updatesv1.0.0
    • First observedimmich_add_to_album
    • First observedimmich_bulk_update
    • First observedimmich_create_album
    • First observedimmich_delete_assets
    • First observedimmich_describe_photo
    • First observedimmich_get_album
    • First observedimmich_get_asset
    • First observedimmich_get_asset_by_date
    • First observedimmich_get_asset_info
    • First observedimmich_get_statistics
    • First observedimmich_list_albums
    • First observedimmich_list_people
    • First observedimmich_merge_people
    • First observedimmich_random_assets
    • First observedimmich_rename_person
    • First observedimmich_run_job
    • First observedimmich_search_metadata
    • First observedimmich_search_people
    • First observedimmich_search_smart
    • First observedimmich_server_info
    • First observedimmich_update_asset
    • First observedimmich_upload_asset

TDQS

B3.4/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target distinct resources/actions, but immich_get_asset, immich_describe_photo, and immich_get_asset_info overlap significantly (image vs image+metadata vs metadata-JSON), and immich_get_asset_by_date overlaps with immich_search_metadata's date filtering. Descriptions mostly disambiguate these, so confusion is limited to a couple of pairs.

Naming Consistency5/5

All tools use a consistent immich_ prefix followed by snake_case verb_noun or noun_resource patterns (search_smart, get_asset, list_albums, create_album, delete_assets). No mixed camelCase/snake_case or inconsistent verb styles; only minor non-verb-led names like immich_random_assets.

Tool Count3/5

22 tools is on the heavy side for a photo library server, and a few (describe_photo duplicating get_asset + get_asset_info) don't fully earn their place. The breadth of search/album/people/job features justifies most tools, but it sits in the borderline-heavy range.

Completeness4/5

Core asset lifecycle is covered (upload, get, update, delete, bulk update) plus rich search, people, jobs, and stats. However album management lacks delete/update album and remove-from-album operations, leaving some dead ends in the album workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers