Mailforce — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mailforce (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Mailforce is the safe way to let AI agents use your email without handing them your whole inbox.
The fastest way to feel what Mailforce is for:
cp .env.example .env
# add OPENAI_API_KEY to .env
npm install
npm run build
npm link
mailforce setup
mailforce agents create support-agent --description "Customer support bot"
mailforce playgroundInside the playground:
/connect
/agent support-agent
"Show me my Mailforce boundaries."
"Search for the latest customer thread about invoice issues."
"Draft a safe reply but do not send it."The point is immediate: you can chat with an agent, let it inspect or act on email workflows, and still keep Mailforce in charge of which inboxes, recipients, and send paths are allowed.
Most people want agents to help with email, but they stop at the same point:
Mailforce exists for that exact moment.
It gives your agents useful email access with smart restrictions:
stdio or remotely through HTTP with an API keyMailforce is designed to become the default trust layer between AI agents and email providers.
READ, WRITE, and READ_WRITE behavior.stdio MCP and remote HTTP MCP.In practice, that means you can do things like:
*@customer.com..edu emails, but not send anything.OAuth usually gives the connected app broad mailbox access. Once the token exists, the real safety decisions are mostly outside your control.
Mailforce adds a policy layer in front of that token. The agent does not talk to Gmail directly. It talks to Mailforce, and Mailforce decides whether the action is allowed.
That means the question changes from:
"Should this agent have my Gmail token?"
to:
"What exactly should this agent be allowed to do with this account?"
Mailforce splits email access into two simple concepts:
EVERYONE: the agent can contact any address.ONLY: the agent can contact only a whitelist such as *@customer.com or [email protected].EVERYONE_EXCEPT: the agent can contact everyone except a blacklist such as *@competitor.com.Examples:
--allow "EVERYONE"
--allow "ONLY *@customer.com, [email protected]"
--allow "EVERYONE_EXCEPT *@competitor.com"READ: list, search, and read emails.WRITE: draft, reply, or send emails.READ_WRITE: both read and write capabilities.You can also require approval for write actions:
--permission READ_WRITE --require-confirm trueThat means the agent can do useful work, but the final send still waits for you.
Gmail delegation is built for giving another human broad access to an inbox.
Mailforce is different:
ONLY *@customer.com. Mailforce does.Put simply:
Gmail delegate says "this actor can use the inbox."
Mailforce says "this specific agent can use this inbox in these ways, with these limits."
cp .env.example .env
# set OPENAI_API_KEY in .env
npm install
npm run build
npm linkIf you do not want to run npm link, use node dist/cli/index.js ... instead of mailforce ....
Run the first-time setup wizard any time with:
mailforce setupThis is the shortest path to a useful interactive setup:
mailforce setup
mailforce agents create support-agent --description "Customer support bot"
mailforce accounts connect gmail "Work Email" \
--email [email protected] \
--hosted
mailforce policies set support-agent \
--name support-policy \
--accounts "Work Email" \
--allow "ONLY *@customer.com" \
--permission READ_WRITE \
--require-confirm true
mailforce playgroundOnce the playground opens, you can explore with normal chat plus slash commands like /help, /scope, /approvals, /account, and /agent.
mailforce setup
mailforce playground
mailforce agents create support-agent --description "Customer support bot"
mailforce accounts connect gmail "Work Email" \
--email [email protected] \
--hosted
mailforce accounts connect gmail "Work Email" \
--email [email protected] \
--client-id "$GOOGLE_CLIENT_ID" \
--client-secret "$GOOGLE_CLIENT_SECRET"
mailforce policies set support-agent \
--name support-policy \
--accounts "Work Email" \
--allow "ONLY *@customer.com" \
--permission READ_WRITE \
--require-confirm true
mailforce keys create support-agent --name claude-remoteThe first accounts connect example is the easy browser-auth path. The second is the advanced bring-your-own Google OAuth flow.
mailforce playground..env.The built-in playground is the easiest way to experiment. Use the HTTP MCP server when you want other local or remote agents to call Mailforce directly.
Start the Mailforce HTTP MCP server:
mailforce mcp serve-http --port 8787Create an API key for the agent that should use Mailforce:
mailforce keys create support-agent --name claude-remoteThen configure your MCP client to call the HTTP endpoint at http://127.0.0.1:8787/mcp with a bearer token.
Claude Code example:
claude mcp add --transport http mailforce-remote http://127.0.0.1:8787/mcp \
--header "Authorization: Bearer YOUR_AGENT_KEY"Project .mcp.json example:
{
"mcpServers": {
"mailforce-remote": {
"type": "http",
"url": "http://127.0.0.1:8787/mcp",
"headers": {
"Authorization": "Bearer ${MAILFORCE_AGENT_KEY}"
}
}
}
}The HTTP server is the remote MCP endpoint for cloud or non-local agents. Mailforce uses the bearer key to resolve the agent identity and enforce that agent's access policy.
The biggest blocker to useful agent workflows is not model intelligence. It is permissions.
Mailforce is opinionated about that:
If that layer becomes standard, developers get one mental model for safe email automation across Gmail, Outlook, local agents, and remote agents.
Mailforce now has two connection paths:
mailforce accounts connect gmail "Work Email" --email [email protected] --hosted--client-id and --client-secret directlyThe hosted path is designed for the simple "press Enter, browser opens, come back connected" experience. The broker URL is configurable for self-hosted or staged environments through the Mailforce playground config.
See docs/hosted-auth.md for the broker contract the CLI expects.
Mailforce should be easy to extend.
Contributions are especially welcome in these areas:
If you want to contribute:
npm install.npm test and npm run check before opening a PR.Mailforce is built so new providers plug into the shared policy and MCP layers.
Start by reading Provider.md, which explains:
Providers that would be especially valuable next:
get_access_infolist_emailssearch_emailsget_emailcreate_draftsend_emailreply_to_threadlist_pending_approvalsget_action_statusSee docs/integrations.md for Claude Code and Cursor setup examples.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.