_ registry / mcp streamable-http · checked 4h ago

calendar-invite

https://calendar-invite.zovo.one

Registry code: 135757ff43db30a5

api record

InviteKit Calendar Files makes standards-compliant .ics calendar files and add-to-calendar links (Google Calendar, Outlook.com, Office 365, Yahoo) for one event, a repeating event, or a schedule of sessions. Pass local times with the event's time zone. It does not read or change anyone's calendar and does not email invitations.

endpoint
https://calendar-invite.zovo.one/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is calendar-invite live?
Yes — it answered the hub's last check (checked 4h ago). It answered 100% of checks over the last 30 days.
Is calendar-invite free to use?
Yes — the hub reached it with no key and no payment.
What tools does calendar-invite have?
2 tools: generate_event_series, generate_calendar_event.
Is calendar-invite safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
335ms

last good check

priced tools
0

of 2 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

inferred, not observed

Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run

_ what it can do 2 tools
2 never probed 0 of 2 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • generate_event_series unknown 4h ago

    Use this when the user wants one calendar file (.ics) that adds several different events at once: a course or class schedule, a training program, a conference agenda, match fixtures, or a list of webinars on irregular dates. Takes 1-40 sessions (each with its own start, end or duration, optional title, location and note) plus a shared time zone, location, details, link, organizer name and reminders. Returns one .ics file with one event per session and a dated list of the sessions. Does not make add-to-calendar web links per session, send invitations, or change anyone's calendar. Do not use for an event that repeats on a regular pattern (use generate_calendar_event with recurrence).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "events"
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 500,
          "description": "Optional shared link, e.g. a course page or video-call link: https://example.com/course."
        },
        "events": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "start"
            ],
            "properties": {
              "end": {
                "type": "string",
                "maxLength": 40,
                "description": "Local end time HH:MM or YYYY-MM-DDTHH:MM, e.g. 19:30. All-day: last day YYYY-MM-DD."
              },
              "start": {
                "type": "string",
                "maxLength": 40,
                "description": "Local start YYYY-MM-DDTHH:MM, e.g. 2027-01-12T18:00, or YYYY-MM-DD for all-day."
              },
              "title": {
                "type": "string",
                "maxLength": 200,
                "description": "Session title, e.g. Week 1: Introduction. Default: calendar_name with the session number."
              },
              "all_day": {
                "type": "boolean",
                "description": "true for a date-only event, e.g. an exam day."
              },
              "location": {
                "type": "string",
                "maxLength": 300,
                "description": "Location for this session if it differs, e.g. Room 204."
              },
              "description": {
                "type": "string",
                "maxLength": 300,
                "description": "Short note for this session, e.g. Quiz on chapter 3."
              },
              "duration_minutes": {
                "type": "integer",
                "maximum": 20160,
                "minimum": 1,
                "description": "Length in minutes instead of end, e.g. 90."
              }
            }
          },
          "maxItems": 40,
          "minItems": 1,
          "description": "1-40 distinct sessions with their own dates, e.g. [{\"title\":\"Week 1\",\"start\":\"2027-01-12T18:00\",\"end\":\"19:30\"}]."
        },
        "location": {
          "type": "string",
          "maxLength": 300,
          "description": "Default location for every session, e.g. Community Center, Room 2."
        },
        "time_zone": {
          "type": "string",
          "maxLength": 80,
          "description": "Time zone for all sessions: IANA zone or city, e.g. America/Chicago. Required when sessions have times."
        },
        "description": {
          "type": "string",
          "maxLength": 600,
          "description": "Shared details added to every session, e.g. Bring your workbook."
        },
        "calendar_name": {
          "type": "string",
          "maxLength": 100,
          "description": "Name for the schedule, e.g. Spanish A1 evening course. Shown as the calendar name and default title."
        },
        "organizer_name": {
          "type": "string",
          "maxLength": 100,
          "description": "Optional organizer or teacher name, e.g. Ms. Rivera."
        },
        "reminders_minutes_before": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 40320,
            "minimum": 0
          },
          "maxItems": 3,
          "description": "Up to 3 reminders for every session, minutes before, e.g. [60]."
        }
      }
    }
    arguments 98 lines
  • generate_calendar_event unknown 4h ago

    Use this when the user wants a calendar invite, an .ics file, or an add-to-calendar link (Google Calendar, Outlook, Office 365, Yahoo) for one event or one repeating event: a webinar, class, meeting, party, deadline, or launch. Takes the title, local start/end and the event's time zone (city or IANA zone), or dates only for all-day events, plus optional location, description, link, organizer name, reminders, and a repeat rule (daily, weekly on chosen weekdays, monthly by date, nth weekday such as the last Friday, or the first/last weekday of the month, yearly; with count, until date, and skipped dates). Returns a downloadable RFC 5545 .ics file with time zone data, four add-to-calendar links, and the first 5 dates in the event's zone and optional attendee zones, with daylight saving changes flagged. Does not send invitations, read or change anyone's calendar, or track RSVPs. Do not use for a list of different sessions (use generate_event_series) or for finding a meeting time across zones.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "title",
        "start"
      ],
      "properties": {
        "end": {
          "type": "string",
          "maxLength": 40,
          "description": "Local end YYYY-MM-DDTHH:MM, or just a time HH:MM on the start day, e.g. 21:00. For all-day events, the last day YYYY-MM-DD (inclusive). Default: 1 hour, or 1 day for all-day."
        },
        "url": {
          "type": "string",
          "maxLength": 500,
          "description": "Optional event page or video-call link, e.g. https://example.com/webinar."
        },
        "start": {
          "type": "string",
          "maxLength": 40,
          "description": "Local start YYYY-MM-DDTHH:MM in the event's time zone, e.g. 2026-11-05T18:30, or a date YYYY-MM-DD for an all-day event. No UTC offset."
        },
        "title": {
          "type": "string",
          "maxLength": 200,
          "description": "Event title, e.g. Product launch webinar."
        },
        "all_day": {
          "type": "boolean",
          "description": "true for an all-day event (dates only), e.g. a conference day or a deadline. Automatic when start has no time."
        },
        "location": {
          "type": "string",
          "maxLength": 300,
          "description": "Venue, address, or meeting room shown in the calendar, e.g. Pier 39, San Francisco."
        },
        "time_zone": {
          "type": "string",
          "maxLength": 80,
          "description": "Time zone of the start/end: IANA zone (Europe/Warsaw), city (Chicago, Sydney), or UTC. Required for timed events; not used for all-day events."
        },
        "recurrence": {
          "type": "object",
          "required": [
            "frequency"
          ],
          "properties": {
            "nth": {
              "type": "integer",
              "maximum": 5,
              "minimum": -1,
              "description": "With nth_weekday: 1-5, or -1 for the last, e.g. 2 for the second Tuesday. Default: the start date's position in its month."
            },
            "count": {
              "type": "integer",
              "maximum": 1000,
              "minimum": 1,
              "description": "Total number of dates in the pattern, e.g. 10. Do not combine with until."
            },
            "until": {
              "type": "string",
              "maxLength": 10,
              "description": "Last possible date YYYY-MM-DD (inclusive), e.g. 2027-06-30. Leave out count and until for no end date."
            },
            "interval": {
              "type": "integer",
              "maximum": 99,
              "minimum": 1,
              "description": "Repeat every N days/weeks/months/years, e.g. 2 for every other week. Default 1."
            },
            "weekdays": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 12
              },
              "maxItems": 7,
              "description": "Weekly: the days it repeats on, e.g. [\"TU\",\"TH\"] (default: the start's weekday). Monthly/yearly with nth_weekday: one weekday, e.g. [\"TU\"], or several with nth to pick from the set, e.g. [\"MO\",\"TU\",\"WE\",\"TH\",\"FR\"] with nth -1 for the last weekday of the month."
            },
            "frequency": {
              "enum": [
                "daily",
                "weekly",
                "monthly",
                "yearly"
              ],
              "type": "string",
              "description": "How often it repeats, e.g. weekly."
            },
            "exceptions": {
              "type": "array",
              "items": {
                "type": "string",
                "maxLength": 10
              },
              "maxItems": 60,
              "description": "Dates YYYY-MM-DD to skip, e.g. [\"2026-12-24\"]. Each must be a date the pattern produces."
            },
            "monthly_on": {
              "enum": [
                "day_of_month",
                "nth_weekday"
              ],
              "type": "string",
              "description": "Monthly/yearly: day_of_month (same date, e.g. the 15th; default) or nth_weekday (e.g. the second Tuesday or the last Friday)."
            }
          },
          "description": "Optional repeat rule, e.g. {\"frequency\":\"weekly\",\"weekdays\":[\"TU\",\"TH\"],\"count\":10}."
        },
        "description": {
          "type": "string",
          "maxLength": 1500,
          "description": "Event details or agenda (plain text; line breaks allowed), e.g. Bring a laptop."
        },
        "organizer_name": {
          "type": "string",
          "maxLength": 100,
          "description": "Optional organizer name shown in the details, e.g. Acme Events. No email needed."
        },
        "duration_minutes": {
          "type": "integer",
          "maximum": 20160,
          "minimum": 1,
          "description": "Length in minutes instead of end, e.g. 90."
        },
        "viewer_time_zones": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 80
          },
          "maxItems": 4,
          "description": "Optional places or zones of attendees to show local times for, e.g. [\"New York\", \"Tokyo\"]."
        },
        "reminders_minutes_before": {
          "type": "array",
          "items": {
            "type": "integer",
            "maximum": 40320,
            "minimum": 0
          },
          "maxItems": 3,
          "description": "Up to 3 reminders in minutes before the start, e.g. [15, 1440] for 15 minutes and 1 day before."
        }
      }
    }
    arguments 147 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 135757ff43db30a5.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/135757ff43db30a5/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/135757ff43db30a5/badge.svg)](https://brick.blue/agent/135757ff43db30a5?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
60%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.

_ also on zovo.one 3 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.