Skip to main content
Glama

Get calendar heatmap

get_calendar_heatmap
Read-only

Retrieve daily photo counts for a date range to build a calendar heatmap, identify gaps or busy periods, and assess library health without listing assets.

Instructions

How many photos per day, over a date range — the data behind a calendar heatmap. Use this to find gaps (months with nothing), busy periods, or to check a library's health at a glance without listing assets. Immich 3.x answers natively; on Immich 2.x the same shape is built from the timeline (taken dates only), which costs one request per month in the range, so pass the narrowest range that answers the question. Read-only.

Args:
    from_date: ISO date lower bound (e.g. '2026-01-01'). Omit for the server
        default on Immich 3.x; on 2.x an omitted bound means the last 365 days,
        because an open-ended range would walk every month of the library.
    to_date: ISO date upper bound. Omit for the server default.
    heatmap_type: 'Taken' (capture date, default) or 'Upload' (when it reached
        Immich; 3.x only).

Returns: JSON with source ('immich' or 'timeline'), total and a series of
{date, count} for the days that have activity, oldest first (a day missing
from the series had nothing).

Input Schema

NameRequiredDescriptionDefault
to_dateNo
from_dateNo
heatmap_typeNoTaken

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv2.0.2

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the trailing 'Read-only.' is pure repetition. The description does add real behavioral context the annotations cannot: version-dependent execution (native on Immich 3.x, timeline-derived on 2.x), a per-month request cost on 2.x, and the taken-dates-only limitation there. That's meaningful, but the bulk of the version detail sits in the Args prose rather than as a top-level behavioral contract.

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?

Front-loaded with the core statement and use cases before version caveats, and the Args/Returns blocks are scannable. The only waste is the redundant 'Read-only.' line, which restates an annotation, and the version caveat is split across both the intro and the Args block.

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?

Even though an output schema exists, the description's Returns line adds info the schema likely doesn't (the 'source' value distinguishing immich vs timeline, oldest-first ordering, and the convention that a missing day means zero). Combined with the version branching and default handling, an agent has everything needed to call this correctly on either server version.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and no enums in the schema, the description carries the whole burden and does: ISO formats with examples, the meaning of omitting each bound (server default on 3.x, an enforced last-365-days on 2.x with the reason why), and the undocumented 'Taken' vs 'Upload' enum values including the 3.x-only restriction.

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 opens with a concrete verb-and-resource statement ('How many photos per day, over a date range') and explicitly scopes it as the data behind a calendar heatmap. It also distinguishes itself from asset-listing siblings with 'without listing assets,' so an agent can pick it over list_assets or get_timeline_buckets without inspecting schemas.

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?

It names concrete use cases (finding gaps, spotting busy periods, checking library health at a glance) and gives a cost-driven rule: 'pass the narrowest range that answers the question.' What's missing is an explicit named alternative for when a per-day count is the wrong tool (e.g., pointing to list_assets for actual asset retrieval), so it stops short of full when/when-not routing.

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

Deploy Server

Other Tools