I searched around a bit and found https://github.com/dreiekk/calcdav
not sure if it still works, last commit was 3 years ago (on the other hand, there was no AI vibecoding back then, so thats a plus), but it looks like it might do exactly what you're looking for