social-mcp 1.0.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.
Files changed (101) hide show
  1. package/README.md +165 -0
  2. package/dist/constants.d.ts +2 -0
  3. package/dist/constants.js +4 -0
  4. package/dist/constants.js.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +62 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/lib/config.d.ts +19 -0
  9. package/dist/lib/config.js +20 -0
  10. package/dist/lib/config.js.map +1 -0
  11. package/dist/lib/http.d.ts +7 -0
  12. package/dist/lib/http.js +27 -0
  13. package/dist/lib/http.js.map +1 -0
  14. package/dist/run_tools_discord.d.ts +19 -0
  15. package/dist/run_tools_discord.js +49 -0
  16. package/dist/run_tools_discord.js.map +1 -0
  17. package/dist/run_tools_facebook.d.ts +19 -0
  18. package/dist/run_tools_facebook.js +49 -0
  19. package/dist/run_tools_facebook.js.map +1 -0
  20. package/dist/run_tools_instagram.d.ts +20 -0
  21. package/dist/run_tools_instagram.js +54 -0
  22. package/dist/run_tools_instagram.js.map +1 -0
  23. package/dist/run_tools_slack.d.ts +19 -0
  24. package/dist/run_tools_slack.js +49 -0
  25. package/dist/run_tools_slack.js.map +1 -0
  26. package/dist/run_tools_telegram.d.ts +20 -0
  27. package/dist/run_tools_telegram.js +107 -0
  28. package/dist/run_tools_telegram.js.map +1 -0
  29. package/dist/run_tools_twitter.d.ts +23 -0
  30. package/dist/run_tools_twitter.js +74 -0
  31. package/dist/run_tools_twitter.js.map +1 -0
  32. package/dist/run_tools_whatsapp.d.ts +20 -0
  33. package/dist/run_tools_whatsapp.js +58 -0
  34. package/dist/run_tools_whatsapp.js.map +1 -0
  35. package/dist/services/discord-service.d.ts +10 -0
  36. package/dist/services/discord-service.js +24 -0
  37. package/dist/services/discord-service.js.map +1 -0
  38. package/dist/services/facebook-service.d.ts +8 -0
  39. package/dist/services/facebook-service.js +22 -0
  40. package/dist/services/facebook-service.js.map +1 -0
  41. package/dist/services/instagram-service.d.ts +7 -0
  42. package/dist/services/instagram-service.js +28 -0
  43. package/dist/services/instagram-service.js.map +1 -0
  44. package/dist/services/slack-service.d.ts +9 -0
  45. package/dist/services/slack-service.js +31 -0
  46. package/dist/services/slack-service.js.map +1 -0
  47. package/dist/services/telegram-service.d.ts +29 -0
  48. package/dist/services/telegram-service.js +80 -0
  49. package/dist/services/telegram-service.js.map +1 -0
  50. package/dist/services/twitter-service.d.ts +10 -0
  51. package/dist/services/twitter-service.js +58 -0
  52. package/dist/services/twitter-service.js.map +1 -0
  53. package/dist/services/whatsapp-service.d.ts +23 -0
  54. package/dist/services/whatsapp-service.js +72 -0
  55. package/dist/services/whatsapp-service.js.map +1 -0
  56. package/dist/tools/discord-tools/send-message.d.ts +16 -0
  57. package/dist/tools/discord-tools/send-message.js +35 -0
  58. package/dist/tools/discord-tools/send-message.js.map +1 -0
  59. package/dist/tools/facebook-tools/create-post.d.ts +16 -0
  60. package/dist/tools/facebook-tools/create-post.js +34 -0
  61. package/dist/tools/facebook-tools/create-post.js.map +1 -0
  62. package/dist/tools/instagram-tools/create-post.d.ts +18 -0
  63. package/dist/tools/instagram-tools/create-post.js +35 -0
  64. package/dist/tools/instagram-tools/create-post.js.map +1 -0
  65. package/dist/tools/slack-tools/send-message.d.ts +16 -0
  66. package/dist/tools/slack-tools/send-message.js +34 -0
  67. package/dist/tools/slack-tools/send-message.js.map +1 -0
  68. package/dist/tools/telegram-tools/forward-message.d.ts +20 -0
  69. package/dist/tools/telegram-tools/forward-message.js +44 -0
  70. package/dist/tools/telegram-tools/forward-message.js.map +1 -0
  71. package/dist/tools/telegram-tools/get-channel-info.d.ts +14 -0
  72. package/dist/tools/telegram-tools/get-channel-info.js +39 -0
  73. package/dist/tools/telegram-tools/get-channel-info.js.map +1 -0
  74. package/dist/tools/telegram-tools/get-channel-members.d.ts +16 -0
  75. package/dist/tools/telegram-tools/get-channel-members.js +56 -0
  76. package/dist/tools/telegram-tools/get-channel-members.js.map +1 -0
  77. package/dist/tools/telegram-tools/pin-message.d.ts +18 -0
  78. package/dist/tools/telegram-tools/pin-message.js +41 -0
  79. package/dist/tools/telegram-tools/pin-message.js.map +1 -0
  80. package/dist/tools/telegram-tools/send-message.d.ts +16 -0
  81. package/dist/tools/telegram-tools/send-message.js +38 -0
  82. package/dist/tools/telegram-tools/send-message.js.map +1 -0
  83. package/dist/tools/twitter-tools/get-user-info.d.ts +14 -0
  84. package/dist/tools/twitter-tools/get-user-info.js +38 -0
  85. package/dist/tools/twitter-tools/get-user-info.js.map +1 -0
  86. package/dist/tools/twitter-tools/search-tweets.d.ts +16 -0
  87. package/dist/tools/twitter-tools/search-tweets.js +51 -0
  88. package/dist/tools/twitter-tools/search-tweets.js.map +1 -0
  89. package/dist/tools/twitter-tools/send-tweet.d.ts +14 -0
  90. package/dist/tools/twitter-tools/send-tweet.js +33 -0
  91. package/dist/tools/twitter-tools/send-tweet.js.map +1 -0
  92. package/dist/tools/whatsapp-tools/get-messages.d.ts +14 -0
  93. package/dist/tools/whatsapp-tools/get-messages.js +54 -0
  94. package/dist/tools/whatsapp-tools/get-messages.js.map +1 -0
  95. package/dist/tools/whatsapp-tools/send-message.d.ts +16 -0
  96. package/dist/tools/whatsapp-tools/send-message.js +34 -0
  97. package/dist/tools/whatsapp-tools/send-message.js.map +1 -0
  98. package/dist/types.d.ts +4 -0
  99. package/dist/types.js +4 -0
  100. package/dist/types.js.map +1 -0
  101. package/package.json +74 -0
@@ -0,0 +1,41 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { TelegramService } from "../../services/telegram-service.js";
4
+ const pinMessageParams = z.object({
5
+ chatId: z
6
+ .union([z.string(), z.number()])
7
+ .describe("The chat ID or channel username"),
8
+ messageId: z.number().describe("ID of the message to pin"),
9
+ disableNotification: z.boolean().optional().describe("Pin message silently"),
10
+ });
11
+ export const pinMessageTool = {
12
+ name: "PIN_MESSAGE",
13
+ description: "Pin a message in a Telegram chat or channel",
14
+ parameters: pinMessageParams,
15
+ execute: async (params) => {
16
+ const telegramService = new TelegramService();
17
+ try {
18
+ const success = await telegramService.pinMessage(params.chatId, params.messageId);
19
+ if (success) {
20
+ return dedent `
21
+ Message pinned successfully!
22
+
23
+ Chat ID: ${params.chatId}
24
+ Message ID: ${params.messageId}
25
+ Silent: ${params.disableNotification ? "Yes" : "No"}
26
+ `;
27
+ }
28
+ return "Failed to pin message";
29
+ }
30
+ catch (error) {
31
+ if (error instanceof Error) {
32
+ if (error.message.includes("BOT_TOKEN")) {
33
+ return "Error: Telegram bot token is not configured. Please set the TELEGRAM_BOT_TOKEN environment variable.";
34
+ }
35
+ return `Error pinning message: ${error.message}`;
36
+ }
37
+ return "An unknown error occurred while pinning the message";
38
+ }
39
+ },
40
+ };
41
+ //# sourceMappingURL=pin-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pin-message.js","sourceRoot":"","sources":["../../../src/tools/telegram-tools/pin-message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,CAAC,iCAAiC,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC1D,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;CAC5E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,6CAA6C;IAC1D,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,KAAK,EAAE,MAAwB,EAAE,EAAE;QAC3C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,UAAU,CAC/C,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,SAAS,CAChB,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACb,OAAO,MAAM,CAAA;;;gBAGD,MAAM,CAAC,MAAM;mBACV,MAAM,CAAC,SAAS;eACpB,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KACnD,CAAC;YACH,CAAC;YACD,OAAO,uBAAuB,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACzC,OAAO,sGAAsG,CAAC;gBAC/G,CAAC;gBACD,OAAO,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC;YACD,OAAO,qDAAqD,CAAC;QAC9D,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ declare const sendMessageParams: z.ZodObject<{
3
+ chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
4
+ text: z.ZodString;
5
+ }, z.core.$strip>;
6
+ type SendMessageParams = z.infer<typeof sendMessageParams>;
7
+ export declare const sendMessageTool: {
8
+ readonly name: "SEND_MESSAGE";
9
+ readonly description: "Send a message to a Telegram chat or channel";
10
+ readonly parameters: z.ZodObject<{
11
+ chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
12
+ text: z.ZodString;
13
+ }, z.core.$strip>;
14
+ readonly execute: (params: SendMessageParams) => Promise<string>;
15
+ };
16
+ export {};
@@ -0,0 +1,38 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { TelegramService } from "../../services/telegram-service.js";
4
+ const sendMessageParams = z.object({
5
+ chatId: z
6
+ .union([z.string(), z.number()])
7
+ .describe("The chat ID or channel username (e.g., @channelname or -1001234567890)"),
8
+ text: z.string().min(1).describe("The message text to send"),
9
+ });
10
+ export const sendMessageTool = {
11
+ name: "SEND_MESSAGE",
12
+ description: "Send a message to a Telegram chat or channel",
13
+ parameters: sendMessageParams,
14
+ execute: async (params) => {
15
+ const telegramService = new TelegramService();
16
+ try {
17
+ const messageInfo = await telegramService.sendMessage(params.chatId, params.text);
18
+ return dedent `
19
+ Message sent successfully!
20
+
21
+ Message ID: ${messageInfo.messageId}
22
+ Chat ID: ${messageInfo.chatId}
23
+ Sent at: ${new Date(messageInfo.date * 1000).toISOString()}
24
+ Text: ${messageInfo.text || "N/A"}
25
+ `;
26
+ }
27
+ catch (error) {
28
+ if (error instanceof Error) {
29
+ if (error.message.includes("BOT_TOKEN")) {
30
+ return "Error: Telegram bot token is not configured. Please set the TELEGRAM_BOT_TOKEN environment variable.";
31
+ }
32
+ return `Error sending message: ${error.message}`;
33
+ }
34
+ return "An unknown error occurred while sending the message";
35
+ }
36
+ },
37
+ };
38
+ //# sourceMappingURL=send-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/telegram-tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC/B,QAAQ,CACR,wEAAwE,CACxE;IACF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC5D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC9B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,8CAA8C;IAC3D,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC5C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,WAAW,CACpD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,IAAI,CACX,CAAC;YAEF,OAAO,MAAM,CAAA;;;kBAGE,WAAW,CAAC,SAAS;eACxB,WAAW,CAAC,MAAM;eAClB,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YAClD,WAAW,CAAC,IAAI,IAAI,KAAK;IACjC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACzC,OAAO,sGAAsG,CAAC;gBAC/G,CAAC;gBACD,OAAO,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;YAClD,CAAC;YACD,OAAO,qDAAqD,CAAC;QAC9D,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ declare const getUserInfoParams: z.ZodObject<{
3
+ username: z.ZodString;
4
+ }, z.core.$strip>;
5
+ type GetUserInfoParams = z.infer<typeof getUserInfoParams>;
6
+ export declare const getUserInfoTool: {
7
+ readonly name: "GET_USER_INFO";
8
+ readonly description: "Gets information about a Twitter user";
9
+ readonly parameters: z.ZodObject<{
10
+ username: z.ZodString;
11
+ }, z.core.$strip>;
12
+ readonly execute: (params: GetUserInfoParams) => Promise<string>;
13
+ };
14
+ export {};
@@ -0,0 +1,38 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { TwitterService } from "../../services/twitter-service.js";
4
+ const getUserInfoParams = z.object({
5
+ username: z.string().min(1).describe("The Twitter username to get information for"),
6
+ });
7
+ export const getUserInfoTool = {
8
+ name: "GET_USER_INFO",
9
+ description: "Gets information about a Twitter user",
10
+ parameters: getUserInfoParams,
11
+ execute: async (params) => {
12
+ const twitterService = new TwitterService();
13
+ try {
14
+ const user = await twitterService.getUserInfo(params.username);
15
+ return dedent `
16
+ User information retrieved successfully!
17
+
18
+ ID: ${user.id}
19
+ Name: ${user.name}
20
+ Username: ${user.username}
21
+ Description: ${user.description}
22
+ Followers: ${user.public_metrics?.followers_count}
23
+ Following: ${user.public_metrics?.following_count}
24
+ Tweets: ${user.public_metrics?.tweet_count}
25
+ `;
26
+ }
27
+ catch (error) {
28
+ if (error instanceof Error) {
29
+ if (error.message.includes("Twitter API credentials")) {
30
+ return "Error: Twitter API credentials are not configured. Please set the TWITTER_APP_KEY, TWITTER_APP_SECRET, TWITTER_ACCESS_TOKEN, and TWITTER_ACCESS_SECRET environment variables.";
31
+ }
32
+ return `Error getting user info: ${error.message}`;
33
+ }
34
+ return "An unknown error occurred while getting user info";
35
+ }
36
+ },
37
+ };
38
+ //# sourceMappingURL=get-user-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-user-info.js","sourceRoot":"","sources":["../../../src/tools/twitter-tools/get-user-info.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACpF,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,uCAAuC;IACpD,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC3C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE/D,OAAO,MAAM,CAAA;;;cAGL,IAAI,CAAC,EAAE;gBACL,IAAI,CAAC,IAAI;oBACL,IAAI,CAAC,QAAQ;uBACV,IAAI,CAAC,WAAW;qBAClB,IAAI,CAAC,cAAc,EAAE,eAAe;qBACpC,IAAI,CAAC,cAAc,EAAE,eAAe;kBACvC,IAAI,CAAC,cAAc,EAAE,WAAW;OAC3C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBACtD,OAAO,+KAA+K,CAAC;gBACzL,CAAC;gBACD,OAAO,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC;YACrD,CAAC;YACD,OAAO,mDAAmD,CAAC;QAC7D,CAAC;IACH,CAAC;CACO,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ declare const searchTweetsParams: z.ZodObject<{
3
+ query: z.ZodString;
4
+ maxResults: z.ZodDefault<z.ZodNumber>;
5
+ }, z.core.$strip>;
6
+ type SearchTweetsParams = z.infer<typeof searchTweetsParams>;
7
+ export declare const searchTweetsTool: {
8
+ readonly name: "SEARCH_TWEETS";
9
+ readonly description: "Searches for recent tweets matching a query";
10
+ readonly parameters: z.ZodObject<{
11
+ query: z.ZodString;
12
+ maxResults: z.ZodDefault<z.ZodNumber>;
13
+ }, z.core.$strip>;
14
+ readonly execute: (params: SearchTweetsParams) => Promise<string>;
15
+ };
16
+ export {};
@@ -0,0 +1,51 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { TwitterService } from "../../services/twitter-service.js";
4
+ const searchTweetsParams = z.object({
5
+ query: z.string().min(1).describe("The search query to use"),
6
+ maxResults: z
7
+ .number()
8
+ .int()
9
+ .min(10)
10
+ .max(100)
11
+ .default(10)
12
+ .describe("Maximum number of tweets to return (10-100)"),
13
+ });
14
+ export const searchTweetsTool = {
15
+ name: "SEARCH_TWEETS",
16
+ description: "Searches for recent tweets matching a query",
17
+ parameters: searchTweetsParams,
18
+ execute: async (params) => {
19
+ const twitterService = new TwitterService();
20
+ try {
21
+ const paginator = await twitterService.searchTweets(params.query, params.maxResults);
22
+ // .tweets returns TweetV2[], .meta returns the search metadata
23
+ const tweets = paginator.tweets;
24
+ const meta = paginator.meta;
25
+ if (!tweets || tweets.length === 0) {
26
+ return "No tweets found for the given query.";
27
+ }
28
+ const tweetList = tweets
29
+ .map((tweet) => dedent `
30
+ Tweet ID: ${tweet.id}
31
+ Text: ${tweet.text}
32
+ `)
33
+ .join("\n\n");
34
+ return dedent `
35
+ Tweets retrieved successfully! (${meta?.result_count ?? tweets.length} results)
36
+
37
+ ${tweetList}
38
+ `;
39
+ }
40
+ catch (error) {
41
+ if (error instanceof Error) {
42
+ if (error.message.includes("Twitter API credentials")) {
43
+ return "Error: Twitter API credentials are not configured. Please set the TWITTER_APP_KEY, TWITTER_APP_SECRET, TWITTER_ACCESS_TOKEN, and TWITTER_ACCESS_SECRET environment variables.";
44
+ }
45
+ return `Error searching tweets: ${error.message}`;
46
+ }
47
+ return "An unknown error occurred while searching tweets";
48
+ }
49
+ },
50
+ };
51
+ //# sourceMappingURL=search-tweets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tweets.js","sourceRoot":"","sources":["../../../src/tools/twitter-tools/search-tweets.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC5D,UAAU,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,EAAE,CAAC;SACP,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,EAAE,CAAC;SACX,QAAQ,CAAC,6CAA6C,CAAC;CACzD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC/B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,6CAA6C;IAC1D,UAAU,EAAE,kBAAkB;IAC9B,OAAO,EAAE,KAAK,EAAE,MAA0B,EAAE,EAAE;QAC7C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAE5C,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,CAClD,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,UAAU,CACjB,CAAC;YAEF,+DAA+D;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAE5B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,OAAO,sCAAsC,CAAC;YAC/C,CAAC;YAED,MAAM,SAAS,GAAG,MAAM;iBACtB,GAAG,CACH,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAA;gBACN,KAAK,CAAC,EAAE;YACZ,KAAK,CAAC,IAAI;IAClB,CACC;iBACA,IAAI,CAAC,MAAM,CAAC,CAAC;YAEf,OAAO,MAAM,CAAA;sCACsB,IAAI,EAAE,YAAY,IAAI,MAAM,CAAC,MAAM;;MAEnE,SAAS;IACX,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBACvD,OAAO,+KAA+K,CAAC;gBACxL,CAAC;gBACD,OAAO,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC;YACnD,CAAC;YACD,OAAO,kDAAkD,CAAC;QAC3D,CAAC;IACF,CAAC;CACQ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ declare const sendTweetParams: z.ZodObject<{
3
+ text: z.ZodString;
4
+ }, z.core.$strip>;
5
+ type SendTweetParams = z.infer<typeof sendTweetParams>;
6
+ export declare const sendTweetTool: {
7
+ readonly name: "SEND_TWEET";
8
+ readonly description: "Sends a tweet";
9
+ readonly parameters: z.ZodObject<{
10
+ text: z.ZodString;
11
+ }, z.core.$strip>;
12
+ readonly execute: (params: SendTweetParams) => Promise<string>;
13
+ };
14
+ export {};
@@ -0,0 +1,33 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { TwitterService } from "../../services/twitter-service.js";
4
+ const sendTweetParams = z.object({
5
+ text: z.string().min(1).max(280).describe("The text of the tweet to send"),
6
+ });
7
+ export const sendTweetTool = {
8
+ name: "SEND_TWEET",
9
+ description: "Sends a tweet",
10
+ parameters: sendTweetParams,
11
+ execute: async (params) => {
12
+ const twitterService = new TwitterService();
13
+ try {
14
+ const tweet = await twitterService.sendTweet(params.text);
15
+ return dedent `
16
+ Tweet sent successfully!
17
+
18
+ Tweet ID: ${tweet.id}
19
+ Text: ${tweet.text}
20
+ `;
21
+ }
22
+ catch (error) {
23
+ if (error instanceof Error) {
24
+ if (error.message.includes("Twitter API credentials")) {
25
+ return "Error: Twitter API credentials are not configured. Please set the TWITTER_APP_KEY, TWITTER_APP_SECRET, TWITTER_ACCESS_TOKEN, and TWITTER_ACCESS_SECRET environment variables.";
26
+ }
27
+ return `Error sending tweet: ${error.message}`;
28
+ }
29
+ return "An unknown error occurred while sending the tweet";
30
+ }
31
+ },
32
+ };
33
+ //# sourceMappingURL=send-tweet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-tweet.js","sourceRoot":"","sources":["../../../src/tools/twitter-tools/send-tweet.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC3E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,eAAe;IAC3B,OAAO,EAAE,KAAK,EAAE,MAAuB,EAAE,EAAE;QACzC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1D,OAAO,MAAM,CAAA;;;oBAGC,KAAK,CAAC,EAAE;gBACZ,KAAK,CAAC,IAAI;OACnB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;oBACtD,OAAO,+KAA+K,CAAC;gBACzL,CAAC;gBACD,OAAO,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAAC;YACjD,CAAC;YACD,OAAO,mDAAmD,CAAC;QAC7D,CAAC;IACH,CAAC;CACO,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from "zod";
2
+ declare const getMessagesParams: z.ZodObject<{
3
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
4
+ }, z.core.$strip>;
5
+ type GetMessagesParams = z.infer<typeof getMessagesParams>;
6
+ export declare const getMessagesTool: {
7
+ readonly name: "GET_WHATSAPP_MESSAGES";
8
+ readonly description: "Retrieve recent WhatsApp messages";
9
+ readonly parameters: z.ZodObject<{
10
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
11
+ }, z.core.$strip>;
12
+ readonly execute: (params: GetMessagesParams) => Promise<string>;
13
+ };
14
+ export {};
@@ -0,0 +1,54 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { WhatsappService } from "../../services/whatsapp-service.js";
4
+ // Define a schema for a single WhatsApp message
5
+ const whatsappMessageDetailSchema = z.object({
6
+ id: z.string().describe("The unique ID of the message"),
7
+ from: z.string().describe("The sender's phone number"),
8
+ text: z.object({ body: z.string() }).optional().describe("The message text content"),
9
+ // Add other relevant fields if available from the API, e.g., timestamp, type, etc.
10
+ });
11
+ // Define a schema for the list of messages
12
+ const getMessagesResponseSchema = z.object({
13
+ data: z.array(whatsappMessageDetailSchema),
14
+ });
15
+ const getMessagesParams = z.object({
16
+ limit: z.number().optional().default(10).describe("Maximum number of messages to retrieve"),
17
+ });
18
+ export const getMessagesTool = {
19
+ name: "GET_WHATSAPP_MESSAGES",
20
+ description: "Retrieve recent WhatsApp messages",
21
+ parameters: getMessagesParams,
22
+ execute: async (params) => {
23
+ const whatsappService = new WhatsappService();
24
+ try {
25
+ // Assuming WhatsappService has a method like getMessages that takes a limit.
26
+ // The actual implementation might differ based on WhatsApp API capabilities.
27
+ const messages = await whatsappService.getMessages(params.limit);
28
+ if (!messages || messages.data.length === 0) {
29
+ return "No recent WhatsApp messages found.";
30
+ }
31
+ const messageList = messages.data.map((message, index) => dedent `
32
+ ${index + 1}. Message ID: ${message.id}
33
+ From: ${message.from}
34
+ Text: ${message.text?.body || "N/A"}
35
+ `).join("\n\n");
36
+ return dedent `
37
+ Recent WhatsApp Messages (retrieved ${messages.data.length}):
38
+
39
+ ${messageList}
40
+ `;
41
+ }
42
+ catch (error) {
43
+ if (error instanceof Error) {
44
+ if (error.message.includes("WHATSAPP_ACCESS_TOKEN")) {
45
+ return "Error: WhatsApp access token is not configured. Please set the WHATSAPP_ACCESS_TOKEN environment variable.";
46
+ }
47
+ // Handle potential errors from the getMessages method itself
48
+ return `Error retrieving WhatsApp messages: ${error.message}`;
49
+ }
50
+ return "An unknown error occurred while retrieving WhatsApp messages";
51
+ }
52
+ },
53
+ };
54
+ //# sourceMappingURL=get-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-messages.js","sourceRoot":"","sources":["../../../src/tools/whatsapp-tools/get-messages.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,gDAAgD;AAChD,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACpF,mFAAmF;CACpF,CAAC,CAAC;AAEH,2CAA2C;AAC3C,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,2BAA2B,CAAC;CAC3C,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC5F,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,mCAAmC;IAChD,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC3C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,IAAI,CAAC;YACH,6EAA6E;YAC7E,6EAA6E;YAC7E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEjE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5C,OAAO,oCAAoC,CAAC;YAC9C,CAAC;YAED,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAoD,EAAE,KAAa,EAAE,EAAE,CAAC,MAAM,CAAA;UACjH,KAAK,GAAG,CAAC,iBAAiB,OAAO,CAAC,EAAE;mBAC3B,OAAO,CAAC,IAAI;mBACZ,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK;OACvC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhB,OAAO,MAAM,CAAA;8CAC2B,QAAQ,CAAC,IAAI,CAAC,MAAM;;UAExD,WAAW;OACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACpD,OAAO,4GAA4G,CAAC;gBACtH,CAAC;gBACD,6DAA6D;gBAC7D,OAAO,uCAAuC,KAAK,CAAC,OAAO,EAAE,CAAC;YAChE,CAAC;YACD,OAAO,8DAA8D,CAAC;QACxE,CAAC;IACH,CAAC;CACO,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ declare const sendMessageParams: z.ZodObject<{
3
+ to: z.ZodString;
4
+ text: z.ZodString;
5
+ }, z.core.$strip>;
6
+ type SendMessageParams = z.infer<typeof sendMessageParams>;
7
+ export declare const sendMessageTool: {
8
+ readonly name: "SEND_WHATSAPP_MESSAGE";
9
+ readonly description: "Send a message to a WhatsApp user";
10
+ readonly parameters: z.ZodObject<{
11
+ to: z.ZodString;
12
+ text: z.ZodString;
13
+ }, z.core.$strip>;
14
+ readonly execute: (params: SendMessageParams) => Promise<string>;
15
+ };
16
+ export {};
@@ -0,0 +1,34 @@
1
+ import dedent from "dedent";
2
+ import { z } from "zod";
3
+ import { WhatsappService } from "../../services/whatsapp-service.js";
4
+ const sendMessageParams = z.object({
5
+ to: z.string().describe("The recipient's phone number"),
6
+ text: z.string().min(1).describe("The message text to send"),
7
+ });
8
+ export const sendMessageTool = {
9
+ name: "SEND_WHATSAPP_MESSAGE",
10
+ description: "Send a message to a WhatsApp user",
11
+ parameters: sendMessageParams,
12
+ execute: async (params) => {
13
+ const whatsappService = new WhatsappService();
14
+ try {
15
+ const message = await whatsappService.sendMessage(params.to, params.text);
16
+ return dedent `
17
+ Message sent successfully via WhatsApp!
18
+
19
+ Message ID: ${message.messages[0].id}
20
+ Recipient: ${message.contacts[0].input}
21
+ `;
22
+ }
23
+ catch (error) {
24
+ if (error instanceof Error) {
25
+ if (error.message.includes("WHATSAPP_ACCESS_TOKEN")) {
26
+ return "Error: WhatsApp access token is not configured. Please set the WHATSAPP_ACCESS_TOKEN environment variable.";
27
+ }
28
+ return `Error sending message: ${error.message}`;
29
+ }
30
+ return "An unknown error occurred while sending the message";
31
+ }
32
+ },
33
+ };
34
+ //# sourceMappingURL=send-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-message.js","sourceRoot":"","sources":["../../../src/tools/whatsapp-tools/send-message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC7D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,mCAAmC;IAChD,UAAU,EAAE,iBAAiB;IAC7B,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,EAAE;QAC3C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE9C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1E,OAAO,MAAM,CAAA;;;sBAGG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;qBACvB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK;OACvC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBACpD,OAAO,4GAA4G,CAAC;gBACtH,CAAC;gBACD,OAAO,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;YACnD,CAAC;YACD,OAAO,qDAAqD,CAAC;QAC/D,CAAC;IACH,CAAC;CACO,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface UserContext {
2
+ userId?: string;
3
+ sessionId?: string;
4
+ }
package/dist/types.js ADDED
@@ -0,0 +1,4 @@
1
+ // src/types.ts
2
+ export {};
3
+ // Add more shared types for your tools, services, and libraries
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,eAAe;;AAQf,gEAAgE"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "social-mcp",
3
+ "version": "1.0.1",
4
+ "description": "MCP server for posting and interacting across social media platforms: Twitter, Instagram, Facebook, WhatsApp, Discord, Telegram, and Slack",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "social-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "exports": {
17
+ ".": {
18
+ "import": "./dist/index.js"
19
+ }
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/nxGnosis/social-mcp.git"
24
+ },
25
+ "bugs": {
26
+ "url": "https://github.com/nxGnosis/social-mcp/issues"
27
+ },
28
+ "homepage": "https://github.com/nxGnosis/social-mcp#readme",
29
+ "keywords": [
30
+ "mcp",
31
+ "model-context-protocol",
32
+ "social-media",
33
+ "twitter",
34
+ "instagram",
35
+ "facebook",
36
+ "whatsapp",
37
+ "discord",
38
+ "telegram",
39
+ "slack",
40
+ "ai",
41
+ "llm",
42
+ "automation"
43
+ ],
44
+ "author": "Lanre Sanni",
45
+ "license": "ISC",
46
+ "dependencies": {
47
+ "@slack/web-api": "^7.14.1",
48
+ "dedent": "^1.7.1",
49
+ "dotenv": "^17.3.1",
50
+ "fastmcp": "^3.33.0",
51
+ "telegraf": "^4.16.3",
52
+ "twitter-api-v2": "^1.29.0",
53
+ "zod": "^4.3.6"
54
+ },
55
+ "devDependencies": {
56
+ "@biomejs/biome": "*",
57
+ "@changesets/cli": "^2.29.8",
58
+ "@types/node": "^22.15.19",
59
+ "husky": "^9.1.7",
60
+ "lint-staged": "^15.5.2",
61
+ "shx": "^0.3.4",
62
+ "typescript": "^5.8.3",
63
+ "ts-node": "^10.9.2"
64
+ },
65
+ "scripts": {
66
+ "test": "echo \"Error: no test specified\" && exit 1",
67
+ "build": "tsc && shx chmod +x dist/index.js",
68
+ "watch": "tsc --watch",
69
+ "start": "node dist/index.js",
70
+ "release": "pnpm run build && changeset publish",
71
+ "format": "biome format . --write",
72
+ "lint": "biome check ."
73
+ }
74
+ }