@aioproductoscom/mcp 0.7.0 → 0.8.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/README.md +1 -0
- package/dist/client.js +11 -0
- package/dist/index.js +6 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,6 +52,7 @@ at a self-hosted platform.
|
|
|
52
52
|
| `get_product_brain` | a grounded read-only snapshot of your product (revenue, accounts, web + product analytics, features, signals, open work) |
|
|
53
53
|
| `analyze_funnel` | build an ordered conversion funnel from your events (users per step, conversion, drop-off); omit steps to list available events |
|
|
54
54
|
| `get_retention` | weekly cohort retention — who comes back, week over week |
|
|
55
|
+
| `analyze_paths` | user paths (Sankey) — what people do after a start event, with drop-off |
|
|
55
56
|
| `list_conversations` | the support-chat inbox (open threads, visitor, topic, status) |
|
|
56
57
|
| `get_conversation` | one support thread + its full message history |
|
|
57
58
|
| `reply_to_conversation` | reply to a visitor (**visible in their chat widget**, sent as you) |
|
package/dist/client.js
CHANGED
|
@@ -81,6 +81,17 @@ export class PlatformClient {
|
|
|
81
81
|
const qs = p.toString();
|
|
82
82
|
return this.req(`/api/me/retention${qs ? `?${qs}` : ""}`);
|
|
83
83
|
}
|
|
84
|
+
paths(opts) {
|
|
85
|
+
const p = new URLSearchParams();
|
|
86
|
+
if (opts.productId)
|
|
87
|
+
p.set("product_id", opts.productId);
|
|
88
|
+
if (opts.window)
|
|
89
|
+
p.set("window", String(opts.window));
|
|
90
|
+
if (opts.start)
|
|
91
|
+
p.set("start", opts.start);
|
|
92
|
+
const qs = p.toString();
|
|
93
|
+
return this.req(`/api/me/paths${qs ? `?${qs}` : ""}`);
|
|
94
|
+
}
|
|
84
95
|
listConversations(opts) {
|
|
85
96
|
const p = new URLSearchParams();
|
|
86
97
|
if (opts.productId)
|
package/dist/index.js
CHANGED
|
@@ -17,7 +17,7 @@ function text(data) {
|
|
|
17
17
|
],
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
const server = new McpServer({ name: "productos", version: "0.
|
|
20
|
+
const server = new McpServer({ name: "productos", version: "0.8.0" }, {
|
|
21
21
|
instructions: "You manage ProductOS PM tickets on behalf of the connected member — the board is the team's " +
|
|
22
22
|
"source of truth, so work precisely. Resolve names to ids with pm_meta before create_task / " +
|
|
23
23
|
"update_task; never guess an id. Link a task to the spine (feature_id / insight_id) whenever the " +
|
|
@@ -57,6 +57,11 @@ server.tool("analyze_funnel", "Build a conversion funnel from the product's own
|
|
|
57
57
|
window_days: z.number().optional(),
|
|
58
58
|
}, async (a) => text(await client.funnel({ steps: a.steps, productId: a.product_id, window: a.window_days })));
|
|
59
59
|
server.tool("get_retention", "Weekly cohort retention for the product: users grouped by their first-seen week, with the share returning each week after. Optional product_id (defaults to the primary product) and window_days (default 56 = 8 weekly cohorts).", { product_id: z.string().optional(), window_days: z.number().optional() }, async (a) => text(await client.retention({ productId: a.product_id, window: a.window_days })));
|
|
60
|
+
server.tool("analyze_paths", "Trace what users do AFTER a start event — the journey flow (Sankey) from the product's own events, so YOU can reason about real behaviour on your model. Returns nodes (the event at each depth, with distinct users + share of journeys) and links (source→target with how many users took that step), including where people drop off ('(exit)') and the collapsed long tail ('(other)'). Pass `start` to anchor on a specific event, or omit it to anchor on the most common journey start. Optional product_id (defaults to the primary product) and window_days (default 30).", {
|
|
61
|
+
start: z.string().optional(),
|
|
62
|
+
product_id: z.string().optional(),
|
|
63
|
+
window_days: z.number().optional(),
|
|
64
|
+
}, async (a) => text(await client.paths({ start: a.start, productId: a.product_id, window: a.window_days })));
|
|
60
65
|
server.tool("list_conversations", "List support-chat conversations in the inbox (open + snoozed by default; pass status='all' to include closed). Each has id, visitor, topic, status, and last activity. Optional product_id to scope to one product.", { product_id: z.string().optional(), status: z.enum(["all"]).optional() }, async (a) => text(await client.listConversations({ productId: a.product_id, status: a.status })));
|
|
61
66
|
server.tool("get_conversation", "Read one support conversation: the visitor + the full message thread (visitor, agent, and internal notes), oldest first.", { conversation_id: z.string() }, async (a) => text(await client.getConversation(a.conversation_id)));
|
|
62
67
|
server.tool("reply_to_conversation", "Send a reply into a support conversation. This message IS VISIBLE TO THE VISITOR in the chat widget — it goes out as you (the member who owns this token). Use add_note for internal triage you don't want the visitor to see.", { conversation_id: z.string(), body: z.string() }, async (a) => text(await client.inboxAction({ action: "reply", conversation_id: a.conversation_id, body: a.body })));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aioproductoscom/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.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",
|