@exileum/meta-mcp 7.0.0 → 8.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.
Files changed (96) hide show
  1. package/README.md +31 -7
  2. package/dist/constants/fields.d.ts +6 -0
  3. package/dist/constants/fields.d.ts.map +1 -0
  4. package/dist/constants/fields.js +25 -0
  5. package/dist/constants/fields.js.map +1 -0
  6. package/dist/http-transport.d.ts +20 -0
  7. package/dist/http-transport.d.ts.map +1 -0
  8. package/dist/http-transport.js +228 -0
  9. package/dist/http-transport.js.map +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +76 -26
  12. package/dist/index.js.map +1 -1
  13. package/dist/prompts/index.d.ts +56 -0
  14. package/dist/prompts/index.d.ts.map +1 -1
  15. package/dist/prompts/index.js +264 -41
  16. package/dist/prompts/index.js.map +1 -1
  17. package/dist/resources/instagram.d.ts.map +1 -1
  18. package/dist/resources/instagram.js +13 -4
  19. package/dist/resources/instagram.js.map +1 -1
  20. package/dist/resources/threads.d.ts.map +1 -1
  21. package/dist/resources/threads.js +13 -4
  22. package/dist/resources/threads.js.map +1 -1
  23. package/dist/services/meta-client.d.ts +22 -3
  24. package/dist/services/meta-client.d.ts.map +1 -1
  25. package/dist/services/meta-client.js +132 -6
  26. package/dist/services/meta-client.js.map +1 -1
  27. package/dist/shutdown.d.ts +18 -0
  28. package/dist/shutdown.d.ts.map +1 -0
  29. package/dist/shutdown.js +60 -0
  30. package/dist/shutdown.js.map +1 -0
  31. package/dist/tools/instagram/comments.d.ts.map +1 -1
  32. package/dist/tools/instagram/comments.js +14 -19
  33. package/dist/tools/instagram/comments.js.map +1 -1
  34. package/dist/tools/instagram/hashtags.d.ts +1 -0
  35. package/dist/tools/instagram/hashtags.d.ts.map +1 -1
  36. package/dist/tools/instagram/hashtags.js +19 -19
  37. package/dist/tools/instagram/hashtags.js.map +1 -1
  38. package/dist/tools/instagram/media.d.ts.map +1 -1
  39. package/dist/tools/instagram/media.js +8 -11
  40. package/dist/tools/instagram/media.js.map +1 -1
  41. package/dist/tools/instagram/mentions.d.ts.map +1 -1
  42. package/dist/tools/instagram/mentions.js +2 -7
  43. package/dist/tools/instagram/mentions.js.map +1 -1
  44. package/dist/tools/instagram/messaging.d.ts.map +1 -1
  45. package/dist/tools/instagram/messaging.js +10 -20
  46. package/dist/tools/instagram/messaging.js.map +1 -1
  47. package/dist/tools/instagram/profile.d.ts +2 -0
  48. package/dist/tools/instagram/profile.d.ts.map +1 -1
  49. package/dist/tools/instagram/profile.js +13 -15
  50. package/dist/tools/instagram/profile.js.map +1 -1
  51. package/dist/tools/instagram/publishing.d.ts.map +1 -1
  52. package/dist/tools/instagram/publishing.js +133 -96
  53. package/dist/tools/instagram/publishing.js.map +1 -1
  54. package/dist/tools/meta/auth.d.ts.map +1 -1
  55. package/dist/tools/meta/auth.js +18 -2
  56. package/dist/tools/meta/auth.js.map +1 -1
  57. package/dist/tools/threads/insights.d.ts.map +1 -1
  58. package/dist/tools/threads/insights.js +2 -5
  59. package/dist/tools/threads/insights.js.map +1 -1
  60. package/dist/tools/threads/media.d.ts.map +1 -1
  61. package/dist/tools/threads/media.js +5 -47
  62. package/dist/tools/threads/media.js.map +1 -1
  63. package/dist/tools/threads/mentions.d.ts.map +1 -1
  64. package/dist/tools/threads/mentions.js +3 -10
  65. package/dist/tools/threads/mentions.js.map +1 -1
  66. package/dist/tools/threads/profile.d.ts +2 -0
  67. package/dist/tools/threads/profile.d.ts.map +1 -1
  68. package/dist/tools/threads/profile.js +10 -1
  69. package/dist/tools/threads/profile.js.map +1 -1
  70. package/dist/tools/threads/publishing.d.ts.map +1 -1
  71. package/dist/tools/threads/publishing.js +122 -103
  72. package/dist/tools/threads/publishing.js.map +1 -1
  73. package/dist/tools/threads/replies.d.ts.map +1 -1
  74. package/dist/tools/threads/replies.js +15 -23
  75. package/dist/tools/threads/replies.js.map +1 -1
  76. package/dist/utils/container.d.ts +16 -4
  77. package/dist/utils/container.d.ts.map +1 -1
  78. package/dist/utils/container.js +36 -6
  79. package/dist/utils/container.js.map +1 -1
  80. package/dist/utils/errors.d.ts +23 -3
  81. package/dist/utils/errors.d.ts.map +1 -1
  82. package/dist/utils/errors.js +32 -2
  83. package/dist/utils/errors.js.map +1 -1
  84. package/dist/utils/logger.d.ts +28 -0
  85. package/dist/utils/logger.d.ts.map +1 -0
  86. package/dist/utils/logger.js +32 -0
  87. package/dist/utils/logger.js.map +1 -0
  88. package/dist/utils/params.d.ts +3 -0
  89. package/dist/utils/params.d.ts.map +1 -0
  90. package/dist/utils/params.js +14 -0
  91. package/dist/utils/params.js.map +1 -0
  92. package/dist/utils/progress.d.ts +42 -0
  93. package/dist/utils/progress.d.ts.map +1 -0
  94. package/dist/utils/progress.js +35 -0
  95. package/dist/utils/progress.js.map +1 -0
  96. package/package.json +3 -2
@@ -3,7 +3,19 @@ import { httpsUrl, metaId } from "../../schemas.js";
3
3
  import { waitForIgContainer, IMAGE_PROCESSING_TIMEOUT, VIDEO_PROCESSING_TIMEOUT } from "../../utils/container.js";
4
4
  import { formatErrorResponse } from "../../utils/errors.js";
5
5
  import { formatResponse } from "../../utils/response.js";
6
+ import { buildParams } from "../../utils/params.js";
7
+ import { makeProgressNotifier } from "../../utils/progress.js";
6
8
  import { READ_ONLY_TOOL, WRITE_TOOL } from "../annotations.js";
9
+ import { IG_PROFILE_CACHE_PREFIX } from "./profile.js";
10
+ // Counts code points (the spread iterator yields one entry per code point) rather
11
+ // than UTF-16 code units, so emoji-heavy strings under Meta's documented
12
+ // "character" cap aren't falsely rejected by the schema.
13
+ const captionSchema = z.string()
14
+ .refine((s) => [...s].length <= 2200, { message: "Caption must be 2200 characters or fewer" })
15
+ .optional();
16
+ const altTextSchema = z.string()
17
+ .refine((s) => [...s].length <= 1000, { message: "alt_text must be 1000 characters or fewer" })
18
+ .optional();
7
19
  const collaboratorUsername = z
8
20
  .string()
9
21
  .trim()
@@ -26,79 +38,79 @@ export function registerIgPublishingTools(server, client) {
26
38
  description: "Publish a photo to Instagram. Two-step process: creates container then publishes. Requires image_url (publicly accessible HTTPS URL).",
27
39
  inputSchema: {
28
40
  image_url: httpsUrl.describe("Public HTTPS URL of the image (JPEG only)"),
29
- caption: z.string().optional().describe("Post caption (max 2200 chars)"),
41
+ caption: captionSchema.describe("Post caption (max 2200 chars)"),
30
42
  location_id: z.string().optional().describe("Facebook Page location ID"),
31
43
  user_tags: z.string().optional().describe("JSON array of user tags: [{username, x, y}]"),
32
- alt_text: z.string().optional().describe("Alt text for accessibility"),
44
+ alt_text: altTextSchema.describe("Alt text for accessibility (max 1000 chars per Meta's Instagram media spec)"),
33
45
  collaborators: collaboratorsSchema,
34
46
  },
35
47
  annotations: WRITE_TOOL,
36
- }, async ({ image_url, caption, location_id, user_tags, alt_text, collaborators }) => {
48
+ }, async ({ image_url, caption, location_id, user_tags, alt_text, collaborators }, extra) => {
49
+ let step = "container creation";
50
+ let containerId;
37
51
  try {
38
- const params = { image_url };
39
- if (caption)
40
- params.caption = caption;
41
- if (location_id)
42
- params.location_id = location_id;
43
- if (user_tags)
44
- params.user_tags = user_tags;
45
- if (alt_text)
46
- params.alt_text = alt_text;
47
- if (collaborators?.length)
48
- params.collaborators = JSON.stringify(collaborators);
49
- // Step 1: Create container
52
+ const params = buildParams({ image_url }, {
53
+ caption,
54
+ location_id,
55
+ user_tags,
56
+ alt_text,
57
+ collaborators: collaborators?.length ? JSON.stringify(collaborators) : undefined,
58
+ });
50
59
  const { data: container } = await client.ig("POST", `/${client.igUserId}/media`, params);
51
60
  if (typeof container.id !== "string")
52
61
  throw new Error("Container creation did not return a valid id");
53
- const containerId = container.id;
54
- // Step 2: Wait for container to be ready
55
- await waitForIgContainer(client, containerId);
56
- // Step 3: Publish
62
+ containerId = container.id;
63
+ step = "processing";
64
+ await waitForIgContainer(client, containerId, IMAGE_PROCESSING_TIMEOUT, { onProgress: makeProgressNotifier(extra) });
65
+ step = "publishing";
57
66
  const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/media_publish`, {
58
67
  creation_id: containerId,
59
68
  });
69
+ client.invalidateCache(IG_PROFILE_CACHE_PREFIX);
60
70
  return formatResponse(data, rateLimit);
61
71
  }
62
72
  catch (error) {
63
- return formatErrorResponse(error, "Publish photo");
73
+ return formatErrorResponse(error, "Publish photo", { step, containerId });
64
74
  }
65
75
  });
66
76
  // ─── ig_publish_video ────────────────────────────────────────
67
77
  server.registerTool("ig_publish_video", {
68
- description: "[DEPRECATED] Use ig_publish_reel instead. Publishes via media_type=REELS under the hood; the legacy VIDEO media_type was deprecated by Meta on Nov 9, 2023. Kept for backward compatibility — new integrations should use ig_publish_reel which exposes Reels-specific options (cover_url, share_to_feed, alt_text).",
78
+ description: "[DEPRECATED] Use ig_publish_reel instead. Publishes via media_type=REELS under the hood; the legacy VIDEO media_type was deprecated by Meta on Nov 9, 2023. Kept for backward compatibility — new integrations should use ig_publish_reel which exposes Reels-specific options (cover_url, share_to_feed).",
69
79
  inputSchema: {
70
80
  video_url: httpsUrl.describe("Public HTTPS URL of the video"),
71
- caption: z.string().optional().describe("Post caption"),
81
+ caption: captionSchema.describe("Post caption (max 2200 chars)"),
72
82
  thumb_offset: z.number().optional().describe("Thumbnail offset in ms"),
73
83
  location_id: z.string().optional().describe("Facebook Page location ID"),
74
84
  collaborators: collaboratorsSchema,
75
85
  },
76
86
  annotations: WRITE_TOOL,
77
- }, async ({ video_url, caption, thumb_offset, location_id, collaborators }) => {
87
+ }, async ({ video_url, caption, thumb_offset, location_id, collaborators }, extra) => {
88
+ let step = "container creation";
89
+ let containerId;
78
90
  try {
79
91
  // share_to_feed: true preserves the legacy feed placement of the deprecated
80
92
  // VIDEO media_type — without it, REELS containers default to the Reels tab only.
81
- const params = { video_url, media_type: "REELS", share_to_feed: true };
82
- if (caption)
83
- params.caption = caption;
84
- if (thumb_offset !== undefined)
85
- params.thumb_offset = thumb_offset;
86
- if (location_id)
87
- params.location_id = location_id;
88
- if (collaborators?.length)
89
- params.collaborators = JSON.stringify(collaborators);
93
+ const params = buildParams({ video_url, media_type: "REELS", share_to_feed: true }, {
94
+ caption,
95
+ thumb_offset,
96
+ location_id,
97
+ collaborators: collaborators?.length ? JSON.stringify(collaborators) : undefined,
98
+ });
90
99
  const { data: container } = await client.ig("POST", `/${client.igUserId}/media`, params);
91
100
  if (typeof container.id !== "string")
92
101
  throw new Error("Container creation did not return a valid id");
93
- const containerId = container.id;
94
- await waitForIgContainer(client, containerId, VIDEO_PROCESSING_TIMEOUT);
102
+ containerId = container.id;
103
+ step = "processing";
104
+ await waitForIgContainer(client, containerId, VIDEO_PROCESSING_TIMEOUT, { onProgress: makeProgressNotifier(extra) });
105
+ step = "publishing";
95
106
  const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/media_publish`, {
96
107
  creation_id: containerId,
97
108
  });
109
+ client.invalidateCache(IG_PROFILE_CACHE_PREFIX);
98
110
  return formatResponse(data, rateLimit);
99
111
  }
100
112
  catch (error) {
101
- return formatErrorResponse(error, "Publish video");
113
+ return formatErrorResponse(error, "Publish video", { step, containerId });
102
114
  }
103
115
  });
104
116
  // ─── ig_publish_carousel ─────────────────────────────────────
@@ -109,65 +121,87 @@ export function registerIgPublishingTools(server, client) {
109
121
  z.object({
110
122
  type: z.literal("IMAGE"),
111
123
  url: httpsUrl.describe("Public HTTPS URL of the image (JPEG only)"),
112
- alt_text: z.string().optional().describe("Alt text for accessibility (IMAGE items only)"),
124
+ alt_text: altTextSchema.describe("Alt text for accessibility (IMAGE items only, max 1000 chars per Meta's Instagram media spec)"),
113
125
  }),
114
126
  z.object({
115
127
  type: z.literal("VIDEO"),
116
128
  url: httpsUrl.describe("Public HTTPS URL of the video"),
117
129
  }),
118
130
  ])).min(2).max(10).describe("Array of media items"),
119
- caption: z.string().optional().describe("Post caption"),
131
+ caption: captionSchema.describe("Post caption (max 2200 chars)"),
120
132
  location_id: z.string().optional().describe("Facebook Page location ID"),
121
133
  collaborators: collaboratorsSchema,
122
134
  },
123
135
  annotations: WRITE_TOOL,
124
- }, async ({ items, caption, location_id, collaborators }) => {
136
+ }, async ({ items, caption, location_id, collaborators }, extra) => {
137
+ // Parallel child polls below would otherwise emit non-monotonic
138
+ // `progress` values across the shared progressToken.
139
+ const onProgress = makeProgressNotifier(extra, "shared");
140
+ let step = "child container creation";
141
+ let containerId;
142
+ // Promise.all rejects with the first child to throw; JS is single-threaded,
143
+ // so the first catch wins the `=== undefined` race here.
144
+ let firstFailingChildStep;
145
+ let firstFailingChildId;
125
146
  try {
126
147
  // Children are independent — create them in parallel. Errors propagate
127
148
  // unwrapped so formatErrorResponse keeps MetaApiError categorization.
128
149
  const childIds = await Promise.all(items.map(async (item) => {
129
- const params = { is_carousel_item: true };
130
- if (item.type === "IMAGE") {
131
- params.image_url = item.url;
132
- if (item.alt_text)
133
- params.alt_text = item.alt_text;
150
+ let myStep = "child container creation";
151
+ let myContainerId;
152
+ try {
153
+ const params = buildParams({ is_carousel_item: true }, {
154
+ image_url: item.type === "IMAGE" ? item.url : undefined,
155
+ video_url: item.type === "VIDEO" ? item.url : undefined,
156
+ media_type: item.type === "VIDEO" ? "VIDEO" : undefined,
157
+ alt_text: item.type === "IMAGE" ? item.alt_text : undefined,
158
+ });
159
+ const { data: child } = await client.ig("POST", `/${client.igUserId}/media`, params);
160
+ if (typeof child.id !== "string")
161
+ throw new Error("Container creation did not return a valid id");
162
+ myContainerId = child.id;
163
+ myStep = "child processing";
164
+ await waitForIgContainer(client, myContainerId, item.type === "VIDEO" ? VIDEO_PROCESSING_TIMEOUT : IMAGE_PROCESSING_TIMEOUT, { onProgress });
165
+ return myContainerId;
134
166
  }
135
- else {
136
- params.video_url = item.url;
137
- params.media_type = "VIDEO";
167
+ catch (e) {
168
+ if (firstFailingChildStep === undefined) {
169
+ firstFailingChildStep = myStep;
170
+ firstFailingChildId = myContainerId;
171
+ }
172
+ throw e;
138
173
  }
139
- const { data: child } = await client.ig("POST", `/${client.igUserId}/media`, params);
140
- if (typeof child.id !== "string")
141
- throw new Error("Container creation did not return a valid id");
142
- const childId = child.id;
143
- await waitForIgContainer(client, childId, item.type === "VIDEO" ? VIDEO_PROCESSING_TIMEOUT : IMAGE_PROCESSING_TIMEOUT);
144
- return childId;
145
174
  }));
146
- // Step 2: Create carousel container
147
- const carouselParams = {
148
- media_type: "CAROUSEL",
149
- children: childIds.join(","),
150
- };
151
- if (caption)
152
- carouselParams.caption = caption;
153
- if (location_id)
154
- carouselParams.location_id = location_id;
155
- if (collaborators?.length)
156
- carouselParams.collaborators = JSON.stringify(collaborators);
175
+ step = "parent container creation";
176
+ const carouselParams = buildParams({ media_type: "CAROUSEL", children: childIds.join(",") }, {
177
+ caption,
178
+ location_id,
179
+ collaborators: collaborators?.length ? JSON.stringify(collaborators) : undefined,
180
+ });
157
181
  const { data: carousel } = await client.ig("POST", `/${client.igUserId}/media`, carouselParams);
158
182
  if (typeof carousel.id !== "string")
159
183
  throw new Error("Container creation did not return a valid id");
160
- const carouselId = carousel.id;
161
- // Step 3: Wait for carousel container to be ready
162
- await waitForIgContainer(client, carouselId);
163
- // Step 4: Publish
184
+ containerId = carousel.id;
185
+ step = "parent processing";
186
+ await waitForIgContainer(client, containerId, IMAGE_PROCESSING_TIMEOUT, { onProgress });
187
+ step = "publishing";
164
188
  const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/media_publish`, {
165
- creation_id: carouselId,
189
+ creation_id: containerId,
166
190
  });
191
+ client.invalidateCache(IG_PROFILE_CACHE_PREFIX);
167
192
  return formatResponse(data, rateLimit);
168
193
  }
169
194
  catch (error) {
170
- return formatErrorResponse(error, "Publish carousel");
195
+ return formatErrorResponse(error, "Publish carousel", {
196
+ step: firstFailingChildStep ?? step,
197
+ containerId: firstFailingChildId ?? containerId,
198
+ });
199
+ }
200
+ finally {
201
+ // Once Promise.all has rejected and we've returned an error, the still-
202
+ // running sibling polls must not emit any more notifications for this
203
+ // progressToken — MCP forbids progress after request completion.
204
+ onProgress?.stop();
171
205
  }
172
206
  });
173
207
  // ─── ig_publish_reel ─────────────────────────────────────────
@@ -175,38 +209,39 @@ export function registerIgPublishingTools(server, client) {
175
209
  description: "Publish a Reel (short video). Waits for video processing.",
176
210
  inputSchema: {
177
211
  video_url: httpsUrl.describe("Public HTTPS URL of the video"),
178
- caption: z.string().optional().describe("Reel caption"),
212
+ caption: captionSchema.describe("Reel caption (max 2200 chars)"),
179
213
  cover_url: httpsUrl.optional().describe("Custom cover image HTTPS URL"),
180
214
  share_to_feed: z.boolean().optional().describe("Also share to feed (default true)"),
181
215
  thumb_offset: z.number().optional().describe("Thumbnail offset in ms"),
182
216
  collaborators: collaboratorsSchema,
183
217
  },
184
218
  annotations: WRITE_TOOL,
185
- }, async ({ video_url, caption, cover_url, share_to_feed, thumb_offset, collaborators }) => {
219
+ }, async ({ video_url, caption, cover_url, share_to_feed, thumb_offset, collaborators }, extra) => {
220
+ let step = "container creation";
221
+ let containerId;
186
222
  try {
187
- const params = { video_url, media_type: "REELS" };
188
- if (caption)
189
- params.caption = caption;
190
- if (cover_url)
191
- params.cover_url = cover_url;
192
- if (share_to_feed !== undefined)
193
- params.share_to_feed = share_to_feed;
194
- if (thumb_offset !== undefined)
195
- params.thumb_offset = thumb_offset;
196
- if (collaborators?.length)
197
- params.collaborators = JSON.stringify(collaborators);
223
+ const params = buildParams({ video_url, media_type: "REELS" }, {
224
+ caption,
225
+ cover_url,
226
+ share_to_feed,
227
+ thumb_offset,
228
+ collaborators: collaborators?.length ? JSON.stringify(collaborators) : undefined,
229
+ });
198
230
  const { data: container } = await client.ig("POST", `/${client.igUserId}/media`, params);
199
231
  if (typeof container.id !== "string")
200
232
  throw new Error("Container creation did not return a valid id");
201
- const containerId = container.id;
202
- await waitForIgContainer(client, containerId, VIDEO_PROCESSING_TIMEOUT);
233
+ containerId = container.id;
234
+ step = "processing";
235
+ await waitForIgContainer(client, containerId, VIDEO_PROCESSING_TIMEOUT, { onProgress: makeProgressNotifier(extra) });
236
+ step = "publishing";
203
237
  const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/media_publish`, {
204
238
  creation_id: containerId,
205
239
  });
240
+ client.invalidateCache(IG_PROFILE_CACHE_PREFIX);
206
241
  return formatResponse(data, rateLimit);
207
242
  }
208
243
  catch (error) {
209
- return formatErrorResponse(error, "Publish reel");
244
+ return formatErrorResponse(error, "Publish reel", { step, containerId });
210
245
  }
211
246
  });
212
247
  // ─── ig_publish_story ────────────────────────────────────────
@@ -217,27 +252,29 @@ export function registerIgPublishingTools(server, client) {
217
252
  media_url: httpsUrl.describe("Public HTTPS URL of the media"),
218
253
  },
219
254
  annotations: WRITE_TOOL,
220
- }, async ({ media_type, media_url }) => {
255
+ }, async ({ media_type, media_url }, extra) => {
256
+ let step = "container creation";
257
+ let containerId;
221
258
  try {
222
- const params = { media_type: "STORIES" };
223
- if (media_type === "IMAGE") {
224
- params.image_url = media_url;
225
- }
226
- else {
227
- params.video_url = media_url;
228
- }
259
+ const params = buildParams({ media_type: "STORIES" }, {
260
+ image_url: media_type === "IMAGE" ? media_url : undefined,
261
+ video_url: media_type === "VIDEO" ? media_url : undefined,
262
+ });
229
263
  const { data: container } = await client.ig("POST", `/${client.igUserId}/media`, params);
230
264
  if (typeof container.id !== "string")
231
265
  throw new Error("Container creation did not return a valid id");
232
- const containerId = container.id;
233
- await waitForIgContainer(client, containerId, media_type === "VIDEO" ? VIDEO_PROCESSING_TIMEOUT : IMAGE_PROCESSING_TIMEOUT);
266
+ containerId = container.id;
267
+ step = "processing";
268
+ await waitForIgContainer(client, containerId, media_type === "VIDEO" ? VIDEO_PROCESSING_TIMEOUT : IMAGE_PROCESSING_TIMEOUT, { onProgress: makeProgressNotifier(extra) });
269
+ step = "publishing";
234
270
  const { data, rateLimit } = await client.ig("POST", `/${client.igUserId}/media_publish`, {
235
271
  creation_id: containerId,
236
272
  });
273
+ client.invalidateCache(IG_PROFILE_CACHE_PREFIX);
237
274
  return formatResponse(data, rateLimit);
238
275
  }
239
276
  catch (error) {
240
- return formatErrorResponse(error, "Publish story");
277
+ return formatErrorResponse(error, "Publish story", { step, containerId });
241
278
  }
242
279
  });
243
280
  // ─── ig_get_container_status ─────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../../src/tools/instagram/publishing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"publishing.js","sourceRoot":"","sources":["../../../src/tools/instagram/publishing.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;AAM3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAoIjF"}
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;AAgC3D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsIjF"}
@@ -3,10 +3,24 @@ import { httpsUrl } from "../../schemas.js";
3
3
  import { formatErrorResponse } from "../../utils/errors.js";
4
4
  import { formatResponse } from "../../utils/response.js";
5
5
  import { READ_ONLY_TOOL, WRITE_TOOL, WRITE_IDEMPOTENT_TOOL } from "../annotations.js";
6
+ function applyTokenIfPresent(client, platform, data, source) {
7
+ // Guard against malformed/empty responses — overwriting a working token with
8
+ // `undefined` or `""` would silently brick the running session (#65).
9
+ const newToken = typeof data.access_token === "string" && data.access_token
10
+ ? data.access_token
11
+ : undefined;
12
+ if (!newToken)
13
+ return;
14
+ client.updateConfig(platform === "threads"
15
+ ? { threadsAccessToken: newToken }
16
+ : { instagramAccessToken: newToken });
17
+ const platformLabel = platform === "threads" ? "Threads" : "Instagram";
18
+ console.error(`[meta-mcp] ${platformLabel} access token updated in-memory after ${source}; subsequent tool calls will use the new token (no restart required).`);
19
+ }
6
20
  export function registerMetaAuthTools(server, client) {
7
21
  // ─── meta_exchange_token ─────────────────────────────────────
8
22
  server.registerTool("meta_exchange_token", {
9
- description: "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.",
23
+ description: "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. On success the new token is also applied in-memory to the running server, so subsequent tool calls use it immediately — no restart required (#65).",
10
24
  inputSchema: {
11
25
  short_lived_token: z.string().describe("Short-lived access token to exchange"),
12
26
  platform: z.enum(["instagram", "threads"]).describe("Target platform: 'instagram' or 'threads'"),
@@ -17,6 +31,7 @@ export function registerMetaAuthTools(server, client) {
17
31
  const { data, rateLimit } = platform === "threads"
18
32
  ? await client.threadsExchangeToken(short_lived_token)
19
33
  : await client.igExchangeToken(short_lived_token);
34
+ applyTokenIfPresent(client, platform, data, "meta_exchange_token");
20
35
  return formatResponse(data, rateLimit);
21
36
  }
22
37
  catch (error) {
@@ -25,7 +40,7 @@ export function registerMetaAuthTools(server, client) {
25
40
  });
26
41
  // ─── meta_refresh_token ──────────────────────────────────────
27
42
  server.registerTool("meta_refresh_token", {
28
- description: "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.",
43
+ description: "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. On success the new token is also applied in-memory to the running server, so subsequent tool calls use it immediately — no restart required (#65).",
29
44
  inputSchema: {
30
45
  long_lived_token: z.string().describe("Current long-lived access token to refresh"),
31
46
  platform: z.enum(["instagram", "threads"]).describe("Target platform: 'instagram' or 'threads'"),
@@ -36,6 +51,7 @@ export function registerMetaAuthTools(server, client) {
36
51
  const { data, rateLimit } = platform === "threads"
37
52
  ? await client.threadsRefreshToken(long_lived_token)
38
53
  : await client.igRefreshToken(long_lived_token);
54
+ applyTokenIfPresent(client, platform, data, "meta_refresh_token");
39
55
  return formatResponse(data, rateLimit);
40
56
  }
41
57
  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;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEtF,MAAM,UAAU,qBAAqB,CAAC,MAAiB,EAAE,MAAkB;IACzE,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,WAAW,EAAE,mMAAmM;QAChN,WAAW,EAAE;YACX,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;YAC9E,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;SACjG;QACD,WAAW,EAAE,UAAU;KACxB,EACD,KAAK,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,KAAK,SAAS;gBAChD,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;gBACtD,CAAC,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACpD,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,8NAA8N;QAC3O,WAAW,EAAE;YACX,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACnF,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;SACjG;QACD,WAAW,EAAE,UAAU;KACxB,EACD,KAAK,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,KAAK,SAAS;gBAChD,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;gBACpD,CAAC,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAClD,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EAAE,0FAA0F;QACvG,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;SAC5D;QACD,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,mEAAmE;QAChF,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;gBAC3D,MAAM,EAAE,qDAAqD;aAC9D,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EAAE,yHAAyH;QACtI,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;YACpG,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YAC7D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YACvE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;SACnG;QACD,WAAW,EAAE,qBAAqB;KACnC,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE;QACvD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,oBAAoB,EAAE;gBAC1E,MAAM;gBACN,YAAY;gBACZ,YAAY;gBACZ,MAAM;aACP,CAAC,CAAC;YACH,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;YAC3E,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/tools/meta/auth.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/insights.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAc,MAAM,+BAA+B,CAAC;AAQvE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA+CvF"}
1
+ {"version":3,"file":"insights.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/insights.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAS3D,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA6CvF"}
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { metaId } from "../../schemas.js";
3
3
  import { formatErrorResponse } from "../../utils/errors.js";
4
4
  import { formatResponse } from "../../utils/response.js";
5
+ import { buildParams } from "../../utils/params.js";
5
6
  import { READ_ONLY_TOOL } from "../annotations.js";
6
7
  const POST_INSIGHTS_DEFAULT_METRICS = "views,likes,replies,reposts,quotes,shares";
7
8
  export function registerThreadsInsightTools(server, client) {
@@ -34,11 +35,7 @@ export function registerThreadsInsightTools(server, client) {
34
35
  annotations: READ_ONLY_TOOL,
35
36
  }, async ({ metric, period, since, until }) => {
36
37
  try {
37
- const params = { metric, period };
38
- if (since)
39
- params.since = since;
40
- if (until)
41
- params.until = until;
38
+ const params = buildParams({ metric, period }, { since, until });
42
39
  const { data, rateLimit } = await client.threads("GET", `/${client.threadsUserId}/threads_insights`, params);
43
40
  return formatResponse(data, rateLimit);
44
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../src/tools/threads/insights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,6BAA6B,GAAG,2CAA2C,CAAC;AAElF,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,MAAkB;IAC/E,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EAAE,uDAAuD,6BAA6B,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI;QAC3H,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,qCAAqC,6BAA6B,GAAG,CAAC;SACrJ;QACD,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,OAAO,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5F,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EAAE,mJAAmJ;QAChK,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0GAA0G,CAAC;YACvI,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sKAAsK,CAAC;YAC9O,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;YACpG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;SACnG;QACD,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAe,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAC9C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAChC,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAChC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,aAAa,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC7G,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"insights.js","sourceRoot":"","sources":["../../../src/tools/threads/insights.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,6BAA6B,GAAG,2CAA2C,CAAC;AAElF,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,MAAkB;IAC/E,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EAAE,uDAAuD,6BAA6B,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI;QAC3H,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC;YAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,QAAQ,CAAC,qCAAqC,6BAA6B,GAAG,CAAC;SACrJ;QACD,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,OAAO,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5F,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CACF,CAAC;IAEF,gEAAgE;IAChE,MAAM,CAAC,YAAY,CACjB,2BAA2B,EAC3B;QACE,WAAW,EAAE,mJAAmJ;QAChK,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0GAA0G,CAAC;YACvI,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sKAAsK,CAAC;YAC9O,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;YACpG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;SACnG;QACD,WAAW,EAAE,cAAc;KAC5B,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACjE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,aAAa,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC7G,OAAO,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/media.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;AAyBvE,eAAO,MAAM,oBAAoB,uEAQ9B,CAAC;AAEJ,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA4FrF"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/tools/threads/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAQ3D,eAAO,MAAM,oBAAoB,uEAQ9B,CAAC;AAEJ,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAkFrF"}
@@ -1,26 +1,10 @@
1
1
  import { z } from "zod";
2
2
  import { metaId } from "../../schemas.js";
3
+ import { THREADS_MEDIA_FIELDS } from "../../constants/fields.js";
3
4
  import { formatErrorResponse } from "../../utils/errors.js";
4
5
  import { formatResponse } from "../../utils/response.js";
6
+ import { buildParams } from "../../utils/params.js";
5
7
  import { READ_ONLY_TOOL } from "../annotations.js";
6
- const THREADS_MEDIA_FIELDS = [
7
- "id",
8
- "media_product_type",
9
- "media_type",
10
- "media_url",
11
- "permalink",
12
- "text",
13
- "timestamp",
14
- "shortcode",
15
- "is_quote_post",
16
- "has_replies",
17
- "reply_audience",
18
- "topic_tag",
19
- "link_attachment_url",
20
- "poll_attachment{option_a,option_b,option_c,option_d,option_a_votes_percentage,option_b_votes_percentage,option_c_votes_percentage,option_d_votes_percentage,total_votes,expiration_timestamp}",
21
- "gif_url",
22
- "alt_text",
23
- ].join(",");
24
8
  export const authorUsernameSchema = z
25
9
  .string()
26
10
  .trim()
@@ -43,17 +27,7 @@ export function registerThreadsMediaTools(server, client) {
43
27
  annotations: READ_ONLY_TOOL,
44
28
  }, async ({ limit, since, until, after, before, fields }) => {
45
29
  try {
46
- const params = { fields };
47
- if (limit !== undefined)
48
- params.limit = limit;
49
- if (since)
50
- params.since = since;
51
- if (until)
52
- params.until = until;
53
- if (after)
54
- params.after = after;
55
- if (before)
56
- params.before = before;
30
+ const params = buildParams({ fields }, { limit, since, until, after, before });
57
31
  const { data, rateLimit } = await client.threads("GET", `/${client.threadsUserId}/threads`, params);
58
32
  return formatResponse(data, rateLimit);
59
33
  }
@@ -95,26 +69,10 @@ export function registerThreadsMediaTools(server, client) {
95
69
  annotations: READ_ONLY_TOOL,
96
70
  }, async ({ q, search_type, search_mode, media_type, author_username, since, until, limit, after }) => {
97
71
  try {
98
- const params = {
72
+ const params = buildParams({
99
73
  q,
100
74
  fields: "id,text,username,permalink,timestamp,media_type,media_url,topic_tag",
101
- };
102
- if (search_type)
103
- params.search_type = search_type;
104
- if (search_mode)
105
- params.search_mode = search_mode;
106
- if (media_type)
107
- params.media_type = media_type;
108
- if (author_username)
109
- params.author_username = author_username;
110
- if (since)
111
- params.since = since;
112
- if (until)
113
- params.until = until;
114
- if (limit !== undefined)
115
- params.limit = limit;
116
- if (after)
117
- params.after = after;
75
+ }, { search_type, search_mode, media_type, author_username, since, until, limit, after });
118
76
  const { data, rateLimit } = await client.threads("GET", `/keyword_search`, params);
119
77
  return formatResponse(data, rateLimit);
120
78
  }