Server data from the Official MCP Registry
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Remote endpoints: streamable-http: https://server.smithery.ai/@hithereiamaliff/mcp-nextcloud/mcp
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry.
Endpoint verified · Requires authentication · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Remote Plugin
No local installation needed. Your AI client connects to the remote endpoint directly.
Add this to your MCP configuration to connect:
{
"mcpServers": {
"ai-smithery-hithereiamaliff-mcp-nextcloud": {
"url": "https://server.smithery.ai/@hithereiamaliff/mcp-nextcloud/mcp"
}
}
}From the project's GitHub README.
MCP Endpoint: https://mcp.techmavie.digital/nextcloud/mcp
Note: This project is a complete rewrite in TypeScript of the original Python-based cbcoutinho/nextcloud-mcp-server, now with self-hosted VPS deployment and Smithery deployment support.
Key Differences from the Original Repository:
- Language: This project is written in TypeScript, while the original is in Python.
- Smithery Support: Added full support for Smithery deployment and local testing via Smithery playground.
- Project Structure: The project structure has been adapted for a Node.js/TypeScript environment with MCP SDK integration.
- Dependencies: This project uses npm for package management, whereas the original uses Python's dependency management tools.
- Deployment: Now supports both local development and cloud deployment via Smithery.
The Nextcloud MCP (Model Context Protocol) server allows Large Language Models (LLMs) like OpenAI's GPT, Google's Gemini, or Anthropic's Claude to interact with your Nextcloud instance. This enables automation of various Nextcloud actions across Notes, Calendar, Contacts, Tables, and WebDAV file operations.
The hosted HTTP integration now supports a safer multi-user flow through the MCP Key Service. Instead of embedding raw Nextcloud credentials in the connector URL, hosted clients can use a user-scoped usr_... key and let the server resolve credentials server-side.
The server provides integration with multiple Nextcloud apps, enabling LLMs to interact with your Nextcloud data through a comprehensive set of 30 tools across 5 main categories.
| App | Support Status | Description |
|---|---|---|
| Notes | ✅ Full Support | Create, read, update, delete, search, and append to notes. |
| Calendar | ✅ Full Support | Complete calendar integration - manage calendars and events via CalDAV. |
| Tables | ✅ Full Support | Complete table operations - list tables, get schemas, and perform CRUD operations on rows. |
| Files (WebDAV) | ✅ Full Support | Complete file system access - browse directories, read/write files, create/delete resources. |
| Contacts | ✅ Full Support | Create, read, update, and delete contacts and address books via CardDAV. |
| Tool | Description |
|---|---|
nextcloud_notes_create_note | Create a new note with title, content, and category |
nextcloud_notes_update_note | Update an existing note by ID with optional title, content, or category |
nextcloud_notes_append_content | Append content to an existing note with a clear separator |
nextcloud_notes_search_notes | Search notes by title or content with result filtering |
nextcloud_notes_delete_note | Delete a note by ID |
| Tool | Description |
|---|---|
nextcloud_calendar_list_calendars | List all available calendars for the user |
nextcloud_calendar_create_event | Create a calendar event with summary, description, dates, and location |
nextcloud_calendar_list_events | List events from a calendar with optional date filtering |
nextcloud_calendar_get_event | Get detailed information about a specific event |
nextcloud_calendar_update_event | Update any aspect of an existing event |
nextcloud_calendar_delete_event | Delete a calendar event |
| Tool | Description |
|---|---|
nextcloud_contacts_list_addressbooks | List all available addressbooks for the user |
nextcloud_contacts_create_addressbook | Create a new addressbook with display name and description |
nextcloud_contacts_delete_addressbook | Delete an addressbook by ID |
nextcloud_contacts_list_contacts | List all contacts in a specific addressbook |
nextcloud_contacts_create_contact | Create a new contact with full name, emails, phones, addresses, and organizations |
nextcloud_contacts_delete_contact | Delete a contact from an addressbook |
| Tool | Description |
|---|---|
nextcloud_tables_list_tables | List all tables available to the user |
nextcloud_tables_get_schema | Get the schema/structure of a specific table including columns |
nextcloud_tables_read_table | Read all rows from a table |
nextcloud_tables_insert_row | Insert a new row into a table with key-value data |
nextcloud_tables_update_row | Update an existing row in a table |
nextcloud_tables_delete_row | Delete a row from a table |
| Tool | Description |
|---|---|
nextcloud_webdav_search_files | 🔍 NEW! Unified search across filenames, content, and metadata - no need to specify exact paths |
nextcloud_webdav_list_directory | List files and directories in any Nextcloud path |
nextcloud_webdav_read_file | Read file content from Nextcloud |
nextcloud_webdav_write_file | Create or update files in Nextcloud with content |
nextcloud_webdav_create_directory | Create new directories in Nextcloud |
nextcloud_webdav_delete_resource | Delete files or directories from Nextcloud |
The crown jewel of this MCP server is the powerful unified search system for WebDAV files, inspired by modern search interfaces like on an another MCP that I have created: mcp-datagovmy. This completely transforms how you interact with your Nextcloud files by eliminating the need to specify exact file paths.
// Basic search - find all files containing "FAQ Dean List"
await nextcloud_webdav_search_files({
query: "FAQ Dean List"
});
// Advanced search - find PDF reports from 2024
await nextcloud_webdav_search_files({
query: "report 2024",
fileTypes: ["pdf"],
searchIn: ["filename", "content"],
limit: 20,
includeContent: true,
quickSearch: true
});
// Directory-specific search with date range
await nextcloud_webdav_search_files({
query: "meeting notes",
basePath: "/Documents",
searchIn: ["filename", "content"],
dateRange: {
from: "2024-01-01",
to: "2024-12-31"
}
});
// Search by file characteristics
await nextcloud_webdav_search_files({
query: "configuration files",
sizeRange: { min: 1024, max: 102400 }, // 1KB - 100KB
fileTypes: ["json", "yaml", "xml", "conf"]
});
// Quick search for large directories (optimized)
await nextcloud_webdav_search_files({
query: "budget",
basePath: "/", // Root directory
quickSearch: true, // Enables optimizations
limit: 25,
maxDepth: 2 // Limit search depth
});
| Parameter | Type | Default | Description | Example |
|---|---|---|---|---|
query | string | required | Search terms - supports multiple words | "FAQ Dean List" |
searchIn | array | ["filename", "content"] | Search scope: filename, content, metadata | ["filename", "content", "metadata"] |
fileTypes | array | all types | File extensions to include | ["pdf", "txt", "md", "docx"] |
basePath | string | "/" | Directory to search in | "/Documents/Reports" |
limit | number | 50 | Maximum results to return | 20 |
includeContent | boolean | false | Include content previews for text files | true |
caseSensitive | boolean | false | Case-sensitive matching | true |
quickSearch | boolean | true | Use optimized mode for root searches | false |
maxDepth | number | 3 | Maximum directory depth (1-10) | 5 |
sizeRange | object | unlimited | File size filters in bytes | {min: 1024, max: 1048576} |
dateRange | object | all dates | Last modified date filters | {from: "2024-01-01", to: "2024-12-31"} |
quickSearch: true and maxDepth: 2-3 for faster resultsbasePath: "/Documents" instead of searching root "/"fileTypes filter to narrow scopequickSearch and use smaller limit values| Tool | Description |
|---|---|
hello | Verify server connectivity and list all available tools |
// You had to know exact paths
await nextcloud_webdav_read_file({
path: "/Documents/Finance/Reports/Q4_Budget_Analysis_2024.pdf"
});
// Multiple calls needed to explore
await nextcloud_webdav_list_directory({ path: "/" });
await nextcloud_webdav_list_directory({ path: "/Documents" });
await nextcloud_webdav_list_directory({ path: "/Documents/Finance" });
// ... and so on
// Natural language search across entire Nextcloud!
await nextcloud_webdav_search_files({
query: "Q4 budget analysis 2024",
fileTypes: ["pdf"]
});
// Finds files instantly regardless of location!
The system intelligently extracts and searches content from:
.txt, .md, .csv - Full content indexing.js, .ts, .py, .html, .css - Syntax-aware search.json, .xml, .yaml - Structure-aware indexing.pdf, .docx - Metadata and propertiesResults are ranked using advanced algorithms:
Install directly from npm and run as an MCP server:
# Install globally
npm install -g mcp-nextcloud
# Or install locally in your project
npm install mcp-nextcloud
After installation, you can run the MCP server directly:
# If installed globally
mcp-nextcloud
# If installed locally
npx mcp-nextcloud
# Or using npm script
npm exec mcp-nextcloud
Environment Setup: Create a .env file with your Nextcloud credentials:
NEXTCLOUD_HOST=https://your.nextcloud.instance.com
NEXTCLOUD_USERNAME=your_nextcloud_username
NEXTCLOUD_PASSWORD=your_nextcloud_app_password
Add to your MCP client configuration (e.g., Claude Desktop, Continue, etc.):
For CLI mode (local, single-user):
{
"mcpServers": {
"nextcloud": {
"command": "mcp-nextcloud",
"env": {
"NEXTCLOUD_HOST": "https://your.nextcloud.instance.com",
"NEXTCLOUD_USERNAME": "your_username",
"NEXTCLOUD_PASSWORD": "your_app_password"
}
}
}
}
For hosted HTTP mode (via MCP Key Service):
{
"mcpServers": {
"nextcloud": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/nextcloud/mcp/usr_XXXXXXXX"
}
}
}
Recommended for hosted clients: Use the path-based URL form (
/mcp/usr_...) for Claude.ai and similar hosted connectors. Keep the query-param form as a compatibility option for inspectors and clients that preserve query params reliably.
For self-hosted HTTP mode (your own server):
{
"mcpServers": {
"nextcloud": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/nextcloud/mcp",
"headers": {
"X-API-Key": "your-server-api-key",
"X-Nextcloud-Host": "https://your.nextcloud.instance.com",
"X-Nextcloud-Username": "your_username",
"X-Nextcloud-Password": "your_app_password"
}
}
}
}
Clone the repository:
git clone https://github.com/hithereiamaliff/mcp-nextcloud.git
cd mcp-nextcloud
Install dependencies:
npm install
Configure your Nextcloud credentials (see Configuration section)
Build the project:
npm run build
Create a .env file in the root directory based on .env.sample:
# --- CLI/stdio mode only ---
# These are used when running the server in CLI mode (npm run dev, npm run cli).
# They are NOT used by the HTTP server.
NEXTCLOUD_HOST=https://your.nextcloud.instance.com
NEXTCLOUD_USERNAME=your_nextcloud_username
NEXTCLOUD_PASSWORD=your_nextcloud_app_password
# --- HTTP server: Self-Hosted mode ---
# Required for self-hosted /mcp auth, and also used for /analytics access.
MCP_API_KEY=your-secret-api-key-here
# --- HTTP server: Key Service mode ---
# Set both to enable user api_key=usr_... resolution via the MCP Key Service.
# Users obtain and manage those keys at https://mcpkeys.techmavie.digital
# The MCP server itself talks to the resolver endpoint below.
KEY_SERVICE_URL=https://mcpkeys.techmavie.digital/internal/resolve
KEY_SERVICE_TOKEN=your-key-service-bearer-token
# Optional: Comma-separated list of allowed CORS origins.
ALLOWED_ORIGINS=https://smithery.ai,https://claude.ai
# Optional diagnostics for remote MCP debugging.
# These are intended for temporary troubleshooting in hosted HTTP mode.
MCP_TRACE_HTTP=false
ENABLE_MCP_DIAGNOSTICS=false
# Optional dedicated endpoint for Smithery URL publishing.
ENABLE_SMITHERY_ENDPOINT=false
Important Security Notes:
NEXTCLOUD_* environment variables are never used. Self-hosted clients provide credentials via X-Nextcloud-* headers, while key-service clients send only a usr_... key.openssl rand -hex 32When deploying via Smithery, you can configure credentials through:
For Smithery, the recommended model is:
nextcloudHost, nextcloudUsername, and nextcloudPassword directly/smithery/mcp endpoint as headersusr_... key-service flow remains separate and continues to use /mcp/usr_...The easiest way to use this MCP server is via the hosted endpoint. No installation required!
Endpoint: https://mcp.techmavie.digital/nextcloud/mcp
The hosted server uses the MCP Key Service for authentication. You get a personal API key (usr_XXXXXXXX) from the MCP Key Service portal:
https://mcpkeys.techmavie.digital
The server then resolves your Nextcloud credentials automatically through the resolver endpoint behind the scenes.
Why this is safer than the old query-credential approach:
usr_... key is easier than rotating a user's underlying Nextcloud password everywhereClaude.ai / hosted connector URL (recommended):
https://mcp.techmavie.digital/nextcloud/mcp/usr_XXXXXXXX
Alternative URL for clients that preserve query params correctly:
https://mcp.techmavie.digital/nextcloud/mcp?api_key=usr_XXXXXXXX
{
"mcpServers": {
"nextcloud": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/nextcloud/mcp/usr_XXXXXXXX"
}
}
}
npx @modelcontextprotocol/inspector
# Select "Streamable HTTP"
# Enter URL: https://mcp.techmavie.digital/nextcloud/mcp/usr_XXXXXXXX
If you prefer to run your own instance, the built-in Docker + Nginx setup is:
# Set required environment variables
export MCP_API_KEY=your-secret-api-key # Required for self-hosted /mcp auth and /analytics
export KEY_SERVICE_URL=https://mcpkeys.techmavie.digital/internal/resolve # Optional: enables key service mode
export KEY_SERVICE_TOKEN=your-key-service-bearer-token # Optional: enables key service mode
# Using Docker
docker compose up -d --build
# Or run directly
npm run build
npm run start:http
git clone https://github.com/hithereiamaliff/mcp-nextcloud.git
cd mcp-nextcloud
.env file with your server settings:
MCP_API_KEY=your-secret-api-key
KEY_SERVICE_URL=https://mcpkeys.techmavie.digital/internal/resolve
KEY_SERVICE_TOKEN=your-key-service-bearer-token
ALLOWED_ORIGINS=https://smithery.ai,https://claude.ai
ENABLE_SMITHERY_ENDPOINT=false
Notes:
KEY_SERVICE_URL + KEY_SERVICE_TOKEN only if you want hosted-style usr_... key resolution.https://mcpkeys.techmavie.digital.ENABLE_SMITHERY_ENDPOINT=true only if you want to publish the dedicated Smithery direct-credentials endpoint.docker compose up -d --build
sudo nginx -t
sudo systemctl reload nginx
curl http://127.0.0.1:8080/health
Important: The HTTP server does NOT use
NEXTCLOUD_*environment variables. In self-hosted mode, each client must provide Nextcloud credentials via request headers. In key-service mode, clients send onlyapi_key=usr_....
Remote MCP note: For hosted connectors such as Claude.ai, prefer the path-based URL form (
/mcp/usr_...). Keep the query-param form as a compatibility option for inspectors and clients that preserve query params reliably.
Debugging note: If a hosted client shows a generic auth prompt, it does not automatically mean OAuth is required. First verify the auth-free diagnostics route, the key-service resolver response, and the actual
initializeSSE body.
Install and run as a local MCP server:
npm install -g mcp-nextcloud
mcp-nextcloud
Note: In CLI mode, credentials are read from environment variables (
NEXTCLOUD_HOST,NEXTCLOUD_USERNAME,NEXTCLOUD_PASSWORD). This is safe because CLI mode runs locally for a single user.
For Smithery's current URL-published model, use a dedicated endpoint that accepts direct Nextcloud credentials via headers:
# Enable the Smithery endpoint on your hosted server
ENABLE_SMITHERY_ENDPOINT=true
Use this public MCP URL in Smithery:
https://mcp.techmavie.digital/nextcloud/smithery/mcp
Recommended Smithery config schema for this server:
{
"type": "object",
"properties": {
"nextcloudHost": {
"type": "string",
"title": "Nextcloud Host",
"description": "Nextcloud server URL (for example https://cloud.example.com)",
"x-from": { "header": "X-Nextcloud-Host" }
},
"nextcloudUsername": {
"type": "string",
"title": "Nextcloud Username",
"x-from": { "header": "X-Nextcloud-Username" }
},
"nextcloudPassword": {
"type": "string",
"title": "Nextcloud App Password",
"format": "password",
"x-from": { "header": "X-Nextcloud-Password" }
}
},
"required": ["nextcloudHost", "nextcloudUsername", "nextcloudPassword"]
}
Why this split is recommended:
usr_... connector flow remains unchanged for Claude.ai and other hosted clients/smithery/mcp, so it does not interfere with /mcp or /mcp/usr_...Important: The Smithery endpoint is designed for direct credentials via headers. It does not use the MCP Key Service and does not require the shared
MCP_API_KEY.To help Smithery discover tools without forcing a live authenticated scan, this server also exposes a static server card at
https://mcp.techmavie.digital/.well-known/mcp/server-card.json. If your reverse proxy mounts the app under/nextcloud, make sure that exact root-level well-known path is proxied to the app.
To publish this package to npm:
Prepare the release:
npm run build
npm version patch|minor|major
Publish to npm:
npm publish
Verify the publication:
npm view mcp-nextcloud
npm run build)npm version).npmignore properly excludes development filesdist/cli.js)This project supports both deployment methods simultaneously:
The Smithery configuration (smithery.yaml) and npm package configuration coexist without interference.
This project includes full Smithery support with:
smithery.yaml: Specifies TypeScript runtimeThe HTTP server (http-server.ts) supports two authentication modes:
Key Service Mode (hosted/multi-user):
usr_...) are resolved via the MCP Key Service which returns encrypted Nextcloud credentials.Self-Hosted Mode (single-operator):
MCP_API_KEY validates access.X-Nextcloud-* headers.Common security measures:
AsyncLocalStorage. No credential state is shared between requests.NEXTCLOUD_* environment variables for credentials. These are only used in CLI mode.ALLOWED_ORIGINS are permitted (defaults to smithery.ai and claude.ai)./analytics endpoint requires MCP_API_KEY authentication in both modes. The dashboard page stores the key in session storage, never in the URL. Client IPs are hashed before storage.NODE_ENV=production.If you deploy your own instance:
KEY_SERVICE_URL + KEY_SERVICE_TOKEN for key service, or MCP_API_KEY for self-hostedMCP_API_KEY for analytics access (required in both modes)NEXTCLOUD_* environment variables on the HTTP serverALLOWED_ORIGINS to restrict which domains can connect404 Errors on WebDAV/Calendar/Contacts:
Authentication Failures:
NEXTCLOUD_HOST URL is correct (including https://)Missing Tools:
hello tool to verify all 30 tools are availableSearch Timeout Issues:
quickSearch: true for root directory searchesbasePath like "/Documents" instead of searching root "/"fileTypes filters to narrow the search scopemaxDepth parameter for faster resultsIf the hosted connector still fails, use this order:
ENABLE_MCP_DIAGNOSTICS=true/mcp-debug/opencurl -i -X POST "$KEY_SERVICE_URL" \
-H "Authorization: Bearer $KEY_SERVICE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"key":"usr_..."}'
Expected:
200 OKContent-Type: application/jsoncurl -N --max-time 10 -X POST "https://mcp.techmavie.digital/nextcloud/mcp/usr_XXXXXXXX" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"probe","version":"1.0.0"}}}'
Expected:
200 OKContent-Type: text/event-stream200.MCP_TRACE_HTTP=true and inspect:
acceptcontent-typecontent-type response headerresolved, invalid_key, service_unavailable, malformed_response)├── src/
│ ├── index.ts # Main Smithery entry point
│ ├── http-server.ts # Streamable HTTP server for VPS deployment
│ ├── app.ts # Legacy entry point
│ ├── client/ # Nextcloud API clients
│ ├── models/ # TypeScript interfaces
│ ├── tools/ # Tool implementations
│ └── utils/ # Utility functions
├── deploy/
│ └── nginx-mcp.conf # Nginx reverse proxy config
├── .github/
│ └── workflows/
│ └── deploy-vps.yml # GitHub Actions auto-deploy
├── docker-compose.yml # Docker deployment config
├── Dockerfile # Container build config
├── smithery.yaml # Smithery configuration
├── package.json # Project dependencies and scripts
└── README.md # This file
npm run devThis project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) - see the LICENSE file for details.
Be the first to review this server!
by Modelcontextprotocol · File & Storage
Secure file operations with configurable access controls
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.