Skip to main content
Glama
aiexp1

Tanod MCP server

utilpeek: build an .ics calendar file from 1-50 events given as JSON

build_ics_event
Read-onlyIdempotent

Generate an iCalendar file from JSON events, returning RFC 5545 VCALENDAR text with base64 and UIDs. Use it to programmatically create calendar invites or event feeds.

Instructions

utilpeek: Build an iCalendar file from JSON events. To read an .ics file use parse_ics. Returns RFC 5545 VCALENDAR text built from 1-50 events, CRLF lines folded at 75 octets and text escaped, with its base64, a data: URI and the uids. Input: events, optional calendar_name, default timezone and time_format. Pure computation: no network access, nothing stored. A zoned start is written as TZID= with no VTIMEZONE block; an offset becomes UTC; a plain local time stays floating. All-day end is the last day, inclusive. A bad time zone, date, rrule, email or url, or both end and duration, is a 422 naming the event (not charged). Typically under 0.1 s. Price: USD 0.001. Free: 10 utilpeek calls per IP per UTC day. Docs: https://tanod.dev/learn/ics-calendar-api.html

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
eventsYes1-50 events.
timezoneNoDefault IANA time zone for events without one.
time_formatNotzid (default): zoned times as TZID=...; utc: all times in UTC.tzid
calendar_nameNoCalendar name (X-WR-CALNAME).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
icsNo
noteNo
uidsNo
bytesNo
errorNoOnly on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object.
base64No
data_uriNo
filenameNo
event_countNo
time_formatNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly/idempotent/non-destructive), while the description adds substantial behavior: no network access and nothing persisted, deterministic derived uids, exact timezone serialization rules, all-day inclusive-end handling, and a 422-with-event-name error contract that is explicitly not charged. This is far beyond what the annotations convey (the openWorldHint=true annotation is arguably imprecise against 'pure computation', but it does not contradict the safety hints).

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 purpose and the sibling alternative, then output shape, then edge-case serialization rules, with pricing/limits/docs trailing. Dense and mostly waste-free, though '1-50 events' is repeated three times (title, description, schema) and the billing snippet sits mid-paragraph.

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 multi-field, nested-input generator, the description covers what the agent must know before invoking: input shape, defaults, serialization semantics, failure mode, cost, and a docs link. An output schema exists, yet the description still usefully names the return artifacts (VCALENDAR text, base64, data: URI, uids), leaving nothing critical unstated.

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?

Schema coverage is 100%, so the baseline would be 3, but the description adds genuine semantics the schema omits: how a zoned start becomes TZID=<IANA name> with no VTIMEZONE block, how an offset becomes UTC, how a plain local time stays floating, and that all-day `end` is inclusive. These interpretation rules are the main thing an agent could get wrong.

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?

States a specific verb and resource ('Build an iCalendar file from JSON events') and immediately names the sibling it is not ('To read an .ics file use parse_ics'), so the agent can distinguish it from parse_ics without opening either schema. Scope (1-50 events) and output format (RFC 5545 VCALENDAR text) are also pinned down.

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

Usage Guidelines4/5

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

The description routes the agent explicitly: build here, read with parse_ics. It supplies context an agent needs before calling (pure computation, no network, nothing stored, cost and free-tier limits, typical latency) but never states a positive when-to-use condition for this tool beyond the implied 'you have JSON events and need an .ics'.

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