Export your own Microsoft 365 data — Teams chats, Outlook mail, calendar, contacts, OneDrive files — through Microsoft Graph, then search it offline: full-text and semantic ranking fused into one list, plus a built-in MCP server so Claude can search the archive. Delegated access, no admin consent. Nothing leaves your machine.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · streamable-http · http counts 8 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
browse_messages
-
corpus_stats
-
get_document
-
get_thread
-
list_folders
-
list_people
-
read_source_file
-
search_messages
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 38
filesystem 22
- fs n-schilling-office_365_exporter-033eaad/app.py :40
import shutil - fs n-schilling-office_365_exporter-033eaad/auth.py :33
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/combined_search.py :53
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/corpus.py :21
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/folders.py :33
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/i18n.py :26
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/mcp_server.py :62
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/onedrive_export.py :50
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/outlook_export.py :50
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/packaging/smoke_test.py :36
import shutil - fs n-schilling-office_365_exporter-033eaad/rag_index.py :37
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/rag_server.py :26
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/settings.py :29
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/store_layout.py :31
from pathlib import Path - fs n-schilling-office_365_exporter-033eaad/teams_export.py :55
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_app.py :18
import shutil - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_auth.py :415
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_i18n.py :12
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_progress.py :156
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_projekt.py :12
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_settings.py :14
from pathlib import Path - fs (weak) n-schilling-office_365_exporter-033eaad/tests/test_updates.py :178
from pathlib import Path
shell / exec 5
- shell n-schilling-office_365_exporter-033eaad/app.py :45
import subprocess - shell (weak) n-schilling-office_365_exporter-033eaad/packaging/smoke_test.py :39
import subprocess - shell (weak) n-schilling-office_365_exporter-033eaad/tests/test_app.py :20
import subprocess - shell (weak) n-schilling-office_365_exporter-033eaad/tests/test_projekt.py :139
import subprocess - shell (weak) n-schilling-office_365_exporter-033eaad/tests/test_settings.py :221
import subprocess
network 19
- net n-schilling-office_365_exporter-033eaad/answer.py :134
import requests - net n-schilling-office_365_exporter-033eaad/app.py :52
from urllib.parse import urlsplit, parse_qs - net n-schilling-office_365_exporter-033eaad/combined_search.py :54
from urllib.parse import quote, unquote - net n-schilling-office_365_exporter-033eaad/mcp_server.py :64
from urllib.parse import quote, unquote - net n-schilling-office_365_exporter-033eaad/onedrive_export.py :51
from urllib.parse import unquote - net n-schilling-office_365_exporter-033eaad/outlook_export.py :64
import requests - net (weak) n-schilling-office_365_exporter-033eaad/packaging/smoke_test.py :37
import socket - net n-schilling-office_365_exporter-033eaad/rag_index.py :65
import requests - net n-schilling-office_365_exporter-033eaad/rag_server.py :27
from urllib.parse import urlsplit, unquote, quote - net n-schilling-office_365_exporter-033eaad/teams_export.py :67
import requests - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_answer.py :3
Nie ins Netz: requests.post wird immer ersetzt. Zwei Zusagen stehen im - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_app.py :284
monkeypatch.setattr("requests.get", lambda *a, **k: R()) - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_mcp_server.py :12
from urllib.parse import quote - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_outlook_export.py :12
import requests - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_rag_index.py :3
Es wird nie echtes Ollama angesprochen: requests.post bzw. rag_index.embed - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_rag_server.py :3
Ollama wird nie angesprochen: requests.post ist überall gemockt. Für die - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_teams_export.py :13
import requests - net (weak) n-schilling-office_365_exporter-033eaad/tests/test_updates.py :3
Kein Netz: requests.get wird immer ersetzt. Wichtigster Fall ist der, den es - net n-schilling-office_365_exporter-033eaad/updates.py :71
import requests
secrets 1
- secrets n-schilling-office_365_exporter-033eaad/auth.py :106
val = os.environ.get("GRAPH_TOKEN")
database 7
- db n-schilling-office_365_exporter-033eaad/app.py :41
import sqlite3 - db n-schilling-office_365_exporter-033eaad/mcp_server.py :60
import sqlite3 - db n-schilling-office_365_exporter-033eaad/rag_index.py :35
import sqlite3 - db n-schilling-office_365_exporter-033eaad/rag_server.py :377
import sqlite3 - db (weak) n-schilling-office_365_exporter-033eaad/tests/test_app.py :19
import sqlite3 - db (weak) n-schilling-office_365_exporter-033eaad/tests/test_mcp_server.py :15
import sqlite3 - db (weak) n-schilling-office_365_exporter-033eaad/tests/test_rag_index.py :9
import sqlite3
tool registrations 8
- search_messages n-schilling-office_365_exporter-033eaad/mcp_server.py :535
- browse_messages n-schilling-office_365_exporter-033eaad/mcp_server.py :591
- get_thread n-schilling-office_365_exporter-033eaad/mcp_server.py :642
- get_document n-schilling-office_365_exporter-033eaad/mcp_server.py :668
- list_people n-schilling-office_365_exporter-033eaad/mcp_server.py :722
- read_source_file n-schilling-office_365_exporter-033eaad/mcp_server.py :767
- list_folders n-schilling-office_365_exporter-033eaad/mcp_server.py :792
- corpus_stats n-schilling-office_365_exporter-033eaad/mcp_server.py :817
declared dependencies 5
- mcp@==2.0.0
- msal@==1.37.0
- numpy@==2.5.2
- requests@==2.34.2
- cryptography@==48.0.1; sys_platform == "darwin" and platform_machine == "x86_64"