From c20605604c3d93423f7128121b5b89f84a61d14d Mon Sep 17 00:00:00 2001 From: meidad Date: Mon, 23 Feb 2026 12:27:42 -0800 Subject: [PATCH 1/2] Fix CI: remove explicit pnpm version to avoid conflict with packageManager pnpm/action-setup reads the version from packageManager in package.json. Specifying it again via the version input causes a conflict error. Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 11 ----------- .github/workflows/release.yml | 3 --- docs/integrations/slack-user-mode.md | 24 ++++++++++++++++++++++++ 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ac2104..7ae3b7e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,6 @@ concurrency: env: NODE_VERSION: '22' - PNPM_VERSION: '10' jobs: lint: @@ -24,8 +23,6 @@ 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 @@ -50,8 +47,6 @@ 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 @@ -76,8 +71,6 @@ 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 @@ -102,8 +95,6 @@ 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 @@ -129,8 +120,6 @@ 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 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6afcabd..8a5df51 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,6 @@ permissions: env: NODE_VERSION: '22' - PNPM_VERSION: '10' jobs: release: @@ -21,8 +20,6 @@ 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 diff --git a/docs/integrations/slack-user-mode.md b/docs/integrations/slack-user-mode.md index ed8f140..be9c35c 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,29 @@ 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. From 746404f8121859ccade8c30e7862b038b1251b94 Mon Sep 17 00:00:00 2001 From: meidad Date: Mon, 23 Feb 2026 12:31:49 -0800 Subject: [PATCH 2/2] Fix formatting in workflow files and slack docs Co-Authored-By: Claude Opus 4.6 --- .github/workflows/ci.yml | 12 ++++++------ .github/workflows/release.yml | 8 ++++---- docs/integrations/slack-user-mode.md | 19 ++++++++++--------- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7ae3b7e..82fb740 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ concurrency: cancel-in-progress: true env: - NODE_VERSION: '22' + NODE_VERSION: "22" jobs: lint: @@ -28,7 +28,7 @@ jobs: 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 @@ -52,7 +52,7 @@ jobs: 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,7 +76,7 @@ jobs: 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 @@ -100,7 +100,7 @@ jobs: 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 @@ -125,7 +125,7 @@ jobs: 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 8a5df51..927953d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,13 +2,13 @@ name: Release on: push: - tags: ['v*'] + tags: ["v*"] permissions: contents: write env: - NODE_VERSION: '22' + NODE_VERSION: "22" jobs: release: @@ -25,8 +25,8 @@ jobs: 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 be9c35c..d820631 100644 --- a/docs/integrations/slack-user-mode.md +++ b/docs/integrations/slack-user-mode.md @@ -53,7 +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 | +| `search:read` | Search messages across channels and DMs | ## Step 2: Subscribe to Team Events @@ -340,16 +340,17 @@ If Slack API calls return `missing_scope`, the user token is valid but lacks req **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` | +| 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