Skip to main content
Glama
DRMM101

draftgate-mcp

by DRMM101

draftgate-mcp

An MCP server for email agents that cannot send mail without a human saying yes — unless you've explicitly told it otherwise for that contact.

Most "AI email assistant" demos either send freely (fine for a toy, unacceptable in production) or gate everything behind approval (safe, but defeats the point of automation for routine, low-stakes contacts). draftgate-mcp does neither: each contact carries its own trust level, and the send path enforces it deterministically — not by asking the model to "please be careful."

The pattern

Every contact has an auth_level:

Level

Behaviour

full

Sends immediately. No gate.

high

Sends immediately, unless the body contains a flagged keyword (contract, invoice, payment, password, confidential, legal) — then it's held for review instead.

ask

Always held as a draft. A human must explicitly call confirm_draft().

ask_before_draft

The agent isn't even allowed to compose a draft without permission first. This is the default for anyone not in contacts.json.

send_email() returns a status field — sent, draft_created, needs_review, or blocked — and the server's own instructions tell the calling model exactly what each status requires before it's allowed to proceed. The gate lives in code, not in a prompt asking the model nicely not to send things.

Unknown recipients default to the most restrictive level. An agent can't accidentally email someone it's never been told about — it has to be extended a trust level explicitly, by a human, first.

Related MCP server: sabit-mcp

Tools

  • read_inbox, read_message — read mail via IMAP

  • send_email — the gated send path described above

  • list_drafts, confirm_draft, discard_draft — manage held drafts

  • list_contacts, add_contact, update_contact_auth — manage trust levels

Setup

pip install -r requirements.txt
cp .env.example .env        # fill in your IMAP/SMTP credentials
cp data/contacts.example.json data/contacts.json   # add your real contacts
python server.py

Point any MCP client (Claude Desktop, Claude Code, etc.) at server.py over stdio.

Why

This was extracted from the trust-tiering logic in a production email agent I run for my own inbox. The rest of that system — voice, telephony, task tracking, internal chat bridges — is specific to my own setup and not worth open-sourcing as-is, but the draft-gate pattern is a genuinely reusable answer to "how do you let an agent act without letting it act unsupervised." This repo is that pattern, stripped down to ~250 lines with no dependencies beyond the standard library, fastmcp, and python-dotenv.

License

MIT — see LICENSE.

Derek Manthorpe · github.com/DRMM101

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DRMM101/draftgate-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server