Personal Context Bridge
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., "@Personal Context Bridgesearch my calendar and notes for 'launch' and check how fresh that data is"
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.
Personal Context Bridge
A self-hosted MCP bridge for your own Apple, Canvas, Health, travel, and Obsidian context. Search encrypted archives from an MCP client, check sync freshness, and retrieve bounded records. Each person supplies their own accounts and devices.
This repository contains reusable code and fictional tests. It ships no personal archive, account credentials, installed app IDs, or maintainer deployment history.
Try it with fictional data
Use Python 3.11+ on Linux for the archive server. With uv:
git clone https://github.com/jeremydevv/personal-context-bridge.git
cd personal-context-bridge
uv venv --python 3.11
uv pip install -e '.[mcp,messages,images]'
.venv/bin/personal-context-setup --demo --iphoneThe setup command creates a random 32-byte key, encrypted databases, private source
templates, upload credentials, and mcp.json under
~/.local/share/personal-context-bridge/runtime. It refuses to overwrite an
existing installation or put runtime state inside a source checkout. --iphone
is optional; it creates empty Health/travel archives, not fictional health data.
Copy the generated mcpServers entries from that private mcp.json into your
MCP client's configuration. The file already contains absolute paths to this
installation's Python interpreter and private archive. Restart the client and
ask it to search for fictional. The demo returns three clearly fictional
Calendar, Reminder, and Notes records. Use a separate --root when setting up
real collection, so demo records do not mix with your context.
For pip, replace the two uv commands with python3 -m venv .venv and
.venv/bin/pip install -e '.[mcp,messages,images]'. On Ubuntu, install the matching
python3-venv package if venv creation is unavailable. There is no published PyPI
package yet; install from this repository.
Connections
Connection | Data available | Authentication / permission |
Apple Calendar | Event titles, notes, timing, participants and source details | macOS Calendar permission through Apple PIM; SSH key for archive transfer |
Apple Reminders | Lists, tasks, notes, dates and completion | macOS Reminders permission through Apple PIM; SSH key for transfer |
Apple Contacts | Names, emails, phones, addresses and other contact fields | macOS Automation access to Contacts; SSH key for transfer |
Apple Mail | Mailbox inventory, headers, recipient details and available bodies | Local Mail index via patched Apple PIM; Full Disk Access; SSH key for transfer |
Apple Messages | Messages, participants, attachment metadata and optionally file bytes | Full Disk Access to the local Messages database/files; SSH key for transfer |
Apple Notes | Titles, available bodies, folders and timestamps | macOS Automation access to Notes; SSH key for transfer |
Canvas | Student courses, assignments, submissions/grades, announcements and files; optional PDF/DOCX text | User-provided Canvas API bearer token in a private local file |
Apple Health | Selected HealthKit samples, workouts/routes, activity summaries and aggregates | HealthKit read permission in the PulsHealth iPhone app; bearer token for receiver uploads |
OwnTracks | Location coordinates, timestamps and travel event metadata | iOS location permission; HTTP Basic authentication with a private generated password |
Google Maps Timeline | Visits, activities and paths from an on-phone JSON export | User-provided export file; no live Google OAuth connection |
Obsidian | Allowlisted vault files; optional revision-checked Markdown edits | Local filesystem/encrypted mount access; iCloud authentication belongs to your own sync setup |
MCP client | Tool-selected records from your archives | Local stdio subprocess; remote access requires your own authenticated transport |
Connect your sources
Follow setup for Mac-to-Linux collection, Canvas, iPhone receivers, Timeline imports, Obsidian, scheduling, and backups. MCP configuration examples show the separate source servers. For ChatGPT web, follow the private tunnel guide. The archive works while collection devices are asleep; check timestamps before assuming current data.
The Apple collectors need macOS. The archive/query service and iPhone receivers
are tested on Linux. On macOS, the mcp extra uses sqlcipher3, requiring a
working native SQLCipher build (for example Homebrew SQLCipher plus matching
compiler flags). Windows is not supported by the current Unix lock/mount code.
Image previews require the images extra and PDF text extraction requires
pdftotext (poppler-utils on Ubuntu). Locked Notes, absent Messages attachments,
and image-only PDFs may have no readable content.
Privacy and writes
Archives use SQLCipher; binary attachments use authenticated AES-GCM encryption. Keys and upload credentials are separate files created with mode 0600 in a private directory. Keep a secure recovery copy of the key: losing it loses access to your archive. Read privacy and retention before using real data.
The default MCP surfaces retrieve data. Refresh requests and Mail sending are opt-in. Obsidian writes require explicit server configuration and revision checks. Mail sending uses a separately configured sender/account and a worker with a five-minute cancellation window. Tool annotations and descriptions do not enforce human approval; configure your client to require approval for write operations.
Local storage does not mean the AI provider never sees your data: tool results are sent to the client/model you connect. Do not expose the receiver ports directly to the public internet. Supply an authenticated, encrypted network path for phone uploads; the receiver processes deliberately bind to loopback.
Development
uv pip install -e '.[mcp,messages,images,dev]'
.venv/bin/python -m unittest discover -s tests
.venv/bin/python -m unittest discover -s iphone/tests
.venv/bin/python iphone/tests/upstream_smoke_test.py
.venv/bin/python scripts/check_release.py
.venv/bin/python -m buildThe Health HTTP smoke test uses synthetic upstream fixtures and temporary encrypted storage. Device permissions and live account access are user-specific and are not exercised by CI. See CONTRIBUTING.md.
Original bridge code is MIT licensed. Adapted PulsHealth components retain Apache-2.0 licensing; see NOTICE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search your newsletter and YouTube archive, drafted actions and working context from any MCP client.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Bounded KVP, RAG search, and wipe receipts for agent jobs over remote MCP
Agentic search over your Dewey document collections from any MCP-compatible client.