@ignission/slack-task-mcp 0.2.3 โ 0.2.5
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 +109 -122
- package/package.json +2 -2
- package/src/credentials.js +15 -0
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<h1 align="center"
|
|
2
|
+
<h1 align="center">Slack Task MCP</h1>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<strong
|
|
6
|
+
<strong>Zero friction from mention to action</strong>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
@@ -12,98 +12,85 @@
|
|
|
12
12
|
</p>
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
ADHD
|
|
15
|
+
An MCP server designed for users with ADHD traits
|
|
16
16
|
</p>
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## Why
|
|
21
21
|
|
|
22
|
-
Slack
|
|
22
|
+
When Slack mentions pile up, it's hard to know where to start. Complex requests leave you frozen, unsure what to ask. Writing replies takes forever. Sound familiar?
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
|
27
|
-
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
| ใใฉใ่ฟใใฐใใ๏ผใใงๆ้ใใใ | โ | ่ฟไฟกใกใใปใผใธใฎๆทปๅใปๆง้ ๅ |
|
|
31
|
-
| ใๆฌกไฝใใ๏ผใใง่ฟทใ | โ | ใใฏในใใขใฏใทใงใณๆ็คบ |
|
|
32
|
-
|
|
33
|
-
</p>
|
|
24
|
+
| Problem | Solution |
|
|
25
|
+
|:--------|:---------|
|
|
26
|
+
| "What do they want?" is unclear | Clarify the purpose |
|
|
27
|
+
| "What should I ask?" is unknown | Identify unknowns + draft confirmation messages |
|
|
28
|
+
| "How should I reply?" takes time | Edit & structure reply messages |
|
|
29
|
+
| "What's next?" causes paralysis | Provide next actions |
|
|
34
30
|
|
|
35
31
|
---
|
|
36
32
|
|
|
37
33
|
## Architecture
|
|
38
34
|
|
|
39
|
-
```mermaid
|
|
40
|
-
graph TB
|
|
41
|
-
subgraph Client ["Claude Desktop / Claude Code"]
|
|
42
|
-
MCP["MCP Client"]
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
subgraph Core ["Slack Task MCP"]
|
|
46
|
-
Server["MCP Server<br/>(stdio transport)"]
|
|
47
|
-
|
|
48
|
-
subgraph Tools ["MCPใใผใซ"]
|
|
49
|
-
SlackTools["๐ Slack้ฃๆบ<br/>get_slack_thread<br/>search_slack"]
|
|
50
|
-
TaskTools["๐ ใฟในใฏ็ฎก็<br/>save/list/search<br/>complete_step"]
|
|
51
|
-
AITools["๐ค AIๆฏๆด<br/>analyze_request<br/>draft_reply"]
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
subgraph AgentSDK ["Agent SDK Layer"]
|
|
55
|
-
Analyze["analyze.js<br/>ไพ้ ผๅๆ"]
|
|
56
|
-
Draft["draft-reply.js<br/>่ฟไฟกๆทปๅ"]
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
subgraph External ["ๅค้จใตใผใใน"]
|
|
61
|
-
SlackAPI["Slack API"]
|
|
62
|
-
ClaudeAPI["Claude API"]
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
MCP -->|MCP Protocol| Server
|
|
66
|
-
Server --> Tools
|
|
67
|
-
AITools --> AgentSDK
|
|
68
|
-
Analyze -->|query| ClaudeAPI
|
|
69
|
-
Draft -->|query| ClaudeAPI
|
|
70
|
-
SlackTools -->|User Token| SlackAPI
|
|
71
35
|
```
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
36
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
37
|
+
โ Claude Desktop / Claude Code โ
|
|
38
|
+
โ โโโ MCP Client โ
|
|
39
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
40
|
+
โ MCP Protocol
|
|
41
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
42
|
+
โ Slack Task MCP Server โ
|
|
43
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
44
|
+
โ โ MCP Tools โ โ
|
|
45
|
+
โ โ โข get_slack_thread โข save_task โข analyze_request โ โ
|
|
46
|
+
โ โ โข search_slack โข list_tasks โข draft_reply โ โ
|
|
47
|
+
โ โ โข complete_step โ โ
|
|
48
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
49
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
50
|
+
โ โ Agent SDK Layer (AI-powered analysis) โ โ
|
|
51
|
+
โ โ โข analyze.js โ Request analysis โ โ
|
|
52
|
+
โ โ โข draft-reply.js โ Reply editing โ โ
|
|
53
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
54
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
55
|
+
โ
|
|
56
|
+
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโ
|
|
57
|
+
โผ โผ
|
|
58
|
+
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
|
|
59
|
+
โ Slack API โ โ Claude API โ
|
|
60
|
+
โ (User Token)โ โ (Agent SDK) โ
|
|
61
|
+
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ
|
|
62
|
+
```
|
|
76
63
|
|
|
77
64
|
---
|
|
78
65
|
|
|
79
66
|
## Features
|
|
80
67
|
|
|
81
|
-
|
|
|
82
|
-
|
|
83
|
-
| `get_slack_thread` | Slack
|
|
84
|
-
| `analyze_request` |
|
|
85
|
-
| `draft_reply` |
|
|
86
|
-
| `save_task` |
|
|
87
|
-
| `list_tasks` |
|
|
88
|
-
| `search_tasks` |
|
|
89
|
-
| `complete_step` |
|
|
90
|
-
| `search_slack` | Slack
|
|
68
|
+
| Tool | Description | Agent SDK |
|
|
69
|
+
|------|-------------|:---------:|
|
|
70
|
+
| `get_slack_thread` | Fetch messages from a Slack thread URL | - |
|
|
71
|
+
| `analyze_request` | Analyze requests, identify purpose & unknowns | โ
|
|
|
72
|
+
| `draft_reply` | Edit and structure replies logically | โ
|
|
|
73
|
+
| `save_task` | Save tasks (broken into <5 min steps) | - |
|
|
74
|
+
| `list_tasks` | Show active task list | - |
|
|
75
|
+
| `search_tasks` | Search tasks by keyword/date | - |
|
|
76
|
+
| `complete_step` | Mark a step as complete | - |
|
|
77
|
+
| `search_slack` | Search Slack messages by keyword | - |
|
|
91
78
|
|
|
92
79
|
---
|
|
93
80
|
|
|
94
81
|
## Quick Start
|
|
95
82
|
|
|
96
|
-
### 1. Slack
|
|
83
|
+
### 1. Authenticate with Slack
|
|
97
84
|
|
|
98
85
|
```bash
|
|
99
|
-
npx @ignission/slack-task-mcp auth login
|
|
86
|
+
npx -y @ignission/slack-task-mcp auth login
|
|
100
87
|
```
|
|
101
88
|
|
|
102
|
-
|
|
89
|
+
A browser will open for Slack authentication. Repeat for multiple workspaces.
|
|
103
90
|
|
|
104
|
-
### 2. Claude Code / Claude Desktop
|
|
91
|
+
### 2. Configure Claude Code / Claude Desktop
|
|
105
92
|
|
|
106
|
-
**Claude Code (
|
|
93
|
+
**Claude Code (Terminal)**:
|
|
107
94
|
|
|
108
95
|
```bash
|
|
109
96
|
claude mcp add slack-task -- npx -y @ignission/slack-task-mcp
|
|
@@ -122,78 +109,78 @@ claude mcp add slack-task -- npx -y @ignission/slack-task-mcp
|
|
|
122
109
|
}
|
|
123
110
|
```
|
|
124
111
|
|
|
125
|
-
### 3.
|
|
112
|
+
### 3. Restart
|
|
126
113
|
|
|
127
|
-
|
|
114
|
+
Restart Claude Code / Claude Desktop to apply the configuration.
|
|
128
115
|
|
|
129
116
|
---
|
|
130
117
|
|
|
131
118
|
## Usage
|
|
132
119
|
|
|
133
|
-
###
|
|
120
|
+
### Basic Workflow
|
|
134
121
|
|
|
135
122
|
```
|
|
136
|
-
1. get_slack_thread โ
|
|
137
|
-
2. analyze_request โ
|
|
138
|
-
3. draft_reply โ
|
|
139
|
-
4. save_task โ
|
|
140
|
-
5. complete_step โ
|
|
123
|
+
1. get_slack_thread โ Fetch thread (context DB)
|
|
124
|
+
2. analyze_request โ Generate purpose, unknowns, confirmation drafts
|
|
125
|
+
3. draft_reply โ Edit and structure reply drafts
|
|
126
|
+
4. save_task โ Save as task
|
|
127
|
+
5. complete_step โ Track progress
|
|
141
128
|
```
|
|
142
129
|
|
|
143
|
-
###
|
|
130
|
+
### Examples
|
|
144
131
|
|
|
145
|
-
####
|
|
132
|
+
#### Fetch & Analyze a Thread
|
|
146
133
|
|
|
147
134
|
```
|
|
148
|
-
|
|
135
|
+
Analyze this Slack thread:
|
|
149
136
|
https://xxx.slack.com/archives/C12345678/p1234567890123456
|
|
150
137
|
```
|
|
151
138
|
|
|
152
|
-
####
|
|
139
|
+
#### Save a Task
|
|
153
140
|
|
|
154
141
|
```
|
|
155
|
-
|
|
142
|
+
Break this down into steps under 5 minutes and save it
|
|
156
143
|
```
|
|
157
144
|
|
|
158
|
-
####
|
|
145
|
+
#### Edit a Reply
|
|
159
146
|
|
|
160
147
|
```
|
|
161
|
-
|
|
148
|
+
Edit this reply: "Report is done. Attached. Please check."
|
|
162
149
|
```
|
|
163
150
|
|
|
164
|
-
####
|
|
151
|
+
#### List Tasks
|
|
165
152
|
|
|
166
153
|
```
|
|
167
|
-
|
|
154
|
+
Show my task list
|
|
168
155
|
```
|
|
169
156
|
|
|
170
|
-
####
|
|
157
|
+
#### Complete a Step
|
|
171
158
|
|
|
172
159
|
```
|
|
173
|
-
|
|
160
|
+
Mark step 1 as complete
|
|
174
161
|
```
|
|
175
162
|
|
|
176
163
|
---
|
|
177
164
|
|
|
178
|
-
## ADHD
|
|
165
|
+
## ADHD-Friendly Design
|
|
179
166
|
|
|
180
|
-
- **5
|
|
181
|
-
-
|
|
182
|
-
-
|
|
183
|
-
- **Slack
|
|
167
|
+
- **Break into <5 min steps** โ Build small wins
|
|
168
|
+
- **Easiest step first** โ Lower the barrier to start
|
|
169
|
+
- **Clear stopping points** โ Easy to pause and resume
|
|
170
|
+
- **Slack as context DB** โ Ask Claude "what happened with that?"
|
|
184
171
|
|
|
185
172
|
---
|
|
186
173
|
|
|
187
174
|
## Tech Stack
|
|
188
175
|
|
|
189
|
-
|
|
|
190
|
-
|
|
191
|
-
| **Node.js** (ES Modules) |
|
|
192
|
-
| **MCP Protocol** | Claude Code
|
|
193
|
-
| **Claude Agent SDK** |
|
|
194
|
-
| **Slack Web API** | Slack
|
|
195
|
-
| **Zod** |
|
|
196
|
-
| **Cloudflare Workers** | OAuth
|
|
176
|
+
| Technology | Purpose |
|
|
177
|
+
|------------|---------|
|
|
178
|
+
| **Node.js** (ES Modules) | Runtime |
|
|
179
|
+
| **MCP Protocol** | Communication with Claude Code/Desktop |
|
|
180
|
+
| **Claude Agent SDK** | AI-powered request analysis & reply editing |
|
|
181
|
+
| **Slack Web API** | Slack integration (User Token) |
|
|
182
|
+
| **Zod** | Schema validation |
|
|
183
|
+
| **Cloudflare Workers** | OAuth authentication (token exchange) |
|
|
197
184
|
|
|
198
185
|
---
|
|
199
186
|
|
|
@@ -202,16 +189,16 @@ https://xxx.slack.com/archives/C12345678/p1234567890123456
|
|
|
202
189
|
```
|
|
203
190
|
slack-task-mcp/
|
|
204
191
|
โโโ src/
|
|
205
|
-
โ โโโ index.js # MCP
|
|
206
|
-
โ โโโ cli.js # CLI
|
|
207
|
-
โ โโโ auth.js # OAuth
|
|
208
|
-
โ โโโ credentials.js #
|
|
209
|
-
โ โโโ paths.js #
|
|
210
|
-
โ โโโ agents/ # Agent SDK
|
|
211
|
-
โ โโโ index.js #
|
|
212
|
-
โ โโโ analyze.js #
|
|
213
|
-
โ โโโ draft-reply.js #
|
|
214
|
-
โโโ worker/ # Cloudflare Workers
|
|
192
|
+
โ โโโ index.js # MCP server entry point
|
|
193
|
+
โ โโโ cli.js # CLI commands
|
|
194
|
+
โ โโโ auth.js # OAuth authentication (hybrid)
|
|
195
|
+
โ โโโ credentials.js # Credential management
|
|
196
|
+
โ โโโ paths.js # Path management (XDG compliant)
|
|
197
|
+
โ โโโ agents/ # Agent SDK agents
|
|
198
|
+
โ โโโ index.js # Common settings
|
|
199
|
+
โ โโโ analyze.js # Request analysis
|
|
200
|
+
โ โโโ draft-reply.js # Reply editing
|
|
201
|
+
โโโ worker/ # Cloudflare Workers (token exchange)
|
|
215
202
|
โ โโโ index.js
|
|
216
203
|
โ โโโ wrangler.toml
|
|
217
204
|
โโโ package.json
|
|
@@ -221,45 +208,45 @@ slack-task-mcp/
|
|
|
221
208
|
|
|
222
209
|
## Data Storage
|
|
223
210
|
|
|
224
|
-
XDG Base Directory Specification
|
|
211
|
+
Data is stored following XDG Base Directory Specification:
|
|
225
212
|
|
|
226
213
|
```
|
|
227
214
|
~/.local/share/slack-task-mcp/
|
|
228
215
|
โโโ credentials/
|
|
229
|
-
โ โโโ T01234567.json #
|
|
216
|
+
โ โโโ T01234567.json # Per-workspace credentials
|
|
230
217
|
โ โโโ T98765432.json
|
|
231
|
-
โโโ tasks.json #
|
|
218
|
+
โโโ tasks.json # Task data
|
|
232
219
|
```
|
|
233
220
|
|
|
234
|
-
|
|
221
|
+
If `XDG_DATA_HOME` is set, that path will be used instead.
|
|
235
222
|
|
|
236
223
|
---
|
|
237
224
|
|
|
238
225
|
## Troubleshooting
|
|
239
226
|
|
|
240
|
-
### Slack API
|
|
227
|
+
### Slack API Errors
|
|
241
228
|
|
|
242
229
|
```bash
|
|
243
|
-
npx @ignission/slack-task-mcp auth status
|
|
244
|
-
npx @ignission/slack-task-mcp auth login
|
|
245
|
-
npx @ignission/slack-task-mcp auth logout
|
|
246
|
-
npx @ignission/slack-task-mcp auth logout -w mycompany
|
|
230
|
+
npx -y @ignission/slack-task-mcp auth status # Check auth status
|
|
231
|
+
npx -y @ignission/slack-task-mcp auth login # Authenticate new workspace
|
|
232
|
+
npx -y @ignission/slack-task-mcp auth logout # Logout from all workspaces
|
|
233
|
+
npx -y @ignission/slack-task-mcp auth logout -w mycompany # Logout from specific workspace
|
|
247
234
|
```
|
|
248
235
|
|
|
249
|
-
### MCP
|
|
236
|
+
### MCP Server Not Recognized
|
|
250
237
|
|
|
251
|
-
-
|
|
252
|
-
- Claude Code / Claude Desktop
|
|
238
|
+
- Verify the config file path is correct
|
|
239
|
+
- Restart Claude Code / Claude Desktop
|
|
253
240
|
|
|
254
|
-
###
|
|
241
|
+
### Can't Read Private Channels
|
|
255
242
|
|
|
256
|
-
-
|
|
243
|
+
- You can only read channels you're a member of
|
|
257
244
|
|
|
258
245
|
---
|
|
259
246
|
|
|
260
247
|
## Contributing
|
|
261
248
|
|
|
262
|
-
|
|
249
|
+
Issues and PRs are welcome!
|
|
263
250
|
|
|
264
251
|
---
|
|
265
252
|
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ignission/slack-task-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.5",
|
|
4
4
|
"description": "MCP Server for Slack task management with Claude Code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"slack-task-mcp": "
|
|
8
|
+
"slack-task-mcp": "src/cli.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"src"
|
package/src/credentials.js
CHANGED
|
@@ -77,6 +77,7 @@ export async function getCredentialsByDomain(teamDomain) {
|
|
|
77
77
|
|
|
78
78
|
try {
|
|
79
79
|
const files = await fs.readdir(dir);
|
|
80
|
+
const allCreds = [];
|
|
80
81
|
|
|
81
82
|
for (const file of files) {
|
|
82
83
|
if (!file.endsWith(".json")) continue;
|
|
@@ -85,7 +86,9 @@ export async function getCredentialsByDomain(teamDomain) {
|
|
|
85
86
|
const filePath = path.join(dir, file);
|
|
86
87
|
const data = await fs.readFile(filePath, "utf-8");
|
|
87
88
|
const creds = JSON.parse(data);
|
|
89
|
+
allCreds.push(creds);
|
|
88
90
|
|
|
91
|
+
// ๅฎๅ
จไธ่ด
|
|
89
92
|
if (creds.team_domain === teamDomain) {
|
|
90
93
|
return creds;
|
|
91
94
|
}
|
|
@@ -94,6 +97,18 @@ export async function getCredentialsByDomain(teamDomain) {
|
|
|
94
97
|
}
|
|
95
98
|
}
|
|
96
99
|
|
|
100
|
+
// ้จๅไธ่ด๏ผURLใใกใคใณใOAuthใใกใคใณใๅซใใใพใใฏใใฎ้๏ผ
|
|
101
|
+
for (const creds of allCreds) {
|
|
102
|
+
if (teamDomain.includes(creds.team_domain) || creds.team_domain.includes(teamDomain)) {
|
|
103
|
+
return creds;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 1ใคใใใชใๅ ดๅใฏใใใไฝฟ็จ
|
|
108
|
+
if (allCreds.length === 1) {
|
|
109
|
+
return allCreds[0];
|
|
110
|
+
}
|
|
111
|
+
|
|
97
112
|
return null;
|
|
98
113
|
} catch {
|
|
99
114
|
return null;
|