collectives-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NEXTCLOUD_URL | Yes | The URL of your Nextcloud instance (e.g., https://your-nextcloud.example.com) | |
| NEXTCLOUD_USER | Yes | Your Nextcloud username | |
| NEXTCLOUD_APP_PASSWORD | Yes | An app-specific password generated in Nextcloud Settings > Security |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Verify connectivity to the configured Nextcloud instance and report how many collectives are visible. |
| list_collectivesA | List all Collectives the authenticated user has access to. Returns id, name, slug, emoji, and permission levels. |
| create_collectiveA | Create a new Collective. Also creates the underlying Nextcloud Team. Optionally set an emoji icon. |
| update_collectiveA | Change a Collective's emoji or adjust edit/share permission levels. Provide the id and any fields to change. Note: collective renaming is not supported by the API. |
| delete_collectiveA | Soft-delete a Collective (moves it to the Collectives trash, recoverable). Use permanently_delete_collective to remove it permanently and optionally delete the underlying Team. |
| list_trashed_collectivesA | List Collectives that have been soft-deleted. These can be restored or permanently deleted. |
| restore_trashed_collectiveA | Restore a soft-deleted Collective from the trash. |
| permanently_delete_collectiveA | Permanently delete a Collective from the trash. THIS IS IRREVERSIBLE. The Collective must already be in the trash (use delete_collective first). Set deleteTeam=true to also remove the underlying Nextcloud Team. |
| list_pagesA | List all pages in a Collective. Returns flat metadata (id, title, parentId, emoji, tags, timestamps, paths). Use parentId to reconstruct the tree. |
| get_pageA | Fetch a page as markdown. Returns the metadata block followed by the page body. |
| searchA | Full-text search across all Collectives pages the user can access. Uses the Nextcloud unified search provider. For searching within a specific Collective, use search_in_collective instead. |
| search_in_collectiveA | Search for pages by content within a specific Collective. Returns matching page metadata. |
| create_pageA | Create a new page under a parent. If the parent is a leaf page, it is automatically promoted to a folder. Optionally initialise from a template. |
| update_pageB | Replace, append to, or prepend to a page's markdown body. Mode defaults to "replace". |
| delete_pageA | Trash a page (recoverable from the Collectives page trash). Folder pages take their entire subtree with them. The Landing page cannot be deleted — delete the collective itself instead. |
| rename_pageB | Rename a page within its current parent. |
| move_pageA | Move a page to a new parent within the same collective. If the new parent is a leaf, it is promoted first. |
| move_page_to_collectiveA | Move or copy a page (with its subpages and attachments) into a different Collective. Set copy: true to duplicate instead of moving. The page id changes on arrival, so use the returned page for follow-up calls. For reorganising within one Collective use move_page or copy_page instead. |
| set_page_emojiA | Set the single-emoji icon on a page. Pass an empty string to clear. |
| copy_pageA | Duplicate a page under the same parent. If newTitle is provided, the copy gets that title. Works for both leaf and folder pages. |
| set_page_full_widthA | Toggle a page's full-width layout. This is a Collective-wide display property of the page, not a per-user preference. |
| set_subpage_orderA | Set the explicit left-to-right ordering of a page's immediate child pages. Every id must be a direct child of the page; duplicates are rejected. Pass an empty array to clear the manual order and fall back to the Collective sort. Only takes effect for users whose page order is set to "byOrder". |
| touch_pageA | Bump a page's modification timestamp and record the authenticated user as its last editor, without changing content. Useful for marking a page as reviewed. |
| favorite_pageA | Mark a page as a favorite for the authenticated user. |
| unfavorite_pageA | Remove a page from the authenticated user's favorites. |
| list_tagsA | List all tags defined for a Collective. |
| create_tagB | Create a new tag in a Collective. Requires a name and a hex color code (e.g. "#FF0000"). |
| update_tagA | Update a tag. Both name and color are always applied, so pass the existing value for whichever one you are not changing — omitting a field is not supported by the API. Read current values with list_tags first. |
| delete_tagA | Delete a tag from a Collective. |
| set_page_tagsA | Replace the tags on a page. Tags must already exist in the Collective; pass tag ids (use list_tags to look them up). |
| list_trashed_pagesA | List pages in the trash for a Collective. These can be restored or permanently purged. |
| restore_pageB | Restore a trashed page back to its original location. |
| purge_pageA | Permanently delete a trashed page. THIS IS IRREVERSIBLE — the page content cannot be recovered after this call. The page must already be in the trash (use delete_page first). |
| list_page_versionsA | List available versions (revision history) for a page. Returns version ids that can be used with restore_page_version. |
| restore_page_versionA | Restore a specific historical version of a page. The current content is replaced with the selected version (the current version is preserved as a new version entry). |
| list_recent_pagesA | List recently-modified pages for a Collective, ordered by last edit time. |
| get_backlinksA | Find pages that link to the given page. Scans the linkedPageIds field on all pages in the Collective. |
| list_attachmentsA | List attachments for a page. Returns name, size, content type, and the relative markdown path to reference each file. |
| upload_attachmentA | Upload an attachment to a page. Creates the attachment directory if needed. Returns a percent-encoded |
| delete_attachmentA | Delete an attachment from a page. Returns the deleted attachment including its id, which restore_attachment needs to undo this. |
| get_attachmentA | Download an attachment's contents. Returns the bytes as utf8 text or a base64 string, with the encoding stated in the result. Refuses files over 5 MB, which should be fetched from Nextcloud directly. |
| rename_attachmentA | Rename an attachment on a page. Existing references to the old filename in page bodies are NOT rewritten — update them yourself, using the returned relativePath. |
| restore_attachmentA | Restore a deleted attachment from the page's attachment trash. Takes the numeric attachment id — a trashed attachment no longer appears in list_attachments, so there is no name to look up. delete_attachment returns the id you need. |
| list_templatesA | List page templates defined for a Collective. |
| create_templateB | Create a page template in a Collective. |
| update_templateB | Rename a page template. |
| set_template_emojiA | Set or clear the emoji icon on a page template. |
| delete_templateC | Delete a page template. |
| get_templateA | Read a page template's metadata and markdown body. Use this to inspect what create_page(templateId) will produce. |
| update_template_contentA | Write a page template's markdown body. This is the content create_page(templateId) copies into new pages. An empty body is allowed and clears the template. Append and prepend are protected against concurrent edits and fail rather than overwriting someone else's change. |
| list_sharesA | List all public share links on a Collective, including per-page shares. Each entry reports its scope ("collective" or "page"), token, whether visitors can edit, and whether a password is set. Passwords themselves are never returned. |
| create_collective_shareA | Create a public share link for an entire Collective. Anyone with the link can read it (and edit, if you later enable that with update_share). Returns the share token; build the URL as {nextcloud}/apps/collectives/p/{token}. |
| create_page_shareA | Create a public share link for a single page rather than the whole Collective. Returns the share token; build the URL as {nextcloud}/apps/collectives/p/{token}. |
| update_shareA | Update an existing share link. |
| delete_shareA | Revoke a public share link. The link stops working immediately for everyone holding it. Pass pageId for a page share; omit it for the Collective-wide share. |
| set_page_modeA | Set the default page mode for a Collective — whether pages open in view or edit mode. This applies to every member of the Collective, unlike set_user_settings which is per-user. |
| set_user_settingsA | Update the authenticated user's own display preferences for one Collective: page sort order, and whether the members and recent-pages widgets on the landing page are expanded. These are per-user and do not affect other members — use set_page_mode for the Collective-wide setting. Provide at least one field; omitted fields are left unchanged. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 57 tools
Most tools use a clear resource+action pattern, so pages, tags, templates, attachments, and shares are easy to tell apart. A few near-neighbors require careful reading, such as search vs search_in_collective, update_collective vs set_page_mode, and update_template vs update_template_content, but their descriptions disambiguate them effectively.
The snake_case verb_noun convention is strong and consistently used across collectives, pages, tags, templates, attachments, and shares. Minor deviations like search and ping as bare verbs, plus the inconsistent permanent-delete terms (permanently_delete_collective vs purge_page), keep it from a perfect 5.
With 57 tools, this is far beyond a typical agent-facing MCP surface and creates significant selection overhead. Even though the domain is broad, the count sits in the extreme-mismatch range and would benefit from consolidation or splitting into smaller focused servers.
The surface covers nearly all lifecycle operations for collectives, pages, tags, templates, attachments, and shares, including trash, versions, and search. Minor gaps exist, such as no way to list favorited pages or list/purge trashed attachments, but agents can generally work around them.