social-mcp 1.8.0 → 1.8.1
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 +57 -4
- package/dist/index.js +21 -18
- package/dist/index.js.map +1 -1
- package/dist/services/email-service.d.ts +19 -3
- package/dist/services/email-service.js +60 -28
- package/dist/services/email-service.js.map +1 -1
- package/dist/tools/email-tools/send-bulk-email.d.ts +39 -1
- package/dist/tools/email-tools/send-bulk-email.js +69 -7
- package/dist/tools/email-tools/send-bulk-email.js.map +1 -1
- package/dist/tools/email-tools/send-email.d.ts +39 -1
- package/dist/tools/email-tools/send-email.js +69 -7
- package/dist/tools/email-tools/send-email.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -215,7 +215,9 @@ Copy `example.env` to `.env` and fill in the credentials for the platforms you w
|
|
|
215
215
|
|
|
216
216
|
### Email
|
|
217
217
|
|
|
218
|
-
Email uses a Laravel-style driver system.
|
|
218
|
+
Email uses a Laravel-style driver system. **Env vars are optional** — credentials can also be passed inline per tool call (see [Per-org / Multi-account Usage](#per-org--multi-account-usage)).
|
|
219
|
+
|
|
220
|
+
Set `MAIL_MAILER` to select your provider and only configure the variables for the driver you choose.
|
|
219
221
|
|
|
220
222
|
| Variable | Description |
|
|
221
223
|
| -------------------- | ---------------------------------------------------------------------- |
|
|
@@ -233,6 +235,8 @@ Email uses a Laravel-style driver system. Set `MAIL_MAILER` to select your provi
|
|
|
233
235
|
| `MAIL_PASSWORD` | SMTP authentication password |
|
|
234
236
|
| `MAIL_ENCRYPTION` | Connection security: `tls` (default), `ssl`, or `none` |
|
|
235
237
|
|
|
238
|
+
> **SMTP verification:** On startup, social-mcp calls `transporter.verify()` against your SMTP server. A misconfigured host or wrong password shows `[!!]` in the startup log rather than failing silently on the first send.
|
|
239
|
+
|
|
236
240
|
**SendGrid** (`MAIL_MAILER=sendgrid`)
|
|
237
241
|
|
|
238
242
|
| Variable | Description |
|
|
@@ -378,10 +382,59 @@ Email uses a Laravel-style driver system. Set `MAIL_MAILER` to select your provi
|
|
|
378
382
|
|
|
379
383
|
### Email
|
|
380
384
|
|
|
381
|
-
- **EMAIL_SEND** — Send an email to a single recipient (`to`, `subject`, `text`, `html
|
|
382
|
-
- **EMAIL_SEND_BULK** — Send the same email to multiple recipients (`recipients`, `subject`, `text`, `html
|
|
385
|
+
- **EMAIL_SEND** — Send an email to a single recipient (`to`, `subject`, `text`, `html`; plus optional inline credentials — see below)
|
|
386
|
+
- **EMAIL_SEND_BULK** — Send the same email to multiple recipients (`recipients`, `subject`, `text`, `html`; plus optional inline credentials)
|
|
387
|
+
|
|
388
|
+
> The active mail driver is selected by `MAIL_MAILER`. Switching providers requires only changing that one variable — no code changes needed. Credentials can also be passed inline per call for multi-account / per-org use cases.
|
|
389
|
+
|
|
390
|
+
## Per-org / Multi-account Usage
|
|
391
|
+
|
|
392
|
+
Both email tools accept **inline credentials** as optional parameters. When provided, they take full priority over env vars — a fresh, isolated `EmailService` is created for that call. This enables per-organization or per-user email accounts without any env var changes.
|
|
393
|
+
|
|
394
|
+
**Example — SMTP:**
|
|
395
|
+
```json
|
|
396
|
+
{
|
|
397
|
+
"mailer": "smtp",
|
|
398
|
+
"fromAddress": "team@acme.com",
|
|
399
|
+
"fromName": "Acme Corp",
|
|
400
|
+
"smtpHost": "smtp.gmail.com",
|
|
401
|
+
"smtpPort": 587,
|
|
402
|
+
"smtpUsername": "team@acme.com",
|
|
403
|
+
"smtpPassword": "app-password",
|
|
404
|
+
"smtpEncryption": "tls",
|
|
405
|
+
"to": "customer@example.com",
|
|
406
|
+
"subject": "Hello",
|
|
407
|
+
"text": "Hi there!"
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**Example — SendGrid:**
|
|
412
|
+
```json
|
|
413
|
+
{
|
|
414
|
+
"mailer": "sendgrid",
|
|
415
|
+
"fromAddress": "team@acme.com",
|
|
416
|
+
"sendgridApiKey": "SG.xxxx",
|
|
417
|
+
"recipients": ["a@example.com", "b@example.com"],
|
|
418
|
+
"subject": "Newsletter",
|
|
419
|
+
"text": "Plain text body",
|
|
420
|
+
"html": "<p>HTML body</p>"
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**Example — Mailgun:**
|
|
425
|
+
```json
|
|
426
|
+
{
|
|
427
|
+
"mailer": "mailgun",
|
|
428
|
+
"fromAddress": "team@acme.com",
|
|
429
|
+
"mailgunApiKey": "key-xxxx",
|
|
430
|
+
"mailgunDomain": "mg.acme.com",
|
|
431
|
+
"to": "customer@example.com",
|
|
432
|
+
"subject": "Hello",
|
|
433
|
+
"text": "Hi there!"
|
|
434
|
+
}
|
|
435
|
+
```
|
|
383
436
|
|
|
384
|
-
|
|
437
|
+
When `mailer` and `fromAddress` are omitted, the tool falls back to the env var configuration (`MAIL_MAILER`, `MAIL_FROM_ADDRESS`, etc.).
|
|
385
438
|
|
|
386
439
|
## Development
|
|
387
440
|
|
package/dist/index.js
CHANGED
|
@@ -94,9 +94,9 @@ import { searchVideosTool as youtubeSearchVideosTool } from "./tools/youtube-too
|
|
|
94
94
|
import { updateVideoTool as youtubeUpdateVideoTool } from "./tools/youtube-tools/update-video.js";
|
|
95
95
|
const require = createRequire(import.meta.url);
|
|
96
96
|
const { version } = require("../package.json");
|
|
97
|
-
function checkPlatform(name, init) {
|
|
97
|
+
async function checkPlatform(name, init) {
|
|
98
98
|
try {
|
|
99
|
-
init();
|
|
99
|
+
await init();
|
|
100
100
|
console.error(` [ok] ${name}`);
|
|
101
101
|
}
|
|
102
102
|
catch (err) {
|
|
@@ -110,22 +110,25 @@ function checkPlatform(name, init) {
|
|
|
110
110
|
}
|
|
111
111
|
async function main() {
|
|
112
112
|
console.error("Social MCP Server — platform availability:");
|
|
113
|
-
checkPlatform("Telegram", getTelegramService);
|
|
114
|
-
checkPlatform("Twitter/X", getTwitterService);
|
|
115
|
-
checkPlatform("Discord", getDiscordService);
|
|
116
|
-
checkPlatform("WhatsApp", getWhatsappService);
|
|
117
|
-
checkPlatform("Facebook", getFacebookService);
|
|
118
|
-
checkPlatform("Instagram", getInstagramService);
|
|
119
|
-
checkPlatform("Slack", getSlackService);
|
|
120
|
-
checkPlatform("LinkedIn", getLinkedInService);
|
|
121
|
-
checkPlatform("Reddit", getRedditService);
|
|
122
|
-
checkPlatform("Threads", getThreadsService);
|
|
123
|
-
checkPlatform("TikTok", getTikTokService);
|
|
124
|
-
checkPlatform("YouTube", getYouTubeService);
|
|
125
|
-
checkPlatform("Bluesky", getBlueskyService);
|
|
126
|
-
checkPlatform("Mastodon", getMastodonService);
|
|
127
|
-
checkPlatform("Pinterest", getPinterestService);
|
|
128
|
-
checkPlatform("Email",
|
|
113
|
+
await checkPlatform("Telegram", getTelegramService);
|
|
114
|
+
await checkPlatform("Twitter/X", getTwitterService);
|
|
115
|
+
await checkPlatform("Discord", getDiscordService);
|
|
116
|
+
await checkPlatform("WhatsApp", getWhatsappService);
|
|
117
|
+
await checkPlatform("Facebook", getFacebookService);
|
|
118
|
+
await checkPlatform("Instagram", getInstagramService);
|
|
119
|
+
await checkPlatform("Slack", getSlackService);
|
|
120
|
+
await checkPlatform("LinkedIn", getLinkedInService);
|
|
121
|
+
await checkPlatform("Reddit", getRedditService);
|
|
122
|
+
await checkPlatform("Threads", getThreadsService);
|
|
123
|
+
await checkPlatform("TikTok", getTikTokService);
|
|
124
|
+
await checkPlatform("YouTube", getYouTubeService);
|
|
125
|
+
await checkPlatform("Bluesky", getBlueskyService);
|
|
126
|
+
await checkPlatform("Mastodon", getMastodonService);
|
|
127
|
+
await checkPlatform("Pinterest", getPinterestService);
|
|
128
|
+
await checkPlatform("Email", async () => {
|
|
129
|
+
const service = getEmailService();
|
|
130
|
+
await service.verify();
|
|
131
|
+
});
|
|
129
132
|
console.error("");
|
|
130
133
|
const server = new FastMCP({ name: "Social MCP Server", version });
|
|
131
134
|
// Telegram
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,24 @@
|
|
|
1
|
+
export interface EmailCredentials {
|
|
2
|
+
mailer: "smtp" | "sendgrid" | "mailgun";
|
|
3
|
+
fromAddress: string;
|
|
4
|
+
fromName?: string;
|
|
5
|
+
smtpHost?: string;
|
|
6
|
+
smtpPort?: number;
|
|
7
|
+
smtpUsername?: string;
|
|
8
|
+
smtpPassword?: string;
|
|
9
|
+
smtpEncryption?: "tls" | "ssl" | "none";
|
|
10
|
+
sendgridApiKey?: string;
|
|
11
|
+
mailgunApiKey?: string;
|
|
12
|
+
mailgunDomain?: string;
|
|
13
|
+
}
|
|
1
14
|
export declare class EmailService {
|
|
2
|
-
private
|
|
3
|
-
constructor();
|
|
4
|
-
|
|
15
|
+
private creds;
|
|
16
|
+
constructor(credentials?: EmailCredentials);
|
|
17
|
+
private validateCredentials;
|
|
5
18
|
private fromHeader;
|
|
19
|
+
private createSMTPTransporter;
|
|
20
|
+
verify(): Promise<void>;
|
|
21
|
+
send(to: string | string[], subject: string, text: string, html?: string): Promise<void>;
|
|
6
22
|
private sendViaSMTP;
|
|
7
23
|
private sendViaSendGrid;
|
|
8
24
|
private sendViaMailgun;
|
|
@@ -1,16 +1,35 @@
|
|
|
1
1
|
import nodemailer from "nodemailer";
|
|
2
2
|
import { config } from "../lib/config.js";
|
|
3
3
|
import { CredentialsError } from "../lib/errors.js";
|
|
4
|
+
function credentialsFromConfig() {
|
|
5
|
+
const { mailer, fromAddress, fromName, smtp, sendgrid, mailgun } = config.email;
|
|
6
|
+
return {
|
|
7
|
+
mailer: mailer,
|
|
8
|
+
fromAddress,
|
|
9
|
+
fromName: fromName || undefined,
|
|
10
|
+
smtpHost: smtp.host,
|
|
11
|
+
smtpPort: smtp.port,
|
|
12
|
+
smtpUsername: smtp.username,
|
|
13
|
+
smtpPassword: smtp.password,
|
|
14
|
+
smtpEncryption: smtp.encryption,
|
|
15
|
+
sendgridApiKey: sendgrid.apiKey || undefined,
|
|
16
|
+
mailgunApiKey: mailgun.apiKey || undefined,
|
|
17
|
+
mailgunDomain: mailgun.domain || undefined,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
4
20
|
export class EmailService {
|
|
5
|
-
|
|
6
|
-
constructor() {
|
|
7
|
-
|
|
21
|
+
creds;
|
|
22
|
+
constructor(credentials) {
|
|
23
|
+
this.creds = credentials ?? credentialsFromConfig();
|
|
24
|
+
this.validateCredentials();
|
|
25
|
+
}
|
|
26
|
+
validateCredentials() {
|
|
27
|
+
const { mailer, fromAddress, smtpHost, smtpUsername, smtpPassword, sendgridApiKey, mailgunApiKey, mailgunDomain, } = this.creds;
|
|
8
28
|
if (!fromAddress) {
|
|
9
|
-
throw new CredentialsError("Email", ["MAIL_FROM_ADDRESS"
|
|
29
|
+
throw new CredentialsError("Email", ["MAIL_FROM_ADDRESS"]);
|
|
10
30
|
}
|
|
11
|
-
this.mailer = mailer;
|
|
12
31
|
if (mailer === "smtp") {
|
|
13
|
-
if (!
|
|
32
|
+
if (!smtpHost || !smtpUsername || !smtpPassword) {
|
|
14
33
|
throw new CredentialsError("Email (SMTP)", [
|
|
15
34
|
"MAIL_HOST",
|
|
16
35
|
"MAIL_USERNAME",
|
|
@@ -19,12 +38,12 @@ export class EmailService {
|
|
|
19
38
|
}
|
|
20
39
|
}
|
|
21
40
|
else if (mailer === "sendgrid") {
|
|
22
|
-
if (!
|
|
41
|
+
if (!sendgridApiKey) {
|
|
23
42
|
throw new CredentialsError("Email (SendGrid)", ["SENDGRID_API_KEY"]);
|
|
24
43
|
}
|
|
25
44
|
}
|
|
26
45
|
else if (mailer === "mailgun") {
|
|
27
|
-
if (!
|
|
46
|
+
if (!mailgunApiKey || !mailgunDomain) {
|
|
28
47
|
throw new CredentialsError("Email (Mailgun)", [
|
|
29
48
|
"MAILGUN_API_KEY",
|
|
30
49
|
"MAILGUN_DOMAIN",
|
|
@@ -32,11 +51,32 @@ export class EmailService {
|
|
|
32
51
|
}
|
|
33
52
|
}
|
|
34
53
|
else {
|
|
35
|
-
throw new Error(`Unsupported
|
|
54
|
+
throw new Error(`Unsupported mailer: "${mailer}". Supported: smtp, sendgrid, mailgun`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
fromHeader() {
|
|
58
|
+
const { fromName, fromAddress } = this.creds;
|
|
59
|
+
return fromName ? `"${fromName}" <${fromAddress}>` : fromAddress;
|
|
60
|
+
}
|
|
61
|
+
createSMTPTransporter() {
|
|
62
|
+
const { smtpHost, smtpPort, smtpUsername, smtpPassword, smtpEncryption } = this.creds;
|
|
63
|
+
return nodemailer.createTransport({
|
|
64
|
+
host: smtpHost,
|
|
65
|
+
port: smtpPort ?? 587,
|
|
66
|
+
secure: smtpEncryption === "ssl",
|
|
67
|
+
requireTLS: smtpEncryption !== "ssl" && smtpEncryption !== "none",
|
|
68
|
+
auth: { user: smtpUsername, pass: smtpPassword },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Verifies the SMTP connection. No-op for SendGrid/Mailgun (no free verify endpoint).
|
|
72
|
+
async verify() {
|
|
73
|
+
if (this.creds.mailer === "smtp") {
|
|
74
|
+
const transporter = this.createSMTPTransporter();
|
|
75
|
+
await transporter.verify();
|
|
36
76
|
}
|
|
37
77
|
}
|
|
38
78
|
async send(to, subject, text, html) {
|
|
39
|
-
switch (this.mailer) {
|
|
79
|
+
switch (this.creds.mailer) {
|
|
40
80
|
case "smtp":
|
|
41
81
|
return this.sendViaSMTP(to, subject, text, html);
|
|
42
82
|
case "sendgrid":
|
|
@@ -45,19 +85,8 @@ export class EmailService {
|
|
|
45
85
|
return this.sendViaMailgun(to, subject, text, html);
|
|
46
86
|
}
|
|
47
87
|
}
|
|
48
|
-
fromHeader() {
|
|
49
|
-
const { fromName, fromAddress } = config.email;
|
|
50
|
-
return fromName ? `"${fromName}" <${fromAddress}>` : fromAddress;
|
|
51
|
-
}
|
|
52
88
|
async sendViaSMTP(to, subject, text, html) {
|
|
53
|
-
const
|
|
54
|
-
const transporter = nodemailer.createTransport({
|
|
55
|
-
host,
|
|
56
|
-
port,
|
|
57
|
-
secure: encryption === "ssl",
|
|
58
|
-
requireTLS: encryption === "tls",
|
|
59
|
-
auth: { user: username, pass: password },
|
|
60
|
-
});
|
|
89
|
+
const transporter = this.createSMTPTransporter();
|
|
61
90
|
await transporter.sendMail({
|
|
62
91
|
from: this.fromHeader(),
|
|
63
92
|
to: Array.isArray(to) ? to.join(", ") : to,
|
|
@@ -74,8 +103,8 @@ export class EmailService {
|
|
|
74
103
|
const body = {
|
|
75
104
|
personalizations,
|
|
76
105
|
from: {
|
|
77
|
-
email:
|
|
78
|
-
...(
|
|
106
|
+
email: this.creds.fromAddress,
|
|
107
|
+
...(this.creds.fromName ? { name: this.creds.fromName } : {}),
|
|
79
108
|
},
|
|
80
109
|
subject,
|
|
81
110
|
content: [
|
|
@@ -86,7 +115,7 @@ export class EmailService {
|
|
|
86
115
|
const response = await fetch("https://api.sendgrid.com/v3/mail/send", {
|
|
87
116
|
method: "POST",
|
|
88
117
|
headers: {
|
|
89
|
-
Authorization: `Bearer ${
|
|
118
|
+
Authorization: `Bearer ${this.creds.sendgridApiKey}`,
|
|
90
119
|
"Content-Type": "application/json",
|
|
91
120
|
},
|
|
92
121
|
body: JSON.stringify(body),
|
|
@@ -97,7 +126,7 @@ export class EmailService {
|
|
|
97
126
|
}
|
|
98
127
|
}
|
|
99
128
|
async sendViaMailgun(to, subject, text, html) {
|
|
100
|
-
const {
|
|
129
|
+
const { mailgunApiKey, mailgunDomain } = this.creds;
|
|
101
130
|
const formData = new FormData();
|
|
102
131
|
formData.append("from", this.fromHeader());
|
|
103
132
|
formData.append("to", Array.isArray(to) ? to.join(",") : to);
|
|
@@ -105,8 +134,8 @@ export class EmailService {
|
|
|
105
134
|
formData.append("text", text);
|
|
106
135
|
if (html)
|
|
107
136
|
formData.append("html", html);
|
|
108
|
-
const credentials = Buffer.from(`api:${
|
|
109
|
-
const response = await fetch(`https://api.mailgun.net/v3/${
|
|
137
|
+
const credentials = Buffer.from(`api:${mailgunApiKey}`).toString("base64");
|
|
138
|
+
const response = await fetch(`https://api.mailgun.net/v3/${mailgunDomain}/messages`, {
|
|
110
139
|
method: "POST",
|
|
111
140
|
headers: { Authorization: `Basic ${credentials}` },
|
|
112
141
|
body: formData,
|
|
@@ -117,6 +146,9 @@ export class EmailService {
|
|
|
117
146
|
}
|
|
118
147
|
}
|
|
119
148
|
}
|
|
149
|
+
// Singleton for the env-var-based default configuration.
|
|
150
|
+
// When calling tools with per-org credentials, pass an EmailCredentials
|
|
151
|
+
// object directly to `new EmailService(credentials)` instead.
|
|
120
152
|
let _instance;
|
|
121
153
|
export function getEmailService() {
|
|
122
154
|
if (!_instance)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-service.js","sourceRoot":"","sources":["../../src/services/email-service.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"email-service.js","sourceRoot":"","sources":["../../src/services/email-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
declare const sendBulkEmailParams: z.ZodObject<{
|
|
3
|
+
mailer: z.ZodOptional<z.ZodEnum<{
|
|
4
|
+
smtp: "smtp";
|
|
5
|
+
sendgrid: "sendgrid";
|
|
6
|
+
mailgun: "mailgun";
|
|
7
|
+
}>>;
|
|
8
|
+
fromAddress: z.ZodOptional<z.ZodString>;
|
|
9
|
+
fromName: z.ZodOptional<z.ZodString>;
|
|
10
|
+
smtpHost: z.ZodOptional<z.ZodString>;
|
|
11
|
+
smtpPort: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
smtpUsername: z.ZodOptional<z.ZodString>;
|
|
13
|
+
smtpPassword: z.ZodOptional<z.ZodString>;
|
|
14
|
+
smtpEncryption: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
tls: "tls";
|
|
16
|
+
ssl: "ssl";
|
|
17
|
+
none: "none";
|
|
18
|
+
}>>;
|
|
19
|
+
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
20
|
+
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
21
|
+
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
3
22
|
recipients: z.ZodArray<z.ZodString>;
|
|
4
23
|
subject: z.ZodString;
|
|
5
24
|
text: z.ZodString;
|
|
@@ -8,8 +27,27 @@ declare const sendBulkEmailParams: z.ZodObject<{
|
|
|
8
27
|
type SendBulkEmailParams = z.infer<typeof sendBulkEmailParams>;
|
|
9
28
|
export declare const sendBulkEmailTool: {
|
|
10
29
|
readonly name: "EMAIL_SEND_BULK";
|
|
11
|
-
readonly description: "Send the same email to multiple recipients
|
|
30
|
+
readonly description: "Send the same email to multiple recipients. Credentials can be passed inline per call (for per-org or per-user accounts) or omitted to use the server's env var configuration.";
|
|
12
31
|
readonly parameters: z.ZodObject<{
|
|
32
|
+
mailer: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
smtp: "smtp";
|
|
34
|
+
sendgrid: "sendgrid";
|
|
35
|
+
mailgun: "mailgun";
|
|
36
|
+
}>>;
|
|
37
|
+
fromAddress: z.ZodOptional<z.ZodString>;
|
|
38
|
+
fromName: z.ZodOptional<z.ZodString>;
|
|
39
|
+
smtpHost: z.ZodOptional<z.ZodString>;
|
|
40
|
+
smtpPort: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
smtpUsername: z.ZodOptional<z.ZodString>;
|
|
42
|
+
smtpPassword: z.ZodOptional<z.ZodString>;
|
|
43
|
+
smtpEncryption: z.ZodOptional<z.ZodEnum<{
|
|
44
|
+
tls: "tls";
|
|
45
|
+
ssl: "ssl";
|
|
46
|
+
none: "none";
|
|
47
|
+
}>>;
|
|
48
|
+
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
49
|
+
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
50
|
+
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
13
51
|
recipients: z.ZodArray<z.ZodString>;
|
|
14
52
|
subject: z.ZodString;
|
|
15
53
|
text: z.ZodString;
|
|
@@ -1,25 +1,87 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { CredentialsError } from "../../lib/errors.js";
|
|
3
|
-
import { getEmailService } from "../../services/email-service.js";
|
|
3
|
+
import { EmailService, getEmailService, } from "../../services/email-service.js";
|
|
4
4
|
const sendBulkEmailParams = z.object({
|
|
5
|
+
// ── Inline credentials (all optional — omit to use env var config) ──────
|
|
6
|
+
mailer: z
|
|
7
|
+
.enum(["smtp", "sendgrid", "mailgun"])
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Mail driver. Required when not configured via env vars (MAIL_MAILER)."),
|
|
10
|
+
fromAddress: z
|
|
11
|
+
.string()
|
|
12
|
+
.email()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Sender email address. Required when passing inline credentials."),
|
|
15
|
+
fromName: z.string().optional().describe("Sender display name."),
|
|
16
|
+
// SMTP
|
|
17
|
+
smtpHost: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("SMTP server hostname. Required when mailer=smtp."),
|
|
21
|
+
smtpPort: z
|
|
22
|
+
.number()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("SMTP port (default 587). Used when mailer=smtp."),
|
|
25
|
+
smtpUsername: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("SMTP auth username. Required when mailer=smtp."),
|
|
29
|
+
smtpPassword: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("SMTP auth password. Required when mailer=smtp."),
|
|
33
|
+
smtpEncryption: z
|
|
34
|
+
.enum(["tls", "ssl", "none"])
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("SMTP encryption (default tls). Used when mailer=smtp."),
|
|
37
|
+
// SendGrid
|
|
38
|
+
sendgridApiKey: z
|
|
39
|
+
.string()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("SendGrid API key. Required when mailer=sendgrid."),
|
|
42
|
+
// Mailgun
|
|
43
|
+
mailgunApiKey: z
|
|
44
|
+
.string()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Mailgun API key. Required when mailer=mailgun."),
|
|
47
|
+
mailgunDomain: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Mailgun sending domain. Required when mailer=mailgun."),
|
|
51
|
+
// ── Message ──────────────────────────────────────────────────────────────
|
|
5
52
|
recipients: z
|
|
6
53
|
.array(z.string().email())
|
|
7
54
|
.min(1)
|
|
8
|
-
.describe("List of recipient email addresses"),
|
|
9
|
-
subject: z.string().min(1).describe("Email subject line"),
|
|
10
|
-
text: z.string().min(1).describe("Plain-text body of the email"),
|
|
55
|
+
.describe("List of recipient email addresses."),
|
|
56
|
+
subject: z.string().min(1).describe("Email subject line."),
|
|
57
|
+
text: z.string().min(1).describe("Plain-text body of the email."),
|
|
11
58
|
html: z
|
|
12
59
|
.string()
|
|
13
60
|
.optional()
|
|
14
|
-
.describe("Optional HTML body
|
|
61
|
+
.describe("Optional HTML body. Falls back to text if omitted."),
|
|
15
62
|
});
|
|
16
63
|
export const sendBulkEmailTool = {
|
|
17
64
|
name: "EMAIL_SEND_BULK",
|
|
18
|
-
description: "Send the same email to multiple recipients
|
|
65
|
+
description: "Send the same email to multiple recipients. Credentials can be passed inline per call (for per-org or per-user accounts) or omitted to use the server's env var configuration.",
|
|
19
66
|
parameters: sendBulkEmailParams,
|
|
20
67
|
execute: async (params) => {
|
|
21
68
|
try {
|
|
22
|
-
|
|
69
|
+
const service = params.mailer && params.fromAddress
|
|
70
|
+
? new EmailService({
|
|
71
|
+
mailer: params.mailer,
|
|
72
|
+
fromAddress: params.fromAddress,
|
|
73
|
+
fromName: params.fromName,
|
|
74
|
+
smtpHost: params.smtpHost,
|
|
75
|
+
smtpPort: params.smtpPort,
|
|
76
|
+
smtpUsername: params.smtpUsername,
|
|
77
|
+
smtpPassword: params.smtpPassword,
|
|
78
|
+
smtpEncryption: params.smtpEncryption,
|
|
79
|
+
sendgridApiKey: params.sendgridApiKey,
|
|
80
|
+
mailgunApiKey: params.mailgunApiKey,
|
|
81
|
+
mailgunDomain: params.mailgunDomain,
|
|
82
|
+
})
|
|
83
|
+
: getEmailService();
|
|
84
|
+
await service.send(params.recipients, params.subject, params.text, params.html);
|
|
23
85
|
return `Email sent successfully to ${params.recipients.length} recipient(s): ${params.recipients.join(", ")}.`;
|
|
24
86
|
}
|
|
25
87
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-bulk-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-bulk-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"send-bulk-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-bulk-email.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
declare const sendEmailParams: z.ZodObject<{
|
|
3
|
+
mailer: z.ZodOptional<z.ZodEnum<{
|
|
4
|
+
smtp: "smtp";
|
|
5
|
+
sendgrid: "sendgrid";
|
|
6
|
+
mailgun: "mailgun";
|
|
7
|
+
}>>;
|
|
8
|
+
fromAddress: z.ZodOptional<z.ZodString>;
|
|
9
|
+
fromName: z.ZodOptional<z.ZodString>;
|
|
10
|
+
smtpHost: z.ZodOptional<z.ZodString>;
|
|
11
|
+
smtpPort: z.ZodOptional<z.ZodNumber>;
|
|
12
|
+
smtpUsername: z.ZodOptional<z.ZodString>;
|
|
13
|
+
smtpPassword: z.ZodOptional<z.ZodString>;
|
|
14
|
+
smtpEncryption: z.ZodOptional<z.ZodEnum<{
|
|
15
|
+
tls: "tls";
|
|
16
|
+
ssl: "ssl";
|
|
17
|
+
none: "none";
|
|
18
|
+
}>>;
|
|
19
|
+
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
20
|
+
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
21
|
+
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
3
22
|
to: z.ZodString;
|
|
4
23
|
subject: z.ZodString;
|
|
5
24
|
text: z.ZodString;
|
|
@@ -8,8 +27,27 @@ declare const sendEmailParams: z.ZodObject<{
|
|
|
8
27
|
type SendEmailParams = z.infer<typeof sendEmailParams>;
|
|
9
28
|
export declare const sendEmailTool: {
|
|
10
29
|
readonly name: "EMAIL_SEND";
|
|
11
|
-
readonly description: "Send a single email
|
|
30
|
+
readonly description: "Send a single email. Credentials can be passed inline per call (for per-org or per-user accounts) or omitted to use the server's env var configuration.";
|
|
12
31
|
readonly parameters: z.ZodObject<{
|
|
32
|
+
mailer: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
smtp: "smtp";
|
|
34
|
+
sendgrid: "sendgrid";
|
|
35
|
+
mailgun: "mailgun";
|
|
36
|
+
}>>;
|
|
37
|
+
fromAddress: z.ZodOptional<z.ZodString>;
|
|
38
|
+
fromName: z.ZodOptional<z.ZodString>;
|
|
39
|
+
smtpHost: z.ZodOptional<z.ZodString>;
|
|
40
|
+
smtpPort: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
smtpUsername: z.ZodOptional<z.ZodString>;
|
|
42
|
+
smtpPassword: z.ZodOptional<z.ZodString>;
|
|
43
|
+
smtpEncryption: z.ZodOptional<z.ZodEnum<{
|
|
44
|
+
tls: "tls";
|
|
45
|
+
ssl: "ssl";
|
|
46
|
+
none: "none";
|
|
47
|
+
}>>;
|
|
48
|
+
sendgridApiKey: z.ZodOptional<z.ZodString>;
|
|
49
|
+
mailgunApiKey: z.ZodOptional<z.ZodString>;
|
|
50
|
+
mailgunDomain: z.ZodOptional<z.ZodString>;
|
|
13
51
|
to: z.ZodString;
|
|
14
52
|
subject: z.ZodString;
|
|
15
53
|
text: z.ZodString;
|
|
@@ -1,22 +1,84 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { CredentialsError } from "../../lib/errors.js";
|
|
3
|
-
import { getEmailService } from "../../services/email-service.js";
|
|
3
|
+
import { EmailService, getEmailService, } from "../../services/email-service.js";
|
|
4
4
|
const sendEmailParams = z.object({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
// ── Inline credentials (all optional — omit to use env var config) ──────
|
|
6
|
+
mailer: z
|
|
7
|
+
.enum(["smtp", "sendgrid", "mailgun"])
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Mail driver. Required when not configured via env vars (MAIL_MAILER)."),
|
|
10
|
+
fromAddress: z
|
|
11
|
+
.string()
|
|
12
|
+
.email()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Sender email address. Required when passing inline credentials."),
|
|
15
|
+
fromName: z.string().optional().describe("Sender display name."),
|
|
16
|
+
// SMTP
|
|
17
|
+
smtpHost: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("SMTP server hostname. Required when mailer=smtp."),
|
|
21
|
+
smtpPort: z
|
|
22
|
+
.number()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("SMTP port (default 587). Used when mailer=smtp."),
|
|
25
|
+
smtpUsername: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("SMTP auth username. Required when mailer=smtp."),
|
|
29
|
+
smtpPassword: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("SMTP auth password. Required when mailer=smtp."),
|
|
33
|
+
smtpEncryption: z
|
|
34
|
+
.enum(["tls", "ssl", "none"])
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("SMTP encryption (default tls). Used when mailer=smtp."),
|
|
37
|
+
// SendGrid
|
|
38
|
+
sendgridApiKey: z
|
|
39
|
+
.string()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("SendGrid API key. Required when mailer=sendgrid."),
|
|
42
|
+
// Mailgun
|
|
43
|
+
mailgunApiKey: z
|
|
44
|
+
.string()
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Mailgun API key. Required when mailer=mailgun."),
|
|
47
|
+
mailgunDomain: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Mailgun sending domain. Required when mailer=mailgun."),
|
|
51
|
+
// ── Message ──────────────────────────────────────────────────────────────
|
|
52
|
+
to: z.string().email().describe("Recipient email address."),
|
|
53
|
+
subject: z.string().min(1).describe("Email subject line."),
|
|
54
|
+
text: z.string().min(1).describe("Plain-text body of the email."),
|
|
8
55
|
html: z
|
|
9
56
|
.string()
|
|
10
57
|
.optional()
|
|
11
|
-
.describe("Optional HTML body
|
|
58
|
+
.describe("Optional HTML body. Falls back to text if omitted."),
|
|
12
59
|
});
|
|
13
60
|
export const sendEmailTool = {
|
|
14
61
|
name: "EMAIL_SEND",
|
|
15
|
-
description: "Send a single email
|
|
62
|
+
description: "Send a single email. Credentials can be passed inline per call (for per-org or per-user accounts) or omitted to use the server's env var configuration.",
|
|
16
63
|
parameters: sendEmailParams,
|
|
17
64
|
execute: async (params) => {
|
|
18
65
|
try {
|
|
19
|
-
|
|
66
|
+
const service = params.mailer && params.fromAddress
|
|
67
|
+
? new EmailService({
|
|
68
|
+
mailer: params.mailer,
|
|
69
|
+
fromAddress: params.fromAddress,
|
|
70
|
+
fromName: params.fromName,
|
|
71
|
+
smtpHost: params.smtpHost,
|
|
72
|
+
smtpPort: params.smtpPort,
|
|
73
|
+
smtpUsername: params.smtpUsername,
|
|
74
|
+
smtpPassword: params.smtpPassword,
|
|
75
|
+
smtpEncryption: params.smtpEncryption,
|
|
76
|
+
sendgridApiKey: params.sendgridApiKey,
|
|
77
|
+
mailgunApiKey: params.mailgunApiKey,
|
|
78
|
+
mailgunDomain: params.mailgunDomain,
|
|
79
|
+
})
|
|
80
|
+
: getEmailService();
|
|
81
|
+
await service.send(params.to, params.subject, params.text, params.html);
|
|
20
82
|
return `Email sent successfully to ${params.to}.`;
|
|
21
83
|
}
|
|
22
84
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"send-email.js","sourceRoot":"","sources":["../../../src/tools/email-tools/send-email.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "social-mcp",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "MCP server for posting and interacting across social media platforms: Twitter, Instagram, Facebook, WhatsApp, Discord, Telegram, Slack, LinkedIn, Reddit, Threads, TikTok, Pinterest, and Email (SMTP/SendGrid/Mailgun)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|