@aioproductoscom/mcp 0.10.0 → 0.13.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/dist/client.js +19 -0
- package/dist/index.js +12 -1
- package/package.json +1 -1
package/dist/client.js
CHANGED
|
@@ -61,6 +61,25 @@ export class PlatformClient {
|
|
|
61
61
|
const qs = productId ? `?product_id=${encodeURIComponent(productId)}` : "";
|
|
62
62
|
return this.req(`/api/me/brain${qs}`);
|
|
63
63
|
}
|
|
64
|
+
captureInsight(body) {
|
|
65
|
+
return this.req("/api/me/insight", { method: "POST", body: JSON.stringify(body) });
|
|
66
|
+
}
|
|
67
|
+
customer360(query) {
|
|
68
|
+
return this.req(`/api/me/customer?q=${encodeURIComponent(query)}`);
|
|
69
|
+
}
|
|
70
|
+
nps(opts) {
|
|
71
|
+
const p = new URLSearchParams();
|
|
72
|
+
if (opts.productId)
|
|
73
|
+
p.set("product_id", opts.productId);
|
|
74
|
+
if (opts.windowDays)
|
|
75
|
+
p.set("window_days", String(opts.windowDays));
|
|
76
|
+
const qs = p.toString();
|
|
77
|
+
return this.req(`/api/me/nps${qs ? `?${qs}` : ""}`);
|
|
78
|
+
}
|
|
79
|
+
nrr(windowDays) {
|
|
80
|
+
const qs = windowDays ? `?window_days=${windowDays}` : "";
|
|
81
|
+
return this.req(`/api/me/nrr${qs}`);
|
|
82
|
+
}
|
|
64
83
|
funnel(opts) {
|
|
65
84
|
const p = new URLSearchParams();
|
|
66
85
|
if (opts.productId)
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ function text(data) {
|
|
|
18
18
|
],
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
const server = new McpServer({ name: "productos", version: "0.
|
|
21
|
+
const server = new McpServer({ name: "productos", version: "0.13.0" }, {
|
|
22
22
|
instructions: "You manage product work on ProductOS for the connected member — board, insights, features, and " +
|
|
23
23
|
"analytics all hang off one spine. Call get_pm_playbook first for how to operate: ground in " +
|
|
24
24
|
"get_product_brain, keep work tied to the spine (insight→feature→task→outcome), and prioritize on " +
|
|
@@ -53,6 +53,17 @@ server.tool("update_task", "Update a task's fields (status, priority, title, des
|
|
|
53
53
|
}, async ({ id, ...body }) => text(await client.updateTask(id, body)));
|
|
54
54
|
server.tool("comment_on_task", "Add a comment to a task.", { id: z.string(), body: z.string() }, async (a) => text(await client.comment(a.id, a.body)));
|
|
55
55
|
server.tool("get_product_brain", "Read a grounded, read-only snapshot of the org's product so YOU can reason about it on your own model: revenue + top paying accounts, web + product analytics, features, recent verbatim customer signals, and open work. Optional product_id; omit for the primary product. Returns the brain text plus the list of products you can ask about.", { product_id: z.string().optional() }, async (a) => text(await client.brain(a.product_id)));
|
|
56
|
+
server.tool("get_customer_360", "Everything about ONE customer, resolved by id, email, domain, or company name: profile, subscription + MRR, how many users sit under the account, and their verbatim feedback. The money + people + voice join on one record — use it before answering anything about a specific account.", { query: z.string() }, async (a) => text(await client.customer360(a.query)));
|
|
57
|
+
server.tool("analyze_nps", "NPS for the product — standard score AND revenue-weighted NPS (each respondent weighted by their account MRR), plus the detractor accounts ranked by what they're worth, with verbatims. The revenue weighting is the spine join no standalone survey tool can compute: it surfaces when your biggest customers are the unhappy ones even if the headline score looks fine. Optional product_id (primary by default) and window_days (default 90).", { product_id: z.string().optional(), window_days: z.number().optional() }, async (a) => text(await client.nps({ productId: a.product_id, windowDays: a.window_days })));
|
|
58
|
+
server.tool("analyze_nrr", "Net Revenue Retention — NRR (revenue-weighted) next to logo retention (count-weighted), the expansion/contraction/churn split, and the accounts that lost the most MRR. The divergence is the point: \"you keep 92% of logos but 78% of revenue\" means a big account churned while the headline looks fine. NRR is the number investors ask for and no standalone analytics tool can compute — it needs revenue on the same record. Optional window_days (default 90). Returns status 'building' until enough daily MRR snapshots exist to compare.", { window_days: z.number().optional() }, async (a) => text(await client.nrr(a.window_days)));
|
|
59
|
+
server.tool("capture_insight", "Write a piece of customer feedback to the spine (the agent's own hand, not just reading). It fires the same insight.created webhook a manual capture does. Tie it to the account it's about (account_id) and the feature it concerns (feature_id) when you know them; kind='opportunity' for a prioritizable ask. Defaults to the primary product.", {
|
|
60
|
+
body: z.string(),
|
|
61
|
+
title: z.string().optional(),
|
|
62
|
+
kind: z.enum(["insight", "opportunity"]).optional(),
|
|
63
|
+
product_id: z.string().optional(),
|
|
64
|
+
feature_id: z.string().optional(),
|
|
65
|
+
account_id: z.string().optional(),
|
|
66
|
+
}, async (a) => text(await client.captureInsight(a)));
|
|
56
67
|
server.tool("analyze_funnel", "Build a conversion funnel from the product's own events and reason over it on your model. Pass `steps` as an ordered list of event names (2+) to compute the funnel: distinct users per step, conversion, and drop-off. Omit `steps` to get the menu of available event names first. Optional product_id (defaults to the primary product) and window_days (default 30).", {
|
|
57
68
|
steps: z.array(z.string()).optional(),
|
|
58
69
|
product_id: z.string().optional(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aioproductoscom/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "ProductOS MCP — manage tickets, read your product brain + analytics, and run the support inbox from Claude Code, Cursor, Codex, and any MCP host.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|