@honest-magic/mail-mcp 1.2.0 → 1.4.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/dist/cli/install-claude.d.ts +9 -0
- package/dist/cli/install-claude.js +42 -0
- package/dist/cli/install-claude.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +743 -2
- package/dist/index.js +928 -48
- package/dist/index.js.map +1 -1
- package/dist/protocol/imap.d.ts +16 -1
- package/dist/protocol/imap.js +80 -3
- package/dist/protocol/imap.js.map +1 -1
- package/dist/protocol/sieve.d.ts +62 -0
- package/dist/protocol/sieve.js +264 -0
- package/dist/protocol/sieve.js.map +1 -0
- package/dist/protocol/smtp.d.ts +1 -1
- package/dist/protocol/smtp.js +4 -1
- package/dist/protocol/smtp.js.map +1 -1
- package/dist/services/mail.d.ts +33 -5
- package/dist/services/mail.js +221 -11
- package/dist/services/mail.js.map +1 -1
- package/dist/utils/audit-logger.d.ts +25 -0
- package/dist/utils/audit-logger.js +47 -0
- package/dist/utils/audit-logger.js.map +1 -0
- package/dist/utils/confirmation-store.d.ts +33 -0
- package/dist/utils/confirmation-store.js +52 -0
- package/dist/utils/confirmation-store.js.map +1 -0
- package/dist/utils/message-cache.d.ts +20 -0
- package/dist/utils/message-cache.js +46 -0
- package/dist/utils/message-cache.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +23 -0
- package/dist/utils/rate-limiter.js +32 -0
- package/dist/utils/rate-limiter.js.map +1 -1
- package/dist/utils/redact.d.ts +20 -0
- package/dist/utils/redact.js +46 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/templates.d.ts +24 -0
- package/dist/utils/templates.js +95 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/validation.d.ts +10 -0
- package/dist/utils/validation.js +41 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes or updates the Claude Desktop MCP server config to include mail-mcp.
|
|
3
|
+
*
|
|
4
|
+
* @param configPath - Absolute path to claude_desktop_config.json
|
|
5
|
+
* @param binaryPath - Absolute path to the mail-mcp binary
|
|
6
|
+
* @returns The configPath that was written
|
|
7
|
+
* @throws {Error} If the existing config file contains malformed JSON
|
|
8
|
+
*/
|
|
9
|
+
export declare function installClaude(configPath: string, binaryPath: string): Promise<string>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Writes or updates the Claude Desktop MCP server config to include mail-mcp.
|
|
5
|
+
*
|
|
6
|
+
* @param configPath - Absolute path to claude_desktop_config.json
|
|
7
|
+
* @param binaryPath - Absolute path to the mail-mcp binary
|
|
8
|
+
* @returns The configPath that was written
|
|
9
|
+
* @throws {Error} If the existing config file contains malformed JSON
|
|
10
|
+
*/
|
|
11
|
+
export async function installClaude(configPath, binaryPath) {
|
|
12
|
+
// Ensure parent directory exists
|
|
13
|
+
await mkdir(dirname(configPath), { recursive: true });
|
|
14
|
+
// Read existing config or start fresh
|
|
15
|
+
let config = {};
|
|
16
|
+
try {
|
|
17
|
+
const raw = await readFile(configPath, 'utf8');
|
|
18
|
+
try {
|
|
19
|
+
config = JSON.parse(raw);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw new Error(`Malformed JSON in existing config at ${configPath}. Please fix or delete the file and try again.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
// Re-throw JSON parse errors
|
|
27
|
+
if (err instanceof Error && /malformed|Malformed/.test(err.message)) {
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
// File not found or unreadable — start with empty config
|
|
31
|
+
config = {};
|
|
32
|
+
}
|
|
33
|
+
// Merge: ensure mcpServers exists and set mail entry
|
|
34
|
+
if (!config.mcpServers || typeof config.mcpServers !== 'object') {
|
|
35
|
+
config.mcpServers = {};
|
|
36
|
+
}
|
|
37
|
+
config.mcpServers.mail = { command: binaryPath };
|
|
38
|
+
// Write back with 2-space indentation
|
|
39
|
+
await writeFile(configPath, JSON.stringify(config, null, 2) + '\n', 'utf8');
|
|
40
|
+
return configPath;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=install-claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-claude.js","sourceRoot":"","sources":["../../src/cli/install-claude.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,UAAkB;IACxE,iCAAiC;IACjC,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtD,sCAAsC;IACtC,IAAI,MAAM,GAA4B,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,wCAAwC,UAAU,gDAAgD,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,6BAA6B;QAC7B,IAAI,GAAG,YAAY,KAAK,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,yDAAyD;QACzD,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;IACzB,CAAC;IACA,MAAM,CAAC,UAAsC,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAE9E,sCAAsC;IACtC,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IAE5E,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const ACCOUNTS_PATH: string;
|
|
3
|
+
export declare const AUDIT_LOG_PATH: string;
|
|
3
4
|
export declare const config: {
|
|
4
5
|
serviceName: string;
|
|
5
6
|
logLevel: string;
|
|
@@ -17,6 +18,9 @@ export declare const emailAccountSchema: z.ZodObject<{
|
|
|
17
18
|
oauth2: "oauth2";
|
|
18
19
|
}>;
|
|
19
20
|
useTLS: z.ZodBoolean;
|
|
21
|
+
signature: z.ZodOptional<z.ZodString>;
|
|
22
|
+
manageSievePort: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
allowedRecipients: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
24
|
}, z.core.$strip>;
|
|
21
25
|
export type EmailAccount = z.infer<typeof emailAccountSchema>;
|
|
22
26
|
/** @internal — exposed for testing only */
|
package/dist/config.js
CHANGED
|
@@ -4,6 +4,7 @@ import * as fsPromises from 'node:fs/promises';
|
|
|
4
4
|
import * as path from 'node:path';
|
|
5
5
|
import * as os from 'node:os';
|
|
6
6
|
export const ACCOUNTS_PATH = path.join(os.homedir(), '.config', 'mail-mcp', 'accounts.json');
|
|
7
|
+
export const AUDIT_LOG_PATH = path.join(os.homedir(), '.config', 'mail-mcp', 'audit.log');
|
|
7
8
|
const configSchema = z.object({
|
|
8
9
|
serviceName: z.string().default('ch.honest-magic.config.mail-server'),
|
|
9
10
|
logLevel: z.string().default('info'),
|
|
@@ -25,6 +26,9 @@ export const emailAccountSchema = z.object({
|
|
|
25
26
|
user: z.string().min(1),
|
|
26
27
|
authType: z.enum(['login', 'oauth2']),
|
|
27
28
|
useTLS: z.boolean(),
|
|
29
|
+
signature: z.string().optional(),
|
|
30
|
+
manageSievePort: z.number().int().positive().optional(),
|
|
31
|
+
allowedRecipients: z.array(z.string()).optional(),
|
|
28
32
|
});
|
|
29
33
|
// ---------------------------------------------------------------------------
|
|
30
34
|
// In-memory cache with fs.watch invalidation
|
package/dist/config.js.map
CHANGED
|
@@ -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,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;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|