A terminal session reaching a company Slack and two client workspaces through one Carly MCP server

Connect Multiple Slack Workspaces to Claude Code

One Claude Code session can read all of your Slack workspaces at once. Connect each workspace to Carly, register one MCP server, and the terminal covers every one of them.

Claude Code’s own route to Slack fails in a specific place. Slack’s developer documentation tells Claude Code users to install the slack plugin, which writes an .mcp.json entry pointing at Slack’s hosted server and sends you through an OAuth flow for one workspace. Claude Code stores what comes back in ~/.claude/.credentials.json under one key per server URL. A closed feature request on the Claude Code GitHub repository, filed in March 2026 and marked not planned, spells out the cost: installing the Slack plugin with --scope project in two projects for two different workspaces still shares one credential, so authenticating into one workspace overwrites the token for the other. A separate request, open since April 2026, says the same about the connectors Claude Code inherits from your claude.ai account on a subscription login: the built-in Slack connector supports only one workspace per Claude account, with no way to add a second through the UI or configuration.

The workspace count is therefore a property of the server you register, never a Claude Code setting.

1. Add your Slack workspaces to Carly

  1. Sign in at carlyassistant.com.
  2. Open carlyassistant.com/integrations.
  3. Find Slack, click Connect, and authorize the workspace.
  4. Click Connect again for the next one, and keep going for as many workspaces as you want.

Slack preselects the workspace you used last, so read the workspace name at the top of the consent screen before approving, and confirm both names are listed afterwards.

Client and community workspaces you joined as a guest connect the same way. Carly reaches only the channels your Slack account can already open, so a private channel you are not in stays invisible.

If a workspace restricts app installation, a Slack owner or admin approves Carly once for that workspace. Approval at your own company says nothing about a client’s, and Slack documents Enterprise Grid the same way: an app is installed on a workspace, or granted access to some or all workspaces by an org admin. Each one decides separately.

Carly connects to thousands of apps, so while you are on that page you can add your inboxes, calendars, files and CRM, and reach them from the same server.

2. Register Carly as an MCP server

Carly is a remote HTTP server, so one command does it:

claude mcp add --transport http --scope user carly https://carlyassistant.com/mcp/

--scope user stores the entry in ~/.claude.json and loads it in every project, which is what you want when the workspaces span clients. Leave the flag off and it lands in local scope, available only in the directory where you added it. --scope project writes a committed .mcp.json instead, which suits a server a team shares.

Then authenticate:

claude mcp login carly

That opens a browser for the OAuth flow. Sign in to the Carly account holding your Slack workspaces. The /mcp panel inside a session runs the same flow, and claude mcp login carly --no-browser prints the URL instead, which is what you want over SSH.

Confirm it before moving on:

claude mcp list

✔ Connected means you are ready. ! Needs authentication means the browser flow did not finish, and ✘ Failed to connect points at the URL or the network rather than your Carly account.

What one session can do afterwards

  • “Check all my Slack workspaces for anything about the Stripe integration since Friday and list who is waiting on me.”
  • Pull the week’s decisions out of internal and client channels together, with the source workspace stated on every line.
  • Search every workspace for the thread that explains a failing deploy, instead of guessing which company discussed it.
  • Summarize a thread in one workspace and post the summary into a channel in another.
  • Read a Slack message and act on it: file the task, answer in the thread, or start the workflow it asks for.
  • Match a Slack thread against the mailboxes and calendars connected in the same Carly account.

Nothing is merged. Each workspace keeps its own authorization and its own permissions, and every result reports the workspace it came from.

Why a Slack server per workspace falls apart

The do-it-yourself route is a community Slack MCP server per workspace, each holding a bot or user token in an environment variable. Multi-workspace forks exist and work, but they hand the problem back to you: a Slack app created by hand per workspace, a fixed set of OAuth scopes on each, tokens named by convention in your shell config, and a rotation you own forever.

Emily Parker, running her own company Slack alongside client workspaces at Adobe and Databricks, is not managing one integration with three logins. She is managing three server entries, three Slack apps and three approval chains owned by admins she has never met.

An earlier report on the same GitHub repository, since closed as a duplicate, adds the reason this is not a quick fix: it described Claude Code failing to authenticate against Slack’s hosted server because of a mismatch in how the two sides handle OAuth client registration, and noted that Slack permits MCP access only from apps published to its App Directory or registered as internal workspace apps. The plugin route works because a registered app sits behind it. A server you build yourself does not get that for free.

Carly is one server entry and one sign-in for all of your workspaces, so the fourth client changes nothing in your config.

The part that outlives the session

Terminal sessions end. Slack does not. The client question that arrives at 7pm, the deploy thread nobody summarized, the standup that needs three answers pulled from three companies: all of it recurs, and none of it should depend on a window being open.

That work belongs in a Carly workflow or a Carly agent, which runs with nothing open and no session attached. Carly treats each connected workspace as its own trigger source, so a rule can fire on a message in the client’s #support channel and stay silent on your internal one. Claude Code then becomes the place you go to ask sharp questions about work that already happened.

One detail matters if you want Carly inside a Claude Code routine. Routines run in the cloud and draw their connectors from your claude.ai account, while a server added locally with claude mcp add lives on your machine, so add Carly at claude.ai/customize/connectors as well, or commit it in .mcp.json so it travels with the cloned repository. Routines also start from a schedule, a GitHub event or an API call you make, and every one of them needs a repository, so none of them notices a client posting in Slack.

Shared workspaces wired up across a whole team are available too: book a call.

Per-workspace Slack servers versus Carly in Claude Code

NeedSlack plugin or per-workspace serversCarly MCP server
Reach one workspaceYesYes
Keep several workspaces connected at onceOne token per server URLOne server, all of them
Search across workspaces in one questionNoYes
Post into a chosen channel in a chosen workspaceThe connected workspace onlyYes, within that workspace’s permissions
Create and maintain Slack apps and scopesUsually requiredNo
Add a fourth workspace laterNew app, new server entryNo config change
Combine Slack with mail and calendar accountsSeparate serversOne question
Keep the work running with the terminal closedNoYes

Carly gives Claude Code one workspace-aware Slack toolset instead of a stack of per-workspace servers. Carly offers free Zapier-style workflows; AI agents start at $35/month.

Quick fixes when a workspace does not appear

ProblemFix
The second workspace replaced the firstExpected on the plugin route, since one credential is stored per server URL. Keep every workspace in Carly instead
Server shows ! Needs authenticationRun claude mcp login carly and finish the browser flow
Server missing in another projectRe-add with --scope user, or move the entry out of local scope
claude -p reports the tools are unavailableSign in interactively once with /mcp, then rerun the script
Slack authorized the wrong workspaceCheck the workspace name on Slack’s consent screen and reconnect
A private channel is missingConfirm the connected account is a member, then reconnect
A workspace blocks app installationAsk a Slack owner or admin to approve Carly for that workspace
Only some workspaces answeredAsk for all of them explicitly and require source attribution

Frequently asked questions

Can Claude Code connect two Slack workspaces natively?

Not on either native path. The plugin stores one credential per server URL, so a second authorization replaces the first, and the connectors inherited from claude.ai hold one workspace per Claude account. Connect every workspace to Carly and register Carly once, and a single session works across all of them.

Do I need to build my own Slack MCP server?

That is the documented workaround, and it means a hand-created Slack app, a fixed set of OAuth scopes and a token to rotate for each workspace. Connecting each workspace to Carly skips the whole setup.

Does this work for client workspaces I joined as a guest?

Yes, within your existing permissions. Carly reads the channels and DMs your Slack account can already see, and nothing beyond them.

What about Enterprise Grid?

Slack installs apps on a workspace, or an org admin grants an app access to chosen workspaces, so workspaces in the same organization still authorize separately. Carly holds each one as its own connection.

Will this work in a non-interactive run?

Yes, once you have signed in. Claude Code cannot run an OAuth flow during a claude -p run, so complete claude mcp login carly from an interactive session first and the script inherits the stored token.

Should I use Claude Code for Slack work?

For scripted or one-off questions from a terminal, it is a genuine fit. Recurring sweeps, summaries and replies belong in a Carly workflow that runs without a session open.


Related: Multiple Slack workspaces in Claude · Multiple email accounts in Claude Code · Multiple Google Drive accounts in Claude Code · Claude Code MCP · Slack MCP · Best AI assistants for multiple Slack workspaces · Carly’s Slack integration

Ready to automate your busywork?

Carly schedules, researches, and briefs you—so you can focus on what matters.

See what people say

"Before Carly, I relied on a Calendly link, but the whole process felt impersonal and not very professional. Carly changed that by handling all the back-and-forth, so I'm no longer stuck in endless email threads trying to line up schedules.

Now Carly reaches out to candidates, shares my real-time availability, lets them pick a slot, then sends a Zoom link and drops it straight into my calendar. She sends reminders to both of us before each call, which has significantly reduced no-shows and last-minute confusion.

On top of scheduling, Carly acts like a full executive assistant, sending me my schedule the night before so I can prepare for each call. It reminds me of the old x.ai assistant, but Carly is noticeably smarter, faster, and better suited to my healthcare recruitment business."

Gus Ibrahim, Founder & Director, IHR