elentra-local-connector
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@elentra-local-connectorShow me my Elentra schedule for next week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
elentra-local-connector
A private, local, read-only MCP connector that lets Claude Desktop search your own uOttawa Elentra data — by borrowing your existing authenticated Chrome session rather than storing any credential.
Spec: PRD-FINAL.md is authoritative.
Status: read-only. write_enabled = false is a build-time constant.
What "live" means here
Reasonably current while the connector is active — never a push guarantee. Elentra
exposes no webhooks, no WebSocket, and no SSE, so this polls. The auth token lasts
60 minutes, so stale is the normal case; every tool response carries fetched_at,
is_stale, and staleness_seconds so Claude says "as of 3 hours ago" instead of
implying live truth.
Architecture
Chrome MV3 extension has the session · owns the allowlist · GET only
│ no chrome.cookies · no chrome.scripting
▼ native messaging
relay thin, stateless, ~100 LOC
│ unix socket (0600)
▼
daemon (launchd) sole DB writer · parsers · ICS poller · audit
│ direct SQLite read-only (WAL)
▼
mcp-server (stdio) read-only tools → Claude DesktopFour processes, deliberately. Chrome spawns a native-messaging host as a child process, so a daemon that is that host would die with Chrome — killing unattended ICS polling — and be re-spawned on every service-worker restart, producing two writers against a WAL database that permits one. The relay costs ~100 stateless lines and removes both problems.
Setup
The build is automated; the wiring is not. See docs/HANDOFF.md — about 10 minutes of
Chrome and macOS steps that cannot be scripted.
pnpm install
pnpm bootstrap # build, keys, index, daemon, health — idempotent, re-runnablepnpm bootstrap does everything scriptable and reports what is left. The individual
steps, if you would rather run them yourself:
pnpm verify # typecheck + lint + test + secret scan — the gate
pnpm build # four bundles: mcp, daemon, relay, extension
pnpm build:mcpb # the Claude Desktop .mcpb — separate from pnpm build
pnpm health # live diagnostics, after handoffpnpm install && pnpm verify runs fully offline: fixtures are synthetic, and
tests/no-network.setup.ts replaces fetch with a thrower, so any test that reaches
for the network fails rather than silently succeeding.
Guarantees
Never stores your password; no password code path exists.
Never exports browser cookies.
Never automates login, MFA, or SSO renewal — on expiry it stops and tells you.
Never exposes a generic
request(method, url)tool to the model.Repo contains code only; fixtures are 100% synthetic.
See SECURITY.md for the invariants and PRIVACY.md for what reaches Anthropic.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Hosted MCP server for Cliniko — patients, appointments, availability, and invoices for AI agents.
- sentinelOAuthio.rootstuff
Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.