@cmo-so/mcp 0.12.19 → 0.12.20
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 +115 -2
- package/package.json +1 -1
package/dist/cmo-mcp.mjs
CHANGED
|
@@ -24489,7 +24489,7 @@ var require_dist3 = __commonJS({
|
|
|
24489
24489
|
// package.json
|
|
24490
24490
|
var package_default = {
|
|
24491
24491
|
name: "@cmo-so/cli",
|
|
24492
|
-
version: "0.12.
|
|
24492
|
+
version: "0.12.20",
|
|
24493
24493
|
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.",
|
|
24494
24494
|
type: "module",
|
|
24495
24495
|
license: "MIT",
|
|
@@ -46065,7 +46065,23 @@ var MB_RESOURCES = {
|
|
|
46065
46065
|
write: false,
|
|
46066
46066
|
what: "booking rules, location, languages (change with wp_booking_settings_set)"
|
|
46067
46067
|
},
|
|
46068
|
-
imports: { path: "/import", write: false, what: "import history (undo with wp_booking_import undo_id)" }
|
|
46068
|
+
imports: { path: "/import", write: false, what: "import history (undo with wp_booking_import undo_id)" },
|
|
46069
|
+
products: { path: "/products", write: true, what: "retail products with price, tax, stock and low-stock level" },
|
|
46070
|
+
sales: { path: "/sales", write: false, what: "till sales (items, payments, refunds); search, id \u2192 one sale" },
|
|
46071
|
+
plans: { path: "/plans", write: true, what: "prepaid packages and membership plans for sale" },
|
|
46072
|
+
memberships: {
|
|
46073
|
+
path: "/memberships",
|
|
46074
|
+
write: false,
|
|
46075
|
+
what: "customers' memberships (pause, cancel\u2026 with wp_booking_membership)"
|
|
46076
|
+
},
|
|
46077
|
+
loyalty: { path: "/loyalty", write: false, what: "loyalty programme settings and points" },
|
|
46078
|
+
campaigns: {
|
|
46079
|
+
path: "/campaigns",
|
|
46080
|
+
write: true,
|
|
46081
|
+
what: "email campaigns (subject, body, button, segment) \u2014 send with wp_booking_campaign_send"
|
|
46082
|
+
},
|
|
46083
|
+
automations: { path: "/automations", write: false, what: "automated emails: we miss you, time to rebook, birthday" },
|
|
46084
|
+
messages: { path: "/messages", write: false, what: "conversations with customers; id = customer id \u2192 the thread" }
|
|
46069
46085
|
};
|
|
46070
46086
|
var bookingTools = [
|
|
46071
46087
|
tool({
|
|
@@ -46493,6 +46509,103 @@ var bookingTools = [
|
|
|
46493
46509
|
}
|
|
46494
46510
|
}
|
|
46495
46511
|
}),
|
|
46512
|
+
tool({
|
|
46513
|
+
name: "wp_booking_reports",
|
|
46514
|
+
description: "Business reports for a date range (from/to Y-m-d, venue time; group day | week | month): revenue (bookings and till sales), bookings by status, no-show rate, by treatment, by team member, by channel, new vs returning customers, gift cards sold vs redeemed. team_pay true: each team member's pay (commission on treatments, products and tips plus hourly pay). Read-only.",
|
|
46515
|
+
parameters: {
|
|
46516
|
+
type: "object",
|
|
46517
|
+
properties: {
|
|
46518
|
+
from: str2("From (Y-m-d)."),
|
|
46519
|
+
to: str2("To (Y-m-d)."),
|
|
46520
|
+
group: str2("day | week | month"),
|
|
46521
|
+
team_pay: bool("Team pay instead.")
|
|
46522
|
+
}
|
|
46523
|
+
},
|
|
46524
|
+
group: "site",
|
|
46525
|
+
need: READ,
|
|
46526
|
+
risk: "R0",
|
|
46527
|
+
gates: ["WP"],
|
|
46528
|
+
run: (ctx, a3) => mb(ctx, "GET", a3.team_pay ? "/reports/team-pay" : "/reports", void 0, {
|
|
46529
|
+
from: a3.from,
|
|
46530
|
+
to: a3.to,
|
|
46531
|
+
group: a3.group
|
|
46532
|
+
})
|
|
46533
|
+
}),
|
|
46534
|
+
tool({
|
|
46535
|
+
name: "wp_booking_message",
|
|
46536
|
+
description: "Send a customer a message from the business (customer id from wp_booking_list resource customers): they get it by email (and text when SMS is on) with a link to reply; replies show in wp_booking_list resource messages id=<customer id>.",
|
|
46537
|
+
parameters: {
|
|
46538
|
+
type: "object",
|
|
46539
|
+
properties: {
|
|
46540
|
+
customer_id: int2("Customer id."),
|
|
46541
|
+
body: str2("The message (plain text)."),
|
|
46542
|
+
booking_id: int2("About this booking (optional).")
|
|
46543
|
+
},
|
|
46544
|
+
required: ["customer_id", "body"]
|
|
46545
|
+
},
|
|
46546
|
+
group: "site",
|
|
46547
|
+
need: WRITE,
|
|
46548
|
+
risk: "W2",
|
|
46549
|
+
gates: [...GATES],
|
|
46550
|
+
confirm: (a3, lang) => say(
|
|
46551
|
+
lang,
|
|
46552
|
+
`Send customer #${a3.customer_id} this message by email: ${q3(a3.body, "")}`,
|
|
46553
|
+
`\u4EE5\u96FB\u90F5\u767C\u9001\u6B64\u8A0A\u606F\u7D66\u5BA2\u6236 #${a3.customer_id}\uFF1A${q3(a3.body, "")}`
|
|
46554
|
+
),
|
|
46555
|
+
run: (ctx, a3) => mb(ctx, "POST", `/messages/${Number(a3.customer_id)}`, { body: a3.body, booking_id: a3.booking_id })
|
|
46556
|
+
}),
|
|
46557
|
+
tool({
|
|
46558
|
+
name: "wp_booking_campaign_send",
|
|
46559
|
+
description: "Send (or schedule with at, ISO time) an email campaign saved with wp_booking_save resource campaigns. Only customers who agreed to marketing emails get it, each with an unsubscribe link. Check the audience first: wp_booking_list resource campaigns id=<id>.",
|
|
46560
|
+
parameters: {
|
|
46561
|
+
type: "object",
|
|
46562
|
+
properties: {
|
|
46563
|
+
id: int2("Campaign id."),
|
|
46564
|
+
at: str2("Send at (ISO time); default now."),
|
|
46565
|
+
cancel: bool("Cancel a scheduled or running send instead.")
|
|
46566
|
+
},
|
|
46567
|
+
required: ["id"]
|
|
46568
|
+
},
|
|
46569
|
+
group: "site",
|
|
46570
|
+
need: WRITE,
|
|
46571
|
+
risk: "W3",
|
|
46572
|
+
gates: [...GATES],
|
|
46573
|
+
confirm: (a3, lang) => a3.cancel ? say(lang, `Stop campaign #${a3.id}.`, `\u505C\u6B62\u63A8\u5EE3\u6D3B\u52D5 #${a3.id}\u3002`) : say(
|
|
46574
|
+
lang,
|
|
46575
|
+
`Email campaign #${a3.id} to every customer in its audience who agreed to marketing emails${a3.at ? ` at ${a3.at}` : " now"}.`,
|
|
46576
|
+
`\u628A\u63A8\u5EE3\u6D3B\u52D5 #${a3.id}${a3.at ? `\u65BC ${a3.at}` : "\u7ACB\u5373"}\u5BC4\u7D66\u53D7\u773E\u4E2D\u540C\u610F\u63A5\u6536\u884C\u92B7\u96FB\u90F5\u7684\u5BA2\u6236\u3002`
|
|
46577
|
+
),
|
|
46578
|
+
run: (ctx, a3) => mb(ctx, "POST", `/campaigns/${Number(a3.id)}/${a3.cancel ? "cancel" : "send"}`, a3.cancel ? {} : { at: a3.at })
|
|
46579
|
+
}),
|
|
46580
|
+
tool({
|
|
46581
|
+
name: "wp_booking_membership",
|
|
46582
|
+
description: "Change a customer's membership (id from wp_booking_list resource memberships): pause, resume, cancel (at the end of the period), cancel_now, add_sessions (sessions), add_credit (amount_minor), mark_paid (a renewal paid at the desk) or charge (retry the renewal on the saved card).",
|
|
46583
|
+
parameters: {
|
|
46584
|
+
type: "object",
|
|
46585
|
+
properties: {
|
|
46586
|
+
id: int2("Membership id."),
|
|
46587
|
+
action: str2("pause | resume | cancel | cancel_now | add_sessions | add_credit | mark_paid | charge"),
|
|
46588
|
+
sessions: int2("For add_sessions."),
|
|
46589
|
+
amount_minor: int2("For add_credit."),
|
|
46590
|
+
note: str2("Note.")
|
|
46591
|
+
},
|
|
46592
|
+
required: ["id", "action"]
|
|
46593
|
+
},
|
|
46594
|
+
group: "site",
|
|
46595
|
+
need: WRITE,
|
|
46596
|
+
risk: "W3",
|
|
46597
|
+
gates: [...GATES],
|
|
46598
|
+
confirm: (a3, lang) => say(
|
|
46599
|
+
lang,
|
|
46600
|
+
`Membership #${a3.id}: ${a3.action}${a3.action === "charge" ? " (charges the saved card)" : ""}.`,
|
|
46601
|
+
`\u6703\u7C4D #${a3.id}\uFF1A${a3.action}${a3.action === "charge" ? "\uFF08\u5F9E\u5DF2\u5B58\u5361\u7247\u6263\u6B3E\uFF09" : ""}\u3002`
|
|
46602
|
+
),
|
|
46603
|
+
run: (ctx, a3) => mb(ctx, "POST", `/memberships/${Number(a3.id)}/${String(a3.action)}`, {
|
|
46604
|
+
sessions: a3.sessions,
|
|
46605
|
+
amount_minor: a3.amount_minor,
|
|
46606
|
+
note: a3.note
|
|
46607
|
+
})
|
|
46608
|
+
}),
|
|
46496
46609
|
tool({
|
|
46497
46610
|
name: "wp_booking_translate",
|
|
46498
46611
|
description: "Read or write the translations of booking content (type service | variant | category | staff | voucher, id, lang such as zh-hans or es; fields name, description). Without fields: read. The site's extra languages are set with wp_booking_settings_set settings.languages.",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmo-so/mcp",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.20",
|
|
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",
|