@mailfn/mcp 0.1.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 ADDED
@@ -0,0 +1,9 @@
1
+ # `@mailfn/mcp`
2
+
3
+ Agent-safe MCP server for focused MailFn workflows.
4
+
5
+ ```sh
6
+ MAILFN_URL=https://mail.example.com MAILFN_TOKEN=... mailfn-mcp
7
+ ```
8
+
9
+ Tools cover expiring inbox creation, message wait/list/read, OTP/link extraction, and token revocation. Tool schemas are narrow, results are redacted by default, and content or verification values require an explicit read/extract action. Give agents inbox-scoped credentials containing only the scopes needed for their task.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ import { MailFnClient } from '@mailfn/client';
3
+ import { serveMailFnMcpStdio } from './server.js';
4
+ const baseUrl = process.env.MAILFN_URL;
5
+ const token = process.env.MAILFN_TOKEN;
6
+ if (!baseUrl || !token) {
7
+ process.stderr.write('MAILFN_URL and MAILFN_TOKEN are required\n');
8
+ process.exitCode = 1;
9
+ }
10
+ else {
11
+ serveMailFnMcpStdio(new MailFnClient({ baseUrl, token })).catch((error) => {
12
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
13
+ process.exitCode = 1;
14
+ });
15
+ }
16
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;AACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACvC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;IACnE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC;KAAM,CAAC;IACN,mBAAmB,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './server.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './server.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { MailFnClient } from '@mailfn/client';
2
+ import type { Readable, Writable } from 'node:stream';
3
+ export interface McpTool {
4
+ name: string;
5
+ description: string;
6
+ inputSchema: Record<string, unknown>;
7
+ }
8
+ interface JsonRpcResponse {
9
+ jsonrpc: '2.0';
10
+ id: string | number | null;
11
+ result?: Record<string, unknown>;
12
+ error?: {
13
+ code: number;
14
+ message: string;
15
+ };
16
+ }
17
+ export declare const MAILFN_MCP_TOOLS: McpTool[];
18
+ export declare class MailFnMcpServer {
19
+ private readonly client;
20
+ private initializeResponded;
21
+ private initialized;
22
+ private readonly activeRequests;
23
+ constructor(client: MailFnClient);
24
+ listTools(): McpTool[];
25
+ handleRequest(input: unknown): Promise<JsonRpcResponse | null>;
26
+ callTool(name: string, args: Record<string, unknown>, signal?: AbortSignal): Promise<Record<string, unknown>>;
27
+ }
28
+ export declare function serveMailFnMcpStdio(client: MailFnClient, signal?: AbortSignal, streams?: {
29
+ input: Readable;
30
+ output: Writable;
31
+ }): Promise<void>;
32
+ export {};
33
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAItD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AASD,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,eAAO,MAAM,gBAAgB,EAAE,OAAO,EAqBrC,CAAC;AAEF,qBAAa,eAAe;IAKP,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJ1C,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+C;gBAE1C,MAAM,EAAE,YAAY;IAEjD,SAAS,IAAI,OAAO,EAAE;IAIhB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA0D9D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAyD3H;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,EACpB,OAAO,GAAE;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAA;CAAqD,GAChG,OAAO,CAAC,IAAI,CAAC,CAuCf"}
package/dist/server.js ADDED
@@ -0,0 +1,247 @@
1
+ import { MailFnClient } from '@mailfn/client';
2
+ import { createInterface } from 'node:readline';
3
+ const SUPPORTED_PROTOCOL_VERSIONS = ['2025-11-25', '2025-06-18', '2025-03-26'];
4
+ export const MAILFN_MCP_TOOLS = [
5
+ tool('mailfn_create_inbox', 'Create one stable or expiring inbox and return its inbox-scoped credential.', {
6
+ kind: { type: 'string', enum: ['stable', 'expiring'] },
7
+ local_part: { type: 'string' }, expiry_seconds: { type: 'number' }, run_id: { type: 'string' },
8
+ }, ['kind']),
9
+ tool('mailfn_wait_for_message', 'Wait for a narrowly matching message without reading unrelated mailbox content.', {
10
+ inbox_id: { type: 'string' }, after: { type: 'string' }, sender: { type: 'string' }, sender_domain: { type: 'string' },
11
+ subject: { type: 'string' }, timeout_ms: { type: 'number' }, expected_count: { type: 'number' },
12
+ }, ['inbox_id']),
13
+ tool('mailfn_list_messages', 'List message metadata for one inbox. Bodies are never returned.', {
14
+ inbox_id: { type: 'string' }, after: { type: 'string' }, sender: { type: 'string' }, subject: { type: 'string' }, limit: { type: 'number' },
15
+ }, ['inbox_id']),
16
+ tool('mailfn_read_message', 'Read one exact message. Content remains redacted unless include_content is explicitly true.', {
17
+ inbox_id: { type: 'string' }, message_id: { type: 'string' }, include_content: { type: 'boolean' }, include_attachments: { type: 'boolean' },
18
+ }, ['inbox_id', 'message_id']),
19
+ tool('mailfn_extract_verification', 'Extract an OTP or verification link from one exact source message.', {
20
+ inbox_id: { type: 'string' }, message_id: { type: 'string' }, type: { type: 'string', enum: ['otp', 'verification_link'] },
21
+ }, ['inbox_id', 'message_id', 'type']),
22
+ tool('mailfn_revoke_inbox', 'Delete one inbox and revoke all of its inbox-scoped credentials.', {
23
+ inbox_id: { type: 'string' },
24
+ }, ['inbox_id']),
25
+ ];
26
+ export class MailFnMcpServer {
27
+ client;
28
+ initializeResponded = false;
29
+ initialized = false;
30
+ activeRequests = new Map();
31
+ constructor(client) {
32
+ this.client = client;
33
+ }
34
+ listTools() {
35
+ return structuredClone(MAILFN_MCP_TOOLS);
36
+ }
37
+ async handleRequest(input) {
38
+ const parsed = parseRequest(input);
39
+ if ('error' in parsed)
40
+ return parsed.error;
41
+ const request = parsed.request;
42
+ const notification = !Object.prototype.hasOwnProperty.call(request, 'id');
43
+ const finish = (value) => notification ? null : value;
44
+ if (request.method === 'notifications/initialized') {
45
+ if (!notification)
46
+ return failure(request, -32600, 'notifications/initialized must not include an id');
47
+ if (this.initializeResponded)
48
+ this.initialized = true;
49
+ return null;
50
+ }
51
+ if (request.method === 'notifications/cancelled') {
52
+ const requestId = request.params?.requestId;
53
+ if (typeof requestId === 'string' || (typeof requestId === 'number' && Number.isFinite(requestId))) {
54
+ this.activeRequests.get(requestId)?.abort();
55
+ }
56
+ return notification ? null : failure(request, -32600, 'notifications/cancelled must not include an id');
57
+ }
58
+ if (request.method === 'initialize') {
59
+ if (notification)
60
+ return null;
61
+ if (this.initializeResponded)
62
+ return finish(failure(request, -32600, 'MailFn MCP is already initialized'));
63
+ const requested = typeof request.params?.protocolVersion === 'string' ? request.params.protocolVersion : undefined;
64
+ this.initializeResponded = true;
65
+ return finish(response(request, {
66
+ protocolVersion: requested && SUPPORTED_PROTOCOL_VERSIONS.includes(requested)
67
+ ? requested
68
+ : SUPPORTED_PROTOCOL_VERSIONS[0],
69
+ capabilities: { tools: {} },
70
+ serverInfo: { name: 'mailfn', version: '0.1.0' },
71
+ }));
72
+ }
73
+ if (request.method === 'ping')
74
+ return finish(response(request, {}));
75
+ if (!this.initialized)
76
+ return finish(failure(request, -32002, 'MailFn MCP initialization is not complete'));
77
+ if (request.method === 'tools/list')
78
+ return finish(response(request, { tools: this.listTools() }));
79
+ if (request.method !== 'tools/call')
80
+ return finish(failure(request, -32601, `Method ${request.method} is not supported`));
81
+ const requestId = request.id === null ? undefined : request.id;
82
+ const controller = requestId === undefined ? undefined : new AbortController();
83
+ try {
84
+ const name = string(request.params?.name, 'name');
85
+ const args = object(request.params?.arguments);
86
+ if (requestId !== undefined && controller)
87
+ this.activeRequests.set(requestId, controller);
88
+ const value = await this.callTool(name, args, controller?.signal);
89
+ return finish(response(request, {
90
+ content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
91
+ structuredContent: value,
92
+ isError: false,
93
+ }));
94
+ }
95
+ catch (error) {
96
+ const safe = { ok: false, error: { code: 'MAILFN_MCP_TOOL_FAILED', message: error instanceof Error ? error.message : 'Tool failed' } };
97
+ return finish(response(request, {
98
+ content: [{ type: 'text', text: JSON.stringify(safe) }], structuredContent: safe, isError: true,
99
+ }));
100
+ }
101
+ finally {
102
+ if (requestId !== undefined)
103
+ this.activeRequests.delete(requestId);
104
+ }
105
+ }
106
+ async callTool(name, args, signal) {
107
+ switch (name) {
108
+ case 'mailfn_create_inbox': {
109
+ const kind = enumValue(args.kind, ['stable', 'expiring'], 'kind');
110
+ const created = await this.client.createInbox({
111
+ kind,
112
+ requestedLocalPart: optionalString(args.local_part),
113
+ expirySeconds: optionalNumber(args.expiry_seconds),
114
+ metadata: optionalString(args.run_id) ? { runId: String(args.run_id) } : undefined,
115
+ idempotencyKey: optionalString(args.run_id) ? `mcp:${String(args.run_id)}` : undefined,
116
+ });
117
+ return {
118
+ ok: true,
119
+ inbox: { id: created.inbox.id, address: created.inbox.address, kind: created.inbox.kind, expiresAt: created.inbox.expiresAt },
120
+ scopedCredential: { id: created.credential.credential.id, token: created.credential.token, scopes: created.credential.credential.permissions },
121
+ };
122
+ }
123
+ case 'mailfn_wait_for_message': {
124
+ const result = await this.client.waitForMessages(string(args.inbox_id, 'inbox_id'), {
125
+ after: optionalString(args.after), sender: optionalString(args.sender), senderDomain: optionalString(args.sender_domain),
126
+ subject: optionalString(args.subject), timeoutMs: optionalNumber(args.timeout_ms), expectedCount: optionalNumber(args.expected_count),
127
+ }, { signal });
128
+ return { ok: true, ...result, messages: result.messages.map(metadata) };
129
+ }
130
+ case 'mailfn_list_messages': {
131
+ const result = await this.client.listMessages(string(args.inbox_id, 'inbox_id'), {
132
+ receivedAfter: optionalString(args.after), sender: optionalString(args.sender), subject: optionalString(args.subject), limit: optionalNumber(args.limit),
133
+ });
134
+ return { ok: true, messages: result.items.map(metadata), nextCursor: result.nextCursor };
135
+ }
136
+ case 'mailfn_read_message': {
137
+ const inboxId = string(args.inbox_id, 'inbox_id');
138
+ const messageId = string(args.message_id, 'message_id');
139
+ const message = await this.client.readMessage(inboxId, messageId);
140
+ const attachments = args.include_attachments === true
141
+ ? await this.client.listAttachments(inboxId, messageId)
142
+ : undefined;
143
+ return {
144
+ ok: true,
145
+ message: args.include_content === true ? message : metadata(message),
146
+ ...(attachments ? { attachments } : {}),
147
+ };
148
+ }
149
+ case 'mailfn_extract_verification': {
150
+ const result = await this.client.extractVerification(string(args.inbox_id, 'inbox_id'), string(args.message_id, 'message_id'), enumValue(args.type, ['otp', 'verification_link'], 'type'));
151
+ return { ok: true, verification: result };
152
+ }
153
+ case 'mailfn_revoke_inbox': {
154
+ const inbox = await this.client.deleteInbox(string(args.inbox_id, 'inbox_id'));
155
+ return { ok: true, inbox: { id: inbox.id, status: inbox.status } };
156
+ }
157
+ default: throw new Error(`Unknown MailFn tool ${name}`);
158
+ }
159
+ }
160
+ }
161
+ export async function serveMailFnMcpStdio(client, signal, streams = { input: process.stdin, output: process.stdout }) {
162
+ const server = new MailFnMcpServer(client);
163
+ const lines = createInterface({ input: streams.input, crlfDelay: Infinity });
164
+ const close = () => lines.close();
165
+ const pending = new Set();
166
+ let writes = Promise.resolve();
167
+ const emit = (value) => {
168
+ writes = writes.then(() => write(value, streams.output));
169
+ return writes;
170
+ };
171
+ const dispatch = (request) => server.handleRequest(request).then(async (result) => {
172
+ if (result)
173
+ await emit(result);
174
+ });
175
+ signal?.addEventListener('abort', close, { once: true });
176
+ try {
177
+ for await (const line of lines) {
178
+ if (!line.trim())
179
+ continue;
180
+ let request;
181
+ try {
182
+ request = JSON.parse(line);
183
+ }
184
+ catch {
185
+ await emit(failure({ jsonrpc: '2.0', id: null, method: '' }, -32700, 'Parse error'));
186
+ continue;
187
+ }
188
+ const method = request && typeof request === 'object' && !Array.isArray(request)
189
+ ? request.method
190
+ : undefined;
191
+ if (method === 'tools/call' || method === 'notifications/cancelled') {
192
+ const task = dispatch(request).finally(() => pending.delete(task));
193
+ pending.add(task);
194
+ }
195
+ else {
196
+ await dispatch(request);
197
+ }
198
+ }
199
+ await Promise.all(pending);
200
+ await writes;
201
+ }
202
+ finally {
203
+ signal?.removeEventListener('abort', close);
204
+ }
205
+ }
206
+ function write(value, output) {
207
+ return new Promise((resolve, reject) => output.write(`${JSON.stringify(value)}\n`, (error) => error ? reject(error) : resolve()));
208
+ }
209
+ function tool(name, description, properties, required = []) {
210
+ return { name, description, inputSchema: { type: 'object', additionalProperties: false, properties, required } };
211
+ }
212
+ function response(request, result) {
213
+ return { jsonrpc: '2.0', id: request.id ?? null, result };
214
+ }
215
+ function failure(request, code, message) {
216
+ return { jsonrpc: '2.0', id: request.id ?? null, error: { code, message } };
217
+ }
218
+ function parseRequest(input) {
219
+ if (!input || typeof input !== 'object' || Array.isArray(input)) {
220
+ return { error: failure({ jsonrpc: '2.0', id: null, method: '' }, -32600, 'Invalid Request') };
221
+ }
222
+ const value = input;
223
+ const idValid = value.id === undefined || value.id === null || typeof value.id === 'string' ||
224
+ (typeof value.id === 'number' && Number.isFinite(value.id));
225
+ const paramsValid = value.params === undefined || (value.params !== null && typeof value.params === 'object' && !Array.isArray(value.params));
226
+ if (value.jsonrpc !== '2.0' || typeof value.method !== 'string' || !value.method || !idValid || !paramsValid) {
227
+ return { error: failure({ jsonrpc: '2.0', id: null, method: '' }, -32600, 'Invalid Request') };
228
+ }
229
+ return { request: value };
230
+ }
231
+ function object(value) { return value && typeof value === 'object' && !Array.isArray(value) ? value : {}; }
232
+ function string(value, name) { if (typeof value !== 'string' || !value.trim())
233
+ throw new Error(`${name} is required`); return value; }
234
+ function optionalString(value) { return typeof value === 'string' && value.trim() ? value : undefined; }
235
+ function optionalNumber(value) { return typeof value === 'number' && Number.isFinite(value) ? value : undefined; }
236
+ function enumValue(value, allowed, name) {
237
+ if (typeof value !== 'string' || !allowed.includes(value))
238
+ throw new Error(`${name} is invalid`);
239
+ return value;
240
+ }
241
+ function metadata(message) {
242
+ return {
243
+ id: message.id, inboxId: message.inboxId, receivedAt: message.receivedAt, status: message.status,
244
+ threadId: message.threadId, labels: message.labels, sizeBytes: message.sizeBytes,
245
+ };
246
+ }
247
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@mailfn/mcp",
3
+ "version": "0.1.0",
4
+ "description": "Agent-safe MCP server for MailFn inbox workflows",
5
+ "type": "module",
6
+ "bin": { "mailfn-mcp": "./dist/cli.js" },
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": { ".": { "types": "./dist/index.d.ts", "default": "./dist/index.js" } },
10
+ "files": ["dist", "README.md"],
11
+ "scripts": { "build": "tsc", "test": "vitest run", "typecheck": "tsc --noEmit", "lint": "tsc --noEmit", "clean": "rm -rf dist" },
12
+ "keywords": ["mailfn", "mcp", "agents", "email"],
13
+ "author": "21n",
14
+ "license": "MIT",
15
+ "repository": { "type": "git", "url": "git+https://github.com/21nCo/super-functions.git", "directory": "mailfn/mcp" },
16
+ "publishConfig": { "access": "public" },
17
+ "dependencies": { "@mailfn/client": "0.1.0" },
18
+ "devDependencies": { "@types/node": "^22.0.0", "typescript": "^5.6.0", "vitest": "3.2.4" }
19
+ }