nextcloud-mcp
Integrates with Nextcloud to provide access to tasks, calendar, notes, email, files, and Deck boards.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nextcloud-mcp show my tasks for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Nextcloud MCP Server
A Model Context Protocol (MCP) server that integrates with Nextcloud to provide access to tasks, calendar, notes, email, files, and Deck boards. Supports both local stdio (Claude Desktop) and remote HTTP/SSE transport (Claude Mobile via a Pi or server deployment).
Features
Tasks
Get tasks across all lists or a specific list (filter by status: all/open/completed)
Create new tasks with due dates and priorities
Update tasks (mark complete, change summary, etc.)
Discover all available task lists
Calendar
Get calendar events with date range filtering
Create new calendar events with details and location
Notes
Get all notes
Create new notes with markdown support
Get specific note content by ID
Get emails from inbox (requires Nextcloud Mail app)
Files (WebDAV)
List files and folders with metadata (size, type, last modified)
Read text file content
Upload / create or overwrite files
Create folders
Move or rename files and folders
Deck (Kanban)
List all boards
Get a full board view — all stacks (columns) and cards with assignees and labels
Create cards in a stack
Update card title, description, or due date
Move cards between columns
Related MCP server: nc-mcp-server
Prerequisites
Nextcloud instance (any recent version with CalDAV support)
Required Nextcloud apps:
Tasks — task management
Calendar — events
Notes — note-taking
Deck — Kanban boards
Mail — optional, for email access
App password: generate in Nextcloud Settings > Security > Devices & sessions
Installation
npm install
npm run buildConfiguration
Set these environment variables (or put them in a .env file for local dev):
NEXTCLOUD_URL=https://your-nextcloud.com
NEXTCLOUD_USERNAME=your-username
NEXTCLOUD_PASSWORD=your-app-password
# HTTP/SSE mode (omit for stdio)
MCP_TRANSPORT=http
MCP_PORT=3000
MCP_AUTH_TOKEN=your-secret-token⚠️ Always use an app password, never your main Nextcloud password.
Transport modes
stdio (default) — Claude Desktop, local
The server is launched as a subprocess by Claude Desktop.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"nextcloud": {
"command": "node",
"args": ["/path/to/nextcloud-mcp/build/index.js"],
"env": {
"NEXTCLOUD_URL": "https://your-nextcloud.com",
"NEXTCLOUD_USERNAME": "your-username",
"NEXTCLOUD_PASSWORD": "your-app-password"
}
}
}
}HTTP/SSE — Raspberry Pi or server deployment
Set MCP_TRANSPORT=http and the server listens on MCP_PORT (default 3000).
Endpoints:
GET /sse— SSE connectionPOST /messages?sessionId=…— inbound messagesGET /health— health check (no auth required)
systemd service
Create /etc/systemd/system/nextcloud-mcp.service:
[Unit]
Description=Nextcloud MCP Server
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/nextcloud-mcp
ExecStart=/usr/bin/node build/index.js
Restart=on-failure
Environment=MCP_TRANSPORT=http
Environment=MCP_PORT=3000
Environment=MCP_AUTH_TOKEN=your-secret-token
Environment=NEXTCLOUD_URL=https://your-nextcloud.com
Environment=NEXTCLOUD_USERNAME=your-username
Environment=NEXTCLOUD_PASSWORD=your-app-password
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now nextcloud-mcpApache reverse proxy
Add a location block to your existing SSL vhost. SSE requires buffering to be disabled or the event stream stalls.
<Location /mcp/>
ProxyPass http://localhost:3000/ flushpackets=on
ProxyPassReverse http://localhost:3000/
# Required for SSE — flush packets immediately rather than buffering
SetEnv proxy-nokeepalive 1
SetEnv proxy-initial-not-buffered 1
</Location>Enable the required modules if not already active:
sudo a2enmod proxy proxy_http
sudo systemctl reload apache2Connecting clients
Claude Desktop (local LAN, no Apache needed):
{
"mcpServers": {
"nextcloud": {
"url": "http://raspberrypi.local:3000/sse",
"headers": { "Authorization": "Bearer your-secret-token" }
}
}
}Claude Mobile (via Apache/HTTPS):
Add as a remote integration in the Claude app:
URL: https://yourdomain.com/mcp/sse
Authorization: Bearer your-secret-tokenAvailable tools
Tasks
Tool | Description |
| Discover all VTODO-capable lists |
| Retrieve tasks; filter by list, status, limit |
| Create task with summary, description, due date, priority |
| Update status, summary, or percent complete |
Calendar
Tool | Description |
| Get events in a date range |
| Create event with title, times, description, location |
Notes
Tool | Description |
| List all notes |
| Create note with title, content, category |
| Get full content of a note by ID |
Tool | Description |
| Get recent inbox emails |
Files
Tool | Description |
| List folder contents with metadata |
| Read a text file's content |
| Create or overwrite a file |
| Create a new directory |
| Move or rename a file or folder |
Deck
Tool | Description |
| List all boards |
| Full board view with stacks and cards |
| Add a card to a stack |
| Edit card title, description, or due date |
| Move card to a different column |
Example prompts
"Show me my open tasks"
"Create a task to review the Q4 report, due next Friday"
"What meetings do I have this week?"
"List the files in my Documents folder"
"Read the file Projects/notes.md"
"Show me the boards in Deck"
"Move the 'Fix login bug' card to In Progress"
"What are my latest emails?"Troubleshooting
Connection issues
Use HTTPS for your Nextcloud URL, no trailing slash
Verify the app password is correct
Ensure required apps are installed in Nextcloud
SSE stream not working through Apache
Confirm
proxy_httpmodule is enabledEnsure
ProxyBuffering offis set — without this, events are buffered and clients appear to hang
Deck cards not showing
get_deck_boardfetches stacks in a separate request from boards — ensure the Deck app is installed and the board ID is correct
CalDAV issues
Task list and calendar names are case-sensitive and must match your Nextcloud setup
Default calendar is
personal; useget_task_liststo discover list IDs
Email issues
Nextcloud Mail app must be installed and have at least one account configured
Account ID defaults to
0(first account)
Debug logs
macOS:
~/Library/Logs/Claude/mcp*.logHTTP mode: stdout/stderr from the systemd service (
journalctl -u nextcloud-mcp -f)
Security
Always use app passwords, never your main Nextcloud password
Set
MCP_AUTH_TOKENwhenever the server is reachable over a networkUse HTTPS (via your existing Apache SSL vhost) for internet-facing deployments
Store credentials in environment variables or the systemd unit file, not in code
API endpoints used
CalDAV:
/remote.php/dav/calendars/{username}/WebDAV:
/remote.php/dav/files/{username}/Notes:
/index.php/apps/notes/api/v1/Mail:
/index.php/apps/mail/api/Deck:
/ocs/v2.php/apps/deck/api/v1.0/
License
MIT
Available Tools
20 toolscreate_calendar_eventB
Create a new calendar event in Nextcloud
Inputs: summary (required), endDateTime (required), startDateTime (required), location, +1 more.
create_deck_cardA
Create a new card in a Nextcloud Deck board stack (column). Use get_deck_board to find stack IDs.
Inputs: title (required), boardId (required), stackId (required), dueDate, +1 more.
create_folderA
Create a new folder in Nextcloud.
Inputs: path (required).
create_noteC
Create a new note in Nextcloud Notes app
Inputs: content (required), title, category.
create_taskB
Create a new task in Nextcloud
Inputs: summary (required), due, listId, priority, +1 more.
get_calendar_eventsB
Retrieve calendar events from Nextcloud. Can specify date range.
Inputs: limit, endDate, startDate.
get_deck_boardA
Get a Deck board with all its stacks (columns) and cards. Use get_deck_boards first to find the board ID.
Inputs: boardId (required).
get_deck_boardsA
List all Nextcloud Deck boards the user has access to. Returns board IDs, titles, and colors.
Inputs: no named parameters.
get_emailsA
Retrieve emails from Nextcloud Mail app. Returns recent emails from inbox.
Inputs: limit, accountId.
get_fileA
Download and return the content of a file from Nextcloud. Best suited for text files (markdown, txt, csv, json, etc.).
Inputs: path (required).
get_note_contentA
Get the full content of a specific note by ID
Inputs: noteId (required).
get_notesC
Retrieve all notes from Nextcloud Notes app
Inputs: limit.
get_task_listsA
Discover all task lists (CalDAV calendars that support VTODO) available for this user. Returns each list's id (the CalDAV path segment) and display name. Use the id as the listId parameter when calling get_tasks or create_task.
Inputs: no named parameters.
get_tasksA
Retrieve tasks from Nextcloud. If listId is omitted all VTODO-capable lists are queried and results are tagged with their source list. Use get_task_lists first to see available list IDs.
Inputs: limit, listId, status.
list_filesA
List files and folders in a Nextcloud directory. Returns name, type (file/folder), size, and last modified date for each item.
Inputs: path.
move_deck_cardA
Move a Deck card to a different stack (column), e.g. from 'To Do' to 'In Progress'.
Inputs: cardId (required), boardId (required), stackId (required), targetStackId (required).
move_fileB
Move or rename a file or folder in Nextcloud.
Inputs: toPath (required), fromPath (required).
update_deck_cardB
Update an existing Deck card's title, description, or due date.
Inputs: cardId (required), boardId (required), stackId (required), title, +2 more.
update_taskA
Update an existing task (mark as complete, change summary, etc.)
Inputs: taskId (required), listId, status, summary, +1 more.
upload_fileA
Create or overwrite a file in Nextcloud with the given text content.
Inputs: path (required), content (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 20 tools
Tools are mostly distinct, with clear separation between resources (tasks, calendar, notes, mail, files, deck). The only potential overlap is between get_notes and get_note_content, where get_notes might be assumed to return content, but descriptions clarify that get_note_content fetches the full body. Overall, minor ambiguity.
All tools follow a verb_noun pattern in snake_case, but the verb for retrieving collections is inconsistent: 'get' for tasks, calendar, notes, and deck boards, but 'list' for files. This minor inconsistency prevents a perfect score.
20 tools is on the high end but appropriate for a multi-app integration covering six distinct Nextcloud apps. Each tool has a clear role, though the count feels heavy for a single server.
The server lacks delete operations for any resource type, and calendar events and notes have no update operations. Email support is read-only, which are significant gaps for common workflows.
Related MCP Connectors
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Related MCP Servers
- FlicenseCqualityDmaintenanceA powerful MCP server that enables AI assistants to interact with Microsoft Graph API for managing Outlook emails, Calendar events, OneDrive files, and Contacts through natural language commands.3556-
- AlicenseAqualityBmaintenanceAn MCP server that exposes Nextcloud APIs as tools for AI assistants, enabling management of files, calendar, contacts, conversations, and more.2221MIT
- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server that exposes Nextcloud files, calendar, notes, and search as tools for Claude.ai, authenticating via Nextcloud OAuth.MIT
- AlicenseNot gradedqualityAmaintenanceA curated MCP server that connects your Nextcloud (files, calendar, notes, deck, contacts) to AI assistants.29AGPL 3.0