@monnet/mcp 0.1.10 → 0.2.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 CHANGED
@@ -65,3 +65,11 @@ Current scaffold ships with one tool for end-to-end validation:
65
65
  - `monnet_whoami` — verifies the MCP connection and lists the API keys on your account.
66
66
 
67
67
  Additional tools (`get_motion`, `list_motions`, `create_motion`, `update_motion`, `comment`, `ask_monnet`, `get_inbox`, `approve`, `reject`) will follow as Phase 4 and 5 of the implementation plan.
68
+
69
+ ## Approval gate on send actions
70
+
71
+ Tools that send a message under your identity (currently `comment`) never
72
+ dispatch automatically. Before the message leaves the MCP server, your client
73
+ shows a confirmation dialog (MCP elicitation) with a preview of the message;
74
+ nothing is sent unless you explicitly approve. If your MCP client does not
75
+ support elicitation, the send is aborted — the gate fails closed.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Approval gate for MCP tools that send messages under the user's identity.
3
+ *
4
+ * No send-type tool call may reach the Monnet backend without the user's
5
+ * explicit go-ahead. The gate uses MCP elicitation: the client (Claude
6
+ * Desktop, Cursor, …) renders a native confirmation dialog to the human user,
7
+ * out of band of the model. If the client does not support elicitation, the
8
+ * gate fails closed — the message is aborted, never sent.
9
+ */
10
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
11
+ export declare function requiresSendApproval(toolName: string): boolean;
12
+ export interface ApprovalVerdict {
13
+ approved: boolean;
14
+ /** Tool result text explaining why nothing was sent. Empty when approved. */
15
+ deniedReason: string;
16
+ }
17
+ /**
18
+ * Ask the human user (via client-side elicitation) to approve an outbound
19
+ * message. Anything other than an explicit accept-with-confirm is a denial.
20
+ */
21
+ export declare function requestSendApproval(server: Server, toolName: string, args: Record<string, unknown>): Promise<ApprovalVerdict>;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Approval gate for MCP tools that send messages under the user's identity.
3
+ *
4
+ * No send-type tool call may reach the Monnet backend without the user's
5
+ * explicit go-ahead. The gate uses MCP elicitation: the client (Claude
6
+ * Desktop, Cursor, …) renders a native confirmation dialog to the human user,
7
+ * out of band of the model. If the client does not support elicitation, the
8
+ * gate fails closed — the message is aborted, never sent.
9
+ */
10
+ /**
11
+ * Send-type tools that require human approval, mapped to a preview builder.
12
+ *
13
+ * The preview is rendered defensively from the raw (not yet validated)
14
+ * arguments so a malformed call still produces a readable prompt; full
15
+ * validation happens in the tool handler after approval.
16
+ *
17
+ * Gating a new send-type tool = one entry here. Read/fetch tools and
18
+ * `ask_monnet` (a private query visible only to the user and Monnet) are
19
+ * intentionally not gated.
20
+ */
21
+ const SEND_TOOL_PREVIEWS = {
22
+ comment: (args) => `Post a PUBLIC comment as you on motion ${str(args.motion_short_id)} ` +
23
+ `in workspace "${str(args.workspace_slug)}":\n\n${str(args.content)}`,
24
+ };
25
+ function str(value) {
26
+ return typeof value === "string" ? value : JSON.stringify(value ?? "(missing)");
27
+ }
28
+ export function requiresSendApproval(toolName) {
29
+ return toolName in SEND_TOOL_PREVIEWS;
30
+ }
31
+ const NOT_SENT_PREFIX = "Message NOT sent — ";
32
+ const DO_NOT_RETRY = " Do not retry this call unless the user explicitly asks you to send it again.";
33
+ // Humans read and decide; give them more than the SDK's 60s default.
34
+ const APPROVAL_TIMEOUT_MS = 5 * 60_000;
35
+ /**
36
+ * Ask the human user (via client-side elicitation) to approve an outbound
37
+ * message. Anything other than an explicit accept-with-confirm is a denial.
38
+ */
39
+ export async function requestSendApproval(server, toolName, args) {
40
+ if (!server.getClientCapabilities()?.elicitation) {
41
+ return {
42
+ approved: false,
43
+ deniedReason: NOT_SENT_PREFIX +
44
+ "this MCP client does not support elicitation, so Monnet cannot ask " +
45
+ "the user for approval. Sending messages on the user's behalf " +
46
+ "requires their explicit confirmation. Ask the user to post the " +
47
+ "message themselves in the Monnet web app." +
48
+ DO_NOT_RETRY,
49
+ };
50
+ }
51
+ let result;
52
+ try {
53
+ result = await server.elicitInput({
54
+ message: "Monnet MCP is about to send a message on your behalf.\n\n" +
55
+ SEND_TOOL_PREVIEWS[toolName](args) +
56
+ "\n\nApprove sending this message?",
57
+ requestedSchema: {
58
+ type: "object",
59
+ properties: {
60
+ confirm: {
61
+ type: "boolean",
62
+ title: "Send this message",
63
+ description: "Check to approve sending the message under your identity.",
64
+ },
65
+ },
66
+ required: ["confirm"],
67
+ },
68
+ }, { timeout: APPROVAL_TIMEOUT_MS });
69
+ }
70
+ catch (err) {
71
+ const message = err instanceof Error ? err.message : String(err);
72
+ return {
73
+ approved: false,
74
+ deniedReason: NOT_SENT_PREFIX + `the approval prompt failed (${message}).` + DO_NOT_RETRY,
75
+ };
76
+ }
77
+ if (result.action === "accept" && result.content?.confirm === true) {
78
+ return { approved: true, deniedReason: "" };
79
+ }
80
+ return {
81
+ approved: false,
82
+ deniedReason: NOT_SENT_PREFIX +
83
+ (result.action === "decline"
84
+ ? "the user declined the approval prompt."
85
+ : result.action === "cancel"
86
+ ? "the user dismissed the approval prompt without answering."
87
+ : "the user did not confirm sending.") +
88
+ DO_NOT_RETRY,
89
+ };
90
+ }
91
+ //# sourceMappingURL=approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval.js","sourceRoot":"","sources":["../src/approval.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;;;;;;;GAUG;AACH,MAAM,kBAAkB,GAA8D;IACpF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAChB,0CAA0C,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG;QACtE,iBAAiB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;CACxE,CAAC;AAEF,SAAS,GAAG,CAAC,KAAc;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,QAAQ,IAAI,kBAAkB,CAAC;AACxC,CAAC;AAQD,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC9C,MAAM,YAAY,GAChB,+EAA+E,CAAC;AAElF,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAC;AAEvC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,QAAgB,EAChB,IAA6B;IAE7B,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,CAAC;QACjD,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,YAAY,EACV,eAAe;gBACf,qEAAqE;gBACrE,+DAA+D;gBAC/D,iEAAiE;gBACjE,2CAA2C;gBAC3C,YAAY;SACf,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAC/B;YACE,OAAO,EACL,2DAA2D;gBAC3D,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;gBAClC,mCAAmC;YACrC,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE;wBACP,IAAI,EAAE,SAAS;wBACf,KAAK,EAAE,mBAAmB;wBAC1B,WAAW,EAAE,2DAA2D;qBACzE;iBACF;gBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;aACtB;SACF,EACD,EAAE,OAAO,EAAE,mBAAmB,EAAE,CACjC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,YAAY,EACV,eAAe,GAAG,+BAA+B,OAAO,IAAI,GAAG,YAAY;SAC9E,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;QACnE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,YAAY,EACV,eAAe;YACf,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS;gBAC1B,CAAC,CAAC,wCAAwC;gBAC1C,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;oBAC1B,CAAC,CAAC,2DAA2D;oBAC7D,CAAC,CAAC,mCAAmC,CAAC;YAC1C,YAAY;KACf,CAAC;AACJ,CAAC"}
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ import { handleApprove, APPROVE_TOOL_DEFINITION } from "./tools/approve.js";
20
20
  import { handleReject, REJECT_TOOL_DEFINITION } from "./tools/reject.js";
21
21
  import { handleAskMonnet, ASK_MONNET_TOOL_DEFINITION } from "./tools/ask-monnet.js";
22
22
  import { handleListWorkspaces, LIST_WORKSPACES_TOOL_DEFINITION } from "./tools/list-workspaces.js";
23
+ import { requiresSendApproval, requestSendApproval } from "./approval.js";
23
24
  const TOOLS = [
24
25
  WHOAMI_TOOL_DEFINITION,
25
26
  LIST_WORKSPACES_TOOL_DEFINITION,
@@ -61,6 +62,12 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
61
62
  };
62
63
  }
63
64
  try {
65
+ if (requiresSendApproval(toolName)) {
66
+ const verdict = await requestSendApproval(server, toolName, args);
67
+ if (!verdict.approved) {
68
+ return { content: [{ type: "text", text: verdict.deniedReason }] };
69
+ }
70
+ }
64
71
  const text = await handler(args);
65
72
  return { content: [{ type: "text", text }] };
66
73
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,10 @@ export async function handleComment(args) {
19
19
  export const COMMENT_TOOL_DEFINITION = {
20
20
  name: "comment",
21
21
  description: "Post a public comment on a motion, either top-level or as a reply within " +
22
- "an existing comment thread (pass parent_id). Monnet may respond if it " +
23
- "does, the response is included in the return value.",
22
+ "an existing comment thread (pass parent_id). The user is asked to approve " +
23
+ "the message before it is sent nothing is posted without their explicit " +
24
+ "confirmation. Monnet may respond — if it does, the response is included " +
25
+ "in the return value.",
24
26
  inputSchema: {
25
27
  type: "object",
26
28
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/tools/comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,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,KAAK,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa;IAC/C,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,eAAe,IAAI,YAAY,kBAAkB,CAAC,eAAe,CAAC,WAAW,EAC7E,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACpE,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,SAAS;IACf,WAAW,EACT,2EAA2E;QAC3E,0EAA0E;QAC1E,qDAAqD;IACvD,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,oCAAoC;aAClD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qEAAqE;oBACrE,oEAAoE;oBACpE,kEAAkE;aACrE;SACF;QACD,QAAQ,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,CAAC;KAC3D;CACF,CAAC"}
1
+ {"version":3,"file":"comment.js","sourceRoot":"","sources":["../../src/tools/comment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,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,KAAK,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAa;IAC/C,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,eAAe,IAAI,YAAY,kBAAkB,CAAC,eAAe,CAAC,WAAW,EAC7E,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CACpE,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,SAAS;IACf,WAAW,EACT,2EAA2E;QAC3E,4EAA4E;QAC5E,2EAA2E;QAC3E,0EAA0E;QAC1E,sBAAsB;IACxB,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,oCAAoC;aAClD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,qEAAqE;oBACrE,oEAAoE;oBACpE,kEAAkE;aACrE;SACF;QACD,QAAQ,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,CAAC;KAC3D;CACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monnet/mcp",
3
- "version": "0.1.10",
3
+ "version": "0.2.0",
4
4
  "description": "Model Context Protocol server for Monnet — exposes motions, plans, and approvals to MCP-compatible clients like Claude Desktop and Cursor.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "prepublishOnly": "npm run build"
18
18
  },
19
19
  "dependencies": {
20
- "@modelcontextprotocol/sdk": "^1.0.0",
20
+ "@modelcontextprotocol/sdk": "^1.13.0",
21
21
  "zod": "^3.23.0"
22
22
  },
23
23
  "devDependencies": {