# build_ics_event

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=<IANA name> 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

Agent View of the PolicyLayer registry record for `build_ics_event`. HTML page: https://policylayer.com/tools/dev-tanod-tanod/build-ics-event

## Facts

- Tool: `build_ics_event`
- Server: Tanod (`https://tanod.dev/mcp`) — https://policylayer.com/tools/dev-tanod-tanod.md
- Homepage: https://github.com/https://tanod.dev/mcp
- Risk category: Execute (High risk)
- Registry record: grade F, identity unverified
- Server auth posture: open
- Server CORS policy: *
- Server rate-limited: no
- Parameters: 4 (1 required)
- Recommended policy verdict: Rate-limited

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `events` | array | yes | 1-50 events. |
| `timezone` | object | no | Default IANA time zone for events without one. |
| `time_format` | string | no | tzid (default): zoned times as TZID=...; utc: all times in UTC. |
| `calendar_name` | object | no | Calendar name (X-WR-CALNAME). |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "build_ics_event",
    "arguments": {
      "events": []
    }
  }
}
```

## Why build_ics_event is rated High

build_ics_event triggers real processes with real consequences. An agent gone sideways doesn't fire it once. It starts dozens of builds, sends mass notifications, or burns through compute before anyone looks up.

## Use case

AI agents invoke build_ics_event to trigger actions in Tanod. What it does depends on the arguments the agent supplies, and its effects often reach beyond the immediate call: builds kicked off, notifications sent, workflows started.

## Recommended policy (PolicyLayer)

Verdict: **Rate-limited**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches Tanod:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "build_ics_event": {
      "limits": [
        {
          "counter": "build_ics_event_rate",
          "window": "minute",
          "max": 10,
          "scope": "grant"
        }
      ]
    }
  }
}
```

## Other tools on Tanod (307)

- `audit_token_approvals` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/audit-token-approvals.md
- `aurora_forecast` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/aurora-forecast.md
- `diff_text` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/diff-text.md
- `image_metadata` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/image-metadata.md
- `pdf_pipeline` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/pdf-pipeline.md
- `pdf_protect` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/pdf-protect.md
- `pdf_remove_pages` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/pdf-remove-pages.md
- `pdf_reorder_pages` — Destructive — https://policylayer.com/tools/dev-tanod-tanod/pdf-reorder-pages.md
- `build_pptx_deck` — Execute — https://policylayer.com/tools/dev-tanod-tanod/build-pptx-deck.md
- `build_xlsx_workbook` — Execute — https://policylayer.com/tools/dev-tanod-tanod/build-xlsx-workbook.md
- `bulk_agent_index` — Execute — https://policylayer.com/tools/dev-tanod-tanod/bulk-agent-index.md
- `cron_next_runs` — Execute — https://policylayer.com/tools/dev-tanod-tanod/cron-next-runs.md
- `decode_calldata` — Execute — https://policylayer.com/tools/dev-tanod-tanod/decode-calldata.md
- `expand_rrule` — Execute — https://policylayer.com/tools/dev-tanod-tanod/expand-rrule.md
- `html_to_pdf` — Execute — https://policylayer.com/tools/dev-tanod-tanod/html-to-pdf.md
- `image_crop` — Execute — https://policylayer.com/tools/dev-tanod-tanod/image-crop.md
- `parse_ics` — Execute — https://policylayer.com/tools/dev-tanod-tanod/parse-ics.md
- `parse_phone_number` — Execute — https://policylayer.com/tools/dev-tanod-tanod/parse-phone-number.md
- `parse_rss_feed` — Execute — https://policylayer.com/tools/dev-tanod-tanod/parse-rss-feed.md
- `parse_sitemap` — Execute — https://policylayer.com/tools/dev-tanod-tanod/parse-sitemap.md
- `parse_url` — Execute — https://policylayer.com/tools/dev-tanod-tanod/parse-url.md
- `parse_user_agent` — Execute — https://policylayer.com/tools/dev-tanod-tanod/parse-user-agent.md
- `render_mermaid` — Execute — https://policylayer.com/tools/dev-tanod-tanod/render-mermaid.md
- `satellite_passes` — Execute — https://policylayer.com/tools/dev-tanod-tanod/satellite-passes.md
- `sec_financials` — Execute — https://policylayer.com/tools/dev-tanod-tanod/sec-financials.md
- `transcribe_audio` — Execute — https://policylayer.com/tools/dev-tanod-tanod/transcribe-audio.md
- `x402_well_known_file` — Execute — https://policylayer.com/tools/dev-tanod-tanod/x402-well-known-file.md
- `compare_stablecoin_transfer_fees` — Financial — https://policylayer.com/tools/dev-tanod-tanod/compare-stablecoin-transfer-fees.md
- `transfer_preflight` — Financial — https://policylayer.com/tools/dev-tanod-tanod/transfer-preflight.md
- `airport_distance` — Read — https://policylayer.com/tools/dev-tanod-tanod/airport-distance.md
- …and 277 more: https://policylayer.com/tools/dev-tanod-tanod.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=dev-tanod-tanod · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/dev-tanod-tanod
