Skip to main content
Glama
mailpal-com

mailpal-mcp-server

Official
by mailpal-com
README.md
# mailpal-mcp-server

**Free email for AI agents** -- MCP server for [mailpal.com](https://mailpal.com)

```bash
npx mailpal-mcp-server
```

[![npm](https://img.shields.io/npm/v/mailpal-mcp-server)](https://www.npmjs.com/package/mailpal-mcp-server)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue)](LICENSE)

---

## Why MailPal?

- **Free forever** -- every AI agent gets a real `@mailpal.com` email address at no cost
- **Hardware attestation** -- emails are cryptographically signed by your TPM, proving they came from real hardware (via [1id.com](https://1id.com)). Attestation is **ON by default**.
- **Full protocols** -- SMTP, IMAP, JMAP, CalDAV, CardDAV. Not a toy API -- a real mail server powered by [Stalwart](https://stalw.art/)

## Tools

| Tool | Description |
|------|------------|
| `mailpal_activate_account` | Create your `@mailpal.com` email address (two-phase Proof-of-Intelligence challenge) |
| `mailpal_send_email` | Send email with hardware attestation ON by default (mode 2 = SD-JWT, mode 1 = direct TPM CMS, mode 0 = none) |
| `mailpal_check_inbox` | Check inbox for messages -- returns summaries with sender, subject, date, preview |
| `mailpal_read_message` | Read full message content including text body, HTML body, and all metadata |
| `mailpal_subscribe_to_inbox` | Subscribe to real-time "You've Got Mail!" notifications when new email arrives |
| `mailpal_wait_for_email` | Block until new email arrives or timeout (requires subscribe first) |
| `mailpal_register_email_callback` | Register a webhook URL to POST when new email arrives |
| `mailpal_unregister_email_callback` | Remove a previously registered webhook callback |
| `mailpal_jmap` | Raw JMAP passthrough -- delete, move, flag, search, folders, contacts, calendars, sieve filters, blob upload, anything JMAP supports |
| `oneid_get_or_create_identity` | Get or create a hardware-anchored 1id identity for this agent |
| `oneid_status` | Full picture of identity, devices, connected services |
| `oneid_get_bearer_token` | Get an OAuth2 Bearer token for the current identity |
| `oneid_sign_challenge` | Sign a verifier-provided nonce to prove hardware identity |
| `oneid_verify_peer_identity` | Verify another agent's identity proof bundle |
| `oneid_list_credential_pointers` | List credential pointers for an identity |

The `mailpal_jmap` tool gives your agent access to the full JMAP specification (RFC 8620/8621)
and all Stalwart extensions. If a convenience tool doesn't exist for what you need, use this.

## Quick Start

### 1. Get a 1id.com identity

```bash
npx 1id enroll
```

This creates a hardware-anchored identity. The MCP server uses it directly:
each MailPal request is signed with your enrolled key (TPM, YubiKey, Secure
Enclave or software key), because 1ID tokens are sender-constrained -- a
token on its own is refused. There is no token to copy into a config file.

### 2. Add to your MCP client

**Cursor** (`~/.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "mailpal": {
      "command": "npx",
      "args": ["-y", "mailpal-mcp-server"]
    }
  }
}
```

**Claude Desktop** (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "mailpal": {
      "command": "npx",
      "args": ["-y", "mailpal-mcp-server"]
    }
  }
}
```

**Windsurf** (`~/.windsurf/mcp.json`):

```json
{
  "mcpServers": {
    "mailpal": {
      "command": "npx",
      "args": ["-y", "mailpal-mcp-server"]
    }
  }
}
```

## Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `MAILPAL_API_URL` | No | Override API base URL (default: `https://mailpal.com/api/v1`) |

## Also Available As

- **Python**: [`mailpal-mcp`](https://pypi.org/project/mailpal-mcp/) on PyPI -- `pip install mailpal-mcp`
- **REST API**: `https://mailpal.com/api/v1/` ([docs](https://mailpal.com/api/docs))
- **Direct IMAP/SMTP**: `imap.mailpal.com:993` / `smtp.mailpal.com:587` (standard email clients)

## Comparison

| Feature | MailPal | AgentMail | Robotomail | Nylas |
|---------|---------|-----------|------------|-------|
| Free tier | **Unlimited** | 100 msgs | Limited | Paid |
| Real SMTP/IMAP | **Yes** | API only | API only | Yes |
| Hardware attestation | **Yes (ON by default)** | No | No | No |
| CalDAV/CardDAV | **Yes** | No | No | Yes |
| MCP server | **Yes** | Yes | No | No |
| JMAP passthrough | **Yes** | No | No | No |
| Real-time inbox push | **Yes** | No | No | No |
| Self-hostable | **Yes** (Stalwart) | No | No | No |

## Development

```bash
git clone https://github.com/mailpal-com/mcp-server.git
cd mcp-server
npm install
npm run build
node dist/index.js
```

Test with MCP Inspector:

```bash
npx -y @modelcontextprotocol/inspector
```

## License

Apache-2.0 -- see [LICENSE](LICENSE).

Built by [Crypt Inc.](https://cryptinc.com) -- the team behind [1id.com](https://1id.com) and [mailpal.com](https://mailpal.com).

TDQS

C2.8/5.0

Scored across 2 tools

Disambiguation4/5

The two tools target clearly different domains (email vs. hardware identity), so an agent can pick between them without confusion. However, both use an identical generic 'operation' gateway pattern, so the actual sub-operations are not visible as distinct entities and require a readme call to disambiguate.

Naming Consistency4/5

Both tools use the same single-word, lowercase product-name convention (mailpal, oneid), which is internally consistent. They do not follow a verb_noun pattern, but they are consistently named gateways rather than mixed styles.

Tool Count2/5

Only two tools are exposed for what appears to be a broad email and identity ecosystem, which is thin for the apparent scope. Each tool is a mega-gateway hiding an unknown number of operations behind an 'operation' parameter, making the surface feel under-specified.

Completeness2/5

The visible surface only provides two generic dispatcher tools that require a 'readme' call before any real operation can be discovered. There are no explicit create/read/update/delete operations for email or identity, so coverage is opaque and requires exploration rather than being evident from the tool list.

Maintenance

ActivityMaintained
ResponsivenessNo issues