Stefan LohmaierandClaude Opus 4.8 c9ccb4392b harden: per-item robustness + deadlines/caps across connectors; layered tests
Mail: _safe_decode + _iter_messages (per-mail try/except) -> eine kaputte Mail
(charset x-unknown) bricht die Suche nicht mehr ab, findet so auch uralte Mails.
Vollscan + Datum-Sort + MAX_SCAN/DEADLINE_S (Selbstheilung, kein 24h-Haenger mehr).

Files: search_files mit SEARCH_DEADLINE_S + SEARCH_MAX_DIRS begrenzt (war
unbegrenzte rekursive PROPFIND -> real 35s/449 Calls).

Calendar/Contacts: PARSE_DEADLINE_S fuer client-seitiges vobject-Parsen;
MAX_RESULTS-Output-Cap in get_events/get_tasks (war 10939 Zeilen bei 6000 Events);
search Top-N + Hinweise.

Tests: in Schichten getrennt -> Smoke (nightly), Edge + Stress (on-demand).
Neu: test_smoke/test_edge/test_stress + conftest-Marker + run_full_tests.sh,
nightly laeuft nur Smoke. Kontakt-Foto-Roundtrip-Test, Mail-Edge-Mails
(x-unknown, kaputter Header, 2009er Alt-Mail).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-24 21:17:26 +02:00

mcp-home

Self-hosted MCP servers for Claude. Gives Claude access to your email, calendar, contacts, files, and notes — all running on your own hardware, behind OAuth.

Services & Tools

  • Maillist_accounts, list_folders, search_mail (full text), read_mail (lists attachments), read_attachment (image/PDF/text), create_draft
  • Calendar + Taskslist_calendars, get_events, search_events, list_task_lists, get_tasks, create_event (travel time + geocoding + reminders), create_task
  • Contactssearch_contacts, get_contact (with photo), create_contact, set_contact_photo
  • Fileslist_files, read_file (image/document/text), file_info, search_files, write_file, create_folder, delete_file, move_file
  • Noteslist_notebooks, list_notes, search_notes, read_note, create_note, list_note_resources, read_resource (attachments)

Setup

python3 -m venv venv
venv/bin/pip install mcp[cli] httpx vobject python-dateutil pytest
cp tokens.json.example tokens.json      # set OAuth client secrets
cp config.json.example config.json      # set backend credentials

Notes needs joplin-cli sync clients exposing the Data API (see /opt/joplin-mcp/).

Usage with claude.ai

Settings → Integrations → Custom MCP Server:

  • URL: https://<service>.mcp.your-domain/mcp (mail, calendar, contacts, files, notes)
  • OAuth Client ID: your username (e.g. stefan)
  • OAuth Client Secret: from tokens.json

claude.ai runs the OAuth Authorization Code + PKCE flow automatically.

Tests

venv/bin/python -m pytest tests/test_all.py -v

54 integration tests (OAuth, all tools, CRUD in isolated test collections). Run daily via mcp-tests.timer.

License

MIT

S
Description
Self-hosted MCP servers for Claude — Mail, Calendar, Contacts, Files, Notes via CalDAV/CardDAV/WebDAV/IMAP
Readme
526 KiB
Languages
Python 98.4%
Shell 1.6%