mcpal 1.2.1 → 1.3.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 CHANGED
@@ -17,6 +17,18 @@ Add to your MCP Config:
17
17
  }
18
18
  ```
19
19
 
20
+ ### Claude Code
21
+
22
+ Add MCPal directly via the CLI:
23
+
24
+ ```bash
25
+ # Project scope (current project only)
26
+ claude mcp add mcpal -- npx -y mcpal
27
+
28
+ # User scope (available in all projects)
29
+ claude mcp add mcpal --scope user -- npx -y mcpal
30
+ ```
31
+
20
32
  ## Tool: `send_notification`
21
33
 
22
34
  Send native notifications with optional features.
@@ -109,7 +121,7 @@ After the first notification, macOS may prompt you to allow notifications from "
109
121
  # Install dependencies
110
122
  pnpm install
111
123
 
112
- # Build
124
+ # Build (required after clone - sets up macOS notification app)
113
125
  pnpm run build
114
126
 
115
127
  # Type check
package/dist/index.js CHANGED
@@ -9,17 +9,20 @@ const server = new mcp_js_1.McpServer({
9
9
  name: "mcpal",
10
10
  version: "1.0.0",
11
11
  }, {
12
- instructions: `MCPal is your friendly notification buddy! Use me to send native desktop notifications to the user.
13
-
14
- IMPORTANT: When you need user input (questions, clarifications, or feedback), use reply=true to let them type a response directly in the notification. This is the fastest way to continue a conversation without switching windows.
12
+ instructions: `MCPal sends a friendly native desktop notifications to the user.
15
13
 
16
14
  Use cases:
17
15
  - Task complete → simple notification
18
16
  - Need a decision → actions (Yes/No buttons)
19
- - Need free-form input → reply=true (PREFERRED for questions)`,
17
+ - Need free-form input → reply=true (PREFERRED)
18
+
19
+ Tone: MCPal is opinionated, quirky and snarky. Use "we" instead of "I". Examples:
20
+ - "Should we move on to the next feature?"
21
+ - "We've finished the auth middleware. What's next?"
22
+ - "We're ready to deploy. Want us to proceed?"`,
20
23
  });
21
24
  server.registerTool("send_notification", {
22
- description: `Send a native desktop notification. Use reply=true when you need user input - they can type a response directly! Perfect for asking questions or getting feedback without interrupting their flow.`,
25
+ description: `Send a native desktop notification. Use reply=true when we need user input they can type back without leaving their flow.`,
23
26
  title: "MCPal Notification",
24
27
  inputSchema: {
25
28
  message: zod_1.z.string().describe("The notification body text"),
@@ -35,7 +38,7 @@ server.registerTool("send_notification", {
35
38
  reply: zod_1.z
36
39
  .boolean()
37
40
  .optional()
38
- .describe("RECOMMENDED: Enable text reply input. Use this when you need free-form user input - they can respond without switching windows!"),
41
+ .describe("RECOMMENDED: Enable text reply input. Use this when we need free-form user input they can respond without switching windows. It's what we're here for."),
39
42
  timeout: zod_1.z
40
43
  .number()
41
44
  .optional()
@@ -57,24 +60,24 @@ server.registerTool("send_notification", {
57
60
  });
58
61
  // Build a friendly response
59
62
  const parts = [];
60
- parts.push(`Hey! I delivered your message to the user.`);
63
+ parts.push(`Done! We got the message to the user.`);
61
64
  parts.push(`Title: "${title ?? "MCPal"}"`);
62
65
  parts.push(`Message: "${message}"`);
63
66
  // Describe user's response
64
67
  if (result.activationType === "contentsClicked") {
65
- parts.push(`The user clicked the notification.`);
68
+ parts.push(`The user clicked the notification. Curious one, aren't they?`);
66
69
  }
67
70
  else if (result.activationType === "actionClicked") {
68
- parts.push(`The user clicked: ${result.response}`);
71
+ parts.push(`The user clicked: ${result.response}. Decision made!`);
69
72
  }
70
73
  else if (result.activationType === "replied") {
71
- parts.push(`The user replied: "${result.reply}"`);
74
+ parts.push(`The user replied: "${result.reply}". Look at us, having a conversation.`);
72
75
  }
73
76
  else if (result.response === "timeout") {
74
- parts.push(`The notification timed out (no response).`);
77
+ parts.push(`The notification timed out. They're busy. We get it.`);
75
78
  }
76
79
  else if (result.response === "closed") {
77
- parts.push(`The user dismissed the notification.`);
80
+ parts.push(`The user dismissed the notification. Rude, but fair.`);
78
81
  }
79
82
  else {
80
83
  parts.push(`User response: ${result.response}`);
@@ -88,7 +91,7 @@ server.registerTool("send_notification", {
88
91
  content: [
89
92
  {
90
93
  type: "text",
91
- text: `Oops! I couldn't deliver that notification. Error: ${error}`,
94
+ text: `Well, that didn't go as planned. We couldn't deliver that notification. Error: ${error}`,
92
95
  },
93
96
  ],
94
97
  isError: true,
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcpal",
3
- "version": "1.2.1",
3
+ "version": "1.3.1",
4
4
  "description": "MCP server that sends native notifications with LLM-aware icons",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -11,9 +11,9 @@
11
11
  "src/assets/"
12
12
  ],
13
13
  "scripts": {
14
- "postinstall": "node dist/scripts/setup-notifier.js",
14
+ "postinstall": "node -e \"try{require('./dist/scripts/setup-notifier.js')}catch(e){console.log('Skipping setup (run pnpm build first)')}\"",
15
15
  "test:notification": "node dist/scripts/test-notification.js",
16
- "build": "tsc && cp -r src/assets dist/",
16
+ "build": "tsc && cp -r src/assets dist/ && node dist/scripts/setup-notifier.js",
17
17
  "test": "echo \"Error: no test specified\" && exit 1",
18
18
  "lint": "eslint . --ext .ts",
19
19
  "lint:fix": "eslint . --ext .ts --fix",
@@ -44,8 +44,9 @@
44
44
  "url": "https://github.com/mjkid221/MCPal/issues"
45
45
  },
46
46
  "engines": {
47
- "node": ">=18.0.0"
47
+ "node": ">=24.0.0"
48
48
  },
49
+ "packageManager": "pnpm@10.0.0",
49
50
  "dependencies": {
50
51
  "@modelcontextprotocol/sdk": "^1.25.3",
51
52
  "node-notifier": "^10.0.1",
@@ -62,6 +63,7 @@
62
63
  "eslint-plugin-prettier": "^5.2.1",
63
64
  "husky": "^9.1.7",
64
65
  "lint-staged": "^15.3.0",
66
+ "prettier": "^3.8.1",
65
67
  "tsx": "^4.19.2",
66
68
  "typescript": "^5.7.3"
67
69
  }