jujugrowth-mcp 1.1.0 → 1.2.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 (2) hide show
  1. package/package.json +1 -1
  2. package/server.mjs +22 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jujugrowth-mcp",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "MCP server connecting your AI coding assistant (Claude, Cursor, Codex) to jujugrowth — pull your living marketing plan's dev tasks + recommendations and apply them in your repo.",
5
5
  "type": "module",
6
6
  "bin": {
package/server.mjs CHANGED
@@ -88,6 +88,27 @@ const TOOLS = [
88
88
  run: async (a) =>
89
89
  call("GET", `/plan-tasks${a.tenantId ? `?tenantId=${encodeURIComponent(a.tenantId)}` : ""}`),
90
90
  },
91
+ {
92
+ name: "mark_plan_task_handled",
93
+ description:
94
+ "Report a marketing-plan dev-AI task DONE after you've shipped it in the repo. Pass the task's `action` (exactly as returned by list_plan_tasks) and a short `note` of what you changed. jujugrowth records it and the next plan regeneration marks that step done (and stops listing it). ALWAYS call this once a plan task is implemented — it's how the plan knows the work happened. Pass `tenantId` if your token spans more than one site.",
95
+ inputSchema: {
96
+ type: "object",
97
+ properties: {
98
+ tenantId: { type: "string", description: "the site (required only for multi-site tokens)" },
99
+ action: { type: "string", description: "the task's action text, exactly as listed" },
100
+ note: { type: "string", description: "1-3 sentences: what you implemented" },
101
+ },
102
+ required: ["action"],
103
+ additionalProperties: false,
104
+ },
105
+ run: async (a) =>
106
+ call("POST", "/plan-tasks/handled", {
107
+ action: a.action,
108
+ ...(a.tenantId ? { tenantId: a.tenantId } : {}),
109
+ ...(a.note ? { note: a.note } : {}),
110
+ }),
111
+ },
91
112
  {
92
113
  name: "get_recommendation",
93
114
  description:
@@ -171,7 +192,7 @@ async function handle(msg) {
171
192
  "2) get_recommendation for any rec you'll act on.\n" +
172
193
  "3) Before changing anything, VERIFY current-state claims against the actual code — they can be stale; skip what's already done.\n" +
173
194
  "4) Implement in the user's repo, scoped to wording/structure/SEO/tracking the plan asks for. Show a diff / open a PR for the user to review.\n" +
174
- "5) ALWAYS call mark_recommendation_handled with a short note once a recommendation is shipped don't wait to be told. (Plan-task progress is reflected automatically by the next plan regeneration's evidence-grounded status.)\n" +
195
+ "5) ALWAYS report completion once shipped, don't wait to be told: mark_recommendation_handled for a recommendation, or mark_plan_task_handled (with the task's action + a note) for a plan task — that's how the plan learns the work happened and marks the step done.\n" +
175
196
  "Campaigns and ad budgets are NOT here — those are owner decisions the jujugrowth system runs itself. This server is bound to ONE site; never act on another.",
176
197
  },
177
198
  });