@exileum/meta-mcp 4.0.0 → 6.0.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 +81 -12
- package/dist/config.d.ts +10 -8
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +65 -8
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/instagram.d.ts.map +1 -1
- package/dist/resources/instagram.js +19 -13
- package/dist/resources/instagram.js.map +1 -1
- package/dist/resources/threads.d.ts.map +1 -1
- package/dist/resources/threads.js +19 -13
- package/dist/resources/threads.js.map +1 -1
- package/dist/schemas.d.ts +14 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +14 -0
- package/dist/schemas.js.map +1 -1
- package/dist/services/meta-client.d.ts +47 -5
- package/dist/services/meta-client.d.ts.map +1 -1
- package/dist/services/meta-client.js +120 -27
- package/dist/services/meta-client.js.map +1 -1
- package/dist/tools/instagram/comments.d.ts.map +1 -1
- package/dist/tools/instagram/comments.js +35 -29
- package/dist/tools/instagram/comments.js.map +1 -1
- package/dist/tools/instagram/hashtags.d.ts.map +1 -1
- package/dist/tools/instagram/hashtags.js +19 -11
- package/dist/tools/instagram/hashtags.js.map +1 -1
- package/dist/tools/instagram/media.d.ts.map +1 -1
- package/dist/tools/instagram/media.js +17 -15
- package/dist/tools/instagram/media.js.map +1 -1
- package/dist/tools/instagram/mentions.d.ts.map +1 -1
- package/dist/tools/instagram/mentions.js +16 -12
- package/dist/tools/instagram/mentions.js.map +1 -1
- package/dist/tools/instagram/messaging.d.ts.map +1 -1
- package/dist/tools/instagram/messaging.js +34 -24
- package/dist/tools/instagram/messaging.js.map +1 -1
- package/dist/tools/instagram/profile.d.ts +2 -0
- package/dist/tools/instagram/profile.d.ts.map +1 -1
- package/dist/tools/instagram/profile.js +46 -21
- package/dist/tools/instagram/profile.js.map +1 -1
- package/dist/tools/instagram/publishing.d.ts.map +1 -1
- package/dist/tools/instagram/publishing.js +14 -13
- package/dist/tools/instagram/publishing.js.map +1 -1
- package/dist/tools/meta/auth.d.ts.map +1 -1
- package/dist/tools/meta/auth.js +7 -6
- package/dist/tools/meta/auth.js.map +1 -1
- package/dist/tools/threads/insights.d.ts.map +1 -1
- package/dist/tools/threads/insights.js +8 -8
- package/dist/tools/threads/insights.js.map +1 -1
- package/dist/tools/threads/media.d.ts.map +1 -1
- package/dist/tools/threads/media.js +12 -12
- package/dist/tools/threads/media.js.map +1 -1
- package/dist/tools/threads/mentions.d.ts.map +1 -1
- package/dist/tools/threads/mentions.js +2 -1
- package/dist/tools/threads/mentions.js.map +1 -1
- package/dist/tools/threads/profile.d.ts.map +1 -1
- package/dist/tools/threads/profile.js +2 -28
- package/dist/tools/threads/profile.js.map +1 -1
- package/dist/tools/threads/publishing.d.ts +7 -0
- package/dist/tools/threads/publishing.d.ts.map +1 -1
- package/dist/tools/threads/publishing.js +47 -35
- package/dist/tools/threads/publishing.js.map +1 -1
- package/dist/tools/threads/replies.d.ts +2 -0
- package/dist/tools/threads/replies.d.ts.map +1 -1
- package/dist/tools/threads/replies.js +32 -17
- package/dist/tools/threads/replies.js.map +1 -1
- package/dist/utils/container.d.ts +4 -2
- package/dist/utils/container.d.ts.map +1 -1
- package/dist/utils/container.js +8 -3
- package/dist/utils/container.js.map +1 -1
- package/dist/utils/errors.d.ts +38 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +145 -0
- package/dist/utils/errors.js.map +1 -0
- package/package.json +10 -1
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { metaId } from "../../schemas.js";
|
|
3
|
+
import { formatErrorResponse } from "../../utils/errors.js";
|
|
4
|
+
const GET_MEDIA_DEFAULT_FIELDS = "id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,like_count,comments_count";
|
|
5
|
+
const GET_MEDIA_INSIGHTS_DEFAULT_METRIC = "views,reach";
|
|
2
6
|
export function registerIgMediaTools(server, client) {
|
|
3
7
|
// ─── ig_get_media_list ───────────────────────────────────────
|
|
4
8
|
server.tool("ig_get_media_list", "Get list of media published on the Instagram account.", {
|
|
@@ -20,33 +24,32 @@ export function registerIgMediaTools(server, client) {
|
|
|
20
24
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
21
25
|
}
|
|
22
26
|
catch (error) {
|
|
23
|
-
return
|
|
27
|
+
return formatErrorResponse(error, "Get media list");
|
|
24
28
|
}
|
|
25
29
|
});
|
|
26
30
|
// ─── ig_get_media ────────────────────────────────────────────
|
|
27
31
|
server.tool("ig_get_media", "Get details of a specific Instagram media post.", {
|
|
28
|
-
media_id:
|
|
29
|
-
fields: z.string().optional().describe(
|
|
32
|
+
media_id: metaId.describe("Media ID"),
|
|
33
|
+
fields: z.string().optional().default(GET_MEDIA_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${GET_MEDIA_DEFAULT_FIELDS})`),
|
|
30
34
|
}, async ({ media_id, fields }) => {
|
|
31
35
|
try {
|
|
32
|
-
const
|
|
33
|
-
const { data, rateLimit } = await client.ig("GET", `/${media_id}`, { fields: f });
|
|
36
|
+
const { data, rateLimit } = await client.ig("GET", `/${media_id}`, { fields });
|
|
34
37
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
35
38
|
}
|
|
36
39
|
catch (error) {
|
|
37
|
-
return
|
|
40
|
+
return formatErrorResponse(error, "Get media");
|
|
38
41
|
}
|
|
39
42
|
});
|
|
40
43
|
// ─── ig_delete_media ─────────────────────────────────────────
|
|
41
44
|
server.tool("ig_delete_media", "Delete an Instagram media post (posts, carousels, reels, stories). This action is irreversible. Requires instagram_manage_contents permission (Facebook Login only — not available with Instagram Login).", {
|
|
42
|
-
media_id:
|
|
45
|
+
media_id: metaId.describe("Media ID to delete"),
|
|
43
46
|
}, async ({ media_id }) => {
|
|
44
47
|
try {
|
|
45
48
|
const { data, rateLimit } = await client.ig("DELETE", `/${media_id}`);
|
|
46
49
|
return { content: [{ type: "text", text: JSON.stringify({ success: true, ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
47
50
|
}
|
|
48
51
|
catch (error) {
|
|
49
|
-
return
|
|
52
|
+
return formatErrorResponse(error, "Delete media");
|
|
50
53
|
}
|
|
51
54
|
});
|
|
52
55
|
// ─── ig_get_media_insights ───────────────────────────────────
|
|
@@ -55,21 +58,20 @@ export function registerIgMediaTools(server, client) {
|
|
|
55
58
|
"- REEL: views, reach, saved, total_interactions, likes, comments, shares, reposts, reels_skip_rate\n" +
|
|
56
59
|
"- STORY: views, reach, total_interactions, navigation, replies, profile_activity, profile_visits, follows\n" +
|
|
57
60
|
"Note: 'impressions' and 'video_views' were deprecated in v22.0 — use 'views' instead. See https://developers.facebook.com/docs/instagram-platform/reference/instagram-media/insights/ for the authoritative per-type matrix.", {
|
|
58
|
-
media_id:
|
|
59
|
-
metric: z.string().optional().describe(
|
|
61
|
+
media_id: metaId.describe("Media ID"),
|
|
62
|
+
metric: z.string().optional().default(GET_MEDIA_INSIGHTS_DEFAULT_METRIC).describe(`Comma-separated metrics. Default '${GET_MEDIA_INSIGHTS_DEFAULT_METRIC}' is universally supported; override per media type per the tool description.`),
|
|
60
63
|
}, async ({ media_id, metric }) => {
|
|
61
64
|
try {
|
|
62
|
-
const
|
|
63
|
-
const { data, rateLimit } = await client.ig("GET", `/${media_id}/insights`, { metric: m });
|
|
65
|
+
const { data, rateLimit } = await client.ig("GET", `/${media_id}/insights`, { metric });
|
|
64
66
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
65
67
|
}
|
|
66
68
|
catch (error) {
|
|
67
|
-
return
|
|
69
|
+
return formatErrorResponse(error, "Get media insights");
|
|
68
70
|
}
|
|
69
71
|
});
|
|
70
72
|
// ─── ig_toggle_comments ──────────────────────────────────────
|
|
71
73
|
server.tool("ig_toggle_comments", "Enable or disable comments on an Instagram media post.", {
|
|
72
|
-
media_id:
|
|
74
|
+
media_id: metaId.describe("Media ID"),
|
|
73
75
|
enabled: z.boolean().describe("true to enable comments, false to disable"),
|
|
74
76
|
}, async ({ media_id, enabled }) => {
|
|
75
77
|
try {
|
|
@@ -79,7 +81,7 @@ export function registerIgMediaTools(server, client) {
|
|
|
79
81
|
return { content: [{ type: "text", text: JSON.stringify({ success: true, comment_enabled: enabled, ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
80
82
|
}
|
|
81
83
|
catch (error) {
|
|
82
|
-
return
|
|
84
|
+
return formatErrorResponse(error, "Toggle comments");
|
|
83
85
|
}
|
|
84
86
|
});
|
|
85
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/tools/instagram/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/tools/instagram/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/mentions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/mentions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAOvE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA6ClF"}
|
|
@@ -1,41 +1,45 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { metaId } from "../../schemas.js";
|
|
3
|
+
import { formatErrorResponse } from "../../utils/errors.js";
|
|
4
|
+
const MENTIONED_COMMENT_DEFAULT_FIELDS = "id,text,timestamp,username,media{id,media_url,media_type}";
|
|
5
|
+
const TAGGED_MEDIA_DEFAULT_FIELDS = "id,caption,media_type,media_url,permalink,timestamp,username";
|
|
2
6
|
export function registerIgMentionTools(server, client) {
|
|
3
7
|
// ─── ig_get_mentioned_comment ────────────────────────────────
|
|
4
8
|
server.tool("ig_get_mentioned_comment", "Get details of a specific comment where the account was @mentioned. Requires the comment_id from a mention webhook notification. Returns a single comment with its associated media.", {
|
|
5
|
-
comment_id:
|
|
6
|
-
fields: z.string().optional().describe(
|
|
9
|
+
comment_id: metaId.describe("Comment ID from a mention webhook notification"),
|
|
10
|
+
fields: z.string().optional().default(MENTIONED_COMMENT_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${MENTIONED_COMMENT_DEFAULT_FIELDS})`),
|
|
7
11
|
}, async ({ comment_id, fields }) => {
|
|
8
12
|
try {
|
|
9
|
-
const f = fields || "id,text,timestamp,username,media{id,media_url,media_type}";
|
|
10
13
|
const { data, rateLimit } = await client.ig("GET", `/${client.igUserId}/mentioned_comment`, {
|
|
11
14
|
comment_id,
|
|
12
|
-
fields
|
|
15
|
+
fields,
|
|
13
16
|
});
|
|
14
17
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
15
18
|
}
|
|
16
19
|
catch (error) {
|
|
17
|
-
return
|
|
20
|
+
return formatErrorResponse(error, "Get mentioned comment");
|
|
18
21
|
}
|
|
19
22
|
});
|
|
20
23
|
// ─── ig_get_tagged_media ─────────────────────────────────────
|
|
21
24
|
server.tool("ig_get_tagged_media", "Get media where the account is tagged (photo tags, not @mentions).", {
|
|
22
25
|
limit: z.number().optional().describe("Number of results"),
|
|
23
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
27
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
28
|
+
fields: z.string().optional().default(TAGGED_MEDIA_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${TAGGED_MEDIA_DEFAULT_FIELDS})`),
|
|
29
|
+
}, async ({ limit, after, before, fields }) => {
|
|
26
30
|
try {
|
|
27
|
-
const params = {
|
|
28
|
-
fields: fields || "id,caption,media_type,media_url,permalink,timestamp,username",
|
|
29
|
-
};
|
|
31
|
+
const params = { fields };
|
|
30
32
|
if (limit !== undefined)
|
|
31
33
|
params.limit = limit;
|
|
32
34
|
if (after)
|
|
33
35
|
params.after = after;
|
|
36
|
+
if (before)
|
|
37
|
+
params.before = before;
|
|
34
38
|
const { data, rateLimit } = await client.ig("GET", `/${client.igUserId}/tags`, params);
|
|
35
39
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
36
40
|
}
|
|
37
41
|
catch (error) {
|
|
38
|
-
return
|
|
42
|
+
return formatErrorResponse(error, "Get tagged media");
|
|
39
43
|
}
|
|
40
44
|
});
|
|
41
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../src/tools/instagram/mentions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../../src/tools/instagram/mentions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/messaging.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"messaging.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/messaging.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAQvE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAgGpF"}
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { metaId } from "../../schemas.js";
|
|
3
|
+
import { formatErrorResponse } from "../../utils/errors.js";
|
|
4
|
+
const GET_CONVERSATIONS_DEFAULT_FIELDS = "id,updated_time,participants,messages{id,message,from,created_time}";
|
|
5
|
+
// Both /conversations/{id}/messages and /messages/{id} share the same Message resource shape, so they reuse the same default field set.
|
|
6
|
+
const MESSAGE_DEFAULT_FIELDS = "id,message,from,created_time,attachments";
|
|
2
7
|
export function registerIgMessagingTools(server, client) {
|
|
3
8
|
// ─── ig_get_conversations ────────────────────────────────────
|
|
4
9
|
server.tool("ig_get_conversations", "Get Instagram DM conversations list. Requires 'instagram_business_manage_messages' permission and the Instagram Messaging API.", {
|
|
5
10
|
folder: z.enum(["inbox", "spam"]).optional().describe("Folder to retrieve (default: inbox)"),
|
|
6
11
|
limit: z.number().optional().describe("Number of conversations"),
|
|
7
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
13
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
14
|
+
fields: z.string().optional().default(GET_CONVERSATIONS_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${GET_CONVERSATIONS_DEFAULT_FIELDS})`),
|
|
15
|
+
}, async ({ folder, limit, after, before, fields }) => {
|
|
10
16
|
try {
|
|
11
17
|
const params = {
|
|
12
18
|
platform: "instagram",
|
|
13
|
-
fields
|
|
19
|
+
fields,
|
|
14
20
|
};
|
|
15
21
|
if (folder)
|
|
16
22
|
params.folder = folder;
|
|
@@ -18,33 +24,36 @@ export function registerIgMessagingTools(server, client) {
|
|
|
18
24
|
params.limit = limit;
|
|
19
25
|
if (after)
|
|
20
26
|
params.after = after;
|
|
27
|
+
if (before)
|
|
28
|
+
params.before = before;
|
|
21
29
|
const { data, rateLimit } = await client.ig("GET", `/${client.igUserId}/conversations`, params);
|
|
22
30
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
23
31
|
}
|
|
24
32
|
catch (error) {
|
|
25
|
-
return
|
|
33
|
+
return formatErrorResponse(error, "Get conversations");
|
|
26
34
|
}
|
|
27
35
|
});
|
|
28
36
|
// ─── ig_get_messages ─────────────────────────────────────────
|
|
29
37
|
server.tool("ig_get_messages", "Get messages in a specific DM conversation.", {
|
|
30
|
-
conversation_id:
|
|
38
|
+
conversation_id: metaId.describe("Conversation ID"),
|
|
31
39
|
limit: z.number().optional().describe("Number of messages"),
|
|
32
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
41
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
42
|
+
fields: z.string().optional().default(MESSAGE_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${MESSAGE_DEFAULT_FIELDS})`),
|
|
43
|
+
}, async ({ conversation_id, limit, after, before, fields }) => {
|
|
35
44
|
try {
|
|
36
|
-
const params = {
|
|
37
|
-
fields: fields || "id,message,from,created_time,attachments",
|
|
38
|
-
};
|
|
45
|
+
const params = { fields };
|
|
39
46
|
if (limit !== undefined)
|
|
40
47
|
params.limit = limit;
|
|
41
48
|
if (after)
|
|
42
49
|
params.after = after;
|
|
50
|
+
if (before)
|
|
51
|
+
params.before = before;
|
|
43
52
|
const { data, rateLimit } = await client.ig("GET", `/${conversation_id}/messages`, params);
|
|
44
53
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
45
54
|
}
|
|
46
55
|
catch (error) {
|
|
47
|
-
return
|
|
56
|
+
return formatErrorResponse(error, "Get messages");
|
|
48
57
|
}
|
|
49
58
|
});
|
|
50
59
|
// ─── ig_send_message ─────────────────────────────────────────
|
|
@@ -53,29 +62,30 @@ export function registerIgMessagingTools(server, client) {
|
|
|
53
62
|
message: z.string().describe("Message text to send"),
|
|
54
63
|
}, async ({ recipient_id, message }) => {
|
|
55
64
|
try {
|
|
56
|
-
const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/messages`, {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/messages`, undefined, {
|
|
66
|
+
jsonBody: {
|
|
67
|
+
recipient: { id: recipient_id },
|
|
68
|
+
message: { text: message },
|
|
69
|
+
messaging_type: "RESPONSE",
|
|
70
|
+
},
|
|
71
|
+
});
|
|
61
72
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
62
73
|
}
|
|
63
74
|
catch (error) {
|
|
64
|
-
return
|
|
75
|
+
return formatErrorResponse(error, "Send message");
|
|
65
76
|
}
|
|
66
77
|
});
|
|
67
78
|
// ─── ig_get_message ──────────────────────────────────────────
|
|
68
79
|
server.tool("ig_get_message", "Get details of a specific DM message.", {
|
|
69
|
-
message_id:
|
|
70
|
-
fields: z.string().optional().describe(
|
|
80
|
+
message_id: metaId.describe("Message ID"),
|
|
81
|
+
fields: z.string().optional().default(MESSAGE_DEFAULT_FIELDS).describe(`Comma-separated fields (default: ${MESSAGE_DEFAULT_FIELDS})`),
|
|
71
82
|
}, async ({ message_id, fields }) => {
|
|
72
83
|
try {
|
|
73
|
-
const
|
|
74
|
-
const { data, rateLimit } = await client.ig("GET", `/${message_id}`, { fields: f });
|
|
84
|
+
const { data, rateLimit } = await client.ig("GET", `/${message_id}`, { fields });
|
|
75
85
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
76
86
|
}
|
|
77
87
|
catch (error) {
|
|
78
|
-
return
|
|
88
|
+
return formatErrorResponse(error, "Get message");
|
|
79
89
|
}
|
|
80
90
|
});
|
|
81
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/tools/instagram/messaging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"messaging.js","sourceRoot":"","sources":["../../../src/tools/instagram/messaging.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
3
|
import { MetaClient } from "../../services/meta-client.js";
|
|
4
|
+
export declare const igBusinessDiscoveryUsernameSchema: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
3
5
|
export declare function registerIgProfileTools(server: McpServer, client: MetaClient): void;
|
|
4
6
|
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/profile.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAIvE,eAAO,MAAM,iCAAiC,wDAa3C,CAAC;AAIJ,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAoHlF"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { metaId } from "../../schemas.js";
|
|
3
|
+
import { formatErrorResponse } from "../../utils/errors.js";
|
|
4
|
+
export const igBusinessDiscoveryUsernameSchema = z
|
|
5
|
+
.string()
|
|
6
|
+
.trim()
|
|
7
|
+
.transform((v) => v.replace(/^@+/, ""))
|
|
8
|
+
.refine((v) => v.length > 0, {
|
|
9
|
+
message: "Username cannot be empty, only whitespace, or only '@' characters",
|
|
10
|
+
})
|
|
11
|
+
.refine((v) => /^[a-zA-Z0-9._]{1,30}$/.test(v), {
|
|
12
|
+
message: "Instagram username must be 1-30 characters and contain only letters, numbers, periods, and underscores",
|
|
13
|
+
})
|
|
14
|
+
.describe("Instagram username to look up (1-30 chars, letters/numbers/periods/underscores only; without @, leading '@' characters and surrounding whitespace are auto-stripped)");
|
|
15
|
+
const BUSINESS_DISCOVERY_DEFAULT_FIELDS = "id,username,name,biography,followers_count,follows_count,media_count";
|
|
2
16
|
export function registerIgProfileTools(server, client) {
|
|
3
17
|
// ─── ig_get_profile ──────────────────────────────────────────
|
|
4
18
|
server.tool("ig_get_profile", "Get Instagram Business/Creator account profile information.", {}, async () => {
|
|
@@ -9,18 +23,27 @@ export function registerIgProfileTools(server, client) {
|
|
|
9
23
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
10
24
|
}
|
|
11
25
|
catch (error) {
|
|
12
|
-
return
|
|
26
|
+
return formatErrorResponse(error, "Get profile");
|
|
13
27
|
}
|
|
14
28
|
});
|
|
15
29
|
// ─── ig_get_account_insights ─────────────────────────────────
|
|
16
|
-
server.tool("ig_get_account_insights", "Get Instagram account insights. Note: 'impressions', 'email_contacts', 'phone_call_clicks', 'text_message_clicks', 'get_directions_clicks', 'website_clicks', 'profile_views' were deprecated in v22.0. Use 'views', 'reach', 'follower_count', 'reposts' instead.", {
|
|
17
|
-
metric: z.string().describe("Comma-separated metrics:
|
|
18
|
-
|
|
30
|
+
server.tool("ig_get_account_insights", "Get Instagram account insights. Use the optional `metric_type` to control whether results come back as a single total per metric or as a daily breakdown. Note: 'impressions', 'email_contacts', 'phone_call_clicks', 'text_message_clicks', 'get_directions_clicks', 'website_clicks', 'profile_views' were deprecated in v22.0. Use 'views', 'reach', 'follower_count', 'reposts' instead.", {
|
|
31
|
+
metric: z.string().describe("Comma-separated metrics. Time-series metrics (use period=day/week/days_28): " +
|
|
32
|
+
"views,reach,accounts_engaged,total_interactions,reposts,profile_links_taps. " +
|
|
33
|
+
"Lifetime-only metrics (use period=lifetime): " +
|
|
34
|
+
"follower_count,follower_demographics,engaged_audience_demographics."),
|
|
35
|
+
period: z.enum(["day", "week", "days_28", "lifetime"]).describe("Aggregation period. Use 'day', 'week', or 'days_28' for time-series metrics " +
|
|
36
|
+
"(views,reach,accounts_engaged,total_interactions,reposts,profile_links_taps). " +
|
|
37
|
+
"Use 'lifetime' only for follower_count and demographic metrics " +
|
|
38
|
+
"(follower_demographics,engaged_audience_demographics)."),
|
|
39
|
+
metric_type: z.enum(["total_value", "time_series"]).optional().describe("Aggregation shape: 'total_value' for a single aggregated number per metric, 'time_series' for daily breakdowns. Per the Instagram User Insights docs, only 'reach' supports both; most metrics (views, likes, reposts, accounts_engaged, total_interactions, saves, shares, comments, replies, quotes, profile_links_taps, demographics) support only 'total_value'. Omit to use the API default for each metric."),
|
|
19
40
|
since: z.string().optional().describe("Start date (Unix timestamp or ISO 8601)"),
|
|
20
41
|
until: z.string().optional().describe("End date (Unix timestamp or ISO 8601)"),
|
|
21
|
-
}, async ({ metric, period, since, until }) => {
|
|
42
|
+
}, async ({ metric, period, metric_type, since, until }) => {
|
|
22
43
|
try {
|
|
23
44
|
const params = { metric, period };
|
|
45
|
+
if (metric_type)
|
|
46
|
+
params.metric_type = metric_type;
|
|
24
47
|
if (since)
|
|
25
48
|
params.since = since;
|
|
26
49
|
if (until)
|
|
@@ -29,57 +52,59 @@ export function registerIgProfileTools(server, client) {
|
|
|
29
52
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
30
53
|
}
|
|
31
54
|
catch (error) {
|
|
32
|
-
return
|
|
55
|
+
return formatErrorResponse(error, "Get account insights");
|
|
33
56
|
}
|
|
34
57
|
});
|
|
35
58
|
// ─── ig_business_discovery ───────────────────────────────────
|
|
36
59
|
server.tool("ig_business_discovery", "Look up another Instagram Business/Creator account's public info by username.", {
|
|
37
|
-
username:
|
|
38
|
-
fields: z.string().optional().describe(
|
|
60
|
+
username: igBusinessDiscoveryUsernameSchema,
|
|
61
|
+
fields: z.string().optional().default(BUSINESS_DISCOVERY_DEFAULT_FIELDS).describe(`Fields to retrieve (default: ${BUSINESS_DISCOVERY_DEFAULT_FIELDS})`),
|
|
39
62
|
}, async ({ username, fields }) => {
|
|
40
63
|
try {
|
|
41
|
-
const f = fields || "id,username,name,biography,followers_count,follows_count,media_count";
|
|
42
64
|
const { data, rateLimit } = await client.ig("GET", `/${client.igUserId}`, {
|
|
43
|
-
fields: `business_discovery.
|
|
65
|
+
fields: `business_discovery.username(${username}){${fields}}`,
|
|
44
66
|
});
|
|
45
67
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
46
68
|
}
|
|
47
69
|
catch (error) {
|
|
48
|
-
return
|
|
70
|
+
return formatErrorResponse(error, "Business discovery");
|
|
49
71
|
}
|
|
50
72
|
});
|
|
51
73
|
// ─── ig_get_collaboration_invites ────────────────────────────
|
|
52
74
|
server.tool("ig_get_collaboration_invites", "Get pending collaboration invites for the Instagram account. Added in December 2025.", {
|
|
53
75
|
limit: z.number().optional().describe("Number of results"),
|
|
54
|
-
after: z.string().optional().describe("Pagination cursor"),
|
|
55
|
-
|
|
76
|
+
after: z.string().optional().describe("Pagination cursor for next page"),
|
|
77
|
+
before: z.string().optional().describe("Pagination cursor for previous page"),
|
|
78
|
+
}, async ({ limit, after, before }) => {
|
|
56
79
|
try {
|
|
57
80
|
const params = {};
|
|
58
81
|
if (limit !== undefined)
|
|
59
82
|
params.limit = limit;
|
|
60
83
|
if (after)
|
|
61
84
|
params.after = after;
|
|
85
|
+
if (before)
|
|
86
|
+
params.before = before;
|
|
62
87
|
const { data, rateLimit } = await client.ig("GET", `/${client.igUserId}/collaboration_invites`, params);
|
|
63
88
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
64
89
|
}
|
|
65
90
|
catch (error) {
|
|
66
|
-
return
|
|
91
|
+
return formatErrorResponse(error, "Get collaboration invites");
|
|
67
92
|
}
|
|
68
93
|
});
|
|
69
94
|
// ─── ig_respond_collaboration_invite ─────────────────────────
|
|
70
|
-
server.tool("ig_respond_collaboration_invite", "Accept or decline a collaboration invite. Added in December 2025.", {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
}, async ({
|
|
95
|
+
server.tool("ig_respond_collaboration_invite", "Accept or decline a collaboration invite by media_id (the IG Media ID of the tagged post; available via the `id` field returned by `ig_get_collaboration_invites`). Pass `accept: true` to accept, `accept: false` to decline. Per the Instagram Collaboration API. Added in December 2025.", {
|
|
96
|
+
media_id: metaId.describe("IG Media ID of the tagged post (from `ig_get_collaboration_invites` response `id` field)"),
|
|
97
|
+
accept: z.boolean().describe("true to accept the invite, false to decline"),
|
|
98
|
+
}, async ({ media_id, accept }) => {
|
|
74
99
|
try {
|
|
75
100
|
const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/collaboration_invites`, {
|
|
76
|
-
|
|
77
|
-
|
|
101
|
+
media_id,
|
|
102
|
+
accept,
|
|
78
103
|
});
|
|
79
104
|
return { content: [{ type: "text", text: JSON.stringify({ ...data, _rateLimit: rateLimit }, null, 2) }] };
|
|
80
105
|
}
|
|
81
106
|
catch (error) {
|
|
82
|
-
return
|
|
107
|
+
return formatErrorResponse(error, "Respond to collaboration invite");
|
|
83
108
|
}
|
|
84
109
|
});
|
|
85
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/tools/instagram/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/tools/instagram/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/publishing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"publishing.d.ts","sourceRoot":"","sources":["../../../src/tools/instagram/publishing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAavE,eAAO,MAAM,mBAAmB,mFAU7B,CAAC;AAEJ,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAyNrF"}
|