# Nolizi Calendar

> Free scheduling your agent can book through: live availability, booking, verification, cancel.

- name: com.nolizi.calendar/calendar
- version: 0.10.5
- connection class: R1 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 88/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.nolizi.calendar%2Fcalendar
- tools: https://api.protogrid.dev/v1/servers/com.nolizi.calendar%2Fcalendar/tools

**An agent can connect on its own if it already holds `api_key`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "calendar": {
      "type": "http",
      "url": "https://calendar.nolizi.com/mcp",
      "headers": {
        "Authorization": "Bearer ${api_key}"
      }
    }
  }
}
```

Placeholders to fill: `${api_key}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-99% +updated-30d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 88/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 5 of 5 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 2 of 5 tools declare all four hints; missing: list_available_slots (idempotentHint); list_upcoming_bookings (idempotentHint); list_event_types (idempotentHint)
- pass `tools.token_cost`: about 878 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 5, about 878 tokens to load them all
- tool set hash: 6267905cec66ea685a9b9e52f0f141fa
- badge: [![protogrid quality](https://protogrid.dev/badge/com.nolizi.calendar/calendar.svg)](https://protogrid.dev/servers/com.nolizi.calendar/calendar)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://calendar.nolizi.com/mcp (streamable-http, auth api_key ${api_key}, reachable true, uptime30d 0.99159664)

## Packages

_none_

## Tools (5)

- `cancel_booking`: Cancel a confirmed booking. This notifies the attendee and removes the meeting from connected calendars, and it cannot be undone. Use an exact booking_id taken from list_upcoming_bookings — never a guessed or reconstructed one. Cancelling one occurrence of a grouped or recurring booking can affect several meetings, so confirm with the person which meetings they mean.
- `create_booking`: Book a real meeting. This sends invitations and writes to connected calendars, and it cannot be undone except by cancelling. Ask the person to confirm the event, the exact time and the attendee details before calling it, and use their real name and email — never a placeholder. The start and end must be copied verbatim from a recent list_available_slots response; this server re-checks them against live availability and refuses times it cannot find. There is no idempotency key: if this call returns an uncertain outcome, do not call it again — call list_upcoming_bookings and read what actually happened.
- `list_available_slots`: Return the live available start/end pairs for one event type. These are real times on a real calendar: show them to the person and let them choose. Do not invent, extrapolate or round a time that is not in this response. Convert times for display only — pass the original values back to create_booking unchanged.
- `list_event_types`: List the bookable event types owned by the configured Nolizi Calendar account. Start here: the returned slug is what every other tool needs. Never guess a slug. Events with required custom questions or email verification cannot be booked through this API — send the person to the event’s public booking page instead.
- `list_upcoming_bookings`: List up to 100 upcoming confirmed bookings. This is the only way to verify that a booking exists. Use it after every create or cancel, and use it first whenever a write returned an uncertain outcome.
