MCP server for Nextcloud — expose Nextcloud APIs as AI-usable tools
Project description
Nextcloud MCP Server
Experimental — This repository is fully maintained by AI (Claude). It serves as an experiment in autonomous AI-driven open-source development.
An MCP (Model Context Protocol) server that exposes Nextcloud APIs as tools for AI assistants. Connect any MCP-compatible client (Claude Desktop, Claude Code, etc.) to your Nextcloud instance and let AI manage files, read notifications, interact with Talk, and more.
Features
- File Management — List, read, upload, move, and delete files via WebDAV
- User Info — Get current user, list users, view user details
- Notifications — List and dismiss notifications (coming soon)
- Activity Feed — View recent activity (coming soon)
- Talk — List conversations, read and send messages (coming soon)
- Security-First — Granular permission levels control what AI can do
Security: Permission Model
Every tool has a required permission level. You control what the AI is allowed to do:
| Level | What it can do | Environment variable |
|---|---|---|
read (default) |
List files, read files, get users, view notifications | NEXTCLOUD_MCP_PERMISSIONS=read |
write |
Everything in read + upload files, send messages, create folders |
NEXTCLOUD_MCP_PERMISSIONS=write |
destructive |
Everything in write + delete files, remove shares |
NEXTCLOUD_MCP_PERMISSIONS=destructive |
If a tool is called without sufficient permission, it returns a clear error explaining what permission is needed — no silent failures, no accidental deletions.
Installation
pip install nc-mcp-server
Or from source:
git clone https://github.com/cloud-py-api/nc-mcp-server.git
cd nc-mcp-server
pip install -e .
Configuration
Set these environment variables:
# Required
export NEXTCLOUD_URL=https://your-nextcloud.example.com
export NEXTCLOUD_USER=your-username
export NEXTCLOUD_PASSWORD=your-app-password # Use an app password, not your main password!
# Optional
export NEXTCLOUD_MCP_PERMISSIONS=read # read (default), write, or destructive
Getting an App Password
- Log into your Nextcloud instance
- Go to Settings → Security
- Under "Devices & sessions", create a new app password
- Use this password for
NEXTCLOUD_PASSWORD
Usage
With Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"nextcloud": {
"command": "nextcloud-mcp",
"env": {
"NEXTCLOUD_URL": "https://your-nextcloud.example.com",
"NEXTCLOUD_USER": "your-username",
"NEXTCLOUD_PASSWORD": "your-app-password",
"NEXTCLOUD_MCP_PERMISSIONS": "read"
}
}
}
}
As HTTP Server (for containers/remote)
nextcloud-mcp --transport http
# Listens on http://0.0.0.0:8100 by default
Stdio Mode (default)
nextcloud-mcp
# Communicates via stdin/stdout — used by MCP clients like Claude Desktop
Available Tools
Files (Phase 1 — available now)
| Tool | Permission | Description |
|---|---|---|
list_directory(path) |
read | List files and folders |
get_file(path) |
read | Read a file's content |
upload_file(path, content) |
write | Upload or overwrite a file |
create_directory(path) |
write | Create a new directory |
delete_file(path) |
destructive | Delete a file or directory |
move_file(source, destination) |
destructive | Move or rename a file |
Users (Phase 1 — available now)
| Tool | Permission | Description |
|---|---|---|
get_current_user() |
read | Get current user info |
list_users(search, limit) |
read | List/search users |
get_user(user_id) |
read | Get specific user details |
Coming Soon
- Notifications — list and dismiss
- Activity — recent activity feed
- Talk — conversations and messages
- Shares — manage file shares
- Calendar — events via CalDAV
- Contacts — contacts via CardDAV
- Deck — boards and cards
Development
# Clone and install
git clone https://github.com/cloud-py-api/nc-mcp-server.git
cd nc-mcp-server
python3 -m venv venv && source venv/bin/activate
pip install -e ".[dev]"
# Run tests
pytest # Unit tests
pytest tests/integration/ -v # Integration tests (needs running Nextcloud)
# Lint & type check
ruff check . && ruff format --check .
pyright
Integration Tests
Integration tests run against a real Nextcloud instance. Set the environment variables and run:
export NEXTCLOUD_URL=http://localhost:8080
export NEXTCLOUD_USER=admin
export NEXTCLOUD_PASSWORD=admin
pytest tests/integration/ -v -m integration
CI automatically runs integration tests against a fresh Nextcloud Docker container.
About This Project
This project is an experiment in AI-autonomous open-source development. The entire codebase — including this README — is written and maintained by Claude (Anthropic's AI assistant). Human oversight is limited to:
- High-level design decisions
- Code review of pull requests
- Resolving architectural questions
The goal is to explore how far autonomous AI development can go in building production-quality, well-tested software.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nc_mcp_server-0.1.0.tar.gz.
File metadata
- Download URL: nc_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 20.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2abe88618da8218c6ce6d53991f16724814932d4bdfa7eae3f311e7f93e8d9b2
|
|
| MD5 |
2a0405b0fd4dc4c2c167c803dc089a08
|
|
| BLAKE2b-256 |
28c5cf72ec6382ebeede284f48c34a320690edfba7418d87e2c1e5c4a4005098
|
Provenance
The following attestation bundles were made for nc_mcp_server-0.1.0.tar.gz:
Publisher:
publish.yml on cloud-py-api/nc-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nc_mcp_server-0.1.0.tar.gz -
Subject digest:
2abe88618da8218c6ce6d53991f16724814932d4bdfa7eae3f311e7f93e8d9b2 - Sigstore transparency entry: 1172879757
- Sigstore integration time:
-
Permalink:
cloud-py-api/nc-mcp-server@693d546908b9a170b31ee7a80a2fc5a28da61b58 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/cloud-py-api
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@693d546908b9a170b31ee7a80a2fc5a28da61b58 -
Trigger Event:
release
-
Statement type:
File details
Details for the file nc_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nc_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06017ca4f0513dd6874bf9aef4e3fcf9beb901dea9a10754586aab617ff474c0
|
|
| MD5 |
f97be8229d95a9b0f55c71307fc665ce
|
|
| BLAKE2b-256 |
c102eda67ab8e936b12f8cea9a3588ce95df65d17f5a026e4c4112b52439f9c3
|
Provenance
The following attestation bundles were made for nc_mcp_server-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on cloud-py-api/nc-mcp-server
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nc_mcp_server-0.1.0-py3-none-any.whl -
Subject digest:
06017ca4f0513dd6874bf9aef4e3fcf9beb901dea9a10754586aab617ff474c0 - Sigstore transparency entry: 1172879813
- Sigstore integration time:
-
Permalink:
cloud-py-api/nc-mcp-server@693d546908b9a170b31ee7a80a2fc5a28da61b58 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/cloud-py-api
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@693d546908b9a170b31ee7a80a2fc5a28da61b58 -
Trigger Event:
release
-
Statement type: