@cmo-so/mcp 0.9.1 → 0.9.2
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/dist/cmo-mcp.mjs +74 -3
- package/package.json +1 -1
package/dist/cmo-mcp.mjs
CHANGED
|
@@ -7199,7 +7199,7 @@ var require_dist = __commonJS({
|
|
|
7199
7199
|
// package.json
|
|
7200
7200
|
var package_default = {
|
|
7201
7201
|
name: "@cmo-so/cli",
|
|
7202
|
-
version: "0.9.
|
|
7202
|
+
version: "0.9.2",
|
|
7203
7203
|
description: "CMO.so on the command line: your websites, ideas, blog posts, LinkedIn queue and results, plus a local MCP server for Claude Desktop, Cursor and other MCP clients.",
|
|
7204
7204
|
type: "module",
|
|
7205
7205
|
license: "MIT",
|
|
@@ -7784,8 +7784,14 @@ function domainApi(api2, domain) {
|
|
|
7784
7784
|
/** How a posted Instagram post is doing (read from Instagram, kept 15 minutes; `refresh` reads again). */
|
|
7785
7785
|
socialInsights: (id, refresh = false) => api2.request(`${base}/social/${id}/insights${refresh ? "?refresh=true" : ""}`),
|
|
7786
7786
|
deletePostedSocial: (id) => api2.request(`${base}/social/${id}/published`, { method: "DELETE" }),
|
|
7787
|
-
/**
|
|
7788
|
-
|
|
7787
|
+
/**
|
|
7788
|
+
* Change a posted post. LinkedIn changes its text in place (likes and comments stay); with `repost`, and on
|
|
7789
|
+
* the other channels, the old one comes down and the new text goes out now.
|
|
7790
|
+
*/
|
|
7791
|
+
republishSocial: (id, socialCopy, repost = false) => post(`${base}/social/${id}/republish`, {
|
|
7792
|
+
...socialCopy ? { social_copy: socialCopy } : {},
|
|
7793
|
+
...repost ? { repost: true } : {}
|
|
7794
|
+
}),
|
|
7789
7795
|
restoreSocial: (id) => post(`${base}/social/${id}/restore`),
|
|
7790
7796
|
pauseSocial: () => post(`${base}/social/pause`),
|
|
7791
7797
|
/**
|
|
@@ -8785,6 +8791,18 @@ var confirmCopy = {
|
|
|
8785
8791
|
return n.length > 1 ? `\u6279\u51C6 ${n.length} \u7BC7\u8CBC\u6587\uFF1A${n.map((i) => `#${i}`).join("\u3001")}\u3002\u6BCF\u7BC7\u5728\u63A5\u4E0B\u4F86\u7684\u767C\u6587\u6642\u9593\u767C\u51FA\uFF0C\u4F60\u7684\u4EBA\u8108\u90FD\u770B\u5F97\u5230\u3002` : `\u6279\u51C6\u8CBC\u6587 #${n[0]}\u3002\u5B83\u6703\u5728\u4E0B\u4E00\u500B\u767C\u6587\u6642\u9593\u767C\u51FA\uFF0C\u4F60\u7684\u4EBA\u8108\u90FD\u770B\u5F97\u5230\u3002`;
|
|
8786
8792
|
}
|
|
8787
8793
|
},
|
|
8794
|
+
social_publish_now: {
|
|
8795
|
+
en: (a) => `Post #${a.id} on its channel now, not at its posting time (even while posting is paused). Everyone who follows you can see it.`,
|
|
8796
|
+
"zh-Hant": (a) => `\u7ACB\u5373\u5728\u5B83\u7684\u983B\u9053\u767C\u51FA\u8CBC\u6587 #${a.id}\uFF0C\u4E0D\u7B49\u767C\u6587\u6642\u9593\uFF08\u66AB\u505C\u767C\u6587\u6642\u4E5F\u6703\u767C\uFF09\u3002\u767C\u51FA\u5F8C\u95DC\u6CE8\u4F60\u7684\u4EBA\u90FD\u770B\u5F97\u5230\u3002`
|
|
8797
|
+
},
|
|
8798
|
+
social_posted_update: {
|
|
8799
|
+
en: (a) => a.repost ? `Take post #${a.id} down (its likes and comments go) and put it up again${a.social_copy ? ` as ${q(a.social_copy)}` : ""}.` : `Change the text of the posted post #${a.id} to ${q(a.social_copy)}. On LinkedIn it stays up with its likes and comments; on other channels it comes down and goes out again.`,
|
|
8800
|
+
"zh-Hant": (a) => a.repost ? `\u64A4\u4E0B\u8CBC\u6587 #${a.id}\uFF08\u8B9A\u548C\u7559\u8A00\u6703\u6D88\u5931\uFF09\uFF0C\u518D\u91CD\u65B0\u767C\u51FA${a.social_copy ? `\uFF0C\u5167\u5BB9\u6539\u70BA ${q(a.social_copy)}` : ""}\u3002` : `\u628A\u5DF2\u767C\u51FA\u7684\u8CBC\u6587 #${a.id} \u6539\u70BA ${q(a.social_copy)}\u3002LinkedIn \u4E0A\u539F\u5730\u4FEE\u6539\uFF0C\u8B9A\u548C\u7559\u8A00\u4FDD\u7559\uFF1B\u5176\u4ED6\u983B\u9053\u6703\u64A4\u4E0B\u5F8C\u91CD\u767C\u3002`
|
|
8801
|
+
},
|
|
8802
|
+
social_posted_delete: {
|
|
8803
|
+
en: (a) => `Take post #${a.id} down from its channel, with its likes and comments. This can't be undone.`,
|
|
8804
|
+
"zh-Hant": (a) => `\u628A\u8CBC\u6587 #${a.id} \u5F9E\u5B83\u7684\u983B\u9053\u64A4\u4E0B\uFF0C\u8B9A\u548C\u7559\u8A00\u4E00\u8D77\u522A\u9664\uFF0C\u7121\u6CD5\u5FA9\u539F\u3002`
|
|
8805
|
+
},
|
|
8788
8806
|
social_skip: { en: (a) => `Skip post #${a.id}.`, "zh-Hant": (a) => `\u8DF3\u904E\u8CBC\u6587 #${a.id}\u3002` },
|
|
8789
8807
|
social_restore: {
|
|
8790
8808
|
en: (a) => `Bring back post #${a.id}.`,
|
|
@@ -11747,6 +11765,59 @@ var socialTools = [
|
|
|
11747
11765
|
return { approved: results.filter((r) => r.ok).length, results };
|
|
11748
11766
|
}
|
|
11749
11767
|
}),
|
|
11768
|
+
tool({
|
|
11769
|
+
name: "social_publish_now",
|
|
11770
|
+
description: "Post one social post on its channel now instead of at its posting time: a draft waiting for approval, a queued post, or one that didn't go out. It goes even while posting is paused. It goes out in the background: the answer says it is publishing; read social_post_get after a minute for its link (or why it couldn't go). Not while its picture is being made.",
|
|
11771
|
+
parameters: { type: "object", properties: { id: { type: "integer" } }, required: ["id"] },
|
|
11772
|
+
group: "social",
|
|
11773
|
+
need: write5,
|
|
11774
|
+
risk: "W3",
|
|
11775
|
+
gates: ["VER"],
|
|
11776
|
+
run: async (ctx, { id }) => {
|
|
11777
|
+
const n = Number(id);
|
|
11778
|
+
if (!Number.isInteger(n) || n <= 0) throw new Error("Which post?");
|
|
11779
|
+
const post = await ws(ctx).publishSocialNow(n, { background: true });
|
|
11780
|
+
return post.status === "published" ? post : { ...post, note: "Posting now. Check social_post_get in a minute for its link." };
|
|
11781
|
+
}
|
|
11782
|
+
}),
|
|
11783
|
+
tool({
|
|
11784
|
+
name: "social_posted_update",
|
|
11785
|
+
description: "Change a social post that has already gone out. On LinkedIn the new text replaces the old in place: the post keeps its likes and comments (its pictures can't change this way). With repost, and on Facebook, Instagram and Google, the old post comes down with its likes and comments and the new version goes out now. Without social_copy and with repost, it goes out again as it is (e.g. after new pictures).",
|
|
11786
|
+
parameters: {
|
|
11787
|
+
type: "object",
|
|
11788
|
+
properties: {
|
|
11789
|
+
id: { type: "integer" },
|
|
11790
|
+
social_copy: { type: "string", description: "The post's new text" },
|
|
11791
|
+
repost: { type: "boolean", description: "Take it down and put it up again instead of editing it" }
|
|
11792
|
+
},
|
|
11793
|
+
required: ["id"]
|
|
11794
|
+
},
|
|
11795
|
+
group: "social",
|
|
11796
|
+
need: write5,
|
|
11797
|
+
risk: "W3",
|
|
11798
|
+
gates: ["VER"],
|
|
11799
|
+
run: async (ctx, { id, social_copy, repost }) => {
|
|
11800
|
+
const n = Number(id);
|
|
11801
|
+
if (!Number.isInteger(n) || n <= 0) throw new Error("Which post?");
|
|
11802
|
+
const copy = typeof social_copy === "string" ? social_copy.trim() : "";
|
|
11803
|
+
if (!copy && repost !== true) throw new Error("Give the new text (social_copy), or repost: true.");
|
|
11804
|
+
return ws(ctx).republishSocial(n, copy || void 0, repost === true);
|
|
11805
|
+
}
|
|
11806
|
+
}),
|
|
11807
|
+
tool({
|
|
11808
|
+
name: "social_posted_delete",
|
|
11809
|
+
description: "Take a social post that has gone out down from its channel (LinkedIn, Facebook, Instagram, Google). Its likes and comments go with it; this can't be undone.",
|
|
11810
|
+
parameters: { type: "object", properties: { id: { type: "integer" } }, required: ["id"] },
|
|
11811
|
+
group: "social",
|
|
11812
|
+
need: write5,
|
|
11813
|
+
risk: "W3",
|
|
11814
|
+
gates: ["VER"],
|
|
11815
|
+
run: async (ctx, { id }) => {
|
|
11816
|
+
const n = Number(id);
|
|
11817
|
+
if (!Number.isInteger(n) || n <= 0) throw new Error("Which post?");
|
|
11818
|
+
return ws(ctx).deletePostedSocial(n);
|
|
11819
|
+
}
|
|
11820
|
+
}),
|
|
11750
11821
|
tool({
|
|
11751
11822
|
name: "social_skip",
|
|
11752
11823
|
description: "Skip a LinkedIn post (it won't be posted; it can be restored).",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmo-so/mcp",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.2",
|
|
4
4
|
"description": "CMO.so's MCP server for Claude Desktop, Cursor, VS Code and other MCP clients: manage your websites, blog posts, LinkedIn queue and results with Maggie.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|