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 +13 -1
- package/dist/index.js +16 -13
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
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
|
|
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
|
|
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
|
|
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
|
|
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(`
|
|
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
|
|
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: `
|
|
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":";;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,6BAAwB;AAExB,2CAA+D;AAE/D,MAAM,MAAM,GAAG,IAAI,kBAAS,CAC1B;IACE,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE
|
|
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.
|
|
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": ">=
|
|
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
|
}
|