@aioproductoscom/mcp 0.15.0 → 0.15.1
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 +27 -17
- package/dist/index.js +7 -7
- package/dist/pm-skill.js +3 -3
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AIOProductOS MCP · server
|
|
2
2
|
|
|
3
3
|
One MCP for your whole product. Manage the board, read your product brain +
|
|
4
4
|
analytics, and run the support inbox from your AI host — **Claude Code, Cursor,
|
|
5
5
|
Codex, or any MCP client** — all reasoning on **your own model subscription**
|
|
6
|
-
(BYOK;
|
|
7
|
-
the only credential is your personal access
|
|
8
|
-
host's config.
|
|
6
|
+
(BYOK; [AIOProductOS](https://aioproductos.com) never charges for the agent's
|
|
7
|
+
compute). Thin and secret-free: the only credential is your personal access
|
|
8
|
+
token, which you paste into *your* host's config.
|
|
9
9
|
|
|
10
10
|
## 1. Get a token
|
|
11
11
|
|
|
12
|
-
In
|
|
13
|
-
(shown once) — it looks like
|
|
14
|
-
access.
|
|
12
|
+
In [AIOProductOS](https://platform.aioproductos.com) → **Settings → Tokens &
|
|
13
|
+
Agents** → **Generate token**. Copy it (shown once) — it looks like
|
|
14
|
+
`pat_live_…`. The token acts as you, with your access.
|
|
15
15
|
|
|
16
16
|
## 2. Connect
|
|
17
17
|
|
|
@@ -38,6 +38,15 @@ claude mcp add productos -e PRODUCTOS_TOKEN=pat_live_… -- npx -y @aioproductos
|
|
|
38
38
|
`PRODUCTOS_URL` defaults to `https://platform.aioproductos.com`; set it to point
|
|
39
39
|
at a self-hosted platform.
|
|
40
40
|
|
|
41
|
+
### Prefer no local install? Use the hosted remote
|
|
42
|
+
|
|
43
|
+
AIOProductOS is also a **hosted remote MCP** (OAuth 2.1 sign-in, no token
|
|
44
|
+
pasting, 38 tools) — add the custom connector URL
|
|
45
|
+
`https://platform.aioproductos.com/api/mcp` in Claude.ai, Claude Code, or any
|
|
46
|
+
remote-capable MCP host. Listed on the
|
|
47
|
+
[official MCP Registry](https://registry.modelcontextprotocol.io) as
|
|
48
|
+
`com.aioproductos/mcp` and [verified on Glama](https://glama.ai/mcp/connectors/com.aioproductos/mcp).
|
|
49
|
+
|
|
41
50
|
## Tools
|
|
42
51
|
|
|
43
52
|
| Tool | What it does |
|
|
@@ -70,14 +79,15 @@ at a self-hosted platform.
|
|
|
70
79
|
> opens PRs in your repo), install the separate
|
|
71
80
|
> [`@aioproductoscom/mcp-agent`](https://www.npmjs.com/package/@aioproductoscom/mcp-agent).
|
|
72
81
|
|
|
73
|
-
##
|
|
82
|
+
## Links
|
|
74
83
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
+
- **Website:** [aioproductos.com](https://aioproductos.com)
|
|
85
|
+
- **Platform:** [platform.aioproductos.com](https://platform.aioproductos.com)
|
|
86
|
+
- **MCP docs & host picker:** [aioproductos.com/mcp](https://aioproductos.com/mcp)
|
|
87
|
+
- **Claude Code plugin** (one install = connector + `/triage` command): [github.com/AIOProductOS/claude-plugin](https://github.com/AIOProductOS/claude-plugin)
|
|
88
|
+
- **Support:** [office@aioproductos.com](mailto:office@aioproductos.com) — a human founder answers every email.
|
|
89
|
+
|
|
90
|
+
## License
|
|
91
|
+
|
|
92
|
+
MIT. The package is free; it connects to a paid AIOProductOS workspace —
|
|
93
|
+
every plan has a 14-day onboarding runway and a 30-day money-back guarantee.
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { PM_PLAYBOOK, PM_SKILL_VERSION } from "./pm-skill.js";
|
|
|
7
7
|
const token = process.env.PRODUCTOS_TOKEN;
|
|
8
8
|
const baseUrl = (process.env.PRODUCTOS_URL ?? "https://platform.aioproductos.com").replace(/\/$/, "");
|
|
9
9
|
if (!token) {
|
|
10
|
-
console.error("[productos] PRODUCTOS_TOKEN is required — generate one in
|
|
10
|
+
console.error("[productos] PRODUCTOS_TOKEN is required — generate one in AIOProductOS → Settings → Tokens & Agents.");
|
|
11
11
|
process.exit(1);
|
|
12
12
|
}
|
|
13
13
|
const client = new PlatformClient(baseUrl, token);
|
|
@@ -23,23 +23,23 @@ 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.
|
|
27
|
-
instructions: "You manage product work on
|
|
26
|
+
const server = new McpServer({ name: "AIOProductOS", version: "0.15.1" }, {
|
|
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 " +
|
|
30
30
|
"evidence (affected accounts + MRR + reach), never an invented score. Resolve names to ids with " +
|
|
31
31
|
"pm_meta before create_task / update_task; never guess an id. Confirm what you changed in plain " +
|
|
32
32
|
"language, and claim only writes you actually made.",
|
|
33
33
|
});
|
|
34
|
-
server.tool("whoami", "Show the connected
|
|
35
|
-
server.tool("get_pm_playbook", "How to operate as a product manager on
|
|
34
|
+
server.tool("whoami", "Show the connected AIOProductOS identity (org, member) and the org's products. Read-only; returns the identity plus the product list. For a multi-product org call this first to get product ids, then pass one as product_id to any product-scoped tool; omit product_id to use the primary.", {}, async () => text(await client.whoami()));
|
|
35
|
+
server.tool("get_pm_playbook", "How to operate as a product manager on AIOProductOS — ground in the brain, keep work tied to the spine (insight→feature→task→outcome), and prioritize on evidence (affected accounts + MRR + reach), never an invented score. Read this before planning or prioritizing.", {}, async () => text(`${PM_PLAYBOOK}\n\n— pm playbook v${PM_SKILL_VERSION}`));
|
|
36
36
|
server.tool("pm_meta", "List the org's PM lists, statuses, members, and features as id+name pairs. Read-only; returns arrays for name→id resolution. Call it before create_task / update_task to turn names into ids — never guess an id.", {}, async () => text(await client.meta()));
|
|
37
37
|
server.tool("list_tasks", "List the org's board tasks and return the matches with their status, priority, assignees, and any linked feature/insight. Read-only; returns an empty list when nothing matches. Optionally narrow by status_id or list_id (resolve either via pm_meta). Use it to find a task id before get_task, update_task, or comment_on_task.", {
|
|
38
38
|
status_id: z.string().optional().describe("Filter by status id, from pm_meta."),
|
|
39
39
|
list_id: z.string().optional().describe("Filter by list id, from pm_meta."),
|
|
40
40
|
}, async (a) => text(await client.listTasks(a)));
|
|
41
41
|
server.tool("get_task", "Get one task by id and return it with its full comments and assignees. Read-only. Resolve the id first with list_tasks — never guess it; pair with update_task or comment_on_task to act on what you read.", { id: z.string().describe("Task id, from list_tasks.") }, async (a) => text(await client.getTask(a.id)));
|
|
42
|
-
server.tool("create_task", "Create a task and return the created task. A write — each call creates a new task, so don't retry blindly. Omitting list_id uses the org's first list; feature_id / insight_id link it to the
|
|
42
|
+
server.tool("create_task", "Create a task and return the created task. A write — each call creates a new task, so don't retry blindly. Omitting list_id uses the org's first list; feature_id / insight_id link it to the AIOProductOS spine. Resolve list/status/feature/insight/member ids via pm_meta first — never guess them. Only title is required.", {
|
|
43
43
|
title: z.string().describe("Task title."),
|
|
44
44
|
description: z.string().optional().describe("Task description (optional)."),
|
|
45
45
|
priority: z.enum(["urgent", "high", "normal", "low"]).optional().describe("Priority (optional)."),
|
|
@@ -112,7 +112,7 @@ server.tool("reschedule_booking", "Move a booking to a new start time and return
|
|
|
112
112
|
booking_id: z.string().describe("Booking id, from list_bookings."),
|
|
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
|
-
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
|
|
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
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 the messages, empty when the channel is silent. Resolve the channel_id first with list_channels — never guess it.", {
|
|
117
117
|
channel_id: z.string().describe("Channel id, from list_channels."),
|
|
118
118
|
limit: z.number().optional().describe("Max messages to return (optional)."),
|
package/dist/pm-skill.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// The PM operating playbook — OUR product logic, handed to the customer's PM-side
|
|
2
|
-
// agent via get_pm_playbook() so it works like a great PM grounded in
|
|
2
|
+
// agent via get_pm_playbook() so it works like a great PM grounded in AIOProductOS,
|
|
3
3
|
// not a generic ticket bot. The server's `instructions` points at it; the agent
|
|
4
4
|
// pulls the full doctrine on demand (keeps it out of every session's context).
|
|
5
5
|
//
|
|
6
6
|
// Bump PM_SKILL_VERSION on any behavioural change so a run traces to a playbook.
|
|
7
7
|
export const PM_SKILL_VERSION = "0.1.0";
|
|
8
|
-
export const PM_PLAYBOOK = `#
|
|
8
|
+
export const PM_PLAYBOOK = `# AIOProductOS · Product Manager
|
|
9
9
|
|
|
10
|
-
You operate the product on
|
|
10
|
+
You operate the product on AIOProductOS for the connected member. The board, insights, features, and
|
|
11
11
|
analytics all hang off one spine — your job is to keep work tied to the real why and to decide from evidence.
|
|
12
12
|
|
|
13
13
|
## Ground yourself first
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aioproductoscom/mcp",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.1",
|
|
4
4
|
"mcpName": "com.aioproductos/mcp",
|
|
5
|
-
"description": "
|
|
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",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"author": "AIOProductOS Inc.",
|