Skip to main content
Glama
ReinforceZwei

trilium-calendar-mcp

calendar_upsert_events

Upsert multiple calendar events at once, keyed on UID or key, so re-running a list updates in place without duplicates.

Instructions

Create or update many events at once, keyed on uid (or on key).

Use this for bulk work (a release calendar for a whole season). Each entry is created if its identity is new and updated if it already exists, so re-running the same list updates in place instead of duplicating. Identity comes from event_uid/uid, or from key: a short stable slug ("wuwa-3.7-banner-1") that is hashed into a uid, so a scheduled agent can re-publish its list without storing uids.

Args: events: List of event objects. Each accepts the arguments of calendar_create_event (title, start_datetime, end_datetime, all_day, description, location, categories, color, recurrence_rule) plus the identity fields event_uid/uid or key. calendar_name may be set per entry to spread the list across calendars. Entries with no identity always create new events. calendar_name: Default calendar for entries that do not name one.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
eventsYes
calendar_nameNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.2

TDQS

A4.4/5.0
Behavior4/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 does well: it discloses upsert semantics (create if new, update if existing), deduplication on identity, identity derivation via `event_uid`/`uid` or a hashed `key`, and that entries with no identity always create new events. It omits auth/rate-limit and response/error behavior, but the critical upsert mechanics are explicit.

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 definition is front-loaded with the core purpose before mechanics and an Args section, and every sentence contributes. It is somewhat long, but the length is justified by the complex upsert semantics and the 0% schema coverage it must offset.

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 2-parameter bulk upsert tool with no annotations, no output schema, and 0% schema description coverage, the description is nearly complete: it covers identity, upsert behavior, per-entry calendar spreading, and parameter fields. Minor gaps remain around partial-failure behavior, conflict resolution within a single list, and permission requirements.

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?

Schema description coverage is 0%, so the description must compensate and does: it documents the `events` list as accepting all `calendar_create_event` fields plus identity fields, explains `calendar_name` per-entry override, and clarifies that `calendar_name` at the top level is the default calendar. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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

The description opens with a specific verb and resource: 'Create or update many events at once, keyed on `uid` (or on `key`).' It clearly distinguishes this bulk upsert tool from the single-event siblings `calendar_create_event` and `calendar_update_event`, which it explicitly references as the source of per-entry arguments.

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 provides clear context for use: 'Use this for bulk work (a release calendar for a whole season).' and explains the idempotent re-run benefit. It names `calendar_create_event` as the argument reference but does not explicitly state when not to use this tool or contrast it directly with single-event siblings, so it falls short of fully explicit routing.

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