@aioproductoscom/mcp 0.15.2 → 0.15.3
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/index.js +4 -4
- package/package.json +6 -7
package/dist/index.js
CHANGED
|
@@ -23,7 +23,7 @@ function text(data) {
|
|
|
23
23
|
function promptMsg(body) {
|
|
24
24
|
return { messages: [{ role: "user", content: { type: "text", text: body } }] };
|
|
25
25
|
}
|
|
26
|
-
const server = new McpServer({ name: "AIOProductOS", version: "0.15.
|
|
26
|
+
const server = new McpServer({ name: "AIOProductOS", version: "0.15.3" }, {
|
|
27
27
|
instructions: "You manage product work on AIOProductOS for the connected member — board, insights, features, and " +
|
|
28
28
|
"analytics all hang off one spine. Call get_pm_playbook first for how to operate: ground in " +
|
|
29
29
|
"get_product_brain, keep work tied to the spine (insight→feature→task→outcome), and prioritize on " +
|
|
@@ -64,7 +64,7 @@ server.tool("comment_on_task", "Add a comment to a task, authored as the connect
|
|
|
64
64
|
body: z.string().describe("Comment body."),
|
|
65
65
|
}, async (a) => text(await client.comment(a.id, a.body)));
|
|
66
66
|
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().describe("Product id, from whoami (optional; primary by default).") }, async (a) => text(await client.brain(a.product_id)));
|
|
67
|
-
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. Read-only; returns the
|
|
67
|
+
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 (newest first). Read-only; returns the single best-matching account, or an empty result when nothing matches. The money + people + voice join on one record — use it before answering anything about a specific account.", { query: z.string().describe("The account to resolve — an account id (exact), a user's email (exact), a company domain like 'acme.com', or a company name (partial match). Pass one value; the strongest match wins.") }, async (a) => text(await client.customer360(a.query)));
|
|
68
68
|
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).", {
|
|
69
69
|
product_id: z.string().optional().describe("Product id, from whoami (optional; primary by default)."),
|
|
70
70
|
window_days: z.number().optional().describe("Window in days (default 90)."),
|
|
@@ -113,9 +113,9 @@ server.tool("reschedule_booking", "Move a booking to a new start time and return
|
|
|
113
113
|
start: z.string().describe("New start time, ISO 8601 (e.g. 2026-06-20T15:00:00Z); must be an open slot."),
|
|
114
114
|
}, async (a) => text(await client.schedulingAction({ action: "reschedule", booking_id: a.booking_id, start: a.start })));
|
|
115
115
|
server.tool("list_channels", "List the team Comms channels you (this token's member) belong to — id, name, kind, topic. Read-only; returns your channels, empty when you belong to none (an admin adds you in AIOProductOS → Comms). These are the channels you can read_channel and post_to_channel into.", {}, async () => text(await client.listChannels()));
|
|
116
|
-
server.tool("read_channel", "Read recent messages in a Comms channel you belong to
|
|
116
|
+
server.tool("read_channel", "Read recent messages in a Comms channel you belong to, oldest→newest, so you can catch up before replying. Read-only; returns each message with its author, body, and timestamp — empty when the channel is silent. Resolve the channel_id first with list_channels — never guess it. Pass limit to cap how many of the most-recent messages come back; the server applies a default when it's omitted.", {
|
|
117
117
|
channel_id: z.string().describe("Channel id, from list_channels."),
|
|
118
|
-
limit: z.number().optional().describe("
|
|
118
|
+
limit: z.number().int().positive().optional().describe("Maximum number of most-recent messages to return (optional; the server applies a sensible default when omitted)."),
|
|
119
119
|
}, async (a) => text(await client.readChannel(a.channel_id, a.limit)));
|
|
120
120
|
server.tool("post_to_channel", "Post a message into a team Comms channel you belong to and return the posted message. It goes out as you (this token's member) and appears live for your teammates — use it to tell the team what you did, share a link, or ask a question. Resolve the channel_id first with list_channels; only works for channels you're a member of.", {
|
|
121
121
|
channel_id: z.string().describe("Channel id, from list_channels."),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aioproductoscom/mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.3",
|
|
4
4
|
"mcpName": "com.aioproductos/mcp",
|
|
5
5
|
"description": "AIOProductOS MCP — manage the board, read your product brain + analytics, and run the support inbox from Claude Code, Cursor, Codex, and any MCP host.",
|
|
6
6
|
"type": "module",
|
|
@@ -37,11 +37,6 @@
|
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
|
-
"scripts": {
|
|
41
|
-
"build": "tsc",
|
|
42
|
-
"prepublishOnly": "npm run build",
|
|
43
|
-
"start": "node dist/index.js"
|
|
44
|
-
},
|
|
45
40
|
"dependencies": {
|
|
46
41
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
47
42
|
"zod": "^3.23.8"
|
|
@@ -49,5 +44,9 @@
|
|
|
49
44
|
"devDependencies": {
|
|
50
45
|
"@types/node": "^22.7.0",
|
|
51
46
|
"typescript": "^5.6.0"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"build": "tsc",
|
|
50
|
+
"start": "node dist/index.js"
|
|
52
51
|
}
|
|
53
|
-
}
|
|
52
|
+
}
|