Skip to content

Commit ce3b123

Browse files
committed
Add Calendar tools with CalDAV support (6 tools, 37 tests)
Tools: list_calendars, get_events, get_event, create_event, update_event, delete_event. Uses icalendar v7.x for iCal parsing/generation. CalDAV REPORT queries for reliable event lookup by UID and time-range filtering. ETag-based concurrency on updates. Supports timed events, all-day events, and partial field updates.
1 parent 199e5ed commit ce3b123

6 files changed

Lines changed: 1099 additions & 3 deletions

File tree

PROGRESS.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,15 @@
3333
- [x] Collectives tools: list_collectives, get_collective_pages, get_collective_page (2026-03-29)
3434
- [x] App Management tools: list_apps, get_app_info, enable_app, disable_app (2026-03-30)
3535
- [x] User-permission integration tests: non-admin error handling validation (2026-03-30)
36+
- [x] Calendar tools: list_calendars, get_events, get_event, create_event, update_event, delete_event (2026-03-30)
3637

3738
### In Progress
3839

3940
### Blocked
4041
(none)
4142

4243
### Next Up
43-
- Phase 3 — Groupware (Calendar, Contacts, Tasks, Deck, Notes)
44+
- Phase 3 — Groupware (Contacts, Tasks, Deck, Notes)
4445

4546
## Phases
4647

@@ -71,11 +72,12 @@
7172
| Mail | 5 | 29 |
7273
| Collectives | 3 | 22 |
7374
| App Management | 4 | 14 |
75+
| Calendar | 6 | 37 |
7476
| User Permissions || 15 |
7577
| Server || 7 |
7678
| Permissions || 34 |
7779
| Errors || 16 |
7880
| Client || 29 |
7981
| Config || 17 |
8082
| State || 2 |
81-
| **Total** | **67** | **542** |
83+
| **Total** | **73** | **579** |

pyproject.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ classifiers = [
2222
"Programming Language :: Python :: 3.14",
2323
]
2424
dependencies = [
25+
"icalendar>=7",
2526
"mcp[cli]>=1.20",
2627
"niquests>=3",
2728
]
@@ -107,7 +108,8 @@ venv = "venv"
107108
reportUnusedFunction = false
108109
reportPrivateUsage = false
109110
executionEnvironments = [
110-
{ root = "tests/test_client_retry.py", reportAttributeAccessIssue = false, reportUnknownMemberType = false }
111+
{ root = "tests/test_client_retry.py", reportAttributeAccessIssue = false, reportUnknownMemberType = false },
112+
{ root = "src/nc_mcp_server/tools/calendar.py", reportUnknownMemberType = false, reportUnknownVariableType = false, reportUnknownArgumentType = false },
111113
]
112114

113115
[tool.pytest]

src/nc_mcp_server/server.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
activity,
1111
announcements,
1212
app_management,
13+
calendar,
1314
collectives,
1415
comments,
1516
files,
@@ -53,6 +54,7 @@ def create_server(config: Config | None = None) -> FastMCP:
5354
activity.register(mcp)
5455
announcements.register(mcp)
5556
app_management.register(mcp)
57+
calendar.register(mcp)
5658
collectives.register(mcp)
5759
comments.register(mcp)
5860
files.register(mcp)

0 commit comments

Comments
 (0)