{"ok":true,"site":{"host":"protocoltooling.com","url":"https://protocoltooling.com/integrations/fullcalendar/demo","type":"live","desc":"A live FullCalendar demo where people and agents share the same calendar state through WebMCP.","tools":[{"name":"calendar_get_context","kind":"answer","impl":"imperative","description":"Read-only temporal and viewport context for the open calendar — not persisted events. Use when the user mentions relative times (today, tomorrow, next week, etc.) to anchor ISO date-times before list/create/update. Returns now, browserTimeZone, fullCalendarTimeZone, view, and visibleRange. Skip when datetimes are already explicit with offsets. Not for event discovery — use calendar_list_events.","title":"Get calendar context","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/demo","pages":["/integrations/fullcalendar/demo"]},{"name":"calendar_list_events","kind":"answer","impl":"imperative","description":"Read-only discovery over persisted events. Find schedules, filter by range or title, disambiguate targets before update/delete. Returns events with stable ids for get/update/delete. Prefer calendar_get_event when you have the id; calendar_get_context for viewport only. Never mutate or delete from an ambiguous multi-match list.","title":"List calendar events","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"start":{"type":"string","format":"date-time","description":"Inclusive filter lower bound (ISO 8601 with offset). Omit for no lower limit."},"end":{"type":"string","format":"date-time","description":"Exclusive filter upper bound (ISO 8601 with offset). One day: following day start. Omit for no limit."},"text":{"type":"string","description":"Case-insensitive substring matched against event titles. Omit to skip title filtering."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/demo","pages":["/integrations/fullcalendar/demo"]},{"name":"calendar_get_event","kind":"answer","impl":"imperative","description":"Read-only fetch of one persisted event by stable id. Use when you have the id from calendar_list_events, a prior create/update result, or the host. Returns { event } or null when missing. Not for title/date search — use calendar_list_events. Do not invent ids from titles.","title":"Get calendar event","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable id from calendar_list_events, prior tool results, or host. Never substitute title for id."}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/demo","pages":["/integrations/fullcalendar/demo"]},{"name":"calendar_create_event","kind":"act","impl":"imperative","description":"Create and persist a new event. Requires title and start (ISO 8601 with offset); optional end and allDay. Resolve relative times via calendar_get_context first. Returns persisted event with host-assigned id. Metadata cannot be supplied. Not for modifying existing events — use calendar_update_event.","title":"Create calendar event","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Display title for the new event."},"start":{"type":"string","format":"date-time","description":"Inclusive event start (ISO 8601 with offset). Resolve relative times via calendar_get_context first."},"end":{"type":["string","null"],"format":"date-time","description":"Exclusive event end as ISO 8601 date-time with explicit offset, or null for open-ended. Omit on create to use host defaults."},"allDay":{"type":"boolean","description":"Whether the event spans full calendar days without clock times. Defaults to false when omitted."}},"required":["title","start"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/demo","pages":["/integrations/fullcalendar/demo"]},{"name":"calendar_update_event","kind":"act","impl":"imperative","description":"Partial update of one existing event by stable id. Requires id plus at least one of title, start, end, allDay; omitted fields unchanged. Host metadata preserved, not writable. Without id, find via calendar_list_events first. For reschedule/rename/time changes — not create (calendar_create_event) or delete (calendar_delete_event).","title":"Update calendar event","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable id from calendar_list_events, prior tool results, or host. Never substitute title for id."},"title":{"type":"string","minLength":1,"description":"New display title. Omit to leave the current title unchanged."},"start":{"type":"string","format":"date-time","description":"New inclusive event start (ISO 8601 with explicit offset). Omit to leave the current start unchanged."},"end":{"type":["string","null"],"format":"date-time","description":"New exclusive event end (ISO 8601 with explicit offset) or null. Omit to leave the current end unchanged."},"allDay":{"type":"boolean","description":"Whether the event is all-day. Omit to leave unchanged."}},"required":["id"],"minProperties":2,"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/demo","pages":["/integrations/fullcalendar/demo"]},{"name":"calendar_delete_event","kind":"transact","impl":"imperative","description":"Permanently delete one persisted event by stable id. Obtain id via calendar_list_events after disambiguation; never use title as id or delete from ambiguous lists. For removal only — not edit/reschedule (calendar_update_event). Returns { deleted: true, event } pre-delete snapshot.","title":"Delete calendar event","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"description":"Stable id from calendar_list_events, prior tool results, or host. Never substitute title for id."}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/demo","pages":["/integrations/fullcalendar/demo"]},{"name":"search_docs","kind":"answer","impl":"imperative","description":"Full-text search across this documentation site. Returns matching pages with their title, URL, and a short excerpt.","annotations":{"openWorldHint":false,"readOnlyHint":true},"inputSchema":{"properties":{"query":{"description":"The search query.","type":"string"}},"required":["query"],"type":"object"},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/concepts/agent-tools","pages":["/integrations/fullcalendar/concepts/agent-tools","/","/integrations/fullcalendar/concepts/repository","/integrations/fullcalendar/concepts/security","/integrations/fullcalendar/concepts/webmcp"]},{"name":"get_page","kind":"answer","impl":"imperative","description":"Fetch a page of this site as plain Markdown. Pass the page's root-relative route, e.g. `/quickstart`.","annotations":{"openWorldHint":false,"readOnlyHint":true},"inputSchema":{"properties":{"route":{"description":"Root-relative page route, e.g. `/quickstart`.","type":"string"}},"required":["route"],"type":"object"},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/concepts/agent-tools","pages":["/integrations/fullcalendar/concepts/agent-tools","/","/integrations/fullcalendar/concepts/repository","/integrations/fullcalendar/concepts/security","/integrations/fullcalendar/concepts/webmcp"]},{"name":"list_pages","kind":"answer","impl":"imperative","description":"List this site's pages: the llms.txt index of every page with its URL and summary, organized by section.","annotations":{"openWorldHint":false,"readOnlyHint":true},"inputSchema":{"properties":{},"type":"object"},"hasHandler":true,"hasExecute":true,"__source":"polyfill","executable":true,"handlerField":"execute","page":"/integrations/fullcalendar/concepts/agent-tools","pages":["/integrations/fullcalendar/concepts/agent-tools","/","/integrations/fullcalendar/concepts/repository","/integrations/fullcalendar/concepts/security","/integrations/fullcalendar/concepts/webmcp"]}],"category":"Developer Tools","apiSurface":"mixed","platforms":["blume"],"toolCount":9}}