Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 6 additions & 17 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ concurrency:
cancel-in-progress: true

env:
NODE_VERSION: '22'
PNPM_VERSION: '10'
NODE_VERSION: "22"

jobs:
lint:
Expand All @@ -24,14 +23,12 @@ jobs:

- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v6.1.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand All @@ -50,14 +47,12 @@ jobs:

- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v6.1.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand All @@ -76,14 +71,12 @@ jobs:

- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v6.1.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand All @@ -102,14 +95,12 @@ jobs:

- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v6.1.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand All @@ -129,14 +120,12 @@ jobs:

- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v6.1.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down
11 changes: 4 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ name: Release

on:
push:
tags: ['v*']
tags: ["v*"]

permissions:
contents: write

env:
NODE_VERSION: '22'
PNPM_VERSION: '10'
NODE_VERSION: "22"

jobs:
release:
Expand All @@ -21,15 +20,13 @@ jobs:

- name: Setup pnpm
uses: pnpm/action-setup@v4.2.0
with:
version: ${{ env.PNPM_VERSION }}

- name: Setup Node.js
uses: actions/setup-node@v6.1.0
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'pnpm'
registry-url: 'https://registry.npmjs.org'
cache: "pnpm"
registry-url: "https://registry.npmjs.org"

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down
25 changes: 25 additions & 0 deletions docs/integrations/slack-user-mode.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ Your Slack app needs **User Token Scopes** in addition to the existing Bot Token
| `mpim:history` | Read multi-party DMs |
| `chat:write` | Send messages as you |
| `users:read` | Look up sender names |
| `search:read` | Search messages across channels and DMs |

## Step 2: Subscribe to Team Events

Expand Down Expand Up @@ -333,6 +334,30 @@ Status flow: `pending` → `approved` → `sent`, or `pending` → `rejected`.
- The bot adapter must be running (buttons are handled by the `SlackAdapter`, not the user adapter)
- Check daemon logs for action handler errors

### `missing_scope` errors from the MCP server

If Slack API calls return `missing_scope`, the user token is valid but lacks required OAuth scopes. This commonly happens after reinstalling the app without re-adding all scopes, or when new features require scopes not in the original setup.

**Diagnosis:** Try different operations to identify which scopes are missing:

| Operation | Required Scope |
| --------------------- | ----------------------- |
| List channels | `channels:read` |
| Read channel messages | `channels:history` |
| Search messages | `search:read` |
| Look up users | `users:read` |
| Send messages | `chat:write` |
| Read DMs | `im:history`, `im:read` |

**Fix:**

1. Go to your Slack app's **OAuth & Permissions** page
2. Under **User Token Scopes**, add the missing scope(s)
3. **Reinstall the app** to your workspace — scope changes don't take effect until you reinstall
4. Copy the new `xoxp-` token and update your configuration

> **Tip:** `search:read` is often overlooked because it isn't required for basic messaging, but it's needed for the MCP server's `slack_search` tool.

### "not_in_channel" when sending approved message

The user token can only post to channels the user is a member of. Join the channel first.
Expand Down