Productivity
AI agents that use Nextcloud
UtilitySpaces gives an AI agent scoped access to Nextcloud through its own encrypted connection, not your password. The agent can call 35 named Nextcloud tools, and the 21 that write wait for a person's approval unless an admin has set the connection to run without asking. Every call is written to a hash-chained audit log with its arguments and its result.
What an agent can do in Nextcloud
Files, Talk, Deck, Tables, Calendar and search on a self-hosted Nextcloud server. An agent calls these by name, and matching is exact.
| Tool | What it does | Waits for approval by default |
|---|---|---|
| Get current user | The account this connection acts as (cheap credential check). | No — read only |
| List Talk conversations | Talk rooms this account is in, with each room's token (the id the message tools take) and unread counts. | No — read only |
| Read Talk messages | A Talk room's messages, newest first. For older ones pass the smallest id you have as lastKnownMessageId. {mention-user1}-style placeholders in a message are filled from its messageParameters. | No — read only |
| Send Talk message | Post a message in a Talk room as this account. | Yes — it writes |
| List Deck boards | Deck boards shared with this account. | No — read only |
| List board cards | A board's stacks (its columns, e.g. To do / Doing / Done) with their cards. | No — read only |
| Create card | Add a card to one stack of a board. | Yes — it writes |
| Move card | Move a card to another stack (e.g. to Done), or reorder it within its own. | Yes — it writes |
| Comment on card | Add a comment to a Deck card. | Yes — it writes |
| List tables | Nextcloud Tables shared with this account. | No — read only |
| List table columns | A table's columns. Rows name their cells by these column ids. | No — read only |
| List table rows | A table's rows; each cell is {columnId, value}, columns from list_table_columns. | No — read only |
| Add table row | Add a row to a table. | Yes — it writes |
| Update table row | Change cells of one row; cells not named keep their value. | Yes — it writes |
| Share file | Share a file or folder. shareType user, group or team (shareWith = id from find_people) or room (shareWith = Talk room token; everyone in that conversation gets it, a public room's guests too); link, email and federated reach outside this server and always ask a person. permissions: 1 read +2 edit +4 create +8 delete +16 reshare. | Yes — it writes |
| Find people | Users, groups and teams (source circles) matching a name, with the ids sharing, assigning, inviting and @mentions take. | No — read only |
| Create Talk conversation | Create a Talk room; invite takes user ids. roomType public lets anyone with the link in and always asks a person. | Yes — it writes |
| Add Talk participant | Add someone to a Talk room. source users, groups or circles (teams); emails and federated_users invite people from outside this server and always ask a person. | Yes — it writes |
| Create board | Create a Deck board. | Yes — it writes |
| Create stack | Add a stack (a column such as To do) to a board. | Yes — it writes |
| Assign card | Assign a user to a Deck card. | Yes — it writes |
| Create table | Create an empty table; add its columns with create_column. | Yes — it writes |
| Create column | Add a column to a table. type text (subtype line, rich, link), number (progress, stars), selection (multi, check), datetime (date, time) or usergroup. options holds the type's settings, e.g. {"selectionOptions":["Open","Done"]} or {"numberMin":0,"numberMax":100,"numberSuffix":"%"}. | Yes — it writes |
| List files | Files and folders in a folder of this account's Files (shared ones included), with size, type, modified time and fileId. Paths start at its root, e.g. "/Projects/Q4". | No — read only |
| Read file | A file's text: text files as they are, PDF and office files (docx, xlsx, pptx, odt...) extracted. A long file comes in pieces: pass nextOffset back as offset. | No — read only |
| Write file | Create a file. Text in content, a binary file (e.g. a .docx you built) base64 in contentBase64. Missing folders are created. A file that exists is replaced only with overwrite true, which asks a person (Nextcloud keeps the old version). A file written into a folder shared by public link is public at once. | Yes — it writes |
| Create folder | Create a folder, and any missing folders above it. | Yes — it writes |
| Move file | Move or rename a file or folder. It never replaces: if the target exists it fails, and the target must be deleted first (which asks a person). Moving it out of a shared folder takes it away from the people it was shared with. | Yes — it writes |
| Delete file | Move a file or folder to the trash bin, where it can be restored. Always asks a person first. | Yes — it writes |
| Search | Search Nextcloud. provider (default files): files, talk-message, talk-conversations, search-deck-card-board, search-deck-comment, calendar, tasks, contacts, collectives-pages, collectives-page-content, tables-search-tables, notes, mail, comments, forms; "all" searches files, Talk, Deck, calendar, tasks, contacts, Collectives and Tables at once. Pass cursor back for the next page. | No — read only |
| Update card | Change a Deck card's title, description, due date ("" clears it) or done state; what you leave out keeps its value. | Yes — it writes |
| List calendars | Calendars this account sees (its own and shared ones): the id the event tools take, and whether each holds events (VEVENT), tasks (VTODO) or both. | No — read only |
| List events | Events (or tasks) of a calendar from from to to (ISO; default today to 30 days ahead; tasks: all unless a range is given). A recurring event comes as its occurrences. href is what a DELETE through request takes. | No — read only |
| Save event or task | Create an event or task, or change one by uid (what you leave out keeps its value). Times ISO 8601 with offset (2026-10-20T10:00:00+03:00; none = UTC); end defaults to an hour after start. allDay takes dates, end inclusive. attendees: user ids for people on this server; an email address invites someone outside it and always asks a person. | Yes — it writes |
| Nextcloud request | Any other Nextcloud call, on this server only. Every method but GET is a write, and a write that is not one of these recipes asks a person. MOVE/COPY, and a PUT of a file or calendar object, replace what is there only with overwrite true, which asks too. {user} is this account's id. Recipes: copy a file: COPY /remote.php/dav/files/{user}/a.txt destination /remote.php/dav/files/{user}/b.txt; Talk (/ocs/v2.php/apps/spreed/api): participants GET v4/room/{token}/participants; react POST v1/reaction/{token}/{messageId} {reaction}; edit PUT v1/chat/{token}/{messageId} {message}, DELETE it to delete; mark read POST v1/chat/{token}/read {lastReadMessage}; description PUT v4/room/{token}/description {description}; poll POST v1/poll/{token} {question,options,resultMode:0,maxVotes:1}, vote POST v1/poll/{token}/{pollId} {optionIds}; Deck (/index.php/apps/deck/api/v1.0/boards/{b}/stacks/{s}/cards/{c}): delete DELETE it; archive PUT …/archive; unassign PUT …/unassignUser {userId}; label PUT …/assignLabel {labelId} (labels: GET /index.php/apps/deck/api/v1.0/boards/{b}); share a board (asks) POST …/boards/{b}/acl {type:0 user|1 group|7 team,participant,permissionEdit,permissionShare,permissionManage}; Tables (/index.php/apps/tables/api/1): share (asks) POST tables/{id}/shares {receiver,receiverType:user|group,permissionRead,permissionCreate,permissionUpdate,permissionDelete,permissionManage}; delete a row DELETE rows/{id}; delete an event: DELETE its href from list_events; Collectives: GET /ocs/v2.php/apps/collectives/api/v1.0/collectives, pages …/collectives/{id}/pages; page text is markdown in the Collectives folder, use the file tools; activity GET /ocs/v2.php/apps/activity/api/v2/activity; notifications GET /ocs/v2.php/apps/notifications/api/v2/notifications; versions PROPFIND /remote.php/dav/versions/{user}/versions/{fileId}, restore one (asks, as it replaces the current text): MOVE it destination /remote.php/dav/versions/{user}/restore/target; trash PROPFIND /remote.php/dav/trashbin/{user}/trash, restore: MOVE an item destination /remote.php/dav/trashbin/{user}/restore/{name}. | Yes — it writes |
14 read tools, 21 write tools. Generated from the connector catalogue the product runs on, so it cannot list a tool that does not exist.
What waits for a person
Reads run on their own. These do not — each one waits in Approvals for an owner or admin unless an admin has set this connection to run writes without asking, and every call toNextcloud, approved, rejected or unattended, is logged.
- Send Talk message POST
- Create card POST
- Move card PUT
- Comment on card POST
- Add table row POST
- Update table row PUT
- Share file POST
- Create Talk conversation POST
- Add Talk participant POST
- Create board POST
- Create stack POST
- Assign card PUT
- Create table POST
- Create column POST
- Write file PUT
- Create folder
- Move file
- Delete file DELETE
- Update card PUT
- Save event or task PUT
- Nextcloud request
What connecting Nextcloud takes
Nextcloud uses an API key you create in Nextcloud and paste in once. A workspace admin sets the connection up; the fields are:
- Server URL
- Username
- App password
Credentials are encrypted and bound to your workspace, never read back, and every outbound call passes one guarded fetch — the connector security posture sets out exactly how, and the security page covers the platform around it.
Where Nextcloud fits
Give an agent Nextcloud work by writing a message in the inbox, or put its tools in a scheduled flow. What the run cost is on the cost breakdown.
Other productivity integrations: Airtable, Asana, Calendly. Or see every application agents can connect to.
See it doing your actual work
Open a demo workspace, connect one app, and give an agent a real job. No card, no sales call.
We reply to every message within one business day.