posterly-mcp-server 0.43.8 → 0.45.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 (169) hide show
  1. package/README.md +310 -109
  2. package/dist/index.js +190 -874
  3. package/dist/lib/alias-transport.d.ts +84 -0
  4. package/dist/lib/alias-transport.js +193 -0
  5. package/dist/lib/api-client.d.ts +97 -0
  6. package/dist/lib/api-client.js +81 -0
  7. package/dist/lib/preview-token-core.d.ts +62 -0
  8. package/dist/lib/preview-token-core.js +131 -0
  9. package/dist/lib/preview-token.d.ts +23 -0
  10. package/dist/lib/preview-token.js +44 -0
  11. package/dist/lib/tool-registry.d.ts +246 -0
  12. package/dist/lib/tool-registry.js +394 -0
  13. package/dist/lib/tool-runtime.d.ts +68 -0
  14. package/dist/lib/tool-runtime.js +85 -0
  15. package/dist/lib/version.d.ts +1 -1
  16. package/dist/lib/version.js +1 -1
  17. package/dist/tools/audit-google-business-profile.js +1 -1
  18. package/dist/tools/connect-account.d.ts +4 -4
  19. package/dist/tools/connect-account.js +2 -2
  20. package/dist/tools/create-api-key.js +1 -1
  21. package/dist/tools/create-connect-session.d.ts +2 -2
  22. package/dist/tools/create-connect-session.js +2 -2
  23. package/dist/tools/create-post.d.ts +6 -6
  24. package/dist/tools/create-post.js +3 -3
  25. package/dist/tools/create-posts-batch.d.ts +4 -4
  26. package/dist/tools/create-webhook.d.ts +4 -4
  27. package/dist/tools/delete-post.d.ts +34 -10
  28. package/dist/tools/delete-post.js +52 -16
  29. package/dist/tools/disconnect-account.d.ts +2 -2
  30. package/dist/tools/generate-captions.d.ts +2 -2
  31. package/dist/tools/generate-image.d.ts +4 -4
  32. package/dist/tools/generate-image.js +2 -2
  33. package/dist/tools/generate-video.d.ts +6 -6
  34. package/dist/tools/generate-video.js +1 -1
  35. package/dist/tools/get-agent-signup-info.js +2 -2
  36. package/dist/tools/get-post.d.ts +16 -1
  37. package/dist/tools/get-post.js +35 -19
  38. package/dist/tools/list-accounts.d.ts +49 -3
  39. package/dist/tools/list-accounts.js +148 -33
  40. package/dist/tools/list-analytics.d.ts +111 -0
  41. package/dist/tools/list-analytics.js +393 -0
  42. package/dist/tools/list-brands.d.ts +38 -3
  43. package/dist/tools/list-brands.js +138 -20
  44. package/dist/tools/list-comments.d.ts +29 -9
  45. package/dist/tools/list-comments.js +75 -34
  46. package/dist/tools/list-conversations.d.ts +32 -9
  47. package/dist/tools/list-conversations.js +63 -27
  48. package/dist/tools/list-google-business-media.js +1 -1
  49. package/dist/tools/list-google-business-reviews.d.ts +32 -9
  50. package/dist/tools/list-google-business-reviews.js +77 -52
  51. package/dist/tools/list-jobs.d.ts +60 -0
  52. package/dist/tools/list-jobs.js +81 -0
  53. package/dist/tools/list-platforms.d.ts +62 -3
  54. package/dist/tools/list-platforms.js +118 -9
  55. package/dist/tools/list-posts.d.ts +2 -2
  56. package/dist/tools/list-workspace-members.d.ts +17 -0
  57. package/dist/tools/list-workspace-members.js +51 -0
  58. package/dist/tools/manage-comment.d.ts +102 -0
  59. package/dist/tools/manage-comment.js +125 -0
  60. package/dist/tools/manage-conversation.d.ts +79 -0
  61. package/dist/tools/manage-conversation.js +75 -0
  62. package/dist/tools/manage-google-business-media.d.ts +103 -0
  63. package/dist/tools/manage-google-business-media.js +126 -0
  64. package/dist/tools/manage-google-business-review.d.ts +146 -0
  65. package/dist/tools/manage-google-business-review.js +115 -0
  66. package/dist/tools/manage-oauth-client.d.ts +121 -0
  67. package/dist/tools/manage-oauth-client.js +94 -0
  68. package/dist/tools/manage-webhook.d.ts +99 -0
  69. package/dist/tools/manage-webhook.js +87 -0
  70. package/dist/tools/manage-workspace-member.d.ts +57 -0
  71. package/dist/tools/manage-workspace-member.js +131 -0
  72. package/dist/tools/reply-to-comment.d.ts +2 -2
  73. package/dist/tools/send-message.d.ts +2 -2
  74. package/dist/tools/start-signup.d.ts +2 -2
  75. package/dist/tools/submit-agent-feedback.d.ts +4 -4
  76. package/dist/tools/submit-product-feedback.d.ts +4 -4
  77. package/dist/tools/trigger-platform-helper.d.ts +2 -2
  78. package/dist/tools/update-post-release-id.d.ts +2 -2
  79. package/dist/tools/update-post-status.d.ts +2 -2
  80. package/dist/tools/update-post.d.ts +64 -13
  81. package/dist/tools/update-post.js +79 -26
  82. package/dist/tools/upload-media.d.ts +32 -9
  83. package/dist/tools/upload-media.js +54 -18
  84. package/dist/tools/validate-post.d.ts +4 -4
  85. package/dist/tools/whoami.d.ts +15 -2
  86. package/dist/tools/whoami.js +221 -25
  87. package/package.json +5 -3
  88. package/scripts/test-alias-transport.mjs +368 -0
  89. package/scripts/test-client-header-sanitization.mjs +78 -0
  90. package/scripts/test-tool-annotations.mjs +38 -17
  91. package/server.json +9 -2
  92. package/src/index.ts +227 -1411
  93. package/src/lib/alias-transport.ts +233 -0
  94. package/src/lib/api-client.ts +168 -0
  95. package/src/lib/preview-token-core.ts +157 -0
  96. package/src/lib/preview-token.ts +54 -0
  97. package/src/lib/tool-registry.ts +538 -0
  98. package/src/lib/tool-runtime.ts +117 -0
  99. package/src/lib/version.ts +1 -1
  100. package/src/tools/audit-google-business-profile.ts +1 -1
  101. package/src/tools/connect-account.ts +2 -2
  102. package/src/tools/create-api-key.ts +1 -1
  103. package/src/tools/create-connect-session.ts +2 -2
  104. package/src/tools/create-post.ts +3 -3
  105. package/src/tools/delete-post.ts +60 -19
  106. package/src/tools/generate-image.ts +2 -2
  107. package/src/tools/generate-video.ts +1 -1
  108. package/src/tools/get-agent-signup-info.ts +2 -2
  109. package/src/tools/get-post.ts +35 -21
  110. package/src/tools/list-accounts.ts +187 -39
  111. package/src/tools/list-analytics.ts +444 -0
  112. package/src/tools/list-brands.ts +162 -26
  113. package/src/tools/list-comments.ts +86 -43
  114. package/src/tools/list-conversations.ts +81 -39
  115. package/src/tools/list-google-business-media.ts +1 -1
  116. package/src/tools/list-google-business-reviews.ts +93 -64
  117. package/src/tools/list-jobs.ts +91 -0
  118. package/src/tools/list-platforms.ts +135 -11
  119. package/src/tools/list-workspace-members.ts +61 -0
  120. package/src/tools/manage-comment.ts +142 -0
  121. package/src/tools/manage-conversation.ts +89 -0
  122. package/src/tools/manage-google-business-media.ts +147 -0
  123. package/src/tools/manage-google-business-review.ts +139 -0
  124. package/src/tools/manage-oauth-client.ts +116 -0
  125. package/src/tools/manage-webhook.ts +103 -0
  126. package/src/tools/manage-workspace-member.ts +151 -0
  127. package/src/tools/update-post.ts +106 -39
  128. package/src/tools/upload-media.ts +76 -28
  129. package/src/tools/whoami.ts +253 -30
  130. package/tool-annotations.json +76 -144
  131. package/tool-registry.json +2085 -0
  132. package/src/tools/add-google-business-media.ts +0 -50
  133. package/src/tools/create-oauth-client.ts +0 -36
  134. package/src/tools/delete-comment.ts +0 -29
  135. package/src/tools/delete-google-business-media.ts +0 -30
  136. package/src/tools/delete-google-business-review-reply.ts +0 -30
  137. package/src/tools/delete-oauth-client.ts +0 -23
  138. package/src/tools/delete-post-group.ts +0 -17
  139. package/src/tools/delete-webhook.ts +0 -17
  140. package/src/tools/get-account-analytics.ts +0 -171
  141. package/src/tools/get-brand-profile.ts +0 -86
  142. package/src/tools/get-brand.ts +0 -34
  143. package/src/tools/get-comment.ts +0 -47
  144. package/src/tools/get-connect-link.ts +0 -61
  145. package/src/tools/get-connect-session.ts +0 -63
  146. package/src/tools/get-conversation.ts +0 -44
  147. package/src/tools/get-google-business-review-link.ts +0 -30
  148. package/src/tools/get-image-job.ts +0 -36
  149. package/src/tools/get-learned-voice.ts +0 -31
  150. package/src/tools/get-mcp-status.ts +0 -212
  151. package/src/tools/get-performance-profile.ts +0 -47
  152. package/src/tools/get-platform-schema.ts +0 -56
  153. package/src/tools/get-post-analytics.ts +0 -243
  154. package/src/tools/get-post-insights.ts +0 -60
  155. package/src/tools/get-post-missing.ts +0 -16
  156. package/src/tools/get-video-job.ts +0 -36
  157. package/src/tools/list-brand-accounts.ts +0 -36
  158. package/src/tools/reply-google-business-review.ts +0 -32
  159. package/src/tools/reply-to-comment.ts +0 -30
  160. package/src/tools/send-message.ts +0 -28
  161. package/src/tools/suggest-google-business-review-reply.ts +0 -44
  162. package/src/tools/sync-inbox.ts +0 -28
  163. package/src/tools/test-webhook.ts +0 -18
  164. package/src/tools/update-comment.ts +0 -31
  165. package/src/tools/update-oauth-client.ts +0 -38
  166. package/src/tools/update-post-release-id.ts +0 -25
  167. package/src/tools/update-post-status.ts +0 -31
  168. package/src/tools/update-webhook.ts +0 -36
  169. package/src/tools/upload-media-from-url.ts +0 -33
package/dist/index.js CHANGED
@@ -1,918 +1,234 @@
1
1
  #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
2
3
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
4
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
- import { PosterlyClient } from './lib/api-client.js';
5
+ import { PosterlyClient, setMcpClientNameResolver } from './lib/api-client.js';
5
6
  import { POSTERLY_MCP_VERSION } from './lib/version.js';
6
7
  import { getToolAnnotations } from './lib/tool-annotations.js';
8
+ import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
9
+ import { AliasTransport } from './lib/alias-transport.js';
10
+ import { StdioPreviewTokens } from './lib/preview-token.js';
11
+ import { parseToolsets, toolsetInstructions, visibleTools } from './lib/tool-registry.js';
7
12
  import { getAgentSignupInfoTool } from './tools/get-agent-signup-info.js';
8
13
  import { getSignupSessionTool } from './tools/get-signup-session.js';
9
14
  import { startSignupTool } from './tools/start-signup.js';
10
- import { getMcpStatusTool } from './tools/get-mcp-status.js';
15
+ import { whoamiTool } from './tools/whoami.js';
11
16
  import { listAccountsTool } from './tools/list-accounts.js';
12
17
  import { disconnectAccountTool } from './tools/disconnect-account.js';
18
+ import { connectAccountTool } from './tools/connect-account.js';
19
+ import { createConnectSessionTool } from './tools/create-connect-session.js';
20
+ import { createApiKeyTool } from './tools/create-api-key.js';
21
+ import { deleteApiKeyTool } from './tools/delete-api-key.js';
22
+ import { listWorkspaceMembersTool } from './tools/list-workspace-members.js';
23
+ import { manageWorkspaceMemberTool } from './tools/manage-workspace-member.js';
24
+ import { getCreditsTool } from './tools/get-credits.js';
25
+ import { getSubscriptionTool } from './tools/get-subscription.js';
26
+ import { cancelSubscriptionTool } from './tools/cancel-subscription.js';
27
+ import { pauseSubscriptionTool } from './tools/pause-subscription.js';
28
+ import { resumeSubscriptionTool } from './tools/resume-subscription.js';
29
+ import { downgradeSubscriptionTool } from './tools/downgrade-subscription.js';
30
+ import { listOAuthClientsTool } from './tools/list-oauth-clients.js';
31
+ import { manageOAuthClientTool } from './tools/manage-oauth-client.js';
32
+ import { listPlatformsTool } from './tools/list-platforms.js';
33
+ import { triggerPlatformHelperTool } from './tools/trigger-platform-helper.js';
13
34
  import { listBrandsTool } from './tools/list-brands.js';
14
- import { getBrandTool } from './tools/get-brand.js';
15
- import { listBrandAccountsTool } from './tools/list-brand-accounts.js';
16
- import { getBrandProfileTool } from './tools/get-brand-profile.js';
17
- import { getLearnedVoiceTool } from './tools/get-learned-voice.js';
18
- import { getPerformanceProfileTool } from './tools/get-performance-profile.js';
19
- import { getPostInsightsTool } from './tools/get-post-insights.js';
20
35
  import { listPostSuggestionsTool } from './tools/list-post-suggestions.js';
21
36
  import { dismissSuggestionTool } from './tools/dismiss-suggestion.js';
22
- import { createPostTool } from './tools/create-post.js';
23
- import { validatePostTool } from './tools/validate-post.js';
24
37
  import { submitAgentFeedbackTool } from './tools/submit-agent-feedback.js';
25
38
  import { submitProductFeedbackTool } from './tools/submit-product-feedback.js';
39
+ import { validatePostTool } from './tools/validate-post.js';
40
+ import { createPostTool } from './tools/create-post.js';
26
41
  import { createPostsBatchTool } from './tools/create-posts-batch.js';
27
42
  import { findSlotTool } from './tools/find-slot.js';
28
43
  import { listPostsTool } from './tools/list-posts.js';
29
44
  import { uploadMediaTool } from './tools/upload-media.js';
45
+ import { createSignedUploadTool } from './tools/create-signed-upload.js';
46
+ import { createMediaDropTool } from './tools/create-media-drop.js';
47
+ import { listMediaTool } from './tools/list-media.js';
48
+ import { getVideoOptionsTool } from './tools/get-video-options.js';
49
+ import { runVideoFunctionTool } from './tools/run-video-function.js';
50
+ import { generateVideoTool } from './tools/generate-video.js';
51
+ import { listJobsTool } from './tools/list-jobs.js';
52
+ import { generateCaptionsTool } from './tools/generate-captions.js';
53
+ import { generateImageTool } from './tools/generate-image.js';
30
54
  import { getPostTool } from './tools/get-post.js';
31
- import { getPostMissingTool } from './tools/get-post-missing.js';
32
55
  import { askSupportTool } from './tools/ask-support.js';
33
56
  import { updatePostTool } from './tools/update-post.js';
34
- import { updatePostStatusTool } from './tools/update-post-status.js';
35
- import { updatePostReleaseIdTool } from './tools/update-post-release-id.js';
36
57
  import { deletePostTool } from './tools/delete-post.js';
37
- import { deletePostGroupTool } from './tools/delete-post-group.js';
38
- import { whoamiTool } from './tools/whoami.js';
39
- import { generateCaptionsTool } from './tools/generate-captions.js';
40
- import { generateImageTool } from './tools/generate-image.js';
41
- import { getImageJobTool } from './tools/get-image-job.js';
42
- import { getVideoOptionsTool } from './tools/get-video-options.js';
43
- import { runVideoFunctionTool } from './tools/run-video-function.js';
44
- import { generateVideoTool } from './tools/generate-video.js';
45
- import { getVideoJobTool } from './tools/get-video-job.js';
46
- import { getAccountAnalyticsTool } from './tools/get-account-analytics.js';
47
- import { getPostAnalyticsTool } from './tools/get-post-analytics.js';
58
+ import { listAnalyticsTool } from './tools/list-analytics.js';
48
59
  import { listGoogleBusinessReviewsTool } from './tools/list-google-business-reviews.js';
49
- import { getGoogleBusinessReviewLinkTool } from './tools/get-google-business-review-link.js';
50
60
  import { auditGoogleBusinessProfileTool } from './tools/audit-google-business-profile.js';
51
- import { suggestGoogleBusinessReviewReplyTool } from './tools/suggest-google-business-review-reply.js';
52
- import { replyGoogleBusinessReviewTool } from './tools/reply-google-business-review.js';
53
- import { deleteGoogleBusinessReviewReplyTool } from './tools/delete-google-business-review-reply.js';
61
+ import { manageGoogleBusinessReviewTool } from './tools/manage-google-business-review.js';
54
62
  import { listGoogleBusinessMediaTool } from './tools/list-google-business-media.js';
55
- import { addGoogleBusinessMediaTool } from './tools/add-google-business-media.js';
56
- import { deleteGoogleBusinessMediaTool } from './tools/delete-google-business-media.js';
63
+ import { manageGoogleBusinessMediaTool } from './tools/manage-google-business-media.js';
57
64
  import { listConversationsTool } from './tools/list-conversations.js';
58
- import { getConversationTool } from './tools/get-conversation.js';
59
- import { sendMessageTool } from './tools/send-message.js';
65
+ import { manageConversationTool } from './tools/manage-conversation.js';
60
66
  import { listCommentsTool } from './tools/list-comments.js';
61
- import { getCommentTool } from './tools/get-comment.js';
62
- import { replyToCommentTool } from './tools/reply-to-comment.js';
63
- import { updateCommentTool } from './tools/update-comment.js';
64
- import { deleteCommentTool } from './tools/delete-comment.js';
65
- import { syncInboxTool } from './tools/sync-inbox.js';
67
+ import { manageCommentTool } from './tools/manage-comment.js';
66
68
  import { listActivityTool } from './tools/list-activity.js';
67
69
  import { getUpdatesTool } from './tools/get-updates.js';
68
70
  import { listWebhooksTool } from './tools/list-webhooks.js';
69
71
  import { createWebhookTool } from './tools/create-webhook.js';
70
- import { updateWebhookTool } from './tools/update-webhook.js';
71
- import { deleteWebhookTool } from './tools/delete-webhook.js';
72
- import { testWebhookTool } from './tools/test-webhook.js';
73
- import { listPlatformsTool } from './tools/list-platforms.js';
74
- import { getPlatformSchemaTool } from './tools/get-platform-schema.js';
75
- import { triggerPlatformHelperTool } from './tools/trigger-platform-helper.js';
72
+ import { manageWebhookTool } from './tools/manage-webhook.js';
76
73
  import { getXPostingQuotaTool } from './tools/get-x-posting-quota.js';
77
- import { createSignedUploadTool } from './tools/create-signed-upload.js';
78
- import { createMediaDropTool } from './tools/create-media-drop.js';
79
- import { listMediaTool } from './tools/list-media.js';
80
- import { uploadMediaFromUrlTool } from './tools/upload-media-from-url.js';
81
- import { getConnectLinkTool } from './tools/get-connect-link.js';
82
- import { connectAccountTool } from './tools/connect-account.js';
83
- import { createConnectSessionTool } from './tools/create-connect-session.js';
84
- import { getConnectSessionTool } from './tools/get-connect-session.js';
85
- import { createApiKeyTool } from './tools/create-api-key.js';
86
- import { deleteApiKeyTool } from './tools/delete-api-key.js';
87
- import { getCreditsTool } from './tools/get-credits.js';
88
- import { getSubscriptionTool } from './tools/get-subscription.js';
89
- import { cancelSubscriptionTool } from './tools/cancel-subscription.js';
90
- import { pauseSubscriptionTool } from './tools/pause-subscription.js';
91
- import { resumeSubscriptionTool } from './tools/resume-subscription.js';
92
- import { downgradeSubscriptionTool } from './tools/downgrade-subscription.js';
93
- import { listOAuthClientsTool } from './tools/list-oauth-clients.js';
94
- import { createOAuthClientTool } from './tools/create-oauth-client.js';
95
- import { updateOAuthClientTool } from './tools/update-oauth-client.js';
96
- import { deleteOAuthClientTool } from './tools/delete-oauth-client.js';
74
+ /**
75
+ * Every stdio tool, in registration order. The order is what tools/list
76
+ * returns, so keep new tools appended where they belong rather than
77
+ * re-sorting: reordering changes the published tool list.
78
+ */
79
+ const STDIO_TOOLS = [
80
+ getAgentSignupInfoTool,
81
+ startSignupTool,
82
+ getSignupSessionTool,
83
+ whoamiTool,
84
+ listAccountsTool,
85
+ disconnectAccountTool,
86
+ connectAccountTool,
87
+ createConnectSessionTool,
88
+ createApiKeyTool,
89
+ deleteApiKeyTool,
90
+ listWorkspaceMembersTool,
91
+ manageWorkspaceMemberTool,
92
+ getCreditsTool,
93
+ getSubscriptionTool,
94
+ cancelSubscriptionTool,
95
+ pauseSubscriptionTool,
96
+ resumeSubscriptionTool,
97
+ downgradeSubscriptionTool,
98
+ listOAuthClientsTool,
99
+ manageOAuthClientTool,
100
+ listPlatformsTool,
101
+ triggerPlatformHelperTool,
102
+ listBrandsTool,
103
+ listPostSuggestionsTool,
104
+ dismissSuggestionTool,
105
+ submitAgentFeedbackTool,
106
+ submitProductFeedbackTool,
107
+ validatePostTool,
108
+ createPostTool,
109
+ createPostsBatchTool,
110
+ findSlotTool,
111
+ listPostsTool,
112
+ uploadMediaTool,
113
+ createSignedUploadTool,
114
+ createMediaDropTool,
115
+ listMediaTool,
116
+ getVideoOptionsTool,
117
+ runVideoFunctionTool,
118
+ generateVideoTool,
119
+ listJobsTool,
120
+ generateCaptionsTool,
121
+ generateImageTool,
122
+ getPostTool,
123
+ askSupportTool,
124
+ updatePostTool,
125
+ deletePostTool,
126
+ listAnalyticsTool,
127
+ listGoogleBusinessReviewsTool,
128
+ auditGoogleBusinessProfileTool,
129
+ manageGoogleBusinessReviewTool,
130
+ listGoogleBusinessMediaTool,
131
+ manageGoogleBusinessMediaTool,
132
+ listConversationsTool,
133
+ manageConversationTool,
134
+ listCommentsTool,
135
+ manageCommentTool,
136
+ listActivityTool,
137
+ getUpdatesTool,
138
+ listWebhooksTool,
139
+ createWebhookTool,
140
+ manageWebhookTool,
141
+ getXPostingQuotaTool,
142
+ ];
143
+ // The tool registry (sets, labels, aliases) ships at the package root next to
144
+ // tool-annotations.json; dist/index.js reads it from one level up.
145
+ const require = createRequire(import.meta.url);
146
+ const registry = require('../tool-registry.json');
147
+ /**
148
+ * Tool sets to list (POSTERLY_TOOLSETS env or --toolsets=core,inbox). Default
149
+ * is every set, so nobody loses tools. Signup tools are always listed. Sets
150
+ * only filter tools/list: every tool is still registered and callable.
151
+ */
152
+ function requestedToolsets() {
153
+ const flag = process.argv.find((arg) => arg.startsWith('--toolsets='));
154
+ if (flag)
155
+ return flag.slice('--toolsets='.length);
156
+ return process.env.POSTERLY_TOOLSETS;
157
+ }
158
+ const toolsets = parseToolsets(registry, requestedToolsets(), 'stdio');
159
+ if (toolsets.unknown.length > 0) {
160
+ console.error(`posterly MCP: ignoring unknown tool set(s): ${toolsets.unknown.join(', ')}`);
161
+ }
97
162
  const server = new McpServer({
98
163
  name: 'posterly',
99
164
  version: POSTERLY_MCP_VERSION,
165
+ }, {
166
+ // Which tool sets exist, that every set is on by default, how to load
167
+ // fewer, and how preview then confirm works (built from the registry).
168
+ instructions: toolsetInstructions(registry, 'stdio'),
100
169
  });
101
170
  const client = new PosterlyClient();
102
- // Register tools
103
- server.tool(getAgentSignupInfoTool.name, getAgentSignupInfoTool.description, getAgentSignupInfoTool.inputSchema.shape, getToolAnnotations(getAgentSignupInfoTool.name), async () => {
104
- try {
105
- const text = await getAgentSignupInfoTool.execute(client);
106
- return { content: [{ type: 'text', text }] };
107
- }
108
- catch (err) {
109
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
110
- }
111
- });
112
- server.tool(startSignupTool.name, startSignupTool.description, startSignupTool.inputSchema.shape, getToolAnnotations(startSignupTool.name), async (input) => {
113
- try {
114
- const text = await startSignupTool.execute(client, input);
115
- return { content: [{ type: 'text', text }] };
116
- }
117
- catch (err) {
118
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
119
- }
120
- });
121
- server.tool(getSignupSessionTool.name, getSignupSessionTool.description, getSignupSessionTool.inputSchema.shape, getToolAnnotations(getSignupSessionTool.name), async (input) => {
122
- try {
123
- const text = await getSignupSessionTool.execute(client, input);
124
- return { content: [{ type: 'text', text }] };
125
- }
126
- catch (err) {
127
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
128
- }
129
- });
130
- server.tool(getMcpStatusTool.name, getMcpStatusTool.description, getMcpStatusTool.inputSchema.shape, getToolAnnotations(getMcpStatusTool.name), async () => {
131
- try {
132
- const text = await getMcpStatusTool.execute(client);
133
- return { content: [{ type: 'text', text }] };
134
- }
135
- catch (err) {
136
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
137
- }
138
- });
139
- server.tool(whoamiTool.name, whoamiTool.description, whoamiTool.inputSchema.shape, getToolAnnotations(whoamiTool.name), async () => {
140
- try {
141
- const text = await whoamiTool.execute(client);
142
- return { content: [{ type: 'text', text }] };
143
- }
144
- catch (err) {
145
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
146
- }
147
- });
148
- server.tool(listAccountsTool.name, listAccountsTool.description, listAccountsTool.inputSchema.shape, getToolAnnotations(listAccountsTool.name), async (input) => {
149
- try {
150
- const text = await listAccountsTool.execute(client, input);
151
- return { content: [{ type: 'text', text }] };
152
- }
153
- catch (err) {
154
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
155
- }
156
- });
157
- server.tool(disconnectAccountTool.name, disconnectAccountTool.description, disconnectAccountTool.inputSchema.shape, getToolAnnotations(disconnectAccountTool.name), async (input) => {
158
- try {
159
- const text = await disconnectAccountTool.execute(client, input);
160
- return { content: [{ type: 'text', text }] };
161
- }
162
- catch (err) {
163
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
164
- }
165
- });
166
- server.tool(getConnectLinkTool.name, getConnectLinkTool.description, getConnectLinkTool.inputSchema.shape, getToolAnnotations(getConnectLinkTool.name), async (input) => {
167
- try {
168
- const text = await getConnectLinkTool.execute(client, input);
169
- return { content: [{ type: 'text', text }] };
170
- }
171
- catch (err) {
172
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
173
- }
174
- });
175
- server.tool(connectAccountTool.name, connectAccountTool.description, connectAccountTool.inputSchema.shape, getToolAnnotations(connectAccountTool.name), async (input) => {
176
- try {
177
- const text = await connectAccountTool.execute(client, input);
178
- return { content: [{ type: 'text', text }] };
179
- }
180
- catch (err) {
181
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
182
- }
183
- });
184
- server.tool(createConnectSessionTool.name, createConnectSessionTool.description, createConnectSessionTool.inputSchema.shape, getToolAnnotations(createConnectSessionTool.name), async (input) => {
185
- try {
186
- const text = await createConnectSessionTool.execute(client, input);
187
- return { content: [{ type: 'text', text }] };
188
- }
189
- catch (err) {
190
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
191
- }
192
- });
193
- server.tool(getConnectSessionTool.name, getConnectSessionTool.description, getConnectSessionTool.inputSchema.shape, getToolAnnotations(getConnectSessionTool.name), async (input) => {
194
- try {
195
- const text = await getConnectSessionTool.execute(client, input);
196
- return { content: [{ type: 'text', text }] };
197
- }
198
- catch (err) {
199
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
200
- }
201
- });
202
- server.tool(createApiKeyTool.name, createApiKeyTool.description, createApiKeyTool.inputSchema.shape, getToolAnnotations(createApiKeyTool.name), async (input) => {
203
- try {
204
- const text = await createApiKeyTool.execute(client, input);
205
- return { content: [{ type: 'text', text }] };
206
- }
207
- catch (err) {
208
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
209
- }
210
- });
211
- server.tool(deleteApiKeyTool.name, deleteApiKeyTool.description, deleteApiKeyTool.inputSchema.shape, getToolAnnotations(deleteApiKeyTool.name), async (input) => {
212
- try {
213
- const text = await deleteApiKeyTool.execute(client, input);
214
- return { content: [{ type: 'text', text }] };
215
- }
216
- catch (err) {
217
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
218
- }
219
- });
220
- server.tool(getCreditsTool.name, getCreditsTool.description, getCreditsTool.inputSchema.shape, getToolAnnotations(getCreditsTool.name), async () => {
221
- try {
222
- const text = await getCreditsTool.execute(client);
223
- return { content: [{ type: 'text', text }] };
224
- }
225
- catch (err) {
226
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
227
- }
228
- });
229
- server.tool(getSubscriptionTool.name, getSubscriptionTool.description, getSubscriptionTool.inputSchema.shape, getToolAnnotations(getSubscriptionTool.name), async () => {
230
- try {
231
- const text = await getSubscriptionTool.execute(client);
232
- return { content: [{ type: 'text', text }] };
233
- }
234
- catch (err) {
235
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
236
- }
237
- });
238
- server.tool(cancelSubscriptionTool.name, cancelSubscriptionTool.description, cancelSubscriptionTool.inputSchema.shape, getToolAnnotations(cancelSubscriptionTool.name), async (input) => {
239
- try {
240
- const text = await cancelSubscriptionTool.execute(client, input);
241
- return { content: [{ type: 'text', text }] };
242
- }
243
- catch (err) {
244
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
245
- }
246
- });
247
- server.tool(pauseSubscriptionTool.name, pauseSubscriptionTool.description, pauseSubscriptionTool.inputSchema.shape, getToolAnnotations(pauseSubscriptionTool.name), async (input) => {
248
- try {
249
- const text = await pauseSubscriptionTool.execute(client, input);
250
- return { content: [{ type: 'text', text }] };
251
- }
252
- catch (err) {
253
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
254
- }
255
- });
256
- server.tool(resumeSubscriptionTool.name, resumeSubscriptionTool.description, resumeSubscriptionTool.inputSchema.shape, getToolAnnotations(resumeSubscriptionTool.name), async () => {
257
- try {
258
- const text = await resumeSubscriptionTool.execute(client);
259
- return { content: [{ type: 'text', text }] };
260
- }
261
- catch (err) {
262
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
263
- }
264
- });
265
- server.tool(downgradeSubscriptionTool.name, downgradeSubscriptionTool.description, downgradeSubscriptionTool.inputSchema.shape, getToolAnnotations(downgradeSubscriptionTool.name), async (input) => {
266
- try {
267
- const text = await downgradeSubscriptionTool.execute(client, input);
268
- return { content: [{ type: 'text', text }] };
269
- }
270
- catch (err) {
271
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
272
- }
273
- });
274
- server.tool(listOAuthClientsTool.name, listOAuthClientsTool.description, listOAuthClientsTool.inputSchema.shape, getToolAnnotations(listOAuthClientsTool.name), async () => {
275
- try {
276
- const text = await listOAuthClientsTool.execute(client);
277
- return { content: [{ type: 'text', text }] };
278
- }
279
- catch (err) {
280
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
281
- }
282
- });
283
- server.tool(createOAuthClientTool.name, createOAuthClientTool.description, createOAuthClientTool.inputSchema.shape, getToolAnnotations(createOAuthClientTool.name), async (input) => {
284
- try {
285
- const text = await createOAuthClientTool.execute(client, input);
286
- return { content: [{ type: 'text', text }] };
287
- }
288
- catch (err) {
289
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
290
- }
291
- });
292
- server.tool(updateOAuthClientTool.name, updateOAuthClientTool.description, updateOAuthClientTool.inputSchema.shape, getToolAnnotations(updateOAuthClientTool.name), async (input) => {
293
- try {
294
- const text = await updateOAuthClientTool.execute(client, input);
295
- return { content: [{ type: 'text', text }] };
296
- }
297
- catch (err) {
298
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
299
- }
300
- });
301
- server.tool(deleteOAuthClientTool.name, deleteOAuthClientTool.description, deleteOAuthClientTool.inputSchema.shape, getToolAnnotations(deleteOAuthClientTool.name), async (input) => {
302
- try {
303
- const text = await deleteOAuthClientTool.execute(client, input);
304
- return { content: [{ type: 'text', text }] };
305
- }
306
- catch (err) {
307
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
308
- }
309
- });
310
- server.tool(listPlatformsTool.name, listPlatformsTool.description, listPlatformsTool.inputSchema.shape, getToolAnnotations(listPlatformsTool.name), async (input) => {
311
- try {
312
- const text = await listPlatformsTool.execute(client, input);
313
- return { content: [{ type: 'text', text }] };
314
- }
315
- catch (err) {
316
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
317
- }
318
- });
319
- server.tool(getPlatformSchemaTool.name, getPlatformSchemaTool.description, getPlatformSchemaTool.inputSchema.shape, getToolAnnotations(getPlatformSchemaTool.name), async (input) => {
320
- try {
321
- const text = await getPlatformSchemaTool.execute(client, input);
322
- return { content: [{ type: 'text', text }] };
323
- }
324
- catch (err) {
325
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
326
- }
327
- });
328
- server.tool(triggerPlatformHelperTool.name, triggerPlatformHelperTool.description, triggerPlatformHelperTool.inputSchema.shape, getToolAnnotations(triggerPlatformHelperTool.name), async (input) => {
329
- try {
330
- const text = await triggerPlatformHelperTool.execute(client, input);
331
- return { content: [{ type: 'text', text }] };
332
- }
333
- catch (err) {
334
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
335
- }
336
- });
337
- server.tool(listBrandsTool.name, listBrandsTool.description, listBrandsTool.inputSchema.shape, getToolAnnotations(listBrandsTool.name), async (input) => {
338
- try {
339
- const text = await listBrandsTool.execute(client, input);
340
- return { content: [{ type: 'text', text }] };
341
- }
342
- catch (err) {
343
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
344
- }
345
- });
346
- server.tool(getBrandTool.name, getBrandTool.description, getBrandTool.inputSchema.shape, getToolAnnotations(getBrandTool.name), async (input) => {
347
- try {
348
- const text = await getBrandTool.execute(client, input);
349
- return { content: [{ type: 'text', text }] };
350
- }
351
- catch (err) {
352
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
353
- }
354
- });
355
- server.tool(listBrandAccountsTool.name, listBrandAccountsTool.description, listBrandAccountsTool.inputSchema.shape, getToolAnnotations(listBrandAccountsTool.name), async (input) => {
356
- try {
357
- const text = await listBrandAccountsTool.execute(client, input);
358
- return { content: [{ type: 'text', text }] };
359
- }
360
- catch (err) {
361
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
362
- }
363
- });
364
- server.tool(getBrandProfileTool.name, getBrandProfileTool.description, getBrandProfileTool.inputSchema.shape, getToolAnnotations(getBrandProfileTool.name), async (input) => {
365
- try {
366
- const text = await getBrandProfileTool.execute(client, input);
367
- return { content: [{ type: 'text', text }] };
368
- }
369
- catch (err) {
370
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
371
- }
372
- });
373
- server.tool(getLearnedVoiceTool.name, getLearnedVoiceTool.description, getLearnedVoiceTool.inputSchema.shape, getToolAnnotations(getLearnedVoiceTool.name), async (input) => {
374
- try {
375
- const text = await getLearnedVoiceTool.execute(client, input);
376
- return { content: [{ type: 'text', text }] };
377
- }
378
- catch (err) {
379
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
380
- }
381
- });
382
- server.tool(getPerformanceProfileTool.name, getPerformanceProfileTool.description, getPerformanceProfileTool.inputSchema.shape, getToolAnnotations(getPerformanceProfileTool.name), async (input) => {
383
- try {
384
- const text = await getPerformanceProfileTool.execute(client, input);
385
- return { content: [{ type: 'text', text }] };
386
- }
387
- catch (err) {
388
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
389
- }
390
- });
391
- server.tool(getPostInsightsTool.name, getPostInsightsTool.description, getPostInsightsTool.inputSchema.shape, getToolAnnotations(getPostInsightsTool.name), async (input) => {
392
- try {
393
- const text = await getPostInsightsTool.execute(client, input);
394
- return { content: [{ type: 'text', text }] };
395
- }
396
- catch (err) {
397
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
398
- }
399
- });
400
- server.tool(listPostSuggestionsTool.name, listPostSuggestionsTool.description, listPostSuggestionsTool.inputSchema.shape, getToolAnnotations(listPostSuggestionsTool.name), async (input) => {
401
- try {
402
- const text = await listPostSuggestionsTool.execute(client, input);
403
- return { content: [{ type: 'text', text }] };
404
- }
405
- catch (err) {
406
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
407
- }
408
- });
409
- server.tool(dismissSuggestionTool.name, dismissSuggestionTool.description, dismissSuggestionTool.inputSchema.shape, getToolAnnotations(dismissSuggestionTool.name), async (input) => {
410
- try {
411
- const text = await dismissSuggestionTool.execute(client, input);
412
- return { content: [{ type: 'text', text }] };
413
- }
414
- catch (err) {
415
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
416
- }
417
- });
418
- server.tool(submitAgentFeedbackTool.name, submitAgentFeedbackTool.description, submitAgentFeedbackTool.inputSchema.shape, getToolAnnotations(submitAgentFeedbackTool.name), async (input) => {
419
- try {
420
- const text = await submitAgentFeedbackTool.execute(client, input);
421
- return { content: [{ type: 'text', text }] };
422
- }
423
- catch (err) {
424
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
425
- }
426
- });
427
- server.tool(submitProductFeedbackTool.name, submitProductFeedbackTool.description, submitProductFeedbackTool.inputSchema.shape, getToolAnnotations(submitProductFeedbackTool.name), async (input) => {
428
- try {
429
- const text = await submitProductFeedbackTool.execute(client, input);
430
- return { content: [{ type: 'text', text }] };
431
- }
432
- catch (err) {
433
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
434
- }
435
- });
436
- server.tool(validatePostTool.name, validatePostTool.description, validatePostTool.inputSchema.shape, getToolAnnotations(validatePostTool.name), async (input) => {
437
- try {
438
- const text = await validatePostTool.execute(client, input);
439
- return { content: [{ type: 'text', text }] };
440
- }
441
- catch (err) {
442
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
443
- }
444
- });
445
- server.tool(createPostTool.name, createPostTool.description, createPostTool.inputSchema.shape, getToolAnnotations(createPostTool.name), async (input) => {
446
- try {
447
- const text = await createPostTool.execute(client, input);
448
- return { content: [{ type: 'text', text }] };
449
- }
450
- catch (err) {
451
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
452
- }
453
- });
454
- server.tool(createPostsBatchTool.name, createPostsBatchTool.description, createPostsBatchTool.inputSchema.shape, getToolAnnotations(createPostsBatchTool.name), async (input) => {
455
- try {
456
- const text = await createPostsBatchTool.execute(client, input);
457
- return { content: [{ type: 'text', text }] };
458
- }
459
- catch (err) {
460
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
461
- }
462
- });
463
- server.tool(findSlotTool.name, findSlotTool.description, findSlotTool.inputSchema.shape, getToolAnnotations(findSlotTool.name), async (input) => {
464
- try {
465
- const text = await findSlotTool.execute(client, input);
466
- return { content: [{ type: 'text', text }] };
467
- }
468
- catch (err) {
469
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
470
- }
471
- });
472
- server.tool(listPostsTool.name, listPostsTool.description, listPostsTool.inputSchema.shape, getToolAnnotations(listPostsTool.name), async (input) => {
473
- try {
474
- const text = await listPostsTool.execute(client, input);
475
- return { content: [{ type: 'text', text }] };
476
- }
477
- catch (err) {
478
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
479
- }
480
- });
481
- server.tool(uploadMediaTool.name, uploadMediaTool.description, uploadMediaTool.inputSchema.shape, getToolAnnotations(uploadMediaTool.name), async (input) => {
482
- try {
483
- const text = await uploadMediaTool.execute(client, input);
484
- return { content: [{ type: 'text', text }] };
485
- }
486
- catch (err) {
487
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
488
- }
489
- });
490
- server.tool(uploadMediaFromUrlTool.name, uploadMediaFromUrlTool.description, uploadMediaFromUrlTool.inputSchema.shape, getToolAnnotations(uploadMediaFromUrlTool.name), async (input) => {
491
- try {
492
- const text = await uploadMediaFromUrlTool.execute(client, input);
493
- return { content: [{ type: 'text', text }] };
494
- }
495
- catch (err) {
496
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
497
- }
498
- });
499
- server.tool(createSignedUploadTool.name, createSignedUploadTool.description, createSignedUploadTool.inputSchema.shape, getToolAnnotations(createSignedUploadTool.name), async (input) => {
500
- try {
501
- const text = await createSignedUploadTool.execute(client, input);
502
- return { content: [{ type: 'text', text }] };
503
- }
504
- catch (err) {
505
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
506
- }
507
- });
508
- server.tool(createMediaDropTool.name, createMediaDropTool.description, createMediaDropTool.inputSchema.shape, getToolAnnotations(createMediaDropTool.name), async (input) => {
509
- try {
510
- const text = await createMediaDropTool.execute(client, input);
511
- return { content: [{ type: 'text', text }] };
512
- }
513
- catch (err) {
514
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
515
- }
516
- });
517
- server.tool(listMediaTool.name, listMediaTool.description, listMediaTool.inputSchema.shape, getToolAnnotations(listMediaTool.name), async (input) => {
518
- try {
519
- const text = await listMediaTool.execute(client, input);
520
- return { content: [{ type: 'text', text }] };
521
- }
522
- catch (err) {
523
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
524
- }
525
- });
526
- server.tool(getVideoOptionsTool.name, getVideoOptionsTool.description, getVideoOptionsTool.inputSchema.shape, getToolAnnotations(getVideoOptionsTool.name), async () => {
527
- try {
528
- const text = await getVideoOptionsTool.execute(client);
529
- return { content: [{ type: 'text', text }] };
530
- }
531
- catch (err) {
532
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
533
- }
534
- });
535
- server.tool(runVideoFunctionTool.name, runVideoFunctionTool.description, runVideoFunctionTool.inputSchema.shape, getToolAnnotations(runVideoFunctionTool.name), async (input) => {
536
- try {
537
- const text = await runVideoFunctionTool.execute(client, input);
538
- return { content: [{ type: 'text', text }] };
539
- }
540
- catch (err) {
541
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
542
- }
543
- });
544
- server.tool(generateVideoTool.name, generateVideoTool.description, generateVideoTool.inputSchema.shape, getToolAnnotations(generateVideoTool.name), async (input) => {
545
- try {
546
- const text = await generateVideoTool.execute(client, input);
547
- return { content: [{ type: 'text', text }] };
548
- }
549
- catch (err) {
550
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
551
- }
552
- });
553
- server.tool(getVideoJobTool.name, getVideoJobTool.description, getVideoJobTool.inputSchema.shape, getToolAnnotations(getVideoJobTool.name), async (input) => {
554
- try {
555
- const text = await getVideoJobTool.execute(client, input);
556
- return { content: [{ type: 'text', text }] };
557
- }
558
- catch (err) {
559
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
560
- }
561
- });
562
- server.tool(generateCaptionsTool.name, generateCaptionsTool.description, generateCaptionsTool.inputSchema.shape, getToolAnnotations(generateCaptionsTool.name), async (input) => {
563
- try {
564
- const text = await generateCaptionsTool.execute(client, input);
565
- return { content: [{ type: 'text', text }] };
566
- }
567
- catch (err) {
568
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
569
- }
570
- });
571
- server.tool(generateImageTool.name, generateImageTool.description, generateImageTool.inputSchema.shape, getToolAnnotations(generateImageTool.name), async (input) => {
572
- try {
573
- const text = await generateImageTool.execute(client, input);
574
- return { content: [{ type: 'text', text }] };
575
- }
576
- catch (err) {
577
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
578
- }
579
- });
580
- server.tool(getImageJobTool.name, getImageJobTool.description, getImageJobTool.inputSchema.shape, getToolAnnotations(getImageJobTool.name), async (input) => {
581
- try {
582
- const text = await getImageJobTool.execute(client, input);
583
- return { content: [{ type: 'text', text }] };
584
- }
585
- catch (err) {
586
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
587
- }
588
- });
589
- server.tool(getPostTool.name, getPostTool.description, getPostTool.inputSchema.shape, getToolAnnotations(getPostTool.name), async (input) => {
590
- try {
591
- const text = await getPostTool.execute(client, input);
592
- return { content: [{ type: 'text', text }] };
593
- }
594
- catch (err) {
595
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
596
- }
597
- });
598
- server.tool(getPostMissingTool.name, getPostMissingTool.description, getPostMissingTool.inputSchema.shape, getToolAnnotations(getPostMissingTool.name), async (input) => {
599
- try {
600
- const text = await getPostMissingTool.execute(client, input);
601
- return { content: [{ type: 'text', text }] };
602
- }
603
- catch (err) {
604
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
605
- }
606
- });
607
- server.tool(askSupportTool.name, askSupportTool.description, askSupportTool.inputSchema.shape, getToolAnnotations(askSupportTool.name), async (input) => {
608
- try {
609
- const text = await askSupportTool.execute(client, input);
610
- return { content: [{ type: 'text', text }] };
611
- }
612
- catch (err) {
613
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
614
- }
615
- });
616
- server.tool(updatePostTool.name, updatePostTool.description, updatePostTool.inputSchema.shape, getToolAnnotations(updatePostTool.name), async (input) => {
617
- try {
618
- const text = await updatePostTool.execute(client, input);
619
- return { content: [{ type: 'text', text }] };
620
- }
621
- catch (err) {
622
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
623
- }
624
- });
625
- server.tool(updatePostStatusTool.name, updatePostStatusTool.description, updatePostStatusTool.inputSchema.shape, getToolAnnotations(updatePostStatusTool.name), async (input) => {
626
- try {
627
- const text = await updatePostStatusTool.execute(client, input);
628
- return { content: [{ type: 'text', text }] };
629
- }
630
- catch (err) {
631
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
632
- }
633
- });
634
- server.tool(updatePostReleaseIdTool.name, updatePostReleaseIdTool.description, updatePostReleaseIdTool.inputSchema.shape, getToolAnnotations(updatePostReleaseIdTool.name), async (input) => {
635
- try {
636
- const text = await updatePostReleaseIdTool.execute(client, input);
637
- return { content: [{ type: 'text', text }] };
638
- }
639
- catch (err) {
640
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
641
- }
642
- });
643
- server.tool(deletePostTool.name, deletePostTool.description, deletePostTool.inputSchema.shape, getToolAnnotations(deletePostTool.name), async (input) => {
644
- try {
645
- const text = await deletePostTool.execute(client, input);
646
- return { content: [{ type: 'text', text }] };
647
- }
648
- catch (err) {
649
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
650
- }
651
- });
652
- server.tool(deletePostGroupTool.name, deletePostGroupTool.description, deletePostGroupTool.inputSchema.shape, getToolAnnotations(deletePostGroupTool.name), async (input) => {
653
- try {
654
- const text = await deletePostGroupTool.execute(client, input);
655
- return { content: [{ type: 'text', text }] };
656
- }
657
- catch (err) {
658
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
659
- }
660
- });
661
- server.tool(getAccountAnalyticsTool.name, getAccountAnalyticsTool.description, getAccountAnalyticsTool.inputSchema.shape, getToolAnnotations(getAccountAnalyticsTool.name), async (input) => {
662
- try {
663
- const text = await getAccountAnalyticsTool.execute(client, input);
664
- return { content: [{ type: 'text', text }] };
665
- }
666
- catch (err) {
667
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
668
- }
669
- });
670
- server.tool(getPostAnalyticsTool.name, getPostAnalyticsTool.description, getPostAnalyticsTool.inputSchema.shape, getToolAnnotations(getPostAnalyticsTool.name), async (input) => {
671
- try {
672
- const text = await getPostAnalyticsTool.execute(client, input);
673
- return { content: [{ type: 'text', text }] };
674
- }
675
- catch (err) {
676
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
677
- }
678
- });
679
- server.tool(listGoogleBusinessReviewsTool.name, listGoogleBusinessReviewsTool.description, listGoogleBusinessReviewsTool.inputSchema.shape, getToolAnnotations(listGoogleBusinessReviewsTool.name), async (input) => {
680
- try {
681
- const text = await listGoogleBusinessReviewsTool.execute(client, input);
682
- return { content: [{ type: 'text', text }] };
683
- }
684
- catch (err) {
685
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
686
- }
687
- });
688
- server.tool(getGoogleBusinessReviewLinkTool.name, getGoogleBusinessReviewLinkTool.description, getGoogleBusinessReviewLinkTool.inputSchema.shape, getToolAnnotations(getGoogleBusinessReviewLinkTool.name), async (input) => {
689
- try {
690
- const text = await getGoogleBusinessReviewLinkTool.execute(client, input);
691
- return { content: [{ type: 'text', text }] };
692
- }
693
- catch (err) {
694
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
695
- }
696
- });
697
- server.tool(auditGoogleBusinessProfileTool.name, auditGoogleBusinessProfileTool.description, auditGoogleBusinessProfileTool.inputSchema.shape, getToolAnnotations(auditGoogleBusinessProfileTool.name), async (input) => {
698
- try {
699
- const text = await auditGoogleBusinessProfileTool.execute(client, input);
700
- return { content: [{ type: 'text', text }] };
701
- }
702
- catch (err) {
703
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
704
- }
705
- });
706
- server.tool(suggestGoogleBusinessReviewReplyTool.name, suggestGoogleBusinessReviewReplyTool.description, suggestGoogleBusinessReviewReplyTool.inputSchema.shape, getToolAnnotations(suggestGoogleBusinessReviewReplyTool.name), async (input) => {
707
- try {
708
- const text = await suggestGoogleBusinessReviewReplyTool.execute(client, input);
709
- return { content: [{ type: 'text', text }] };
710
- }
711
- catch (err) {
712
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
713
- }
714
- });
715
- server.tool(replyGoogleBusinessReviewTool.name, replyGoogleBusinessReviewTool.description, replyGoogleBusinessReviewTool.inputSchema.shape, getToolAnnotations(replyGoogleBusinessReviewTool.name), async (input) => {
716
- try {
717
- const text = await replyGoogleBusinessReviewTool.execute(client, input);
718
- return { content: [{ type: 'text', text }] };
719
- }
720
- catch (err) {
721
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
722
- }
723
- });
724
- server.tool(deleteGoogleBusinessReviewReplyTool.name, deleteGoogleBusinessReviewReplyTool.description, deleteGoogleBusinessReviewReplyTool.inputSchema.shape, getToolAnnotations(deleteGoogleBusinessReviewReplyTool.name), async (input) => {
725
- try {
726
- const text = await deleteGoogleBusinessReviewReplyTool.execute(client, input);
727
- return { content: [{ type: 'text', text }] };
728
- }
729
- catch (err) {
730
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
731
- }
732
- });
733
- server.tool(listGoogleBusinessMediaTool.name, listGoogleBusinessMediaTool.description, listGoogleBusinessMediaTool.inputSchema.shape, getToolAnnotations(listGoogleBusinessMediaTool.name), async (input) => {
734
- try {
735
- const text = await listGoogleBusinessMediaTool.execute(client, input);
736
- return { content: [{ type: 'text', text }] };
737
- }
738
- catch (err) {
739
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
740
- }
741
- });
742
- server.tool(addGoogleBusinessMediaTool.name, addGoogleBusinessMediaTool.description, addGoogleBusinessMediaTool.inputSchema.shape, getToolAnnotations(addGoogleBusinessMediaTool.name), async (input) => {
743
- try {
744
- const text = await addGoogleBusinessMediaTool.execute(client, input);
745
- return { content: [{ type: 'text', text }] };
746
- }
747
- catch (err) {
748
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
749
- }
750
- });
751
- server.tool(deleteGoogleBusinessMediaTool.name, deleteGoogleBusinessMediaTool.description, deleteGoogleBusinessMediaTool.inputSchema.shape, getToolAnnotations(deleteGoogleBusinessMediaTool.name), async (input) => {
752
- try {
753
- const text = await deleteGoogleBusinessMediaTool.execute(client, input);
754
- return { content: [{ type: 'text', text }] };
755
- }
756
- catch (err) {
757
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
758
- }
759
- });
760
- server.tool(listConversationsTool.name, listConversationsTool.description, listConversationsTool.inputSchema.shape, getToolAnnotations(listConversationsTool.name), async (input) => {
761
- try {
762
- const text = await listConversationsTool.execute(client, input);
763
- return { content: [{ type: 'text', text }] };
764
- }
765
- catch (err) {
766
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
767
- }
768
- });
769
- server.tool(getConversationTool.name, getConversationTool.description, getConversationTool.inputSchema.shape, getToolAnnotations(getConversationTool.name), async (input) => {
770
- try {
771
- const text = await getConversationTool.execute(client, input);
772
- return { content: [{ type: 'text', text }] };
773
- }
774
- catch (err) {
775
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
776
- }
777
- });
778
- server.tool(sendMessageTool.name, sendMessageTool.description, sendMessageTool.inputSchema.shape, getToolAnnotations(sendMessageTool.name), async (input) => {
779
- try {
780
- const text = await sendMessageTool.execute(client, input);
781
- return { content: [{ type: 'text', text }] };
782
- }
783
- catch (err) {
784
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
785
- }
786
- });
787
- server.tool(listCommentsTool.name, listCommentsTool.description, listCommentsTool.inputSchema.shape, getToolAnnotations(listCommentsTool.name), async (input) => {
788
- try {
789
- const text = await listCommentsTool.execute(client, input);
790
- return { content: [{ type: 'text', text }] };
791
- }
792
- catch (err) {
793
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
794
- }
795
- });
796
- server.tool(getCommentTool.name, getCommentTool.description, getCommentTool.inputSchema.shape, getToolAnnotations(getCommentTool.name), async (input) => {
797
- try {
798
- const text = await getCommentTool.execute(client, input);
799
- return { content: [{ type: 'text', text }] };
800
- }
801
- catch (err) {
802
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
803
- }
804
- });
805
- server.tool(replyToCommentTool.name, replyToCommentTool.description, replyToCommentTool.inputSchema.shape, getToolAnnotations(replyToCommentTool.name), async (input) => {
806
- try {
807
- const text = await replyToCommentTool.execute(client, input);
808
- return { content: [{ type: 'text', text }] };
809
- }
810
- catch (err) {
811
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
812
- }
813
- });
814
- server.tool(updateCommentTool.name, updateCommentTool.description, updateCommentTool.inputSchema.shape, getToolAnnotations(updateCommentTool.name), async (input) => {
815
- try {
816
- const text = await updateCommentTool.execute(client, input);
817
- return { content: [{ type: 'text', text }] };
818
- }
819
- catch (err) {
820
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
821
- }
822
- });
823
- server.tool(deleteCommentTool.name, deleteCommentTool.description, deleteCommentTool.inputSchema.shape, getToolAnnotations(deleteCommentTool.name), async (input) => {
824
- try {
825
- const text = await deleteCommentTool.execute(client, input);
826
- return { content: [{ type: 'text', text }] };
827
- }
828
- catch (err) {
829
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
830
- }
831
- });
832
- server.tool(syncInboxTool.name, syncInboxTool.description, syncInboxTool.inputSchema.shape, getToolAnnotations(syncInboxTool.name), async (input) => {
833
- try {
834
- const text = await syncInboxTool.execute(client, input);
835
- return { content: [{ type: 'text', text }] };
836
- }
837
- catch (err) {
838
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
839
- }
840
- });
841
- server.tool(listActivityTool.name, listActivityTool.description, listActivityTool.inputSchema.shape, getToolAnnotations(listActivityTool.name), async (input) => {
842
- try {
843
- const text = await listActivityTool.execute(client, input);
844
- return { content: [{ type: 'text', text }] };
845
- }
846
- catch (err) {
847
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
848
- }
849
- });
850
- server.tool(getUpdatesTool.name, getUpdatesTool.description, getUpdatesTool.inputSchema.shape, getToolAnnotations(getUpdatesTool.name), async (input) => {
851
- try {
852
- const text = await getUpdatesTool.execute(client, input);
853
- return { content: [{ type: 'text', text }] };
854
- }
855
- catch (err) {
856
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
857
- }
858
- });
859
- server.tool(listWebhooksTool.name, listWebhooksTool.description, listWebhooksTool.inputSchema.shape, getToolAnnotations(listWebhooksTool.name), async (input) => {
860
- try {
861
- const text = await listWebhooksTool.execute(client, input);
862
- return { content: [{ type: 'text', text }] };
863
- }
864
- catch (err) {
865
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
866
- }
867
- });
868
- server.tool(createWebhookTool.name, createWebhookTool.description, createWebhookTool.inputSchema.shape, getToolAnnotations(createWebhookTool.name), async (input) => {
869
- try {
870
- const text = await createWebhookTool.execute(client, input);
871
- return { content: [{ type: 'text', text }] };
872
- }
873
- catch (err) {
874
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
875
- }
876
- });
877
- server.tool(updateWebhookTool.name, updateWebhookTool.description, updateWebhookTool.inputSchema.shape, getToolAnnotations(updateWebhookTool.name), async (input) => {
878
- try {
879
- const text = await updateWebhookTool.execute(client, input);
880
- return { content: [{ type: 'text', text }] };
881
- }
882
- catch (err) {
883
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
884
- }
885
- });
886
- server.tool(deleteWebhookTool.name, deleteWebhookTool.description, deleteWebhookTool.inputSchema.shape, getToolAnnotations(deleteWebhookTool.name), async (input) => {
887
- try {
888
- const text = await deleteWebhookTool.execute(client, input);
889
- return { content: [{ type: 'text', text }] };
890
- }
891
- catch (err) {
892
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
893
- }
894
- });
895
- server.tool(testWebhookTool.name, testWebhookTool.description, testWebhookTool.inputSchema.shape, getToolAnnotations(testWebhookTool.name), async (input) => {
896
- try {
897
- const text = await testWebhookTool.execute(client, input);
898
- return { content: [{ type: 'text', text }] };
899
- }
900
- catch (err) {
901
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
902
- }
903
- });
904
- server.tool(getXPostingQuotaTool.name, getXPostingQuotaTool.description, getXPostingQuotaTool.inputSchema.shape, getToolAnnotations(getXPostingQuotaTool.name), async (input) => {
905
- try {
906
- const text = await getXPostingQuotaTool.execute(client, input);
907
- return { content: [{ type: 'text', text }] };
908
- }
909
- catch (err) {
910
- return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
171
+ // The SDK only learns the connected client's identity (e.g. "claude-ai",
172
+ // "chatgpt") once the initialize handshake completes, so this is a resolver
173
+ // read fresh on every request rather than a value captured once here.
174
+ setMcpClientNameResolver(() => server.server.getClientVersion()?.name);
175
+ // Old tools' exact input schemas, keyed by alias name, from the merged tool
176
+ // modules that replaced them.
177
+ const LEGACY_SCHEMAS = new Map();
178
+ for (const tool of STDIO_TOOLS) {
179
+ for (const [alias, schema] of Object.entries(tool.legacySchemas ?? {}))
180
+ LEGACY_SCHEMAS.set(alias, schema);
181
+ }
182
+ /**
183
+ * Validates an alias call against the old tool's own schema, so a call the
184
+ * old tool rejected gets the same SDK error text it always got (same wording
185
+ * the SDK builds for any tool), and a valid call keeps the old defaults.
186
+ */
187
+ const legacyValidator = (aliasName, args) => {
188
+ const schema = LEGACY_SCHEMAS.get(aliasName);
189
+ if (!schema)
190
+ return null;
191
+ const parsed = schema.safeParse(args ?? {});
192
+ if (parsed.success)
193
+ return { ok: true, args: parsed.data };
194
+ const message = new McpError(ErrorCode.InvalidParams, `Input validation error: Invalid arguments for tool ${aliasName}: ${parsed.error.message}`).message;
195
+ return { ok: false, message };
196
+ };
197
+ // Renamed tools (aliases) are never registered with McpServer: the transport
198
+ // rewrites an alias call onto its target before the SDK sees it, and handlers
199
+ // read the called name back through getCallInfo(extra.requestId).
200
+ const transport = new AliasTransport(new StdioServerTransport(), registry, toolsets.all ? null : visibleTools(registry, toolsets.enabled, 'stdio'), legacyValidator);
201
+ // Preview then confirm tokens: a random key and an in-memory one-time-use
202
+ // set per process (UX protection only; REST authorization is unchanged).
203
+ const previews = new StdioPreviewTokens();
204
+ function registerAll(tools) {
205
+ for (const tool of tools) {
206
+ server.tool(tool.name, tool.description, tool.inputSchema.shape, getToolAnnotations(tool.name), async (input, extra) => {
207
+ // The CALLED name (an alias, or the tool itself) is what telemetry
208
+ // records as X-Posterly-Tool. The per-call context lives only here:
209
+ // never in the arguments, never on shared state.
210
+ const callInfo = transport.getCallInfo(extra.requestId);
211
+ const calledName = callInfo?.calledName ?? tool.name;
212
+ const ctx = {
213
+ calledName,
214
+ legacyConfirm: callInfo?.legacyConfirm === true,
215
+ registry,
216
+ previews,
217
+ toolsets: { enabled: toolsets.enabled, all: toolsets.all },
218
+ };
219
+ try {
220
+ const text = await client.runToolCall(calledName, () => tool.execute(client, input, ctx));
221
+ return { content: [{ type: 'text', text }] };
222
+ }
223
+ catch (err) {
224
+ return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
225
+ }
226
+ });
911
227
  }
912
- });
228
+ }
229
+ registerAll(STDIO_TOOLS);
913
230
  // Start the server
914
231
  async function main() {
915
- const transport = new StdioServerTransport();
916
232
  await server.connect(transport);
917
233
  }
918
234
  main().catch((err) => {