Skip to content

feat(uniswap-integrations): migrate Slack MCP from addons generator to plugin#368

Open
cursor[bot] wants to merge 1 commit intonextfrom
cursor/claude-slack-mcp-integration-29a9
Open

feat(uniswap-integrations): migrate Slack MCP from addons generator to plugin#368
cursor[bot] wants to merge 1 commit intonextfrom
cursor/claude-slack-mcp-integration-29a9

Conversation

@cursor
Copy link

@cursor cursor bot commented Jan 28, 2026

Add Slack MCP to the uniswap-integrations plugin, remove it from the addons generator, and ensure backward compatibility for existing Slack MCP configurations.

The claude-plus launcher now checks multiple config paths ($CLAUDE_CONFIG_DIR/claude.json, ~/.claude.json, ~/.claude/claude.json) to support users who previously installed Slack MCP via the addons generator (which used the legacy ~/.claude.json path) and those using the new plugin or default user config.

Slack Thread

Open in Cursor Open in Web


✨ Claude-Generated Content

Summary

Migrate Slack MCP from the addons generator to the uniswap-integrations plugin, ensuring backward compatibility for users who previously installed Slack MCP via the legacy generator.

Changes

New: Slack MCP in uniswap-integrations Plugin

File Changes
.mcp.json Added Slack MCP server configuration with @anthropic/slack-mcp@latest
plugin.json Bumped version 2.0.1 → 2.1.0
CLAUDE.md Added Slack authentication documentation and setup instructions
README.md Added Slack to MCP servers table and detailed setup guide

Removed: Slack MCP from Addons Generator

File Changes
addon-registry.ts Removed slack-mcp entry from registry
generator.ts Removed Slack-specific authentication instructions
schema.json Removed slack-mcp from enum options, updated server count (2 → 1)
schema.d.ts Updated type to exclude slack-mcp
CLAUDE.md Updated documentation to reflect removal, added note pointing to plugin

Backward Compatibility: Multi-Path Config Support

File Changes
config-paths.ts Added getAllClaudeConfigPaths() function for searching multiple config locations
slack-token.ts Updated getCurrentToken() to search all config paths in priority order
The claude-plus launcher now searches these locations in order:
  1. $CLAUDE_CONFIG_DIR/claude.json (if env var is set)
  2. ~/.claude.json (legacy location from addons generator)
  3. ~/.claude/claude.json (new default user location)

Root

File Changes
CLAUDE.md Updated uniswap-integrations version in plugin version table (2.0.1 → 2.1.0)

Notes

  • Plugin version bumped from 2.0.1 → 2.1.0 (minor: new MCP server added)
  • Users who installed Slack MCP via the addons generator will continue to work thanks to multi-path config search
  • New installations should use the uniswap-integrations plugin
  • The addons generator now only offers aws-log-analyzer-mcp

Test Plan

  • Verify Slack MCP works when installed via uniswap-integrations plugin
  • Verify claude-plus finds Slack token in ~/.claude.json (legacy path)
  • Verify claude-plus finds Slack token in ~/.claude/claude.json (new path)
  • Verify claude-plus finds Slack token when CLAUDE_CONFIG_DIR is set
  • Verify addons generator no longer offers slack-mcp option

@cursor
Copy link
Author

cursor bot commented Jan 28, 2026

Cursor Agent can help with this pull request. Just @cursor in comments and I'll start working on changes in this branch.
Learn more about Cursor Agents

@vercel
Copy link

vercel bot commented Jan 28, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
ai-toolkit-slack-oauth-backend Ready Ready Preview, Comment Feb 18, 2026 7:15pm

Request Review

@wkoutre wkoutre self-assigned this Jan 28, 2026
@github-actions github-actions bot changed the title Claude slack MCP integration feat(uniswap-integrations): migrate Slack MCP from addons generator to plugin Jan 28, 2026
… plugin

- Add Slack MCP to uniswap-integrations plugin .mcp.json
- Remove Slack MCP from addons generator (addon-registry.ts, schema.json, schema.d.ts)
- Update claude-plus launcher to check multiple config locations for backward compatibility
  - Now checks $CLAUDE_CONFIG_DIR/claude.json, ~/.claude.json, and ~/.claude/claude.json
- Bump uniswap-integrations plugin version from 1.0.0 to 1.1.0
- Update documentation in CLAUDE.md and README.md files

Co-authored-by: nick.koutrelakos <nick.koutrelakos@uniswap.org>
@wkoutre wkoutre force-pushed the cursor/claude-slack-mcp-integration-29a9 branch from c7f543c to f40ba09 Compare February 18, 2026 19:14
@wkoutre wkoutre marked this pull request as ready for review February 18, 2026 19:14
@wkoutre wkoutre requested a review from a team as a code owner February 18, 2026 19:14
@github-actions
Copy link
Contributor

github-actions bot commented Feb 18, 2026

🤖 Claude Code Review

Review complete

Summary

This PR migrates the Slack MCP server from the standalone addons generator to the uniswap-integrations plugin. It also adds backward-compatible multi-location config reading for Slack tokens and bumps the plugin version to 2.1.0 (minor bump for new MCP server — correct per semver).

The changes are well-organized: the addon registry removal, plugin .mcp.json addition, token lookup refactor, documentation updates, and schema updates are all consistent with each other.

Findings

Minor Issue: plugin.json description not updated

The plugin.json description field still reads:

"External service integrations (Linear, Notion, Nx, Chrome DevTools, GitHub) and deployment orchestration"

Slack is now bundled in this plugin, and both CLAUDE.md and README.md were updated to mention Slack, but plugin.json was not. This is the plugin's user-facing description in the marketplace. Consider updating it to include Slack for consistency.

Minor Issue: plugin.json keywords array missing "slack"

Similarly, the keywords array in plugin.json lists ["integrations", "linear", "notion", "nx", "deployment", "mcp", "github"] but doesn't include "slack". Adding it would improve discoverability.

Observation: Read/Write location asymmetry is intentional but worth noting

getCurrentToken() now reads from 3 locations (custom dir, ~/.claude.json, ~/.claude/claude.json), but updateClaudeConfig() still writes to only the getClaudeConfigPath() location (custom dir or ~/.claude.json). This is fine for the migration use case — tokens found at ~/.claude/claude.json (written by claude mcp add --scope user) would be read correctly, and refreshed tokens get written to the primary config location. The asymmetry is intentional and documented.

Observation: Hardcoded SLACK_TEAM_ID in .mcp.json

The .mcp.json hardcodes "SLACK_TEAM_ID": "TKZBCKUJJ" (Uniswap's team ID). The README and CLAUDE.md docs say SLACK_TEAM_ID is "Optional, defaults to TKZBCKUJJ." This is consistent — the plugin is Uniswap-specific so hardcoding their team ID makes sense. External users would need to override via environment variable.

Verdict

No bugs, security issues, or data corruption risks. The migration is clean and thorough. The plugin.json description/keywords not mentioning Slack is a minor documentation inconsistency but not blocking.


ℹ️ 1 comment(s) on unchanged code

The following feedback is on lines that weren't modified in this PR:

packages/plugins/uniswap-integrations/.claude-plugin/plugin.json:10
The keywords array is missing "slack" — adding it would match the other MCP servers listed and improve discoverability.


💡 Want a fresh review? Add a comment containing @request-claude-review to trigger a new review at any time.

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📋 Review verdict: APPROVE

👆 The main review comment above is the source of truth for this PR review. It is automatically updated on each review cycle, so always refer to it for the most current feedback.

This formal review submission is for the verdict only. 1 inline comment(s) are attached below.

"name": "uniswap-integrations",
"version": "2.0.1",
"version": "2.1.0",
"description": "External service integrations (Linear, Notion, Nx, Chrome DevTools, GitHub) and deployment orchestration",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The description field doesn't mention Slack, but both CLAUDE.md and README.md were updated to include it. Since this is the marketplace-facing description, consider updating it for consistency.

Suggested change
"description": "External service integrations (Linear, Notion, Nx, Chrome DevTools, GitHub) and deployment orchestration",
"description": "External service integrations (Linear, Notion, Nx, Chrome DevTools, GitHub, Slack) and deployment orchestration",

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f40ba09a38

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +61 to +65
// Priority 2: Legacy location (~/.claude.json)
paths.push(path.join(os.homedir(), '.claude.json'));

// Priority 3: New default user location (~/.claude/claude.json)
paths.push(path.join(os.homedir(), '.claude', 'claude.json'));

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid falling back outside active Claude config dir

When CLAUDE_CONFIG_DIR is set, getAllClaudeConfigPaths() still appends ~/.claude.json and ~/.claude/claude.json, so getCurrentToken() can return a token from a different profile. In that case, validateAndRefreshSlackToken() may treat Slack as healthy and exit early, leaving the active $CLAUDE_CONFIG_DIR/claude.json without SLACK_BOT_TOKEN, which breaks Slack MCP for users running Claude with the custom config dir. Restrict fallback reads to the active profile (or track and update the source path you read from).

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant