Skip to content

v4.8.0 — tool profiles and request pacing

Choose a tag to compare

@jtalk22 jtalk22 released this 07 Aug 17:52
· 7 commits to main since this release
0867375

No MCP tool contracts changed. This release addresses the two running costs of a browser-session Slack server: the tool schema a client carries on every turn, and the request velocity Slack's session-anomaly detection watches.

Tool profiles

SLACK_MCP_TOOLS=essentials|read|all, or --tools=<comma-separated tool names>.

profile tools est. tokens of schema per turn
all (default) 21 ~3,600
read 12 ~1,690
essentials 6 ~985

essentials covers the common case: unread, history, search, thread, user lookup, send.

The default stays all, so existing installs are unchanged. Filtering changes what is advertised, not what is callable — every handler stays wired, and an unrecognized value falls back to all rather than to zero. npm run measure:tools reproduces the numbers (a ~4-chars-per-token estimate, not tokenizer-exact).

Request pacing, on by default

Outbound calls are spaced by a minimum inter-request interval and capped in concurrency, to stay under the burst thresholds Slack's session-anomaly detection watches — most aggressively on Enterprise Grid.

  • SLACK_MCP_MIN_REQUEST_INTERVAL_MS — default 350; 0 disables spacing.
  • SLACK_MCP_MAX_CONCURRENCY — default 3.

Pacing lowers that risk; it does not remove it. On Grid, the hosted OAuth tier or Slack's official MCP remains the session-safe path.

Documentation

New README section, "Grid, credentials, and caching": the Enterprise Grid session-anomaly risk and the pacing that mitigates it; the credential extraction path (Chrome LevelDB token, cookie SQLite database, Keychain Safe Storage, local PBKDF2 + AES-128-CBC decryption, local-only writes); its similarity to the access pattern credential stealers use; and the contents of the single user-name cache. The local/hosted boundary is stated: local never contacts us, hosted never receives a browser cookie.

Fixed

--tools --setup consumed --setup as the tool-profile value and removed it from the child arguments, so the setup wizard silently never ran. The same defect existed on --profile. Both separated-operand forms are now guarded: a following --option means the value is missing, which exits 1 with usage.

Full changelog: https://github.com/jtalk22/slack-mcp-server/blob/main/CHANGELOG.md