@monnet/mcp 0.1.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 (44) hide show
  1. package/README.md +67 -0
  2. package/dist/client.d.ts +23 -0
  3. package/dist/client.js +175 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/index.d.ts +9 -0
  6. package/dist/index.js +74 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/rendering/inbox.d.ts +18 -0
  9. package/dist/rendering/inbox.js +38 -0
  10. package/dist/rendering/inbox.js.map +1 -0
  11. package/dist/rendering/motion.d.ts +46 -0
  12. package/dist/rendering/motion.js +86 -0
  13. package/dist/rendering/motion.js.map +1 -0
  14. package/dist/tools/approve.d.ts +24 -0
  15. package/dist/tools/approve.js +40 -0
  16. package/dist/tools/approve.js.map +1 -0
  17. package/dist/tools/ask-monnet.d.ts +23 -0
  18. package/dist/tools/ask-monnet.js +42 -0
  19. package/dist/tools/ask-monnet.js.map +1 -0
  20. package/dist/tools/comment.d.ts +23 -0
  21. package/dist/tools/comment.js +41 -0
  22. package/dist/tools/comment.js.map +1 -0
  23. package/dist/tools/create-motion.d.ts +19 -0
  24. package/dist/tools/create-motion.js +41 -0
  25. package/dist/tools/create-motion.js.map +1 -0
  26. package/dist/tools/get-inbox.d.ts +22 -0
  27. package/dist/tools/get-inbox.js +56 -0
  28. package/dist/tools/get-inbox.js.map +1 -0
  29. package/dist/tools/get-motion.d.ts +19 -0
  30. package/dist/tools/get-motion.js +47 -0
  31. package/dist/tools/get-motion.js.map +1 -0
  32. package/dist/tools/list-motions.d.ts +31 -0
  33. package/dist/tools/list-motions.js +69 -0
  34. package/dist/tools/list-motions.js.map +1 -0
  35. package/dist/tools/reject.d.ts +28 -0
  36. package/dist/tools/reject.js +48 -0
  37. package/dist/tools/reject.js.map +1 -0
  38. package/dist/tools/update-motion.d.ts +64 -0
  39. package/dist/tools/update-motion.js +99 -0
  40. package/dist/tools/update-motion.js.map +1 -0
  41. package/dist/tools/whoami.d.ts +15 -0
  42. package/dist/tools/whoami.js +26 -0
  43. package/dist/tools/whoami.js.map +1 -0
  44. package/package.json +33 -0
@@ -0,0 +1,99 @@
1
+ import { z } from "zod";
2
+ import { apiFetch, resolveWorkspaceId } from "../client.js";
3
+ const PlanStepSchema = z.object({
4
+ content: z.string(),
5
+ status: z.enum(["pending", "in_progress", "done"]),
6
+ assignees: z.array(z.string()).optional().default([]),
7
+ approval: z.boolean().optional().default(false),
8
+ approved_by: z.array(z.string()).optional().default([]),
9
+ });
10
+ const UpdateMotionArgs = z.object({
11
+ workspace_slug: z.string().min(1),
12
+ motion_short_id: z.string().min(1),
13
+ summary: z.string().min(1).max(500).optional(),
14
+ body: z.string().min(1).max(50000).optional(),
15
+ priority: z.enum(["critical", "normal", "low"]).optional(),
16
+ plan: z.array(PlanStepSchema).optional(),
17
+ });
18
+ export async function handleUpdateMotion(args) {
19
+ const parsed = UpdateMotionArgs.parse(args);
20
+ const wsId = await resolveWorkspaceId(parsed.workspace_slug);
21
+ const motionPath = `/workspaces/${wsId}/motions/${encodeURIComponent(parsed.motion_short_id)}`;
22
+ const results = [];
23
+ // Update metadata (summary/body/priority) if any provided
24
+ const metaFields = {};
25
+ if (parsed.summary !== undefined)
26
+ metaFields.summary = parsed.summary;
27
+ if (parsed.body !== undefined)
28
+ metaFields.body = parsed.body;
29
+ if (parsed.priority !== undefined)
30
+ metaFields.priority = parsed.priority;
31
+ if (Object.keys(metaFields).length > 0) {
32
+ await apiFetch(motionPath, {
33
+ method: "PATCH",
34
+ body: JSON.stringify(metaFields),
35
+ });
36
+ results.push(`Updated ${Object.keys(metaFields).join(", ")}.`);
37
+ }
38
+ // Update plan if provided
39
+ if (parsed.plan) {
40
+ await apiFetch(`${motionPath}/plan`, {
41
+ method: "PATCH",
42
+ body: JSON.stringify({ steps: parsed.plan }),
43
+ });
44
+ results.push(`Updated plan (${parsed.plan.length} step(s)).`);
45
+ }
46
+ if (results.length === 0) {
47
+ return "Nothing to update — provide at least one of: summary, body, priority, or plan.";
48
+ }
49
+ return results.join(" ");
50
+ }
51
+ export const UPDATE_MOTION_TOOL_DEFINITION = {
52
+ name: "update_motion",
53
+ description: "Update a motion's summary, body, priority, or plan. All fields are optional — " +
54
+ "only include the ones you want to change. For plan updates, provide the full list " +
55
+ "of steps (use get_motion first to see the current plan, then modify and send it back).",
56
+ inputSchema: {
57
+ type: "object",
58
+ properties: {
59
+ workspace_slug: {
60
+ type: "string",
61
+ description: "The workspace slug.",
62
+ },
63
+ motion_short_id: {
64
+ type: "string",
65
+ description: "The first 8 characters of the motion UUID.",
66
+ },
67
+ summary: {
68
+ type: "string",
69
+ description: "New summary (1-500 chars). Optional.",
70
+ },
71
+ body: {
72
+ type: "string",
73
+ description: "New body in markdown (1-50,000 chars). Optional.",
74
+ },
75
+ priority: {
76
+ type: "string",
77
+ description: "New priority. Optional.",
78
+ enum: ["critical", "normal", "low"],
79
+ },
80
+ plan: {
81
+ type: "array",
82
+ description: "Full replacement plan — array of step objects. Each step: {content, status, assignees?, approval?, approved_by?}. Optional.",
83
+ items: {
84
+ type: "object",
85
+ properties: {
86
+ content: { type: "string" },
87
+ status: { type: "string", enum: ["pending", "in_progress", "done"] },
88
+ assignees: { type: "array", items: { type: "string" } },
89
+ approval: { type: "boolean" },
90
+ approved_by: { type: "array", items: { type: "string" } },
91
+ },
92
+ required: ["content", "status"],
93
+ },
94
+ },
95
+ },
96
+ required: ["workspace_slug", "motion_short_id"],
97
+ },
98
+ };
99
+ //# sourceMappingURL=update-motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-motion.js","sourceRoot":"","sources":["../../src/tools/update-motion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAClD,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAC7C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAa;IACpD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,eAAe,IAAI,YAAY,kBAAkB,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;IAC/F,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,0DAA0D;IAC1D,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACtE,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7D,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEzE,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,CAAC,UAAU,EAAE;YACzB,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,QAAQ,CAAC,GAAG,UAAU,OAAO,EAAE;YACnC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;SAC7C,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,gFAAgF,CAAC;IAC1F,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,gFAAgF;QAChF,oFAAoF;QACpF,wFAAwF;IAC1F,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qBAAqB;aACnC;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4CAA4C;aAC1D;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yBAAyB;gBACtC,IAAI,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC;aACpC;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,WAAW,EACT,6HAA6H;gBAC/H,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;wBACpE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;wBACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC7B,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;qBAC1D;oBACD,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;iBAChC;aACF;SACF;QACD,QAAQ,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;KAChD;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Validation tool — calls GET /users/me/api-keys with the user's API key and
3
+ * reports back. Useful for confirming the MCP is correctly authenticated and
4
+ * can reach the backend.
5
+ */
6
+ export declare function handleWhoami(): Promise<string>;
7
+ export declare const WHOAMI_TOOL_DEFINITION: {
8
+ name: string;
9
+ description: string;
10
+ inputSchema: {
11
+ type: "object";
12
+ properties: {};
13
+ required: never[];
14
+ };
15
+ };
@@ -0,0 +1,26 @@
1
+ import { apiFetch } from "../client.js";
2
+ /**
3
+ * Validation tool — calls GET /users/me/api-keys with the user's API key and
4
+ * reports back. Useful for confirming the MCP is correctly authenticated and
5
+ * can reach the backend.
6
+ */
7
+ export async function handleWhoami() {
8
+ const keys = await apiFetch("/users/me/api-keys");
9
+ if (keys.length === 0) {
10
+ return ("Connected to Monnet. No active API keys on this account " +
11
+ "(unexpected — the one you're using should be listed).");
12
+ }
13
+ const lines = keys.map((k) => ` - ${k.name} (${k.key_prefix}…)`);
14
+ return `Connected to Monnet with ${keys.length} active API key(s):\n${lines.join("\n")}`;
15
+ }
16
+ export const WHOAMI_TOOL_DEFINITION = {
17
+ name: "monnet_whoami",
18
+ description: "Verify your Monnet MCP connection and list the API keys on your account. " +
19
+ "Useful for debugging setup issues.",
20
+ inputSchema: {
21
+ type: "object",
22
+ properties: {},
23
+ required: [],
24
+ },
25
+ };
26
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/tools/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAUxC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAW,oBAAoB,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,CACL,0DAA0D;YAC1D,uDAAuD,CACxD,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;IAClE,OAAO,4BAA4B,IAAI,CAAC,MAAM,wBAAwB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3F,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,2EAA2E;QAC3E,oCAAoC;IACtC,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;KACb;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@monnet/mcp",
3
+ "version": "0.1.0",
4
+ "description": "Model Context Protocol server for Monnet — exposes motions, plans, and approvals to MCP-compatible clients like Claude Desktop and Cursor.",
5
+ "type": "module",
6
+ "bin": {
7
+ "monnet-mcp": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc -p .",
15
+ "dev": "tsc -p . --watch",
16
+ "start": "node dist/index.js",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "dependencies": {
20
+ "@modelcontextprotocol/sdk": "^1.0.0",
21
+ "zod": "^3.23.0"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^20.0.0",
25
+ "typescript": "^5.6.0"
26
+ },
27
+ "engines": {
28
+ "node": ">=18"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ }
33
+ }