@honest-magic/mail-mcp 1.0.1 → 1.2.0

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.
package/README.md CHANGED
@@ -5,10 +5,16 @@ MCP server for IMAP/SMTP email access — works with Claude and other MCP client
5
5
  ## Requirements
6
6
 
7
7
  - Node.js >=18
8
- - macOS (credentials stored in Keychain)
8
+ - macOS, Windows, or Linux (credentials stored in the OS keychain via [cross-keychain](https://www.npmjs.com/package/cross-keychain))
9
9
 
10
10
  ## Installation
11
11
 
12
+ | Method | Install command | Best for | Auto-updates? |
13
+ |--------|----------------|----------|---------------|
14
+ | npx (no install) | `npx @honest-magic/mail-mcp` | Trying it out, always-latest | Yes -- on each run |
15
+ | Global npm | `npm install -g @honest-magic/mail-mcp` | Daily use, offline-friendly | No -- run `npm update -g` |
16
+ | Homebrew | `brew tap honest-magic/tap && brew install mail-mcp` | macOS users who prefer brew | Formula updated on publish -- run `brew upgrade` |
17
+
12
18
  ### Run without installing (recommended)
13
19
 
14
20
  ```bash
@@ -22,6 +28,43 @@ npm install -g @honest-magic/mail-mcp
22
28
  mail-mcp
23
29
  ```
24
30
 
31
+ ### Homebrew
32
+
33
+ ```bash
34
+ brew tap honest-magic/tap
35
+ brew install mail-mcp
36
+ ```
37
+
38
+ ## Updating
39
+
40
+ ### npx (run without installing)
41
+
42
+ npx always fetches the latest published version. No update step needed.
43
+
44
+ ### Global npm install
45
+
46
+ ```bash
47
+ npm update -g @honest-magic/mail-mcp
48
+ ```
49
+
50
+ ### Homebrew
51
+
52
+ The Homebrew formula is updated automatically when a new version is published to npm.
53
+
54
+ ```bash
55
+ brew upgrade mail-mcp
56
+ ```
57
+
58
+ ### Version pinning
59
+
60
+ To run a specific version instead of latest:
61
+
62
+ ```bash
63
+ npx @honest-magic/mail-mcp@1.1.0
64
+ ```
65
+
66
+ See the [Releases page](https://github.com/honest-magic/mail-mcp/releases) for version history.
67
+
25
68
  ## Configuration
26
69
 
27
70
  ### 1. Add an account (interactive)
@@ -59,7 +102,7 @@ Alternatively, create `~/.config/mail-mcp/accounts.json` by hand:
59
102
  ]
60
103
  ```
61
104
 
62
- Then store the password in macOS Keychain:
105
+ Then store the password in the OS keychain. The easiest way is `mail-mcp accounts add`, which handles this automatically. On macOS you can also use:
63
106
 
64
107
  ```bash
65
108
  security add-generic-password \
@@ -28,7 +28,7 @@ export async function handleAccountsCommand(args) {
28
28
  }
29
29
  }
30
30
  async function listAccounts() {
31
- const accounts = getAccounts();
31
+ const accounts = await getAccounts();
32
32
  if (accounts.length === 0) {
33
33
  console.log('No accounts configured.');
34
34
  console.log(`Config file: ${ACCOUNTS_PATH}`);
@@ -54,7 +54,7 @@ async function removeAccount(id) {
54
54
  console.error('Usage: mail-mcp accounts remove <id>');
55
55
  process.exit(1);
56
56
  }
57
- const accounts = getAccounts();
57
+ const accounts = await getAccounts();
58
58
  const index = accounts.findIndex((a) => a.id === id);
59
59
  if (index === -1) {
60
60
  console.error(`Account '${id}' not found.`);
@@ -76,7 +76,7 @@ async function addAccount() {
76
76
  output: process.stdout,
77
77
  });
78
78
  try {
79
- const existingAccounts = getAccounts();
79
+ const existingAccounts = await getAccounts();
80
80
  const existingIds = new Set(existingAccounts.map((a) => a.id));
81
81
  // id
82
82
  let id = '';
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/cli/accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/cli/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG7E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAc;IACxD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3B,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QAEd,KAAK,QAAQ;YACX,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QAEd,KAAK,KAAK;YACR,MAAM,UAAU,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QAEd;YACE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG;QAChB,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACzD,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GACV,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/H,MAAM,OAAO,GACX,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;IAE7H,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CACrJ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAsB;IACjD,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAErD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1B,YAAY,CAAC,QAAQ,CAAC,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,oBAAoB,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,MAAM,WAAW,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/D,KAAK;QACL,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,OAAO,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,0CAA0C,CAAC,CAAC;gBACxE,SAAS;YACX,CAAC;YACD,EAAE,GAAG,OAAO,CAAC;QACf,CAAC;QAED,OAAO;QACP,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;QAElC,cAAc;QACd,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,SAAS;YACX,CAAC;YACD,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QAED,OAAO;QACP,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;QAEjD,OAAO;QACP,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,SAAS;YACX,CAAC;YACD,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QAED,WAAW;QACX,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAa,WAAW,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAEhF,SAAS;QACT,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;QAEnD,WAAW;QACX,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CACnC,cAAc,eAAe,IAAI,qBAAqB,KAAK,CAC5D,CAAC;QACF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,eAAe,IAAI,SAAS,CAAC;QAEpE,WAAW;QACX,IAAI,QAA4B,CAAC;QACjC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAC3D,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;QACrD,CAAC;QAED,iCAAiC;QACjC,IAAI,QAA4B,CAAC;QACjC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CACnC,mEAAmE,CACpE,CAAC;YACF,QAAQ,GAAG,WAAW,IAAI,SAAS,CAAC;QACtC,CAAC;QAED,MAAM,OAAO,GAAiB;YAC5B,EAAE;YACF,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,IAAI;YACJ,QAAQ;YACR,MAAM;YACN,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC;QAEF,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAE/B,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,EAAE,CAAC;YACrC,MAAM,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,6CAA6C,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,16 +1,36 @@
1
- import { EmailAccount } from './types/index.js';
1
+ import { z } from 'zod';
2
2
  export declare const ACCOUNTS_PATH: string;
3
3
  export declare const config: {
4
4
  serviceName: string;
5
5
  logLevel: string;
6
6
  };
7
+ export declare const emailAccountSchema: z.ZodObject<{
8
+ id: z.ZodString;
9
+ name: z.ZodString;
10
+ host: z.ZodString;
11
+ port: z.ZodNumber;
12
+ smtpHost: z.ZodOptional<z.ZodString>;
13
+ smtpPort: z.ZodOptional<z.ZodNumber>;
14
+ user: z.ZodString;
15
+ authType: z.ZodEnum<{
16
+ login: "login";
17
+ oauth2: "oauth2";
18
+ }>;
19
+ useTLS: z.ZodBoolean;
20
+ }, z.core.$strip>;
21
+ export type EmailAccount = z.infer<typeof emailAccountSchema>;
22
+ /** @internal — exposed for testing only */
23
+ export declare function resetConfigCache(): void;
24
+ /**
25
+ * Reads account definitions from ~/.config/mail-mcp/accounts.json.
26
+ * Results are cached in memory; the cache is invalidated when the file changes.
27
+ * Returns an empty array if the file does not exist or cannot be parsed.
28
+ */
29
+ export declare function getAccounts(): Promise<EmailAccount[]>;
7
30
  /**
8
31
  * Writes account definitions to ~/.config/mail-mcp/accounts.json.
9
32
  * Creates the directory if it does not exist.
33
+ * Synchronous — CLI-only, used by `accounts add/remove`.
34
+ * The fs.watch callback will invalidate the cache after this write.
10
35
  */
11
36
  export declare function saveAccounts(accounts: EmailAccount[]): void;
12
- /**
13
- * Reads account definitions from ~/.config/mail-mcp/accounts.json.
14
- * Returns an empty array if the file does not exist or cannot be parsed.
15
- */
16
- export declare function getAccounts(): EmailAccount[];
package/dist/config.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  import * as fs from 'node:fs';
3
+ import * as fsPromises from 'node:fs/promises';
3
4
  import * as path from 'node:path';
4
5
  import * as os from 'node:os';
5
6
  export const ACCOUNTS_PATH = path.join(os.homedir(), '.config', 'mail-mcp', 'accounts.json');
@@ -11,38 +12,98 @@ export const config = configSchema.parse({
11
12
  serviceName: process.env.SERVICE_NAME,
12
13
  logLevel: process.env.LOG_LEVEL,
13
14
  });
14
- /**
15
- * Writes account definitions to ~/.config/mail-mcp/accounts.json.
16
- * Creates the directory if it does not exist.
17
- */
18
- export function saveAccounts(accounts) {
19
- const configPath = ACCOUNTS_PATH;
20
- const dir = path.dirname(configPath);
21
- fs.mkdirSync(dir, { recursive: true });
22
- fs.writeFileSync(configPath, JSON.stringify(accounts, null, 2), 'utf-8');
15
+ // ---------------------------------------------------------------------------
16
+ // Account schema and type
17
+ // ---------------------------------------------------------------------------
18
+ export const emailAccountSchema = z.object({
19
+ id: z.string().min(1),
20
+ name: z.string().min(1),
21
+ host: z.string().min(1),
22
+ port: z.number().int().positive(),
23
+ smtpHost: z.string().optional(),
24
+ smtpPort: z.number().int().positive().optional(),
25
+ user: z.string().min(1),
26
+ authType: z.enum(['login', 'oauth2']),
27
+ useTLS: z.boolean(),
28
+ });
29
+ // ---------------------------------------------------------------------------
30
+ // In-memory cache with fs.watch invalidation
31
+ // ---------------------------------------------------------------------------
32
+ let cachedAccounts = null;
33
+ let watcherStarted = false;
34
+ function startWatcher() {
35
+ if (watcherStarted)
36
+ return;
37
+ watcherStarted = true;
38
+ try {
39
+ fs.watch(ACCOUNTS_PATH, () => {
40
+ cachedAccounts = null;
41
+ });
42
+ }
43
+ catch {
44
+ // File may not exist yet — cache stays null until next read
45
+ }
46
+ }
47
+ /** @internal — exposed for testing only */
48
+ export function resetConfigCache() {
49
+ cachedAccounts = null;
50
+ watcherStarted = false;
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // Internal disk loader with per-item safeParse
54
+ // ---------------------------------------------------------------------------
55
+ async function loadAccountsFromDisk() {
56
+ const raw = await fsPromises.readFile(ACCOUNTS_PATH, 'utf-8');
57
+ const parsed = JSON.parse(raw);
58
+ if (!Array.isArray(parsed)) {
59
+ console.error('accounts.json must be an array');
60
+ return [];
61
+ }
62
+ const valid = [];
63
+ for (const item of parsed) {
64
+ const result = emailAccountSchema.safeParse(item);
65
+ if (result.success) {
66
+ valid.push(result.data);
67
+ }
68
+ else {
69
+ const id = typeof item?.id === 'string' ? item.id : '(unknown)';
70
+ const fields = result.error.issues.map((i) => i.path.join('.') || 'root').join(', ');
71
+ console.error(`accounts.json: account "${id}" skipped — invalid fields: ${fields}`);
72
+ }
73
+ }
74
+ return valid;
23
75
  }
76
+ // ---------------------------------------------------------------------------
77
+ // Public API
78
+ // ---------------------------------------------------------------------------
24
79
  /**
25
80
  * Reads account definitions from ~/.config/mail-mcp/accounts.json.
81
+ * Results are cached in memory; the cache is invalidated when the file changes.
26
82
  * Returns an empty array if the file does not exist or cannot be parsed.
27
83
  */
28
- export function getAccounts() {
29
- const configPath = ACCOUNTS_PATH;
30
- if (!fs.existsSync(configPath)) {
31
- console.error('No accounts config found at ~/.config/mail-mcp/accounts.json');
32
- return [];
33
- }
84
+ export async function getAccounts() {
85
+ if (cachedAccounts !== null)
86
+ return cachedAccounts;
87
+ startWatcher();
34
88
  try {
35
- const raw = fs.readFileSync(configPath, 'utf-8');
36
- const parsed = JSON.parse(raw);
37
- if (!Array.isArray(parsed)) {
38
- console.error(`Failed to parse accounts config at ${configPath}: expected an array`);
39
- return [];
40
- }
41
- return parsed;
89
+ const loaded = await loadAccountsFromDisk();
90
+ cachedAccounts = loaded;
91
+ return loaded;
42
92
  }
43
- catch (error) {
44
- console.error(`Failed to parse accounts config at ${configPath}:`, error);
93
+ catch {
45
94
  return [];
46
95
  }
47
96
  }
97
+ /**
98
+ * Writes account definitions to ~/.config/mail-mcp/accounts.json.
99
+ * Creates the directory if it does not exist.
100
+ * Synchronous — CLI-only, used by `accounts add/remove`.
101
+ * The fs.watch callback will invalidate the cache after this write.
102
+ */
103
+ export function saveAccounts(accounts) {
104
+ const configPath = ACCOUNTS_PATH;
105
+ const dir = path.dirname(configPath);
106
+ fs.mkdirSync(dir, { recursive: true });
107
+ fs.writeFileSync(configPath, JSON.stringify(accounts, null, 2), 'utf-8');
108
+ }
48
109
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAG9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAE7F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC;IACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACrC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;CAChC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAwB;IACnD,MAAM,UAAU,GAAG,aAAa,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,UAAU,GAAG,aAAa,CAAC;IAEjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,sCAAsC,UAAU,qBAAqB,CAAC,CAAC;YACrF,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAwB,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,UAAU,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1E,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;AAE7F,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC;IACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IACvC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACrC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;CAChC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;CACpB,CAAC,CAAC;AAIH,8EAA8E;AAC9E,6CAA6C;AAC7C,8EAA8E;AAE9E,IAAI,cAAc,GAA0B,IAAI,CAAC;AACjD,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B,SAAS,YAAY;IACnB,IAAI,cAAc;QAAE,OAAO;IAC3B,cAAc,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE;YAC3B,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,gBAAgB;IAC9B,cAAc,GAAG,IAAI,CAAC;IACtB,cAAc,GAAG,KAAK,CAAC;AACzB,CAAC;AAED,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,KAAK,UAAU,oBAAoB;IACjC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,OAAO,IAAI,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrF,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,+BAA+B,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACnD,YAAY,EAAE,CAAC;IACf,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAC5C,cAAc,GAAG,MAAM,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAwB;IACnD,MAAM,UAAU,GAAG,aAAa,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare enum MailErrorCode {
2
+ AuthError = "AuthError",
3
+ NetworkError = "NetworkError",
4
+ ValidationError = "ValidationError",
5
+ QuotaError = "QuotaError"
6
+ }
7
+ export declare class MailMCPError extends Error {
8
+ readonly code: MailErrorCode;
9
+ constructor(code: MailErrorCode, message: string, options?: ErrorOptions);
10
+ }
11
+ export declare class AuthError extends MailMCPError {
12
+ constructor(message: string, options?: ErrorOptions);
13
+ }
14
+ export declare class NetworkError extends MailMCPError {
15
+ constructor(message: string, options?: ErrorOptions);
16
+ }
17
+ export declare class ValidationError extends MailMCPError {
18
+ constructor(message: string, options?: ErrorOptions);
19
+ }
20
+ export declare class QuotaError extends MailMCPError {
21
+ constructor(message: string, options?: ErrorOptions);
22
+ }
package/dist/errors.js ADDED
@@ -0,0 +1,36 @@
1
+ export var MailErrorCode;
2
+ (function (MailErrorCode) {
3
+ MailErrorCode["AuthError"] = "AuthError";
4
+ MailErrorCode["NetworkError"] = "NetworkError";
5
+ MailErrorCode["ValidationError"] = "ValidationError";
6
+ MailErrorCode["QuotaError"] = "QuotaError";
7
+ })(MailErrorCode || (MailErrorCode = {}));
8
+ export class MailMCPError extends Error {
9
+ code;
10
+ constructor(code, message, options) {
11
+ super(message, options);
12
+ this.code = code;
13
+ this.name = code;
14
+ }
15
+ }
16
+ export class AuthError extends MailMCPError {
17
+ constructor(message, options) {
18
+ super(MailErrorCode.AuthError, message, options);
19
+ }
20
+ }
21
+ export class NetworkError extends MailMCPError {
22
+ constructor(message, options) {
23
+ super(MailErrorCode.NetworkError, message, options);
24
+ }
25
+ }
26
+ export class ValidationError extends MailMCPError {
27
+ constructor(message, options) {
28
+ super(MailErrorCode.ValidationError, message, options);
29
+ }
30
+ }
31
+ export class QuotaError extends MailMCPError {
32
+ constructor(message, options) {
33
+ super(MailErrorCode.QuotaError, message, options);
34
+ }
35
+ }
36
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,wCAAuB,CAAA;IACvB,8CAA6B,CAAA;IAC7B,oDAAmC,CAAA;IACnC,0CAAyB,CAAA;AAC3B,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAEnB;IADlB,YACkB,IAAmB,EACnC,OAAe,EACf,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAe;QAKnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,YAAY;IACzC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,YAAY;IAC5C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,YAAY;IAC1C,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -3,7 +3,12 @@ export declare class MailMCPServer {
3
3
  private readonly readOnly;
4
4
  private server;
5
5
  private services;
6
+ private shuttingDown;
7
+ private inFlightCount;
8
+ private readonly rateLimiter;
6
9
  constructor(readOnly?: boolean);
10
+ shutdown(): Promise<void>;
11
+ private _createAndCacheService;
7
12
  private getService;
8
13
  getTools(readOnly: boolean): ({
9
14
  name: string;
@@ -18,6 +23,7 @@ export declare class MailMCPServer {
18
23
  accountId?: undefined;
19
24
  folder?: undefined;
20
25
  count?: undefined;
26
+ offset?: undefined;
21
27
  from?: undefined;
22
28
  subject?: undefined;
23
29
  since?: undefined;
@@ -66,6 +72,10 @@ export declare class MailMCPServer {
66
72
  type: string;
67
73
  description: string;
68
74
  };
75
+ offset: {
76
+ type: string;
77
+ description: string;
78
+ };
69
79
  from?: undefined;
70
80
  subject?: undefined;
71
81
  since?: undefined;
@@ -134,6 +144,10 @@ export declare class MailMCPServer {
134
144
  type: string;
135
145
  description: string;
136
146
  };
147
+ offset: {
148
+ type: string;
149
+ description: string;
150
+ };
137
151
  uid?: undefined;
138
152
  to?: undefined;
139
153
  body?: undefined;
@@ -178,6 +192,7 @@ export declare class MailMCPServer {
178
192
  description: string;
179
193
  };
180
194
  count?: undefined;
195
+ offset?: undefined;
181
196
  from?: undefined;
182
197
  subject?: undefined;
183
198
  since?: undefined;
@@ -243,6 +258,7 @@ export declare class MailMCPServer {
243
258
  };
244
259
  folder?: undefined;
245
260
  count?: undefined;
261
+ offset?: undefined;
246
262
  from?: undefined;
247
263
  since?: undefined;
248
264
  before?: undefined;
@@ -279,6 +295,7 @@ export declare class MailMCPServer {
279
295
  };
280
296
  folder?: undefined;
281
297
  count?: undefined;
298
+ offset?: undefined;
282
299
  from?: undefined;
283
300
  subject?: undefined;
284
301
  since?: undefined;
@@ -333,6 +350,7 @@ export declare class MailMCPServer {
333
350
  };
334
351
  folder?: undefined;
335
352
  count?: undefined;
353
+ offset?: undefined;
336
354
  from?: undefined;
337
355
  subject?: undefined;
338
356
  since?: undefined;
@@ -393,6 +411,7 @@ export declare class MailMCPServer {
393
411
  description: string;
394
412
  };
395
413
  count?: undefined;
414
+ offset?: undefined;
396
415
  from?: undefined;
397
416
  subject?: undefined;
398
417
  since?: undefined;
@@ -439,6 +458,7 @@ export declare class MailMCPServer {
439
458
  description: string;
440
459
  };
441
460
  count?: undefined;
461
+ offset?: undefined;
442
462
  from?: undefined;
443
463
  subject?: undefined;
444
464
  since?: undefined;
@@ -491,6 +511,7 @@ export declare class MailMCPServer {
491
511
  description: string;
492
512
  };
493
513
  count?: undefined;
514
+ offset?: undefined;
494
515
  from?: undefined;
495
516
  subject?: undefined;
496
517
  since?: undefined;
@@ -547,6 +568,7 @@ export declare class MailMCPServer {
547
568
  };
548
569
  folder?: undefined;
549
570
  count?: undefined;
571
+ offset?: undefined;
550
572
  from?: undefined;
551
573
  subject?: undefined;
552
574
  since?: undefined;
@@ -618,6 +640,7 @@ export declare class MailMCPServer {
618
640
  description: string;
619
641
  };
620
642
  count?: undefined;
643
+ offset?: undefined;
621
644
  from?: undefined;
622
645
  subject?: undefined;
623
646
  since?: undefined;
@@ -656,3 +679,4 @@ export declare class MailMCPServer {
656
679
  private setupToolHandlers;
657
680
  run(): Promise<void>;
658
681
  }
682
+ export declare function runValidateAccounts(): Promise<void>;