@apteva/integrations 0.3.62 → 0.15.3

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 (434) hide show
  1. package/dist/aws-sigv4.d.ts +32 -0
  2. package/dist/aws-sigv4.d.ts.map +1 -0
  3. package/dist/aws-sigv4.js +126 -0
  4. package/dist/aws-sigv4.js.map +1 -0
  5. package/dist/explorer/main.js +21617 -0
  6. package/dist/explorer/main.js.map +90 -0
  7. package/dist/explorer/style.css +2 -0
  8. package/dist/http-executor.d.ts.map +1 -1
  9. package/dist/http-executor.js +145 -12
  10. package/dist/http-executor.js.map +1 -1
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js.map +1 -1
  14. package/dist/mcp-generator.d.ts +7 -2
  15. package/dist/mcp-generator.d.ts.map +1 -1
  16. package/dist/mcp-generator.js +46 -5
  17. package/dist/mcp-generator.js.map +1 -1
  18. package/dist/oauth.js +1 -1
  19. package/dist/oauth.js.map +1 -1
  20. package/dist/types.d.ts +251 -3
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/ui/github/ActivityFeed.d.ts +24 -0
  23. package/dist/ui/github/ActivityFeed.d.ts.map +1 -0
  24. package/dist/ui/github/ActivityFeed.js +106 -0
  25. package/dist/ui/github/ActivityFeed.js.map +1 -0
  26. package/dist/ui/github/ActivityFeed.mjs +3 -0
  27. package/dist/ui/github/ActivityFeed.mjs.map +29 -0
  28. package/dist/ui/github/CommitCard.d.ts +24 -0
  29. package/dist/ui/github/CommitCard.d.ts.map +1 -0
  30. package/dist/ui/github/CommitCard.js +102 -0
  31. package/dist/ui/github/CommitCard.js.map +1 -0
  32. package/dist/ui/github/CommitCard.mjs +5 -0
  33. package/dist/ui/github/CommitCard.mjs.map +11 -0
  34. package/dist/ui/github/IssueCard.d.ts +33 -0
  35. package/dist/ui/github/IssueCard.d.ts.map +1 -0
  36. package/dist/ui/github/IssueCard.js +131 -0
  37. package/dist/ui/github/IssueCard.js.map +1 -0
  38. package/dist/ui/github/IssueCard.mjs +3 -0
  39. package/dist/ui/github/IssueCard.mjs.map +21 -0
  40. package/dist/ui/github/PullRequestCard.d.ts +36 -0
  41. package/dist/ui/github/PullRequestCard.d.ts.map +1 -0
  42. package/dist/ui/github/PullRequestCard.js +158 -0
  43. package/dist/ui/github/PullRequestCard.js.map +1 -0
  44. package/dist/ui/github/PullRequestCard.mjs +3 -0
  45. package/dist/ui/github/PullRequestCard.mjs.map +22 -0
  46. package/dist/ui/github/WorkflowRunCard.d.ts +30 -0
  47. package/dist/ui/github/WorkflowRunCard.d.ts.map +1 -0
  48. package/dist/ui/github/WorkflowRunCard.js +124 -0
  49. package/dist/ui/github/WorkflowRunCard.js.map +1 -0
  50. package/dist/ui/github/WorkflowRunCard.mjs +3 -0
  51. package/dist/ui/github/WorkflowRunCard.mjs.map +11 -0
  52. package/dist/ui/github/lib/github.d.ts +43 -0
  53. package/dist/ui/github/lib/github.d.ts.map +1 -0
  54. package/dist/ui/github/lib/github.js +151 -0
  55. package/dist/ui/github/lib/github.js.map +1 -0
  56. package/dist/ui/hubspot/ActivityFeed.d.ts +22 -0
  57. package/dist/ui/hubspot/ActivityFeed.d.ts.map +1 -0
  58. package/dist/ui/hubspot/ActivityFeed.js +52 -0
  59. package/dist/ui/hubspot/ActivityFeed.js.map +1 -0
  60. package/dist/ui/hubspot/ActivityFeed.mjs +3 -0
  61. package/dist/ui/hubspot/ActivityFeed.mjs.map +26 -0
  62. package/dist/ui/hubspot/CompanyCard.d.ts +22 -0
  63. package/dist/ui/hubspot/CompanyCard.d.ts.map +1 -0
  64. package/dist/ui/hubspot/CompanyCard.js +63 -0
  65. package/dist/ui/hubspot/CompanyCard.js.map +1 -0
  66. package/dist/ui/hubspot/CompanyCard.mjs +3 -0
  67. package/dist/ui/hubspot/CompanyCard.mjs.map +11 -0
  68. package/dist/ui/hubspot/ContactCard.d.ts +22 -0
  69. package/dist/ui/hubspot/ContactCard.d.ts.map +1 -0
  70. package/dist/ui/hubspot/ContactCard.js +62 -0
  71. package/dist/ui/hubspot/ContactCard.js.map +1 -0
  72. package/dist/ui/hubspot/ContactCard.mjs +3 -0
  73. package/dist/ui/hubspot/ContactCard.mjs.map +11 -0
  74. package/dist/ui/hubspot/ContactList.d.ts +21 -0
  75. package/dist/ui/hubspot/ContactList.d.ts.map +1 -0
  76. package/dist/ui/hubspot/ContactList.js +31 -0
  77. package/dist/ui/hubspot/ContactList.js.map +1 -0
  78. package/dist/ui/hubspot/ContactList.mjs +3 -0
  79. package/dist/ui/hubspot/ContactList.mjs.map +11 -0
  80. package/dist/ui/hubspot/DealCard.d.ts +23 -0
  81. package/dist/ui/hubspot/DealCard.d.ts.map +1 -0
  82. package/dist/ui/hubspot/DealCard.js +63 -0
  83. package/dist/ui/hubspot/DealCard.js.map +1 -0
  84. package/dist/ui/hubspot/DealCard.mjs +3 -0
  85. package/dist/ui/hubspot/DealCard.mjs.map +11 -0
  86. package/dist/ui/hubspot/DealList.d.ts +24 -0
  87. package/dist/ui/hubspot/DealList.d.ts.map +1 -0
  88. package/dist/ui/hubspot/DealList.js +35 -0
  89. package/dist/ui/hubspot/DealList.js.map +1 -0
  90. package/dist/ui/hubspot/DealList.mjs +3 -0
  91. package/dist/ui/hubspot/DealList.mjs.map +11 -0
  92. package/dist/ui/hubspot/EmailCard.d.ts +25 -0
  93. package/dist/ui/hubspot/EmailCard.d.ts.map +1 -0
  94. package/dist/ui/hubspot/EmailCard.js +62 -0
  95. package/dist/ui/hubspot/EmailCard.js.map +1 -0
  96. package/dist/ui/hubspot/EmailCard.mjs +5 -0
  97. package/dist/ui/hubspot/EmailCard.mjs.map +11 -0
  98. package/dist/ui/hubspot/InboxStrip.d.ts +23 -0
  99. package/dist/ui/hubspot/InboxStrip.d.ts.map +1 -0
  100. package/dist/ui/hubspot/InboxStrip.js +36 -0
  101. package/dist/ui/hubspot/InboxStrip.js.map +1 -0
  102. package/dist/ui/hubspot/InboxStrip.mjs +3 -0
  103. package/dist/ui/hubspot/InboxStrip.mjs.map +11 -0
  104. package/dist/ui/hubspot/PipelineStrip.d.ts +22 -0
  105. package/dist/ui/hubspot/PipelineStrip.d.ts.map +1 -0
  106. package/dist/ui/hubspot/PipelineStrip.js +54 -0
  107. package/dist/ui/hubspot/PipelineStrip.js.map +1 -0
  108. package/dist/ui/hubspot/PipelineStrip.mjs +3 -0
  109. package/dist/ui/hubspot/PipelineStrip.mjs.map +11 -0
  110. package/dist/ui/hubspot/TicketCard.d.ts +25 -0
  111. package/dist/ui/hubspot/TicketCard.d.ts.map +1 -0
  112. package/dist/ui/hubspot/TicketCard.js +53 -0
  113. package/dist/ui/hubspot/TicketCard.js.map +1 -0
  114. package/dist/ui/hubspot/TicketCard.mjs +3 -0
  115. package/dist/ui/hubspot/TicketCard.mjs.map +21 -0
  116. package/dist/ui/hubspot/TicketList.d.ts +21 -0
  117. package/dist/ui/hubspot/TicketList.d.ts.map +1 -0
  118. package/dist/ui/hubspot/TicketList.js +33 -0
  119. package/dist/ui/hubspot/TicketList.js.map +1 -0
  120. package/dist/ui/hubspot/TicketList.mjs +3 -0
  121. package/dist/ui/hubspot/TicketList.mjs.map +11 -0
  122. package/dist/ui/hubspot/lib/hubspot.d.ts +24 -0
  123. package/dist/ui/hubspot/lib/hubspot.d.ts.map +1 -0
  124. package/dist/ui/hubspot/lib/hubspot.js +176 -0
  125. package/dist/ui/hubspot/lib/hubspot.js.map +1 -0
  126. package/dist/ui/notion/DatabaseCard.d.ts +24 -0
  127. package/dist/ui/notion/DatabaseCard.d.ts.map +1 -0
  128. package/dist/ui/notion/DatabaseCard.js +86 -0
  129. package/dist/ui/notion/DatabaseCard.js.map +1 -0
  130. package/dist/ui/notion/DatabaseCard.mjs +3 -0
  131. package/dist/ui/notion/DatabaseCard.mjs.map +11 -0
  132. package/dist/ui/notion/DatabaseRowList.d.ts +36 -0
  133. package/dist/ui/notion/DatabaseRowList.d.ts.map +1 -0
  134. package/dist/ui/notion/DatabaseRowList.js +87 -0
  135. package/dist/ui/notion/DatabaseRowList.js.map +1 -0
  136. package/dist/ui/notion/DatabaseRowList.mjs +3 -0
  137. package/dist/ui/notion/DatabaseRowList.mjs.map +11 -0
  138. package/dist/ui/notion/PageCard.d.ts +27 -0
  139. package/dist/ui/notion/PageCard.d.ts.map +1 -0
  140. package/dist/ui/notion/PageCard.js +80 -0
  141. package/dist/ui/notion/PageCard.js.map +1 -0
  142. package/dist/ui/notion/PageCard.mjs +3 -0
  143. package/dist/ui/notion/PageCard.mjs.map +11 -0
  144. package/dist/ui/notion/PageList.d.ts +24 -0
  145. package/dist/ui/notion/PageList.d.ts.map +1 -0
  146. package/dist/ui/notion/PageList.js +51 -0
  147. package/dist/ui/notion/PageList.js.map +1 -0
  148. package/dist/ui/notion/PageList.mjs +3 -0
  149. package/dist/ui/notion/PageList.mjs.map +11 -0
  150. package/dist/ui/notion/lib/notion.d.ts +35 -0
  151. package/dist/ui/notion/lib/notion.d.ts.map +1 -0
  152. package/dist/ui/notion/lib/notion.js +119 -0
  153. package/dist/ui/notion/lib/notion.js.map +1 -0
  154. package/dist/xml-to-json.d.ts +20 -0
  155. package/dist/xml-to-json.d.ts.map +1 -0
  156. package/dist/xml-to-json.js +256 -0
  157. package/dist/xml-to-json.js.map +1 -0
  158. package/package.json +12 -1
  159. package/src/apps/adroll.json +254 -0
  160. package/src/apps/ahrefs.json +156 -0
  161. package/src/apps/airtable.json +4 -13
  162. package/src/apps/algolia.json +115 -0
  163. package/src/apps/alibaba-cloud.json +211 -0
  164. package/src/apps/aliexpress.json +369 -0
  165. package/src/apps/alpaca-market-data.json +699 -0
  166. package/src/apps/alpaca-trading.json +214 -989
  167. package/src/apps/amazon-ads.json +249 -0
  168. package/src/apps/amazon-associates.json +102 -0
  169. package/src/apps/amplitude.json +86 -0
  170. package/src/apps/anchor-browser.json +173 -0
  171. package/src/apps/anthropic-api.json +9 -4
  172. package/src/apps/api-sports.json +180 -0
  173. package/src/apps/apple-search-ads.json +266 -0
  174. package/src/apps/auth0.json +126 -0
  175. package/src/apps/awin.json +111 -0
  176. package/src/apps/aws-codebuild.json +139 -0
  177. package/src/apps/aws-mediaconvert.json +196 -0
  178. package/src/apps/aws-s3.json +108 -192
  179. package/src/apps/aws-ses.json +666 -303
  180. package/src/apps/aws-sns.json +128 -106
  181. package/src/apps/azure-container-apps.json +116 -0
  182. package/src/apps/backblaze-b2.json +175 -0
  183. package/src/apps/bamboohr.json +303 -0
  184. package/src/apps/basiq.json +308 -0
  185. package/src/apps/bigcommerce.json +366 -0
  186. package/src/apps/bigquery.json +121 -0
  187. package/src/apps/binance-trading.json +7 -4
  188. package/src/apps/bing-webmaster-tools.json +158 -0
  189. package/src/apps/bitbucket.json +163 -0
  190. package/src/apps/blacksmith.json +81 -0
  191. package/src/apps/bls.json +104 -0
  192. package/src/apps/bluesky.json +74 -0
  193. package/src/apps/braze.json +103 -0
  194. package/src/apps/brevo.json +4 -1
  195. package/src/apps/brightdata.json +94 -0
  196. package/src/apps/browserbase.json +237 -0
  197. package/src/apps/bscscan.json +150 -0
  198. package/src/apps/buffer.json +121 -0
  199. package/src/apps/buildjet.json +80 -0
  200. package/src/apps/builtwith.json +101 -0
  201. package/src/apps/bunny-cdn.json +104 -0
  202. package/src/apps/bunny-stream.json +205 -3
  203. package/src/apps/byrd.json +585 -0
  204. package/src/apps/calendly.json +10 -7
  205. package/src/apps/campaign-manager-360.json +264 -0
  206. package/src/apps/capturekit.json +51 -0
  207. package/src/apps/circleci.json +212 -0
  208. package/src/apps/cirrus-runners.json +75 -0
  209. package/src/apps/cj-affiliate.json +101 -0
  210. package/src/apps/cjdropshipping.json +278 -0
  211. package/src/apps/clerk.json +153 -0
  212. package/src/apps/cloudflare-containers.json +98 -0
  213. package/src/apps/cloudflare-r2.json +180 -0
  214. package/src/apps/cloudflare.json +474 -157
  215. package/src/apps/cloudinary.json +119 -97
  216. package/src/apps/coconut.json +94 -0
  217. package/src/apps/contentful.json +157 -0
  218. package/src/apps/criteo.json +222 -0
  219. package/src/apps/crunchbase.json +104 -0
  220. package/src/apps/customer-io.json +106 -0
  221. package/src/apps/databricks.json +94 -0
  222. package/src/apps/deepgram.json +3 -0
  223. package/src/apps/deepl.json +113 -0
  224. package/src/apps/deepseek.json +5 -2
  225. package/src/apps/depot.json +102 -0
  226. package/src/apps/digitalocean-spaces.json +121 -0
  227. package/src/apps/digitalocean.json +115 -0
  228. package/src/apps/discord.json +90 -1
  229. package/src/apps/docker-build-cloud.json +68 -0
  230. package/src/apps/duffel.json +193 -77
  231. package/src/apps/dux-soup.json +4 -1
  232. package/src/apps/dv360.json +287 -0
  233. package/src/apps/earthly-cloud.json +84 -0
  234. package/src/apps/eia.json +121 -0
  235. package/src/apps/elasticsearch.json +282 -0
  236. package/src/apps/elevenlabs.json +336 -192
  237. package/src/apps/etherscan.json +162 -0
  238. package/src/apps/etsy.json +484 -0
  239. package/src/apps/eventbrite-events.json +5 -2
  240. package/src/apps/exa.json +101 -0
  241. package/src/apps/facebook-ads.json +3 -3
  242. package/src/apps/facebook-api.json +1484 -37
  243. package/src/apps/finnhub.json +232 -0
  244. package/src/apps/flightapi.json +248 -0
  245. package/src/apps/fly-io.json +134 -0
  246. package/src/apps/fred.json +156 -0
  247. package/src/apps/gdelt.json +96 -0
  248. package/src/apps/gelato.json +123 -0
  249. package/src/apps/gemini.json +143 -49
  250. package/src/apps/getscreenshot.json +52 -0
  251. package/src/apps/github.json +355 -39
  252. package/src/apps/gmail.json +151 -2
  253. package/src/apps/gnews.json +71 -0
  254. package/src/apps/google-analytics.json +311 -0
  255. package/src/apps/google-cloud-storage.json +484 -0
  256. package/src/apps/google-docs.json +2 -2
  257. package/src/apps/google-drive.json +2 -2
  258. package/src/apps/google-places.json +127 -0
  259. package/src/apps/google-search-console.json +126 -0
  260. package/src/apps/google-sheets.json +2 -2
  261. package/src/apps/grafana-cloud.json +98 -0
  262. package/src/apps/groq.json +119 -0
  263. package/src/apps/hetzner-object-storage.json +177 -0
  264. package/src/apps/hetzner.json +255 -367
  265. package/src/apps/heygen.json +828 -141
  266. package/src/apps/hive-fulfillment.json +559 -0
  267. package/src/apps/hotjar.json +91 -0
  268. package/src/apps/huawei-cloud.json +189 -0
  269. package/src/apps/huboo.json +286 -0
  270. package/src/apps/hubspot.json +253 -637
  271. package/src/apps/huggingface.json +5 -2
  272. package/src/apps/hunter.json +5 -2
  273. package/src/apps/hyperbrowser.json +205 -0
  274. package/src/apps/idrive-e2.json +128 -0
  275. package/src/apps/impact.json +106 -0
  276. package/src/apps/instagram-api.json +185 -11
  277. package/src/apps/instantly.json +169 -0
  278. package/src/apps/ionos.json +250 -0
  279. package/src/apps/{learning-platform.json → kalio.json} +162 -3
  280. package/src/apps/kalshi.json +144 -0
  281. package/src/apps/keywords-everywhere.json +86 -0
  282. package/src/apps/kickbox.json +71 -0
  283. package/src/apps/launchdarkly.json +111 -0
  284. package/src/apps/leadbyte.json +600 -0
  285. package/src/apps/leadfeeder.json +89 -0
  286. package/src/apps/lemlist.json +109 -0
  287. package/src/apps/linkedin-ads.json +279 -0
  288. package/src/apps/linkedin.json +96 -2
  289. package/src/apps/linode-object-storage.json +183 -0
  290. package/src/apps/linode.json +160 -0
  291. package/src/apps/lnk-bio.json +5 -2
  292. package/src/apps/loom.json +5 -2
  293. package/src/apps/lusha.json +104 -0
  294. package/src/apps/magalu-cloud.json +187 -0
  295. package/src/apps/majestic.json +117 -0
  296. package/src/apps/manifold-markets.json +144 -0
  297. package/src/apps/mapbox.json +118 -0
  298. package/src/apps/microsoft-ads.json +246 -0
  299. package/src/apps/microsoft-onedrive.json +380 -0
  300. package/src/apps/microsoft-teams.json +315 -96
  301. package/src/apps/millionverifier.json +85 -0
  302. package/src/apps/mindee.json +246 -0
  303. package/src/apps/miro.json +138 -0
  304. package/src/apps/mistral.json +129 -0
  305. package/src/apps/mixpanel.json +95 -0
  306. package/src/apps/moz.json +127 -0
  307. package/src/apps/mux.json +201 -0
  308. package/src/apps/namecheap.json +321 -123
  309. package/src/apps/namespace-cloud.json +84 -0
  310. package/src/apps/naver-cloud.json +184 -0
  311. package/src/apps/neon.json +122 -0
  312. package/src/apps/netlify.json +124 -0
  313. package/src/apps/neverbounce.json +92 -0
  314. package/src/apps/newrelic.json +80 -0
  315. package/src/apps/newsapi.json +86 -0
  316. package/src/apps/ngrok.json +29 -0
  317. package/src/apps/nixbuild.json +116 -0
  318. package/src/apps/northflank.json +161 -0
  319. package/src/apps/notion.json +3 -0
  320. package/src/apps/okta.json +131 -0
  321. package/src/apps/omnikit-analytics.json +73 -1
  322. package/src/apps/omnikit-api-gateway.json +74 -2
  323. package/src/apps/omnikit-billing.json +73 -1
  324. package/src/apps/omnikit-cms.json +73 -1
  325. package/src/apps/omnikit-code-ops.json +76 -4
  326. package/src/apps/omnikit-functions.json +74 -2
  327. package/src/apps/omnikit-intelligence.json +176 -33
  328. package/src/apps/omnikit-management.json +73 -1
  329. package/src/apps/omnikit-media.json +73 -1
  330. package/src/apps/omnikit-messaging.json +72 -0
  331. package/src/apps/omnikit-redirects.json +73 -1
  332. package/src/apps/omnikit-sites.json +325 -66
  333. package/src/apps/omnikit-storage.json +104 -7
  334. package/src/apps/omnikit-webhooks.json +73 -1
  335. package/src/apps/omnikit-workflows.json +73 -1
  336. package/src/apps/onesignal.json +108 -0
  337. package/src/apps/openai-api.json +176 -30
  338. package/src/apps/openai-codex.json +187 -0
  339. package/src/apps/opencode-go.json +113 -0
  340. package/src/apps/optinmonster.json +7 -4
  341. package/src/apps/outlook-calendar.json +350 -0
  342. package/src/apps/outlook-mail.json +337 -0
  343. package/src/apps/outscraper.json +118 -0
  344. package/src/apps/ovhcloud.json +209 -0
  345. package/src/apps/paddle.json +170 -0
  346. package/src/apps/pagerduty.json +151 -0
  347. package/src/apps/partnerstack.json +118 -0
  348. package/src/apps/perplexity.json +37 -0
  349. package/src/apps/phantombuster.json +85 -0
  350. package/src/apps/pinecone.json +129 -0
  351. package/src/apps/pinterest-ads.json +261 -0
  352. package/src/apps/pinterest.json +217 -0
  353. package/src/apps/planetscale.json +139 -0
  354. package/src/apps/polygonscan.json +157 -0
  355. package/src/apps/polymarket-clob.json +184 -0
  356. package/src/apps/polymarket-data.json +153 -0
  357. package/src/apps/porkbun.json +609 -145
  358. package/src/apps/posthog.json +107 -0
  359. package/src/apps/pushover.json +28 -0
  360. package/src/apps/quora-ads.json +251 -0
  361. package/src/apps/railway.json +57 -0
  362. package/src/apps/reddit-ads.json +238 -0
  363. package/src/apps/reddit.json +274 -0
  364. package/src/apps/render.json +124 -0
  365. package/src/apps/replicate.json +5 -2
  366. package/src/apps/reply-io.json +111 -0
  367. package/src/apps/resend.json +110 -0
  368. package/src/apps/ringover.json +1144 -0
  369. package/src/apps/rocketreach.json +158 -0
  370. package/src/apps/rollbar.json +88 -0
  371. package/src/apps/runs-on.json +70 -0
  372. package/src/apps/sanity.json +89 -0
  373. package/src/apps/scaleway-object-storage.json +175 -0
  374. package/src/apps/scrapingbee.json +75 -0
  375. package/src/apps/screenshotlayer.json +49 -0
  376. package/src/apps/screenshotmachine.json +49 -0
  377. package/src/apps/se-ranking.json +239 -0
  378. package/src/apps/seamless-ai.json +91 -0
  379. package/src/apps/sec-edgar.json +107 -0
  380. package/src/apps/segment.json +104 -0
  381. package/src/apps/semrush.json +153 -0
  382. package/src/apps/sentry.json +109 -0
  383. package/src/apps/serpapi.json +95 -0
  384. package/src/apps/serper.json +139 -0
  385. package/src/apps/shareasale.json +130 -0
  386. package/src/apps/skimlinks.json +48 -0
  387. package/src/apps/slack.json +101 -0
  388. package/src/apps/smartlead.json +146 -0
  389. package/src/apps/snapchat-ads.json +238 -0
  390. package/src/apps/snaprender.json +64 -0
  391. package/src/apps/snowflake.json +70 -0
  392. package/src/apps/snyk.json +108 -0
  393. package/src/apps/socialcast.json +74 -8
  394. package/src/apps/sovrn.json +125 -0
  395. package/src/apps/spotify-ads.json +231 -0
  396. package/src/apps/steel.json +239 -0
  397. package/src/apps/stocktwits.json +120 -0
  398. package/src/apps/stripe.json +153 -0
  399. package/src/apps/target-circle.json +348 -0
  400. package/src/apps/tavily.json +104 -0
  401. package/src/apps/tavus.json +403 -0
  402. package/src/apps/telegram.json +5 -2
  403. package/src/apps/teller.json +187 -0
  404. package/src/apps/tencent-cloud.json +214 -0
  405. package/src/apps/tennis-abstract.json +108 -0
  406. package/src/apps/the-odds-api.json +132 -0
  407. package/src/apps/the-sports-db.json +163 -0
  408. package/src/apps/tiktok-ads.json +295 -0
  409. package/src/apps/tiktok-api.json +181 -7
  410. package/src/apps/together.json +5 -2
  411. package/src/apps/trade-desk.json +237 -0
  412. package/src/apps/trading212.json +26 -29
  413. package/src/apps/transloadit.json +138 -0
  414. package/src/apps/truelayer.json +318 -0
  415. package/src/apps/twilio.json +313 -42
  416. package/src/apps/twitter-api.json +216 -33
  417. package/src/apps/ubicloud.json +82 -0
  418. package/src/apps/uplead.json +105 -0
  419. package/src/apps/upstash.json +90 -0
  420. package/src/apps/valueserp.json +63 -0
  421. package/src/apps/venice-ai.json +685 -0
  422. package/src/apps/vercel.json +137 -0
  423. package/src/apps/wappalyzer.json +65 -0
  424. package/src/apps/wasabi.json +175 -0
  425. package/src/apps/whale-alert.json +74 -0
  426. package/src/apps/whatsapp-business.json +131 -0
  427. package/src/apps/wikipedia.json +112 -0
  428. package/src/apps/workos.json +123 -0
  429. package/src/apps/yahoo-dsp.json +265 -0
  430. package/src/apps/yahoo-finance.json +60 -0
  431. package/src/apps/youtube-api.json +520 -142
  432. package/src/apps/zenrows.json +47 -0
  433. package/src/apps/zenserp.json +99 -0
  434. package/src/apps/zerobounce.json +80 -0
@@ -1,16 +1,17 @@
1
1
  {
2
2
  "slug": "facebook-api",
3
- "name": "Facebook Pages",
4
- "description": "MCP server for Facebook Graph API operations including page management, post publishing, and social media analytics",
3
+ "name": "Facebook & Instagram",
4
+ "description": "Meta Graph API operations for Facebook Pages and Instagram Business: page/post management, photo + video publishing, Instagram Reels containers, and social analytics. One OAuth grant covers both surfaces.",
5
5
  "logo": "https://www.google.com/s2/favicons?domain=www.facebook.com&sz=128",
6
6
  "categories": [
7
7
  "facebook",
8
+ "instagram",
8
9
  "meta",
9
10
  "social-media",
10
11
  "pages",
11
12
  "posts"
12
13
  ],
13
- "base_url": "https://graph.facebook.com/v21.0",
14
+ "base_url": "https://graph.facebook.com/v25.0",
14
15
  "auth": {
15
16
  "types": [
16
17
  "bearer",
@@ -34,17 +35,22 @@
34
35
  }
35
36
  ],
36
37
  "oauth2": {
37
- "authorize_url": "https://www.facebook.com/v22.0/dialog/oauth",
38
- "token_url": "https://graph.facebook.com/v22.0/oauth/access_token",
38
+ "authorize_url": "https://www.facebook.com/v25.0/dialog/oauth",
39
+ "token_url": "https://graph.facebook.com/v25.0/oauth/access_token",
39
40
  "scopes": [
40
41
  "email",
41
42
  "public_profile",
42
43
  "pages_show_list",
43
44
  "pages_read_engagement",
45
+ "pages_read_user_content",
46
+ "pages_manage_engagement",
44
47
  "pages_manage_posts",
45
48
  "pages_manage_metadata",
49
+ "pages_messaging",
46
50
  "instagram_basic",
47
51
  "instagram_content_publish",
52
+ "instagram_manage_messages",
53
+ "instagram_manage_comments",
48
54
  "ads_management",
49
55
  "business_management"
50
56
  ],
@@ -55,9 +61,9 @@
55
61
  "tools": [
56
62
  {
57
63
  "name": "post_to_page",
58
- "description": "Post text, links, or photos to a Facebook page. For IMAGE/PHOTO posts, use the 'image' parameter with a public URL - do NOT use 'link' for images. The 'link' parameter is only for sharing webpage URLs. For video uploads, use facebook-api-post-video instead.",
64
+ "description": "Post text, links, or photos to a Facebook page. For IMAGE/PHOTO posts, use the 'image' parameter with a public URL - do NOT use 'link' for images. The 'link' parameter is only for sharing webpage URLs. For video uploads, use facebook-api-post-video instead. Caller MUST also include access_token=<page-level token from list_pages> — Facebook rejects the user token for /feed writes (error 210).",
59
65
  "method": "POST",
60
- "path": "/post-to-page",
66
+ "path": "/{pageId}/feed",
61
67
  "input_schema": {
62
68
  "type": "object",
63
69
  "properties": {
@@ -83,18 +89,65 @@
83
89
  "items": {
84
90
  "type": "string"
85
91
  }
92
+ },
93
+ "access_token": {
94
+ "type": "string",
95
+ "description": "Page-level access token (from list_pages → data[].access_token). Required: Facebook rejects user-level tokens for /feed writes."
86
96
  }
87
97
  },
88
98
  "required": [
89
99
  "pageId"
90
100
  ]
101
+ },
102
+ "mock_response": {
103
+ "id": "100200300400500_122100000000000001"
104
+ }
105
+ },
106
+ {
107
+ "name": "post_photo_to_page",
108
+ "description": "Upload and post a photo to a Facebook page using a publicly accessible image URL. Use this (not post_to_page) whenever you have an image — /feed only renders link previews and ignores image fields. Caller MUST include access_token=<page-level token from list_pages>.",
109
+ "method": "POST",
110
+ "path": "/{pageId}/photos",
111
+ "input_schema": {
112
+ "type": "object",
113
+ "properties": {
114
+ "pageId": {
115
+ "type": "string",
116
+ "description": "Facebook page ID"
117
+ },
118
+ "url": {
119
+ "type": "string",
120
+ "description": "Publicly accessible image URL (Graph API will fetch + attach)."
121
+ },
122
+ "caption": {
123
+ "type": "string",
124
+ "description": "Caption text for the photo (rendered as the post body)."
125
+ },
126
+ "published": {
127
+ "type": "boolean",
128
+ "description": "Whether the photo is published immediately (true) or staged (false). Defaults to true.",
129
+ "default": true
130
+ },
131
+ "access_token": {
132
+ "type": "string",
133
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
134
+ }
135
+ },
136
+ "required": [
137
+ "pageId",
138
+ "url"
139
+ ]
140
+ },
141
+ "mock_response": {
142
+ "id": "122100000000000010",
143
+ "post_id": "100200300400500_122100000000000011"
91
144
  }
92
145
  },
93
146
  {
94
147
  "name": "post_video",
95
- "description": "Upload and post a video to a Facebook page using a publicly accessible URL. Uses graph-video.facebook.com for proper video handling. Videos must be under 1GB and 20 minutes.",
148
+ "description": "Upload and post a video to a Facebook page using a publicly accessible URL. Videos must be under 1GB and 20 minutes. Caller MUST include access_token=<page-level token from list_pages> — Facebook rejects user tokens for /videos writes (error 210).",
96
149
  "method": "POST",
97
- "path": "/post-video",
150
+ "path": "/{pageId}/videos",
98
151
  "input_schema": {
99
152
  "type": "object",
100
153
  "properties": {
@@ -117,19 +170,26 @@
117
170
  "thumb": {
118
171
  "type": "string",
119
172
  "description": "URL to custom thumbnail image"
173
+ },
174
+ "access_token": {
175
+ "type": "string",
176
+ "description": "Page-level access token (from list_pages → data[].access_token). Required: Facebook rejects user-level tokens for /videos writes."
120
177
  }
121
178
  },
122
179
  "required": [
123
180
  "pageId",
124
181
  "file_url"
125
182
  ]
183
+ },
184
+ "mock_response": {
185
+ "id": "122100000000000020"
126
186
  }
127
187
  },
128
188
  {
129
189
  "name": "get_page_posts",
130
- "description": "List posts from a Facebook page. Get all posts with message content, images, links, and engagement metrics (reactions, comments, shares). Supports pagination and date filtering.",
190
+ "description": "List posts from a Facebook page. Calls GET /{pageId}/posts on the Graph API. Page-level access_token is required (user-level tokens are rejected for /posts on Pages). Returns posts with message content, images (full_picture URL), permalink_url, and engagement metrics (reactions/comments/shares.summary.total_count when included in fields).",
131
191
  "method": "GET",
132
- "path": "/get-page-posts",
192
+ "path": "/{pageId}/posts",
133
193
  "input_schema": {
134
194
  "type": "object",
135
195
  "properties": {
@@ -137,6 +197,10 @@
137
197
  "type": "string",
138
198
  "description": "Facebook page ID"
139
199
  },
200
+ "access_token": {
201
+ "type": "string",
202
+ "description": "Page-level access token (from list_pages → data[].access_token)."
203
+ },
140
204
  "limit": {
141
205
  "type": "integer",
142
206
  "description": "Number of posts to retrieve",
@@ -165,13 +229,45 @@
165
229
  "required": [
166
230
  "pageId"
167
231
  ]
232
+ },
233
+ "mock_response": {
234
+ "data": [
235
+ {
236
+ "id": "100200300400500_122100000000000001",
237
+ "message": "Excited to share our latest update!",
238
+ "created_time": "2026-05-22T12:00:00+0000",
239
+ "full_picture": "https://example.com/social/update-cover.jpg",
240
+ "shares": {
241
+ "count": 12
242
+ },
243
+ "reactions": {
244
+ "data": [],
245
+ "summary": {
246
+ "total_count": 184
247
+ }
248
+ },
249
+ "comments": {
250
+ "data": [],
251
+ "summary": {
252
+ "total_count": 9
253
+ }
254
+ },
255
+ "permalink_url": "https://www.facebook.com/100200300400500/posts/122100000000000001"
256
+ }
257
+ ],
258
+ "paging": {
259
+ "cursors": {
260
+ "before": "QVFIUm",
261
+ "after": "QVFIUn"
262
+ }
263
+ }
168
264
  }
169
265
  },
170
266
  {
171
267
  "name": "get_page_insights",
172
- "description": "Get analytics data for a Facebook page",
268
+ "description": "Get analytics data for a Facebook page through the Meta Graph API",
173
269
  "method": "GET",
174
- "path": "/get-page-insights",
270
+ "path": "/{pageId}/insights",
175
271
  "input_schema": {
176
272
  "type": "object",
177
273
  "properties": {
@@ -179,15 +275,10 @@
179
275
  "type": "string",
180
276
  "description": "Facebook page ID"
181
277
  },
182
- "metrics": {
183
- "type": "array",
184
- "description": "Metrics to retrieve",
185
- "items": {
186
- "type": "string"
187
- },
188
- "default": [
189
- "page_fans"
190
- ]
278
+ "metric": {
279
+ "type": "string",
280
+ "description": "Comma-separated metrics to retrieve",
281
+ "default": "page_fans"
191
282
  },
192
283
  "period": {
193
284
  "type": "string",
@@ -218,18 +309,38 @@
218
309
  "this_month",
219
310
  "last_month"
220
311
  ]
312
+ },
313
+ "access_token": {
314
+ "type": "string",
315
+ "description": "Page-level access token."
221
316
  }
222
317
  },
223
318
  "required": [
224
319
  "pageId"
225
320
  ]
321
+ },
322
+ "mock_response": {
323
+ "data": [
324
+ {
325
+ "name": "page_fans",
326
+ "period": "day",
327
+ "values": [
328
+ {
329
+ "value": 12480,
330
+ "end_time": "2026-05-22T07:00:00+0000"
331
+ }
332
+ ],
333
+ "title": "Lifetime Total Likes",
334
+ "id": "100200300400500/insights/page_fans/day"
335
+ }
336
+ ]
226
337
  }
227
338
  },
228
339
  {
229
340
  "name": "list_pages",
230
341
  "description": "List all Facebook pages managed by the authenticated user with details like name, category, fan count, and verification status",
231
342
  "method": "GET",
232
- "path": "/list-pages",
343
+ "path": "/me/accounts",
233
344
  "input_schema": {
234
345
  "type": "object",
235
346
  "properties": {
@@ -239,71 +350,1407 @@
239
350
  "default": "id,name,category,access_token,tasks,fan_count,verification_status,website"
240
351
  }
241
352
  }
353
+ },
354
+ "mock_response": {
355
+ "data": [
356
+ {
357
+ "id": "100200300400500",
358
+ "name": "Apteva",
359
+ "access_token": "EAABwzmockpagetokenXXXXXXXX",
360
+ "category": "Software company",
361
+ "fan_count": 12480,
362
+ "verification_status": "verified",
363
+ "website": "https://apteva.ai",
364
+ "instagram_business_account": {
365
+ "id": "17841400000000001",
366
+ "username": "apteva"
367
+ },
368
+ "tasks": [
369
+ "MANAGE",
370
+ "CREATE_CONTENT",
371
+ "MODERATE",
372
+ "ANALYZE"
373
+ ]
374
+ }
375
+ ],
376
+ "paging": {
377
+ "cursors": {
378
+ "before": "QVFIUm",
379
+ "after": "QVFIUm"
380
+ }
381
+ }
242
382
  }
243
383
  },
244
384
  {
245
385
  "name": "facebook_get_post",
246
- "description": "Get details of a specific Facebook post including message, creation time, and engagement metrics",
386
+ "description": "Get a Facebook post by id, including engagement counts when fields are requested. Calls GET /{postId}?fields=... on the Graph API; postId must be the full pageId_postId format. Page-level access_token is required (user-level tokens are rejected with error 210, same as the write endpoints). Common fields for metrics: 'likes.summary(true),comments.summary(true),shares,reactions.summary(true)' counts come back under the .summary.total_count of each.",
247
387
  "method": "GET",
248
- "path": "/facebook-get-post",
388
+ "path": "/{postId}",
249
389
  "input_schema": {
250
390
  "type": "object",
251
391
  "properties": {
252
392
  "postId": {
253
393
  "type": "string",
254
- "description": "Facebook post ID (format: pageId_postId)"
394
+ "description": "Facebook post ID in pageId_postId format"
255
395
  },
256
396
  "fields": {
257
397
  "type": "string",
258
- "description": "Comma-separated list of fields to include",
398
+ "description": "Comma-separated list of fields. For engagement counts use 'likes.summary(true),comments.summary(true),shares,reactions.summary(true)'.",
259
399
  "default": "id,message,created_time,updated_time"
400
+ },
401
+ "access_token": {
402
+ "type": "string",
403
+ "description": "Page-level access token (from list_pages → data[].access_token). Required for posts owned by Pages."
260
404
  }
261
405
  },
262
406
  "required": [
263
407
  "postId"
264
408
  ]
409
+ },
410
+ "mock_response": {
411
+ "id": "100200300400500_122100000000000001",
412
+ "message": "Excited to share our latest update!",
413
+ "created_time": "2026-05-22T12:00:00+0000",
414
+ "permalink_url": "https://www.facebook.com/100200300400500/posts/122100000000000001"
265
415
  }
266
416
  },
267
417
  {
268
418
  "name": "facebook_update_post",
269
- "description": "Update/edit the message content of a Facebook post",
270
- "method": "GET",
271
- "path": "/facebook-update-post",
419
+ "description": "Edit the message of a Facebook post. Calls POST /{postId} on the Graph API; postId is the full pageId_postId format. Page-level access_token required (user-level tokens are rejected with error 210, same as the write endpoints).",
420
+ "method": "POST",
421
+ "path": "/{postId}",
272
422
  "input_schema": {
273
423
  "type": "object",
274
424
  "properties": {
275
425
  "postId": {
276
426
  "type": "string",
277
- "description": "Facebook post ID (format: pageId_postId)"
427
+ "description": "Facebook post ID in pageId_postId format"
278
428
  },
279
429
  "message": {
280
430
  "type": "string",
281
- "description": "New message content for the post"
431
+ "description": "New message body for the post"
432
+ },
433
+ "access_token": {
434
+ "type": "string",
435
+ "description": "Page-level access token (from list_pages → data[].access_token)."
282
436
  }
283
437
  },
284
438
  "required": [
285
439
  "postId",
286
440
  "message"
287
441
  ]
442
+ },
443
+ "mock_response": {
444
+ "success": true
288
445
  }
289
446
  },
290
447
  {
291
448
  "name": "facebook_delete_post",
292
- "description": "Permanently delete a Facebook post from a page",
293
- "method": "GET",
294
- "path": "/facebook-delete-post",
449
+ "description": "Permanently delete a Facebook post from a page. Calls DELETE /{postId} on the Graph API; postId must be the full pageId_postId format that post_to_page / post_photo_to_page / post_video return as `id`. Page-level access_token is required (user-level tokens are rejected with error 210, same as the write endpoints).",
450
+ "method": "DELETE",
451
+ "path": "/{postId}",
295
452
  "input_schema": {
296
453
  "type": "object",
297
454
  "properties": {
298
455
  "postId": {
299
456
  "type": "string",
300
- "description": "Facebook post ID (format: pageId_postId)"
457
+ "description": "Facebook post ID in pageId_postId format (the `id` value returned by the post_to_page family)."
458
+ },
459
+ "access_token": {
460
+ "type": "string",
461
+ "description": "Page-level access token (from list_pages → data[].access_token). Required: Facebook rejects user-level tokens for delete on page posts."
301
462
  }
302
463
  },
303
464
  "required": [
304
465
  "postId"
305
466
  ]
467
+ },
468
+ "mock_response": {
469
+ "success": true
470
+ }
471
+ },
472
+ {
473
+ "name": "create_media_container",
474
+ "description": "Instagram step 1 of 2: create a media container with image/video URL and caption. Returns containerId for step 2 (publish_media_container). For videos, sync=true (default) waits for processing to complete. The IG Business account must be linked to a Facebook Page that this connection has access to (instagramAccountId comes from list_pages with fields=...,instagram_business_account{id}).",
475
+ "method": "POST",
476
+ "path": "/{instagramAccountId}/media",
477
+ "input_schema": {
478
+ "type": "object",
479
+ "properties": {
480
+ "instagramAccountId": {
481
+ "type": "string",
482
+ "description": "Instagram Business Account ID (from the linked FB Page's instagram_business_account.id)"
483
+ },
484
+ "image_url": {
485
+ "type": "string",
486
+ "description": "URL of image to post (for IMAGE/CAROUSEL). Snake_case is canonical per Graph API."
487
+ },
488
+ "video_url": {
489
+ "type": "string",
490
+ "description": "URL of video to post (for REELS). Snake_case is canonical per Graph API."
491
+ },
492
+ "caption": {
493
+ "type": "string",
494
+ "description": "Caption text for the media"
495
+ },
496
+ "media_type": {
497
+ "type": "string",
498
+ "description": "Type of media (VIDEO is deprecated, use REELS for videos)",
499
+ "enum": [
500
+ "IMAGE",
501
+ "REELS",
502
+ "STORIES"
503
+ ],
504
+ "default": "IMAGE"
505
+ },
506
+ "sync": {
507
+ "type": "boolean",
508
+ "description": "For videos/reels: wait for processing before returning. Default true.",
509
+ "default": true
510
+ },
511
+ "access_token": {
512
+ "type": "string",
513
+ "description": "Page-level access token (from list_pages → data[].access_token of the FB Page that owns this IG account). Required for IG Business writes."
514
+ }
515
+ },
516
+ "required": [
517
+ "instagramAccountId"
518
+ ]
519
+ },
520
+ "mock_response": {
521
+ "id": "17900000000000001"
522
+ }
523
+ },
524
+ {
525
+ "name": "get_container_status",
526
+ "description": "Poll an Instagram media container's processing status before publishing. Returns {id, status_code, status}. status_code values: FINISHED (ready to publish), IN_PROGRESS (still processing — Reels especially take time), ERROR (transcode/validation failed), EXPIRED (container older than 24h, must recreate). Calls GET /{containerId}?fields=status_code,status on the Graph API.",
527
+ "method": "GET",
528
+ "path": "/{containerId}",
529
+ "input_schema": {
530
+ "type": "object",
531
+ "properties": {
532
+ "containerId": {
533
+ "type": "string",
534
+ "description": "Container ID returned by create_media_container."
535
+ },
536
+ "fields": {
537
+ "type": "string",
538
+ "description": "Comma-separated fields to retrieve.",
539
+ "default": "id,status_code,status"
540
+ },
541
+ "access_token": {
542
+ "type": "string",
543
+ "description": "Page-level access token (the same one used to create the container)."
544
+ }
545
+ },
546
+ "required": [
547
+ "containerId"
548
+ ]
549
+ },
550
+ "mock_response": {
551
+ "status_code": "FINISHED",
552
+ "id": "17900000000000001"
553
+ }
554
+ },
555
+ {
556
+ "name": "publish_media_container",
557
+ "description": "Instagram step 2 of 2: publish the container created in step 1. Returns the published media id.",
558
+ "method": "POST",
559
+ "path": "/{instagramAccountId}/media_publish",
560
+ "input_schema": {
561
+ "type": "object",
562
+ "properties": {
563
+ "instagramAccountId": {
564
+ "type": "string",
565
+ "description": "Instagram Business Account ID"
566
+ },
567
+ "containerId": {
568
+ "type": "string",
569
+ "description": "The 'id' returned from create_media_container."
570
+ },
571
+ "creation_id": {
572
+ "type": "string",
573
+ "description": "Alias for containerId — Graph API expects this field name."
574
+ },
575
+ "access_token": {
576
+ "type": "string",
577
+ "description": "Page-level access token (from list_pages). Required for IG Business writes."
578
+ }
579
+ },
580
+ "required": [
581
+ "instagramAccountId",
582
+ "containerId"
583
+ ]
584
+ },
585
+ "mock_response": {
586
+ "id": "17900000000000099"
587
+ }
588
+ },
589
+ {
590
+ "name": "get_account_media",
591
+ "description": "Retrieve Instagram Business media posts through the Meta Graph API. Requires the page-level access token for the Facebook Page linked to the IG Business account.",
592
+ "method": "GET",
593
+ "path": "/{instagramAccountId}/media",
594
+ "input_schema": {
595
+ "type": "object",
596
+ "properties": {
597
+ "instagramAccountId": {
598
+ "type": "string",
599
+ "description": "Instagram Business Account ID"
600
+ },
601
+ "limit": {
602
+ "type": "integer",
603
+ "description": "Number of media items to retrieve",
604
+ "default": 25,
605
+ "maximum": 100
606
+ },
607
+ "fields": {
608
+ "type": "string",
609
+ "description": "Comma-separated fields to retrieve",
610
+ "default": "id,media_type,media_url,thumbnail_url,permalink,caption,timestamp,like_count,comments_count"
611
+ },
612
+ "since": {
613
+ "type": "string",
614
+ "description": "Unix timestamp or strtotime data value for lower bound"
615
+ },
616
+ "until": {
617
+ "type": "string",
618
+ "description": "Unix timestamp or strtotime data value for upper bound"
619
+ },
620
+ "after": {
621
+ "type": "string",
622
+ "description": "Pagination cursor"
623
+ },
624
+ "access_token": {
625
+ "type": "string",
626
+ "description": "Page-level access token for the linked Facebook Page."
627
+ }
628
+ },
629
+ "required": [
630
+ "instagramAccountId"
631
+ ]
632
+ },
633
+ "mock_response": {
634
+ "data": [
635
+ {
636
+ "id": "17900000000000099",
637
+ "caption": "Launch day!",
638
+ "media_type": "IMAGE",
639
+ "media_url": "https://scontent.cdninstagram.com/mock-media1.jpg",
640
+ "permalink": "https://www.instagram.com/p/CmOckPost1/",
641
+ "timestamp": "2026-05-22T12:00:00+0000",
642
+ "like_count": 210,
643
+ "comments_count": 18
644
+ }
645
+ ],
646
+ "paging": {
647
+ "cursors": {}
648
+ }
649
+ }
650
+ },
651
+ {
652
+ "name": "get_account_insights",
653
+ "description": "Fetch Instagram Business account insights through the Meta Graph API. Requires the page-level access token for the Facebook Page linked to the IG Business account.",
654
+ "method": "GET",
655
+ "path": "/{instagramAccountId}/insights",
656
+ "input_schema": {
657
+ "type": "object",
658
+ "properties": {
659
+ "instagramAccountId": {
660
+ "type": "string",
661
+ "description": "Instagram Business Account ID"
662
+ },
663
+ "metric": {
664
+ "type": "string",
665
+ "description": "Comma-separated metrics to retrieve",
666
+ "default": "reach,follower_count"
667
+ },
668
+ "metric_type": {
669
+ "type": "string",
670
+ "description": "Metric type for IG insights",
671
+ "default": "time_series"
672
+ },
673
+ "period": {
674
+ "type": "string",
675
+ "description": "Time period for insights",
676
+ "enum": [
677
+ "day",
678
+ "week",
679
+ "days_28"
680
+ ],
681
+ "default": "day"
682
+ },
683
+ "since": {
684
+ "type": "string",
685
+ "description": "Unix timestamp or YYYY-MM-DD lower bound"
686
+ },
687
+ "until": {
688
+ "type": "string",
689
+ "description": "Unix timestamp or YYYY-MM-DD upper bound"
690
+ },
691
+ "access_token": {
692
+ "type": "string",
693
+ "description": "Page-level access token for the linked Facebook Page."
694
+ }
695
+ },
696
+ "required": [
697
+ "instagramAccountId"
698
+ ]
699
+ },
700
+ "mock_response": {
701
+ "data": [
702
+ {
703
+ "name": "reach",
704
+ "period": "day",
705
+ "values": [
706
+ {
707
+ "value": 1980,
708
+ "end_time": "2026-05-22T07:00:00+0000"
709
+ }
710
+ ],
711
+ "title": "Reach",
712
+ "id": "17841400000000000/insights/reach/day"
713
+ }
714
+ ]
715
+ }
716
+ },
717
+ {
718
+ "name": "get_media_insights",
719
+ "description": "Fetch Instagram Business media insights (per-post metrics). Calls GET /{mediaId}/insights?metric=...&access_token=PAGE_TOKEN on the Graph API. Returns {data: [{name, period, values: [{value: N}]}]} — one entry per requested metric. Common metrics for FEED posts: reach, likes, comments, saves, shares (where supported). Metric availability varies by media type — REELS exposes plays, IG VIDEO ones differ.",
720
+ "method": "GET",
721
+ "path": "/{mediaId}/insights",
722
+ "input_schema": {
723
+ "type": "object",
724
+ "properties": {
725
+ "mediaId": {
726
+ "type": "string",
727
+ "description": "IG media id — the platform_post_id returned by publish_media_container."
728
+ },
729
+ "metric": {
730
+ "type": "string",
731
+ "description": "Comma-separated metric names (no spaces). Default covers the engagement basics.",
732
+ "default": "reach,likes,comments,saves,shares"
733
+ },
734
+ "access_token": {
735
+ "type": "string",
736
+ "description": "Page-level access token (the same token that owns the IG Business account)."
737
+ }
738
+ },
739
+ "required": [
740
+ "mediaId"
741
+ ]
742
+ },
743
+ "mock_response": {
744
+ "data": [
745
+ {
746
+ "name": "reach",
747
+ "period": "lifetime",
748
+ "values": [
749
+ {
750
+ "value": 1980
751
+ }
752
+ ],
753
+ "title": "Reach",
754
+ "id": "17900000000000099/insights/reach/lifetime"
755
+ },
756
+ {
757
+ "name": "likes",
758
+ "period": "lifetime",
759
+ "values": [
760
+ {
761
+ "value": 142
762
+ }
763
+ ],
764
+ "title": "Likes",
765
+ "id": "17900000000000099/insights/likes/lifetime"
766
+ },
767
+ {
768
+ "name": "comments",
769
+ "period": "lifetime",
770
+ "values": [
771
+ {
772
+ "value": 18
773
+ }
774
+ ],
775
+ "title": "Comments",
776
+ "id": "17900000000000099/insights/comments/lifetime"
777
+ },
778
+ {
779
+ "name": "saves",
780
+ "period": "lifetime",
781
+ "values": [
782
+ {
783
+ "value": 36
784
+ }
785
+ ],
786
+ "title": "Saves",
787
+ "id": "17900000000000099/insights/saves/lifetime"
788
+ },
789
+ {
790
+ "name": "shares",
791
+ "period": "lifetime",
792
+ "values": [
793
+ {
794
+ "value": 27
795
+ }
796
+ ],
797
+ "title": "Shares",
798
+ "id": "17900000000000099/insights/shares/lifetime"
799
+ }
800
+ ]
801
+ }
802
+ },
803
+ {
804
+ "name": "send_message",
805
+ "description": "Send an Instagram DM, sender action (typing/seen), reaction, or private reply to a comment. Single endpoint POST /{instagramAccountId}/messages — body shape switches by intent. (1) Text DM: recipient={id:IGSID}, message={text:'...'}. (2) Media DM: recipient={id:IGSID}, message={attachment:{type:'image'|'video'|'audio'|'file', payload:{url, is_reusable?}}}. (3) Quick replies: message={text, quick_replies:[{content_type:'text', title, payload}]}. (4) Sender action: recipient={id:IGSID}, sender_action='typing_on'|'typing_off'|'mark_seen'. (5) Reaction: recipient={id:IGSID}, sender_action='react'|'unreact', payload={message_id, reaction:'love'}. (6) Private reply to comment: recipient={comment_id:'...'}, message={text:'...'} — 7-day single-use window from the comment, the only way to initiate to a user who hasn't DM'd you. Standard recipients are bound by Meta's 24-hour messaging window unless using an approved message tag. Returns {recipient_id, message_id} for messages; {recipient_id} for sender actions. Page-level access_token required.",
806
+ "method": "POST",
807
+ "path": "/{instagramAccountId}/messages",
808
+ "input_schema": {
809
+ "type": "object",
810
+ "properties": {
811
+ "instagramAccountId": {
812
+ "type": "string",
813
+ "description": "Instagram Business Account ID (sender). From list_pages → data[].instagram_business_account.id."
814
+ },
815
+ "recipient": {
816
+ "type": "object",
817
+ "description": "Who receives the message. Use {id: '<IGSID>'} for a known Instagram-scoped user (obtained from an inbound webhook event or list_conversations participants). Use {comment_id: '<comment-id>'} for a private reply to a public comment (7-day window from the comment, single-use).",
818
+ "properties": {
819
+ "id": {
820
+ "type": "string",
821
+ "description": "Instagram-scoped user id (IGSID) of the recipient."
822
+ },
823
+ "comment_id": {
824
+ "type": "string",
825
+ "description": "Comment id to private-reply to (alternative to id). Single-use, 7-day window."
826
+ }
827
+ }
828
+ },
829
+ "message": {
830
+ "type": "object",
831
+ "description": "Message payload. Omit when sending a sender_action. One of {text}, {attachment}, or {text, quick_replies}.",
832
+ "properties": {
833
+ "text": {
834
+ "type": "string",
835
+ "description": "Message body text. Max 1000 chars."
836
+ },
837
+ "attachment": {
838
+ "type": "object",
839
+ "description": "Media attachment payload.",
840
+ "properties": {
841
+ "type": {
842
+ "type": "string",
843
+ "enum": [
844
+ "image",
845
+ "video",
846
+ "audio",
847
+ "file"
848
+ ]
849
+ },
850
+ "payload": {
851
+ "type": "object",
852
+ "properties": {
853
+ "url": {
854
+ "type": "string",
855
+ "description": "Publicly accessible media URL."
856
+ },
857
+ "is_reusable": {
858
+ "type": "boolean",
859
+ "description": "Cache the attachment server-side so it can be reused by id in later sends.",
860
+ "default": false
861
+ }
862
+ },
863
+ "required": [
864
+ "url"
865
+ ]
866
+ }
867
+ },
868
+ "required": [
869
+ "type",
870
+ "payload"
871
+ ]
872
+ },
873
+ "quick_replies": {
874
+ "type": "array",
875
+ "description": "Tap-to-reply chips shown beneath the message. Max 13.",
876
+ "items": {
877
+ "type": "object",
878
+ "properties": {
879
+ "content_type": {
880
+ "type": "string",
881
+ "enum": [
882
+ "text"
883
+ ],
884
+ "default": "text"
885
+ },
886
+ "title": {
887
+ "type": "string",
888
+ "description": "Chip label (max 20 chars)."
889
+ },
890
+ "payload": {
891
+ "type": "string",
892
+ "description": "Opaque value echoed back in the inbound webhook when tapped."
893
+ }
894
+ },
895
+ "required": [
896
+ "content_type",
897
+ "title",
898
+ "payload"
899
+ ]
900
+ }
901
+ }
902
+ }
903
+ },
904
+ "sender_action": {
905
+ "type": "string",
906
+ "description": "Use instead of `message` to send a typing indicator, read receipt, or reaction. typing_on/typing_off/mark_seen require no payload; react/unreact require the `payload` field below.",
907
+ "enum": [
908
+ "typing_on",
909
+ "typing_off",
910
+ "mark_seen",
911
+ "react",
912
+ "unreact"
913
+ ]
914
+ },
915
+ "payload": {
916
+ "type": "object",
917
+ "description": "Reaction payload — only when sender_action is 'react' or 'unreact'.",
918
+ "properties": {
919
+ "message_id": {
920
+ "type": "string",
921
+ "description": "The inbound message id being reacted to."
922
+ },
923
+ "reaction": {
924
+ "type": "string",
925
+ "description": "Reaction name. Meta currently supports 'love'.",
926
+ "default": "love"
927
+ }
928
+ },
929
+ "required": [
930
+ "message_id"
931
+ ]
932
+ },
933
+ "access_token": {
934
+ "type": "string",
935
+ "description": "Page-level access token (from list_pages → data[].access_token of the FB Page that owns this IG account). Required."
936
+ }
937
+ },
938
+ "required": [
939
+ "instagramAccountId",
940
+ "recipient"
941
+ ]
942
+ },
943
+ "mock_response": {
944
+ "recipient_id": "17841400000000050",
945
+ "message_id": "aWdfbWVzc2FnZV9tb2NrXzAwMQ"
946
+ }
947
+ },
948
+ {
949
+ "name": "list_conversations",
950
+ "description": "List Instagram DM conversations (threads) for an IG Business account. Calls GET /{instagramAccountId}/conversations?platform=instagram on the Graph API. Returns {data:[{id, updated_time, participants:{data:[{id, username}]}}], paging:{cursors, next}}. Pass the next cursor's `after` value to page. Use this to find IGSIDs of users you can message (those who have messaged you) and to drive a conversation list UI.",
951
+ "method": "GET",
952
+ "path": "/{instagramAccountId}/conversations",
953
+ "input_schema": {
954
+ "type": "object",
955
+ "properties": {
956
+ "instagramAccountId": {
957
+ "type": "string",
958
+ "description": "Instagram Business Account ID (your account, not the participant)."
959
+ },
960
+ "platform": {
961
+ "type": "string",
962
+ "description": "Must be 'instagram' to scope to IG DMs (vs. Messenger).",
963
+ "enum": [
964
+ "instagram"
965
+ ],
966
+ "default": "instagram"
967
+ },
968
+ "fields": {
969
+ "type": "string",
970
+ "description": "Comma-separated fields. Default surfaces participants inline so callers don't need a second roundtrip.",
971
+ "default": "id,updated_time,participants{id,username}"
972
+ },
973
+ "user_id": {
974
+ "type": "string",
975
+ "description": "Optional IGSID filter — return only the conversation with this participant (if it exists)."
976
+ },
977
+ "limit": {
978
+ "type": "integer",
979
+ "description": "Page size (Meta caps around 25 by default).",
980
+ "default": 25
981
+ },
982
+ "after": {
983
+ "type": "string",
984
+ "description": "Pagination cursor from previous response's paging.cursors.after."
985
+ },
986
+ "access_token": {
987
+ "type": "string",
988
+ "description": "Page-level access token (from list_pages). Required."
989
+ }
990
+ },
991
+ "required": [
992
+ "instagramAccountId"
993
+ ]
994
+ },
995
+ "mock_response": {
996
+ "data": [
997
+ {
998
+ "id": "aWdfdGhyZWFkX21vY2tfMDAx",
999
+ "updated_time": "2026-05-22T11:00:00+0000",
1000
+ "participants": {
1001
+ "data": [
1002
+ {
1003
+ "id": "17841400000000001",
1004
+ "username": "apteva"
1005
+ },
1006
+ {
1007
+ "id": "17841400000000050",
1008
+ "username": "a_customer"
1009
+ }
1010
+ ]
1011
+ }
1012
+ }
1013
+ ],
1014
+ "paging": {
1015
+ "cursors": {
1016
+ "before": "QVFIUm",
1017
+ "after": "QVFIUm"
1018
+ }
1019
+ }
1020
+ }
1021
+ },
1022
+ {
1023
+ "name": "get_conversation",
1024
+ "description": "Fetch a single Instagram DM conversation with its messages inline. Calls GET /{conversationId}?fields=... on the Graph API. Default fields pull the most recent 20 messages with sender/recipient/body/attachments — Meta caps inline message history at ~20; for older messages you must paginate via the messages edge separately.",
1025
+ "method": "GET",
1026
+ "path": "/{conversationId}",
1027
+ "input_schema": {
1028
+ "type": "object",
1029
+ "properties": {
1030
+ "conversationId": {
1031
+ "type": "string",
1032
+ "description": "Conversation id from list_conversations.data[].id."
1033
+ },
1034
+ "fields": {
1035
+ "type": "string",
1036
+ "description": "Fields selector. Default expands the messages edge with the common per-message fields.",
1037
+ "default": "id,updated_time,participants{id,username},messages{id,from,to,message,created_time,attachments}"
1038
+ },
1039
+ "access_token": {
1040
+ "type": "string",
1041
+ "description": "Page-level access token (from list_pages). Required."
1042
+ }
1043
+ },
1044
+ "required": [
1045
+ "conversationId"
1046
+ ]
1047
+ },
1048
+ "mock_response": {
1049
+ "id": "aWdfdGhyZWFkX21vY2tfMDAx",
1050
+ "updated_time": "2026-05-22T11:00:00+0000",
1051
+ "participants": {
1052
+ "data": [
1053
+ {
1054
+ "id": "17841400000000001",
1055
+ "username": "apteva"
1056
+ },
1057
+ {
1058
+ "id": "17841400000000050",
1059
+ "username": "a_customer"
1060
+ }
1061
+ ]
1062
+ },
1063
+ "messages": {
1064
+ "data": [
1065
+ {
1066
+ "id": "aWdfbWVzc2FnZV9tb2NrXzAwMQ",
1067
+ "from": {
1068
+ "id": "17841400000000050",
1069
+ "username": "a_customer"
1070
+ },
1071
+ "to": {
1072
+ "data": [
1073
+ {
1074
+ "id": "17841400000000001",
1075
+ "username": "apteva"
1076
+ }
1077
+ ]
1078
+ },
1079
+ "message": "Hi, is this still available?",
1080
+ "created_time": "2026-05-22T11:00:00+0000",
1081
+ "attachments": {
1082
+ "data": []
1083
+ }
1084
+ }
1085
+ ]
1086
+ }
1087
+ }
1088
+ },
1089
+ {
1090
+ "name": "get_message",
1091
+ "description": "Fetch a single Instagram DM message by id, including attachments and reactions. Calls GET /{messageId}?fields=... on the Graph API. Useful for fetching attachment URLs or reaction details that aren't included in the lightweight conversation listing.",
1092
+ "method": "GET",
1093
+ "path": "/{messageId}",
1094
+ "input_schema": {
1095
+ "type": "object",
1096
+ "properties": {
1097
+ "messageId": {
1098
+ "type": "string",
1099
+ "description": "Message id (from a conversation's messages edge or an inbound webhook event)."
1100
+ },
1101
+ "fields": {
1102
+ "type": "string",
1103
+ "description": "Fields selector.",
1104
+ "default": "id,from,to,message,created_time,attachments,reactions"
1105
+ },
1106
+ "access_token": {
1107
+ "type": "string",
1108
+ "description": "Page-level access token (from list_pages). Required."
1109
+ }
1110
+ },
1111
+ "required": [
1112
+ "messageId"
1113
+ ]
1114
+ },
1115
+ "mock_response": {
1116
+ "id": "aWdfbWVzc2FnZV9tb2NrXzAwMQ",
1117
+ "created_time": "2026-05-22T11:00:00+0000",
1118
+ "from": {
1119
+ "username": "a_customer",
1120
+ "id": "17841400000000050"
1121
+ },
1122
+ "to": {
1123
+ "data": [
1124
+ {
1125
+ "username": "apteva",
1126
+ "id": "17841400000000001"
1127
+ }
1128
+ ]
1129
+ },
1130
+ "message": "Hi, is this still available?",
1131
+ "attachments": {
1132
+ "data": []
1133
+ },
1134
+ "reactions": {
1135
+ "data": []
1136
+ }
1137
+ }
1138
+ },
1139
+ {
1140
+ "name": "list_conversation_messages",
1141
+ "description": "List messages for a Meta conversation thread. Works for Instagram conversations returned by list_conversations and Facebook Page conversations returned by facebook_list_conversations. Calls GET /{conversationId}/messages and supports cursor pagination. Use this for historical DM loading beyond the inline messages returned by get_conversation/facebook_get_conversation.",
1142
+ "method": "GET",
1143
+ "path": "/{conversationId}/messages",
1144
+ "input_schema": {
1145
+ "type": "object",
1146
+ "properties": {
1147
+ "conversationId": {
1148
+ "type": "string",
1149
+ "description": "Conversation id from list_conversations or facebook_list_conversations."
1150
+ },
1151
+ "fields": {
1152
+ "type": "string",
1153
+ "description": "Comma-separated message fields.",
1154
+ "default": "id,from,to,message,created_time,attachments"
1155
+ },
1156
+ "limit": {
1157
+ "type": "integer",
1158
+ "description": "Page size.",
1159
+ "default": 25
1160
+ },
1161
+ "after": {
1162
+ "type": "string",
1163
+ "description": "Pagination cursor from previous response's paging.cursors.after."
1164
+ },
1165
+ "access_token": {
1166
+ "type": "string",
1167
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1168
+ }
1169
+ },
1170
+ "required": [
1171
+ "conversationId"
1172
+ ]
1173
+ },
1174
+ "mock_response": {
1175
+ "data": [
1176
+ {
1177
+ "id": "m_mock_001",
1178
+ "message": "Hi, is this still available?",
1179
+ "created_time": "2026-05-22T11:00:00+0000",
1180
+ "from": {
1181
+ "id": "17841400000000050",
1182
+ "username": "a_customer"
1183
+ },
1184
+ "to": {
1185
+ "data": [
1186
+ {
1187
+ "id": "17841400000000001",
1188
+ "username": "apteva"
1189
+ }
1190
+ ]
1191
+ },
1192
+ "attachments": {
1193
+ "data": []
1194
+ }
1195
+ }
1196
+ ],
1197
+ "paging": {
1198
+ "cursors": {
1199
+ "before": "QVFIUm",
1200
+ "after": "QVFIUm"
1201
+ }
1202
+ }
1203
+ }
1204
+ },
1205
+ {
1206
+ "name": "facebook_list_conversations",
1207
+ "description": "List Messenger conversations for a Facebook Page. Calls GET /{pageId}/conversations with a Page access token. Requires pages_messaging and the Page messaging product/review setup; some app configurations may also require Meta legacy mailbox access. Returns conversation ids, participants, snippets, unread counts, and paging cursors.",
1208
+ "method": "GET",
1209
+ "path": "/{pageId}/conversations",
1210
+ "input_schema": {
1211
+ "type": "object",
1212
+ "properties": {
1213
+ "pageId": {
1214
+ "type": "string",
1215
+ "description": "Facebook Page ID."
1216
+ },
1217
+ "fields": {
1218
+ "type": "string",
1219
+ "description": "Comma-separated fields.",
1220
+ "default": "id,updated_time,participants{id,name,email},senders{id,name,email},snippet,unread_count,can_reply,link"
1221
+ },
1222
+ "limit": {
1223
+ "type": "integer",
1224
+ "description": "Page size.",
1225
+ "default": 25
1226
+ },
1227
+ "after": {
1228
+ "type": "string",
1229
+ "description": "Pagination cursor from previous response's paging.cursors.after."
1230
+ },
1231
+ "access_token": {
1232
+ "type": "string",
1233
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1234
+ }
1235
+ },
1236
+ "required": [
1237
+ "pageId"
1238
+ ]
1239
+ },
1240
+ "mock_response": {
1241
+ "data": [
1242
+ {
1243
+ "id": "t_mock_page_thread_001",
1244
+ "updated_time": "2026-05-22T11:00:00+0000",
1245
+ "snippet": "Hi, is this still available?",
1246
+ "unread_count": 1,
1247
+ "can_reply": true,
1248
+ "participants": {
1249
+ "data": [
1250
+ {
1251
+ "id": "100200300400500",
1252
+ "name": "Page"
1253
+ },
1254
+ {
1255
+ "id": "123456789",
1256
+ "name": "Customer"
1257
+ }
1258
+ ]
1259
+ }
1260
+ }
1261
+ ],
1262
+ "paging": {
1263
+ "cursors": {
1264
+ "before": "QVFIUm",
1265
+ "after": "QVFIUm"
1266
+ }
1267
+ }
1268
+ }
1269
+ },
1270
+ {
1271
+ "name": "facebook_get_conversation",
1272
+ "description": "Fetch one Facebook Page Messenger conversation with inline messages. Calls GET /{conversationId}?fields=... with a Page access token. For deeper history, page through list_conversation_messages.",
1273
+ "method": "GET",
1274
+ "path": "/{conversationId}",
1275
+ "input_schema": {
1276
+ "type": "object",
1277
+ "properties": {
1278
+ "conversationId": {
1279
+ "type": "string",
1280
+ "description": "Conversation id from facebook_list_conversations.data[].id."
1281
+ },
1282
+ "fields": {
1283
+ "type": "string",
1284
+ "description": "Fields selector.",
1285
+ "default": "id,updated_time,participants{id,name,email},senders{id,name,email},messages{id,from,to,message,created_time,attachments}"
1286
+ },
1287
+ "access_token": {
1288
+ "type": "string",
1289
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1290
+ }
1291
+ },
1292
+ "required": [
1293
+ "conversationId"
1294
+ ]
1295
+ },
1296
+ "mock_response": {
1297
+ "id": "t_mock_page_thread_001",
1298
+ "updated_time": "2026-05-22T11:00:00+0000",
1299
+ "participants": {
1300
+ "data": [
1301
+ {
1302
+ "id": "100200300400500",
1303
+ "name": "Page"
1304
+ },
1305
+ {
1306
+ "id": "123456789",
1307
+ "name": "Customer"
1308
+ }
1309
+ ]
1310
+ },
1311
+ "messages": {
1312
+ "data": [
1313
+ {
1314
+ "id": "m_mock_001",
1315
+ "from": {
1316
+ "id": "123456789",
1317
+ "name": "Customer"
1318
+ },
1319
+ "message": "Hi, is this still available?",
1320
+ "created_time": "2026-05-22T11:00:00+0000"
1321
+ }
1322
+ ]
1323
+ }
1324
+ }
1325
+ },
1326
+ {
1327
+ "name": "facebook_send_message",
1328
+ "description": "Send a Messenger reply from a Facebook Page. Calls POST /{pageId}/messages with recipient={id:PSID}, message={text}, and messaging_type=RESPONSE by default. Requires a user-initiated conversation and the normal Messenger response window unless an approved tag/use case applies.",
1329
+ "method": "POST",
1330
+ "path": "/{pageId}/messages",
1331
+ "input_schema": {
1332
+ "type": "object",
1333
+ "properties": {
1334
+ "pageId": {
1335
+ "type": "string",
1336
+ "description": "Facebook Page ID."
1337
+ },
1338
+ "recipient": {
1339
+ "type": "object",
1340
+ "description": "Recipient object. For replies, use {id: \"<page-scoped-user-id>\"}.",
1341
+ "properties": {
1342
+ "id": {
1343
+ "type": "string",
1344
+ "description": "Page-scoped user ID (PSID)."
1345
+ }
1346
+ },
1347
+ "required": [
1348
+ "id"
1349
+ ]
1350
+ },
1351
+ "message": {
1352
+ "type": "object",
1353
+ "description": "Message payload, usually {text}.",
1354
+ "properties": {
1355
+ "text": {
1356
+ "type": "string",
1357
+ "description": "Message text."
1358
+ }
1359
+ }
1360
+ },
1361
+ "messaging_type": {
1362
+ "type": "string",
1363
+ "enum": [
1364
+ "RESPONSE",
1365
+ "UPDATE",
1366
+ "MESSAGE_TAG"
1367
+ ],
1368
+ "default": "RESPONSE",
1369
+ "description": "Messenger send type. RESPONSE is the normal customer-care reply."
1370
+ },
1371
+ "tag": {
1372
+ "type": "string",
1373
+ "description": "Optional approved Messenger tag, only with messaging_type=MESSAGE_TAG."
1374
+ },
1375
+ "access_token": {
1376
+ "type": "string",
1377
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1378
+ }
1379
+ },
1380
+ "required": [
1381
+ "pageId",
1382
+ "recipient",
1383
+ "message"
1384
+ ]
1385
+ },
1386
+ "mock_response": {
1387
+ "recipient_id": "123456789",
1388
+ "message_id": "m_mock_reply_001"
1389
+ }
1390
+ },
1391
+ {
1392
+ "name": "facebook_private_reply_to_comment",
1393
+ "description": "Send a private Messenger reply to a Facebook Page comment. Calls POST /{commentId}/private_replies with message. Meta limits this by policy/window and the user/comment must be eligible.",
1394
+ "method": "POST",
1395
+ "path": "/{commentId}/private_replies",
1396
+ "input_schema": {
1397
+ "type": "object",
1398
+ "properties": {
1399
+ "commentId": {
1400
+ "type": "string",
1401
+ "description": "Facebook comment id."
1402
+ },
1403
+ "message": {
1404
+ "type": "string",
1405
+ "description": "Private reply text."
1406
+ },
1407
+ "access_token": {
1408
+ "type": "string",
1409
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1410
+ }
1411
+ },
1412
+ "required": [
1413
+ "commentId",
1414
+ "message"
1415
+ ]
1416
+ },
1417
+ "mock_response": {
1418
+ "recipient_id": "123456789",
1419
+ "message_id": "m_mock_private_reply_001"
1420
+ }
1421
+ },
1422
+ {
1423
+ "name": "facebook_list_reviews",
1424
+ "description": "List recommendations/reviews for a Facebook Page. Calls GET /{pageId}/ratings with a Page access token. Requires pages_read_user_content and Page task access. Returns Recommendation nodes plus paging cursors.",
1425
+ "method": "GET",
1426
+ "path": "/{pageId}/ratings",
1427
+ "input_schema": {
1428
+ "type": "object",
1429
+ "properties": {
1430
+ "pageId": {
1431
+ "type": "string",
1432
+ "description": "Facebook Page ID."
1433
+ },
1434
+ "fields": {
1435
+ "type": "string",
1436
+ "description": "Recommendation fields. Meta may ignore unsupported fields depending on API version.",
1437
+ "default": "id,created_time,review_text,recommendation_type,has_rating,has_review,rating,open_graph_story,reviewer{id,name}"
1438
+ },
1439
+ "limit": {
1440
+ "type": "integer",
1441
+ "description": "Page size.",
1442
+ "default": 25
1443
+ },
1444
+ "after": {
1445
+ "type": "string",
1446
+ "description": "Pagination cursor from previous response's paging.cursors.after."
1447
+ },
1448
+ "access_token": {
1449
+ "type": "string",
1450
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1451
+ }
1452
+ },
1453
+ "required": [
1454
+ "pageId"
1455
+ ]
1456
+ },
1457
+ "mock_response": {
1458
+ "data": [
1459
+ {
1460
+ "id": "review_mock_001",
1461
+ "created_time": "2026-05-20T09:00:00+0000",
1462
+ "review_text": "Great service",
1463
+ "recommendation_type": "positive",
1464
+ "reviewer": {
1465
+ "id": "123456789",
1466
+ "name": "Customer"
1467
+ }
1468
+ }
1469
+ ],
1470
+ "paging": {
1471
+ "cursors": {
1472
+ "before": "QVFIUm",
1473
+ "after": "QVFIUm"
1474
+ }
1475
+ }
1476
+ }
1477
+ },
1478
+ {
1479
+ "name": "facebook_list_tagged",
1480
+ "description": "List public posts/photos/videos that tag a Facebook Page. Calls GET /{pageId}/tagged with a Page access token. Useful for Page mentions in the unified inbox. Visibility depends on Meta privacy and Page authenticity rules.",
1481
+ "method": "GET",
1482
+ "path": "/{pageId}/tagged",
1483
+ "input_schema": {
1484
+ "type": "object",
1485
+ "properties": {
1486
+ "pageId": {
1487
+ "type": "string",
1488
+ "description": "Facebook Page ID."
1489
+ },
1490
+ "fields": {
1491
+ "type": "string",
1492
+ "description": "Tagged object fields.",
1493
+ "default": "id,message,story,created_time,from,permalink_url,full_picture,attachments"
1494
+ },
1495
+ "limit": {
1496
+ "type": "integer",
1497
+ "description": "Page size.",
1498
+ "default": 25
1499
+ },
1500
+ "after": {
1501
+ "type": "string",
1502
+ "description": "Pagination cursor from previous response's paging.cursors.after."
1503
+ },
1504
+ "access_token": {
1505
+ "type": "string",
1506
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1507
+ }
1508
+ },
1509
+ "required": [
1510
+ "pageId"
1511
+ ]
1512
+ },
1513
+ "mock_response": {
1514
+ "data": [
1515
+ {
1516
+ "id": "tagged_mock_001",
1517
+ "message": "Mentioning the page",
1518
+ "created_time": "2026-05-21T09:00:00+0000",
1519
+ "from": {
1520
+ "id": "123456789",
1521
+ "name": "Customer"
1522
+ },
1523
+ "permalink_url": "https://www.facebook.com/mock/posts/tagged_mock_001"
1524
+ }
1525
+ ],
1526
+ "paging": {
1527
+ "cursors": {
1528
+ "before": "QVFIUm",
1529
+ "after": "QVFIUm"
1530
+ }
1531
+ }
1532
+ }
1533
+ },
1534
+ {
1535
+ "name": "list_media_comments",
1536
+ "description": "List comments on an Instagram or Facebook post. For IG calls GET /{ig-media-id}/comments; for FB calls GET /{post-id}/comments. Returns {data:[{id, text|message, username|from, timestamp|created_time, like_count?, replies?}], paging}. The page-level access_token is required (user-level tokens are rejected for /comments on Pages and on IG Business media).",
1537
+ "method": "GET",
1538
+ "path": "/{mediaId}/comments",
1539
+ "input_schema": {
1540
+ "type": "object",
1541
+ "properties": {
1542
+ "mediaId": {
1543
+ "type": "string",
1544
+ "description": "IG media id (from create_media_container → publish_media_container, or post-publish lookup) OR Facebook post id in pageId_postId format. The Graph API routes by token + id automatically."
1545
+ },
1546
+ "fields": {
1547
+ "type": "string",
1548
+ "description": "Comma-separated fields. Default covers what an inbox needs: text body, author, timestamp, like_count, parent (for nested replies).",
1549
+ "default": "id,text,username,timestamp,like_count,replies{id,text,username,timestamp,like_count}"
1550
+ },
1551
+ "limit": {
1552
+ "type": "integer",
1553
+ "description": "Page size (Meta caps around 50 by default).",
1554
+ "default": 25
1555
+ },
1556
+ "after": {
1557
+ "type": "string",
1558
+ "description": "Pagination cursor from previous response's paging.cursors.after."
1559
+ },
1560
+ "access_token": {
1561
+ "type": "string",
1562
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1563
+ }
1564
+ },
1565
+ "required": [
1566
+ "mediaId"
1567
+ ]
1568
+ },
1569
+ "mock_response": {
1570
+ "data": [
1571
+ {
1572
+ "id": "17900000000000200",
1573
+ "text": "Love this!",
1574
+ "username": "happy_user",
1575
+ "timestamp": "2026-05-22T10:30:00+0000",
1576
+ "like_count": 3
1577
+ }
1578
+ ],
1579
+ "paging": {
1580
+ "cursors": {
1581
+ "before": "QVFIUm",
1582
+ "after": "QVFIUm"
1583
+ }
1584
+ }
1585
+ }
1586
+ },
1587
+ {
1588
+ "name": "get_comment",
1589
+ "description": "Fetch a single comment by id with full fields. Calls GET /{comment-id}?fields=... on the Graph API. Works for both Instagram and Facebook comments — the comment id encodes which.",
1590
+ "method": "GET",
1591
+ "path": "/{commentId}",
1592
+ "input_schema": {
1593
+ "type": "object",
1594
+ "properties": {
1595
+ "commentId": {
1596
+ "type": "string",
1597
+ "description": "Comment id (from list_media_comments.data[].id or a webhook event)."
1598
+ },
1599
+ "fields": {
1600
+ "type": "string",
1601
+ "description": "Fields selector.",
1602
+ "default": "id,text,username,timestamp,like_count,hidden,replies{id,text,username,timestamp},parent_id"
1603
+ },
1604
+ "access_token": {
1605
+ "type": "string",
1606
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1607
+ }
1608
+ },
1609
+ "required": [
1610
+ "commentId"
1611
+ ]
1612
+ },
1613
+ "mock_response": {
1614
+ "id": "17900000000000200",
1615
+ "text": "Love this!",
1616
+ "username": "happy_user",
1617
+ "timestamp": "2026-05-22T10:30:00+0000",
1618
+ "like_count": 3
1619
+ }
1620
+ },
1621
+ {
1622
+ "name": "reply_to_comment",
1623
+ "description": "Reply to an Instagram or Facebook comment as the page/IG account. Calls POST /{comment-id}/replies with `message`. Returns {id} — the new reply comment id. For IG, the reply appears under the original comment as a nested reply. Page-level access_token required. To send a private DM to the comment author instead (IG only), use send_message with recipient.comment_id.",
1624
+ "method": "POST",
1625
+ "path": "/{commentId}/replies",
1626
+ "input_schema": {
1627
+ "type": "object",
1628
+ "properties": {
1629
+ "commentId": {
1630
+ "type": "string",
1631
+ "description": "Parent comment id to reply to."
1632
+ },
1633
+ "message": {
1634
+ "type": "string",
1635
+ "description": "Reply body text. Plain text; IG strips most formatting."
1636
+ },
1637
+ "access_token": {
1638
+ "type": "string",
1639
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1640
+ }
1641
+ },
1642
+ "required": [
1643
+ "commentId",
1644
+ "message"
1645
+ ]
1646
+ },
1647
+ "mock_response": {
1648
+ "id": "17900000000000201"
1649
+ }
1650
+ },
1651
+ {
1652
+ "name": "hide_comment",
1653
+ "description": "Hide or unhide a comment. Calls POST /{comment-id} with hide=true|false. The comment stays visible to its author and their friends but is removed from public view. Reversible via the same endpoint with hide=false. Supported on both IG Business and Facebook page comments. Page-level access_token required.",
1654
+ "method": "POST",
1655
+ "path": "/{commentId}",
1656
+ "input_schema": {
1657
+ "type": "object",
1658
+ "properties": {
1659
+ "commentId": {
1660
+ "type": "string",
1661
+ "description": "Comment id to hide or unhide."
1662
+ },
1663
+ "hide": {
1664
+ "type": "boolean",
1665
+ "description": "true to hide the comment; false to unhide.",
1666
+ "default": true
1667
+ },
1668
+ "access_token": {
1669
+ "type": "string",
1670
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1671
+ }
1672
+ },
1673
+ "required": [
1674
+ "commentId"
1675
+ ]
1676
+ },
1677
+ "mock_response": {
1678
+ "success": true
1679
+ }
1680
+ },
1681
+ {
1682
+ "name": "delete_comment",
1683
+ "description": "Permanently delete a comment we authored, or any comment on our IG/FB content. Calls DELETE /{comment-id}. Page-level access_token required.",
1684
+ "method": "DELETE",
1685
+ "path": "/{commentId}",
1686
+ "input_schema": {
1687
+ "type": "object",
1688
+ "properties": {
1689
+ "commentId": {
1690
+ "type": "string",
1691
+ "description": "Comment id to delete."
1692
+ },
1693
+ "access_token": {
1694
+ "type": "string",
1695
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1696
+ }
1697
+ },
1698
+ "required": [
1699
+ "commentId"
1700
+ ]
1701
+ },
1702
+ "mock_response": {
1703
+ "success": true
1704
+ }
1705
+ },
1706
+ {
1707
+ "name": "list_my_tags",
1708
+ "description": "List Instagram media the IG Business account has been tagged in (mentions on visual content). Calls GET /{ig-user-id}/tags on the Graph API. Returns {data:[{id, caption, media_type, media_url|permalink, username, timestamp}]} — one entry per tagged media. Useful for picking up brand mentions surfaced via @-tags in others' posts. Comment-level mentions arrive via webhooks, not this endpoint.",
1709
+ "method": "GET",
1710
+ "path": "/{instagramAccountId}/tags",
1711
+ "input_schema": {
1712
+ "type": "object",
1713
+ "properties": {
1714
+ "instagramAccountId": {
1715
+ "type": "string",
1716
+ "description": "Your Instagram Business Account ID (from list_pages → data[].instagram_business_account.id)."
1717
+ },
1718
+ "fields": {
1719
+ "type": "string",
1720
+ "description": "Comma-separated fields.",
1721
+ "default": "id,caption,media_type,media_url,permalink,username,timestamp,like_count,comments_count"
1722
+ },
1723
+ "limit": {
1724
+ "type": "integer",
1725
+ "description": "Page size.",
1726
+ "default": 25
1727
+ },
1728
+ "after": {
1729
+ "type": "string",
1730
+ "description": "Pagination cursor from previous response's paging.cursors.after."
1731
+ },
1732
+ "access_token": {
1733
+ "type": "string",
1734
+ "description": "Page-level access token (from list_pages → data[].access_token). Required."
1735
+ }
1736
+ },
1737
+ "required": [
1738
+ "instagramAccountId"
1739
+ ]
1740
+ },
1741
+ "mock_response": {
1742
+ "data": [
1743
+ {
1744
+ "id": "17900000000000300",
1745
+ "media_type": "IMAGE",
1746
+ "username": "some_brand",
1747
+ "timestamp": "2026-05-21T09:00:00+0000"
1748
+ }
1749
+ ],
1750
+ "paging": {
1751
+ "cursors": {}
1752
+ }
306
1753
  }
307
1754
  }
308
1755
  ]
309
- }
1756
+ }