@jtalk22/slack-mcp 1.2.1 → 1.2.2
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 +26 -6
- package/docs/COMMUNICATION-STYLE.md +58 -0
- package/docs/DEPLOYMENT-MODES.md +48 -0
- package/docs/SETUP.md +10 -4
- package/docs/SUPPORT-BOUNDARIES.md +49 -0
- package/docs/TROUBLESHOOTING.md +5 -2
- package/docs/USE_CASE_RECIPES.md +69 -0
- package/docs/WEB-API.md +2 -0
- package/lib/handlers.js +1 -1
- package/lib/slack-client.js +1 -1
- package/package.json +4 -2
- package/public/demo-claude.html +56 -9
- package/public/demo-video.html +55 -0
- package/public/demo.html +49 -6
- package/scripts/check-owner-attribution.sh +80 -0
- package/scripts/setup-git-hooks.sh +15 -0
- package/scripts/setup-wizard.js +10 -10
- package/src/server-http.js +1 -1
- package/src/server.js +2 -2
- package/src/web-server.js +3 -3
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
8
|
<em>Give Claude the same Slack access you have.<br>
|
|
9
|
-
DMs, threads, history—
|
|
9
|
+
DMs, threads, history—using your existing Slack session.</em>
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
<p align="center">
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
### Why This Exists
|
|
41
41
|
|
|
42
|
-
I built this because I was working with someone to help me manage a complex workload, and we kept hitting walls. They needed context from my messages—"what did X say about Y?"—
|
|
42
|
+
I built this because I was working with someone to help me manage a complex workload, and we kept hitting walls. They needed context from my messages—"what did X say about Y?"—and standard app/OAuth flows were too constrained for that workflow.
|
|
43
43
|
|
|
44
44
|
Screenshotting messages is not a workflow.
|
|
45
45
|
|
|
@@ -100,6 +100,16 @@ Instead of authenticating as a bot, this server leverages your existing Chrome s
|
|
|
100
100
|
|
|
101
101
|
**Runtime:** Node.js 20+
|
|
102
102
|
|
|
103
|
+
### 2-Minute Verify
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npx -y @jtalk22/slack-mcp --version
|
|
107
|
+
npx -y @jtalk22/slack-mcp --setup
|
|
108
|
+
npx -y @jtalk22/slack-mcp --status
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If `--status` returns valid workspace/user info, your install path is working.
|
|
112
|
+
|
|
103
113
|
### Option A: npm (Recommended)
|
|
104
114
|
|
|
105
115
|
```bash
|
|
@@ -131,7 +141,7 @@ docker pull ghcr.io/jtalk22/slack-mcp-server:latest
|
|
|
131
141
|
The interactive setup wizard handles token extraction and validation automatically:
|
|
132
142
|
|
|
133
143
|
```bash
|
|
134
|
-
npx @jtalk22/slack-mcp --setup
|
|
144
|
+
npx -y @jtalk22/slack-mcp --setup
|
|
135
145
|
```
|
|
136
146
|
|
|
137
147
|
- **macOS**: Auto-extracts tokens from Chrome (have Slack open in a tab)
|
|
@@ -142,7 +152,7 @@ npx @jtalk22/slack-mcp --setup
|
|
|
142
152
|
#### Check Token Status
|
|
143
153
|
|
|
144
154
|
```bash
|
|
145
|
-
npx @jtalk22/slack-mcp --status
|
|
155
|
+
npx -y @jtalk22/slack-mcp --status
|
|
146
156
|
```
|
|
147
157
|
|
|
148
158
|
#### Alternative: Manual Token Scripts
|
|
@@ -283,14 +293,14 @@ If you're using claude.ai in a browser (which doesn't support MCP), you can use
|
|
|
283
293
|
|
|
284
294
|
```bash
|
|
285
295
|
npm run web
|
|
286
|
-
# Or: npx @jtalk22/slack-mcp web
|
|
296
|
+
# Or: npx -y @jtalk22/slack-mcp web
|
|
287
297
|
```
|
|
288
298
|
|
|
289
299
|
**Magic Link:** The console prints a one-click URL with the API key embedded:
|
|
290
300
|
|
|
291
301
|
```
|
|
292
302
|
════════════════════════════════════════════════════════════
|
|
293
|
-
Slack Web API Server v1.2.
|
|
303
|
+
Slack Web API Server v1.2.2
|
|
294
304
|
════════════════════════════════════════════════════════════
|
|
295
305
|
|
|
296
306
|
Dashboard: http://localhost:3000/?key=smcp_xxxxxxxxxxxx
|
|
@@ -309,6 +319,16 @@ Just click the link - no copy-paste needed. The key is saved to your browser and
|
|
|
309
319
|
|
|
310
320
|
---
|
|
311
321
|
|
|
322
|
+
## Operations Guides
|
|
323
|
+
|
|
324
|
+
- [Deployment Modes](docs/DEPLOYMENT-MODES.md) - Choose the right operating model (`stdio`, `web`, hosted HTTP, Smithery/Worker)
|
|
325
|
+
- [Use Case Recipes](docs/USE_CASE_RECIPES.md) - 12 copy/paste prompts mapped to current tool contracts
|
|
326
|
+
- [Support Boundaries](docs/SUPPORT-BOUNDARIES.md) - Scope, response targets, and solo-maintainer capacity limits
|
|
327
|
+
|
|
328
|
+
If you're evaluating team rollout, start with [Deployment Modes](docs/DEPLOYMENT-MODES.md) before exposing remote endpoints.
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
312
332
|
## Troubleshooting
|
|
313
333
|
|
|
314
334
|
### Tokens Expired
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Communication Style Guide
|
|
2
|
+
|
|
3
|
+
Use this guide for release notes, issue replies, and changelog entries.
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
1. Keep text technical, concise, and factual.
|
|
8
|
+
2. Do not include model/tool credit lines.
|
|
9
|
+
3. Do not include co-author trailers from tooling.
|
|
10
|
+
4. State exact versions and commands when relevant.
|
|
11
|
+
5. Avoid speculative claims.
|
|
12
|
+
|
|
13
|
+
## Issue Reply Template
|
|
14
|
+
|
|
15
|
+
```md
|
|
16
|
+
Thanks for reporting this.
|
|
17
|
+
|
|
18
|
+
Status: fixed in `<version>`.
|
|
19
|
+
|
|
20
|
+
Included:
|
|
21
|
+
- `<change 1>`
|
|
22
|
+
- `<change 2>`
|
|
23
|
+
|
|
24
|
+
Install/update:
|
|
25
|
+
- `npx -y @jtalk22/slack-mcp`
|
|
26
|
+
- `npm i -g @jtalk22/slack-mcp@<version>`
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Release Notes Template
|
|
30
|
+
|
|
31
|
+
````md
|
|
32
|
+
## <version> — <short title>
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
- <item>
|
|
36
|
+
- <item>
|
|
37
|
+
|
|
38
|
+
### Runtime / Security
|
|
39
|
+
- <item>
|
|
40
|
+
|
|
41
|
+
### Verify
|
|
42
|
+
```bash
|
|
43
|
+
<command>
|
|
44
|
+
<command>
|
|
45
|
+
```
|
|
46
|
+
````
|
|
47
|
+
|
|
48
|
+
## Changelog Entry Template
|
|
49
|
+
|
|
50
|
+
```md
|
|
51
|
+
## [<version>] - YYYY-MM-DD
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
- <item>
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
- <item>
|
|
58
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Deployment Modes
|
|
2
|
+
|
|
3
|
+
Use this guide to choose the right operating mode before rollout.
|
|
4
|
+
|
|
5
|
+
## Quick Chooser
|
|
6
|
+
|
|
7
|
+
- Choose `stdio` for personal use in Claude Desktop/Claude Code.
|
|
8
|
+
- Choose local `web` for browser workflows and manual Slack browsing.
|
|
9
|
+
- Choose hosted HTTP only when you need remote execution and can handle token operations.
|
|
10
|
+
- Choose Smithery/Worker only when your consumers require registry-hosted MCP transport.
|
|
11
|
+
|
|
12
|
+
## Mode Matrix
|
|
13
|
+
|
|
14
|
+
| Mode | Start Command | Best For | Auth Material | Exposure | Notes |
|
|
15
|
+
|------|---------------|----------|---------------|----------|-------|
|
|
16
|
+
| Local MCP (`stdio`) | `npx -y @jtalk22/slack-mcp` | Individual daily usage in Claude | `SLACK_TOKEN` + `SLACK_COOKIE` via token file/env | Local process | Lowest ops burden |
|
|
17
|
+
| Local Web UI (`web`) | `npx -y @jtalk22/slack-mcp web` | Browser-first usage, manual search/send | Same as above + generated API key | `localhost` by default | Useful when MCP is not available |
|
|
18
|
+
| Hosted MCP (`http`) | `node src/server-http.js` | Controlled hosted integration | Env-injected Slack token/cookie | Remote endpoint | Requires runtime hardening and monitoring |
|
|
19
|
+
| Smithery/Worker | `wrangler deploy` + Smithery publish flow | Registry distribution for hosted consumers | Query/env token handoff | Remote endpoint | Keep worker version parity with npm release |
|
|
20
|
+
|
|
21
|
+
## Team Deployment Guidance
|
|
22
|
+
|
|
23
|
+
If you are deploying for more than one operator:
|
|
24
|
+
|
|
25
|
+
1. Start with one maintainer on local `stdio`.
|
|
26
|
+
2. Document token lifecycle and rotation ownership.
|
|
27
|
+
3. Define support window and incident contact before enabling hosted mode.
|
|
28
|
+
4. Validate `/health` and MCP initialize responses on every release.
|
|
29
|
+
|
|
30
|
+
## Release Checklist by Mode
|
|
31
|
+
|
|
32
|
+
### Local `stdio`
|
|
33
|
+
|
|
34
|
+
1. `npx -y @jtalk22/slack-mcp --status`
|
|
35
|
+
2. `npx -y @jtalk22/slack-mcp --help`
|
|
36
|
+
3. Confirm tool list in Claude client.
|
|
37
|
+
|
|
38
|
+
### Local `web`
|
|
39
|
+
|
|
40
|
+
1. `npx -y @jtalk22/slack-mcp web`
|
|
41
|
+
2. Verify API key generation at `~/.slack-mcp-api-key`.
|
|
42
|
+
3. Verify `/health`, `/conversations`, and `/search` endpoints.
|
|
43
|
+
|
|
44
|
+
### Hosted (`http` or Worker)
|
|
45
|
+
|
|
46
|
+
1. Verify `version` parity across `package.json`, server metadata, and health responses.
|
|
47
|
+
2. Confirm `slack_get_thread`, `slack_search_messages`, and `slack_users_info` behavior.
|
|
48
|
+
3. Confirm token handling mode (ephemeral vs env persistence) is documented.
|
package/docs/SETUP.md
CHANGED
|
@@ -25,16 +25,22 @@ npm install
|
|
|
25
25
|
|
|
26
26
|
### 3. Get Slack Tokens
|
|
27
27
|
|
|
28
|
-
**Option A:
|
|
28
|
+
**Option A: Setup Wizard (recommended)**
|
|
29
29
|
|
|
30
30
|
1. Open Chrome
|
|
31
31
|
2. Navigate to https://app.slack.com and log in
|
|
32
32
|
3. Run:
|
|
33
33
|
```bash
|
|
34
|
-
|
|
34
|
+
npx -y @jtalk22/slack-mcp --setup
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
**Option B:
|
|
37
|
+
**Option B: Automatic Extraction (repo clone workflow)**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npm run tokens:auto
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Option C: Manual Extraction**
|
|
38
44
|
|
|
39
45
|
1. Open https://app.slack.com in Chrome
|
|
40
46
|
2. Press F12 to open DevTools
|
|
@@ -114,7 +120,7 @@ You should see your username and team name.
|
|
|
114
120
|
|
|
115
121
|
### "No credentials found"
|
|
116
122
|
|
|
117
|
-
Run `
|
|
123
|
+
Run `npx -y @jtalk22/slack-mcp --setup` with Slack open in Chrome, or `npm run tokens:refresh` to enter manually.
|
|
118
124
|
|
|
119
125
|
### "invalid_auth" Error
|
|
120
126
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Support Boundaries
|
|
2
|
+
|
|
3
|
+
This document sets expectations for issue triage, support scope, and rollout safety.
|
|
4
|
+
|
|
5
|
+
## In Scope
|
|
6
|
+
|
|
7
|
+
- Reproducible bugs in published release behavior.
|
|
8
|
+
- Install and setup blockers for supported Node/runtime paths.
|
|
9
|
+
- Regressions in existing tools (`slack_get_thread`, `slack_search_messages`, etc.).
|
|
10
|
+
- Documentation corrections with clear technical evidence.
|
|
11
|
+
|
|
12
|
+
## Out of Scope
|
|
13
|
+
|
|
14
|
+
- Custom Slack policy/legal interpretation for a specific organization.
|
|
15
|
+
- Workspace-specific data migrations or bespoke integrations.
|
|
16
|
+
- Real-time operational support for third-party hosting providers.
|
|
17
|
+
- Urgent production incident ownership for self-hosted external deployments.
|
|
18
|
+
|
|
19
|
+
## Intake Requirements
|
|
20
|
+
|
|
21
|
+
Include the following in every issue:
|
|
22
|
+
|
|
23
|
+
1. Version (`npm view @jtalk22/slack-mcp version` output).
|
|
24
|
+
2. Runtime mode (`stdio`, `web`, `http`, or Worker/Smithery).
|
|
25
|
+
3. OS and Node version.
|
|
26
|
+
4. Minimal reproduction steps and exact error text.
|
|
27
|
+
5. Whether this blocks individual use or team rollout.
|
|
28
|
+
|
|
29
|
+
## Response Windows (Best Effort)
|
|
30
|
+
|
|
31
|
+
- Installation/blocker bugs: initial response target within 2 business days.
|
|
32
|
+
- Non-blocking bugs: initial response target within 5 business days.
|
|
33
|
+
- Feature requests: triaged in backlog batches.
|
|
34
|
+
|
|
35
|
+
## Solo Maintainer Capacity Guardrail
|
|
36
|
+
|
|
37
|
+
- Weekly support budget target: <= 2 hours/week.
|
|
38
|
+
- If inbound support exceeds this cap, new feature work may be paused.
|
|
39
|
+
- High-context requests may be deferred until reproducible artifacts are provided.
|
|
40
|
+
|
|
41
|
+
## Security and Data Handling
|
|
42
|
+
|
|
43
|
+
- Do not post raw tokens/cookies in issues.
|
|
44
|
+
- Use redacted logs.
|
|
45
|
+
- If credentials are exposed, rotate immediately and update issue with redaction.
|
|
46
|
+
|
|
47
|
+
## Deployment Escalation Rule
|
|
48
|
+
|
|
49
|
+
For team/hosted usage, open a deployment intake issue before broad rollout.
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -54,10 +54,13 @@ slack_list_conversations limit=50
|
|
|
54
54
|
# Option 1: In Claude Code/Desktop
|
|
55
55
|
slack_refresh_tokens
|
|
56
56
|
|
|
57
|
-
# Option 2:
|
|
57
|
+
# Option 2: Package setup wizard
|
|
58
|
+
npx -y @jtalk22/slack-mcp --setup
|
|
59
|
+
|
|
60
|
+
# Option 3: Repo CLI
|
|
58
61
|
npm run tokens:auto
|
|
59
62
|
|
|
60
|
-
# Option
|
|
63
|
+
# Option 4: Manual
|
|
61
64
|
npm run tokens:refresh
|
|
62
65
|
```
|
|
63
66
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Use Case Recipes
|
|
2
|
+
|
|
3
|
+
Copy and paste any prompt into your MCP client. Each recipe maps to existing tools and parameters.
|
|
4
|
+
|
|
5
|
+
## 1) Fast Health Check
|
|
6
|
+
|
|
7
|
+
Prompt:
|
|
8
|
+
`Run slack_health_check and tell me if my workspace connection is valid.`
|
|
9
|
+
|
|
10
|
+
## 2) Token Age and Cache Snapshot
|
|
11
|
+
|
|
12
|
+
Prompt:
|
|
13
|
+
`Run slack_token_status and summarize token age, health, and cache stats.`
|
|
14
|
+
|
|
15
|
+
## 3) List Recent DMs
|
|
16
|
+
|
|
17
|
+
Prompt:
|
|
18
|
+
`Use slack_list_conversations with types="im,mpim" and limit=50. Return names and IDs.`
|
|
19
|
+
|
|
20
|
+
## 4) Summarize a Channel for the Last 3 Days
|
|
21
|
+
|
|
22
|
+
Prompt:
|
|
23
|
+
`Use slack_conversations_history with channel_id="<CHANNEL_ID>", oldest="<UNIX_TS_3_DAYS_AGO>", limit=100, resolve_users=true, then summarize decisions and action items.`
|
|
24
|
+
|
|
25
|
+
## 5) Pull a Full Thread
|
|
26
|
+
|
|
27
|
+
Prompt:
|
|
28
|
+
`Use slack_get_thread with channel_id="<CHANNEL_ID>" and thread_ts="<THREAD_TS>". Summarize timeline and owners.`
|
|
29
|
+
|
|
30
|
+
## 6) Search for Decisions
|
|
31
|
+
|
|
32
|
+
Prompt:
|
|
33
|
+
`Use slack_search_messages with query="decision OR approved after:2026-01-01" and count=50. Group results by channel.`
|
|
34
|
+
|
|
35
|
+
## 7) Find Messages from One Person
|
|
36
|
+
|
|
37
|
+
Prompt:
|
|
38
|
+
`Use slack_search_messages with query="from:@<USERNAME> after:2026-01-01" and count=30. Return top themes.`
|
|
39
|
+
|
|
40
|
+
## 8) Export Conversation History
|
|
41
|
+
|
|
42
|
+
Prompt:
|
|
43
|
+
`Use slack_get_full_conversation with channel_id="<CHANNEL_ID>", max_messages=2000, include_threads=true, output_file="q1-export.json".`
|
|
44
|
+
|
|
45
|
+
## 9) Lookup a User Profile
|
|
46
|
+
|
|
47
|
+
Prompt:
|
|
48
|
+
`Use slack_users_info with user_id="<USER_ID>" and return role, timezone, and status fields.`
|
|
49
|
+
|
|
50
|
+
## 10) Send a Channel Update
|
|
51
|
+
|
|
52
|
+
Prompt:
|
|
53
|
+
`Use slack_send_message with channel_id="<CHANNEL_ID>" and text="Daily update: build passed, deploy at 4 PM ET."`
|
|
54
|
+
|
|
55
|
+
## 11) Reply in a Thread
|
|
56
|
+
|
|
57
|
+
Prompt:
|
|
58
|
+
`Use slack_send_message with channel_id="<CHANNEL_ID>", thread_ts="<THREAD_TS>", text="Acknowledged. I will post follow-up logs in 30 minutes."`
|
|
59
|
+
|
|
60
|
+
## 12) Directory Snapshot
|
|
61
|
+
|
|
62
|
+
Prompt:
|
|
63
|
+
`Use slack_list_users with limit=500. Return a compact list of users with admin/bot flags.`
|
|
64
|
+
|
|
65
|
+
## Notes
|
|
66
|
+
|
|
67
|
+
- Replace placeholders before running (`<CHANNEL_ID>`, `<THREAD_TS>`, `<USER_ID>`, `<USERNAME>`, timestamps).
|
|
68
|
+
- Timestamp parameters are Unix seconds in string form.
|
|
69
|
+
- For large workspaces, start with smaller limits, then expand.
|
package/docs/WEB-API.md
CHANGED
package/lib/handlers.js
CHANGED
|
@@ -116,7 +116,7 @@ export async function handleHealthCheck() {
|
|
|
116
116
|
return {
|
|
117
117
|
content: [{
|
|
118
118
|
type: "text",
|
|
119
|
-
text: "NO CREDENTIALS\n\nOptions:\n1. Open Slack in Chrome, then use slack_refresh_tokens\n2. Run:
|
|
119
|
+
text: "NO CREDENTIALS\n\nOptions:\n1. Open Slack in Chrome, then use slack_refresh_tokens\n2. Run: npx -y @jtalk22/slack-mcp --setup"
|
|
120
120
|
}],
|
|
121
121
|
isError: true
|
|
122
122
|
};
|
package/lib/slack-client.js
CHANGED
|
@@ -150,7 +150,7 @@ export async function slackAPI(method, params = {}, options = {}) {
|
|
|
150
150
|
|
|
151
151
|
const creds = loadTokens(false, logger);
|
|
152
152
|
if (!creds) {
|
|
153
|
-
throw new Error("No credentials available. Run
|
|
153
|
+
throw new Error("No credentials available. Run npx -y @jtalk22/slack-mcp --setup or open Slack in Chrome.");
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
// Proactive token health check (non-blocking, only on first attempt)
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jtalk22/slack-mcp",
|
|
3
3
|
"mcpName": "io.github.jtalk22/slack-mcp-server",
|
|
4
|
-
"version": "1.2.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "1.2.2",
|
|
5
|
+
"description": "Session-based Slack access for Claude - DMs, channels, search, and threads. Local-first with your existing Slack session.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "src/server.js",
|
|
8
8
|
"bin": {
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
"http": "node src/server-http.js",
|
|
18
18
|
"web": "node src/web-server.js",
|
|
19
19
|
"setup": "node scripts/setup-wizard.js --setup",
|
|
20
|
+
"hooks:setup": "bash scripts/setup-git-hooks.sh",
|
|
21
|
+
"verify:owner-attribution": "bash scripts/check-owner-attribution.sh",
|
|
20
22
|
"tokens:status": "node scripts/token-cli.js status",
|
|
21
23
|
"tokens:refresh": "node scripts/token-cli.js refresh",
|
|
22
24
|
"tokens:auto": "node scripts/token-cli.js auto",
|
package/public/demo-claude.html
CHANGED
|
@@ -12,19 +12,19 @@
|
|
|
12
12
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
13
13
|
<meta name="author" content="@jtalk22">
|
|
14
14
|
<title>Slack MCP Server - Claude Desktop Demo</title>
|
|
15
|
-
<meta name="description" content="
|
|
15
|
+
<meta name="description" content="Session-based Slack access demo showing Claude workflows for DMs, channels, search, and threads.">
|
|
16
16
|
|
|
17
17
|
<!-- Open Graph -->
|
|
18
|
-
<meta property="og:title" content="Slack MCP Server -
|
|
19
|
-
<meta property="og:description" content="Interactive demo showing Claude
|
|
18
|
+
<meta property="og:title" content="Slack MCP Server - Session Access Demo">
|
|
19
|
+
<meta property="og:description" content="Interactive demo showing Claude using session-based Slack MCP tools for search, threads, and messaging workflows.">
|
|
20
20
|
<meta property="og:type" content="website">
|
|
21
21
|
<meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo-claude.html">
|
|
22
22
|
<meta property="og:image" content="https://assets-worker.james-20a.workers.dev/projects/slack-mcp-server/demo-claude.gif">
|
|
23
23
|
|
|
24
24
|
<!-- Twitter Card -->
|
|
25
25
|
<meta name="twitter:card" content="summary_large_image">
|
|
26
|
-
<meta name="twitter:title" content="Slack MCP Server -
|
|
27
|
-
<meta name="twitter:description" content="Interactive demo showing Claude using MCP tools
|
|
26
|
+
<meta name="twitter:title" content="Slack MCP Server - Session Access Demo">
|
|
27
|
+
<meta name="twitter:description" content="Interactive demo showing Claude using session-based Slack MCP tools for search, threads, and messaging workflows.">
|
|
28
28
|
<meta name="twitter:image" content="https://assets-worker.james-20a.workers.dev/projects/slack-mcp-server/demo-claude.gif">
|
|
29
29
|
|
|
30
30
|
<!-- Theme -->
|
|
@@ -124,6 +124,43 @@
|
|
|
124
124
|
color: var(--text-secondary);
|
|
125
125
|
font-size: 16px;
|
|
126
126
|
}
|
|
127
|
+
.cta-strip {
|
|
128
|
+
width: 100%;
|
|
129
|
+
max-width: 960px;
|
|
130
|
+
margin-bottom: 16px;
|
|
131
|
+
background: rgba(15, 52, 96, 0.72);
|
|
132
|
+
border: 1px solid rgba(255, 255, 255, 0.15);
|
|
133
|
+
border-radius: 12px;
|
|
134
|
+
padding: 10px 14px;
|
|
135
|
+
display: flex;
|
|
136
|
+
justify-content: space-between;
|
|
137
|
+
align-items: center;
|
|
138
|
+
gap: 10px;
|
|
139
|
+
flex-wrap: wrap;
|
|
140
|
+
font-size: 13px;
|
|
141
|
+
}
|
|
142
|
+
.cta-strip .links {
|
|
143
|
+
display: flex;
|
|
144
|
+
gap: 8px;
|
|
145
|
+
flex-wrap: wrap;
|
|
146
|
+
}
|
|
147
|
+
.cta-strip .links a {
|
|
148
|
+
color: #d8efff;
|
|
149
|
+
text-decoration: none;
|
|
150
|
+
border: 1px solid rgba(255, 255, 255, 0.25);
|
|
151
|
+
border-radius: 999px;
|
|
152
|
+
padding: 4px 8px;
|
|
153
|
+
}
|
|
154
|
+
.cta-strip .links a:hover {
|
|
155
|
+
background: rgba(255, 255, 255, 0.08);
|
|
156
|
+
}
|
|
157
|
+
.cta-strip .note {
|
|
158
|
+
color: rgba(255, 255, 255, 0.78);
|
|
159
|
+
}
|
|
160
|
+
.cta-strip .note a {
|
|
161
|
+
color: #9ee7ff;
|
|
162
|
+
text-decoration: underline;
|
|
163
|
+
}
|
|
127
164
|
|
|
128
165
|
.badge {
|
|
129
166
|
display: inline-flex;
|
|
@@ -1111,10 +1148,20 @@
|
|
|
1111
1148
|
</style>
|
|
1112
1149
|
</head>
|
|
1113
1150
|
<body>
|
|
1151
|
+
<div class="cta-strip">
|
|
1152
|
+
<div class="links">
|
|
1153
|
+
<a href="https://www.npmjs.com/package/@jtalk22/slack-mcp" target="_blank" rel="noopener noreferrer">Install</a>
|
|
1154
|
+
<a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/API.md" target="_blank" rel="noopener noreferrer">API Docs</a>
|
|
1155
|
+
<a href="https://github.com/jtalk22/slack-mcp-server/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">Changelog</a>
|
|
1156
|
+
</div>
|
|
1157
|
+
<div class="note">
|
|
1158
|
+
Team rollout? Review <a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/DEPLOYMENT-MODES.md" target="_blank" rel="noopener noreferrer">Deployment Modes</a>.
|
|
1159
|
+
</div>
|
|
1160
|
+
</div>
|
|
1114
1161
|
<header class="page-header">
|
|
1115
1162
|
<h1>
|
|
1116
1163
|
<span>Slack MCP Server</span>
|
|
1117
|
-
<span class="badge">🔧 MCP Demo v1.2</span>
|
|
1164
|
+
<span class="badge">🔧 MCP Demo v1.2.2</span>
|
|
1118
1165
|
</h1>
|
|
1119
1166
|
<p>See how Claude uses MCP tools to access your Slack workspace</p>
|
|
1120
1167
|
</header>
|
|
@@ -1186,7 +1233,7 @@
|
|
|
1186
1233
|
<div class="title-logo">💬</div>
|
|
1187
1234
|
<h1>Slack MCP Server</h1>
|
|
1188
1235
|
<p class="title-tagline">Full Slack access for Claude Desktop</p>
|
|
1189
|
-
<p class="title-version">v1.2 • @jtalk22</p>
|
|
1236
|
+
<p class="title-version">v1.2.2 • @jtalk22</p>
|
|
1190
1237
|
</div>
|
|
1191
1238
|
|
|
1192
1239
|
<!-- Scenario Caption Overlay -->
|
|
@@ -1196,9 +1243,9 @@
|
|
|
1196
1243
|
<div class="closing-card" id="closingCard">
|
|
1197
1244
|
<div class="closing-check">✅</div>
|
|
1198
1245
|
<h2>Demo Complete</h2>
|
|
1199
|
-
<p class="closing-cta">
|
|
1246
|
+
<p class="closing-cta">Session-based Slack access aligned to your existing workspace permissions.</p>
|
|
1200
1247
|
<div class="closing-links">
|
|
1201
|
-
<code>
|
|
1248
|
+
<code>npx -y @jtalk22/slack-mcp --setup</code>
|
|
1202
1249
|
</div>
|
|
1203
1250
|
<p class="closing-github">github.com/jtalk22/slack-mcp-server</p>
|
|
1204
1251
|
<span class="easter-egg">ê</span>
|
package/public/demo-video.html
CHANGED
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Slack MCP Server Demo</title>
|
|
7
|
+
<meta name="description" content="Video demo of session-based Slack access for Claude with DMs, channels, search, and threads.">
|
|
8
|
+
<meta property="og:type" content="website">
|
|
9
|
+
<meta property="og:title" content="Slack MCP Server - Session Access Demo">
|
|
10
|
+
<meta property="og:description" content="Video walkthrough of session-based Slack workflows in Claude.">
|
|
11
|
+
<meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo-video.html">
|
|
12
|
+
<meta property="og:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-poster.png">
|
|
13
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
14
|
+
<meta name="twitter:title" content="Slack MCP Server - Session Access Demo">
|
|
15
|
+
<meta name="twitter:description" content="Video walkthrough of session-based Slack workflows in Claude.">
|
|
16
|
+
<meta name="twitter:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-poster.png">
|
|
7
17
|
<style>
|
|
8
18
|
* {
|
|
9
19
|
margin: 0;
|
|
@@ -37,6 +47,41 @@
|
|
|
37
47
|
margin-bottom: 1.5rem;
|
|
38
48
|
font-size: 1rem;
|
|
39
49
|
}
|
|
50
|
+
.cta-strip {
|
|
51
|
+
margin: 0 auto 1rem;
|
|
52
|
+
background: rgba(15, 52, 96, 0.72);
|
|
53
|
+
border: 1px solid rgba(255, 255, 255, 0.16);
|
|
54
|
+
border-radius: 12px;
|
|
55
|
+
padding: 10px 14px;
|
|
56
|
+
display: flex;
|
|
57
|
+
justify-content: space-between;
|
|
58
|
+
align-items: center;
|
|
59
|
+
gap: 10px;
|
|
60
|
+
flex-wrap: wrap;
|
|
61
|
+
font-size: 0.8125rem;
|
|
62
|
+
}
|
|
63
|
+
.cta-strip .links {
|
|
64
|
+
display: flex;
|
|
65
|
+
gap: 8px;
|
|
66
|
+
flex-wrap: wrap;
|
|
67
|
+
}
|
|
68
|
+
.cta-strip .links a {
|
|
69
|
+
color: #d8efff;
|
|
70
|
+
text-decoration: none;
|
|
71
|
+
border: 1px solid rgba(255, 255, 255, 0.24);
|
|
72
|
+
border-radius: 999px;
|
|
73
|
+
padding: 4px 8px;
|
|
74
|
+
}
|
|
75
|
+
.cta-strip .links a:hover {
|
|
76
|
+
background: rgba(255, 255, 255, 0.08);
|
|
77
|
+
}
|
|
78
|
+
.cta-strip .note {
|
|
79
|
+
color: rgba(255, 255, 255, 0.82);
|
|
80
|
+
}
|
|
81
|
+
.cta-strip .note a {
|
|
82
|
+
color: #9ee7ff;
|
|
83
|
+
text-decoration: underline;
|
|
84
|
+
}
|
|
40
85
|
.video-wrapper {
|
|
41
86
|
position: relative;
|
|
42
87
|
border-radius: 12px;
|
|
@@ -98,6 +143,16 @@
|
|
|
98
143
|
<div class="container">
|
|
99
144
|
<h1>Slack MCP Server</h1>
|
|
100
145
|
<p class="subtitle">Full workspace access via local session mirroring</p>
|
|
146
|
+
<div class="cta-strip">
|
|
147
|
+
<div class="links">
|
|
148
|
+
<a href="https://www.npmjs.com/package/@jtalk22/slack-mcp" target="_blank" rel="noopener noreferrer">Install</a>
|
|
149
|
+
<a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/API.md" target="_blank" rel="noopener noreferrer">API Docs</a>
|
|
150
|
+
<a href="https://github.com/jtalk22/slack-mcp-server/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">Changelog</a>
|
|
151
|
+
</div>
|
|
152
|
+
<div class="note">
|
|
153
|
+
Team rollout? Review <a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/DEPLOYMENT-MODES.md" target="_blank" rel="noopener noreferrer">Deployment Modes</a>.
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
101
156
|
|
|
102
157
|
<div class="video-wrapper">
|
|
103
158
|
<video id="demo" poster="../docs/images/demo-poster.png" playsinline>
|
package/public/demo.html
CHANGED
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
<!-- Open Graph / Social Sharing -->
|
|
9
9
|
<meta property="og:type" content="website">
|
|
10
10
|
<meta property="og:url" content="https://jtalk22.github.io/slack-mcp-server/public/demo.html">
|
|
11
|
-
<meta property="og:title" content="Slack MCP Server -
|
|
12
|
-
<meta property="og:description" content="
|
|
11
|
+
<meta property="og:title" content="Slack MCP Server - Session Access Demo">
|
|
12
|
+
<meta property="og:description" content="Interactive demo for session-based Slack access in Claude: DMs, channels, search, and threads.">
|
|
13
13
|
<meta property="og:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-main.png">
|
|
14
14
|
|
|
15
15
|
<!-- Twitter Card -->
|
|
16
16
|
<meta name="twitter:card" content="summary_large_image">
|
|
17
|
-
<meta name="twitter:title" content="Slack MCP Server -
|
|
18
|
-
<meta name="twitter:description" content="
|
|
17
|
+
<meta name="twitter:title" content="Slack MCP Server - Session Access Demo">
|
|
18
|
+
<meta name="twitter:description" content="Interactive demo for session-based Slack access in Claude: DMs, channels, search, and threads.">
|
|
19
19
|
<meta name="twitter:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-main.png">
|
|
20
20
|
|
|
21
21
|
<!-- SEO -->
|
|
22
|
-
<meta name="description" content="
|
|
22
|
+
<meta name="description" content="Session-based Slack access for Claude. Interactive demo for DMs, channels, search, and thread workflows.">
|
|
23
23
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
24
24
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
25
25
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
@@ -74,12 +74,45 @@
|
|
|
74
74
|
color: white;
|
|
75
75
|
text-decoration: underline;
|
|
76
76
|
}
|
|
77
|
+
.cta-strip {
|
|
78
|
+
background: rgba(15, 52, 96, 0.9);
|
|
79
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.12);
|
|
80
|
+
padding: 10px 16px;
|
|
81
|
+
display: flex;
|
|
82
|
+
justify-content: space-between;
|
|
83
|
+
align-items: center;
|
|
84
|
+
gap: 12px;
|
|
85
|
+
flex-wrap: wrap;
|
|
86
|
+
font-size: 13px;
|
|
87
|
+
}
|
|
88
|
+
.cta-links {
|
|
89
|
+
display: flex;
|
|
90
|
+
gap: 10px;
|
|
91
|
+
flex-wrap: wrap;
|
|
92
|
+
}
|
|
93
|
+
.cta-links a {
|
|
94
|
+
color: #d8efff;
|
|
95
|
+
text-decoration: none;
|
|
96
|
+
padding: 4px 8px;
|
|
97
|
+
border: 1px solid rgba(255, 255, 255, 0.25);
|
|
98
|
+
border-radius: 999px;
|
|
99
|
+
}
|
|
100
|
+
.cta-links a:hover {
|
|
101
|
+
background: rgba(255, 255, 255, 0.1);
|
|
102
|
+
}
|
|
103
|
+
.cta-note {
|
|
104
|
+
color: rgba(255, 255, 255, 0.75);
|
|
105
|
+
}
|
|
106
|
+
.cta-note a {
|
|
107
|
+
color: #9ee7ff;
|
|
108
|
+
text-decoration: underline;
|
|
109
|
+
}
|
|
77
110
|
|
|
78
111
|
/* Main Layout */
|
|
79
112
|
.split-container {
|
|
80
113
|
display: grid;
|
|
81
114
|
grid-template-columns: 420px 1fr;
|
|
82
|
-
height: calc(100vh -
|
|
115
|
+
height: calc(100vh - 88px);
|
|
83
116
|
overflow: hidden;
|
|
84
117
|
}
|
|
85
118
|
|
|
@@ -600,6 +633,16 @@
|
|
|
600
633
|
STATIC PREVIEW - No real data. Run <code>npm run web</code> for live dashboard.
|
|
601
634
|
<a href="https://github.com/jtalk22/slack-mcp-server">View on GitHub</a>
|
|
602
635
|
</div>
|
|
636
|
+
<div class="cta-strip">
|
|
637
|
+
<div class="cta-links">
|
|
638
|
+
<a href="https://www.npmjs.com/package/@jtalk22/slack-mcp" target="_blank" rel="noopener noreferrer">Install</a>
|
|
639
|
+
<a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/API.md" target="_blank" rel="noopener noreferrer">API Docs</a>
|
|
640
|
+
<a href="https://github.com/jtalk22/slack-mcp-server/blob/main/CHANGELOG.md" target="_blank" rel="noopener noreferrer">Changelog</a>
|
|
641
|
+
</div>
|
|
642
|
+
<div class="cta-note">
|
|
643
|
+
Team rollout? Review <a href="https://github.com/jtalk22/slack-mcp-server/blob/main/docs/DEPLOYMENT-MODES.md" target="_blank" rel="noopener noreferrer">Deployment Modes</a>.
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
603
646
|
|
|
604
647
|
<div class="split-container">
|
|
605
648
|
<!-- LEFT: Claude Chat Panel -->
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
EXPECTED_NAME="${EXPECTED_GIT_NAME:-jtalk22}"
|
|
5
|
+
EXPECTED_EMAIL="${EXPECTED_GIT_EMAIL:-james@revasser.nyc}"
|
|
6
|
+
BANNED_REGEX='(?i)(co-authored-by|generated with|\bclaude\b|\bgpt\b|\bcopilot\b|\bgemini\b|\bai\b)'
|
|
7
|
+
|
|
8
|
+
die() {
|
|
9
|
+
echo "ERROR: $*" >&2
|
|
10
|
+
exit 1
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
contains_banned_markers() {
|
|
14
|
+
local text="$1"
|
|
15
|
+
if command -v rg >/dev/null 2>&1; then
|
|
16
|
+
rg -Niq "$BANNED_REGEX" <<<"$text"
|
|
17
|
+
else
|
|
18
|
+
grep -Eiq '(Co-authored-by|Generated with|Claude|GPT|Copilot|Gemini)' <<<"$text" \
|
|
19
|
+
|| grep -Eiq '(^|[^[:alnum:]_])[Aa][Ii]([^[:alnum:]_]|$)' <<<"$text"
|
|
20
|
+
fi
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if [[ "${SKIP_LOCAL_CONFIG_CHECK:-0}" != "1" ]]; then
|
|
24
|
+
local_name="$(git config --get user.name || true)"
|
|
25
|
+
local_email="$(git config --get user.email || true)"
|
|
26
|
+
|
|
27
|
+
[[ -n "$local_name" ]] || die "Missing repo-local git user.name"
|
|
28
|
+
[[ -n "$local_email" ]] || die "Missing repo-local git user.email"
|
|
29
|
+
|
|
30
|
+
[[ "$local_name" == "$EXPECTED_NAME" ]] \
|
|
31
|
+
|| die "Repo-local user.name is '$local_name' (expected '$EXPECTED_NAME')"
|
|
32
|
+
[[ "$local_email" == "$EXPECTED_EMAIL" ]] \
|
|
33
|
+
|| die "Repo-local user.email is '$local_email' (expected '$EXPECTED_EMAIL')"
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
default_range="HEAD"
|
|
37
|
+
if git rev-parse --verify origin/main >/dev/null 2>&1; then
|
|
38
|
+
default_range="origin/main..HEAD"
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
range="${1:-${GIT_CHECK_RANGE:-$default_range}}"
|
|
42
|
+
|
|
43
|
+
git rev-list --count "$range" >/dev/null 2>&1 || die "Invalid commit range: $range"
|
|
44
|
+
commit_count="$(git rev-list --count "$range")"
|
|
45
|
+
|
|
46
|
+
if [[ "$commit_count" -eq 0 ]]; then
|
|
47
|
+
echo "No commits to validate in range '$range'."
|
|
48
|
+
exit 0
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
errors=0
|
|
52
|
+
|
|
53
|
+
while IFS= read -r sha; do
|
|
54
|
+
author_name="$(git show -s --format=%an "$sha")"
|
|
55
|
+
author_email="$(git show -s --format=%ae "$sha")"
|
|
56
|
+
committer_name="$(git show -s --format=%cn "$sha")"
|
|
57
|
+
committer_email="$(git show -s --format=%ce "$sha")"
|
|
58
|
+
body="$(git show -s --format=%B "$sha")"
|
|
59
|
+
|
|
60
|
+
if [[ "$author_name" != "$EXPECTED_NAME" || "$author_email" != "$EXPECTED_EMAIL" ]]; then
|
|
61
|
+
echo "Commit $sha has author '$author_name <$author_email>' (expected '$EXPECTED_NAME <$EXPECTED_EMAIL>')." >&2
|
|
62
|
+
errors=1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
if [[ "$committer_name" != "$EXPECTED_NAME" || "$committer_email" != "$EXPECTED_EMAIL" ]]; then
|
|
66
|
+
echo "Commit $sha has committer '$committer_name <$committer_email>' (expected '$EXPECTED_NAME <$EXPECTED_EMAIL>')." >&2
|
|
67
|
+
errors=1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
if contains_banned_markers "$body"; then
|
|
71
|
+
echo "Commit $sha contains disallowed attribution markers in commit message." >&2
|
|
72
|
+
errors=1
|
|
73
|
+
fi
|
|
74
|
+
done < <(git rev-list "$range")
|
|
75
|
+
|
|
76
|
+
if [[ "$errors" -ne 0 ]]; then
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
echo "Owner-only attribution check passed for $commit_count commit(s) in '$range'."
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
repo_root="$(git rev-parse --show-toplevel)"
|
|
5
|
+
cd "$repo_root"
|
|
6
|
+
|
|
7
|
+
[[ -d .githooks ]] || {
|
|
8
|
+
echo "Missing .githooks directory." >&2
|
|
9
|
+
exit 1
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
git config core.hooksPath .githooks
|
|
13
|
+
find .githooks -maxdepth 1 -type f -exec chmod +x {} +
|
|
14
|
+
|
|
15
|
+
echo "Configured git hooks path: .githooks"
|
package/scripts/setup-wizard.js
CHANGED
|
@@ -16,7 +16,7 @@ import { loadTokens, saveTokens, extractFromChrome, isAutoRefreshAvailable, TOKE
|
|
|
16
16
|
import { slackAPI } from "../lib/slack-client.js";
|
|
17
17
|
|
|
18
18
|
const IS_MACOS = platform() === 'darwin';
|
|
19
|
-
const VERSION = "1.2.
|
|
19
|
+
const VERSION = "1.2.2";
|
|
20
20
|
|
|
21
21
|
// ANSI colors
|
|
22
22
|
const colors = {
|
|
@@ -232,7 +232,7 @@ async function showStatus() {
|
|
|
232
232
|
if (!creds) {
|
|
233
233
|
error("No tokens found");
|
|
234
234
|
print();
|
|
235
|
-
print("Run setup wizard: npx @jtalk22/slack-mcp --setup");
|
|
235
|
+
print("Run setup wizard: npx -y @jtalk22/slack-mcp --setup");
|
|
236
236
|
process.exit(1);
|
|
237
237
|
}
|
|
238
238
|
|
|
@@ -257,7 +257,7 @@ async function showStatus() {
|
|
|
257
257
|
error("Status: INVALID");
|
|
258
258
|
print(`Error: ${e.message}`);
|
|
259
259
|
print();
|
|
260
|
-
print("Run setup wizard to refresh: npx @jtalk22/slack-mcp --setup");
|
|
260
|
+
print("Run setup wizard to refresh: npx -y @jtalk22/slack-mcp --setup");
|
|
261
261
|
process.exit(1);
|
|
262
262
|
}
|
|
263
263
|
}
|
|
@@ -268,11 +268,11 @@ async function showHelp() {
|
|
|
268
268
|
print("Full Slack access for Claude via MCP. Session mirroring bypasses OAuth.");
|
|
269
269
|
print();
|
|
270
270
|
print(`${colors.bold}Usage:${colors.reset}`);
|
|
271
|
-
print(" npx @jtalk22/slack-mcp Start MCP server (stdio)");
|
|
272
|
-
print(" npx @jtalk22/slack-mcp --setup Interactive token setup wizard");
|
|
273
|
-
print(" npx @jtalk22/slack-mcp --status Check token health");
|
|
274
|
-
print(" npx @jtalk22/slack-mcp --version Print version");
|
|
275
|
-
print(" npx @jtalk22/slack-mcp --help Show this help");
|
|
271
|
+
print(" npx -y @jtalk22/slack-mcp Start MCP server (stdio)");
|
|
272
|
+
print(" npx -y @jtalk22/slack-mcp --setup Interactive token setup wizard");
|
|
273
|
+
print(" npx -y @jtalk22/slack-mcp --status Check token health");
|
|
274
|
+
print(" npx -y @jtalk22/slack-mcp --version Print version");
|
|
275
|
+
print(" npx -y @jtalk22/slack-mcp --help Show this help");
|
|
276
276
|
print();
|
|
277
277
|
print(`${colors.bold}npm scripts:${colors.reset}`);
|
|
278
278
|
print(" npm start Start MCP server");
|
|
@@ -345,8 +345,8 @@ async function main() {
|
|
|
345
345
|
print(`${colors.green}${colors.bold}Setup complete!${colors.reset}`);
|
|
346
346
|
print();
|
|
347
347
|
print("Next steps:");
|
|
348
|
-
print(" • Verify: npx @jtalk22/slack-mcp --status");
|
|
349
|
-
print(" • Start server: npx @jtalk22/slack-mcp");
|
|
348
|
+
print(" • Verify: npx -y @jtalk22/slack-mcp --status");
|
|
349
|
+
print(" • Start server: npx -y @jtalk22/slack-mcp");
|
|
350
350
|
print(" • Or add to Claude Desktop config");
|
|
351
351
|
} else {
|
|
352
352
|
print(`${colors.red}Setup failed.${colors.reset} See errors above.`);
|
package/src/server-http.js
CHANGED
package/src/server.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - Network error retry with exponential backoff
|
|
12
12
|
* - Background token health monitoring
|
|
13
13
|
*
|
|
14
|
-
* @version 1.2.
|
|
14
|
+
* @version 1.2.2
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
@@ -47,7 +47,7 @@ const BACKGROUND_REFRESH_INTERVAL = 4 * 60 * 60 * 1000;
|
|
|
47
47
|
|
|
48
48
|
// Package info
|
|
49
49
|
const SERVER_NAME = "slack-mcp-server";
|
|
50
|
-
const SERVER_VERSION = "1.2.
|
|
50
|
+
const SERVER_VERSION = "1.2.2";
|
|
51
51
|
|
|
52
52
|
// MCP Prompts - predefined prompt templates for common Slack operations
|
|
53
53
|
const PROMPTS = [
|
package/src/web-server.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Exposes Slack MCP tools as REST endpoints for browser access.
|
|
6
6
|
* Run alongside or instead of the MCP server for web-based access.
|
|
7
7
|
*
|
|
8
|
-
* @version 1.2.
|
|
8
|
+
* @version 1.2.2
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import express from "express";
|
|
@@ -116,7 +116,7 @@ function extractContent(result) {
|
|
|
116
116
|
app.get("/", (req, res) => {
|
|
117
117
|
res.json({
|
|
118
118
|
name: "Slack Web API Server",
|
|
119
|
-
version: "1.2.
|
|
119
|
+
version: "1.2.2",
|
|
120
120
|
status: "running",
|
|
121
121
|
endpoints: [
|
|
122
122
|
"GET /health",
|
|
@@ -295,7 +295,7 @@ async function main() {
|
|
|
295
295
|
app.listen(PORT, '127.0.0.1', () => {
|
|
296
296
|
// Print to stderr to keep logs clean (stdout reserved for JSON in some setups)
|
|
297
297
|
console.error(`\n${"═".repeat(60)}`);
|
|
298
|
-
console.error(` Slack Web API Server v1.2.
|
|
298
|
+
console.error(` Slack Web API Server v1.2.2`);
|
|
299
299
|
console.error(`${"═".repeat(60)}`);
|
|
300
300
|
console.error(`\n Dashboard: http://localhost:${PORT}/?key=${API_KEY}`);
|
|
301
301
|
console.error(`\n API Key: ${API_KEY}`);
|