@exileum/meta-mcp 3.0.0 → 3.2.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 +22 -19
- package/dist/index.js +1 -1
- package/dist/services/meta-client.d.ts +8 -4
- package/dist/services/meta-client.d.ts.map +1 -1
- package/dist/services/meta-client.js +33 -15
- package/dist/services/meta-client.js.map +1 -1
- package/dist/tools/meta/auth.d.ts.map +1 -1
- package/dist/tools/meta/auth.js +12 -6
- package/dist/tools/meta/auth.js.map +1 -1
- package/package.json +15 -8
package/README.md
CHANGED
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@exileum/meta-mcp)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://glama.ai/mcp/servers/exileum/meta-mcp)
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API.
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- **Node.js 22+** (LTS recommended)
|
|
7
12
|
|
|
8
13
|
## Quick Start
|
|
9
14
|
|
|
@@ -89,8 +94,8 @@ npm run build
|
|
|
89
94
|
|
|
90
95
|
| Tool | Description |
|
|
91
96
|
|------|-------------|
|
|
92
|
-
| `meta_exchange_token` | Exchange short-lived token for long-lived token (~60 days) |
|
|
93
|
-
| `meta_refresh_token` | Refresh a long-lived token before expiration |
|
|
97
|
+
| `meta_exchange_token` | Exchange short-lived token for long-lived token (~60 days). Requires `platform` (`instagram` or `threads`) |
|
|
98
|
+
| `meta_refresh_token` | Refresh a long-lived token before expiration. Requires `platform` (`instagram` or `threads`) |
|
|
94
99
|
| `meta_debug_token` | Inspect token validity, expiration, and scopes |
|
|
95
100
|
| `meta_get_app_info` | Get Meta App information |
|
|
96
101
|
| `meta_subscribe_webhook` | Subscribe to webhook notifications |
|
|
@@ -244,13 +249,12 @@ Your **`META_APP_ID`** and **`META_APP_SECRET`** are in **App Settings -> Basic*
|
|
|
244
249
|
- Click **"Generate Access Token"** and authorize
|
|
245
250
|
4. The generated token is short-lived (~1 hour). Exchange it for a long-lived token (~60 days):
|
|
246
251
|
```
|
|
247
|
-
GET https://graph.
|
|
248
|
-
?grant_type=
|
|
249
|
-
&client_id=YOUR_APP_ID
|
|
252
|
+
GET https://graph.instagram.com/access_token
|
|
253
|
+
?grant_type=ig_exchange_token
|
|
250
254
|
&client_secret=YOUR_APP_SECRET
|
|
251
|
-
&
|
|
255
|
+
&access_token=SHORT_LIVED_TOKEN
|
|
252
256
|
```
|
|
253
|
-
Or use the `meta_exchange_token` tool after setup.
|
|
257
|
+
Or use the `meta_exchange_token` tool with `platform: "instagram"` after setup.
|
|
254
258
|
5. **Get your Instagram User ID**:
|
|
255
259
|
```http
|
|
256
260
|
GET https://graph.facebook.com/v25.0/me/accounts?access_token=YOUR_TOKEN
|
|
@@ -304,11 +308,16 @@ Your **`META_APP_ID`** and **`META_APP_SECRET`** are in **App Settings -> Basic*
|
|
|
304
308
|
|
|
305
309
|
### Token Renewal
|
|
306
310
|
|
|
307
|
-
Access tokens expire after ~60 days. Refresh before expiration:
|
|
311
|
+
Access tokens expire after ~60 days. Refresh before expiration (token must be at least 24h old):
|
|
308
312
|
|
|
309
|
-
- **Instagram**: Use `
|
|
310
|
-
|
|
313
|
+
- **Instagram**: Use `meta_refresh_token` with `platform: "instagram"`, or call:
|
|
314
|
+
```http
|
|
315
|
+
GET https://graph.instagram.com/refresh_access_token
|
|
316
|
+
?grant_type=ig_refresh_token
|
|
317
|
+
&access_token=CURRENT_LONG_LIVED_TOKEN
|
|
311
318
|
```
|
|
319
|
+
- **Threads**: Use `meta_refresh_token` with `platform: "threads"`, or call:
|
|
320
|
+
```http
|
|
312
321
|
GET https://graph.threads.net/refresh_access_token
|
|
313
322
|
?grant_type=th_refresh_token
|
|
314
323
|
&access_token=CURRENT_LONG_LIVED_TOKEN
|
|
@@ -316,15 +325,9 @@ Access tokens expire after ~60 days. Refresh before expiration:
|
|
|
316
325
|
|
|
317
326
|
Check token status anytime with `meta_debug_token`.
|
|
318
327
|
|
|
319
|
-
##
|
|
328
|
+
## Glama
|
|
320
329
|
|
|
321
|
-
|
|
322
|
-
|-------------------|-------------|
|
|
323
|
-
| `impressions` | `views` |
|
|
324
|
-
| `video_views` | `views` |
|
|
325
|
-
| `plays` | `views` |
|
|
326
|
-
| `clips_replays_count` | `views` |
|
|
327
|
-
| `engagement` | `saves` + `shares` + `likes` + `comments` |
|
|
330
|
+
[](https://glama.ai/mcp/servers/exileum/meta-mcp)
|
|
328
331
|
|
|
329
332
|
## License
|
|
330
333
|
|
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ import { registerThreadsInsightTools } from "./tools/threads/insights.js";
|
|
|
23
23
|
import { registerInstagramResources } from "./resources/instagram.js";
|
|
24
24
|
import { registerThreadsResources } from "./resources/threads.js";
|
|
25
25
|
import { registerPrompts } from "./prompts/index.js";
|
|
26
|
-
const SERVER_VERSION = "3.
|
|
26
|
+
const SERVER_VERSION = "3.2.0";
|
|
27
27
|
const server = new McpServer({
|
|
28
28
|
name: "meta-mcp",
|
|
29
29
|
version: SERVER_VERSION,
|
|
@@ -12,10 +12,14 @@ export declare class MetaClient {
|
|
|
12
12
|
ig(method: string, path: string, params?: Record<string, unknown>): Promise<ClientResponse>;
|
|
13
13
|
threads(method: string, path: string, params?: Record<string, unknown>): Promise<ClientResponse>;
|
|
14
14
|
meta(method: string, path: string, params?: Record<string, unknown>): Promise<ClientResponse>;
|
|
15
|
-
/** Exchange short-lived token for long-lived token */
|
|
16
|
-
|
|
17
|
-
/** Refresh a long-lived token */
|
|
18
|
-
|
|
15
|
+
/** Exchange short-lived Instagram token for long-lived token (60 days) */
|
|
16
|
+
igExchangeToken(shortToken: string): Promise<ClientResponse>;
|
|
17
|
+
/** Refresh a long-lived Instagram token (must be at least 24h old and not expired) */
|
|
18
|
+
igRefreshToken(longToken: string): Promise<ClientResponse>;
|
|
19
|
+
/** Exchange short-lived Threads token for long-lived token (60 days) */
|
|
20
|
+
threadsExchangeToken(shortToken: string): Promise<ClientResponse>;
|
|
21
|
+
/** Refresh a long-lived Threads token (must be at least 24h old and not expired) */
|
|
22
|
+
threadsRefreshToken(longToken: string): Promise<ClientResponse>;
|
|
19
23
|
/** Debug a token */
|
|
20
24
|
debugToken(inputToken: string): Promise<ClientResponse>;
|
|
21
25
|
get igUserId(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-client.d.ts","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"meta-client.d.ts","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAUxC,UAAU,cAAc;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B,OAAO,CAAC,cAAc;YAUR,OAAO;IA+Cf,EAAE,CACN,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAOpB,OAAO,CACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAOpB,IAAI,CACR,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC;IAQ1B,0EAA0E;IACpE,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUlE,sFAAsF;IAChF,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMhE,wEAAwE;IAClE,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUvE,oFAAoF;IAC9E,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMrE,oBAAoB;IACd,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU7D,IAAI,QAAQ,IAAI,MAAM,CAKrB;IAED,IAAI,aAAa,IAAI,MAAM,CAK1B;CACF"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
const IG_BASE = "https://graph.
|
|
1
|
+
const IG_BASE = "https://graph.instagram.com/v25.0";
|
|
2
|
+
const FB_BASE = "https://graph.facebook.com/v25.0";
|
|
2
3
|
const THREADS_BASE = "https://graph.threads.net/v1.0";
|
|
4
|
+
// Unversioned bases for OAuth token endpoints
|
|
5
|
+
const IG_TOKEN_BASE = "https://graph.instagram.com";
|
|
6
|
+
const THREADS_TOKEN_BASE = "https://graph.threads.net";
|
|
3
7
|
export class MetaClient {
|
|
4
8
|
config;
|
|
5
9
|
constructor(config) {
|
|
@@ -69,24 +73,38 @@ export class MetaClient {
|
|
|
69
73
|
throw new Error("META_APP_ID and META_APP_SECRET are required.");
|
|
70
74
|
}
|
|
71
75
|
const appToken = `${this.config.appId}|${this.config.appSecret}`;
|
|
72
|
-
return this.request(
|
|
76
|
+
return this.request(FB_BASE, appToken, method, path, params);
|
|
73
77
|
}
|
|
74
|
-
/** Exchange short-lived token for long-lived token */
|
|
75
|
-
async
|
|
76
|
-
if (!this.config.
|
|
77
|
-
throw new Error("
|
|
78
|
+
/** Exchange short-lived Instagram token for long-lived token (60 days) */
|
|
79
|
+
async igExchangeToken(shortToken) {
|
|
80
|
+
if (!this.config.appSecret) {
|
|
81
|
+
throw new Error("META_APP_SECRET is required for token exchange.");
|
|
82
|
+
}
|
|
83
|
+
return this.request(IG_TOKEN_BASE, shortToken, "GET", "/access_token", {
|
|
84
|
+
grant_type: "ig_exchange_token",
|
|
85
|
+
client_secret: this.config.appSecret,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** Refresh a long-lived Instagram token (must be at least 24h old and not expired) */
|
|
89
|
+
async igRefreshToken(longToken) {
|
|
90
|
+
return this.request(IG_TOKEN_BASE, longToken, "GET", "/refresh_access_token", {
|
|
91
|
+
grant_type: "ig_refresh_token",
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/** Exchange short-lived Threads token for long-lived token (60 days) */
|
|
95
|
+
async threadsExchangeToken(shortToken) {
|
|
96
|
+
if (!this.config.appSecret) {
|
|
97
|
+
throw new Error("META_APP_SECRET is required for token exchange.");
|
|
78
98
|
}
|
|
79
|
-
return this.request(
|
|
80
|
-
grant_type: "
|
|
81
|
-
client_id: this.config.appId,
|
|
99
|
+
return this.request(THREADS_TOKEN_BASE, shortToken, "GET", "/access_token", {
|
|
100
|
+
grant_type: "th_exchange_token",
|
|
82
101
|
client_secret: this.config.appSecret,
|
|
83
|
-
fb_exchange_token: shortToken,
|
|
84
102
|
});
|
|
85
103
|
}
|
|
86
|
-
/** Refresh a long-lived token */
|
|
87
|
-
async
|
|
88
|
-
return this.request(
|
|
89
|
-
grant_type: "
|
|
104
|
+
/** Refresh a long-lived Threads token (must be at least 24h old and not expired) */
|
|
105
|
+
async threadsRefreshToken(longToken) {
|
|
106
|
+
return this.request(THREADS_TOKEN_BASE, longToken, "GET", "/refresh_access_token", {
|
|
107
|
+
grant_type: "th_refresh_token",
|
|
90
108
|
});
|
|
91
109
|
}
|
|
92
110
|
/** Debug a token */
|
|
@@ -95,7 +113,7 @@ export class MetaClient {
|
|
|
95
113
|
throw new Error("META_APP_ID and META_APP_SECRET are required for token debug.");
|
|
96
114
|
}
|
|
97
115
|
const appToken = `${this.config.appId}|${this.config.appSecret}`;
|
|
98
|
-
return this.request(
|
|
116
|
+
return this.request(FB_BASE, appToken, "GET", "/debug_token", {
|
|
99
117
|
input_token: inputToken,
|
|
100
118
|
});
|
|
101
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta-client.js","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG,kCAAkC,CAAC;AACnD,MAAM,YAAY,GAAG,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"meta-client.js","sourceRoot":"","sources":["../../src/services/meta-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/tools/meta/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/tools/meta/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkHjF"}
|
package/dist/tools/meta/auth.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export function registerMetaAuthTools(server, client) {
|
|
3
3
|
// ─── meta_exchange_token ─────────────────────────────────────
|
|
4
|
-
server.tool("meta_exchange_token", "Exchange a short-lived token for a long-lived token (valid ~60 days).
|
|
4
|
+
server.tool("meta_exchange_token", "Exchange a short-lived token for a long-lived token (valid ~60 days). Uses platform-specific endpoints: Instagram (graph.instagram.com) or Threads (graph.threads.net). Requires META_APP_SECRET.", {
|
|
5
5
|
short_lived_token: z.string().describe("Short-lived access token to exchange"),
|
|
6
|
-
|
|
6
|
+
platform: z.enum(["instagram", "threads"]).describe("Target platform: 'instagram' or 'threads'"),
|
|
7
|
+
}, async ({ short_lived_token, platform }) => {
|
|
7
8
|
try {
|
|
8
|
-
const { data, rateLimit } =
|
|
9
|
+
const { data, rateLimit } = platform === "threads"
|
|
10
|
+
? await client.threadsExchangeToken(short_lived_token)
|
|
11
|
+
: await client.igExchangeToken(short_lived_token);
|
|
9
12
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
10
13
|
}
|
|
11
14
|
catch (error) {
|
|
@@ -13,11 +16,14 @@ export function registerMetaAuthTools(server, client) {
|
|
|
13
16
|
}
|
|
14
17
|
});
|
|
15
18
|
// ─── meta_refresh_token ──────────────────────────────────────
|
|
16
|
-
server.tool("meta_refresh_token", "Refresh a long-lived token before it expires. Returns a new long-lived token.", {
|
|
19
|
+
server.tool("meta_refresh_token", "Refresh a long-lived token before it expires (must be at least 24h old). Uses platform-specific endpoints: Instagram (graph.instagram.com) or Threads (graph.threads.net). Returns a new long-lived token valid for 60 days.", {
|
|
17
20
|
long_lived_token: z.string().describe("Current long-lived access token to refresh"),
|
|
18
|
-
|
|
21
|
+
platform: z.enum(["instagram", "threads"]).describe("Target platform: 'instagram' or 'threads'"),
|
|
22
|
+
}, async ({ long_lived_token, platform }) => {
|
|
19
23
|
try {
|
|
20
|
-
const { data, rateLimit } =
|
|
24
|
+
const { data, rateLimit } = platform === "threads"
|
|
25
|
+
? await client.threadsRefreshToken(long_lived_token)
|
|
26
|
+
: await client.igRefreshToken(long_lived_token);
|
|
21
27
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
22
28
|
}
|
|
23
29
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/tools/meta/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAkB;IACzE,gEAAgE;IAChE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/tools/meta/auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exileum/meta-mcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"mcpName": "io.github.exileum/meta",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Enables AI assistants to manage Instagram and Threads accounts — publish content, handle comments, view insights, search hashtags, and manage DMs through the Meta Graph API",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
8
|
"meta-mcp": "dist/index.js"
|
|
@@ -21,12 +21,14 @@
|
|
|
21
21
|
"README.md"
|
|
22
22
|
],
|
|
23
23
|
"engines": {
|
|
24
|
-
"node": ">=
|
|
24
|
+
"node": ">=22"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsc",
|
|
28
28
|
"start": "node dist/index.js",
|
|
29
|
-
"dev": "tsx src/index.ts"
|
|
29
|
+
"dev": "tsx src/index.ts",
|
|
30
|
+
"test": "vitest run",
|
|
31
|
+
"test:watch": "vitest"
|
|
30
32
|
},
|
|
31
33
|
"keywords": [
|
|
32
34
|
"mcp",
|
|
@@ -48,13 +50,18 @@
|
|
|
48
50
|
"bugs": {
|
|
49
51
|
"url": "https://github.com/exileum/meta-mcp/issues"
|
|
50
52
|
},
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"provenance": true,
|
|
55
|
+
"access": "public"
|
|
56
|
+
},
|
|
51
57
|
"dependencies": {
|
|
52
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
53
|
-
"zod": "^3.
|
|
58
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
59
|
+
"zod": "^4.3.6"
|
|
54
60
|
},
|
|
55
61
|
"devDependencies": {
|
|
56
|
-
"@types/node": "^
|
|
62
|
+
"@types/node": "^25.5.2",
|
|
57
63
|
"tsx": "^4.21.0",
|
|
58
|
-
"typescript": "^
|
|
64
|
+
"typescript": "^6.0.2",
|
|
65
|
+
"vitest": "^4.1.2"
|
|
59
66
|
}
|
|
60
67
|
}
|