diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ac2104..82fb740 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,8 +11,7 @@ concurrency: cancel-in-progress: true env: - NODE_VERSION: '22' - PNPM_VERSION: '10' + NODE_VERSION: "22" jobs: lint: @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6afcabd..927953d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -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: @@ -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 diff --git a/docs/integrations/slack-user-mode.md b/docs/integrations/slack-user-mode.md index ed8f140..d820631 100644 --- a/docs/integrations/slack-user-mode.md +++ b/docs/integrations/slack-user-mode.md @@ -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 @@ -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.