titan-email-mcp 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +47 -5
  2. package/dist/index.js +13 -8
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -7,20 +7,21 @@
7
7
 
8
8
  Connect Claude — Desktop, Code, Cursor, or any [MCP](https://modelcontextprotocol.io) client — directly to a **Titan Email** mailbox, so it can read, search, triage, and send mail on your behalf.
9
9
 
10
- Package: [npmjs.com/package/titan-email-mcp](https://www.npmjs.com/package/titan-email-mcp) · Source: [github.com/qmmughal/titan-email-mcp](https://github.com/qmmughal/titan-email-mcp)
10
+ Package: [npmjs.com/package/titan-email-mcp](https://www.npmjs.com/package/titan-email-mcp) · Source: [github.com/qmmughal/titan-email-mcp](https://github.com/qmmughal/titan-email-mcp) · Listed on the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.qmmughal/titan-email-mcp) as `io.github.qmmughal/titan-email-mcp`, and on [Smithery](https://smithery.ai/servers/qmmughal/titan-email-mcp)
11
11
 
12
12
  Titan Email (the mailbox product bundled with many domain registrars, including **GoDaddy**) has no public REST API. This server bridges that gap by talking to Titan's standard **IMAP** and **SMTP** endpoints instead, so your AI assistant gets real mailbox access without any vendor integration work.
13
13
 
14
- **Contents:** [Why use this](#why-use-this) · [Supported providers](#supported-providers) · [Tools](#tools) · [Quick start](#quick-start) · [Configuration](#configuration) · [Security notes](#security-notes) · [Troubleshooting](#troubleshooting) · [Development](#development) · [Contributing](#contributing) · [License](#license)
14
+ **Contents:** [Why use this](#why-use-this) · [Supported providers](#supported-providers) · [Tools](#tools) · [Quick start](#quick-start) · [GoDaddy users — ready-to-paste config](#godaddy-users--ready-to-paste-config) · [Configuration](#configuration) · [Security notes](#security-notes) · [Troubleshooting](#troubleshooting) · [Development](#development) · [Contributing](#contributing) · [License](#license)
15
15
 
16
16
  ## Why use this
17
17
 
18
18
  - **Your inbox becomes an agent tool.** Ask Claude to summarize unread mail, draft replies in your voice, triage by sender, or find "that invoice from last March" — in plain English, in the same conversation you're already having.
19
- - **Works with GoDaddy-hosted Titan mailboxes.** If you bought your domain and mailbox through GoDaddy, your email is very likely running on Titan's infrastructure under the hood. One `TITAN_PROVIDER` setting handles the different server hostnames — see [Supported providers](#supported-providers).
19
+ - **✅ Tested and confirmed working with GoDaddy-hosted Titan mailboxes.** If you bought your domain and mailbox through GoDaddy, your email is very likely running on Titan's infrastructure under the hood. One `TITAN_PROVIDER` setting handles the different server hostnames — see [Supported providers](#supported-providers).
20
20
  - **Safe by default.** Sending is gated behind `TITAN_ALLOW_SEND` (default **on**, but trivially switched **off**) so you can run Claude in read-only / draft-only mode until you trust it.
21
21
  - **No middleman service.** Credentials go straight from your MCP client's local config to Titan's own IMAP/SMTP servers over TLS. Nothing is proxied through a third party, cached, or logged to disk.
22
22
  - **One process, ten focused tools.** No bloated API surface — just the operations you actually do in a mailbox (see [Tools](#tools) below).
23
23
  - **Published on npm.** Run it with `npx titan-email-mcp` — no cloning or building required for everyday use.
24
+ - **Discoverable.** Listed on the [official MCP Registry](https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.qmmughal/titan-email-mcp) and on [Smithery](https://smithery.ai/servers/qmmughal/titan-email-mcp), so MCP clients and directories that browse those registries can find and install it directly.
24
25
 
25
26
  ## Supported providers
26
27
 
@@ -31,6 +32,8 @@ Titan Email is used directly (`imap.titan.email` / `smtp.titan.email`) and resol
31
32
  | `titan` (default) | `imap.titan.email` | `smtp.titan.email` | You signed up for Titan Email directly, or your registrar just says "Titan Email". |
32
33
  | `godaddy` | `imap.secureserver.net` | `smtpout.secureserver.net` | Your domain **and mailbox** were purchased through GoDaddy. |
33
34
 
35
+ `godaddy` has been tested against a live GoDaddy-hosted Titan mailbox and confirmed working.
36
+
34
37
  If your reseller uses yet another hostname, leave `TITAN_PROVIDER` unset and override `TITAN_IMAP_HOST` / `TITAN_IMAP_PORT` / `TITAN_SMTP_HOST` / `TITAN_SMTP_PORT` directly — check your provider's welcome email or webmail settings page for the exact values. Explicit host/port variables always win over the preset.
35
38
 
36
39
  ## Tools
@@ -106,6 +109,44 @@ claude mcp add titan-email --scope user \
106
109
 
107
110
  Use `--scope project` instead of `--scope user` to make it available only inside one repo (written to `.mcp.json`, safe to share with a team since it carries no secrets by itself — just don't commit real credentials into it).
108
111
 
112
+ ### GoDaddy users — ready-to-paste config
113
+
114
+ If your domain **and mailbox** were purchased through GoDaddy, your email almost certainly runs on Titan's infrastructure under GoDaddy's own hostnames, not Titan's. This has been tested end-to-end against a live GoDaddy-hosted Titan mailbox — you don't need to look those hostnames up yourself; just use `TITAN_PROVIDER=godaddy` and everything else works exactly the same as above:
115
+
116
+ **Claude Desktop** (`claude_desktop_config.json`):
117
+
118
+ ```json
119
+ {
120
+ "mcpServers": {
121
+ "titan-email": {
122
+ "command": "npx",
123
+ "args": ["-y", "titan-email-mcp"],
124
+ "env": {
125
+ "TITAN_EMAIL": "you@yourdomain.com",
126
+ "TITAN_PASSWORD": "your-godaddy-mailbox-password",
127
+ "TITAN_PROVIDER": "godaddy",
128
+ "TITAN_FROM_NAME": "Your Name",
129
+ "TITAN_ALLOW_SEND": "false"
130
+ }
131
+ }
132
+ }
133
+ }
134
+ ```
135
+
136
+ **Claude Code:**
137
+
138
+ ```bash
139
+ claude mcp add titan-email --scope user \
140
+ -e TITAN_EMAIL=you@yourdomain.com \
141
+ -e TITAN_PASSWORD=your-godaddy-mailbox-password \
142
+ -e TITAN_PROVIDER=godaddy \
143
+ -e TITAN_FROM_NAME="Your Name" \
144
+ -e TITAN_ALLOW_SEND=false \
145
+ -- npx -y titan-email-mcp
146
+ ```
147
+
148
+ Before either one works, enable IMAP/SMTP access in GoDaddy's **Email & Office** settings (same "allow other apps" toggle mentioned in step 1 above — GoDaddy's webmail may label it slightly differently than Titan's own). Then run `test_connection` to confirm. If `godaddy` doesn't work for your specific plan, your mailbox may be on a different GoDaddy backend — check **Email & Office → Settings → Email Setup** in your GoDaddy dashboard for the exact IMAP/SMTP hostnames and override `TITAN_IMAP_HOST`/`TITAN_SMTP_HOST` directly (see [Configuration](#configuration)).
149
+
109
150
  ### Cursor and other MCP clients
110
151
 
111
152
  Any client that supports the standard `mcpServers` JSON shape (`command` / `args` / `env`) works the same way — use the Claude Desktop block above as a template and drop it into that client's MCP config file.
@@ -142,8 +183,9 @@ Run `list_folders` once after setup to confirm the exact Sent/Drafts folder name
142
183
  |---|---|
143
184
  | `test_connection` → `imap.status: "failed: ... Authentication failed"` | IMAP/SMTP access isn't enabled on the account yet, or the password is wrong. Re-check Settings → Enable Titan on other apps. |
144
185
  | Works for GoDaddy mailbox, fails with default settings | Set `TITAN_PROVIDER=godaddy`. |
186
+ | GoDaddy mailbox still fails with `TITAN_PROVIDER=godaddy` | Your plan may use a different GoDaddy backend than `imap.secureserver.net`. Check **Email & Office → Settings → Email Setup** in your GoDaddy dashboard for the exact hostnames and set `TITAN_IMAP_HOST`/`TITAN_SMTP_HOST` directly — see [Configuration](#configuration). |
145
187
  | Connection times out | A firewall or VPN is blocking outbound 993/465. Try from a different network to confirm. |
146
- | MCP client shows the server as failed immediately on startup | `TITAN_EMAIL` or `TITAN_PASSWORD` is missing from the `env` block — this server exits immediately (by design) if either is unset; check the client's MCP server logs for the exact message. |
188
+ | Every tool call returns "Missing TITAN_EMAIL and/or TITAN_PASSWORD" | Both are missing from the client's `env` block. Tools still appear in the client (by design, so directories can list them), but every call will fail until both are set. |
147
189
  | `send_email` returns an error about sending being disabled | `TITAN_ALLOW_SEND` is `false`. Use `save_draft` or `reply_email` with `draft_only: true`, or flip the flag on. |
148
190
 
149
191
  ## Development
@@ -156,7 +198,7 @@ npm start # run the built server directly (reads env vars from your shell
156
198
 
157
199
  The server speaks MCP over stdio (`StdioServerTransport`) — it's not an HTTP service, so running it directly just blocks waiting for a client on stdin.
158
200
 
159
- **Releasing a new version** (maintainers): bump `version` in `package.json`, run `npm run build` to confirm it compiles, commit and push, then `npm publish` from `titan-mcp/`. The package only ships `dist/`, `README.md`, and `LICENSE` (see `files` in `package.json`) — source TypeScript stays GitHub-only.
201
+ **Releasing a new version** (maintainers): bump `version` in `package.json` (and the matching `version` fields in `server.json`), run `npm run build` to confirm it compiles, commit and push, then `npm publish` from `titan-mcp/`. The package only ships `dist/`, `README.md`, and `LICENSE` (see `files` in `package.json`) — source TypeScript stays GitHub-only. After the npm publish lands, update the [MCP Registry](https://registry.modelcontextprotocol.io) listing with `mcp-publisher publish` (requires `mcp-publisher login github` once per session — see the [registry quickstart](https://modelcontextprotocol.io/registry/quickstart)), then tag a GitHub release (`gh release create vX.Y.Z`) so Smithery's crawler picks up the new version via `smithery.yaml`.
160
202
 
161
203
  ## Contributing
162
204
 
package/dist/index.js CHANGED
@@ -24,8 +24,8 @@ if (!preset) {
24
24
  }
25
25
  const activePreset = preset ?? PROVIDER_PRESETS.titan;
26
26
  const cfg = {
27
- user: req("TITAN_EMAIL"),
28
- pass: req("TITAN_PASSWORD"),
27
+ user: process.env.TITAN_EMAIL ?? "",
28
+ pass: process.env.TITAN_PASSWORD ?? "",
29
29
  provider: preset ? providerName : "titan",
30
30
  imapHost: process.env.TITAN_IMAP_HOST ?? activePreset.imapHost,
31
31
  imapPort: Number(process.env.TITAN_IMAP_PORT ?? activePreset.imapPort),
@@ -36,16 +36,20 @@ const cfg = {
36
36
  sentFolder: process.env.TITAN_SENT_FOLDER ?? "Sent",
37
37
  draftsFolder: process.env.TITAN_DRAFTS_FOLDER ?? "Drafts",
38
38
  };
39
- function req(name) {
40
- const v = process.env[name];
41
- if (!v) {
42
- console.error(`Missing required env var ${name}. Set TITAN_EMAIL and TITAN_PASSWORD in your MCP client's server config — see README.md for examples.`);
43
- process.exit(1);
39
+ // Tool schemas register unconditionally below, regardless of credentials, so clients
40
+ // and directory crawlers can list this server's capabilities without live creds.
41
+ // Credentials are only required once a tool actually tries to touch the mailbox.
42
+ if (!cfg.user || !cfg.pass) {
43
+ console.error("TITAN_EMAIL / TITAN_PASSWORD not set — tools are registered but will return an error until both are configured in your MCP client's server config.");
44
+ }
45
+ function ensureCreds() {
46
+ if (!cfg.user || !cfg.pass) {
47
+ throw new Error("Missing TITAN_EMAIL and/or TITAN_PASSWORD. Set both in your MCP client's server config — see README.md for examples.");
44
48
  }
45
- return v;
46
49
  }
47
50
  // ---------- helpers ----------
48
51
  async function withImap(fn) {
52
+ ensureCreds();
49
53
  const client = new ImapFlow({
50
54
  host: cfg.imapHost,
51
55
  port: cfg.imapPort,
@@ -280,6 +284,7 @@ server.registerTool("send_email", {
280
284
  if (!cfg.allowSend)
281
285
  return fail("Sending is disabled (TITAN_ALLOW_SEND=false). Use save_draft instead.");
282
286
  try {
287
+ ensureCreds();
283
288
  const mail = { from: fromAddr(), to: a.to, cc: a.cc, bcc: a.bcc, subject: a.subject, text: a.body, html: a.html };
284
289
  const info = await smtp.sendMail(mail);
285
290
  await appendCopy(cfg.sentFolder, await buildRaw({ ...mail, messageId: info.messageId }), ["\\Seen"]);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "titan-email-mcp",
3
- "version": "1.0.2",
4
- "description": "MCP server that connects Claude (or any MCP client) to a Titan Email mailbox over IMAP/SMTP — including Titan accounts resold through GoDaddy.",
3
+ "version": "1.0.4",
4
+ "description": "MCP server that connects Claude (or any MCP client) to a Titan Email mailbox over IMAP/SMTP — tested and confirmed working with Titan accounts resold through GoDaddy.",
5
5
  "mcpName": "io.github.qmmughal/titan-email-mcp",
6
6
  "main": "dist/index.js",
7
7
  "type": "module",