@cmo-so/mcp 0.7.5 → 0.7.6
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 +45 -16
- 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.7.
|
|
7202
|
+
version: "0.7.6",
|
|
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",
|
|
@@ -7526,11 +7526,12 @@ function createApi({ baseUrl, session: session2, fetch: fetchImpl = globalThis.f
|
|
|
7526
7526
|
return request(`/v1/skills?${qs}`);
|
|
7527
7527
|
},
|
|
7528
7528
|
get: (id) => request(`/v1/skills/${encodeURIComponent(id)}`),
|
|
7529
|
-
/**
|
|
7530
|
-
react: (id, kind, on2 = true) => request(
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7529
|
+
/** Vote on or save a skill (on: false undoes it). "like" is an upvote. */
|
|
7530
|
+
react: (id, kind, on2 = true) => request(`/v1/skills/${encodeURIComponent(id)}/react`, {
|
|
7531
|
+
method: "POST",
|
|
7532
|
+
headers: { "Content-Type": "application/json" },
|
|
7533
|
+
body: JSON.stringify({ kind, on: on2 })
|
|
7534
|
+
}),
|
|
7534
7535
|
saved: () => request("/v1/skills/saved"),
|
|
7535
7536
|
/** Suggest an open-source GitHub repo; Maggie researches it (3 a day). */
|
|
7536
7537
|
submit: (repoUrl, note) => request("/v1/skills/submissions", {
|
|
@@ -8391,6 +8392,10 @@ var confirmCopy = {
|
|
|
8391
8392
|
en: (a) => `Remove the call-to-action for ${q(a.target_keyword)}.`,
|
|
8392
8393
|
"zh-Hant": (a) => `\u522A\u9664 ${q(a.target_keyword)} \u7684\u884C\u52D5\u547C\u7C72\u3002`
|
|
8393
8394
|
},
|
|
8395
|
+
internal_links_set: {
|
|
8396
|
+
en: (a) => Number(a.count) ? `Link each new post to ${a.count} of your latest articles.` : "Stop linking new posts to your other articles.",
|
|
8397
|
+
"zh-Hant": (a) => Number(a.count) ? `\u6BCF\u7BC7\u65B0\u6587\u7AE0\u9023\u7D50\u5230\u4F60\u6700\u65B0\u7684 ${a.count} \u7BC7\u6587\u7AE0\u3002` : "\u65B0\u6587\u7AE0\u4E0D\u518D\u9023\u7D50\u5230\u4F60\u7684\u5176\u4ED6\u6587\u7AE0\u3002"
|
|
8398
|
+
},
|
|
8394
8399
|
testimonial_upsert: {
|
|
8395
8400
|
en: (a) => `Save the testimonial from ${a.name}${a.use_in_posts ? " and use testimonials in posts" : ""}.`,
|
|
8396
8401
|
"zh-Hant": (a) => `\u5132\u5B58 ${a.name} \u7684\u5BA2\u6236\u8A55\u50F9${a.use_in_posts ? "\uFF0C\u4E26\u5728\u6587\u7AE0\u88E1\u4F7F\u7528\u8A55\u50F9" : ""}\u3002`
|
|
@@ -8639,8 +8644,8 @@ var confirmCopy = {
|
|
|
8639
8644
|
},
|
|
8640
8645
|
// ---------------------------------------------------------- Marketing skills (docs/26)
|
|
8641
8646
|
skill_like: {
|
|
8642
|
-
en: (a) => `${a.undo ? "Take back your
|
|
8643
|
-
"zh-Hant": (a) => `${a.undo ? "\
|
|
8647
|
+
en: (a) => `${a.undo ? "Take back your upvote on" : "Upvote"} the skill ${q(a.skill_id)} on cmo.so.`,
|
|
8648
|
+
"zh-Hant": (a) => `${a.undo ? "\u6536\u56DE\u5C0D" : "\u5728 cmo.so \u6295\u7968\u652F\u6301"}\u6280\u80FD ${q(a.skill_id)}${a.undo ? " \u7684\u652F\u6301\u7968" : ""}\u3002`
|
|
8644
8649
|
},
|
|
8645
8650
|
skill_save: {
|
|
8646
8651
|
en: (a) => `${a.undo ? "Remove" : "Save"} the skill ${q(a.skill_id)} ${a.undo ? "from" : "to"} your saved skills.`,
|
|
@@ -9668,6 +9673,24 @@ var brandTools = [
|
|
|
9668
9673
|
return { ctas: out.ctas?.map((c) => c.target_keyword) };
|
|
9669
9674
|
}
|
|
9670
9675
|
}),
|
|
9676
|
+
tool({
|
|
9677
|
+
name: "internal_links_set",
|
|
9678
|
+
description: "Set how many of the website's own latest articles each new post links to (internal cross-links, picked for the topic; separate from CTAs). 0 turns it off, max 10, default 3.",
|
|
9679
|
+
parameters: {
|
|
9680
|
+
type: "object",
|
|
9681
|
+
properties: { count: { type: "integer", minimum: 0, maximum: 10 } },
|
|
9682
|
+
required: ["count"]
|
|
9683
|
+
},
|
|
9684
|
+
group: "brand",
|
|
9685
|
+
need: write2,
|
|
9686
|
+
risk: "W1",
|
|
9687
|
+
run: async (ctx, { count }) => {
|
|
9688
|
+
const n = Math.round(Number(count));
|
|
9689
|
+
if (!Number.isFinite(n) || n < 0 || n > 10) throw new Error("count must be 0 to 10.");
|
|
9690
|
+
const out = await ws(ctx).updateBrand({ internal_links: { count: n } });
|
|
9691
|
+
return { internal_links: out.internal_links ?? { count: n } };
|
|
9692
|
+
}
|
|
9693
|
+
}),
|
|
9671
9694
|
tool({
|
|
9672
9695
|
name: "testimonial_upsert",
|
|
9673
9696
|
description: "Add a customer testimonial, or change the one from the same person. Only real quotes the user gives (or examples they asked for). use_in_posts turns testimonials on in posts.",
|
|
@@ -10746,7 +10769,7 @@ var ID = { type: "string", description: "The skill id, like cmo-ad-creative" };
|
|
|
10746
10769
|
var skillTools = [
|
|
10747
10770
|
tool({
|
|
10748
10771
|
name: "skills_search",
|
|
10749
|
-
description: "Search cmo.so's open library of marketing skills (step-by-step methods an AI agent follows, free and MIT licensed): returns matching skills with their summary,
|
|
10772
|
+
description: "Search cmo.so's open library of marketing skills (step-by-step methods an AI agent follows, free and MIT licensed): returns matching skills with their summary, vote score and page. Use it when the user asks how to do a marketing job, wants a playbook or template, or asks which skills exist. Empty query: the most useful ones and the categories.",
|
|
10750
10773
|
parameters: {
|
|
10751
10774
|
type: "object",
|
|
10752
10775
|
properties: {
|
|
@@ -10770,7 +10793,13 @@ var skillTools = [
|
|
|
10770
10793
|
return {
|
|
10771
10794
|
total_in_library: r.total,
|
|
10772
10795
|
...a.query ? {} : { categories: r.categories.map((c) => `${c.id} (${c.count})`) },
|
|
10773
|
-
skills: r.skills.map((s) => ({
|
|
10796
|
+
skills: r.skills.map((s) => ({
|
|
10797
|
+
id: s.id,
|
|
10798
|
+
name: s.name,
|
|
10799
|
+
summary: s.summary,
|
|
10800
|
+
score: s.score ?? s.likes,
|
|
10801
|
+
page: s.url
|
|
10802
|
+
}))
|
|
10774
10803
|
};
|
|
10775
10804
|
}
|
|
10776
10805
|
}),
|
|
@@ -10789,7 +10818,7 @@ var skillTools = [
|
|
|
10789
10818
|
name: s.name,
|
|
10790
10819
|
summary: s.summary,
|
|
10791
10820
|
page: s.url,
|
|
10792
|
-
|
|
10821
|
+
score: s.score ?? s.likes,
|
|
10793
10822
|
saves: s.saves,
|
|
10794
10823
|
uses_tools: s.mcp_tools,
|
|
10795
10824
|
pairs_with: s.pairs_with,
|
|
@@ -10801,10 +10830,10 @@ var skillTools = [
|
|
|
10801
10830
|
}),
|
|
10802
10831
|
tool({
|
|
10803
10832
|
name: "skill_like",
|
|
10804
|
-
description: "
|
|
10833
|
+
description: "Upvote a skill in the cmo.so library for the user (or take the upvote back with undo). Votes help the library decide what to keep improving. Only when the user asks.",
|
|
10805
10834
|
parameters: {
|
|
10806
10835
|
type: "object",
|
|
10807
|
-
properties: { skill_id: ID, undo: { type: "boolean", description: "true takes the
|
|
10836
|
+
properties: { skill_id: ID, undo: { type: "boolean", description: "true takes the upvote back" } },
|
|
10808
10837
|
required: ["skill_id"]
|
|
10809
10838
|
},
|
|
10810
10839
|
group: "account",
|
|
@@ -10813,12 +10842,12 @@ var skillTools = [
|
|
|
10813
10842
|
idempotent: true,
|
|
10814
10843
|
run: async (ctx, a) => {
|
|
10815
10844
|
const r = await ctx.api.skills.react(String(a.skill_id), "like", !a.undo);
|
|
10816
|
-
return { skill_id: r.item,
|
|
10845
|
+
return { skill_id: r.item, upvoted: r.liked, score: r.counts.score ?? r.counts.likes };
|
|
10817
10846
|
}
|
|
10818
10847
|
}),
|
|
10819
10848
|
tool({
|
|
10820
10849
|
name: "skill_save",
|
|
10821
|
-
description: "Save a skill to the user's saved skills on cmo.so (or remove it with undo), to find it again at cmo.so/skills
|
|
10850
|
+
description: "Save a skill to the user's saved skills on cmo.so (or remove it with undo), to find it again under Saved at cmo.so/skills or with skills_saved_list.",
|
|
10822
10851
|
parameters: {
|
|
10823
10852
|
type: "object",
|
|
10824
10853
|
properties: { skill_id: ID, undo: { type: "boolean", description: "true removes it from saved" } },
|
|
@@ -10851,7 +10880,7 @@ var skillTools = [
|
|
|
10851
10880
|
}),
|
|
10852
10881
|
tool({
|
|
10853
10882
|
name: "skill_submit",
|
|
10854
|
-
description: "Suggest a public open-source GitHub repo for cmo.so's skill library. Maggie researches it within minutes and decides: add a new skill, improve an existing one, keep it as a candidate that needs 10
|
|
10883
|
+
description: "Suggest a public open-source GitHub repo for cmo.so's skill library. Maggie researches it within minutes and decides: add a new skill, improve an existing one, keep it as a candidate that needs a vote score of 10 in 30 days, or decline (licence first: permissive licences can be adapted, copyleft only inspires, no licence is declined). 3 suggestions a day. Follow up with skill_submissions_list.",
|
|
10855
10884
|
parameters: {
|
|
10856
10885
|
type: "object",
|
|
10857
10886
|
properties: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmo-so/mcp",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.6",
|
|
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",
|