{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T17:27:59.416Z","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp","markdownUrl":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp.md","server":{"slug":"elgorro-aiquila-mcp","name":"AIquila — Nextcloud MCP Server","registryName":"io.github.elgorro/aiquila-mcp","description":"Nextcloud MCP server — 345 tools: files, calendar, contacts, mail, Talk, Deck, photos, maps, notes","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"ghcr-io-elgorro-aiquila-mcp","type":"oci","identifier":"ghcr.io/elgorro/aiquila-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp","version":"0.5.0","transport":"stdio","scoredAt":"2026-11-05T04:31:01.021Z"},"score":{"total":42,"tier":"low","status":"scored","weekDelta":4,"history":[{"date":"2026-11-05","total":42},{"date":"2026-11-04","total":41},{"date":"2026-11-03","total":41},{"date":"2026-11-02","total":40},{"date":"2026-11-01","total":40},{"date":"2026-10-31","total":39},{"date":"2026-10-30","total":39},{"date":"2026-10-29","total":38},{"date":"2026-10-28","total":37},{"date":"2026-10-27","total":37},{"date":"2026-10-26","total":36}]},"categories":[{"name":"Supply Chain Security","score":0,"verdict":"unverified","reasons":["No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.","Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.","Install-script risk not yet assessed.","Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read."],"codes":[{"code":"supplychain.malware_inconclusive","args":{"reason":"ecosystem_unsupported"}},{"code":"cve.inconclusive","args":{"reason":"no_sbom_attached"}},{"code":"installscript.inconclusive","args":{"reason":"no_install_concept"}},{"code":"dephealth.inconclusive","args":{"reason":"no_sbom_attached"}}]},{"name":"Provenance & Transparency","score":23,"verdict":"fail","reasons":["Repository check failed: the declared repository URL redirects; it must resolve directly.","Provenance check failed: no build-provenance attestation is published.","Clear OSI-approved license (MIT).","Actively maintained (last published 5 days ago).","Publishes a security disclosure policy (SECURITY.md)."],"codes":[{"code":"provenance.repo_redirected","args":{}},{"code":"provenance.none","args":{}},{"code":"license.osi","args":{"spdx":"MIT"}},{"code":"maintenance.recent","args":{"age_days":"5"}},{"code":"disclosure.present","args":{}}]},{"name":"Schema Quality & AI Usability","score":81,"verdict":"fail","reasons":["AI-judged instruction clarity (excellent).","Tool/resource definitions use about 23946 tokens (~69/item across 345 items; 345 tools + 0 resources), lean.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.ai_quality","args":{"band":"excellent"}},{"code":"schema.footprint_lean","args":{"avg":"69","items":"345","tools":"345","tokens":"23946","resources":"0"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":33,"verdict":"partial","reasons":["Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"10"}}]},{"name":"Tool Coverage","score":99,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","97% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"97"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","All 56 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.","An AI judge read all 345 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_declared","args":{"pct":"100","annotated":"56","destructive":"56"}},{"code":"toolsafety.manipulation_clean","args":{"units":"345","judged":"345"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a current MCP spec version (2026-07-28)."],"codes":[{"code":"protocol.current","args":{"version":"2026-07-28"}}]}],"inconclusive":["No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.","Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.","Install-script risk not yet assessed.","Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read."],"malware":[],"components":[{"slug":"https-hostname-mcp","type":"remote","identifier":"https://{hostname}/mcp","withdrawn":false,"score":0,"current":false,"url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/https-hostname-mcp","markdownUrl":"https://verifymcp.io/servers/elgorro-aiquila-mcp/https-hostname-mcp.md"},{"slug":"aiquila-mcp","type":"npm","identifier":"aiquila-mcp","withdrawn":false,"score":89,"current":false,"url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/aiquila-mcp","markdownUrl":"https://verifymcp.io/servers/elgorro-aiquila-mcp/aiquila-mcp.md"},{"slug":"ghcr-io-elgorro-aiquila-mcp","type":"oci","identifier":"ghcr.io/elgorro/aiquila-mcp","withdrawn":false,"score":42,"current":true,"url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp","markdownUrl":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp.md"}],"facts":[{"label":"Registry","value":"oci"},{"label":"Package","value":"ghcr.io/elgorro/aiquila-mcp"},{"label":"Version","value":"0.5.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"list_files","title":"List Files","description":"List files and folders in a Nextcloud directory","inputs":[{"name":"path","type":"string","required":false,"description":"The directory path to list (default: '/')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"read_file","title":"Read File","description":"Read the contents of a file from Nextcloud","inputs":[{"name":"path","type":"string","required":true,"description":"The file path in Nextcloud"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":31},{"name":"write_file","title":"Write File","description":"Create or update a file in Nextcloud. File size is limited (default 1 GB, configurable via MCP_MAX_FILE_SIZE).","inputs":[{"name":"content","type":"string","required":true,"description":"The content to write to the file"},{"name":"path","type":"string","required":true,"description":"The file path in Nextcloud"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"create_folder","title":"Create Folder","description":"Create a folder in Nextcloud","inputs":[{"name":"path","type":"string","required":true,"description":"The folder path to create in Nextcloud"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"delete","title":"Delete File or Folder","description":"Delete a file or folder from Nextcloud","inputs":[{"name":"path","type":"string","required":true,"description":"The path in Nextcloud (e.g., '/Documents/file.txt')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"move_file","title":"Move File","description":"Move or rename a file or folder in Nextcloud","inputs":[{"name":"destination","type":"string","required":true,"description":"The destination path"},{"name":"overwrite","type":"boolean","required":false,"description":"Whether to overwrite if the destination already exists"},{"name":"source","type":"string","required":true,"description":"The source path of the file or folder to move"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"copy_file","title":"Copy File","description":"Copy a file or folder in Nextcloud","inputs":[{"name":"destination","type":"string","required":true,"description":"The destination path for the copy"},{"name":"overwrite","type":"boolean","required":false,"description":"Whether to overwrite if the destination already exists"},{"name":"source","type":"string","required":true,"description":"The source path of the file or folder to copy"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"get_file_info","title":"Get File Info","description":"Get detailed file metadata from Nextcloud (name, size, mime type, modified date, permissions, etc.)","inputs":[{"name":"path","type":"string","required":true,"description":"The file or folder path in Nextcloud (e.g., '/Documents/report.pdf')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":54},{"name":"search_files","title":"Search Files","description":"Search for files in Nextcloud by name pattern and/or mime type","inputs":[{"name":"mime","type":"string","required":false,"description":"Filter by mime type prefix (e.g., 'image/', 'text/plain')"},{"name":"path","type":"string","required":false,"description":"Base directory to search in"},{"name":"query","type":"string","required":true,"description":"Search query (file name pattern)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"get_file_content","title":"Get File Content","description":"Read file content from Nextcloud with mime type info. Returns text for text files, base64 for binary files (images, PDFs, etc.). Images are returned as MCP image content for Claude vision.","inputs":[{"name":"path","type":"string","required":true,"description":"The file path in Nextcloud"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"analyze_image","title":"Analyze Image","description":"Analyze one or more images stored in Nextcloud using Claude vision. Ask questions about image content, extract text (OCR), describe visuals, compare images, or analyse documents. Supports up to 20 images for multi-image comparison.","inputs":[{"name":"path","type":"string","required":false,"description":"Single image file path in Nextcloud (e.g., '/Photos/receipt.jpg'). Use 'paths' for multiple images."},{"name":"paths","type":"array","required":false,"description":"Multiple image file paths for comparison (max 20). E.g., ['/Photos/before.jpg', '/Photos/after.jpg']"},{"name":"prompt","type":"string","required":true,"description":"What to ask about the image(s) (e.g., \"What text is in this image?\", \"Compare these images\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":147},{"name":"bulk_file_operations","title":"Bulk File Operations","description":"Execute multiple file operations (move, copy, delete) sequentially in a single call. Returns per-item results.","inputs":[{"name":"operations","type":"array","required":true,"description":"Array of file operations to execute sequentially"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"create_archive","title":"Create Archive","description":"Create a zip archive in Nextcloud from one or more files and/or folders. Runs server-side; not bound by MCP file-size limits.","inputs":[{"name":"destination","type":"string","required":true,"description":"Path for the resulting .zip file (e.g., '/Documents/backup.zip')"},{"name":"overwrite","type":"boolean","required":false,"description":"Whether to overwrite the destination if it already exists"},{"name":"sources","type":"array","required":true,"description":"Paths of files/folders to include (e.g., ['/Documents/a.txt', '/Photos'])"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":100},{"name":"extract_archive","title":"Extract Archive","description":"Extract a zip archive in Nextcloud into a destination folder. Runs server-side.","inputs":[{"name":"archive","type":"string","required":true,"description":"Path to the .zip file (e.g., '/Documents/backup.zip')"},{"name":"destination","type":"string","required":true,"description":"Folder to extract into (e.g., '/Documents/restored')"},{"name":"overwrite","type":"boolean","required":false,"description":"Whether to overwrite entries that already exist"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":79},{"name":"list_archive","title":"List Archive Contents","description":"List the contents of a zip archive in Nextcloud without extracting it.","inputs":[{"name":"archive","type":"string","required":true,"description":"Path to the .zip file (e.g., '/Documents/backup.zip')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"system_status","title":"System Status","description":"Get Nextcloud system status including version, installation path, and configuration","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":22},{"name":"run_setup_checks","title":"Run Setup Checks","description":"Run Nextcloud setup checks to verify system configuration (security, performance, PHP modules, etc.). Requires admin privileges","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"get_local_time","title":"Get Local Time","description":"Get the current local time and timezone of the MCP server. Call this to establish a time reference before creating or listing calendar events, or to resolve scheduling ambiguities with the user.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"list_apps","title":"List Apps","description":"List all installed Nextcloud apps with their enabled/disabled status. Requires admin privileges","inputs":[{"name":"filter","type":"string","required":false,"description":"Filter apps by status: \"all\", \"enabled\", or \"disabled\" (default: all)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"get_app_info","title":"Get App Info","description":"Get detailed information about a specific Nextcloud app. Requires admin privileges","inputs":[{"name":"appId","type":"string","required":true,"description":"The app ID (e.g., \"tasks\", \"deck\", \"photos\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":46},{"name":"enable_app","title":"Enable App","description":"Enable a disabled Nextcloud app. Requires admin privileges","inputs":[{"name":"appId","type":"string","required":true,"description":"The app ID to enable (e.g., \"tasks\", \"deck\", \"photos\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"disable_app","title":"Disable App","description":"Disable an enabled Nextcloud app (preserves data but removes functionality). Requires admin privileges","inputs":[{"name":"appId","type":"string","required":true,"description":"The app ID to disable (e.g., \"tasks\", \"deck\", \"photos\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"install_app","title":"Install App","description":"Install a Nextcloud app from the App Store via occ app:install","inputs":[{"name":"appId","type":"string","required":true,"description":"App ID to install (e.g. \"tasks\", \"calendar\", \"mail\")"},{"name":"keepDisabled","type":"boolean","required":false,"description":"Install but keep the app disabled"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"uninstall_app","title":"Uninstall App","description":"Remove a Nextcloud app via occ app:remove","inputs":[{"name":"appId","type":"string","required":true,"description":"App ID to remove (e.g. \"tasks\")"},{"name":"keepData","type":"boolean","required":false,"description":"Keep app data after removal"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"get_file_tags","title":"Get File Tags","description":"Get the personal tags assigned to a file or folder in Nextcloud","inputs":[{"name":"path","type":"string","required":true,"description":"The file or folder path in Nextcloud (e.g., '/Photos/test.png')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":46},{"name":"set_file_tags","title":"Set File Tags","description":"Set personal tags on a file or folder in Nextcloud. Replaces all existing personal tags. Use an empty array to clear all tags.","inputs":[{"name":"path","type":"string","required":true,"description":"The file or folder path in Nextcloud (e.g., '/Photos/test.png')"},{"name":"tags","type":"array","required":true,"description":"Array of tag names to set (e.g., ['Wallpapers', 'Nature'])"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":83},{"name":"list_system_tags","title":"List System Tags","description":"List all available system tags in Nextcloud with their IDs, names, and properties. Use this to find tag IDs before assigning them to files.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":38},{"name":"create_system_tag","title":"Create System Tag","description":"Create a new system tag in Nextcloud. Returns the created tag info.","inputs":[{"name":"name","type":"string","required":true,"description":"The name for the new system tag"},{"name":"userAssignable","type":"boolean","required":false,"description":"Whether users can assign this tag (default: true)"},{"name":"userVisible","type":"boolean","required":false,"description":"Whether the tag is visible to users (default: true)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":75},{"name":"assign_system_tag","title":"Assign System Tag","description":"Assign a system tag to a file by file ID and tag ID. Use get_file_info to obtain the file ID.","inputs":[{"name":"fileId","type":"number","required":true,"description":"The Nextcloud file ID"},{"name":"tagId","type":"number","required":true,"description":"The system tag ID to assign"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"remove_system_tag","title":"Remove System Tag","description":"Remove a system tag from a file by file ID and tag ID","inputs":[{"name":"fileId","type":"number","required":true,"description":"The Nextcloud file ID"},{"name":"tagId","type":"number","required":true,"description":"The system tag ID to remove"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"unified_search","title":"Unified Search","description":"Search across all Nextcloud apps (files, calendar, contacts, mail, notes, etc.) using Unified Search. Optionally filter by a specific provider ID. Without a provider, searches the top providers in parallel.","inputs":[{"name":"cursor","type":"string","required":false,"description":"Pagination cursor returned from a previous search"},{"name":"limit","type":"number","required":false,"description":"Maximum results per provider (default: 5)"},{"name":"provider","type":"string","required":false,"description":"Search a specific provider by ID (e.g. \"files\", \"calendar\", \"contacts\"). Omit to search across all providers."},{"name":"query","type":"string","required":true,"description":"The search query"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":124},{"name":"list_search_providers","title":"List Search Providers","description":"List all available Unified Search providers in Nextcloud. Use this to discover provider IDs for targeted searches with unified_search.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"list_users","title":"List Users","description":"List all users in the Nextcloud instance. Requires admin or sub-admin privileges","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum number of users to return"},{"name":"offset","type":"number","required":false,"description":"Offset for pagination"},{"name":"search","type":"string","required":false,"description":"Search/filter string for user IDs"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"get_user_info","title":"Get User Info","description":"Get detailed information about a specific Nextcloud user. Non-admin users can only query their own user ID","inputs":[{"name":"userId","type":"string","required":true,"description":"The user ID (login name) to get information about"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"enable_user","title":"Enable User","description":"Enable a disabled Nextcloud user account. Requires admin privileges","inputs":[{"name":"userId","type":"string","required":true,"description":"The user ID (login name) to enable"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"disable_user","title":"Disable User","description":"Disable a Nextcloud user account (prevents login but preserves data). Requires admin privileges","inputs":[{"name":"userId","type":"string","required":true,"description":"The user ID (login name) to disable"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"list_groups","title":"List Groups","description":"List all groups in the Nextcloud instance. Requires admin or sub-admin privileges","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum number of groups to return"},{"name":"offset","type":"number","required":false,"description":"Offset for pagination"},{"name":"search","type":"string","required":false,"description":"Search/filter string for group names"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"get_group_info","title":"Get Group Info","description":"Get detailed information about a specific Nextcloud group. Requires admin or sub-admin privileges","inputs":[{"name":"groupId","type":"string","required":true,"description":"The group ID (name) to get information about"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"add_user_to_group","title":"Add User to Group","description":"Add a Nextcloud user to a group. Requires admin privileges","inputs":[{"name":"groupId","type":"string","required":true,"description":"The group ID (name) to add the user to"},{"name":"userId","type":"string","required":true,"description":"The user ID (login name) to add to the group"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"remove_user_from_group","title":"Remove User from Group","description":"Remove a Nextcloud user from a group. Requires admin privileges","inputs":[{"name":"groupId","type":"string","required":true,"description":"The group ID (name) to remove the user from"},{"name":"userId","type":"string","required":true,"description":"The user ID (login name) to remove from the group"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"list_shares","title":"List Shares","description":"List file shares in Nextcloud (for diagnostics and security auditing)","inputs":[{"name":"path","type":"string","required":false,"description":"Filter shares for a specific file/folder path"},{"name":"reshares","type":"boolean","required":false,"description":"Include reshares (default: false)"},{"name":"subfiles","type":"boolean","required":false,"description":"Show shares for all files in a folder (requires path)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":72},{"name":"create_share","title":"Create Share","description":"Create a file or folder share in Nextcloud","inputs":[{"name":"expireDate","type":"string","required":false,"description":"Expiration date (YYYY-MM-DD)"},{"name":"hideDownload","type":"boolean","required":false,"description":"Hide download button for public link shares"},{"name":"label","type":"string","required":false,"description":"Label for public link shares"},{"name":"note","type":"string","required":false,"description":"Note to the share recipient"},{"name":"password","type":"string","required":false,"description":"Password-protect the share"},{"name":"path","type":"string","required":true,"description":"File or folder path to share"},{"name":"permissions","type":"number","required":false,"description":"Permission bitmask: 1=read, 2=update, 4=create, 8=delete, 16=share"},{"name":"shareType","type":"number","required":true,"description":"Share type: 0=user, 1=group, 3=public link, 4=email, 6=federated"},{"name":"shareWith","type":"string","required":false,"description":"Recipient (required for user/group/email/federated; omit for public link)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":189},{"name":"update_share","title":"Update Share","description":"Update an existing share in Nextcloud","inputs":[{"name":"expireDate","type":"string","required":false,"description":"Expiration date (YYYY-MM-DD)"},{"name":"hideDownload","type":"boolean","required":false,"description":"Hide download button for public link shares"},{"name":"label","type":"string","required":false,"description":"Label for public link shares"},{"name":"note","type":"string","required":false,"description":"Note to the share recipient"},{"name":"password","type":"string","required":false,"description":"Password-protect the share"},{"name":"permissions","type":"number","required":false,"description":"Permission bitmask: 1=read, 2=update, 4=create, 8=delete, 16=share"},{"name":"shareId","type":"number","required":true,"description":"The share ID to update"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":129},{"name":"delete_share","title":"Delete Share","description":"Delete a share in Nextcloud","inputs":[{"name":"shareId","type":"number","required":true,"description":"The share ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"get_share","title":"Get Share","description":"Get detailed information about a specific share by its ID","inputs":[{"name":"shareId","type":"number","required":true,"description":"The share ID to retrieve"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"list_shares_with_me","title":"List Shares With Me","description":"List all files and folders shared with the current user","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":22},{"name":"search_sharees","title":"Search Share Recipients","description":"Search for valid share recipients (users, groups, emails, federated users, circles, rooms)","inputs":[{"name":"itemType","type":"string","required":false,"description":"Item type (default: file)"},{"name":"search","type":"string","required":true,"description":"Search query for recipient name/email"},{"name":"shareTypes","type":"array","required":false,"description":"Share types to include: 0=user, 1=group, 3=public, 4=email, 6=federated, 7=circle, 10=room (default: [0,1,3,4,6])"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":115},{"name":"list_pending_shares","title":"List Pending Shares","description":"List pending federated/remote shares waiting to be accepted or declined","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":24},{"name":"accept_pending_share","title":"Accept Pending Share","description":"Accept a pending federated/remote share","inputs":[{"name":"shareId","type":"number","required":true,"description":"The pending share ID to accept"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"decline_pending_share","title":"Decline Pending Share","description":"Decline a pending federated/remote share","inputs":[{"name":"shareId","type":"number","required":true,"description":"The pending share ID to decline"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"get_out_of_office","title":"Get Out-of-Office Status","description":"Get a user's current out-of-office / absence status (NC 28+)","inputs":[{"name":"userId","type":"string","required":false,"description":"User ID to check (defaults to the configured Nextcloud user)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"set_out_of_office","title":"Set Out-of-Office Status","description":"Set an out-of-office / absence period with status message (NC 28+)","inputs":[{"name":"firstDay","type":"string","required":true,"description":"First day of absence (YYYY-MM-DD)"},{"name":"lastDay","type":"string","required":true,"description":"Last day of absence (YYYY-MM-DD)"},{"name":"message","type":"string","required":true,"description":"Detailed absence message shown to others"},{"name":"replacementUserId","type":"string","required":false,"description":"User ID of the replacement/delegate during absence"},{"name":"status","type":"string","required":true,"description":"Short status label (e.g. \"Vacation\", \"Sick leave\")"},{"name":"userId","type":"string","required":false,"description":"User ID to set absence for (defaults to the configured Nextcloud user)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":134},{"name":"clear_out_of_office","title":"Clear Out-of-Office Status","description":"Clear a user's out-of-office / absence status (NC 28+)","inputs":[{"name":"userId","type":"string","required":false,"description":"User ID to clear absence for (defaults to the configured Nextcloud user)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"list_trash","title":"List Trash","description":"List files in the trash / recycle bin","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":18},{"name":"restore_from_trash","title":"Restore from Trash","description":"Restore a file from the trash to its original location (use the Key from list_trash)","inputs":[{"name":"trashKey","type":"string","required":true,"description":"The trash item key (from the Key field in list_trash output)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"empty_trash","title":"Empty Trash","description":"Permanently delete all files in the trash (cannot be undone)","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":22},{"name":"list_file_versions","title":"List File Versions","description":"List previous versions of a file (use get_file_info to find the fileId)","inputs":[{"name":"fileId","type":"number","required":true,"description":"The Nextcloud internal file ID (from get_file_info)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"restore_file_version","title":"Restore File Version","description":"Restore a previous version of a file (creates a new current version from the old one)","inputs":[{"name":"fileId","type":"number","required":true,"description":"The Nextcloud internal file ID"},{"name":"versionId","type":"string","required":true,"description":"The version identifier (from list_file_versions output)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":58},{"name":"aiquila_show_config","title":"Show AIquila Configuration","description":"Show current AIquila configuration","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":16},{"name":"aiquila_configure","title":"Configure AIquila","description":"Configure AIquila settings (API key, model, tokens, timeout, effort and thinking for chat and background tasks)","inputs":[{"name":"apiKey","type":"string","required":false,"description":"Anthropic API key"},{"name":"effort","type":"string","required":false,"description":"Default effort level; empty string resets to the model default"},{"name":"maxTokens","type":"number","required":false,"description":"Maximum tokens for responses (default: 4096)"},{"name":"model","type":"string","required":false,"description":"Claude model to use (e.g., 'claude-fable-5-1', 'claude-opus-5-5', 'claude-opus-5', 'claude-sonnet-5')"},{"name":"taskEffort","type":"string","required":false,"description":"Effort for Assistant tasks and coworkers; empty string uses the default effort"},{"name":"taskThinking","type":"string","required":false,"description":"Thinking for Assistant tasks and coworkers; empty string uses the default thinking"},{"name":"thinking","type":"string","required":false,"description":"Default thinking: 'auto' follows the model (Fable, Opus 5.x and Sonnet 5 think on their own), 'on' or 'off'. Fable and Opus 5.5 always think."},{"name":"timeout","type":"number","required":false,"description":"Request timeout in seconds (default: 60)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":244},{"name":"aiquila_test","title":"Test AIquila Claude Integration","description":"Test AIquila Claude API integration with a simple prompt","inputs":[{"name":"prompt","type":"string","required":false,"description":"Test prompt to send to Claude API"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"check_core_integrity","title":"Check Core Integrity","description":"Verify Nextcloud core system integrity by checking file signatures against the official release","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":25},{"name":"check_app_integrity","title":"Check App Integrity","description":"Verify integrity of a specific Nextcloud app by checking file signatures against its official release","inputs":[{"name":"appId","type":"string","required":true,"description":"The app ID to check (e.g., \"tasks\", \"deck\", \"photos\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"run_occ","title":"Run OCC Command","description":"Execute an allowlisted Nextcloud OCC command on the server and return the output. Only command and argument combinations in the allowlist may be run (configurable via MCP_OCC_ALLOWLIST env var). The default allows read-only commands only: status, app:list, setupchecks, integrity:check-core, integrity:check-app, user:list, user:info and group:list with any arguments; update:check, maintenance:mode and theming:config without arguments.","inputs":[{"name":"args","type":"array","required":false,"description":"Optional arguments for the command (e.g., [\"--shipped=false\", \"--output=json\"])"},{"name":"command","type":"string","required":true,"description":"The OCC command to execute (e.g., \"app:list\", \"config:list\", \"setupchecks\")"},{"name":"timeout","type":"number","required":false,"description":"Timeout in seconds (default: 120, max: 600)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":173},{"name":"list_projects","title":"List Projects","description":"List all AIquila projects for the current user. Projects bundle files/directories with an optional system prompt.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"create_project","title":"Create Project","description":"Create a new AIquila project. Projects bundle files/directories with an optional system prompt that gets injected into conversations.","inputs":[{"name":"description","type":"string","required":false,"description":"Project description"},{"name":"systemPrompt","type":"string","required":false,"description":"System prompt to inject into conversations using this project"},{"name":"title","type":"string","required":true,"description":"Project title (required)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"get_project","title":"Get Project","description":"Get details of an AIquila project including its file/directory paths.","inputs":[{"name":"id","type":"number","required":true,"description":"Project ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":31},{"name":"update_project","title":"Update Project","description":"Update an AIquila project. Only provided fields are updated.","inputs":[{"name":"description","type":"string","required":false,"description":"New project description"},{"name":"id","type":"number","required":true,"description":"Project ID"},{"name":"systemPrompt","type":"string","required":false,"description":"New system prompt for conversations using this project"},{"name":"title","type":"string","required":false,"description":"New project title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"delete_project","title":"Delete Project","description":"Delete an AIquila project. Associated paths are removed and conversations referencing it are unlinked.","inputs":[{"name":"id","type":"number","required":true,"description":"Project ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"add_project_path","title":"Add Project Path","description":"Add a file or directory path to an AIquila project.","inputs":[{"name":"id","type":"number","required":true,"description":"Project ID"},{"name":"path","type":"string","required":true,"description":"File or directory path to add"},{"name":"pathType","type":"string","required":false,"description":"Type of path: \"file\" or \"directory\""}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"remove_project_path","title":"Remove Project Path","description":"Remove a file or directory path from an AIquila project.","inputs":[{"name":"id","type":"number","required":true,"description":"Project ID"},{"name":"pathId","type":"number","required":true,"description":"Path ID to remove"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"list_coworkers","title":"List Coworkers","description":"List the current user's coworkers (persistent scheduled AI tasks) with their status, provider, schedule and last run.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"list_coworker_templates","title":"List Coworker Templates","description":"List built-in coworker templates (e.g. image classification via Claude vision or Mistral Pixtral) and available task types.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"get_coworker","title":"Get Coworker","description":"Get a single coworker by ID, including its schedule, last run status, full options and prompt.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"create_coworker","title":"Create Coworker","description":"Create a coworker. Provide templateId to start from a built-in template (e.g. \"classify-images-claude\" or \"classify-images-mistral\"), and/or explicit fields to configure a custom one. Fields override template defaults.","inputs":[{"name":"cronSchedule","type":"string","required":false,"description":"5-field cron, e.g. \"0 3 * * *\""},{"name":"description","type":"string","required":false,"description":"Free-text description"},{"name":"effort","type":"string","required":false,"description":"Reasoning effort, e.g. \"low\"; \"\" uses the default"},{"name":"inputPath","type":"string","required":false,"description":"Folder to process, e.g. \"/Photos\""},{"name":"isActive","type":"boolean","required":false,"description":"Whether the coworker is enabled"},{"name":"maxTags","type":"number","required":false,"description":"Max tags per image (vision:classify)"},{"name":"model","type":"string","required":false,"description":"Model id to run with; omit to use the provider's default"},{"name":"options","type":"object","required":false,"description":"Task-specific options, e.g. {\"targetLanguage\":\"de\"} for docs:translate. Typed fields above take precedence"},{"name":"outputPath","type":"string","required":false,"description":"Output file or folder when outputType needs one"},{"name":"outputType","type":"string","required":false,"description":"Where results go, e.g. \"system_tags\" (default) or \"file\""},{"name":"prompt","type":"string","required":false,"description":"Custom prompt the coworker runs (agent coworkers, needs a recent AIquila app)"},{"name":"promptId","type":"number","required":false,"description":"Id of a saved prompt to run instead of `prompt`"},{"name":"provider","type":"string","required":false,"description":"Provider id: \"anthropic\", \"mistral\", \"deepseek\", \"hetzner\" or \"local\"; \"\" follows the owner setting"},{"name":"recursive","type":"boolean","required":false,"description":"Include sub-folders"},{"name":"taskType","type":"string","required":false,"description":"Task type id, e.g. \"vision:classify\""},{"name":"templateId","type":"string","required":false,"description":"Built-in template id (see list_coworker_templates)"},{"name":"thinking","type":"string","required":false,"description":"Extended thinking for models that support it"},{"name":"title","type":"string","required":false,"description":null},{"name":"tools","type":"array","required":false,"description":"Allowlist of MCP tool names an agent coworker may call on its unattended runs; [] allows none"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":434},{"name":"update_coworker","title":"Update Coworker","description":"Update a coworker's configuration (title, description, provider, input/output, schedule, prompt, tool allowlist, options). Only the given fields change; option changes are merged into the existing options.","inputs":[{"name":"cronSchedule","type":"string","required":false,"description":"5-field cron, e.g. \"0 3 * * *\""},{"name":"description","type":"string","required":false,"description":"Free-text description"},{"name":"effort","type":"string","required":false,"description":"Reasoning effort, e.g. \"low\"; \"\" uses the default"},{"name":"id","type":"number","required":true,"description":"Coworker ID"},{"name":"inputPath","type":"string","required":false,"description":"Folder to process, e.g. \"/Photos\""},{"name":"isActive","type":"boolean","required":false,"description":"Whether the coworker is enabled"},{"name":"maxTags","type":"number","required":false,"description":"Max tags per image (vision:classify)"},{"name":"model","type":"string","required":false,"description":"Model id to run with; omit to use the provider's default"},{"name":"options","type":"object","required":false,"description":"Task-specific options, e.g. {\"targetLanguage\":\"de\"} for docs:translate. Typed fields above take precedence"},{"name":"outputPath","type":"string","required":false,"description":"Output file or folder when outputType needs one"},{"name":"outputType","type":"string","required":false,"description":"Where results go, e.g. \"system_tags\" (default) or \"file\""},{"name":"prompt","type":"string","required":false,"description":"Custom prompt the coworker runs (agent coworkers, needs a recent AIquila app)"},{"name":"promptId","type":"number","required":false,"description":"Id of a saved prompt to run instead of `prompt`"},{"name":"provider","type":"string","required":false,"description":"Provider id: \"anthropic\", \"mistral\", \"deepseek\", \"hetzner\" or \"local\"; \"\" follows the owner setting"},{"name":"recursive","type":"boolean","required":false,"description":"Include sub-folders"},{"name":"thinking","type":"string","required":false,"description":"Extended thinking for models that support it"},{"name":"title","type":"string","required":false,"description":null},{"name":"tools","type":"array","required":false,"description":"Allowlist of MCP tool names an agent coworker may call on its unattended runs; [] allows none"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":394},{"name":"set_coworker_schedule","title":"Set Coworker Schedule","description":"Change when a coworker runs. Takes a 5-field cron expression in the server's time zone and returns the next run time.","inputs":[{"name":"cronSchedule","type":"string","required":true,"description":"5-field cron: minute hour day-of-month month day-of-week, e.g. \"30 6 * * 1-5\""},{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":86},{"name":"delete_coworker","title":"Delete Coworker","description":"Delete a coworker and its run history.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":31},{"name":"enable_coworker","title":"Enable Coworker","description":"Enable a coworker so it runs on its schedule.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"disable_coworker","title":"Disable Coworker","description":"Disable a coworker so it stops running on its schedule.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"pause_coworker","title":"Pause Coworker","description":"Temporarily pause a coworker without disabling it.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"resume_coworker","title":"Resume Coworker","description":"Resume a paused coworker.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"run_coworker","title":"Run Coworker","description":"Run a coworker immediately (synchronously) and return the run result.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"stop_coworker","title":"Stop Coworker Run","description":"Stop a coworker's in-flight run (running or pending batch) and mark it cancelled. The schedule is untouched — use pause_coworker or disable_coworker to stop future runs.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"get_coworker_runs","title":"Get Coworker Runs","description":"Get recent run history (progress, status, summary) for a coworker. Use get_coworker_run for the full summary and log of one run.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"},{"name":"limit","type":"number","required":false,"description":"Max runs to return (default 20)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":71},{"name":"get_coworker_run","title":"Get Coworker Run","description":"Get one coworker run in full: status, duration, complete summary, error and its per-item log.","inputs":[{"name":"id","type":"number","required":true,"description":"Coworker ID"},{"name":"runId","type":"number","required":true,"description":"Run ID (see get_coworker_runs)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"list_calendars","title":"List Calendars","description":"List all calendars available to the current user, including their supported component types (events, tasks, journals) and metadata.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"list_events","title":"List Calendar Events","description":"List events from a Nextcloud calendar within an optional time range. Returns event details including time, location, attendees, recurrence, and UIDs.","inputs":[{"name":"calendarName","type":"string","required":true,"description":"The calendar name. Use list_calendars to find available calendar names."},{"name":"from","type":"string","required":false,"description":"Start of time range (ISO 8601, e.g. 2026-04-12 or 2026-04-12T09:00:00Z). Defaults to today."},{"name":"limit","type":"number","required":false,"description":"Maximum number of events to return (default: 50)"},{"name":"to","type":"string","required":false,"description":"End of time range (ISO 8601, e.g. 2026-04-12 or 2026-04-12T09:00:00Z). Defaults to 30 days from now."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":173},{"name":"get_event","title":"Get Calendar Event","description":"Get detailed information about a single calendar event by its UID, including full description, attendees, and recurrence rules.","inputs":[{"name":"calendarName","type":"string","required":true,"description":"The calendar name. Use list_calendars to find available calendar names."},{"name":"uid","type":"string","required":true,"description":"The UID of the event"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":64},{"name":"create_event","title":"Create Calendar Event","description":"Create a new calendar event in Nextcloud with date/time, location, description, attendees, and optional recurrence.","inputs":[{"name":"accessClass","type":"string","required":false,"description":"Event visibility classification"},{"name":"alarm","type":"number","required":false,"description":"Single reminder in minutes before the event (e.g. 15 for 15 min before). For multiple reminders use alarms[]."},{"name":"alarms","type":"array","required":false,"description":"Multiple reminders in minutes before the event (e.g. [1440, 60] for 1 day and 1 hour before). Combined with alarm if both are set."},{"name":"attendees","type":"array","required":false,"description":"List of attendees"},{"name":"calendarName","type":"string","required":true,"description":"The calendar name. Use list_calendars to find available calendar names."},{"name":"categories","type":"array","required":false,"description":"Tags/categories"},{"name":"description","type":"string","required":false,"description":"Event description"},{"name":"dtend","type":"string","required":false,"description":"End date/time. For all-day events, this is the exclusive end date (day after last day). If omitted, defaults to 1 hour after start (timed) or next day (all-day)."},{"name":"dtstart","type":"string","required":true,"description":"Start date/time in YYYYMMDD (all-day) or YYYYMMDDTHHmmssZ (timed) format"},{"name":"location","type":"string","required":false,"description":"Event location"},{"name":"rrule","type":"string","required":false,"description":"Recurrence rule (e.g. 'FREQ=WEEKLY;BYDAY=MO,WE,FR' or 'FREQ=MONTHLY;COUNT=12')"},{"name":"status","type":"string","required":false,"description":"Event status (default: CONFIRMED)"},{"name":"summary","type":"string","required":true,"description":"The event title"},{"name":"transp","type":"string","required":false,"description":"Time transparency for free/busy (OPAQUE = busy, TRANSPARENT = free)"},{"name":"tzid","type":"string","required":false,"description":"IANA time zone (e.g. \"Europe/Berlin\"). When set, a VTIMEZONE block is emitted and dtstart/dtend use TZID instead of UTC. Required for reliable iOS Calendar and Thunderbird CalDAV sync of timed events…"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":421},{"name":"update_event","title":"Update Calendar Event","description":"Update an existing calendar event's fields by UID. Uses CalDAV ETag-based optimistic concurrency.","inputs":[{"name":"accessClass","type":"string","required":false,"description":"New classification"},{"name":"alarm","type":"number|null","required":false,"description":"Single reminder in minutes before the event, or null to remove all existing alarms. For multiple reminders use alarms[]."},{"name":"alarms","type":"array","required":false,"description":"Multiple reminders in minutes before the event (e.g. [1440, 60]). Replaces existing alarms; combined with alarm if both are set."},{"name":"attendees","type":null,"required":false,"description":"Replace attendees list, or null to remove all attendees"},{"name":"calendarName","type":"string","required":true,"description":"The calendar name. Use list_calendars to find available calendar names."},{"name":"categories","type":"array","required":false,"description":"Replace all tags with these"},{"name":"description","type":"string|null","required":false,"description":"New description, or null to remove"},{"name":"dtend","type":null,"required":false,"description":"New end date/time, or null to remove"},{"name":"dtstart","type":"string","required":false,"description":"New start date/time (YYYYMMDD or YYYYMMDDTHHmmssZ)"},{"name":"location","type":"string|null","required":false,"description":"New location, or null to remove"},{"name":"rrule","type":null,"required":false,"description":"New recurrence rule, or null to remove"},{"name":"status","type":"string","required":false,"description":"New status"},{"name":"summary","type":"string","required":false,"description":"New event title"},{"name":"transp","type":"string","required":false,"description":"New transparency"},{"name":"tzid","type":"string","required":false,"description":"IANA time zone (e.g. \"Europe/Berlin\") for the updated dtstart/dtend. When set, a VTIMEZONE block is added (if missing) and DTSTART/DTEND use TZID instead of UTC. Required for iOS/Thunderbird CalDAV s…"},{"name":"uid","type":"string","required":true,"description":"The UID of the event to update"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":345},{"name":"delete_event","title":"Delete Calendar Event","description":"Delete a calendar event from Nextcloud by UID. This action is irreversible.","inputs":[{"name":"calendarName","type":"string","required":true,"description":"The calendar name. Use list_calendars to find available calendar names."},{"name":"uid","type":"string","required":true,"description":"The UID of the event to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"list_task_lists","title":"List Task Lists","description":"List all task lists in Nextcloud Tasks (calendars that support tasks). Returns each list's display name, color, URL and calendarName (the value to pass to the other task tools). Set detailed for supported component types and the CTag.","inputs":[{"name":"detailed","type":"boolean","required":false,"description":"Also include the component types each list supports (events, tasks, journals) and its CTag sync token (default false)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":91},{"name":"list_tasks","title":"List Tasks","description":"List tasks from a Nextcloud Tasks calendar. Returns task details including status, priority, dates, tags, and UIDs.","inputs":[{"name":"calendarName","type":"string","required":false,"description":"The calendar/task list name (default: 'tasks')"},{"name":"status","type":"string","required":false,"description":"Filter tasks by status"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"create_task","title":"Create Task","description":"Create a new task in Nextcloud Tasks with optional due date, start date, tags, location, and subtask relationships.","inputs":[{"name":"calendarName","type":"string","required":false,"description":"The calendar name (default: 'tasks')"},{"name":"categories","type":"array","required":false,"description":"Tags/categories (e.g. ['work', 'urgent'])"},{"name":"classification","type":"string","required":false,"description":"Task visibility classification"},{"name":"description","type":"string","required":false,"description":"Detailed description of the task"},{"name":"dtstart","type":"string","required":false,"description":"Start date in YYYYMMDD or YYYYMMDDTHHmmssZ format"},{"name":"due","type":"string","required":false,"description":"Due date in YYYYMMDD or YYYYMMDDTHHmmssZ format (e.g. '20240315' or '20240315T140000Z')"},{"name":"location","type":"string","required":false,"description":"Location string"},{"name":"percentComplete","type":"number","required":false,"description":"Completion percentage (0-100)"},{"name":"priority","type":"number","required":false,"description":"Task priority (0=undefined, 1=highest, 5=medium, 9=lowest)"},{"name":"relatedTo","type":"string","required":false,"description":"Parent task UID (creates a subtask relationship)"},{"name":"summary","type":"string","required":true,"description":"The task summary/title"},{"name":"url","type":"string","required":false,"description":"Custom URL reference"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":241},{"name":"update_task","title":"Update Task","description":"Update an existing task's fields by UID. Uses CalDAV ETag-based optimistic concurrency.","inputs":[{"name":"calendarName","type":"string","required":false,"description":"The calendar name (default: 'tasks')"},{"name":"categories","type":"array","required":false,"description":"Replace all tags with these"},{"name":"classification","type":"string","required":false,"description":"New classification"},{"name":"description","type":"string","required":false,"description":"New description"},{"name":"dtstart","type":null,"required":false,"description":"New start date, or null to remove"},{"name":"due","type":null,"required":false,"description":"New due date (YYYYMMDD or YYYYMMDDTHHmmssZ), or null to remove"},{"name":"location","type":"string|null","required":false,"description":"New location, or null to remove"},{"name":"percentComplete","type":"number","required":false,"description":"New completion percentage"},{"name":"pinned","type":"boolean","required":false,"description":"Pin or unpin the task"},{"name":"priority","type":"number","required":false,"description":"New priority (0-9, 0 removes priority)"},{"name":"relatedTo","type":"string|null","required":false,"description":"New parent UID, or null to remove parent"},{"name":"status","type":"string","required":false,"description":"New status"},{"name":"summary","type":"string","required":false,"description":"New task title"},{"name":"uid","type":"string","required":true,"description":"The UID of the task to update"},{"name":"url","type":"string|null","required":false,"description":"New URL, or null to remove"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":234},{"name":"delete_task","title":"Delete Task","description":"Delete a task from Nextcloud Tasks by UID. This action is irreversible.","inputs":[{"name":"calendarName","type":"string","required":false,"description":"The calendar name (default: 'tasks')"},{"name":"uid","type":"string","required":true,"description":"The UID of the task to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"complete_task","title":"Complete Task","description":"Mark a task as completed or reopen it. Sets STATUS, PERCENT-COMPLETE, and COMPLETED date atomically.","inputs":[{"name":"calendarName","type":"string","required":false,"description":"The calendar name (default: 'tasks')"},{"name":"completed","type":"boolean","required":false,"description":"true = mark completed, false = reopen (default: true)"},{"name":"uid","type":"string","required":true,"description":"The UID of the task"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":80},{"name":"list_address_books","title":"List Address Books","description":"List all address books available to the current user, including their display names and metadata.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":26},{"name":"list_contacts","title":"List Contacts","description":"List contacts from a Nextcloud address book. Optionally search by name. Returns name, email, phone, organization, and UID for each contact.","inputs":[{"name":"addressBookName","type":"string","required":false,"description":"The address book name (default: 'contacts')"},{"name":"limit","type":"number","required":false,"description":"Maximum number of contacts to return (default: 50)"},{"name":"search","type":"string","required":false,"description":"Search term to filter contacts by name (case-insensitive contains match)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":94},{"name":"get_contact","title":"Get Contact","description":"Get detailed information about a single contact by its UID, including all properties like name, email, phone, address, organization, birthday, notes, and groups.","inputs":[{"name":"addressBookName","type":"string","required":false,"description":"The address book name (default: 'contacts')"},{"name":"uid","type":"string","required":true,"description":"The UID of the contact"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":70},{"name":"create_contact","title":"Create Contact","description":"Create a new contact in a Nextcloud address book with name, email, phone, address, organization, and other properties.","inputs":[{"name":"addressBookName","type":"string","required":false,"description":"The address book name (default: 'contacts')"},{"name":"addresses","type":"array","required":false,"description":"Physical addresses"},{"name":"birthday","type":"string","required":false,"description":"Birthday in YYYY-MM-DD or YYYYMMDD format"},{"name":"categories","type":"array","required":false,"description":"Groups/categories for the contact"},{"name":"emails","type":"array","required":false,"description":"Email addresses"},{"name":"firstName","type":"string","required":false,"description":"First/given name"},{"name":"fullName","type":"string","required":true,"description":"The contact's full display name (required)"},{"name":"lastName","type":"string","required":false,"description":"Last/family name"},{"name":"note","type":"string","required":false,"description":"Notes about the contact"},{"name":"org","type":"string","required":false,"description":"Organization name"},{"name":"phones","type":"array","required":false,"description":"Phone numbers"},{"name":"prefix","type":"string","required":false,"description":"Name prefix (e.g. Dr., Mr.)"},{"name":"suffix","type":"string","required":false,"description":"Name suffix (e.g. Jr., III)"},{"name":"title","type":"string","required":false,"description":"Job title"},{"name":"url","type":"string","required":false,"description":"Website URL"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":217},{"name":"update_contact","title":"Update Contact","description":"Update an existing contact's fields by UID. Uses CardDAV ETag-based optimistic concurrency. Only provided fields are changed.","inputs":[{"name":"addressBookName","type":"string","required":false,"description":"The address book name (default: 'contacts')"},{"name":"addresses","type":"array","required":false,"description":"Replace all addresses with these"},{"name":"birthday","type":"string|null","required":false,"description":"New birthday (YYYY-MM-DD or YYYYMMDD), or null to remove"},{"name":"categories","type":"array","required":false,"description":"Replace all groups/categories with these"},{"name":"emails","type":"array","required":false,"description":"Replace all emails with these"},{"name":"firstName","type":"string|null","required":false,"description":"New first name, or null to clear"},{"name":"fullName","type":"string","required":false,"description":"New full display name"},{"name":"lastName","type":"string|null","required":false,"description":"New last name, or null to clear"},{"name":"note","type":"string|null","required":false,"description":"New notes, or null to remove"},{"name":"org","type":"string|null","required":false,"description":"New organization, or null to remove"},{"name":"phones","type":"array","required":false,"description":"Replace all phone numbers with these"},{"name":"title","type":"string|null","required":false,"description":"New job title, or null to remove"},{"name":"uid","type":"string","required":true,"description":"The UID of the contact to update"},{"name":"url","type":"string|null","required":false,"description":"New website URL, or null to remove"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":245},{"name":"delete_contact","title":"Delete Contact","description":"Delete a contact from a Nextcloud address book by UID. This action is irreversible.","inputs":[{"name":"addressBookName","type":"string","required":false,"description":"The address book name (default: 'contacts')"},{"name":"uid","type":"string","required":true,"description":"The UID of the contact to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":57},{"name":"list_notes","title":"List Notes","description":"List all notes in Nextcloud Notes. Returns id, title, category, favorite flag, and modification date.","inputs":[{"name":"category","type":"string","required":false,"description":"Filter by category"},{"name":"search","type":"string","required":false,"description":"Filter notes by title (client-side)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":54},{"name":"get_note","title":"Get Note","description":"Get the full content of a note by its ID.","inputs":[{"name":"id","type":"integer","required":true,"description":"Note ID (from list_notes)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"create_note","title":"Create Note","description":"Create a new note in Nextcloud Notes.","inputs":[{"name":"category","type":"string","required":false,"description":"Category (maps to a subfolder)"},{"name":"content","type":"string","required":true,"description":"Content of the note (Markdown)"},{"name":"favorite","type":"boolean","required":false,"description":"Mark as favorite"},{"name":"title","type":"string","required":true,"description":"Title of the note"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"update_note","title":"Update Note","description":"Update an existing note. Provide only the fields you want to change.","inputs":[{"name":"category","type":"string","required":false,"description":"New category"},{"name":"content","type":"string","required":false,"description":"New content (Markdown)"},{"name":"favorite","type":"boolean","required":false,"description":"Favorite flag"},{"name":"id","type":"integer","required":true,"description":"Note ID (from list_notes)"},{"name":"title","type":"string","required":false,"description":"New title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":73},{"name":"delete_note","title":"Delete Note","description":"Delete a note by its ID.","inputs":[{"name":"id","type":"integer","required":true,"description":"Note ID (from list_notes)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"list_feeds","title":"List News Feeds","description":"List all RSS feeds subscribed in the Nextcloud News app, with unread counts.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":25},{"name":"add_feed","title":"Add News Feed","description":"Subscribe to a new RSS feed by URL, optionally placing it in a folder.","inputs":[{"name":"folderId","type":"number","required":false,"description":"Folder ID to place the feed in (omit for root)"},{"name":"url","type":"string","required":true,"description":"The RSS/Atom feed URL to subscribe to"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"delete_feed","title":"Delete News Feed","description":"Delete (unsubscribe from) a feed and all its items.","inputs":[{"name":"feedId","type":"number","required":true,"description":"The feed ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"move_feed","title":"Move News Feed","description":"Move a feed into a different folder.","inputs":[{"name":"feedId","type":"number","required":true,"description":"The feed ID to move"},{"name":"folderId","type":"number","required":true,"description":"Destination folder ID (0 for root)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"rename_feed","title":"Rename News Feed","description":"Rename a feed.","inputs":[{"name":"feedId","type":"number","required":true,"description":"The feed ID to rename"},{"name":"feedTitle","type":"string","required":true,"description":"The new feed title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"mark_feed_read","title":"Mark Feed as Read","description":"Mark all items in a feed as read up to (and including) the given newest item ID.","inputs":[{"name":"feedId","type":"number","required":true,"description":"The feed ID"},{"name":"newestItemId","type":"number","required":true,"description":"Mark all items with ID <= this value as read"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"list_news_folders","title":"List News Folders","description":"List all folders used to organize feeds in the Nextcloud News app.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":24},{"name":"create_news_folder","title":"Create News Folder","description":"Create a new folder for organizing feeds in the News app.","inputs":[{"name":"name","type":"string","required":true,"description":"The folder name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":31},{"name":"rename_news_folder","title":"Rename News Folder","description":"Rename a News folder.","inputs":[{"name":"folderId","type":"number","required":true,"description":"The folder ID to rename"},{"name":"name","type":"string","required":true,"description":"The new folder name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":38},{"name":"delete_news_folder","title":"Delete News Folder","description":"Delete a News folder and all feeds it contains.","inputs":[{"name":"folderId","type":"number","required":true,"description":"The folder ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"mark_news_folder_read","title":"Mark News Folder as Read","description":"Mark all items in a folder as read up to (and including) the given newest item ID.","inputs":[{"name":"folderId","type":"number","required":true,"description":"The folder ID"},{"name":"newestItemId","type":"number","required":true,"description":"Mark all items with ID <= this value as read"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"list_news_items","title":"List News Items","description":"List news articles (items). Filter by feed, folder, starred, or all; supports pagination and read/unread filtering.","inputs":[{"name":"batchSize","type":"number","required":false,"description":"Max items to return (default 20, -1 for all)"},{"name":"getRead","type":"boolean","required":false,"description":"Include already-read items (default false)"},{"name":"id","type":"number","required":false,"description":"Feed or folder ID when type is \"feed\" or \"folder\" (default 0)"},{"name":"offset","type":"number","required":false,"description":"Return items older than this item ID (pagination)"},{"name":"oldestFirst","type":"boolean","required":false,"description":"Return oldest items first (default newest first)"},{"name":"type","type":"string","required":false,"description":"Scope of items to return (default \"all\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":143},{"name":"mark_item_read","title":"Mark News Item as Read","description":"Mark a single news item as read.","inputs":[{"name":"itemId","type":"number","required":true,"description":"The item ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"mark_item_unread","title":"Mark News Item as Unread","description":"Mark a single news item as unread.","inputs":[{"name":"itemId","type":"number","required":true,"description":"The item ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"star_item","title":"Star News Item","description":"Star (favorite) a single news item.","inputs":[{"name":"itemId","type":"number","required":true,"description":"The item ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"unstar_item","title":"Unstar News Item","description":"Remove the star from a single news item.","inputs":[{"name":"itemId","type":"number","required":true,"description":"The item ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"mark_items_read","title":"Mark News Items as Read","description":"Mark multiple news items as read in one call.","inputs":[{"name":"itemIds","type":"array","required":true,"description":"The item IDs to mark as read"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"list_mail_accounts","title":"List Mail Accounts","description":"List all configured email accounts in Nextcloud Mail. Returns account IDs, names, and email addresses.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"list_mailboxes","title":"List Mailboxes","description":"List all mailboxes (folders) for a Nextcloud Mail account. Returns mailbox names, IDs, and unread counts.","inputs":[{"name":"accountId","type":"number","required":true,"description":"The mail account ID (from list_mail_accounts)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"mail_list_messages","title":"List Mail Messages","description":"List email messages in a Nextcloud Mail mailbox. Supports pagination via cursor. Returns subject, sender, date, and message IDs.","inputs":[{"name":"cursor","type":"number","required":false,"description":"Cursor for pagination (message ID to start after)"},{"name":"filter","type":"string","required":false,"description":"Filter messages (default: all)"},{"name":"limit","type":"number","required":false,"description":"Number of messages to return (default: 20)"},{"name":"mailboxId","type":"number","required":true,"description":"The mailbox ID (from list_mailboxes)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":97},{"name":"mail_read_message","title":"Read Mail Message","description":"Read the full content of an email message by ID. Returns headers, body text, and attachment list.","inputs":[{"name":"messageId","type":"number","required":true,"description":"The message ID (from list_messages)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"mail_get_attachment","title":"Get Mail Attachment","description":"Download an email attachment by message ID and attachment ID. Returns text for text files and calendar invites (ICS), image data for images, extracted text for PDFs (requires pdftotext). Attachment IDs are shown in mail_read_message output.","inputs":[{"name":"attachmentId","type":"string","required":true,"description":"Attachment ID shown in mail_read_message (e.g. \"2\")"},{"name":"messageId","type":"number","required":true,"description":"Message ID (from mail_read_message)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":93},{"name":"mail_search_messages","title":"Search Mail Messages","description":"Search email messages across all mailboxes by subject or sender. Returns matches with message IDs usable in mail_read_message. For threaded conversations all message IDs in the thread are returned.","inputs":[{"name":"limit","type":"number","required":false,"description":"Max results (default: 10)"},{"name":"query","type":"string","required":true,"description":"Search query (matches subject and sender name)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":73},{"name":"mail_send_message","title":"Send Mail Message","description":"Send an email message through Nextcloud Mail. Requires an account ID and recipient addresses.","inputs":[{"name":"accountId","type":"number","required":true,"description":"The mail account ID to send from (from list_mail_accounts)"},{"name":"bcc","type":"array","required":false,"description":"BCC email addresses"},{"name":"body","type":"string","required":true,"description":"Email body content (plain text)"},{"name":"cc","type":"array","required":false,"description":"CC email addresses"},{"name":"isHtml","type":"boolean","required":false,"description":"Whether the body is HTML (default: false)"},{"name":"subject","type":"string","required":true,"description":"Email subject line"},{"name":"to","type":"array","required":true,"description":"Recipient email addresses"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":118},{"name":"mail_delete_message","title":"Delete Mail Message","description":"Delete an email message by ID. This typically moves it to trash.","inputs":[{"name":"messageId","type":"number","required":true,"description":"The message ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"mail_move_message","title":"Move Mail Message","description":"Move an email message to a different mailbox/folder.","inputs":[{"name":"destMailboxId","type":"number","required":true,"description":"The destination mailbox ID (from list_mailboxes)"},{"name":"messageId","type":"number","required":true,"description":"The message ID to move"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"mail_set_message_flags","title":"Set Mail Message Flags","description":"Set flags on an email message (mark as read/unread, star/unstar, mark as important or junk).","inputs":[{"name":"flags","type":"object","required":true,"description":"Flags to set on the message"},{"name":"messageId","type":"number","required":true,"description":"The message ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":57},{"name":"deck_list_boards","title":"List Deck Boards","description":"List all Deck boards. Returns id, title, owner, and label count for each board.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"deck_get_board","title":"Get Deck Board","description":"Get details of a Deck board including its labels and access control list (ACL). Use deck_list_stacks to see the columns and cards.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID (from deck_list_boards)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"deck_create_board","title":"Create Deck Board","description":"Create a new Deck board.","inputs":[{"name":"color","type":"string","required":false,"description":"Hex color without # (e.g. \"0800fd\"). Defaults to \"0800fd\""},{"name":"title","type":"string","required":true,"description":"Board title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"deck_list_stacks","title":"List Deck Stacks","description":"List all stacks (columns) of a Deck board, including the cards in each stack. This gives a full overview of the board layout.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID (from deck_list_boards)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":54},{"name":"deck_create_stack","title":"Create Deck Stack","description":"Create a new stack (column) on a Deck board.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID (from deck_list_boards)"},{"name":"order","type":"integer","required":false,"description":"Position order (0-based)"},{"name":"title","type":"string","required":true,"description":"Stack title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":58},{"name":"deck_get_card","title":"Get Deck Card","description":"Get full details of a Deck card including description, labels, and assigned users.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"cardId","type":"integer","required":true,"description":"Card ID (from deck_list_stacks)"},{"name":"stackId","type":"integer","required":true,"description":"Stack ID (from deck_list_stacks)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":67},{"name":"deck_create_card","title":"Create Deck Card","description":"Create a new card in a Deck stack.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"description","type":"string","required":false,"description":"Card description (Markdown)"},{"name":"duedate","type":"string","required":false,"description":"Due date in ISO 8601 format (e.g. 2025-12-31)"},{"name":"stackId","type":"integer","required":true,"description":"Stack ID (from deck_list_stacks)"},{"name":"title","type":"string","required":true,"description":"Card title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":92},{"name":"deck_update_card","title":"Update Deck Card","description":"Update an existing Deck card. Provide only the fields you want to change. Fetches the current card first to preserve unchanged fields.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"cardId","type":"integer","required":true,"description":"Card ID (from deck_list_stacks)"},{"name":"description","type":"string","required":false,"description":"New description (Markdown)"},{"name":"done","type":"boolean","required":false,"description":"Mark card as done"},{"name":"duedate","type":"string|null","required":false,"description":"Due date (ISO 8601) or null to clear"},{"name":"stackId","type":"integer","required":true,"description":"Stack ID (from deck_list_stacks)"},{"name":"title","type":"string","required":false,"description":"New title"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":130},{"name":"deck_move_card","title":"Move Deck Card","description":"Move a card to a different stack (column) on the same board. This is the core kanban action for changing card status.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"cardId","type":"integer","required":true,"description":"Card ID"},{"name":"order","type":"integer","required":false,"description":"Position in target stack (0 = top). Defaults to 0"},{"name":"stackId","type":"integer","required":true,"description":"Current stack ID of the card"},{"name":"targetStackId","type":"integer","required":true,"description":"Destination stack ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":102},{"name":"deck_archive_card","title":"Archive Deck Card","description":"Archive or unarchive a Deck card.","inputs":[{"name":"archive","type":"boolean","required":false,"description":"true to archive, false to unarchive"},{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"cardId","type":"integer","required":true,"description":"Card ID"},{"name":"stackId","type":"integer","required":true,"description":"Stack ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"deck_assign_label","title":"Assign Deck Label","description":"Assign a label to a Deck card. Use deck_get_board to see available labels and their IDs.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"cardId","type":"integer","required":true,"description":"Card ID"},{"name":"labelId","type":"integer","required":true,"description":"Label ID (from deck_get_board)"},{"name":"stackId","type":"integer","required":true,"description":"Stack ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":74},{"name":"deck_assign_user","title":"Assign Deck User","description":"Assign a user to a Deck card.","inputs":[{"name":"boardId","type":"integer","required":true,"description":"Board ID"},{"name":"cardId","type":"integer","required":true,"description":"Card ID"},{"name":"stackId","type":"integer","required":true,"description":"Stack ID"},{"name":"userId","type":"string","required":true,"description":"User ID (login name) to assign"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"passman_list_vaults","title":"List Password Vaults","description":"List all Passman password vaults. Returns name, guid, creation/last-access time and credential count. Note: secret values (password, username, url, etc.) are end-to-end encrypted and cannot be retrieved by this server.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"passman_list_credentials","title":"List Vault Credentials","description":"List credentials (metadata only) in a Passman vault. Returns each credential's label, id, guid and non-secret flags. Note: secret values (password, username, url, etc.) are end-to-end encrypted and cannot be retrieved by this server.","inputs":[{"name":"vault_guid","type":"string","required":true,"description":"Vault GUID (from passman_list_vaults)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":80},{"name":"passman_get_credential_info","title":"Get Credential Info","description":"Get non-secret metadata for a single Passman credential (label, id, timestamps, flags). Note: secret values (password, username, url, etc.) are end-to-end encrypted and cannot be retrieved by this server.","inputs":[{"name":"credential_guid","type":"string","required":true,"description":"Credential GUID (from passman_list_credentials)"},{"name":"vault_guid","type":"string","required":true,"description":"Vault GUID (from passman_list_vaults)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":91},{"name":"list_recipes","title":"List Recipes","description":"List all recipes in Nextcloud Cookbook. Optionally filter by name, category, or keyword.","inputs":[{"name":"category","type":"string","required":false,"description":"Filter by recipe category"},{"name":"keyword","type":"string","required":false,"description":"Filter by keyword"},{"name":"search","type":"string","required":false,"description":"Search term to filter recipes by name (case-insensitive)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":67},{"name":"list_recipe_categories","title":"List Recipe Categories","description":"List all unique recipe categories found across recipes in Nextcloud Cookbook.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":22},{"name":"get_recipe","title":"Get Recipe","description":"Get full details of a recipe from Nextcloud Cookbook by its folder name.","inputs":[{"name":"folderName","type":"string","required":true,"description":"The recipe folder name (as shown in list_recipes)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"create_recipe","title":"Create Recipe","description":"Create a new recipe in Nextcloud Cookbook with schema.org Recipe format.","inputs":[{"name":"cookTime","type":"string","required":false,"description":"Cooking time in ISO 8601 duration (e.g., PT1H)"},{"name":"description","type":"string","required":false,"description":"Brief description"},{"name":"image","type":"string","required":false,"description":"Image URL"},{"name":"keywords","type":"string","required":false,"description":"Comma-separated keywords (e.g., 'pasta,italian')"},{"name":"name","type":"string","required":true,"description":"Recipe name"},{"name":"nutrition","type":"object","required":false,"description":"Nutrition information"},{"name":"prepTime","type":"string","required":false,"description":"Preparation time in ISO 8601 duration (e.g., PT30M)"},{"name":"recipeCategory","type":"string","required":false,"description":"Category (e.g., 'Easy', 'Dessert')"},{"name":"recipeIngredient","type":"array","required":false,"description":"List of ingredients"},{"name":"recipeInstructions","type":"array","required":false,"description":"Step-by-step instructions"},{"name":"recipeYield","type":"number","required":false,"description":"Number of servings"},{"name":"tool","type":"array","required":false,"description":"Kitchen tools needed"},{"name":"totalTime","type":"string","required":false,"description":"Total time in ISO 8601 duration"},{"name":"url","type":"string","required":false,"description":"Source URL"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":213},{"name":"update_recipe","title":"Update Recipe","description":"Update an existing recipe in Nextcloud Cookbook. Only provided fields are changed.","inputs":[{"name":"cookTime","type":"string","required":false,"description":"New cook time (ISO 8601 duration)"},{"name":"description","type":"string","required":false,"description":"New description"},{"name":"folderName","type":"string","required":true,"description":"The recipe folder name"},{"name":"image","type":"string","required":false,"description":"New image URL"},{"name":"keywords","type":"string","required":false,"description":"New keywords"},{"name":"name","type":"string","required":false,"description":"New recipe name"},{"name":"nutrition","type":"object","required":false,"description":"Nutrition information"},{"name":"prepTime","type":"string","required":false,"description":"New prep time (ISO 8601 duration)"},{"name":"recipeCategory","type":"string","required":false,"description":"New category"},{"name":"recipeIngredient","type":"array","required":false,"description":"New ingredients list"},{"name":"recipeInstructions","type":"array","required":false,"description":"New instructions list"},{"name":"recipeYield","type":"number","required":false,"description":"New servings count"},{"name":"tool","type":"array","required":false,"description":"New tools list"},{"name":"totalTime","type":"string","required":false,"description":"New total time (ISO 8601 duration)"},{"name":"url","type":"string","required":false,"description":"New source URL"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":196},{"name":"delete_recipe","title":"Delete Recipe","description":"Delete a recipe from Nextcloud Cookbook. This removes the entire recipe folder including images. This action is irreversible.","inputs":[{"name":"folderName","type":"string","required":true,"description":"The recipe folder name to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"list_map_favorites","title":"List Map Favorites","description":"List map favorites (saved locations/pins) from Nextcloud Maps. Optionally filter by modification time or scope to a custom map.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"pruneBefore","type":"number","required":false,"description":"Unix timestamp — only return favorites modified after this time"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"create_map_favorite","title":"Create Map Favorite","description":"Create a new map favorite (saved location/pin) in Nextcloud Maps. Latitude and longitude are required.","inputs":[{"name":"category","type":"string","required":false,"description":"Category name (e.g. 'Restaurant', 'Home')"},{"name":"comment","type":"string","required":false,"description":"A comment or note"},{"name":"extensions","type":"string","required":false,"description":"Extra data as a string"},{"name":"lat","type":"number","required":true,"description":"Latitude"},{"name":"lng","type":"number","required":true,"description":"Longitude"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"name","type":"string","required":false,"description":"Name of the location"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":126},{"name":"update_map_favorite","title":"Update Map Favorite","description":"Update an existing map favorite. Only provided fields are changed.","inputs":[{"name":"category","type":"string","required":false,"description":"New category"},{"name":"comment","type":"string","required":false,"description":"New comment"},{"name":"extensions","type":"string","required":false,"description":"New extensions data"},{"name":"id","type":"number","required":true,"description":"Favorite ID"},{"name":"lat","type":"number","required":false,"description":"New latitude"},{"name":"lng","type":"number","required":false,"description":"New longitude"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"name","type":"string","required":false,"description":"New name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":112},{"name":"delete_map_favorite","title":"Delete Map Favorite","description":"Delete a map favorite by its ID. This action is irreversible.","inputs":[{"name":"id","type":"number","required":true,"description":"Favorite ID to delete"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"rename_map_favorite_category","title":"Rename Map Favorite Category","description":"Rename one or more favorite categories. All favorites in the listed categories are moved to the new name.","inputs":[{"name":"categories","type":"array","required":true,"description":"Existing category names to rename"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"newName","type":"string","required":true,"description":"New category name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":80},{"name":"list_shared_map_categories","title":"List Shared Map Categories","description":"List favorite categories that are shared via a public link.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"share_map_category","title":"Share Map Category","description":"Share a favorite category via a public link. The category must already contain at least one favorite.","inputs":[{"name":"category","type":"string","required":true,"description":"Category name to share"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"unshare_map_category","title":"Unshare Map Category","description":"Remove the public link share from a favorite category.","inputs":[{"name":"category","type":"string","required":true,"description":"Category name to unshare"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"add_shared_category_to_map","title":"Add Shared Category To Map","description":"Add a shared favorite category to a custom map so its favorites show up there.","inputs":[{"name":"category","type":"string","required":true,"description":"Shared category name"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"targetMapId","type":"number","required":true,"description":"ID of the custom map to add the shared category to"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":83},{"name":"list_map_devices","title":"List Map Devices","description":"List GPS tracking devices registered in Nextcloud Maps.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"get_map_device_points","title":"Get Map Device Points","description":"Get GPS location points for a specific device. Supports time filtering and pagination.","inputs":[{"name":"id","type":"number","required":true,"description":"Device ID"},{"name":"limit","type":"number","required":false,"description":"Maximum number of points to return (default 10000)"},{"name":"offset","type":"number","required":false,"description":"Number of points to skip (default 0)"},{"name":"pruneBefore","type":"number","required":false,"description":"Unix timestamp — only return points after this time"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":85},{"name":"add_map_device_point","title":"Add Map Device Point","description":"Log a GPS location point for a device. The device is auto-created by user_agent if it doesn't exist.","inputs":[{"name":"accuracy","type":"number","required":false,"description":"GPS accuracy in meters"},{"name":"altitude","type":"number","required":false,"description":"Altitude in meters"},{"name":"battery","type":"number","required":false,"description":"Battery level percentage"},{"name":"lat","type":"number","required":true,"description":"Latitude"},{"name":"lng","type":"number","required":true,"description":"Longitude"},{"name":"timestamp","type":"number","required":false,"description":"Unix timestamp (defaults to now)"},{"name":"user_agent","type":"string","required":false,"description":"Device identifier (defaults to HTTP User-Agent)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":109},{"name":"update_map_device","title":"Update Map Device","description":"Update a device's display color and/or name. At least one must be provided.","inputs":[{"name":"color","type":"string","required":false,"description":"New color (e.g. '#ff0000')"},{"name":"id","type":"number","required":true,"description":"Device ID"},{"name":"name","type":"string","required":false,"description":"New device name (user agent)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"delete_map_device","title":"Delete Map Device","description":"Delete a GPS tracking device and all its location points. This action is irreversible.","inputs":[{"name":"id","type":"number","required":true,"description":"Device ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"share_map_device","title":"Share Map Device","description":"Share a GPS device via a public link, limited to a time window. Returns the share token.","inputs":[{"name":"id","type":"number","required":true,"description":"Device ID to share"},{"name":"timestampFrom","type":"number","required":true,"description":"Unix timestamp — start of the shared time window"},{"name":"timestampTo","type":"number","required":true,"description":"Unix timestamp — end of the shared time window"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":74},{"name":"list_shared_map_devices","title":"List Shared Map Devices","description":"List device shares that have been added to a custom map. Requires myMapId — the default map holds no device shares.","inputs":[{"name":"myMapId","type":"number","required":true,"description":"Custom map ID to list device shares from"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"remove_map_device_share","title":"Remove Map Device Share","description":"Revoke a device share by its token.","inputs":[{"name":"token","type":"string","required":true,"description":"Share token to revoke"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"add_shared_device_to_map","title":"Add Shared Device To Map","description":"Add a shared device (by token) to a custom map so its track shows up there.","inputs":[{"name":"targetMapId","type":"number","required":true,"description":"ID of the custom map to add the shared device to"},{"name":"token","type":"string","required":true,"description":"Device share token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"list_map_tracks","title":"List Map Tracks","description":"List GPS tracks (GPX/KML files) from Nextcloud Maps.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"Custom map ID to scope to"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"get_map_track","title":"Get Map Track","description":"Get full details and content of a track by its ID. Returns metadata and the raw GPX/KML file content.","inputs":[{"name":"id","type":"number","required":true,"description":"Track ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"update_map_track","title":"Update Map Track","description":"Update a track's color or metadata.","inputs":[{"name":"color","type":"string","required":false,"description":"New color (e.g. '#00ff00')"},{"name":"etag","type":"string","required":false,"description":"ETag for concurrency control"},{"name":"id","type":"number","required":true,"description":"Track ID"},{"name":"metadata","type":"string","required":false,"description":"New metadata as JSON string"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"list_map_photos","title":"List Map Photos","description":"List geolocated photos (photos with GPS coordinates) from Nextcloud Maps.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"Custom map ID to scope to"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"list_map_photos_nonlocalized","title":"List Non-Localized Map Photos","description":"List photos that don't have GPS coordinates. Useful for finding photos that can be placed on the map.","inputs":[{"name":"limit","type":"number","required":false,"description":"Max photos to return (default 250)"},{"name":"myMapId","type":"number","required":false,"description":"Custom map ID to scope to"},{"name":"offset","type":"number","required":false,"description":"Pagination offset (default 0)"},{"name":"timezone","type":"string","required":false,"description":"Timezone string (e.g. 'Europe/Berlin')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":94},{"name":"place_map_photos","title":"Place Map Photos","description":"Set GPS coordinates on one or more photos. Each photo path is paired with a lat/lng.","inputs":[{"name":"lats","type":"array","required":true,"description":"Latitudes (parallel to paths)"},{"name":"lngs","type":"array","required":true,"description":"Longitudes (parallel to paths)"},{"name":"myMapId","type":"number","required":false,"description":"Custom map ID to scope to"},{"name":"paths","type":"array","required":true,"description":"File paths in Nextcloud storage"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":86},{"name":"reset_map_photo_coords","title":"Reset Map Photo Coordinates","description":"Remove GPS coordinates from one or more photos.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"Custom map ID to scope to"},{"name":"paths","type":"array","required":true,"description":"File paths in Nextcloud storage"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"get_map_photo_job_status","title":"Get Map Photo Job Status","description":"Get the status of the background job that scans photos for GPS coordinates. Useful after uploading photos to see whether geolocation has finished.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"list_map_contacts","title":"List Map Contacts","description":"List address book contacts that carry a geographic address, as shown on the map.","inputs":[{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"search_map_contacts","title":"Search Map Contacts","description":"Search address book contacts by name, to find the bookid/uri/uid needed to place a contact on the map.","inputs":[{"name":"query","type":"string","required":true,"description":"Search term matched against contact display names"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"place_map_contact","title":"Place Map Contact","description":"Set a contact's geographic address and coordinates so it appears on the map. Use search_map_contacts to look up bookid, uri and uid.","inputs":[{"name":"address_string","type":"string","required":false,"description":"Full address as a single string, used instead of the individual fields"},{"name":"attraction","type":"string","required":false,"description":"Point of interest name"},{"name":"bookid","type":"string","required":true,"description":"Address book ID"},{"name":"city","type":"string","required":false,"description":"City"},{"name":"country","type":"string","required":false,"description":"Country"},{"name":"house_number","type":"string","required":false,"description":"House number"},{"name":"lat","type":"number","required":false,"description":"Latitude"},{"name":"lng","type":"number","required":false,"description":"Longitude"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"postcode","type":"string","required":false,"description":"Postal code"},{"name":"road","type":"string","required":false,"description":"Street"},{"name":"state","type":"string","required":false,"description":"State or region"},{"name":"type","type":"string","required":false,"description":"Address type (e.g. 'HOME', 'WORK')"},{"name":"uid","type":"string","required":true,"description":"Contact UID"},{"name":"uri","type":"string","required":true,"description":"Contact URI (e.g. \"abc123.vcf\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":221},{"name":"add_contact_to_map","title":"Add Contact To Map","description":"Copy a contact into a custom map so it shows up as a pin on that map.","inputs":[{"name":"bookid","type":"string","required":true,"description":"Address book ID"},{"name":"myMapId","type":"number","required":true,"description":"ID of the custom map to add the contact to"},{"name":"uri","type":"string","required":true,"description":"Contact URI (e.g. \"abc123.vcf\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":76},{"name":"delete_map_contact_address","title":"Delete Map Contact Address","description":"Remove an address and its coordinates from a contact, taking it off the map. The contact itself is kept. Use list_map_contacts to get the exact ADR and GEO values.","inputs":[{"name":"adr","type":"string","required":true,"description":"The ADR value to remove, exactly as returned by list_map_contacts"},{"name":"bookid","type":"string","required":true,"description":"Address book ID"},{"name":"geo","type":"string","required":true,"description":"The GEO value to remove, exactly as returned by list_map_contacts"},{"name":"myMapId","type":"number","required":false,"description":"ID of a custom map to scope the operation to; omit for the user's default map"},{"name":"uid","type":"string","required":true,"description":"Contact UID"},{"name":"uri","type":"string","required":true,"description":"Contact URI (e.g. \"abc123.vcf\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":149},{"name":"list_maps","title":"List Maps","description":"List all custom maps created by the user in Nextcloud Maps.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":21},{"name":"create_map","title":"Create Map","description":"Create a new custom map in Nextcloud Maps.","inputs":[{"name":"name","type":"string","required":false,"description":"Map name (default: 'New Map')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"update_map","title":"Update Map","description":"Update a custom map's properties (e.g. rename).","inputs":[{"name":"id","type":"number","required":true,"description":"Map ID"},{"name":"values","type":"object","required":true,"description":"Key-value pairs to update (e.g. { newName: 'My Trip' })"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"delete_map","title":"Delete Map","description":"Delete a custom map. This action is irreversible.","inputs":[{"name":"id","type":"number","required":true,"description":"Map ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"export_map_route","title":"Export Map Route","description":"Export a route or track as a GPX file to the user's Nextcloud /Maps folder.","inputs":[{"name":"coords","type":"array","required":true,"description":"Ordered list of coordinates"},{"name":"myMapId","type":"number","required":false,"description":"Target map ID (defaults to /Maps folder)"},{"name":"name","type":"string","required":true,"description":"Route name (used as filename)"},{"name":"totDist","type":"number","required":false,"description":"Total distance (for metadata)"},{"name":"totTime","type":"number","required":false,"description":"Total time (for metadata)"},{"name":"type","type":"string","required":true,"description":"GPX structure type: 'route' (<rte>) or 'track' (<trk>)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":121},{"name":"export_map_favorites","title":"Export Map Favorites","description":"Export favorites as a GPX file to the user's Nextcloud /Maps folder. Filter by categories and time range.","inputs":[{"name":"all","type":"boolean","required":false,"description":"If true, filename is not prefixed with 'filtered-'"},{"name":"begin","type":"number","required":false,"description":"Start timestamp filter"},{"name":"categoryList","type":"array","required":true,"description":"Categories to export (e.g. ['Restaurant', 'Home'])"},{"name":"end","type":"number","required":false,"description":"End timestamp filter"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":92},{"name":"import_map_favorites","title":"Import Map Favorites","description":"Import favorites from a file in Nextcloud storage. Supports GPX, KML, KMZ, JSON, and GeoJSON.","inputs":[{"name":"path","type":"string","required":true,"description":"Relative path to the file in Nextcloud storage (e.g. '/Maps/favorites.gpx')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"export_map_devices","title":"Export Map Devices","description":"Export device location data as a GPX file to the user's Nextcloud /Maps folder.","inputs":[{"name":"all","type":"boolean","required":false,"description":"If true, filename is not prefixed with 'filtered-'"},{"name":"begin","type":"number","required":false,"description":"Start timestamp filter"},{"name":"deviceIdList","type":"array","required":true,"description":"Device IDs to export"},{"name":"end","type":"number","required":false,"description":"End timestamp filter"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":79},{"name":"import_map_devices","title":"Import Map Devices","description":"Import device location data from a file in Nextcloud storage. Supports GPX, KML, and KMZ.","inputs":[{"name":"path","type":"string","required":true,"description":"Relative path to the file in Nextcloud storage (e.g. '/Maps/track.gpx')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":58},{"name":"photos_list_albums","title":"List Photo Albums","description":"List all photo albums owned by the current user. Returns album names, item counts, locations, and date ranges.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"photos_get_album","title":"Get Photo Album","description":"Get details of a photo album including its files. Returns file IDs (needed for photos_remove_from_album), names, types, and sizes.","inputs":[{"name":"name","type":"string","required":true,"description":"Album name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":46},{"name":"photos_create_album","title":"Create Photo Album","description":"Create a new photo album.","inputs":[{"name":"name","type":"string","required":true,"description":"Name for the new album"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":27},{"name":"photos_delete_album","title":"Delete Photo Album","description":"Delete a photo album. This only removes the album — the underlying files are not deleted.","inputs":[{"name":"name","type":"string","required":true,"description":"Name of the album to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":40},{"name":"photos_rename_album","title":"Rename Photo Album","description":"Rename a photo album.","inputs":[{"name":"name","type":"string","required":true,"description":"Current album name"},{"name":"newName","type":"string","required":true,"description":"New album name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"photos_add_to_album","title":"Add Photos to Album","description":"Add one or more files to a photo album. Files are referenced by their Nextcloud path. The files themselves are not moved — only an album association is created.","inputs":[{"name":"albumName","type":"string","required":true,"description":"Album name"},{"name":"filePaths","type":"array","required":true,"description":"Array of file paths in Nextcloud (e.g., [\"/Photos/sunset.jpg\"])"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":78},{"name":"photos_remove_from_album","title":"Remove Photos from Album","description":"Remove one or more files from a photo album by file ID (use photos_get_album to find IDs). This only removes the album association — the files are not deleted.","inputs":[{"name":"albumName","type":"string","required":true,"description":"Album name"},{"name":"fileIds","type":"array","required":true,"description":"File IDs to remove (from photos_get_album output)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":72},{"name":"photos_get_metadata","title":"Get Photo Metadata","description":"Get photo/video metadata (EXIF) for a file. Returns camera, lens, ISO, aperture, shutter speed, focal length, GPS coordinates, dimensions, and date taken when available.","inputs":[{"name":"path","type":"string","required":true,"description":"File path in Nextcloud (e.g., \"/Photos/sunset.jpg\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"photos_set_favorite","title":"Set Photo Favorite","description":"Mark or unmark a file as favorite.","inputs":[{"name":"favorite","type":"boolean","required":true,"description":"true to mark as favorite, false to unmark"},{"name":"path","type":"string","required":true,"description":"File path in Nextcloud (e.g., \"/Photos/sunset.jpg\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":57},{"name":"photos_set_album_location","title":"Set Photo Album Location","description":"Set or update the location metadata on a photo album.","inputs":[{"name":"location","type":"string","required":true,"description":"Location string (e.g., \"Paris, France\")"},{"name":"name","type":"string","required":true,"description":"Album name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"photos_add_collaborators","title":"Add Photo Album Collaborators","description":"Add collaborators (users or groups) to a photo album. Collaborators can view and add photos to the album.","inputs":[{"name":"albumName","type":"string","required":true,"description":"Album name"},{"name":"collaborators","type":"array","required":true,"description":"Array of collaborators to add"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":56},{"name":"talk_list_conversations","title":"List Talk Conversations","description":"List all Talk conversations the user has access to. Returns conversation tokens, names, types, and unread message counts.","inputs":[{"name":"includeStatus","type":"boolean","required":false,"description":"Include user status information (default false)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"talk_list_messages","title":"List Talk Messages","description":"List recent messages in a Talk conversation. Returns message content with timestamps and authors. Reading does not mark the conversation as read.","inputs":[{"name":"includeSystemMessages","type":"boolean","required":false,"description":"Include system messages like join/leave notifications (default false)"},{"name":"lastKnownMessageId","type":"number","required":false,"description":"Message ID to start from for pagination (returns messages before this ID)"},{"name":"limit","type":"number","required":false,"description":"Number of messages to retrieve (default 50, max 200)"},{"name":"token","type":"string","required":true,"description":"Conversation token (from list_conversations)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":111},{"name":"talk_send_message","title":"Send Talk Message","description":"Send a message to a Talk conversation. Supports replies and silent messages that do not trigger notifications.","inputs":[{"name":"message","type":"string","required":true,"description":"Message text to send"},{"name":"replyTo","type":"number","required":false,"description":"Message ID to reply to"},{"name":"silent","type":"boolean","required":false,"description":"Send without triggering notifications (default false)"},{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":75},{"name":"talk_create_conversation","title":"Create Talk Conversation","description":"Create a new Talk conversation. One-on-one requires an invite user, group/public require a name.","inputs":[{"name":"invite","type":"string","required":false,"description":"User ID to invite (required for one-on-one)"},{"name":"roomName","type":"string","required":false,"description":"Name for the conversation (required for group and public)"},{"name":"roomType","type":"string","required":true,"description":"Type of conversation to create"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":78},{"name":"talk_list_participants","title":"List Talk Participants","description":"List all participants in a Talk conversation with their roles.","inputs":[{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"talk_add_participant","title":"Add Talk Participant","description":"Add a user, group, or email participant to a Talk conversation.","inputs":[{"name":"newParticipant","type":"string","required":true,"description":"User ID, group ID, or email address to add"},{"name":"source","type":"string","required":false,"description":"Participant source type (default 'users')"},{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":66},{"name":"talk_remove_participant","title":"Remove Talk Participant","description":"Remove a participant from a Talk conversation by their attendee ID (from list_participants).","inputs":[{"name":"attendeeId","type":"number","required":true,"description":"Attendee ID of the participant to remove"},{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"talk_delete_message","title":"Delete Talk Message","description":"Delete a message from a Talk conversation.","inputs":[{"name":"messageId","type":"number","required":true,"description":"ID of the message to delete"},{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":40},{"name":"talk_create_poll","title":"Create Talk Poll","description":"Create a poll in a Talk conversation. Requires at least 2 options.","inputs":[{"name":"maxVotes","type":"number","required":false,"description":"Maximum number of votes per participant (0 = unlimited, default 1)"},{"name":"options","type":"array","required":true,"description":"Poll options (minimum 2)"},{"name":"question","type":"string","required":true,"description":"Poll question"},{"name":"resultMode","type":"string","required":false,"description":"Result visibility: 'public' (default) or 'hidden' until closed"},{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":100},{"name":"talk_react_to_message","title":"React to Talk Message","description":"Add an emoji reaction to a message in a Talk conversation.","inputs":[{"name":"messageId","type":"number","required":true,"description":"ID of the message to react to"},{"name":"reaction","type":"string","required":true,"description":"Emoji reaction (e.g. '👍', '❤️', '🎉')"},{"name":"token","type":"string","required":true,"description":"Conversation token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"circles_list","title":"List Circles","description":"List all circles/teams accessible to the current user. Returns circle IDs, names, owners, and configuration.","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum number of circles to return"},{"name":"offset","type":"number","required":false,"description":"Offset for pagination"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"circles_get","title":"Get Circle","description":"Get detailed information about a specific circle/team, including its description, owner, and configuration flags.","inputs":[{"name":"circleId","type":"string","required":true,"description":"The circle ID to retrieve"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":40},{"name":"circles_create","title":"Create Circle","description":"Create a new circle/team. The current user becomes the owner. Set personal=true for a private circle only visible to the owner.","inputs":[{"name":"local","type":"boolean","required":false,"description":"Restrict to local instance, no federation (default: false)"},{"name":"name","type":"string","required":true,"description":"Name for the new circle"},{"name":"personal","type":"boolean","required":false,"description":"Create as a personal circle (default: false)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"circles_delete","title":"Delete Circle","description":"Delete a circle/team. Requires owner privileges.","inputs":[{"name":"circleId","type":"string","required":true,"description":"The circle ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"circles_list_members","title":"List Circle Members","description":"List all members of a circle/team. Returns member IDs (needed for removal), user IDs, types, and permission levels.","inputs":[{"name":"circleId","type":"string","required":true,"description":"The circle ID to list members for"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"circles_add_member","title":"Add Circle Member","description":"Add a member to a circle/team. Requires moderator privileges or higher. Member type: 1=user (default), 2=group, 4=mail, 16=circle.","inputs":[{"name":"circleId","type":"string","required":true,"description":"The circle ID to add the member to"},{"name":"type","type":"number","required":false,"description":"Member type: 1=user (default), 2=group, 4=mail, 8=contact, 16=circle"},{"name":"userId","type":"string","required":true,"description":"The user ID (or entity identifier) to add"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":116},{"name":"circles_remove_member","title":"Remove Circle Member","description":"Remove a member from a circle/team. Use circles_list_members to get the memberId. Requires moderator privileges or higher.","inputs":[{"name":"circleId","type":"string","required":true,"description":"The circle ID to remove the member from"},{"name":"memberId","type":"string","required":true,"description":"The member ID (from circles_list_members), not the user ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":70},{"name":"circles_search","title":"Search Circles","description":"Search for circles/teams by name.","inputs":[{"name":"term","type":"string","required":true,"description":"Search term to match against circle names"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"list_bookmarks","title":"List Bookmarks","description":"List bookmarks from Nextcloud Bookmarks app. Supports search, tag filtering, folder filtering, sorting, and pagination.","inputs":[{"name":"folder","type":"number","required":false,"description":"Filter by folder ID (-1 for root)"},{"name":"limit","type":"number","required":false,"description":"Max bookmarks to return (default 10)"},{"name":"page","type":"number","required":false,"description":"Page number for pagination (starts at 0)"},{"name":"search","type":"string","required":false,"description":"Search term to filter bookmarks by title/URL/description"},{"name":"sortby","type":"string","required":false,"description":"Sort field"},{"name":"tags","type":"array","required":false,"description":"Filter by tags (e.g. ['tech', 'news'])"},{"name":"unavailable","type":"boolean","required":false,"description":"Only show unavailable bookmarks"},{"name":"untagged","type":"boolean","required":false,"description":"Only show bookmarks without tags"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":150},{"name":"get_bookmark","title":"Get Bookmark","description":"Get full details of a single bookmark by its ID.","inputs":[{"name":"id","type":"number","required":true,"description":"The bookmark ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"create_bookmark","title":"Create Bookmark","description":"Create a new bookmark in Nextcloud Bookmarks. URL is required; title, description, tags, and folders are optional.","inputs":[{"name":"description","type":"string","required":false,"description":"Bookmark description"},{"name":"folders","type":"array","required":false,"description":"Folder IDs to place the bookmark in"},{"name":"tags","type":"array","required":false,"description":"Tags to assign (e.g. ['tech', 'reference'])"},{"name":"title","type":"string","required":false,"description":"Bookmark title"},{"name":"url","type":"string","required":true,"description":"The URL to bookmark"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":96},{"name":"update_bookmark","title":"Update Bookmark","description":"Update an existing bookmark. Only provided fields are changed.","inputs":[{"name":"description","type":"string","required":false,"description":"New description"},{"name":"folders","type":"array","required":false,"description":"New folder IDs (replaces existing folders)"},{"name":"id","type":"number","required":true,"description":"The bookmark ID to update"},{"name":"tags","type":"array","required":false,"description":"New tags (replaces existing tags)"},{"name":"title","type":"string","required":false,"description":"New title"},{"name":"url","type":"string","required":false,"description":"New URL"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":88},{"name":"delete_bookmark","title":"Delete Bookmark","description":"Delete a bookmark by its ID. This action is irreversible.","inputs":[{"name":"id","type":"number","required":true,"description":"The bookmark ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"list_bookmark_folders","title":"List Bookmark Folders","description":"List the bookmark folder hierarchy. Returns a tree structure of all folders.","inputs":[{"name":"layers","type":"number","required":false,"description":"Maximum depth of folder levels to return"},{"name":"root","type":"number","required":false,"description":"Root folder ID to start from (-1 for top level, default)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"get_bookmark_folder_contents","title":"Get Bookmark Folder Contents","description":"Get the contents of a bookmark folder (bookmarks and subfolders).","inputs":[{"name":"id","type":"number","required":true,"description":"The folder ID (-1 for root)"},{"name":"layers","type":"number","required":false,"description":"Depth of subfolder levels to include (default 0 = direct children only)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"create_bookmark_folder","title":"Create Bookmark Folder","description":"Create a new bookmark folder.","inputs":[{"name":"parent_folder","type":"number","required":false,"description":"Parent folder ID (-1 for root, default)"},{"name":"title","type":"string","required":true,"description":"Folder name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"update_bookmark_folder","title":"Update Bookmark Folder","description":"Update a bookmark folder (rename or move to a different parent).","inputs":[{"name":"id","type":"number","required":true,"description":"The folder ID to update"},{"name":"parent_folder","type":"number","required":false,"description":"New parent folder ID (-1 for root)"},{"name":"title","type":"string","required":false,"description":"New folder name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"delete_bookmark_folder","title":"Delete Bookmark Folder","description":"Delete a bookmark folder and all its contents. This action is irreversible.","inputs":[{"name":"id","type":"number","required":true,"description":"The folder ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"list_bookmark_tags","title":"List Bookmark Tags","description":"List all tags used across bookmarks.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":17},{"name":"rename_bookmark_tag","title":"Rename Bookmark Tag","description":"Rename a bookmark tag. All bookmarks with the old tag will be updated.","inputs":[{"name":"new_name","type":"string","required":true,"description":"New tag name"},{"name":"old_name","type":"string","required":true,"description":"Current tag name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"delete_bookmark_tag","title":"Delete Bookmark Tag","description":"Delete a bookmark tag. The tag will be removed from all bookmarks.","inputs":[{"name":"name","type":"string","required":true,"description":"Tag name to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"list_polls","title":"List Polls","description":"List all polls the current user can access (own, shared, or public). Returns id, title, type, owner, and status.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"get_poll","title":"Get Poll","description":"Get full details of a poll by ID: configuration, owner, status, and current user state.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID (from list_polls)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"create_poll","title":"Create Poll","description":"Create a new poll. Type \"textPoll\" for text options (e.g. lunch choices), \"datePoll\" for date/time options (e.g. meeting scheduling).","inputs":[{"name":"title","type":"string","required":true,"description":"Poll title"},{"name":"type","type":"string","required":true,"description":"Poll type"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"update_poll","title":"Update Poll","description":"Update a poll configuration. Only provided fields are changed. Set expire to 0 for no expiration, or a unix timestamp to auto-close on that date.","inputs":[{"name":"access","type":"string","required":false,"description":null},{"name":"allowComment","type":"boolean","required":false,"description":null},{"name":"allowMaybe","type":"boolean","required":false,"description":null},{"name":"allowProposals","type":"boolean","required":false,"description":null},{"name":"anonymous","type":"boolean","required":false,"description":null},{"name":"autoReminder","type":"boolean","required":false,"description":null},{"name":"description","type":"string","required":false,"description":null},{"name":"expire","type":"integer","required":false,"description":"Unix timestamp; 0 = no expiration; negative = close immediately"},{"name":"hideBookedUp","type":"boolean","required":false,"description":null},{"name":"maxVotesPerOption","type":"integer","required":false,"description":null},{"name":"maxVotesPerUser","type":"integer","required":false,"description":null},{"name":"pollId","type":"integer","required":true,"description":"Poll ID"},{"name":"showResults","type":"string","required":false,"description":null},{"name":"title","type":"string","required":false,"description":null},{"name":"useNo","type":"boolean","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":175},{"name":"delete_poll","title":"Delete Poll","description":"Permanently delete a poll. This cannot be undone.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"close_poll","title":"Close Poll","description":"Close a poll immediately so no further votes are accepted.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"reopen_poll","title":"Reopen Poll","description":"Reopen a previously closed poll so voting can resume.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"clone_poll","title":"Clone Poll","description":"Clone an existing poll, copying its configuration and options into a new poll.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID to clone"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"list_poll_options","title":"List Poll Options","description":"List all options for a poll, with vote tallies per option.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"add_text_poll_option","title":"Add Text Poll Option","description":"Add a text option to a textPoll (e.g. \"Pizza\", \"Sushi\"). Use add_date_poll_option for datePolls.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID (must be a textPoll)"},{"name":"text","type":"string","required":true,"description":"Option text"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":64},{"name":"add_date_poll_option","title":"Add Date Poll Option","description":"Add a date/time option to a datePoll. Provide startAt as ISO-8601 (e.g. \"2026-05-12T14:00:00Z\") and durationSeconds (e.g. 3600 for 1 hour).","inputs":[{"name":"durationSeconds","type":"integer","required":true,"description":"Duration in seconds (0 = single point in time)"},{"name":"pollId","type":"integer","required":true,"description":"Poll ID (must be a datePoll)"},{"name":"startAt","type":"string","required":true,"description":"Start date/time as ISO-8601 (e.g. \"2026-05-12T14:00:00Z\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":130},{"name":"delete_poll_option","title":"Delete Poll Option","description":"Delete an option from a poll by option ID.","inputs":[{"name":"optionId","type":"integer","required":true,"description":"Option ID (from list_poll_options)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"list_poll_votes","title":"List Poll Votes","description":"List all votes for a poll. Anonymous polls redact voters' identities.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"vote_on_poll","title":"Vote on Poll","description":"Cast or change your vote on a poll option. setTo: \"yes\" to vote yes, \"no\" to vote no, \"maybe\" for a tentative yes (only if allowed).","inputs":[{"name":"optionId","type":"integer","required":true,"description":"Option ID to vote on (from list_poll_options)"},{"name":"setTo","type":"string","required":true,"description":"Vote value"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":76},{"name":"list_poll_comments","title":"List Poll Comments","description":"List all comments on a poll.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":26},{"name":"add_poll_comment","title":"Add Poll Comment","description":"Post a comment on a poll (requires comments to be enabled).","inputs":[{"name":"message","type":"string","required":true,"description":"Comment text"},{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"delete_poll_comment","title":"Delete Poll Comment","description":"Delete one of your poll comments by comment ID.","inputs":[{"name":"commentId","type":"integer","required":true,"description":"Comment ID (from list_poll_comments)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"list_poll_shares","title":"List Poll Shares","description":"List all shares (public link, user invitations, email invitations) for a poll.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"add_poll_share","title":"Add Poll Share","description":"Share a poll. type=\"public\" creates a public link (no extra fields). type=\"user\" invites a Nextcloud user (requires userId). type=\"email\" invites by email (requires userId=email address, displayName).","inputs":[{"name":"displayName","type":"string","required":false,"description":"Display name (required for type=email)"},{"name":"pollId","type":"integer","required":true,"description":"Poll ID"},{"name":"type","type":"string","required":true,"description":"Share type"},{"name":"userId","type":"string","required":false,"description":"Nextcloud user ID (for type=user) or email address (for type=email)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":115},{"name":"delete_poll_share","title":"Delete Poll Share","description":"Revoke a poll share by its token (obtained from list_poll_shares or add_poll_share).","inputs":[{"name":"token","type":"string","required":true,"description":"Share token"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"set_poll_subscription","title":"Set Poll Subscription","description":"Subscribe or unsubscribe the current user to poll notifications (new votes, comments). Use subscribe=true to subscribe, false to unsubscribe.","inputs":[{"name":"pollId","type":"integer","required":true,"description":"Poll ID"},{"name":"subscribe","type":"boolean","required":true,"description":"true to subscribe, false to unsubscribe"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":58},{"name":"list_forms","title":"List Forms","description":"List forms. type=\"owned\" (default) returns forms the current user owns; \"shared\" returns forms shared with them; \"partial\" returns forms the user has an unfinished draft on.","inputs":[{"name":"type","type":"string","required":false,"description":"Form list scope"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":57},{"name":"get_form","title":"Get Form","description":"Get full details for a form by ID, including questions, options, shares, and metadata.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID (from list_forms)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":41},{"name":"create_form","title":"Create Form","description":"Create a new empty form. Returns the new form ID. Use update_form to set title/description and create_form_question to add questions.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"clone_form","title":"Clone Form","description":"Clone an existing form (its questions, options, and settings) into a new form.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID to clone"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":38},{"name":"update_form","title":"Update Form","description":"Update form properties. Only provided fields are changed. state: 0=active, 1=closed, 2=archived. expires=0 disables expiration.","inputs":[{"name":"allowEditSubmissions","type":"boolean","required":false,"description":null},{"name":"description","type":"string","required":false,"description":null},{"name":"expires","type":"integer","required":false,"description":"Unix timestamp; 0 = no expiration"},{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"isAnonymous","type":"boolean","required":false,"description":null},{"name":"showExpiration","type":"boolean","required":false,"description":null},{"name":"state","type":null,"required":false,"description":null},{"name":"submissionMessage","type":"string","required":false,"description":null},{"name":"submitMultiple","type":"boolean","required":false,"description":null},{"name":"title","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":128},{"name":"transfer_form_owner","title":"Transfer Form Ownership","description":"Transfer ownership of a form to another Nextcloud user. The new owner must have access to the Forms app.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"ownerId","type":"string","required":true,"description":"User ID of the new owner"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"delete_form","title":"Delete Form","description":"Permanently delete a form and all of its submissions. This cannot be undone.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"list_form_questions","title":"List Form Questions","description":"List all questions for a form, in display order.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"create_form_question","title":"Create Form Question","description":"Add a question to a form. For choice questions use type \"multiple\" (checkbox), \"multiple_unique\" (radio), or \"dropdown\" — then call create_form_options.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"text","type":"string","required":false,"description":"Question text (optional at creation)"},{"name":"type","type":"string","required":true,"description":"Question type"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":77},{"name":"update_form_question","title":"Update Form Question","description":"Update question properties (text, requirement, type, etc.). Only provided fields are changed.","inputs":[{"name":"extraSettings","type":"object","required":false,"description":"Question-type-specific settings (e.g. validationRegex, allowedFileTypes)"},{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"isRequired","type":"boolean","required":false,"description":null},{"name":"name","type":"string","required":false,"description":"Internal name / shortcode"},{"name":"questionId","type":"integer","required":true,"description":"Question ID"},{"name":"text","type":"string","required":false,"description":null},{"name":"type","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":102},{"name":"reorder_form_questions","title":"Reorder Form Questions","description":"Reorder all questions in a form. Pass the full list of question IDs in the desired order.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"newOrder","type":"array","required":true,"description":"Full list of question IDs in desired order"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"delete_form_question","title":"Delete Form Question","description":"Delete a question from a form.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"questionId","type":"integer","required":true,"description":"Question ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"create_form_options","title":"Create Form Options","description":"Add one or more options to a choice question (multiple/multiple_unique/dropdown). Pass an array of option texts.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"optionTexts","type":"array","required":true,"description":"One or more option texts to create"},{"name":"questionId","type":"integer","required":true,"description":"Question ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"update_form_option","title":"Update Form Option","description":"Update a choice option's text (and optionally its order).","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"optionId","type":"integer","required":true,"description":"Option ID"},{"name":"order","type":"integer","required":false,"description":null},{"name":"questionId","type":"integer","required":true,"description":"Question ID"},{"name":"text","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":65},{"name":"reorder_form_options","title":"Reorder Form Options","description":"Reorder all options for a choice question. Pass the full list of option IDs in the desired order.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"newOrder","type":"array","required":true,"description":"Full list of option IDs in desired order"},{"name":"questionId","type":"integer","required":true,"description":"Question ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":66},{"name":"delete_form_option","title":"Delete Form Option","description":"Delete an option from a choice question.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"optionId","type":"integer","required":true,"description":"Option ID"},{"name":"questionId","type":"integer","required":true,"description":"Question ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"create_form_share","title":"Create Form Share","description":"Share a form. type=\"user\" shares with a Nextcloud user (shareWith=userId), \"group\" with a group (shareWith=groupId), \"link\" creates a public link (shareWith is the generated hash, omit it at creation).","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"permissions","type":"array","required":false,"description":"Permissions to grant. Defaults to [\"submit\"] if omitted."},{"name":"shareWith","type":"string","required":false,"description":"User ID (type=user) or group ID (type=group). Omit for type=link."},{"name":"type","type":"string","required":true,"description":"Share type"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":127},{"name":"update_form_share","title":"Update Form Share","description":"Update the permissions on an existing form share.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"permissions","type":"array","required":true,"description":"New permission set"},{"name":"shareId","type":"integer","required":true,"description":"Share ID (from get_form)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"delete_form_share","title":"Delete Form Share","description":"Revoke a form share.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"shareId","type":"integer","required":true,"description":"Share ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"list_form_submissions","title":"List Form Submissions","description":"List submissions for a form. Supports free-text search (query) and pagination (limit/offset). Only form owners/admins see all submissions.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"limit","type":"integer","required":false,"description":"Max submissions to return"},{"name":"offset","type":"integer","required":false,"description":"Offset for pagination"},{"name":"query","type":"string","required":false,"description":"Free-text search across answer values"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":83},{"name":"get_form_submission","title":"Get Form Submission","description":"Get a single submission with all of its answers.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"submissionId","type":"integer","required":true,"description":"Submission ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"create_form_submission","title":"Create Form Submission","description":"Submit answers to a form. `answers` is an object keyed by question ID; values are always arrays. For text questions: [\"My answer\"]. For choice questions: [optionId1, optionId2] (numeric IDs). Public links require `shareHash`.","inputs":[{"name":"answers","type":"object","required":true,"description":"Object keyed by question ID; each value is an array of strings or option IDs"},{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"shareHash","type":"string","required":false,"description":"Share hash — required when submitting via a public link"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":114},{"name":"delete_form_submission","title":"Delete Form Submission","description":"Delete a single submission by ID.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"submissionId","type":"integer","required":true,"description":"Submission ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"delete_all_form_submissions","title":"Delete All Form Submissions","description":"Delete every submission for a form. The form itself is kept. This cannot be undone.","inputs":[{"name":"formId","type":"integer","required":true,"description":"Form ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"export_form_submissions","title":"Export Form Submissions","description":"Export a form's submissions as a spreadsheet into the user's Nextcloud storage. Returns the destination path. Use read_file / get_file_info afterwards to work with the export.","inputs":[{"name":"fileFormat","type":"string","required":true,"description":"Export file format"},{"name":"formId","type":"integer","required":true,"description":"Form ID"},{"name":"path","type":"string","required":true,"description":"Target folder path inside the user's Nextcloud (e.g. \"/Exports\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":86},{"name":"get_text_workspace","title":"Get Text Workspace","description":"Get metadata of the Text workspace file (Readme.md) for a folder. Returns the file's id, name, mimetype and path, or reports that no workspace exists yet.","inputs":[{"name":"path","type":"string","required":true,"description":"Folder path relative to the user's root (e.g. '/Projects/Acme')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"read_text_workspace","title":"Read Text Workspace","description":"Read the content of a folder's Text workspace file (Readme.md). Returns markdown text, or a 'no workspace' message if none exists.","inputs":[{"name":"path","type":"string","required":true,"description":"Folder path relative to the user's root (e.g. '/Projects/Acme')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"write_text_workspace","title":"Write Text Workspace","description":"Create or overwrite a folder's Text workspace file. If a workspace already exists, its existing filename is reused; otherwise Readme.md is created at the folder root.","inputs":[{"name":"content","type":"string","required":true,"description":"Markdown content to write"},{"name":"path","type":"string","required":true,"description":"Folder path relative to the user's root (e.g. '/Projects/Acme')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":76},{"name":"delete_text_workspace","title":"Delete Text Workspace","description":"Delete the Text workspace file (Readme.md) for a folder. The folder itself is kept. No-op if the folder has no workspace.","inputs":[{"name":"path","type":"string","required":true,"description":"Folder path relative to the user's root (e.g. '/Projects/Acme')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":61},{"name":"get_text_workspace_edit_url","title":"Get Text Workspace Edit URL","description":"Get a one-shot direct-edit URL for a folder's Text workspace. Opens the live collaborative editor in a browser. The Readme.md is created automatically if it does not exist yet. Hand the URL to a human collaborator — the MCP server does not participate in the editing session.","inputs":[{"name":"path","type":"string","required":true,"description":"Folder path relative to the user's root (e.g. '/Projects/Acme')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":90},{"name":"list_text_tasks","title":"List Text Tasks","description":"List AI task types available in Nextcloud's TaskProcessing framework (summarize, headline, image-to-text, text-to-image, …). Shows which task types have at least one provider configured.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":49},{"name":"process_text","title":"Process Text with AI","description":"Submit a text-processing task to Nextcloud's AI framework and return the task ID. Use get_task_result to poll until it completes. Common task types: 'core:text2text' (free prompt), 'core:summarize' (summary), 'core:headline' (headline), 'core:extract_topics' (topics).","inputs":[{"name":"customId","type":"string","required":false,"description":"Optional identifier to tag the task for later retrieval"},{"name":"input","type":"string","required":true,"description":"The text to process"},{"name":"taskType","type":"string","required":true,"description":"Task type ID (e.g. 'core:summarize', 'core:headline', 'core:extract_topics', 'core:text2text')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":140},{"name":"get_task_result","title":"Get AI Task Result","description":"Get the status and result of a Nextcloud AI task previously created by process_text or generate_image. Status: 1=scheduled, 2=running, 3=successful, 4=failed.","inputs":[{"name":"taskId","type":"number","required":true,"description":"The task ID returned by process_text or generate_image"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"generate_image","title":"Generate Image","description":"Generate an image from a text prompt using Nextcloud's text-to-image AI provider (e.g. Stable Diffusion via LocalAI). Returns the task ID; use get_task_result to check completion.","inputs":[{"name":"prompt","type":"string","required":true,"description":"Text description of the image to generate"},{"name":"savePath","type":"string","required":false,"description":"Optional Nextcloud path to save the generated image (e.g. '/Photos/generated.png'). If omitted, only the task ID is returned."}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":97},{"name":"translate_text","title":"Translate Text","description":"Translate text between languages using Nextcloud's configured translation provider. If called without text, returns available language pairs.","inputs":[{"name":"fromLanguage","type":"string","required":false,"description":"Source language code (e.g. 'en', 'de', 'fr')"},{"name":"text","type":"string","required":false,"description":"Text to translate. Omit to list available language pairs."},{"name":"toLanguage","type":"string","required":false,"description":"Target language code (e.g. 'en', 'de', 'fr')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":94},{"name":"get_user_status","title":"Get User Status","description":"Get the current user's presence status (online, away, DND, invisible, custom message)","inputs":[{"name":"userId","type":"string","required":false,"description":"User ID to check (defaults to the configured Nextcloud user)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"set_user_status","title":"Set User Status","description":"Set the current user's status type (online, away, dnd, invisible, offline)","inputs":[{"name":"statusType","type":"string","required":true,"description":"Status type to set"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"set_user_status_message","title":"Set User Status Message","description":"Set a custom status message with optional emoji icon and auto-clear time","inputs":[{"name":"clearAt","type":"number","required":false,"description":"Unix timestamp when the message should auto-clear (null = never)"},{"name":"message","type":"string","required":true,"description":"Custom status message text"},{"name":"statusIcon","type":"string","required":false,"description":"Status emoji icon (e.g. \"☕\", \"🏠\", \"🤒\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"clear_user_status_message","title":"Clear User Status Message","description":"Clear the current user's custom status message","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":18},{"name":"list_user_statuses","title":"List User Statuses","description":"List all users' statuses for team presence visibility","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum number of statuses to return"},{"name":"offset","type":"number","required":false,"description":"Offset for pagination"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"list_notifications","title":"List Notifications","description":"List all notifications for the current user","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":16},{"name":"get_notification","title":"Get Notification","description":"Get details of a specific notification by ID","inputs":[{"name":"id","type":"number","required":true,"description":"The notification ID"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":27},{"name":"mark_notification_read","title":"Mark Notification as Read","description":"Mark a notification as read (deletes it)","inputs":[{"name":"id","type":"number","required":true,"description":"The notification ID to mark as read"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"delete_all_notifications","title":"Delete All Notifications","description":"Delete all notifications for the current user","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":17},{"name":"list_activity","title":"List Activity","description":"List recent entries from the Nextcloud activity feed (file changes, shares, comments, calendar/contact edits, etc.) for the current user.","inputs":[{"name":"filter","type":"string","required":false,"description":"Which feed to read: 'all' (default), 'self' (your own actions), or 'by' (others' actions)"},{"name":"limit","type":"number","required":false,"description":"Maximum number of activities to return (default 50)"},{"name":"since","type":"number","required":false,"description":"Return activities after this activity_id (for pagination)"},{"name":"sort","type":"string","required":false,"description":"Sort order by time: 'desc' (newest first, default) or 'asc'"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":128},{"name":"get_object_activity","title":"Get Object Activity","description":"List the activity history for a single object, e.g. one file. Use object_type 'files' with a file ID to see what happened to that file.","inputs":[{"name":"limit","type":"number","required":false,"description":"Maximum number of activities to return (default 50)"},{"name":"object_id","type":"string","required":true,"description":"The object ID (e.g. the Nextcloud file ID)"},{"name":"object_type","type":"string","required":false,"description":"The object type to filter by (default 'files')"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":97},{"name":"list_announcements","title":"List Announcements","description":"List announcements from the Nextcloud Announcement Center (org-wide notices such as maintenance windows, events, or news). Returns newest first.","inputs":[{"name":"offset","type":"number","required":false,"description":"Return announcements before this offset (for pagination, default 0)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":54},{"name":"create_announcement","title":"Create Announcement","description":"Create a new announcement in the Announcement Center. This is visible to all or selected groups and can trigger notifications/emails — use deliberately. Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"activities","type":"boolean","required":false,"description":"Publish to the activity feed (default true)"},{"name":"comments","type":"boolean","required":false,"description":"Allow comments (default true)"},{"name":"deleteTime","type":"number","required":false,"description":"Unix timestamp (seconds) to automatically delete the announcement"},{"name":"emails","type":"boolean","required":false,"description":"Send emails (default false)"},{"name":"groups","type":"array","required":false,"description":"Group IDs to target, or ['everyone'] for all users (default)"},{"name":"message","type":"string","required":true,"description":"The announcement body (Markdown supported)"},{"name":"notifications","type":"boolean","required":false,"description":"Send notifications (default true)"},{"name":"plainMessage","type":"string","required":false,"description":"Plain-text version of the message (defaults to message)"},{"name":"scheduleTime","type":"number","required":false,"description":"Unix timestamp (seconds) to publish the announcement later"},{"name":"subject","type":"string","required":true,"description":"The announcement title (kept short)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":200},{"name":"delete_announcement","title":"Delete Announcement","description":"Delete an announcement by its ID. Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"id","type":"number","required":true,"description":"The announcement ID to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":39},{"name":"get_registration_settings","title":"Get Registration Settings","description":"Read the Nextcloud Registration app settings (self-service signup configuration), such as allowed email domains, whether admin approval is required, and the default group for new users. Requires the configured Nextcloud user to be an admin.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"update_registration_settings","title":"Update Registration Settings","description":"Update one or more Nextcloud Registration app settings. Boolean settings use the strings 'yes'/'no'; allowed_domains takes a JSON array string (e.g. '[\"example.com\"]'). Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"settings","type":"array","required":true,"description":"One or more key/value pairs to update"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":72},{"name":"reset_registration_setting","title":"Reset Registration Setting","description":"Reset a Nextcloud Registration app setting to its default by deleting the stored value. Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"key","type":"string","required":true,"description":"The Registration config key to reset to its default"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"get_terms_of_service","title":"Get Terms of Service","description":"Read the Nextcloud Terms of Service admin configuration: all published terms (by country/language), the enforcement settings (tos_for_users, tos_on_public_shares), and the valid country and language codes that can be used when setting terms. Requires the configured Nextcloud user to be an admin.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"set_terms_of_service","title":"Set Terms of Service","description":"Create or update the terms of service for a given country/language pair. If terms already exist for that pair they are replaced, otherwise new terms are created. Use get_terms_of_service to discover valid country/language codes; an invalid code returns an error (HTTP 417). Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"body","type":"string","required":true,"description":"The terms text (markdown: headers, formatting, lists, links)"},{"name":"countryCode","type":"string","required":false,"description":"2-letter region code, or \"--\" for global (default)"},{"name":"languageCode","type":"string","required":true,"description":"2-letter language code (e.g. \"en\")"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":137},{"name":"delete_terms_of_service","title":"Delete Terms of Service","description":"Delete a single terms of service entry by its id (see get_terms_of_service). Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"id","type":"number","required":true,"description":"The terms id to delete"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"reset_terms_signatures","title":"Reset Terms Signatures","description":"Reset ALL users' terms of service signatures org-wide, forcing every user to accept the terms again on next login. This is destructive and cannot be undone. Requires the configured Nextcloud user to be an admin.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"update_terms_settings","title":"Update Terms Settings","description":"Update the Terms of Service enforcement settings: whether logged-in users must accept the terms (tos_for_users) and whether the terms apply to public shares (tos_on_public_shares). Requires the configured Nextcloud user to be an admin.","inputs":[{"name":"tosForUsers","type":"boolean","required":false,"description":"Require logged-in users to accept the terms"},{"name":"tosOnPublicShares","type":"boolean","required":false,"description":"Apply the terms to public shares"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":89},{"name":"list_recommendations","title":"List Recommendations","description":"List files Nextcloud recommends for the configured user (e.g. recently or frequently accessed, recently shared, or files in active folders), including the reason each file is recommended. Respects the user's recommendations setting.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"social_home_timeline","title":"Read Social Home Timeline","description":"Read the home timeline in Nextcloud Social: posts from the accounts this user follows, newest first.","inputs":[{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":85},{"name":"social_public_timeline","title":"Read Social Public Timeline","description":"Read the public timeline in Nextcloud Social — every public post this server knows about. Set local to true for posts from this server only.","inputs":[{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"local","type":"boolean","required":false,"description":"Only posts from this Nextcloud server (default false)"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":110},{"name":"social_hashtag_timeline","title":"Read Social Hashtag Timeline","description":"Read the public posts carrying a given hashtag in Nextcloud Social.","inputs":[{"name":"hashtag","type":"string","required":true,"description":"The hashtag, without the leading #"},{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"local","type":"boolean","required":false,"description":"Only posts from this Nextcloud server (default false)"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":109},{"name":"social_list_timeline","title":"Read Social List Timeline","description":"Read the timeline of one of this user’s Social lists. Call it without list_id first to see the available lists and their ids.","inputs":[{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"list_id","type":"number","required":false,"description":"The list to read; omit to list the available lists instead"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":112},{"name":"social_list_saved_statuses","title":"List Saved Social Statuses","description":"List the posts this user has favourited or bookmarked in Nextcloud Social.","inputs":[{"name":"kind","type":"string","required":true,"description":"Which collection to read: favourites (starred) or bookmarks (saved)"},{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":102},{"name":"social_get_status","title":"Get Social Status","description":"Read one post in Nextcloud Social by its id, optionally with the thread around it (the posts it replies to and the replies to it).","inputs":[{"name":"include_context","type":"boolean","required":false,"description":"Also fetch the surrounding thread (default false)"},{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":66},{"name":"social_status_history","title":"Get Social Status Edit History","description":"List the successive versions of a post that has been edited in Nextcloud Social.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"social_upload_media","title":"Attach Nextcloud File to Social Post","description":"Stage a file from this user’s Nextcloud storage as a media attachment for Nextcloud Social, and return the media id to pass to social_post_status. The file is copied at upload time, so moving or deleting the original later does not empty the post. Nothing is published until the post is made.","inputs":[{"name":"description","type":"string","required":false,"description":"Alt text describing the media, for accessibility"},{"name":"path","type":"string","required":true,"description":"Path to the file inside the user’s Nextcloud files, e.g. Photos/sunset.jpg"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":111},{"name":"social_post_status","title":"Post to the Fediverse","description":"Publish a post from this user's Nextcloud Social account. This publishes to the fediverse: the action is delivered to other servers immediately and cannot be recalled. A public post is world-readable. Supports replies, media attachments (see social_upload_media), polls, content warnings and visibility. Confirm the wording and the visibility with the user before calling this.","inputs":[{"name":"in_reply_to_id","type":"number","required":false,"description":"Numeric id of the status this replies to"},{"name":"language","type":"string","required":false,"description":"ISO 639 language code of the post, e.g. en"},{"name":"media_ids","type":"array","required":false,"description":"Media ids returned by social_upload_media"},{"name":"poll","type":"object","required":false,"description":"Attach a poll to the post"},{"name":"sensitive","type":"boolean","required":false,"description":"Mark attached media as sensitive"},{"name":"spoiler_text","type":"string","required":false,"description":"Content warning shown in place of the post until the reader expands it"},{"name":"status","type":"string","required":true,"description":"The text of the post"},{"name":"visibility","type":"string","required":false,"description":"Who sees it: public (default, world-readable and listed), unlisted, private (followers only), direct (mentioned accounts only). An unrecognised value is treated as direct"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":232},{"name":"social_delete_status","title":"Delete Social Post","description":"Delete one of this user’s own posts in Nextcloud Social. A delete is federated to the servers that received the post, but copies already shown or cached elsewhere may remain.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":57},{"name":"social_favourite","title":"Favourite Social Post","description":"Favourite (star) a post in Nextcloud Social. This publishes to the fediverse: the action is delivered to other servers immediately and cannot be recalled. A public post is world-readable. The author's server is told who favourited it.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"social_unfavourite","title":"Unfavourite Social Post","description":"Remove this user’s favourite from a post in Nextcloud Social.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"social_boost","title":"Boost Social Post","description":"Boost (reblog) a post in Nextcloud Social, republishing it to this user's followers. This publishes to the fediverse: the action is delivered to other servers immediately and cannot be recalled. A public post is world-readable. Confirm with the user before boosting.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":75},{"name":"social_unboost","title":"Undo Social Boost","description":"Undo a boost of a post in Nextcloud Social.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"social_bookmark","title":"Bookmark Social Post","description":"Bookmark a post in Nextcloud Social so it can be found again. Bookmarks are private to this user and are not federated.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"social_unbookmark","title":"Remove Social Bookmark","description":"Remove a bookmark from a post in Nextcloud Social.","inputs":[{"name":"status_id","type":"number","required":true,"description":"The numeric status id"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"social_lookup_account","title":"Look Up Social Account","description":"Look up one fediverse account by handle in Nextcloud Social and return its profile and counts.","inputs":[{"name":"acct","type":"string","required":true,"description":"The handle: user for a local account, user@server for a remote one"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":51},{"name":"social_account_statuses","title":"Read Social Account Posts","description":"Read the posts of one fediverse account in Nextcloud Social, newest first.","inputs":[{"name":"account","type":"string","required":true,"description":"Account id, or the handle (user@server)"},{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"},{"name":"only_media","type":"boolean","required":false,"description":"Only posts carrying media (default false)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":113},{"name":"social_list_account_follows","title":"List Social Followers or Following","description":"List the followers of a fediverse account, or the accounts it follows.","inputs":[{"name":"account","type":"string","required":true,"description":"Account id, or the handle (user@server)"},{"name":"direction","type":"string","required":true,"description":"followers = who follows this account; following = who this account follows"},{"name":"limit","type":"number","required":false,"description":"Statuses to return (default 20, max 50)"},{"name":"max_id","type":"number","required":false,"description":"Only statuses older than this status id (page back)"},{"name":"min_id","type":"number","required":false,"description":"Only statuses newer than this status id (page forward)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":118},{"name":"social_follow_account","title":"Follow Fediverse Account","description":"Follow a fediverse account from this user's Nextcloud Social account. This publishes to the fediverse: the action is delivered to other servers immediately and cannot be recalled. A public post is world-readable. The other server is told who followed; a locked account has to approve the request first.","inputs":[{"name":"account","type":"string","required":true,"description":"Account id, or the handle (user@server)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":84},{"name":"social_unfollow_account","title":"Unfollow Fediverse Account","description":"Stop following a fediverse account from this user’s Nextcloud Social account.","inputs":[{"name":"account","type":"string","required":true,"description":"Account id, or the handle (user@server)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"social_list_follow_requests","title":"List Social Follow Requests","description":"List the accounts waiting for this user to approve their follow request in Nextcloud Social.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":27},{"name":"social_respond_follow_request","title":"Approve or Reject Social Follow Request","description":"Approve or reject a pending follow request in Nextcloud Social. This publishes to the fediverse: the action is delivered to other servers immediately and cannot be recalled. A public post is world-readable. Approving lets that account see this user’s followers-only posts.","inputs":[{"name":"account_id","type":"string","required":true,"description":"The id of the requesting account, from social_list_follow_requests"},{"name":"action","type":"string","required":true,"description":"authorize to approve, reject to decline"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":98},{"name":"social_list_notifications","title":"List Social Notifications","description":"List this user’s Nextcloud Social notifications — mentions, follows, favourites, boosts and poll results — grouped so that forty favourites of one post read as one line.","inputs":[{"name":"exclude_types","type":"array","required":false,"description":"Skip these types"},{"name":"limit","type":"number","required":false,"description":"Notifications to read before grouping (default 20, max 50)"},{"name":"max_id","type":"number","required":false,"description":"Only notifications older than this id (page back)"},{"name":"types","type":"array","required":false,"description":"Only these types, e.g. [\"mention\",\"follow\",\"favourite\",\"reblog\"]"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":114},{"name":"social_dismiss_notifications","title":"Dismiss Social Notifications","description":"Dismiss one Nextcloud Social notification, or clear all of them when no id is given. Dismissed notifications cannot be brought back.","inputs":[{"name":"notification_id","type":"number","required":false,"description":"The notification to dismiss; omit to clear every notification"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":56},{"name":"social_search","title":"Search the Fediverse","description":"Search Nextcloud Social for accounts, hashtags or post content. Set resolve to true to fetch a handle or post URL this server has never seen — that contacts the remote server.","inputs":[{"name":"limit","type":"number","required":false,"description":"Results per kind (default 20, max 40)"},{"name":"q","type":"string","required":true,"description":"The search query: text, a handle, a hashtag or a post URL"},{"name":"resolve","type":"boolean","required":false,"description":"Fetch an unknown handle or URL from its home server (default false)"},{"name":"type","type":"string","required":false,"description":"Restrict the search to one kind of result; omit to search all three"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":125},{"name":"generate_social_share_links","title":"Generate Social Share Links","description":"Generate social-network share URLs (email, X/Twitter, Facebook, Telegram, WhatsApp, Bluesky, Diaspora) for an existing Nextcloud public-link share. Only networks whose socialsharing_<network> app is enabled are returned. Provide either share_id or path.","inputs":[{"name":"networks","type":"array","required":false,"description":"Optional filter, e.g. [\"twitter\",\"email\"]. Defaults to all enabled networks."},{"name":"path","type":"string","required":false,"description":"File/folder path; its public-link share is used (must already exist)"},{"name":"share_id","type":"number","required":false,"description":"ID of an existing public-link share"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":125}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T04:31:01.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":"no_attestation","reasonLabel":"No attestation published","discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-10-26","recent":[{"id":"chg_01a1a9f9-77bc-7142-acff-16e54b2f5802","kind":"score.total_changed","summary":"Trust score (41 → 42)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a1a9f9-77bc-7142-acff-16e54b2f5802"},{"id":"chg_01a19fa9-43f5-76e9-8569-d437cb2c81aa","kind":"score.total_changed","summary":"Trust score (40 → 41)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a19fa9-43f5-76e9-8569-d437cb2c81aa"},{"id":"chg_01a1955b-2906-74da-946d-d9570cd02b8e","kind":"score.total_changed","summary":"Trust score (39 → 40)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a1955b-2906-74da-946d-d9570cd02b8e"},{"id":"chg_01a18c9b-61e7-71e8-9a51-fd4a893e382c","kind":"check.reason","summary":"MCP protocol (Implements a current MCP spec version (2026-07-28).)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a18c9b-61e7-71e8-9a51-fd4a893e382c"},{"id":"chg_01a18c9b-61e7-7e21-b5c2-7d86ce64ef48","kind":"score.total_changed","summary":"Trust score (38 → 39)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a18c9b-61e7-7e21-b5c2-7d86ce64ef48"},{"id":"chg_01a18c9b-61e4-7ed2-b693-f6410f0ba472","kind":"check.verdict","summary":"Security disclosure (fail → pass)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a18c9b-61e4-7ed2-b693-f6410f0ba472"},{"id":"chg_01a18c9b-61e7-7904-b9eb-7b96a0335ced","kind":"package.version_changed","summary":"Package version (0.4.19 → 0.5.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a18c9b-61e7-7904-b9eb-7b96a0335ced"},{"id":"chg_01a185e8-dbfd-7d68-a9f7-c97a8b98e1e0","kind":"score.total_changed","summary":"Trust score (37 → 38)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a185e8-dbfd-7d68-a9f7-c97a8b98e1e0"},{"id":"chg_01a17b98-3588-7c49-9359-20ef0dcb2bb0","kind":"score.total_changed","summary":"Trust score (36 → 37)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-27","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a17b98-3588-7c49-9359-20ef0dcb2bb0"},{"id":"chg_01a175a3-c023-787a-94d6-22b393164dba","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a175a3-c023-787a-94d6-22b393164dba"},{"id":"chg_01a17588-5c71-7bea-97df-9adf8f810e19","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp#chg-chg_01a17588-5c71-7bea-97df-9adf8f810e19"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp","markdown":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp.md","changelogJson":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/elgorro-aiquila-mcp/ghcr-io-elgorro-aiquila-mcp.xml","external":[{"label":"GitHub Container Registry","href":"https://ghcr.io/elgorro/aiquila-mcp"}]}}