Nextcloud Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Nextcloud Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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).
npm install
npm run buildSet 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.
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"
}
}
}
}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-mcp#### Apache 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 apache2#### Connecting 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-token| Tool | Description |
|---|---|
get_task_lists | Discover all VTODO-capable lists |
get_tasks | Retrieve tasks; filter by list, status, limit |
create_task | Create task with summary, description, due date, priority |
update_task | Update status, summary, or percent complete |
| Tool | Description |
|---|---|
get_calendar_events | Get events in a date range |
create_calendar_event | Create event with title, times, description, location |
| Tool | Description |
|---|---|
get_notes | List all notes |
create_note | Create note with title, content, category |
get_note_content | Get full content of a note by ID |
| Tool | Description |
|---|---|
get_emails | Get recent inbox emails |
| Tool | Description |
|---|---|
list_files | List folder contents with metadata |
get_file | Read a text file's content |
upload_file | Create or overwrite a file |
create_folder | Create a new directory |
move_file | Move or rename a file or folder |
| Tool | Description |
|---|---|
get_deck_boards | List all boards |
get_deck_board | Full board view with stacks and cards |
create_deck_card | Add a card to a stack |
update_deck_card | Edit card title, description, or due date |
move_deck_card | Move card to a different column |
"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?"Connection issues
SSE stream not working through Apache
proxy_http module is enabledProxyBuffering off is set — without this, events are buffered and clients appear to hangDeck cards not showing
get_deck_board fetches stacks in a separate request from boards — ensure the Deck app is installed and the board ID is correctCalDAV issues
personal; use get_task_lists to discover list IDsEmail issues
0 (first account)Debug logs
~/Library/Logs/Claude/mcp*.logjournalctl -u nextcloud-mcp -f)MCP_AUTH_TOKEN whenever the server is reachable over a network/remote.php/dav/calendars/{username}//remote.php/dav/files/{username}//index.php/apps/notes/api/v1//index.php/apps/mail/api//ocs/v2.php/apps/deck/api/v1.0/MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.