Skip to main content

nextcloud-organizer-mcp logo

nextcloud-organizer-mcp

Let Claude run your Nextcloud tasks, calendar and notes.
A self-hosted MCP server for CalDAV tasks, events and the Notes app.

PyPI CI Python 3.10+ MIT license

A scripted client creating a task, a recurring event and a time block, then reading the day's agenda
Real tool calls against a real Nextcloud · watch as video

Ask in plain language, and your own Nextcloud changes. No copy-paste, no third-party calendar service: the data stays on your server and the tools talk to it over standard CalDAV and the Notes REST API.

Community project, not affiliated with or endorsed by Nextcloud GmbH. Formerly nextcloud-task-mcp.

What you can say

You say What happens
"Add a high-priority task: finish the Q4 report by Thursday 5pm, remind me 2 hours before." create_task with due date, priority and a VALARM reminder
"Add a weekly team sync, Mondays 10:00." create_event with an RRULE
"Block Thursday 9-11 for the report." create_event_from_task — a linked time block, task and event stay connected
"What does my Thursday look like?" get_agenda — events (recurring ones expanded) and due tasks in one answer
"Start a note for the Q4 report, then update just the status section." create_note, update_note_section

What Claude wrote shows up in the normal Nextcloud apps, immediately:

Nextcloud Calendar showing the 9-11 time block and the task deadline

Nextcloud Tasks showing the high-priority task with its tag and due date

Nextcloud Notes showing the note after a single-section update

Features

  • Tasks (VTODO): priorities, tags, reminders, subtasks, recurrence with exception dates, four-state status, batch update/delete/move.
  • Calendars and events (VEVENT): recurring events, attendees and RSVP, free/busy, sharing, ICS import/export, birthdays, batch operations, trash bin.
  • Timeboxing: turn a task into a calendar block and keep both linked.
  • Notes: create, search, append, replace a passage or a single Markdown section.
  • Combined day agenda: events and due tasks together.
  • Safe by default: OAuth 2.1 with a password consent page, https:// enforced for Nextcloud, clean error messages instead of stack traces.
  • 51 tools in total, documented in the tool reference.

Compatibility

Client Status
Claude (claude.ai web) as a custom connector Supported, connector and consent flow tested against claude.ai
Claude mobile and Cowork Use the same connector as web; not tested separately
Claude Desktop via mcp-remote Documented in the deployment guide
Other MCP clients and model providers Not tested yet, planned

The server speaks standard Streamable HTTP MCP with OAuth 2.1 (Dynamic Client Registration + PKCE), so other clients may work. The OAuth redirect allow-list defaults to claude.ai and claude.com; other clients need MCP_OAUTH_ALLOWED_REDIRECT_DOMAINS set. Reports from other clients are welcome.

Quick start

Requires Python 3.10+ and a Nextcloud with the Calendar/Tasks and Notes apps.

uv tool install nextcloud-organizer-mcp   # or: pipx install nextcloud-organizer-mcp

Create an app password under Settings → Security → Devices & sessions (never your account password), then set:

export NEXTCLOUD_BASE_URL=https://cloud.example.com
export NEXTCLOUD_USERNAME=your-username
export NEXTCLOUD_APP_PASSWORD=your-app-password
export PUBLIC_BASE_URL=https://your-host.ts.net   # the URL clients use
export MCP_OAUTH_PASSWORD=a-long-random-password  # required unless local
nextcloud-organizer-mcp     # listens on 127.0.0.1:8000, path /mcp

From a checkout instead: uv sync && cp .env.example .env, edit .env, then uv run nextcloud-organizer-mcp. Every setting is documented in .env.example. NEXTCLOUD_BASE_URL must be https:// unless it points at a local address.

Then expose the server (the deployment guide uses Tailscale Funnel for TLS) and add it in Claude under Settings → Connectors → Add custom connector with the URL <PUBLIC_BASE_URL>/mcp. Leave Client ID and Secret blank and enter your MCP_OAUTH_PASSWORD on the consent page that opens. Details: Authentication.

How it works

Claude ── HTTPS + OAuth 2.1 ──► your server (this project) ── CalDAV / Notes API ──► Nextcloud
  • One CalDAV connection is opened at startup and reused for every request.
  • No tool or CalDAV logic runs until a request carries a valid access token.
  • The server binds to a local HTTP port and does not handle TLS itself.
  • Timestamps use MCP_DEFAULT_TIMEZONE (default Europe/Berlin); naive inputs are interpreted in it.

Documentation

License

MIT

Release files for nextcloud-organizer-mcp 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nextcloud-organizer-mcp 0.2.1
File Size Uploaded
nextcloud_organizer_mcp-0.2.1.tar.gz 3.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nextcloud-organizer-mcp 0.2.1
File Interpreter ABI Platform
nextcloud_organizer_mcp-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 3.3 MB

Release files / nextcloud_organizer_mcp-0.2.1.tar.gz

Download URL nextcloud_organizer_mcp-0.2.1.tar.gz
Size 3.1 MB
Tags Source
SHA-256 checksum
How to use checksums
72a422c4a304eca98a7d79ffa70f509b7f4eab35455efa239984f69061e1dfb9
BLAKE2b-256 checksum
How to use checksums
039d27951b00be83eec2783408c12d5c83989ecad94342af9af3190cee8739d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release files / nextcloud_organizer_mcp-0.2.1-py3-none-any.whl

Download URL nextcloud_organizer_mcp-0.2.1-py3-none-any.whl
Size 158.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b8c5dfd544e5123c36c165ba3fba1bee75ac57ea7c07bdf5f919a65a98add50e
BLAKE2b-256 checksum
How to use checksums
49fec6dacf10099c71f1c8b3ad27529305ddf5c61f0b1af727f6a81c024c6400
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page