@upload-post/mcp 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/dist/client.d.ts +32 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +61 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/oauth/auth_resolver.d.ts +33 -0
- package/dist/oauth/auth_resolver.d.ts.map +1 -0
- package/dist/oauth/auth_resolver.js +30 -0
- package/dist/oauth/auth_resolver.js.map +1 -0
- package/dist/oauth/authorize.d.ts +18 -0
- package/dist/oauth/authorize.d.ts.map +1 -0
- package/dist/oauth/authorize.js +26 -0
- package/dist/oauth/authorize.js.map +1 -0
- package/dist/oauth/config.d.ts +19 -0
- package/dist/oauth/config.d.ts.map +1 -0
- package/dist/oauth/config.js +28 -0
- package/dist/oauth/config.js.map +1 -0
- package/dist/oauth/http_utils.d.ts +8 -0
- package/dist/oauth/http_utils.d.ts.map +1 -0
- package/dist/oauth/http_utils.js +48 -0
- package/dist/oauth/http_utils.js.map +1 -0
- package/dist/oauth/introspect_cache.d.ts +19 -0
- package/dist/oauth/introspect_cache.d.ts.map +1 -0
- package/dist/oauth/introspect_cache.js +40 -0
- package/dist/oauth/introspect_cache.js.map +1 -0
- package/dist/oauth/metadata.d.ts +35 -0
- package/dist/oauth/metadata.d.ts.map +1 -0
- package/dist/oauth/metadata.js +43 -0
- package/dist/oauth/metadata.js.map +1 -0
- package/dist/oauth/registration.d.ts +14 -0
- package/dist/oauth/registration.d.ts.map +1 -0
- package/dist/oauth/registration.js +40 -0
- package/dist/oauth/registration.js.map +1 -0
- package/dist/oauth/tokens.d.ts +15 -0
- package/dist/oauth/tokens.d.ts.map +1 -0
- package/dist/oauth/tokens.js +43 -0
- package/dist/oauth/tokens.js.map +1 -0
- package/dist/oauth/upstream_client.d.ts +32 -0
- package/dist/oauth/upstream_client.d.ts.map +1 -0
- package/dist/oauth/upstream_client.js +62 -0
- package/dist/oauth/upstream_client.js.map +1 -0
- package/dist/schemas.d.ts +38 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +121 -0
- package/dist/schemas.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +36 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/analytics.d.ts +4 -0
- package/dist/tools/analytics.d.ts.map +1 -0
- package/dist/tools/analytics.js +74 -0
- package/dist/tools/analytics.js.map +1 -0
- package/dist/tools/comments.d.ts +4 -0
- package/dist/tools/comments.d.ts.map +1 -0
- package/dist/tools/comments.js +108 -0
- package/dist/tools/comments.js.map +1 -0
- package/dist/tools/dms.d.ts +4 -0
- package/dist/tools/dms.d.ts.map +1 -0
- package/dist/tools/dms.js +100 -0
- package/dist/tools/dms.js.map +1 -0
- package/dist/tools/ffmpeg.d.ts +4 -0
- package/dist/tools/ffmpeg.d.ts.map +1 -0
- package/dist/tools/ffmpeg.js +96 -0
- package/dist/tools/ffmpeg.js.map +1 -0
- package/dist/tools/media_uploads.d.ts +4 -0
- package/dist/tools/media_uploads.d.ts.map +1 -0
- package/dist/tools/media_uploads.js +106 -0
- package/dist/tools/media_uploads.js.map +1 -0
- package/dist/tools/pages.d.ts +4 -0
- package/dist/tools/pages.d.ts.map +1 -0
- package/dist/tools/pages.js +101 -0
- package/dist/tools/pages.js.map +1 -0
- package/dist/tools/queue.d.ts +4 -0
- package/dist/tools/queue.d.ts.map +1 -0
- package/dist/tools/queue.js +79 -0
- package/dist/tools/queue.js.map +1 -0
- package/dist/tools/schedule.d.ts +4 -0
- package/dist/tools/schedule.d.ts.map +1 -0
- package/dist/tools/schedule.js +48 -0
- package/dist/tools/schedule.js.map +1 -0
- package/dist/tools/status.d.ts +4 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +67 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/upload.d.ts +10 -0
- package/dist/tools/upload.d.ts.map +1 -0
- package/dist/tools/upload.js +397 -0
- package/dist/tools/upload.js.map +1 -0
- package/dist/tools/upload_studio.d.ts +3 -0
- package/dist/tools/upload_studio.d.ts.map +1 -0
- package/dist/tools/upload_studio.js +808 -0
- package/dist/tools/upload_studio.js.map +1 -0
- package/dist/tools/users.d.ts +4 -0
- package/dist/tools/users.d.ts.map +1 -0
- package/dist/tools/users.js +95 -0
- package/dist/tools/users.js.map +1 -0
- package/dist/transport/http.d.ts +33 -0
- package/dist/transport/http.d.ts.map +1 -0
- package/dist/transport/http.js +263 -0
- package/dist/transport/http.js.map +1 -0
- package/dist/transport/stdio.d.ts +3 -0
- package/dist/transport/stdio.d.ts.map +1 -0
- package/dist/transport/stdio.js +7 -0
- package/dist/transport/stdio.js.map +1 -0
- package/examples/mcp-config.json +11 -0
- package/package.json +68 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { PACKAGE_VERSION } from "./client.js";
|
|
3
|
+
import { registerUploadTools } from "./tools/upload.js";
|
|
4
|
+
import { registerStatusTools } from "./tools/status.js";
|
|
5
|
+
import { registerScheduleTools } from "./tools/schedule.js";
|
|
6
|
+
import { registerAnalyticsTools } from "./tools/analytics.js";
|
|
7
|
+
import { registerUserTools } from "./tools/users.js";
|
|
8
|
+
import { registerPagesTools } from "./tools/pages.js";
|
|
9
|
+
import { registerCommentTools } from "./tools/comments.js";
|
|
10
|
+
import { registerDmTools } from "./tools/dms.js";
|
|
11
|
+
import { registerFfmpegTools } from "./tools/ffmpeg.js";
|
|
12
|
+
import { registerQueueTools } from "./tools/queue.js";
|
|
13
|
+
import { registerUploadStudio } from "./tools/upload_studio.js";
|
|
14
|
+
import { registerMediaUploadTools } from "./tools/media_uploads.js";
|
|
15
|
+
export function buildServer(client) {
|
|
16
|
+
const server = new McpServer({
|
|
17
|
+
name: "upload-post",
|
|
18
|
+
version: PACKAGE_VERSION,
|
|
19
|
+
}, {
|
|
20
|
+
instructions: "Tools for publishing, scheduling, analyzing and managing social media posts via Upload-Post (TikTok, Instagram, YouTube, LinkedIn, Facebook, Pinterest, Threads, Reddit, Bluesky, X, Google Business, Discord, Telegram). Async uploads return a request_id — poll get_status until success.",
|
|
21
|
+
});
|
|
22
|
+
registerUploadTools(server, client);
|
|
23
|
+
registerStatusTools(server, client);
|
|
24
|
+
registerScheduleTools(server, client);
|
|
25
|
+
registerAnalyticsTools(server, client);
|
|
26
|
+
registerUserTools(server, client);
|
|
27
|
+
registerPagesTools(server, client);
|
|
28
|
+
registerCommentTools(server, client);
|
|
29
|
+
registerDmTools(server, client);
|
|
30
|
+
registerFfmpegTools(server, client);
|
|
31
|
+
registerQueueTools(server, client);
|
|
32
|
+
registerMediaUploadTools(server, client);
|
|
33
|
+
registerUploadStudio(server);
|
|
34
|
+
return server;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,UAAU,WAAW,CAAC,MAA2B;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,eAAe;KACzB,EACD;QACE,YAAY,EACV,8RAA8R;KACjS,CACF,CAAC;IAEF,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { UploadPostMcpClient } from "../client.js";
|
|
3
|
+
export declare function registerAnalyticsTools(server: McpServer, client: UploadPostMcpClient): void;
|
|
4
|
+
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAiG3F"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compact } from "../client.js";
|
|
3
|
+
import { AnalyticsPlatform, genericResultOutputSchema, safe } from "../schemas.js";
|
|
4
|
+
export function registerAnalyticsTools(server, client) {
|
|
5
|
+
server.registerTool("get_analytics", {
|
|
6
|
+
title: "Get profile analytics",
|
|
7
|
+
description: "Aggregated analytics for a profile across selected platforms (followers, views, engagement).",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
profileUsername: z.string(),
|
|
10
|
+
platforms: z.array(AnalyticsPlatform).optional(),
|
|
11
|
+
pageId: z.string().optional().describe("Facebook page ID, if filtering by page."),
|
|
12
|
+
pageUrn: z.string().optional().describe("LinkedIn page URN, if filtering by company page."),
|
|
13
|
+
},
|
|
14
|
+
outputSchema: genericResultOutputSchema,
|
|
15
|
+
annotations: {
|
|
16
|
+
readOnlyHint: true,
|
|
17
|
+
openWorldHint: false,
|
|
18
|
+
destructiveHint: false,
|
|
19
|
+
},
|
|
20
|
+
}, safe(async (args) => {
|
|
21
|
+
const { profileUsername, ...rest } = args;
|
|
22
|
+
return client.sdk.getAnalytics(profileUsername, compact(rest));
|
|
23
|
+
}));
|
|
24
|
+
server.registerTool("get_total_impressions", {
|
|
25
|
+
title: "Get total impressions",
|
|
26
|
+
description: "Sum of impressions for a profile from daily snapshots. Use `period` for presets, or `startDate`/`endDate` for custom ranges.",
|
|
27
|
+
inputSchema: {
|
|
28
|
+
profileUsername: z.string(),
|
|
29
|
+
period: z
|
|
30
|
+
.enum(["last_day", "last_week", "last_month", "last_3months", "last_year"])
|
|
31
|
+
.optional(),
|
|
32
|
+
startDate: z.string().optional(),
|
|
33
|
+
endDate: z.string().optional(),
|
|
34
|
+
date: z.string().optional(),
|
|
35
|
+
platforms: z.array(AnalyticsPlatform).optional(),
|
|
36
|
+
breakdown: z.boolean().optional(),
|
|
37
|
+
metrics: z.array(z.string()).optional(),
|
|
38
|
+
},
|
|
39
|
+
outputSchema: genericResultOutputSchema,
|
|
40
|
+
annotations: {
|
|
41
|
+
readOnlyHint: true,
|
|
42
|
+
openWorldHint: false,
|
|
43
|
+
destructiveHint: false,
|
|
44
|
+
},
|
|
45
|
+
}, safe(async (args) => {
|
|
46
|
+
const { profileUsername, ...rest } = args;
|
|
47
|
+
return client.sdk.getTotalImpressions(profileUsername, compact(rest));
|
|
48
|
+
}));
|
|
49
|
+
server.registerTool("get_post_analytics", {
|
|
50
|
+
title: "Get post analytics",
|
|
51
|
+
description: "Per-platform metrics for a specific post identified by `request_id`.",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
requestId: z.string(),
|
|
54
|
+
},
|
|
55
|
+
outputSchema: genericResultOutputSchema,
|
|
56
|
+
annotations: {
|
|
57
|
+
readOnlyHint: true,
|
|
58
|
+
openWorldHint: false,
|
|
59
|
+
destructiveHint: false,
|
|
60
|
+
},
|
|
61
|
+
}, safe(async ({ requestId }) => client.sdk.getPostAnalytics(requestId)));
|
|
62
|
+
server.registerTool("get_platform_metrics", {
|
|
63
|
+
title: "List platform metrics",
|
|
64
|
+
description: "Reference: which metrics are available per platform (impressions, likes, …) and their human labels.",
|
|
65
|
+
inputSchema: {},
|
|
66
|
+
outputSchema: genericResultOutputSchema,
|
|
67
|
+
annotations: {
|
|
68
|
+
readOnlyHint: true,
|
|
69
|
+
openWorldHint: false,
|
|
70
|
+
destructiveHint: false,
|
|
71
|
+
},
|
|
72
|
+
}, safe(async () => client.sdk.getPlatformMetrics()));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/tools/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { UploadPostMcpClient } from "../client.js";
|
|
3
|
+
export declare function registerCommentTools(server: McpServer, client: UploadPostMcpClient): void;
|
|
4
|
+
//# sourceMappingURL=comments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAwIzF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compact } from "../client.js";
|
|
3
|
+
import { genericResultOutputSchema, safe } from "../schemas.js";
|
|
4
|
+
export function registerCommentTools(server, client) {
|
|
5
|
+
server.registerTool("get_post_comments", {
|
|
6
|
+
title: "Get Instagram post comments",
|
|
7
|
+
description: "List comments on an Instagram post. Identify the post by either `postId` or `postUrl`.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
user: z.string().describe("Upload-Post profile name."),
|
|
10
|
+
platform: z
|
|
11
|
+
.string()
|
|
12
|
+
.default("instagram")
|
|
13
|
+
.describe("Social platform. Only 'instagram' is currently supported."),
|
|
14
|
+
postId: z.string().optional().describe("Platform media/post ID."),
|
|
15
|
+
postUrl: z.string().optional().describe("Public URL of the post."),
|
|
16
|
+
after: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Pagination cursor returned by a previous call."),
|
|
20
|
+
limit: z
|
|
21
|
+
.number()
|
|
22
|
+
.int()
|
|
23
|
+
.min(1)
|
|
24
|
+
.max(50)
|
|
25
|
+
.optional()
|
|
26
|
+
.describe("Comments to return (1-50, Meta's cap)."),
|
|
27
|
+
},
|
|
28
|
+
outputSchema: genericResultOutputSchema,
|
|
29
|
+
annotations: {
|
|
30
|
+
readOnlyHint: true,
|
|
31
|
+
openWorldHint: false,
|
|
32
|
+
destructiveHint: false,
|
|
33
|
+
},
|
|
34
|
+
}, safe(async (args) => {
|
|
35
|
+
const a = args;
|
|
36
|
+
// The API reads snake_case query params and requires `platform`; the
|
|
37
|
+
// tool surface stays camelCase, so map explicitly here.
|
|
38
|
+
return client.request("GET", "/uploadposts/comments", {
|
|
39
|
+
query: compact({
|
|
40
|
+
platform: a.platform ?? "instagram",
|
|
41
|
+
user: a.user,
|
|
42
|
+
post_id: a.postId,
|
|
43
|
+
post_url: a.postUrl,
|
|
44
|
+
after: a.after,
|
|
45
|
+
limit: a.limit,
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
}));
|
|
49
|
+
server.registerTool("reply_to_comment", {
|
|
50
|
+
title: "Private reply (DM) to commenter",
|
|
51
|
+
description: "Send a private DM to the author of an Instagram comment (within Instagram's 7-day reply window).",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
user: z.string(),
|
|
54
|
+
commentId: z.string(),
|
|
55
|
+
message: z.string(),
|
|
56
|
+
platform: z
|
|
57
|
+
.string()
|
|
58
|
+
.default("instagram")
|
|
59
|
+
.describe("Social platform. Only 'instagram' is currently supported."),
|
|
60
|
+
},
|
|
61
|
+
outputSchema: genericResultOutputSchema,
|
|
62
|
+
annotations: {
|
|
63
|
+
readOnlyHint: false,
|
|
64
|
+
openWorldHint: true,
|
|
65
|
+
destructiveHint: true,
|
|
66
|
+
},
|
|
67
|
+
}, safe(async (args) => {
|
|
68
|
+
const a = args;
|
|
69
|
+
return client.request("POST", "/uploadposts/comments/reply", {
|
|
70
|
+
body: compact({
|
|
71
|
+
platform: a.platform ?? "instagram",
|
|
72
|
+
user: a.user,
|
|
73
|
+
comment_id: a.commentId,
|
|
74
|
+
message: a.message,
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
}));
|
|
78
|
+
server.registerTool("public_reply_to_comment", {
|
|
79
|
+
title: "Public reply to comment",
|
|
80
|
+
description: "Post a public reply visible under the original Instagram comment.",
|
|
81
|
+
inputSchema: {
|
|
82
|
+
user: z.string(),
|
|
83
|
+
commentId: z.string(),
|
|
84
|
+
message: z.string(),
|
|
85
|
+
platform: z
|
|
86
|
+
.string()
|
|
87
|
+
.default("instagram")
|
|
88
|
+
.describe("Social platform. Only 'instagram' is currently supported."),
|
|
89
|
+
},
|
|
90
|
+
outputSchema: genericResultOutputSchema,
|
|
91
|
+
annotations: {
|
|
92
|
+
readOnlyHint: false,
|
|
93
|
+
openWorldHint: true,
|
|
94
|
+
destructiveHint: true,
|
|
95
|
+
},
|
|
96
|
+
}, safe(async (args) => {
|
|
97
|
+
const a = args;
|
|
98
|
+
return client.request("POST", "/uploadposts/comments/public-reply", {
|
|
99
|
+
body: compact({
|
|
100
|
+
platform: a.platform ?? "instagram",
|
|
101
|
+
user: a.user,
|
|
102
|
+
comment_id: a.commentId,
|
|
103
|
+
message: a.message,
|
|
104
|
+
}),
|
|
105
|
+
});
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=comments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments.js","sourceRoot":"","sources":["../../src/tools/comments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dms.d.ts","sourceRoot":"","sources":["../../src/tools/dms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAsHpF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compact } from "../client.js";
|
|
3
|
+
import { genericResultOutputSchema, safe } from "../schemas.js";
|
|
4
|
+
export function registerDmTools(server, client) {
|
|
5
|
+
server.registerTool("send_dm", {
|
|
6
|
+
title: "Send a direct message",
|
|
7
|
+
description: "Send an Instagram DM to a recipient from a connected Upload-Post profile. Use a recipient_id returned by Instagram comments or DM conversation tools.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
user: z.string().describe("Upload-Post profile name that owns the connected Instagram account."),
|
|
10
|
+
platform: z.literal("instagram").describe("DM platform. Currently only Instagram DMs are supported."),
|
|
11
|
+
recipient_id: z
|
|
12
|
+
.string()
|
|
13
|
+
.describe("Instagram recipient/commenter ID. Required by the Upload-Post API."),
|
|
14
|
+
message: z.string().min(1).describe("DM body to send."),
|
|
15
|
+
},
|
|
16
|
+
outputSchema: genericResultOutputSchema,
|
|
17
|
+
annotations: {
|
|
18
|
+
readOnlyHint: false,
|
|
19
|
+
openWorldHint: true,
|
|
20
|
+
destructiveHint: true,
|
|
21
|
+
},
|
|
22
|
+
}, safe(async (args) => client.request("POST", "/uploadposts/dms/send", {
|
|
23
|
+
body: compact(args),
|
|
24
|
+
})));
|
|
25
|
+
server.registerTool("list_dm_conversations", {
|
|
26
|
+
title: "List DM conversations",
|
|
27
|
+
description: "Recent DM conversations for a profile on a given platform.",
|
|
28
|
+
inputSchema: {
|
|
29
|
+
user: z.string(),
|
|
30
|
+
platform: z.string().optional(),
|
|
31
|
+
limit: z.number().int().positive().max(200).optional(),
|
|
32
|
+
},
|
|
33
|
+
outputSchema: genericResultOutputSchema,
|
|
34
|
+
annotations: {
|
|
35
|
+
readOnlyHint: true,
|
|
36
|
+
openWorldHint: false,
|
|
37
|
+
destructiveHint: false,
|
|
38
|
+
},
|
|
39
|
+
}, safe(async (args) => client.request("GET", "/uploadposts/dms/conversations", {
|
|
40
|
+
query: compact(args),
|
|
41
|
+
})));
|
|
42
|
+
server.registerTool("manage_autodms", {
|
|
43
|
+
title: "Manage automatic DM monitoring",
|
|
44
|
+
description: "Control Instagram AutoDM monitors. For action='start', provide post_url, reply_message, and profile_username. For stop/pause/resume/delete/logs, provide monitor_id. For status, optionally set include_inactive=true.",
|
|
45
|
+
inputSchema: {
|
|
46
|
+
action: z.enum(["start", "stop", "pause", "resume", "delete", "status", "logs"]),
|
|
47
|
+
profile_username: z
|
|
48
|
+
.string()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Upload-Post profile name. Required when action='start'."),
|
|
51
|
+
post_url: z
|
|
52
|
+
.string()
|
|
53
|
+
.optional()
|
|
54
|
+
.describe("Instagram post URL to monitor. Required when action='start'."),
|
|
55
|
+
reply_message: z
|
|
56
|
+
.string()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("DM text sent to matching commenters. Required when action='start'."),
|
|
59
|
+
monitoring_interval: z
|
|
60
|
+
.number()
|
|
61
|
+
.int()
|
|
62
|
+
.min(15)
|
|
63
|
+
.optional()
|
|
64
|
+
.describe("Polling interval in minutes for action='start'. Minimum is 15."),
|
|
65
|
+
trigger_keywords: z
|
|
66
|
+
.union([z.string(), z.array(z.string())])
|
|
67
|
+
.optional()
|
|
68
|
+
.describe("Optional keyword or keywords; only comments containing these terms receive a DM."),
|
|
69
|
+
monitor_id: z
|
|
70
|
+
.string()
|
|
71
|
+
.optional()
|
|
72
|
+
.describe("AutoDM monitor ID. Required for stop, pause, resume, delete, and logs."),
|
|
73
|
+
include_inactive: z
|
|
74
|
+
.boolean()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("For action='status', include stopped and expired monitors when true."),
|
|
77
|
+
},
|
|
78
|
+
outputSchema: genericResultOutputSchema,
|
|
79
|
+
// `action` can be read-only (status/logs) or destructive (stop/delete). We
|
|
80
|
+
// report the worst case (destructive) so callers default to confirmation.
|
|
81
|
+
annotations: {
|
|
82
|
+
readOnlyHint: false,
|
|
83
|
+
openWorldHint: true,
|
|
84
|
+
destructiveHint: true,
|
|
85
|
+
},
|
|
86
|
+
}, safe(async (args) => {
|
|
87
|
+
const { action, ...rest } = args;
|
|
88
|
+
const isGet = action === "status" || action === "logs";
|
|
89
|
+
const path = `/uploadposts/autodms/${action}`;
|
|
90
|
+
if (isGet) {
|
|
91
|
+
return client.request("GET", path, {
|
|
92
|
+
query: compact(rest),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return client.request("POST", path, {
|
|
96
|
+
body: compact(rest),
|
|
97
|
+
});
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=dms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dms.js","sourceRoot":"","sources":["../../src/tools/dms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../src/tools/ffmpeg.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CA6HxF"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { compact } from "../client.js";
|
|
3
|
+
import { genericResultOutputSchema, safe } from "../schemas.js";
|
|
4
|
+
export function registerFfmpegTools(server, client) {
|
|
5
|
+
server.registerTool("submit_ffmpeg_job", {
|
|
6
|
+
title: "Submit FFmpeg processing job",
|
|
7
|
+
description: "Submit a private FFmpeg processing job through Upload-Post. Provide `input_url` for one input, or `files` for multiple public URLs. Optionally provide `full_command` beginning with ffmpeg for explicit trim/transcode/watermark/thumbnail commands. Returns a `job_id` you can poll with `get_ffmpeg_job`.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
input_url: z
|
|
10
|
+
.string()
|
|
11
|
+
.optional()
|
|
12
|
+
.describe("Public URL of the input media. Use this for a single source file."),
|
|
13
|
+
files: z
|
|
14
|
+
.array(z.string())
|
|
15
|
+
.min(1)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Public URLs of multiple input media files, when the job needs more than one source."),
|
|
18
|
+
full_command: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Optional explicit command. Must start with `ffmpeg`; shell metacharacters are rejected by the API."),
|
|
22
|
+
output_filename: z
|
|
23
|
+
.string()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe("Optional preferred output filename, e.g. clip.mp4 or thumbnail.jpg."),
|
|
26
|
+
},
|
|
27
|
+
outputSchema: genericResultOutputSchema,
|
|
28
|
+
annotations: {
|
|
29
|
+
readOnlyHint: false,
|
|
30
|
+
openWorldHint: false,
|
|
31
|
+
destructiveHint: false,
|
|
32
|
+
},
|
|
33
|
+
}, safe(async (args) => {
|
|
34
|
+
const { sourceUrl, outputFilename, input_url, files, ...rest } = args;
|
|
35
|
+
const inputUrl = input_url ?? sourceUrl;
|
|
36
|
+
return client.request("POST", "/uploadposts/ffmpeg/jobs/upload", {
|
|
37
|
+
body: compact({
|
|
38
|
+
...rest,
|
|
39
|
+
files: files ?? (inputUrl ? [inputUrl] : undefined),
|
|
40
|
+
output_filename: rest.output_filename ?? outputFilename,
|
|
41
|
+
}),
|
|
42
|
+
});
|
|
43
|
+
}));
|
|
44
|
+
server.registerTool("get_ffmpeg_job", {
|
|
45
|
+
title: "Poll FFmpeg job status",
|
|
46
|
+
description: "Poll the status of an FFmpeg job. When status is 'completed', call `download_ffmpeg_result` to obtain the file.",
|
|
47
|
+
inputSchema: {
|
|
48
|
+
jobId: z.string(),
|
|
49
|
+
},
|
|
50
|
+
outputSchema: genericResultOutputSchema,
|
|
51
|
+
annotations: {
|
|
52
|
+
readOnlyHint: true,
|
|
53
|
+
openWorldHint: false,
|
|
54
|
+
destructiveHint: false,
|
|
55
|
+
},
|
|
56
|
+
}, safe(async ({ jobId }) => client.request("GET", `/uploadposts/ffmpeg/jobs/${encodeURIComponent(jobId)}`)));
|
|
57
|
+
server.registerTool("download_ffmpeg_result", {
|
|
58
|
+
title: "Get FFmpeg result download URL",
|
|
59
|
+
description: "Returns the download URL and metadata for a completed FFmpeg job without streaming the processed file through MCP.",
|
|
60
|
+
inputSchema: {
|
|
61
|
+
jobId: z.string(),
|
|
62
|
+
},
|
|
63
|
+
outputSchema: genericResultOutputSchema,
|
|
64
|
+
annotations: {
|
|
65
|
+
readOnlyHint: true,
|
|
66
|
+
openWorldHint: false,
|
|
67
|
+
destructiveHint: false,
|
|
68
|
+
},
|
|
69
|
+
}, safe(async ({ jobId }) => {
|
|
70
|
+
const status = await client.request("GET", `/uploadposts/ffmpeg/jobs/${encodeURIComponent(jobId)}`);
|
|
71
|
+
const result = status.result && typeof status.result === "object"
|
|
72
|
+
? status.result
|
|
73
|
+
: undefined;
|
|
74
|
+
const downloadUrl = result?.download_url ?? status.download_url;
|
|
75
|
+
if (typeof downloadUrl !== "string" || !downloadUrl) {
|
|
76
|
+
throw new Error("FFmpeg result is not ready or has no download URL.");
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
job_id: jobId,
|
|
80
|
+
status: status.status,
|
|
81
|
+
download_url: downloadUrl,
|
|
82
|
+
};
|
|
83
|
+
}));
|
|
84
|
+
server.registerTool("get_ffmpeg_consumption", {
|
|
85
|
+
title: "Get FFmpeg quota usage",
|
|
86
|
+
description: "Monthly FFmpeg processing minutes used vs. plan allowance.",
|
|
87
|
+
inputSchema: {},
|
|
88
|
+
outputSchema: genericResultOutputSchema,
|
|
89
|
+
annotations: {
|
|
90
|
+
readOnlyHint: true,
|
|
91
|
+
openWorldHint: false,
|
|
92
|
+
destructiveHint: false,
|
|
93
|
+
},
|
|
94
|
+
}, safe(async () => client.request("GET", "/uploadposts/ffmpeg/consumption")));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=ffmpeg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/tools/ffmpeg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { UploadPostMcpClient } from "../client.js";
|
|
3
|
+
export declare function registerMediaUploadTools(server: McpServer, client: UploadPostMcpClient): void;
|
|
4
|
+
//# sourceMappingURL=media_uploads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media_uploads.d.ts","sourceRoot":"","sources":["../../src/tools/media_uploads.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAKxD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAwI7F"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { genericResultOutputSchema, safe } from "../schemas.js";
|
|
3
|
+
const MediaType = z.enum(["video", "image", "document"]);
|
|
4
|
+
export function registerMediaUploadTools(server, client) {
|
|
5
|
+
server.registerTool("create_media_upload", {
|
|
6
|
+
title: "Create media upload",
|
|
7
|
+
description: "Internal/app staging helper for clients that can directly PUT file bytes to the returned upload_url. Do NOT use this directly from the ChatGPT/claude.ai model for attached files: the model/server environment cannot read or upload ChatGPT attachment bytes. For ChatGPT attached video uploads, call open_upload_studio first; the Studio browser component will call this tool after the user selects the file. Use this directly only in MCP clients that truly hold the file bytes and can perform the HTTP PUT themselves. Staging media is deleted after 24 hours; scheduled posts are safe because upload_video copies the media into durable scheduler storage.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
filename: z.string().describe("Original filename, e.g. clip.mp4."),
|
|
10
|
+
contentType: z.string().describe("MIME type, e.g. video/mp4."),
|
|
11
|
+
contentLength: z.number().int().positive().describe("File size in bytes."),
|
|
12
|
+
mediaType: MediaType.default("video").describe("Kind of media being uploaded."),
|
|
13
|
+
source: z.string().optional().describe("Optional source label, e.g. mcp_chatgpt or mcp_claude."),
|
|
14
|
+
},
|
|
15
|
+
outputSchema: genericResultOutputSchema,
|
|
16
|
+
annotations: {
|
|
17
|
+
readOnlyHint: false,
|
|
18
|
+
openWorldHint: false,
|
|
19
|
+
destructiveHint: false,
|
|
20
|
+
},
|
|
21
|
+
_meta: {
|
|
22
|
+
ui: {
|
|
23
|
+
visibility: ["app"],
|
|
24
|
+
},
|
|
25
|
+
"openai/widgetAccessible": true,
|
|
26
|
+
"openai/toolInvocation/invoking": "Creating upload URL…",
|
|
27
|
+
"openai/toolInvocation/invoked": "Upload URL created",
|
|
28
|
+
},
|
|
29
|
+
}, safe(async (args) => {
|
|
30
|
+
const input = args;
|
|
31
|
+
return client.request("POST", "/uploadposts/media-uploads", {
|
|
32
|
+
body: {
|
|
33
|
+
filename: input.filename,
|
|
34
|
+
content_type: input.contentType,
|
|
35
|
+
content_length: input.contentLength,
|
|
36
|
+
media_type: input.mediaType ?? "video",
|
|
37
|
+
source: input.source ?? "mcp",
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}));
|
|
41
|
+
server.registerTool("complete_media_upload", {
|
|
42
|
+
title: "Complete media upload",
|
|
43
|
+
description: "Internal/app staging helper. Validate a media upload only after the browser/client has successfully PUT the actual file bytes to upload_url. Do NOT call this immediately after create_media_upload from the model; without the intervening PUT, completion will fail or produce no publishable media. Returns a temporary media_url that can be passed to upload_video/upload_photos immediately.",
|
|
44
|
+
inputSchema: {
|
|
45
|
+
uploadId: z.string().describe("upload_id returned by create_media_upload."),
|
|
46
|
+
},
|
|
47
|
+
outputSchema: genericResultOutputSchema,
|
|
48
|
+
annotations: {
|
|
49
|
+
readOnlyHint: false,
|
|
50
|
+
openWorldHint: false,
|
|
51
|
+
destructiveHint: false,
|
|
52
|
+
},
|
|
53
|
+
_meta: {
|
|
54
|
+
ui: {
|
|
55
|
+
visibility: ["app"],
|
|
56
|
+
},
|
|
57
|
+
"openai/widgetAccessible": true,
|
|
58
|
+
"openai/toolInvocation/invoking": "Completing media upload…",
|
|
59
|
+
"openai/toolInvocation/invoked": "Media upload completed",
|
|
60
|
+
},
|
|
61
|
+
}, safe(async ({ uploadId }) => client.request("POST", `/uploadposts/media-uploads/${uploadId}/complete`)));
|
|
62
|
+
server.registerTool("get_media_upload", {
|
|
63
|
+
title: "Get media upload",
|
|
64
|
+
description: "Internal/app staging helper. Get status for a short-lived MCP media upload. Optionally returns a fresh temporary media_url for an already-uploaded staging object.",
|
|
65
|
+
inputSchema: {
|
|
66
|
+
uploadId: z.string(),
|
|
67
|
+
includeUrl: z.boolean().optional(),
|
|
68
|
+
},
|
|
69
|
+
outputSchema: genericResultOutputSchema,
|
|
70
|
+
annotations: {
|
|
71
|
+
readOnlyHint: true,
|
|
72
|
+
openWorldHint: false,
|
|
73
|
+
destructiveHint: false,
|
|
74
|
+
},
|
|
75
|
+
_meta: {
|
|
76
|
+
ui: {
|
|
77
|
+
visibility: ["app"],
|
|
78
|
+
},
|
|
79
|
+
"openai/widgetAccessible": true,
|
|
80
|
+
},
|
|
81
|
+
}, safe(async ({ uploadId, includeUrl }) => client.request("GET", `/uploadposts/media-uploads/${uploadId}`, {
|
|
82
|
+
query: includeUrl ? { include_url: "true" } : undefined,
|
|
83
|
+
})));
|
|
84
|
+
server.registerTool("delete_media_upload", {
|
|
85
|
+
title: "Delete media upload",
|
|
86
|
+
description: "Internal/app staging helper. Delete a short-lived MCP staging media upload from R2. This does not delete scheduler durable copies created later by upload_video.",
|
|
87
|
+
inputSchema: {
|
|
88
|
+
uploadId: z.string(),
|
|
89
|
+
},
|
|
90
|
+
outputSchema: genericResultOutputSchema,
|
|
91
|
+
annotations: {
|
|
92
|
+
readOnlyHint: false,
|
|
93
|
+
openWorldHint: false,
|
|
94
|
+
destructiveHint: true,
|
|
95
|
+
},
|
|
96
|
+
_meta: {
|
|
97
|
+
ui: {
|
|
98
|
+
visibility: ["app"],
|
|
99
|
+
},
|
|
100
|
+
"openai/widgetAccessible": true,
|
|
101
|
+
"openai/toolInvocation/invoking": "Deleting media upload…",
|
|
102
|
+
"openai/toolInvocation/invoked": "Media upload deleted",
|
|
103
|
+
},
|
|
104
|
+
}, safe(async ({ uploadId }) => client.request("DELETE", `/uploadposts/media-uploads/${uploadId}`)));
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=media_uploads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media_uploads.js","sourceRoot":"","sources":["../../src/tools/media_uploads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/tools/pages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAiIvF"}
|