{"name":"dav-mcp","version":"3.0.1","transport":"http-stateless","description":"MCP Streamable HTTP Server for CalDAV/CardDAV integration (stateless)","endpoints":{"mcp":"/mcp (POST only)","health":"/health (GET)"},"tools":[{"name":"list_calendars","description":"List all available calendars from the CalDAV server. Use this to get calendar URLs needed for other operations"},{"name":"list_events","description":"List ALL events from a single calendar without filtering. WARNING: Returns all events which can be many thousands - use calendar_query instead for searching with filters (supports multi-calendar search)."},{"name":"create_event","description":"Create a new calendar event with title, date, time, optional description and location"},{"name":"update_event","description":"PREFERRED: Update event fields without iCal formatting. Supports: SUMMARY (title), DESCRIPTION (details), LOCATION (place), DTSTART (start time), DTEND (end time), STATUS (TENTATIVE/CONFIRMED/CANCELLED), and any RFC 5545 property including custom X-* properties (e.g., X-ZOOM-LINK, X-MEETING-ROOM)."},{"name":"update_event_raw","description":"ADVANCED: Update event with raw iCal data. Requires manual iCal formatting - use update_event instead for simple field updates (summary, description). Only use this if you have complete pre-formatted iCal data or need to update advanced iCal properties."},{"name":"delete_event","description":"Permanently delete a calendar event. WARNING: This action cannot be undone — the event is removed from the server immediately. Use only when the user explicitly requests deletion. Obtain the event URL and etag from list_events or calendar_query first. The etag ensures no conflicting changes occurred since the event was last retrieved."},{"name":"calendar_query","description":"⭐ PREFERRED: Search and filter calendar events efficiently. Use instead of list_events to avoid loading thousands of entries. Omit calendar_url to search across ALL calendars automatically."},{"name":"make_calendar","description":"Create a new calendar collection on the CalDAV server with optional color, description, timezone, and component types"},{"name":"update_calendar","description":"Update an existing calendar's properties (display name, description, color, timezone). Use this when user asks to \"rename calendar\", \"change calendar color\", or \"update calendar properties\""},{"name":"delete_calendar","description":"Permanently delete a calendar and all its events. WARNING: This action cannot be undone! Use this when user explicitly asks to \"delete calendar\" or \"remove calendar\""},{"name":"calendar_multi_get","description":"Batch fetch multiple specific calendar events by their URLs. Use when you have exact event URLs and want to retrieve their details"},{"name":"list_addressbooks","description":"List all available address books from the CardDAV server. Use this to get address book URLs needed for other contact operations"},{"name":"list_contacts","description":"List ALL contacts from an address book without filtering. WARNING: Returns all contacts which can be thousands - use addressbook_query instead when searching for specific contacts by name, email, or organization to save tokens"},{"name":"create_contact","description":"Create a new contact (vCard) with name, email, phone, organization, and other details"},{"name":"update_contact","description":"PREFERRED: Update contact fields without vCard formatting. Supports: FN (full name), N (structured name), EMAIL, TEL (phone), ORG (organization), TITLE (job title), NOTE, URL, ADR (address), BDAY (birthday), and any RFC 6350 vCard property including custom X-* properties."},{"name":"update_contact_raw","description":"ADVANCED: Update contact with raw vCard data. Requires manual vCard formatting - use update_contact instead for simple field updates (name, email, phone). Only use this if you have complete pre-formatted vCard data or need to update advanced vCard properties."},{"name":"delete_contact","description":"Permanently delete a contact (vCard) from the address book. WARNING: This action cannot be undone — the contact is removed from the server immediately. Use only when the user explicitly requests deletion. Obtain the vCard URL and etag from list_contacts or addressbook_query first. The etag ensures no conflicting changes occurred since the contact was last retrieved."},{"name":"addressbook_query","description":"⭐ PREFERRED: Search and filter contacts efficiently (name, email, organization). Use for \"find contacts with...\", \"search for email...\", \"contacts at company...\" queries. Use instead of list_contacts when ANY filter is specified. Omit addressbook_url to search across ALL addressbooks automatically."},{"name":"addressbook_multi_get","description":"Batch fetch multiple specific contacts by their URLs. Use when you have exact contact URLs and want to retrieve their details"},{"name":"list_todos","description":"List ALL todos/tasks from a calendar. WARNING: Returns all todos without filtering - use todo_query for searches with filters by status, summary, or due date."},{"name":"create_todo","description":"Create a new todo/task in a calendar. Use this when user wants to add a task, todo item, or reminder with optional due date, priority, and status."},{"name":"update_todo","description":"PREFERRED: Update todo fields without iCal formatting. Supports: SUMMARY (title), DESCRIPTION (details), STATUS (NEEDS-ACTION/IN-PROCESS/COMPLETED/CANCELLED), PRIORITY (0-9), DUE (due date), PERCENT-COMPLETE (0-100), and any RFC 5545 VTODO property including custom X-* properties."},{"name":"update_todo_raw","description":"ADVANCED: Update todo with raw VTODO iCal data. Requires manual iCal formatting - use update_todo instead for simple field updates (summary, description, status). Only use this if you have complete pre-formatted VTODO data or need to update advanced iCal properties."},{"name":"delete_todo","description":"Permanently delete a todo/task from the calendar. WARNING: This action cannot be undone — the todo is removed from the server immediately. Use only when the user explicitly requests deletion. Obtain the todo URL and etag from list_todos or todo_query first. The etag ensures no conflicting changes occurred since the todo was last retrieved."},{"name":"todo_query","description":"⭐ PREFERRED: Search and filter todos efficiently. Use instead of list_todos to conserve tokens. Omit calendar_url to search across ALL calendars automatically."},{"name":"todo_multi_get","description":"Batch fetch multiple specific todos by their URLs. More efficient than fetching one by one when you have exact todo URLs."}]}