@jtalk22/slack-mcp 2.0.0 → 3.0.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.
Files changed (55) hide show
  1. package/README.md +112 -64
  2. package/docs/CLOUDFLARE-BROWSER-TOOLKIT.md +67 -0
  3. package/docs/DEPLOYMENT-MODES.md +10 -3
  4. package/docs/HN-LAUNCH.md +47 -36
  5. package/docs/INDEX.md +4 -1
  6. package/docs/INSTALL-PROOF.md +5 -5
  7. package/docs/LAUNCH-COPY-v3.0.0.md +73 -0
  8. package/docs/LAUNCH-MATRIX.md +4 -2
  9. package/docs/LAUNCH-OPS.md +24 -23
  10. package/docs/RELEASE-HEALTH.md +9 -0
  11. package/docs/TROUBLESHOOTING.md +27 -0
  12. package/docs/WEB-API.md +13 -4
  13. package/docs/images/demo-channel-messages.png +0 -0
  14. package/docs/images/demo-channels.png +0 -0
  15. package/docs/images/demo-claude-mobile-360x800.png +0 -0
  16. package/docs/images/demo-claude-mobile-390x844.png +0 -0
  17. package/docs/images/demo-main-mobile-360x800.png +0 -0
  18. package/docs/images/demo-main-mobile-390x844.png +0 -0
  19. package/docs/images/demo-main.png +0 -0
  20. package/docs/images/demo-poster.png +0 -0
  21. package/docs/images/demo-sidebar.png +0 -0
  22. package/docs/images/web-api-mobile-360x800.png +0 -0
  23. package/docs/images/web-api-mobile-390x844.png +0 -0
  24. package/package.json +14 -6
  25. package/public/demo-claude.html +83 -10
  26. package/public/demo-video.html +33 -4
  27. package/public/demo.html +136 -2
  28. package/public/index.html +132 -69
  29. package/scripts/capture-screenshots.js +103 -53
  30. package/scripts/check-version-parity.js +25 -11
  31. package/scripts/cloudflare-browser-tool.js +237 -0
  32. package/scripts/collect-release-health.js +1 -1
  33. package/scripts/record-demo.js +22 -9
  34. package/scripts/release-preflight.js +243 -0
  35. package/scripts/setup-wizard.js +1 -1
  36. package/scripts/verify-install-flow.js +2 -1
  37. package/scripts/verify-web.js +49 -1
  38. package/server.json +47 -0
  39. package/smithery.yaml +34 -0
  40. package/src/server-http.js +98 -5
  41. package/src/server.js +18 -6
  42. package/src/web-server.js +5 -3
  43. package/docs/LAUNCH-COPY-v2.0.0.md +0 -59
  44. package/docs/images/demo-claude-v1.2.gif +0 -0
  45. package/docs/images/demo-readme.gif +0 -0
  46. package/docs/release-health/2026-02-25.md +0 -33
  47. package/docs/release-health/2026-02-26.md +0 -33
  48. package/docs/release-health/24h-delta.md +0 -21
  49. package/docs/release-health/24h-end.md +0 -33
  50. package/docs/release-health/24h-start.md +0 -33
  51. package/docs/release-health/latest.md +0 -33
  52. package/docs/release-health/launch-log-template.md +0 -21
  53. package/docs/release-health/version-parity.md +0 -21
  54. package/docs/videos/.gitkeep +0 -0
  55. package/docs/videos/demo-claude-v1.2.webm +0 -0
@@ -1,18 +1,18 @@
1
- # Launch Ops Runbook (v2.0.0)
1
+ # Launch Ops Runbook (v3.0.0)
2
2
 
3
- This runbook defines launch-day monitoring, response rules, and reinforcement loops.
3
+ This runbook defines launch-day monitoring and distribution for technical/operator channels (no X/Reddit dependency).
4
4
 
5
- ## Same-Day Fanout Order
5
+ ## Same-Day Fanout Order (9 Channels)
6
6
 
7
- 1. GitHub release publish (`v2.0.0`)
8
- 2. npm publish confirm (`@jtalk22/slack-mcp@2.0.0`)
9
- 3. MCP registry metadata update
10
- 4. Smithery listing metadata parity update
11
- 5. `awesome-mcp-servers` version update PR
12
- 6. Glama listing refresh/update
13
- 7. HN post + first comment
14
- 8. X thread
15
- 9. Reddit technical post
7
+ 1. GitHub release page refresh (`v3.0.0` copy + install-proof block)
8
+ 2. npm parity confirm (`@jtalk22/slack-mcp@3.0.0`)
9
+ 3. MCP registry parity confirm (`3.0.0`)
10
+ 4. Smithery listing metadata/parity update (or timestamped propagation note)
11
+ 5. `awesome-mcp-servers` listing PR refresh
12
+ 6. Glama metadata sync and canonical link verification
13
+ 7. HN thread update comment (high-signal install proof + support path)
14
+ 8. GitHub Discussions announcement/support threads update
15
+ 9. GitHub Pages/docs surface publish + link verification
16
16
 
17
17
  ## Monitoring Cadence
18
18
 
@@ -21,9 +21,10 @@ This runbook defines launch-day monitoring, response rules, and reinforcement lo
21
21
 
22
22
  Track:
23
23
  - install reports and blocker count
24
- - npm version/install confirmation
25
- - registry parity status
26
- - inbound issue volume and severity
24
+ - npm/MCP parity state
25
+ - listing propagation status (Smithery/Glama)
26
+ - inbound issue and discussion severity
27
+ - hosted migration questions (`SLACK_MCP_HTTP_AUTH_TOKEN`, CORS allowlist)
27
28
 
28
29
  ## Triage Rules
29
30
 
@@ -33,29 +34,29 @@ P1 install blocker:
33
34
  - add fix to patch queue
34
35
 
35
36
  Non-blocking request:
36
- - acknowledge and route to issue template
37
+ - acknowledge and route to issue/discussion template
37
38
  - provide timeline as best effort
38
39
 
39
40
  ## Escalation Triggers
40
41
 
41
42
  1. If install failures exceed 3 unique reports in 24h:
42
- - pause outbound posting
43
+ - pause outbound promotion
43
44
  - prioritize hotfix
44
45
 
45
46
  2. If support load exceeds 2 hours/day for 2 days:
46
- - move to stability-only mode
47
+ - switch to stability-only mode
47
48
  - defer non-critical requests
48
49
 
49
50
  ## 24h / 48h / 72h Follow-Up
50
51
 
51
52
  24h:
52
- - publish release-health delta and short technical update
53
+ - publish release-health delta and short technical summary
53
54
 
54
55
  48h:
55
- - answer top 5 recurring questions in docs
56
+ - patch docs for top recurring setup questions
56
57
 
57
58
  72h:
58
- - publish `v2.0.1` only if launch defects are confirmed
59
+ - ship `v3.0.1` only if launch defects are confirmed
59
60
 
60
61
  ## Evidence Log
61
62
 
@@ -65,6 +66,6 @@ Use:
65
66
  Capture:
66
67
  - channel
67
68
  - UTC timestamp
68
- - URL
69
+ - URL or command evidence
69
70
  - action taken
70
- - observed result
71
+ - observed result (`success|partial|blocked`)
@@ -28,6 +28,15 @@ If external registries are still propagating immediately after publish:
28
28
  npm run verify:version-parity -- --allow-propagation
29
29
  ```
30
30
 
31
+ ## Prepublish dry run
32
+
33
+ ```bash
34
+ npm run verify:release-dry-run
35
+ ```
36
+
37
+ Output:
38
+ - `docs/release-health/prepublish-dry-run.md`
39
+
31
40
  24-hour loop artifacts:
32
41
  - `docs/release-health/24h-start.md`
33
42
  - `docs/release-health/24h-end.md`
@@ -161,6 +161,33 @@ cat /tmp/slack-web-api.log
161
161
  cat /tmp/slack-web-api.error.log
162
162
  ```
163
163
 
164
+ ### Hosted HTTP `/mcp` Returns 503 or 401
165
+
166
+ If you run `node src/server-http.js`, `/mcp` is protected by default.
167
+
168
+ `503 http_auth_token_missing` means you did not set:
169
+
170
+ ```bash
171
+ SLACK_MCP_HTTP_AUTH_TOKEN=change-this
172
+ ```
173
+
174
+ `401 unauthorized` means your request is missing or using the wrong bearer token.
175
+
176
+ Example request:
177
+
178
+ ```bash
179
+ curl http://localhost:3000/mcp \
180
+ -H "Authorization: Bearer $SLACK_MCP_HTTP_AUTH_TOKEN" \
181
+ -H "Content-Type: application/json" \
182
+ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'
183
+ ```
184
+
185
+ For local-only testing (not remote exposure), you can opt out:
186
+
187
+ ```bash
188
+ SLACK_MCP_HTTP_INSECURE=1 node src/server-http.js
189
+ ```
190
+
164
191
  ---
165
192
 
166
193
  ## Claude Desktop Issues
package/docs/WEB-API.md CHANGED
@@ -1,6 +1,15 @@
1
1
  # Web API Reference
2
2
 
3
- The Slack Web Server exposes all MCP tools as REST endpoints, accessible from any browser or HTTP client. This is useful for accessing Slack from claude.ai (which doesn't support MCP).
3
+ The Slack Web Server exposes all MCP tools as REST endpoints, accessible from any browser or HTTP client.
4
+
5
+ Claude web now supports remote MCP connectors on paid plans, so this Web API mode is best used for:
6
+ - local localhost dashboard workflows
7
+ - REST/API integrations
8
+ - fallback operation when you do not want to host a remote MCP endpoint
9
+
10
+ References:
11
+ - https://support.anthropic.com/en/articles/11995447-connectors-in-claude
12
+ - https://support.anthropic.com/en/articles/11175166-about-custom-integrations-using-remote-mcp
4
13
 
5
14
  ## Starting the Server
6
15
 
@@ -269,9 +278,9 @@ The UI auto-connects with the default API key:
269
278
  4. Send messages directly from the browser
270
279
 
271
280
  **Using with claude.ai:**
272
- 1. Open the web UI alongside claude.ai
273
- 2. Browse/search for relevant conversations
274
- 3. Copy-paste message content into claude.ai as needed
281
+ 1. Preferred: add a remote MCP connector in Claude settings if you run a remote endpoint.
282
+ 2. Fallback: open the web UI alongside claude.ai for local browsing/search.
283
+ 3. Copy-paste relevant message content as needed.
275
284
 
276
285
  ---
277
286
 
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jtalk22/slack-mcp",
3
3
  "mcpName": "io.github.jtalk22/slack-mcp-server",
4
- "version": "2.0.0",
4
+ "version": "3.0.0",
5
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",
@@ -25,9 +25,11 @@
25
25
  "tokens:clear": "node scripts/token-cli.js clear",
26
26
  "screenshot": "node scripts/capture-screenshots.js",
27
27
  "record-demo": "node scripts/record-demo.js",
28
+ "cf:browser": "node scripts/cloudflare-browser-tool.js",
28
29
  "metrics:release-health": "node scripts/collect-release-health.js",
29
30
  "metrics:release-health:delta": "node scripts/build-release-health-delta.js",
30
- "verify:version-parity": "node scripts/check-version-parity.js"
31
+ "verify:version-parity": "node scripts/check-version-parity.js",
32
+ "verify:release-dry-run": "node scripts/release-preflight.js"
31
33
  },
32
34
  "keywords": [
33
35
  "mcp",
@@ -40,10 +42,10 @@
40
42
  "claude",
41
43
  "claude-desktop",
42
44
  "claude-code",
45
+ "claude-connectors",
46
+ "anthropic",
43
47
  "cursor",
44
48
  "llm",
45
- "ai",
46
- "ai-assistant",
47
49
  "automation",
48
50
  "workflow-automation",
49
51
  "developer-tools",
@@ -62,6 +64,7 @@
62
64
  "mcp-tools",
63
65
  "mcp-stdio",
64
66
  "mcp-http",
67
+ "remote-mcp",
65
68
  "open-source"
66
69
  ],
67
70
  "author": "jtalk22",
@@ -86,9 +89,14 @@
86
89
  "lib/",
87
90
  "public/",
88
91
  "scripts/",
89
- "docs/",
92
+ "docs/*.md",
93
+ "docs/assets/",
94
+ "docs/images/*.png",
95
+ "docs/images/*.svg",
90
96
  "README.md",
91
- "LICENSE"
97
+ "LICENSE",
98
+ "server.json",
99
+ "smithery.yaml"
92
100
  ],
93
101
  "devDependencies": {
94
102
  "playwright": "^1.57.0"
@@ -19,22 +19,27 @@
19
19
  <meta property="og:description" content="Session-based Slack access for Claude with your existing workspace permissions. Search, thread, 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
- <meta property="og:image" content="https://assets-worker.james-20a.workers.dev/projects/slack-mcp-server/demo-claude.gif">
22
+ <meta property="og:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-claude.gif">
23
23
 
24
24
  <!-- Twitter Card -->
25
25
  <meta name="twitter:card" content="summary_large_image">
26
26
  <meta name="twitter:title" content="Slack MCP Server - Session-Based Slack Access Demo">
27
27
  <meta name="twitter:description" content="Session-based Slack access for Claude with your existing workspace permissions. Search, thread, and messaging workflows.">
28
- <meta name="twitter:image" content="https://assets-worker.james-20a.workers.dev/projects/slack-mcp-server/demo-claude.gif">
28
+ <meta name="twitter:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-claude.gif">
29
29
 
30
30
  <!-- Theme -->
31
31
  <meta name="theme-color" content="#1a1a1a">
32
32
  <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>💬</text></svg>">
33
33
  <style>
34
+ @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&display=swap');
35
+
34
36
  /* ═══════════════════════════════════════════════════════════════
35
37
  Claude Desktop Color Palette (Dark Mode)
36
38
  ═══════════════════════════════════════════════════════════════ */
37
39
  :root {
40
+ --font-heading: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif;
41
+ --font-body: "IBM Plex Sans", "Inter", "Segoe UI", sans-serif;
42
+
38
43
  /* Window chrome */
39
44
  --window-bg: #1a1a1a;
40
45
  --window-chrome: #2d2d2d;
@@ -83,7 +88,7 @@
83
88
  }
84
89
 
85
90
  body {
86
- font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, sans-serif;
91
+ font-family: var(--font-body);
87
92
  font-size: 15px;
88
93
  line-height: 1.5;
89
94
  -webkit-font-smoothing: antialiased;
@@ -118,6 +123,8 @@
118
123
  align-items: center;
119
124
  justify-content: center;
120
125
  gap: 12px;
126
+ font-family: var(--font-heading);
127
+ letter-spacing: -0.02em;
121
128
  }
122
129
 
123
130
  .page-header p {
@@ -127,11 +134,11 @@
127
134
  .cta-strip {
128
135
  width: 100%;
129
136
  max-width: 960px;
130
- margin-bottom: 16px;
137
+ margin-bottom: 14px;
131
138
  background: rgba(15, 52, 96, 0.72);
132
139
  border: 1px solid rgba(255, 255, 255, 0.15);
133
140
  border-radius: 12px;
134
- padding: 10px 14px;
141
+ padding: 10px 12px;
135
142
  display: flex;
136
143
  justify-content: space-between;
137
144
  align-items: center;
@@ -183,6 +190,7 @@
183
190
  margin-bottom: 24px;
184
191
  flex-wrap: wrap;
185
192
  justify-content: center;
193
+ width: min(100%, 960px);
186
194
  }
187
195
 
188
196
  .scenario-btn {
@@ -257,6 +265,9 @@
257
265
  gap: 12px;
258
266
  margin-bottom: 16px;
259
267
  align-items: center;
268
+ flex-wrap: wrap;
269
+ justify-content: center;
270
+ width: min(100%, 920px);
260
271
  }
261
272
 
262
273
  .speed-control {
@@ -967,31 +978,93 @@
967
978
  /* ═══════════════════════════════════════════════════════════════
968
979
  Responsive
969
980
  ═══════════════════════════════════════════════════════════════ */
981
+ @media (max-width: 900px) {
982
+ body {
983
+ padding: 14px;
984
+ }
985
+
986
+ .page-header {
987
+ margin-bottom: 16px;
988
+ }
989
+
990
+ .page-header h1 {
991
+ font-size: 24px;
992
+ }
993
+
994
+ .scenario-btn {
995
+ padding: 10px 14px;
996
+ }
997
+
998
+ .controls-bar {
999
+ gap: 10px;
1000
+ }
1001
+
1002
+ .claude-window {
1003
+ max-width: 100%;
1004
+ }
1005
+ }
1006
+
970
1007
  @media (max-width: 600px) {
971
1008
  body {
972
1009
  padding: 12px;
973
1010
  }
974
1011
 
1012
+ .cta-strip {
1013
+ padding: 10px;
1014
+ gap: 8px;
1015
+ }
1016
+
1017
+ .cta-strip .links {
1018
+ width: 100%;
1019
+ }
1020
+
1021
+ .cta-strip .note {
1022
+ font-size: 12px;
1023
+ }
1024
+
975
1025
  .page-header h1 {
976
1026
  font-size: 22px;
1027
+ flex-wrap: wrap;
1028
+ gap: 8px;
1029
+ }
1030
+
1031
+ .page-header p {
1032
+ font-size: 14px;
977
1033
  }
978
1034
 
979
1035
  .scenario-bar {
980
1036
  gap: 8px;
1037
+ margin-bottom: 14px;
981
1038
  }
982
1039
 
983
1040
  .scenario-btn {
984
- padding: 10px 14px;
1041
+ padding: 9px 12px;
985
1042
  font-size: 13px;
1043
+ border-radius: 10px;
986
1044
  }
987
1045
 
988
1046
  .scenario-btn .label {
989
1047
  display: none;
990
1048
  }
991
1049
 
1050
+ .controls-bar {
1051
+ gap: 8px;
1052
+ margin-bottom: 12px;
1053
+ }
1054
+
1055
+ .replay-btn,
1056
+ .share-btn {
1057
+ padding: 8px 12px;
1058
+ }
1059
+
1060
+ .speed-control {
1061
+ width: 100%;
1062
+ justify-content: space-between;
1063
+ }
1064
+
992
1065
  .chat-container {
993
- height: 450px;
994
- padding: 16px;
1066
+ height: min(55vh, 450px);
1067
+ padding: 14px;
995
1068
  }
996
1069
 
997
1070
  .tools-dropdown {
@@ -1161,7 +1234,7 @@
1161
1234
  <header class="page-header">
1162
1235
  <h1>
1163
1236
  <span>Slack MCP Server</span>
1164
- <span class="badge">🔧 MCP Demo v2.0.0</span>
1237
+ <span class="badge">🔧 MCP Demo v3.0.0</span>
1165
1238
  </h1>
1166
1239
  <p>See how Claude uses MCP tools to access your Slack workspace</p>
1167
1240
  </header>
@@ -1233,7 +1306,7 @@
1233
1306
  <div class="title-logo">💬</div>
1234
1307
  <h1>Slack MCP Server</h1>
1235
1308
  <p class="title-tagline">Full Slack access for Claude Desktop</p>
1236
- <p class="title-version">v2.0.0 • @jtalk22</p>
1309
+ <p class="title-version">v3.0.0 • @jtalk22</p>
1237
1310
  </div>
1238
1311
 
1239
1312
  <!-- Scenario Caption Overlay -->
@@ -15,13 +15,20 @@
15
15
  <meta name="twitter:description" content="Session-based Slack access for Claude with your existing workspace permissions. Video walkthrough for Slack workflows.">
16
16
  <meta name="twitter:image" content="https://raw.githubusercontent.com/jtalk22/slack-mcp-server/main/docs/images/demo-poster.png">
17
17
  <style>
18
+ @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600&family=Space+Grotesk:wght@500;600;700&display=swap');
19
+
20
+ :root {
21
+ --font-heading: "Space Grotesk", "Avenir Next", "Segoe UI", sans-serif;
22
+ --font-body: "IBM Plex Sans", "Inter", "Segoe UI", sans-serif;
23
+ }
24
+
18
25
  * {
19
26
  margin: 0;
20
27
  padding: 0;
21
28
  box-sizing: border-box;
22
29
  }
23
30
  body {
24
- font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
31
+ font-family: var(--font-body);
25
32
  background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
26
33
  min-height: 100vh;
27
34
  display: flex;
@@ -40,6 +47,8 @@
40
47
  font-weight: 600;
41
48
  text-align: center;
42
49
  margin-bottom: 0.5rem;
50
+ font-family: var(--font-heading);
51
+ letter-spacing: -0.02em;
43
52
  }
44
53
  .subtitle {
45
54
  color: #94a3b8;
@@ -137,6 +146,26 @@
137
146
  .back-link a:hover {
138
147
  color: #ffffff;
139
148
  }
149
+
150
+ @media (max-width: 640px) {
151
+ body {
152
+ padding: 1rem 0.75rem;
153
+ }
154
+
155
+ .cta-strip .links {
156
+ width: 100%;
157
+ }
158
+
159
+ .controls {
160
+ gap: 0.75rem;
161
+ }
162
+
163
+ .btn {
164
+ flex: 1;
165
+ min-width: 0;
166
+ padding: 0.72rem 0.95rem;
167
+ }
168
+ }
140
169
  </style>
141
170
  </head>
142
171
  <body>
@@ -155,9 +184,9 @@
155
184
  </div>
156
185
 
157
186
  <div class="video-wrapper">
158
- <video id="demo" poster="../docs/images/demo-poster.png" playsinline>
159
- <source src="../docs/videos/demo-claude-v1.2.webm" type="video/webm">
160
- <source src="../docs/images/demo-claude-v1.2.gif" type="image/gif">
187
+ <video id="demo" poster="https://jtalk22.github.io/slack-mcp-server/docs/images/demo-poster.png" playsinline>
188
+ <source src="../docs/videos/demo-claude.webm" type="video/webm">
189
+ <source src="https://jtalk22.github.io/slack-mcp-server/docs/videos/demo-claude.webm" type="video/webm">
161
190
  Your browser does not support the video tag.
162
191
  </video>
163
192
  </div>