@muhammadhamidraza/social-media-mcp-server 1.7.0 → 1.8.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/LICENSE +20 -20
- package/README.md +13 -13
- package/dist/config.d.ts +0 -20
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -15
- package/dist/config.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +36 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +31 -0
- package/dist/server.js.map +1 -0
- package/package.json +49 -49
- package/dist/platforms/browser.d.ts +0 -17
- package/dist/platforms/browser.d.ts.map +0 -1
- package/dist/platforms/browser.js +0 -280
- package/dist/platforms/browser.js.map +0 -1
- package/dist/platforms/linkedin-old.d.ts +0 -59
- package/dist/platforms/linkedin-old.d.ts.map +0 -1
- package/dist/platforms/linkedin-old.js +0 -1257
- package/dist/platforms/linkedin-old.js.map +0 -1
- package/dist/platforms/linkedin_backup.d.ts +0 -108
- package/dist/platforms/linkedin_backup.d.ts.map +0 -1
- package/dist/platforms/linkedin_backup.js +0 -5195
- package/dist/platforms/linkedin_backup.js.map +0 -1
- package/dist/platforms/linkedin_new.d.ts +0 -108
- package/dist/platforms/linkedin_new.d.ts.map +0 -1
- package/dist/platforms/linkedin_new.js +0 -5204
- package/dist/platforms/linkedin_new.js.map +0 -1
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 Social Media MCP Server
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Social Media MCP Server
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://nodejs.org/)
|
|
6
6
|
|
|
7
|
-
A universal MCP (Model Context Protocol) server that provides seamless API access to 6 major social media platforms: YouTube, LinkedIn, Facebook, Instagram, TikTok, and Twitter/X. This server dynamically exposes
|
|
7
|
+
A universal MCP (Model Context Protocol) server that provides seamless API access to 6 major social media platforms: YouTube, LinkedIn, Facebook, Instagram, TikTok, and Twitter/X. This server dynamically exposes 649 tools based on the API keys you provide, enabling Claude and other MCP clients to interact with social media platforms programmatically.
|
|
8
8
|
|
|
9
9
|
## 🚀 Features
|
|
10
10
|
|
|
11
11
|
- **🔌 Dynamic Tool Registration**: Only exposes tools for platforms with configured API keys
|
|
12
|
-
- **📊 Comprehensive API Coverage**:
|
|
12
|
+
- **📊 Comprehensive API Coverage**: 649 tools across 6 platforms with 100% API coverage
|
|
13
13
|
- **🔒 Security-First Design**: API keys never stored or logged, only held in memory
|
|
14
14
|
- **⚡ Zero Installation**: Run via `npx` without any installation required
|
|
15
15
|
- **🎯 MCP Compliant**: Works seamlessly with Claude Desktop, Claude Code, and other MCP clients
|
|
@@ -44,7 +44,7 @@ npm install -g @muhammadhamidraza/social-media-mcp-server
|
|
|
44
44
|
| **TikTok** | ✅ Implemented | 102 | Access Token | Open API v2 |
|
|
45
45
|
| **Twitter/X** | ✅ Implemented | 99 | Bearer Token | API v2 |
|
|
46
46
|
|
|
47
|
-
**Total**:
|
|
47
|
+
**Total**: 649 tools across all platforms (100% API coverage)
|
|
48
48
|
|
|
49
49
|
## 🔑 Getting API Keys
|
|
50
50
|
|
|
@@ -1281,16 +1281,6 @@ MIT License - see [LICENSE](LICENSE) file for details.
|
|
|
1281
1281
|
- ✅ **Twitter/X**: 99 tools (confirmed via code audit)
|
|
1282
1282
|
- ✅ **Total Current**: 549 tools across all platforms (100% API coverage)
|
|
1283
1283
|
|
|
1284
|
-
### v1.0.5 (2026-02-20)
|
|
1285
|
-
|
|
1286
|
-
- ✅ **LinkedIn OAuth 2.0 Implementation**: Full OAuth support with refresh token
|
|
1287
|
-
- ✅ **Automatic Token Refresh**: LinkedIn tokens auto-renew every 60 days
|
|
1288
|
-
- ✅ **One-Time Setup**: Refresh token valid for 1 year (no manual renewal)
|
|
1289
|
-
- ✅ **Consistent OAuth Experience**: Same pattern as YouTube OAuth
|
|
1290
|
-
- ✅ **Documentation**: Complete LinkedIn OAuth setup guide (LINKEDIN_OAUTH_SETUP.md)
|
|
1291
|
-
- ✅ **Environment Variables**: Added LINKEDIN_REFRESH_TOKEN support
|
|
1292
|
-
- ✅ **Better UX**: No more manual token renewal every 60 days
|
|
1293
|
-
|
|
1294
1284
|
### v1.0.4 (2026-02-18)
|
|
1295
1285
|
|
|
1296
1286
|
- ✅ **YouTube OAuth 2.0 Implementation**: Full OAuth support with refresh token
|
|
@@ -1309,6 +1299,16 @@ MIT License - see [LICENSE](LICENSE) file for details.
|
|
|
1309
1299
|
- ✅ **Documentation**: Complete YouTube setup guide with OAuth 2.0 instructions
|
|
1310
1300
|
- ✅ **Total Tools**: 241 → 253 tools (+5% expansion)
|
|
1311
1301
|
|
|
1302
|
+
### v1.0.5 (2026-02-20)
|
|
1303
|
+
|
|
1304
|
+
- ✅ **LinkedIn OAuth 2.0 Implementation**: Full OAuth support with refresh token
|
|
1305
|
+
- ✅ **Automatic Token Refresh**: LinkedIn tokens auto-renew every 60 days
|
|
1306
|
+
- ✅ **One-Time Setup**: Refresh token valid for 1 year (no manual renewal)
|
|
1307
|
+
- ✅ **Consistent OAuth Experience**: Same pattern as YouTube OAuth
|
|
1308
|
+
- ✅ **Documentation**: Complete LinkedIn OAuth setup guide (LINKEDIN_OAUTH_SETUP.md)
|
|
1309
|
+
- ✅ **Environment Variables**: Added LINKEDIN_REFRESH_TOKEN support
|
|
1310
|
+
- ✅ **Better UX**: No more manual token renewal every 60 days
|
|
1311
|
+
|
|
1312
1312
|
### v1.0.3 (2026-02-17)
|
|
1313
1313
|
|
|
1314
1314
|
- ✅ **100% API Coverage Expansion**: Added 106 new tools across all platforms
|
package/dist/config.d.ts
CHANGED
|
@@ -2,32 +2,20 @@ import { z } from "zod";
|
|
|
2
2
|
export declare const ConfigSchema: z.ZodObject<{
|
|
3
3
|
youtube: z.ZodOptional<z.ZodObject<{
|
|
4
4
|
apiKey: z.ZodString;
|
|
5
|
-
refreshToken: z.ZodOptional<z.ZodString>;
|
|
6
|
-
clientId: z.ZodOptional<z.ZodString>;
|
|
7
|
-
clientSecret: z.ZodOptional<z.ZodString>;
|
|
8
5
|
}, "strip", z.ZodTypeAny, {
|
|
9
6
|
apiKey: string;
|
|
10
|
-
refreshToken?: string | undefined;
|
|
11
|
-
clientId?: string | undefined;
|
|
12
|
-
clientSecret?: string | undefined;
|
|
13
7
|
}, {
|
|
14
8
|
apiKey: string;
|
|
15
|
-
refreshToken?: string | undefined;
|
|
16
|
-
clientId?: string | undefined;
|
|
17
|
-
clientSecret?: string | undefined;
|
|
18
9
|
}>>;
|
|
19
10
|
linkedin: z.ZodOptional<z.ZodObject<{
|
|
20
11
|
clientId: z.ZodString;
|
|
21
12
|
clientSecret: z.ZodString;
|
|
22
|
-
accessToken: z.ZodOptional<z.ZodString>;
|
|
23
13
|
}, "strip", z.ZodTypeAny, {
|
|
24
14
|
clientId: string;
|
|
25
15
|
clientSecret: string;
|
|
26
|
-
accessToken?: string | undefined;
|
|
27
16
|
}, {
|
|
28
17
|
clientId: string;
|
|
29
18
|
clientSecret: string;
|
|
30
|
-
accessToken?: string | undefined;
|
|
31
19
|
}>>;
|
|
32
20
|
facebook: z.ZodOptional<z.ZodObject<{
|
|
33
21
|
accessToken: z.ZodString;
|
|
@@ -60,14 +48,10 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
60
48
|
}, "strip", z.ZodTypeAny, {
|
|
61
49
|
youtube?: {
|
|
62
50
|
apiKey: string;
|
|
63
|
-
refreshToken?: string | undefined;
|
|
64
|
-
clientId?: string | undefined;
|
|
65
|
-
clientSecret?: string | undefined;
|
|
66
51
|
} | undefined;
|
|
67
52
|
linkedin?: {
|
|
68
53
|
clientId: string;
|
|
69
54
|
clientSecret: string;
|
|
70
|
-
accessToken?: string | undefined;
|
|
71
55
|
} | undefined;
|
|
72
56
|
facebook?: {
|
|
73
57
|
accessToken: string;
|
|
@@ -84,14 +68,10 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
84
68
|
}, {
|
|
85
69
|
youtube?: {
|
|
86
70
|
apiKey: string;
|
|
87
|
-
refreshToken?: string | undefined;
|
|
88
|
-
clientId?: string | undefined;
|
|
89
|
-
clientSecret?: string | undefined;
|
|
90
71
|
} | undefined;
|
|
91
72
|
linkedin?: {
|
|
92
73
|
clientId: string;
|
|
93
74
|
clientSecret: string;
|
|
94
|
-
accessToken?: string | undefined;
|
|
95
75
|
} | undefined;
|
|
96
76
|
facebook?: {
|
|
97
77
|
accessToken: string;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA6BxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,wBAAgB,UAAU,IAAI,MAAM,CA4CnC;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAI5D"}
|
package/dist/config.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
const YouTubeConfigSchema = z.object({
|
|
3
3
|
apiKey: z.string().min(1),
|
|
4
|
-
refreshToken: z.string().optional(),
|
|
5
|
-
clientId: z.string().optional(),
|
|
6
|
-
clientSecret: z.string().optional(),
|
|
7
4
|
});
|
|
8
5
|
const LinkedInConfigSchema = z.object({
|
|
9
6
|
clientId: z.string().min(1),
|
|
10
7
|
clientSecret: z.string().min(1),
|
|
11
|
-
accessToken: z.string().optional(),
|
|
12
8
|
});
|
|
13
9
|
const FacebookConfigSchema = z.object({
|
|
14
10
|
accessToken: z.string().min(1),
|
|
@@ -33,25 +29,15 @@ export const ConfigSchema = z.object({
|
|
|
33
29
|
export function loadConfig() {
|
|
34
30
|
const config = {};
|
|
35
31
|
const youtubeKey = process.env.YOUTUBE_API_KEY;
|
|
36
|
-
const youtubeRefreshToken = process.env.YOUTUBE_REFRESH_TOKEN;
|
|
37
|
-
const youtubeClientId = process.env.YOUTUBE_CLIENT_ID;
|
|
38
|
-
const youtubeClientSecret = process.env.YOUTUBE_CLIENT_SECRET;
|
|
39
32
|
if (youtubeKey) {
|
|
40
|
-
config.youtube = {
|
|
41
|
-
apiKey: youtubeKey,
|
|
42
|
-
refreshToken: youtubeRefreshToken,
|
|
43
|
-
clientId: youtubeClientId,
|
|
44
|
-
clientSecret: youtubeClientSecret
|
|
45
|
-
};
|
|
33
|
+
config.youtube = { apiKey: youtubeKey };
|
|
46
34
|
}
|
|
47
35
|
const linkedinClientId = process.env.LINKEDIN_CLIENT_ID;
|
|
48
36
|
const linkedinClientSecret = process.env.LINKEDIN_CLIENT_SECRET;
|
|
49
|
-
const linkedinAccessToken = process.env.LINKEDIN_ACCESS_TOKEN;
|
|
50
37
|
if (linkedinClientId && linkedinClientSecret) {
|
|
51
38
|
config.linkedin = {
|
|
52
39
|
clientId: linkedinClientId,
|
|
53
40
|
clientSecret: linkedinClientSecret,
|
|
54
|
-
accessToken: linkedinAccessToken
|
|
55
41
|
};
|
|
56
42
|
}
|
|
57
43
|
const facebookToken = process.env.FACEBOOK_ACCESS_TOKEN;
|
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;AAGxB,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { Server
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
5
|
import { loadConfig } from "./config.js";
|
|
@@ -7,7 +7,7 @@ import { getAvailablePlatforms } from "./platforms/index.js";
|
|
|
7
7
|
async function main() {
|
|
8
8
|
const config = loadConfig();
|
|
9
9
|
const platforms = getAvailablePlatforms(config);
|
|
10
|
-
const server = new
|
|
10
|
+
const server = new Server({
|
|
11
11
|
name: "social-media-mcp-server",
|
|
12
12
|
version: "1.0.0",
|
|
13
13
|
}, {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,OAAO;KACjB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAGF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEpE,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QAC1D,OAAO;YACL,KAAK,EAAE,QAAQ;SAChB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAGjD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAClC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAC9C,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,0EAA0E,CAAC,CAAC;QAC3G,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC5D,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server";
|
|
2
|
+
export declare function initializeMcpServer(): Server<{
|
|
3
|
+
method: string;
|
|
4
|
+
params?: {
|
|
5
|
+
[x: string]: unknown;
|
|
6
|
+
_meta?: {
|
|
7
|
+
[x: string]: unknown;
|
|
8
|
+
progressToken?: string | number | undefined;
|
|
9
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
10
|
+
taskId: string;
|
|
11
|
+
} | undefined;
|
|
12
|
+
} | undefined;
|
|
13
|
+
} | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
method: string;
|
|
16
|
+
params?: {
|
|
17
|
+
[x: string]: unknown;
|
|
18
|
+
_meta?: {
|
|
19
|
+
[x: string]: unknown;
|
|
20
|
+
progressToken?: string | number | undefined;
|
|
21
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
22
|
+
taskId: string;
|
|
23
|
+
} | undefined;
|
|
24
|
+
} | undefined;
|
|
25
|
+
} | undefined;
|
|
26
|
+
}, {
|
|
27
|
+
[x: string]: unknown;
|
|
28
|
+
_meta?: {
|
|
29
|
+
[x: string]: unknown;
|
|
30
|
+
progressToken?: string | number | undefined;
|
|
31
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
32
|
+
taskId: string;
|
|
33
|
+
} | undefined;
|
|
34
|
+
} | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
//# 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,MAAM,EAAQ,MAAM,kCAAkC,CAAC;AAShE,wBAAgB,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqClC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server";
|
|
2
|
+
import { getAvailablePlatforms } from "./platforms/platforms";
|
|
3
|
+
import { loadConfig } from "./config";
|
|
4
|
+
const server = new Server({
|
|
5
|
+
name: "social-media-mcp-server",
|
|
6
|
+
version: "1.0.0",
|
|
7
|
+
});
|
|
8
|
+
export function initializeMcpServer() {
|
|
9
|
+
const config = loadConfig();
|
|
10
|
+
const availablePlatforms = getAvailablePlatforms(config);
|
|
11
|
+
server.setRequestHandler("tools/list", async () => {
|
|
12
|
+
const tools = [];
|
|
13
|
+
for (const platform of availablePlatforms) {
|
|
14
|
+
const platformTools = await platform.getTools();
|
|
15
|
+
tools.push(...platformTools);
|
|
16
|
+
}
|
|
17
|
+
return { tools };
|
|
18
|
+
});
|
|
19
|
+
server.setRequestHandler("tools/call", async (request) => {
|
|
20
|
+
const { name, arguments: args } = request;
|
|
21
|
+
const [platformName] = name.split('_', 1);
|
|
22
|
+
const platform = availablePlatforms.find(p => p.name === platformName);
|
|
23
|
+
if (!platform) {
|
|
24
|
+
throw new Error(`Platform ${platformName} not available or not configured`);
|
|
25
|
+
}
|
|
26
|
+
const result = await platform.executeAction(name, args);
|
|
27
|
+
return { content: result };
|
|
28
|
+
});
|
|
29
|
+
return server;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;IACxB,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB;IAEjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAGzD,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAW,EAAE,CAAC;QAEzB,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IAGH,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACvD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAG1C,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAEvE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,YAAY,YAAY,kCAAkC,CAAC,CAAC;QAC9E,CAAC;QAGD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@muhammadhamidraza/social-media-mcp-server",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Universal MCP server for social media platforms - YouTube, LinkedIn, Facebook, Instagram, TikTok, Twitter/X",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"social-media-mcp-server": "dist/index.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"dist/**/*"
|
|
11
|
-
],
|
|
12
|
-
"scripts": {
|
|
13
|
-
"build": "tsc",
|
|
14
|
-
"start": "node dist/index.js",
|
|
15
|
-
"dev": "tsx watch
|
|
16
|
-
"test": "jest",
|
|
17
|
-
"prepublishOnly": "npm run build"
|
|
18
|
-
},
|
|
19
|
-
"keywords": [
|
|
20
|
-
"mcp",
|
|
21
|
-
"social-media",
|
|
22
|
-
"api",
|
|
23
|
-
"youtube",
|
|
24
|
-
"linkedin",
|
|
25
|
-
"facebook",
|
|
26
|
-
"instagram",
|
|
27
|
-
"tiktok",
|
|
28
|
-
"twitter"
|
|
29
|
-
],
|
|
30
|
-
"author": "Social Media MCP Server",
|
|
31
|
-
"license": "MIT",
|
|
32
|
-
"dependencies": {
|
|
33
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
34
|
-
"node-fetch": "^3.3.2",
|
|
35
|
-
"@types/node-fetch": "^2.6.9",
|
|
36
|
-
"zod": "^3.22.4"
|
|
37
|
-
},
|
|
38
|
-
"devDependencies": {
|
|
39
|
-
"@types/node": "^20.10.0",
|
|
40
|
-
"tsx": "^4.7.0",
|
|
41
|
-
"typescript": "^5.3.2",
|
|
42
|
-
"jest": "^29.7.0",
|
|
43
|
-
"@types/jest": "^29.5.8"
|
|
44
|
-
},
|
|
45
|
-
"engines": {
|
|
46
|
-
"node": ">=18.0.0"
|
|
47
|
-
},
|
|
48
|
-
"type": "module"
|
|
49
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@muhammadhamidraza/social-media-mcp-server",
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"description": "Universal MCP server for social media platforms - YouTube, LinkedIn, Facebook, Instagram, TikTok, Twitter/X",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"social-media-mcp-server": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/**/*"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"dev": "tsx watch index.ts",
|
|
16
|
+
"test": "jest",
|
|
17
|
+
"prepublishOnly": "npm run build"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"mcp",
|
|
21
|
+
"social-media",
|
|
22
|
+
"api",
|
|
23
|
+
"youtube",
|
|
24
|
+
"linkedin",
|
|
25
|
+
"facebook",
|
|
26
|
+
"instagram",
|
|
27
|
+
"tiktok",
|
|
28
|
+
"twitter"
|
|
29
|
+
],
|
|
30
|
+
"author": "Social Media MCP Server",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
34
|
+
"node-fetch": "^3.3.2",
|
|
35
|
+
"@types/node-fetch": "^2.6.9",
|
|
36
|
+
"zod": "^3.22.4"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^20.10.0",
|
|
40
|
+
"tsx": "^4.7.0",
|
|
41
|
+
"typescript": "^5.3.2",
|
|
42
|
+
"jest": "^29.7.0",
|
|
43
|
+
"@types/jest": "^29.5.8"
|
|
44
|
+
},
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
"type": "module"
|
|
49
|
+
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
import { Platform } from "./platform.js";
|
|
3
|
-
interface BrowserConfig {
|
|
4
|
-
}
|
|
5
|
-
export declare class BrowserPlatform implements Platform {
|
|
6
|
-
name: string;
|
|
7
|
-
constructor(config: BrowserConfig);
|
|
8
|
-
getTools(): Tool[];
|
|
9
|
-
executeTool(name: string, args: unknown): Promise<{
|
|
10
|
-
content: Array<{
|
|
11
|
-
type: string;
|
|
12
|
-
text: string;
|
|
13
|
-
}>;
|
|
14
|
-
}>;
|
|
15
|
-
}
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/platforms/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,UAAU,aAAa;CAEtB;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,IAAI,SAAa;gBAEL,MAAM,EAAE,aAAa;IAIjC,QAAQ,IAAI,IAAI,EAAE;IAkLZ,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QACtD,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,CAAC;CAwGH"}
|