BedVibe Mail Bridge
A local Windows desktop app and MCP server that allows AI assistants to read, search, and draft replies for Gmail, but enforces human confirmation for all destructive actions like sending, deleting, or unsubscribing.
README
BedVibe Mail Bridge
A local Windows desktop app + MCP bridge that lets an AI client (Claude Code / Codex) help with your Gmail — where nothing is sent, deleted, or unsubscribed without a human button-press.
Status: v0.1.0 — local developer preview / portfolio release. Gmail only. Run-from-source. Not a consumer installer, and not clone-and-connect — see Running it yourself below.

What it is
An AI assistant can search and read your mail, propose a cleanup plan, draft replies, and map your subscriptions — but the AI can only prepare. Every action that sends, deletes, or leaves your machine happens only when you click it in the desktop app.
- Local-first. No backend, no cloud, no tunnels. The AI talks to a local stdio MCP (no port).
- Read-first & human-gated. The MCP can read and queue; it cannot Trash, Send, or unsubscribe — those live behind a GUI confirmation and are structurally unreachable from the AI side.
- Private by construction. OAuth via Google's own consent (PKCE); refresh token & desktop secret
encrypted with Windows DPAPI in
%APPDATA%; telemetry stores domain hashes only. - No production credential in this repo (see Privacy below).
Features
- Read: recent inbox, Gmail-query search, read message, list threads.
- Cleanup: AI builds a plan only → you review in the GUI → confirm Move to Trash (reversible; permanent delete is implemented nowhere). Never-trash rules + an optional "unread promos >90d" policy.
- Replies: AI drafts → you verify recipient/subject/body → press Send.
- Subscription Cleanup: header-based detection + RFC 8058 one-click unsubscribe, GUI-confirmed,
no body links/cookies/redirects.

- MCP tools for Claude Code / Codex:
list_recent_emails,search_emails,read_email,list_threads,create_cleanup_plan,view_cleanup_plan,request_trash_selected_items,draft_reply,request_send_draft,list_connections_status.
Safety model (the point)
The destructive code (core/execute.py for Trash/Send, core/unsubscribe.py for one-click) is
imported only by the GUI, never by the MCP bridge. A prompt-injected email can at most create
a queued request you will see and can reject. Full design: ARCHITECTURE.md ·
SECURITY.md.
Running it yourself (developer preview)
Cloning this repo does not grant Gmail access. The repo ships the public BedVibe Client ID but not the client secret (it's DPAPI-encrypted on the maintainer's machine, gitignored). To run it, use development mode with your own free Google client:
- Google Cloud Console → new project → enable Gmail API.
- OAuth consent screen → External, Testing → add your Gmail as a Test user.
- Credentials → OAuth client ID → Desktop app → copy the Client ID.
copy app_config.example.json app_config.json, paste your Client ID (leave secret empty for PKCE).-
python -m venv .venv ; .venv\Scripts\activate pip install -r requirements.txt python selftest.py # structural check python run_app.py # Connections → Connect Gmail (read)
Then AI Client Connections → Connect Claude Code / Codex (shows the exact config change + backs it up) and ask your AI to analyze clutter or draft a reply. Full walkthrough: DEMO.md.
Provider status
| Provider | Status |
|---|---|
| Gmail | Active |
| Zoho Mail · Outlook / Microsoft 365 · Yahoo Mail · Google Drive | Planned (inactive cards) |
Project layout
core/ shared engine (oauth, gmail, execute, unsubscribe, safety, db, providers, …)
mcp_server/ stdio MCP bridge (10 read/prepare/queue tools)
gui/ PySide6 desktop app (9 screens)
docs/images/ screenshots
*.md README · ARCHITECTURE · SECURITY · DEMO · CHANGELOG · RELEASE_READINESS · DISTRIBUTION_OAUTH
Documentation
ARCHITECTURE · SECURITY · DEMO · DISTRIBUTION_OAUTH · RELEASE_READINESS · CHANGELOG
Privacy
No secret, token, DPAPI file, Gmail database, log, or real message content is committed — application
data lives in %APPDATA%\BedVibeMailBridge\ and is gitignored. The only credential in source is the
public desktop Client ID (public by design for installed apps).
License
Proprietary / source-available — see LICENSE. Copyright (c) 2026 Panagiotis Gkilis / BedVibe Studios. All rights reserved. Published for portfolio evaluation and technical review only; no copying, modification, redistribution, hosting, training, or commercial use without prior written permission.
Maintainer / contact: Panos Gkilis · BedVibe Studios · bedvibe@bedvibe.studio
v0.1.0 developer preview. A separate packaged consumer build (Google verification + installer) is future work, not this repo.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.